@solace-health/ui 0.10.714 → 0.10.716
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-56QUGWYC.cjs +2 -0
- package/dist/chunk-56QUGWYC.cjs.map +1 -0
- package/dist/chunk-FBI5GRK6.js +2 -0
- package/dist/chunk-FBI5GRK6.js.map +1 -0
- package/dist/chunk-G3FLAJTT.js +2 -0
- package/dist/chunk-G3FLAJTT.js.map +1 -0
- package/dist/chunk-GGY7YX5J.cjs +2 -0
- package/dist/chunk-GGY7YX5J.cjs.map +1 -0
- package/dist/{chunk-IJ7FBO3U.cjs → chunk-HOL5IAQB.cjs} +2 -2
- package/dist/{chunk-IJ7FBO3U.cjs.map → chunk-HOL5IAQB.cjs.map} +1 -1
- package/dist/{chunk-VAKTF34U.cjs → chunk-PBVKIV4W.cjs} +2 -2
- package/dist/{chunk-VAKTF34U.cjs.map → chunk-PBVKIV4W.cjs.map} +1 -1
- package/dist/chunk-PKA77LCP.cjs +2 -0
- package/dist/chunk-PKA77LCP.cjs.map +1 -0
- package/dist/{chunk-RO2VXW7E.js → chunk-RXTVQ2XW.js} +2 -2
- package/dist/{chunk-RO2VXW7E.js.map → chunk-RXTVQ2XW.js.map} +1 -1
- package/dist/chunk-SYJ2NNZY.js +2 -0
- package/dist/chunk-SYJ2NNZY.js.map +1 -0
- package/dist/{chunk-V3BTA2FJ.js → chunk-WWOWTLLE.js} +2 -2
- package/dist/{chunk-V3BTA2FJ.js.map → chunk-WWOWTLLE.js.map} +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/v2/address-input/address-input.cjs +1 -1
- package/dist/v2/address-input/address-input.js +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/dropzone/dropzone.cjs +1 -1
- package/dist/v2/dropzone/dropzone.d.ts +15 -2
- package/dist/v2/dropzone/dropzone.js +1 -1
- package/dist/v2/file-upload/file-upload.cjs +2 -0
- package/dist/v2/file-upload/file-upload.cjs.map +1 -0
- package/dist/v2/file-upload/file-upload.d.ts +28 -0
- package/dist/v2/file-upload/file-upload.js +2 -0
- package/dist/v2/file-upload/file-upload.js.map +1 -0
- package/dist/v2/file-upload/file-upload.stories.d.ts +13 -0
- 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.d.ts +1 -0
- package/dist/v2/index.js +1 -1
- package/dist/v2/multiselect/multiselect.cjs +1 -1
- package/dist/v2/multiselect/multiselect.js +1 -1
- package/dist/v2/tabs/tabs.cjs +1 -1
- package/dist/v2/tabs/tabs.d.ts +3 -3
- package/dist/v2/tabs/tabs.js +1 -1
- package/dist/v2/tabs/tabs.stories.d.ts +1 -0
- package/dist/v2/time-select/time-select.cjs +1 -1
- package/dist/v2/time-select/time-select.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-AQ4VGD3O.js +0 -2
- package/dist/chunk-AQ4VGD3O.js.map +0 -1
- package/dist/chunk-JGMQQIHW.cjs +0 -2
- package/dist/chunk-JGMQQIHW.cjs.map +0 -1
- package/dist/chunk-YTBMUEFX.cjs +0 -2
- package/dist/chunk-YTBMUEFX.cjs.map +0 -1
- package/dist/chunk-YVZANY6B.js +0 -2
- package/dist/chunk-YVZANY6B.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/date-picker/date-picker.tsx","../src/v2/date-picker/date-picker-input.tsx","../src/v2/image-preview/image-preview.tsx","../src/v2/time-select/time-select.tsx","../src/v2/address-input/address-input.tsx"],"names":["dayjs","customParseFormat","DISPLAY_FORMAT","INPUT_MASK","ACCEPTED_INPUT_FORMATS","formatDate","date","DatePicker","className","wrapperClassName","value","onChange","disabled","calendarProps","placeholderProp","inputProps","showCalendarIcon","editable","open","setOpen","useState","placeholder","navigatedMonth","setNavigatedMonth","prevValueForMonth","useRef","calendarMonth","isDateAllowed","isMatch","onChangeRef","isDateAllowedRef","maskRef","setMaskValue","useIMask","maskedValue","parsed","handleSelect","val","handlePaste","e","pasted","handleFocus","handleBlur","current","inputClasses","cn","inputVariants","jsxs","Popover","jsx","PopoverTrigger","Input","LuCalendar","PopoverContent","Calendar","maskDate","digits","parseDate","parts","month","day","year","DatePickerInput","variant","setMonth","inputValue","setInputValue","lastSyncedRef","useEffect","formatted","handleInputChange","masked","handleKeyDown","Button","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","triggerIcon","getSublabel","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","Select","SelectTrigger","SelectValue","SelectContent","sublabel","SelectItem","time_select_default","getAddressAttributes","result","city","state","streetNumber","streetName","unit","zip","component","type","escaped","descriptorMatch","lat","long","street","MIN_ADDRESS_LENGTH","AddressInputInternal","onSelectAddress","rest","dropdownRef","listboxIdRef","highlightedIndex","setHighlightedIndex","data","setValue","clearSuggestions","usePlacesAutocomplete","closeSuggestions","useCallback","handleClickOutside","event","handleEscape","handleAddressSelect","address","getGeocode","results","formattedResults","handleAddressOnChange","highlightedOptionId","next","suggestion","index","optionId","isHighlighted","libraries","AddressInput","googleMapsApiKey","props","isLoaded","loadError","useLoadScript"],"mappings":"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","file":"chunk-IJ7FBO3U.cjs","sourcesContent":["import { ComponentProps, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport { useIMask } from 'react-imask';\nimport { isMatch } from 'react-day-picker';\nimport { Calendar, Input, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '@/v2/input/input';\nimport type { InputProps } from '@/v2/input/input';\n\ndayjs.extend(customParseFormat);\n\n/** Display and input format for dates. Also used as the placeholder when `editable` is true. */\nconst DISPLAY_FORMAT = 'MM/DD/YYYY';\n\n/** IMask pattern — each `0` is a required digit, slashes are fixed literals. */\nconst INPUT_MASK = '00/00/0000';\n\n/**\n * Formats accepted when parsing typed or pasted input (dayjs strict mode).\n * Ordered from most specific to least specific to avoid ambiguous matches.\n */\nconst ACCEPTED_INPUT_FORMATS = ['MM/DD/YYYY', 'MM/D/YYYY', 'M/DD/YYYY', 'M/D/YYYY', 'YYYY-MM-DD'];\n\nexport type DatePickerProps = {\n /** Additional class name(s) applied to the input element. */\n className?: string;\n /** Additional class name(s) applied to the outer popover trigger wrapper. */\n wrapperClassName?: string;\n /** The currently selected date. `undefined` means no date is selected. */\n value?: Date;\n /** Called when the selected date changes. Receives `undefined` when the date is cleared. */\n onChange?: (value: Date | undefined) => void;\n /** When `true`, the picker is non-interactive. */\n disabled?: boolean;\n /**\n * Props forwarded to the underlying `Calendar` component (react-day-picker).\n * Use `disabled` within this object to restrict selectable dates — these\n * constraints apply to both calendar clicks and typed input when `editable` is `true`.\n *\n * @example\n * ```tsx\n * <DatePicker calendarProps={{ disabled: [{ before: new Date() }] }} />\n * ```\n */\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n /**\n * Input placeholder text. Defaults to `\"Pick a date\"` in read-only mode\n * and `\"MM/DD/YYYY\"` when `editable` is `true`.\n */\n placeholder?: string;\n /** Props forwarded to the underlying `Input` component. */\n inputProps?: InputProps;\n /** Whether to show the calendar icon inside the input. @default true */\n showCalendarIcon?: boolean;\n /**\n * When `true`, the input accepts typed and pasted dates in `MM/DD/YYYY` format.\n * Slashes are auto-inserted, non-numeric characters are rejected, and common\n * formats like `M/D/YYYY` and `YYYY-MM-DD` are accepted on paste.\n * Dates that fall in `calendarProps.disabled` ranges are rejected.\n *\n * When `false` (default), the input is read-only and dates can only be\n * selected via the calendar popover.\n *\n * @default false\n */\n editable?: boolean;\n};\n\nfunction formatDate(date: Date | undefined): string {\n return date ? dayjs(date).format(DISPLAY_FORMAT) : '';\n}\n\n/**\n * A date picker that combines a text input with a calendar popover.\n *\n * By default the input is read-only — dates are selected via the calendar.\n * Set `editable` to allow typing or pasting dates in `MM/DD/YYYY` format.\n */\nexport function DatePicker({\n className = '',\n wrapperClassName = '',\n value = undefined,\n onChange = undefined,\n disabled = false,\n calendarProps = undefined,\n placeholder: placeholderProp,\n inputProps = undefined,\n showCalendarIcon = true,\n editable = false,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const placeholder = placeholderProp ?? (editable ? DISPLAY_FORMAT : 'Pick a date');\n\n // Calendar month: derived from value, with user navigation override.\n // When value changes, navigation resets to the new value's month.\n const [navigatedMonth, setNavigatedMonth] = useState<Date | undefined>(undefined);\n const prevValueForMonth = useRef(value);\n if (value !== prevValueForMonth.current) {\n prevValueForMonth.current = value;\n if (navigatedMonth !== undefined) {\n setNavigatedMonth(undefined);\n }\n }\n const calendarMonth = navigatedMonth ?? value;\n\n const isDateAllowed = (date: Date): boolean => {\n if (!calendarProps?.disabled) {\n return true;\n }\n return !isMatch(date, calendarProps.disabled);\n };\n\n // Refs ensure IMask callbacks always see the latest values without re-creating the mask\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const isDateAllowedRef = useRef(isDateAllowed);\n isDateAllowedRef.current = isDateAllowed;\n\n const { ref: maskRef, setValue: setMaskValue } = useIMask<HTMLInputElement>(\n { mask: INPUT_MASK, lazy: true, overwrite: false },\n {\n onComplete: (maskedValue) => {\n const parsed = dayjs(maskedValue, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowedRef.current(parsed.toDate())) {\n onChangeRef.current?.(parsed.toDate());\n }\n },\n },\n );\n\n const handleSelect = (val: Date | undefined) => {\n onChange?.(val);\n setMaskValue(formatDate(val));\n setOpen(false);\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text').trim();\n const parsed = dayjs(pasted, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n e.preventDefault();\n const date = parsed.toDate();\n onChange?.(date);\n setMaskValue(formatDate(date));\n }\n // If we can't parse it, let IMask handle it naturally\n };\n\n const handleFocus = () => {\n // Sync the mask to the current value on focus — handles external parent resets\n setMaskValue(formatDate(value));\n };\n\n const handleBlur = () => {\n const current = maskRef.current?.value ?? '';\n if (current === '') {\n if (value !== undefined) {\n onChange?.(undefined);\n }\n return;\n }\n const parsed = dayjs(current, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n onChange?.(parsed.toDate());\n }\n // Revert to last valid display value\n setMaskValue(formatDate(value));\n };\n\n const inputClasses = cn(\n inputVariants(),\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n );\n\n return (\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div className={cn('relative flex w-full items-center rounded-md', wrapperClassName)}>\n {editable ? (\n <input\n ref={maskRef}\n defaultValue={formatDate(value)}\n className={inputClasses}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onBlur={(e) => {\n handleBlur();\n inputProps?.onBlur?.(e);\n }}\n />\n ) : (\n <Input\n className={cn(\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n )}\n {...inputProps}\n value={formatDate(value)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n />\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 </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto overflow-hidden p-0\"\n align=\"start\"\n onOpenAutoFocus={editable ? (e) => e.preventDefault() : undefined}\n >\n <Calendar\n mode=\"single\"\n selected={value ? dayjs(value).toDate() : undefined}\n onSelect={handleSelect}\n {...(editable ? { month: calendarMonth, onMonthChange: setNavigatedMonth } : {})}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n );\n}\n","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 type { ReactElement, ReactNode } 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 triggerIcon?: ReactElement;\n getSublabel?: (interval: Interval) => ReactNode;\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 triggerIcon,\n getSublabel,\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 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\n className={cn('max-w-[240px] md:w-[150px]', className)}\n size={size}\n triggerIcon={triggerIcon}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {intervals.map((time) => {\n const sublabel = getSublabel?.(time);\n return (\n <SelectItem\n className={cn(sublabel ? 'h-auto py-2' : 'h-10')}\n key={time.value.raw}\n value={time.value.raw}\n sublabel={sublabel}\n >\n {time.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n","import usePlacesAutocomplete, { type GeocodeResult, getGeocode } from 'use-places-autocomplete';\nimport { type ComponentProps, useCallback, useEffect, useRef, useState } from 'react';\nimport { useLoadScript } from '@react-google-maps/api';\nimport { Input } from '@/v2';\n\nexport type AddressResults = {\n city: string;\n state: string;\n street: string;\n unit: string;\n zip: string;\n lat: number;\n long: number;\n};\n\nexport const getAddressAttributes = (result: GeocodeResult): AddressResults => {\n let city = '';\n let state = '';\n let streetNumber = '';\n let streetName = '';\n let unit = '';\n let zip = '';\n\n result.address_components.forEach((component) => {\n component.types.some((type) => {\n switch (type) {\n case 'locality':\n city = component.long_name; // Always prefer locality\n return true;\n case 'sublocality':\n case 'administrative_area_level_3':\n case 'neighborhood':\n city = city || component.long_name; // sets if no city\n return true;\n case 'administrative_area_level_1':\n state = component.short_name;\n return true;\n case 'street_number':\n streetNumber = component.short_name;\n return true;\n case 'route':\n streetName = component.short_name;\n return true;\n case 'subpremise':\n unit = component.long_name;\n return true;\n case 'postal_code':\n zip = component.short_name;\n return true;\n default:\n return false;\n }\n });\n });\n\n // Google's subpremise is the bare value (e.g. \"4\"), and its descriptor (Apt/Suite/#) only appears in formatted_address\n if (unit) {\n const escaped = unit.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const descriptorMatch = result.formatted_address?.match(\n new RegExp(\n `(?<![A-Za-z])(?:Apt|Apartment|Suite|Ste|Unit|Bldg|Building|Fl|Floor|Rm|Room|Lot|Space|Spc|Trlr|Trailer|#)\\\\.?\\\\s*#?\\\\s*${escaped}\\\\b`,\n 'i',\n ),\n );\n\n if (descriptorMatch) {\n unit = descriptorMatch[0].trim();\n }\n }\n\n const lat = result.geometry.location.lat();\n const long = result.geometry.location.lng();\n const street = `${streetNumber} ${streetName}`.trim();\n\n return { city, state, street, unit, zip, lat, long };\n};\n\ntype InputProps = ComponentProps<typeof Input>;\n\ntype AddressInputProps = InputProps & {\n onSelectAddress?: (results: AddressResults) => void;\n};\n\nconst MIN_ADDRESS_LENGTH = 2;\n\nexport const AddressInputInternal = ({\n onSelectAddress = undefined,\n ...rest\n}: AddressInputProps) => {\n const dropdownRef = useRef<HTMLDivElement>(null);\n const listboxIdRef = useRef(`address-input-${Math.random().toString(36).slice(2)}-listbox`);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const {\n suggestions: { data = [] },\n setValue,\n clearSuggestions,\n } = usePlacesAutocomplete({\n requestOptions: {\n componentRestrictions: { country: 'us' },\n },\n });\n\n const closeSuggestions = useCallback(() => {\n clearSuggestions();\n setHighlightedIndex(-1);\n }, [clearSuggestions]);\n\n // Handle click outside to close suggestions\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n closeSuggestions();\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeSuggestions();\n }\n };\n\n if (data.length > 0) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [data.length, closeSuggestions]);\n\n useEffect(() => {\n if (data.length === 0) {\n setHighlightedIndex(-1);\n } else {\n setHighlightedIndex((current) => {\n if (current < 0) {\n return current;\n }\n\n return Math.min(current, data.length - 1);\n });\n }\n }, [data.length]);\n\n const handleAddressSelect = (address: string) => {\n setValue(address, false);\n closeSuggestions();\n\n if (address.length <= MIN_ADDRESS_LENGTH) {\n return;\n }\n\n getGeocode({ address }).then((results) => {\n if (!results || results.length === 0) {\n return;\n }\n\n const formattedResults = getAddressAttributes(results[0]);\n onSelectAddress?.(formattedResults);\n });\n };\n\n const handleAddressOnChange = useCallback(\n (inputValue: string) => {\n setValue(inputValue);\n setHighlightedIndex(-1);\n },\n [setValue],\n );\n\n const highlightedOptionId =\n highlightedIndex >= 0 ? `${listboxIdRef.current}-option-${highlightedIndex}` : undefined;\n\n return (\n <div className=\"relative\">\n <Input\n {...rest}\n onChange={(e) => {\n rest.onChange?.(e);\n handleAddressOnChange(e.target.value);\n }}\n onKeyDown={(e) => {\n rest.onKeyDown?.(e);\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (!data.length) {\n if (e.key === 'Escape') {\n closeSuggestions();\n }\n return;\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setHighlightedIndex((current) => {\n const next = current + 1;\n if (next >= data.length || next < 0) {\n return 0;\n }\n return next;\n });\n return;\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setHighlightedIndex((current) => {\n if (current <= 0) {\n return data.length - 1;\n }\n return current - 1;\n });\n return;\n }\n\n if (e.key === 'Enter' && highlightedIndex >= 0) {\n e.preventDefault();\n const suggestion = data[highlightedIndex];\n if (suggestion) {\n handleAddressSelect(suggestion.description);\n }\n return;\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n closeSuggestions();\n }\n }}\n role=\"combobox\"\n aria-expanded={data.length > 0}\n aria-controls={data.length > 0 ? listboxIdRef.current : undefined}\n aria-activedescendant={highlightedOptionId}\n aria-autocomplete=\"list\"\n />\n {data.length > 0 && (\n <div\n ref={dropdownRef}\n id={listboxIdRef.current}\n role=\"listbox\"\n className=\"z-modal-stacking-context absolute mt-1 max-h-60 w-full overflow-auto rounded-md border border-gray-200 bg-white shadow-lg\"\n >\n {data.map((suggestion, index) => {\n const optionId = `${listboxIdRef.current}-option-${index}`;\n const isHighlighted = index === highlightedIndex;\n\n return (\n <div\n key={suggestion.place_id}\n id={optionId}\n role=\"option\"\n aria-selected={isHighlighted}\n tabIndex={-1}\n className={`cursor-pointer px-3 py-2 text-sm hover:bg-green-100 ${\n isHighlighted ? 'bg-green-100' : ''\n }`}\n onMouseEnter={() => setHighlightedIndex(index)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => handleAddressSelect(suggestion.description)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleAddressSelect(suggestion.description);\n }\n }}\n >\n {suggestion.description}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nconst libraries: ['places'] = ['places'];\n\nexport const AddressInput = ({\n googleMapsApiKey,\n onSelectAddress = undefined,\n ...props\n}: AddressInputProps & { googleMapsApiKey: string }) => {\n const { isLoaded, loadError } = useLoadScript({\n googleMapsApiKey,\n libraries,\n });\n // if not loaded or error, return regular input\n if (!isLoaded || loadError) {\n return <Input {...props} />;\n }\n return <AddressInputInternal onSelectAddress={onSelectAddress} {...props} />;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/v2/date-picker/date-picker.tsx","../src/v2/date-picker/date-picker-input.tsx","../src/v2/image-preview/image-preview.tsx","../src/v2/time-select/time-select.tsx","../src/v2/address-input/address-input.tsx"],"names":["dayjs","customParseFormat","DISPLAY_FORMAT","INPUT_MASK","ACCEPTED_INPUT_FORMATS","formatDate","date","DatePicker","className","wrapperClassName","value","onChange","disabled","calendarProps","placeholderProp","inputProps","showCalendarIcon","editable","open","setOpen","useState","placeholder","navigatedMonth","setNavigatedMonth","prevValueForMonth","useRef","calendarMonth","isDateAllowed","isMatch","onChangeRef","isDateAllowedRef","maskRef","setMaskValue","useIMask","maskedValue","parsed","handleSelect","val","handlePaste","e","pasted","handleFocus","handleBlur","current","inputClasses","cn","inputVariants","jsxs","Popover","jsx","PopoverTrigger","Input","LuCalendar","PopoverContent","Calendar","maskDate","digits","parseDate","parts","month","day","year","DatePickerInput","variant","setMonth","inputValue","setInputValue","lastSyncedRef","useEffect","formatted","handleInputChange","masked","handleKeyDown","Button","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","triggerIcon","getSublabel","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","Select","SelectTrigger","SelectValue","SelectContent","sublabel","SelectItem","time_select_default","getAddressAttributes","result","city","state","streetNumber","streetName","unit","zip","component","type","escaped","descriptorMatch","lat","long","street","MIN_ADDRESS_LENGTH","AddressInputInternal","onSelectAddress","rest","dropdownRef","listboxIdRef","highlightedIndex","setHighlightedIndex","data","setValue","clearSuggestions","usePlacesAutocomplete","closeSuggestions","useCallback","handleClickOutside","event","handleEscape","handleAddressSelect","address","getGeocode","results","formattedResults","handleAddressOnChange","highlightedOptionId","next","suggestion","index","optionId","isHighlighted","libraries","AddressInput","googleMapsApiKey","props","isLoaded","loadError","useLoadScript"],"mappings":"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","file":"chunk-HOL5IAQB.cjs","sourcesContent":["import { ComponentProps, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport { useIMask } from 'react-imask';\nimport { isMatch } from 'react-day-picker';\nimport { Calendar, Input, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '@/v2/input/input';\nimport type { InputProps } from '@/v2/input/input';\n\ndayjs.extend(customParseFormat);\n\n/** Display and input format for dates. Also used as the placeholder when `editable` is true. */\nconst DISPLAY_FORMAT = 'MM/DD/YYYY';\n\n/** IMask pattern — each `0` is a required digit, slashes are fixed literals. */\nconst INPUT_MASK = '00/00/0000';\n\n/**\n * Formats accepted when parsing typed or pasted input (dayjs strict mode).\n * Ordered from most specific to least specific to avoid ambiguous matches.\n */\nconst ACCEPTED_INPUT_FORMATS = ['MM/DD/YYYY', 'MM/D/YYYY', 'M/DD/YYYY', 'M/D/YYYY', 'YYYY-MM-DD'];\n\nexport type DatePickerProps = {\n /** Additional class name(s) applied to the input element. */\n className?: string;\n /** Additional class name(s) applied to the outer popover trigger wrapper. */\n wrapperClassName?: string;\n /** The currently selected date. `undefined` means no date is selected. */\n value?: Date;\n /** Called when the selected date changes. Receives `undefined` when the date is cleared. */\n onChange?: (value: Date | undefined) => void;\n /** When `true`, the picker is non-interactive. */\n disabled?: boolean;\n /**\n * Props forwarded to the underlying `Calendar` component (react-day-picker).\n * Use `disabled` within this object to restrict selectable dates — these\n * constraints apply to both calendar clicks and typed input when `editable` is `true`.\n *\n * @example\n * ```tsx\n * <DatePicker calendarProps={{ disabled: [{ before: new Date() }] }} />\n * ```\n */\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n /**\n * Input placeholder text. Defaults to `\"Pick a date\"` in read-only mode\n * and `\"MM/DD/YYYY\"` when `editable` is `true`.\n */\n placeholder?: string;\n /** Props forwarded to the underlying `Input` component. */\n inputProps?: InputProps;\n /** Whether to show the calendar icon inside the input. @default true */\n showCalendarIcon?: boolean;\n /**\n * When `true`, the input accepts typed and pasted dates in `MM/DD/YYYY` format.\n * Slashes are auto-inserted, non-numeric characters are rejected, and common\n * formats like `M/D/YYYY` and `YYYY-MM-DD` are accepted on paste.\n * Dates that fall in `calendarProps.disabled` ranges are rejected.\n *\n * When `false` (default), the input is read-only and dates can only be\n * selected via the calendar popover.\n *\n * @default false\n */\n editable?: boolean;\n};\n\nfunction formatDate(date: Date | undefined): string {\n return date ? dayjs(date).format(DISPLAY_FORMAT) : '';\n}\n\n/**\n * A date picker that combines a text input with a calendar popover.\n *\n * By default the input is read-only — dates are selected via the calendar.\n * Set `editable` to allow typing or pasting dates in `MM/DD/YYYY` format.\n */\nexport function DatePicker({\n className = '',\n wrapperClassName = '',\n value = undefined,\n onChange = undefined,\n disabled = false,\n calendarProps = undefined,\n placeholder: placeholderProp,\n inputProps = undefined,\n showCalendarIcon = true,\n editable = false,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const placeholder = placeholderProp ?? (editable ? DISPLAY_FORMAT : 'Pick a date');\n\n // Calendar month: derived from value, with user navigation override.\n // When value changes, navigation resets to the new value's month.\n const [navigatedMonth, setNavigatedMonth] = useState<Date | undefined>(undefined);\n const prevValueForMonth = useRef(value);\n if (value !== prevValueForMonth.current) {\n prevValueForMonth.current = value;\n if (navigatedMonth !== undefined) {\n setNavigatedMonth(undefined);\n }\n }\n const calendarMonth = navigatedMonth ?? value;\n\n const isDateAllowed = (date: Date): boolean => {\n if (!calendarProps?.disabled) {\n return true;\n }\n return !isMatch(date, calendarProps.disabled);\n };\n\n // Refs ensure IMask callbacks always see the latest values without re-creating the mask\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const isDateAllowedRef = useRef(isDateAllowed);\n isDateAllowedRef.current = isDateAllowed;\n\n const { ref: maskRef, setValue: setMaskValue } = useIMask<HTMLInputElement>(\n { mask: INPUT_MASK, lazy: true, overwrite: false },\n {\n onComplete: (maskedValue) => {\n const parsed = dayjs(maskedValue, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowedRef.current(parsed.toDate())) {\n onChangeRef.current?.(parsed.toDate());\n }\n },\n },\n );\n\n const handleSelect = (val: Date | undefined) => {\n onChange?.(val);\n setMaskValue(formatDate(val));\n setOpen(false);\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text').trim();\n const parsed = dayjs(pasted, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n e.preventDefault();\n const date = parsed.toDate();\n onChange?.(date);\n setMaskValue(formatDate(date));\n }\n // If we can't parse it, let IMask handle it naturally\n };\n\n const handleFocus = () => {\n // Sync the mask to the current value on focus — handles external parent resets\n setMaskValue(formatDate(value));\n };\n\n const handleBlur = () => {\n const current = maskRef.current?.value ?? '';\n if (current === '') {\n if (value !== undefined) {\n onChange?.(undefined);\n }\n return;\n }\n const parsed = dayjs(current, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n onChange?.(parsed.toDate());\n }\n // Revert to last valid display value\n setMaskValue(formatDate(value));\n };\n\n const inputClasses = cn(\n inputVariants(),\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n );\n\n return (\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div className={cn('relative flex w-full items-center rounded-md', wrapperClassName)}>\n {editable ? (\n <input\n ref={maskRef}\n defaultValue={formatDate(value)}\n className={inputClasses}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onBlur={(e) => {\n handleBlur();\n inputProps?.onBlur?.(e);\n }}\n />\n ) : (\n <Input\n className={cn(\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n )}\n {...inputProps}\n value={formatDate(value)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n />\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 </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto overflow-hidden p-0\"\n align=\"start\"\n onOpenAutoFocus={editable ? (e) => e.preventDefault() : undefined}\n >\n <Calendar\n mode=\"single\"\n selected={value ? dayjs(value).toDate() : undefined}\n onSelect={handleSelect}\n {...(editable ? { month: calendarMonth, onMonthChange: setNavigatedMonth } : {})}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n );\n}\n","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 type { ReactElement, ReactNode } 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 triggerIcon?: ReactElement;\n getSublabel?: (interval: Interval) => ReactNode;\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 triggerIcon,\n getSublabel,\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 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\n className={cn('max-w-[240px] md:w-[150px]', className)}\n size={size}\n triggerIcon={triggerIcon}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {intervals.map((time) => {\n const sublabel = getSublabel?.(time);\n return (\n <SelectItem\n className={cn(sublabel ? 'h-auto py-2' : 'h-10')}\n key={time.value.raw}\n value={time.value.raw}\n sublabel={sublabel}\n >\n {time.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n","import usePlacesAutocomplete, { type GeocodeResult, getGeocode } from 'use-places-autocomplete';\nimport { type ComponentProps, useCallback, useEffect, useRef, useState } from 'react';\nimport { useLoadScript } from '@react-google-maps/api';\nimport { Input } from '@/v2';\n\nexport type AddressResults = {\n city: string;\n state: string;\n street: string;\n unit: string;\n zip: string;\n lat: number;\n long: number;\n};\n\nexport const getAddressAttributes = (result: GeocodeResult): AddressResults => {\n let city = '';\n let state = '';\n let streetNumber = '';\n let streetName = '';\n let unit = '';\n let zip = '';\n\n result.address_components.forEach((component) => {\n component.types.some((type) => {\n switch (type) {\n case 'locality':\n city = component.long_name; // Always prefer locality\n return true;\n case 'sublocality':\n case 'administrative_area_level_3':\n case 'neighborhood':\n city = city || component.long_name; // sets if no city\n return true;\n case 'administrative_area_level_1':\n state = component.short_name;\n return true;\n case 'street_number':\n streetNumber = component.short_name;\n return true;\n case 'route':\n streetName = component.short_name;\n return true;\n case 'subpremise':\n unit = component.long_name;\n return true;\n case 'postal_code':\n zip = component.short_name;\n return true;\n default:\n return false;\n }\n });\n });\n\n // Google's subpremise is the bare value (e.g. \"4\"), and its descriptor (Apt/Suite/#) only appears in formatted_address\n if (unit) {\n const escaped = unit.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const descriptorMatch = result.formatted_address?.match(\n new RegExp(\n `(?<![A-Za-z])(?:Apt|Apartment|Suite|Ste|Unit|Bldg|Building|Fl|Floor|Rm|Room|Lot|Space|Spc|Trlr|Trailer|#)\\\\.?\\\\s*#?\\\\s*${escaped}\\\\b`,\n 'i',\n ),\n );\n\n if (descriptorMatch) {\n unit = descriptorMatch[0].trim();\n }\n }\n\n const lat = result.geometry.location.lat();\n const long = result.geometry.location.lng();\n const street = `${streetNumber} ${streetName}`.trim();\n\n return { city, state, street, unit, zip, lat, long };\n};\n\ntype InputProps = ComponentProps<typeof Input>;\n\ntype AddressInputProps = InputProps & {\n onSelectAddress?: (results: AddressResults) => void;\n};\n\nconst MIN_ADDRESS_LENGTH = 2;\n\nexport const AddressInputInternal = ({\n onSelectAddress = undefined,\n ...rest\n}: AddressInputProps) => {\n const dropdownRef = useRef<HTMLDivElement>(null);\n const listboxIdRef = useRef(`address-input-${Math.random().toString(36).slice(2)}-listbox`);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const {\n suggestions: { data = [] },\n setValue,\n clearSuggestions,\n } = usePlacesAutocomplete({\n requestOptions: {\n componentRestrictions: { country: 'us' },\n },\n });\n\n const closeSuggestions = useCallback(() => {\n clearSuggestions();\n setHighlightedIndex(-1);\n }, [clearSuggestions]);\n\n // Handle click outside to close suggestions\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n closeSuggestions();\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeSuggestions();\n }\n };\n\n if (data.length > 0) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [data.length, closeSuggestions]);\n\n useEffect(() => {\n if (data.length === 0) {\n setHighlightedIndex(-1);\n } else {\n setHighlightedIndex((current) => {\n if (current < 0) {\n return current;\n }\n\n return Math.min(current, data.length - 1);\n });\n }\n }, [data.length]);\n\n const handleAddressSelect = (address: string) => {\n setValue(address, false);\n closeSuggestions();\n\n if (address.length <= MIN_ADDRESS_LENGTH) {\n return;\n }\n\n getGeocode({ address }).then((results) => {\n if (!results || results.length === 0) {\n return;\n }\n\n const formattedResults = getAddressAttributes(results[0]);\n onSelectAddress?.(formattedResults);\n });\n };\n\n const handleAddressOnChange = useCallback(\n (inputValue: string) => {\n setValue(inputValue);\n setHighlightedIndex(-1);\n },\n [setValue],\n );\n\n const highlightedOptionId =\n highlightedIndex >= 0 ? `${listboxIdRef.current}-option-${highlightedIndex}` : undefined;\n\n return (\n <div className=\"relative\">\n <Input\n {...rest}\n onChange={(e) => {\n rest.onChange?.(e);\n handleAddressOnChange(e.target.value);\n }}\n onKeyDown={(e) => {\n rest.onKeyDown?.(e);\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (!data.length) {\n if (e.key === 'Escape') {\n closeSuggestions();\n }\n return;\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setHighlightedIndex((current) => {\n const next = current + 1;\n if (next >= data.length || next < 0) {\n return 0;\n }\n return next;\n });\n return;\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setHighlightedIndex((current) => {\n if (current <= 0) {\n return data.length - 1;\n }\n return current - 1;\n });\n return;\n }\n\n if (e.key === 'Enter' && highlightedIndex >= 0) {\n e.preventDefault();\n const suggestion = data[highlightedIndex];\n if (suggestion) {\n handleAddressSelect(suggestion.description);\n }\n return;\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n closeSuggestions();\n }\n }}\n role=\"combobox\"\n aria-expanded={data.length > 0}\n aria-controls={data.length > 0 ? listboxIdRef.current : undefined}\n aria-activedescendant={highlightedOptionId}\n aria-autocomplete=\"list\"\n />\n {data.length > 0 && (\n <div\n ref={dropdownRef}\n id={listboxIdRef.current}\n role=\"listbox\"\n className=\"z-modal-stacking-context absolute mt-1 max-h-60 w-full overflow-auto rounded-md border border-gray-200 bg-white shadow-lg\"\n >\n {data.map((suggestion, index) => {\n const optionId = `${listboxIdRef.current}-option-${index}`;\n const isHighlighted = index === highlightedIndex;\n\n return (\n <div\n key={suggestion.place_id}\n id={optionId}\n role=\"option\"\n aria-selected={isHighlighted}\n tabIndex={-1}\n className={`cursor-pointer px-3 py-2 text-sm hover:bg-green-100 ${\n isHighlighted ? 'bg-green-100' : ''\n }`}\n onMouseEnter={() => setHighlightedIndex(index)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => handleAddressSelect(suggestion.description)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleAddressSelect(suggestion.description);\n }\n }}\n >\n {suggestion.description}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nconst libraries: ['places'] = ['places'];\n\nexport const AddressInput = ({\n googleMapsApiKey,\n onSelectAddress = undefined,\n ...props\n}: AddressInputProps & { googleMapsApiKey: string }) => {\n const { isLoaded, loadError } = useLoadScript({\n googleMapsApiKey,\n libraries,\n });\n // if not loaded or error, return regular input\n if (!isLoaded || loadError) {\n return <Input {...props} />;\n }\n return <AddressInputInternal onSelectAddress={onSelectAddress} {...props} />;\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkKLVOKO56_cjs=require('./chunk-KLVOKO56.cjs'),chunkAYDT2WNR_cjs=require('./chunk-AYDT2WNR.cjs'),chunkUQH4L66A_cjs=require('./chunk-UQH4L66A.cjs'),chunkDBJQ7H6H_cjs=require('./chunk-DBJQ7H6H.cjs'),chunk2BHGUK45_cjs=require('./chunk-2BHGUK45.cjs'),chunk4MTRF322_cjs=require('./chunk-4MTRF322.cjs'),chunk4VLWKHXC_cjs=require('./chunk-4VLWKHXC.cjs'),chunkPM4UNYHM_cjs=require('./chunk-PM4UNYHM.cjs'),chunkUYX4D44N_cjs=require('./chunk-UYX4D44N.cjs'),chunk4CHRDQR7_cjs=require('./chunk-4CHRDQR7.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var ae=react.forwardRef((C,P)=>{let{id:x,value:s,onChange:D,placeholder:F,defaultOptions:T=[],options:K=[],delay:V,onSearch:n,triggerSearchOnOpen:W,loading:B=false,loadingIndicator:E,emptyIndicator:H,maxSelected:k=0,onMaxSelected:q,hidePlaceholderWhenSelected:L=true,disabled:a,className:Y,classNames:z,badgeWrapperClassName:A,badgeClassName:G,getBadgeClassName:J=()=>"",selectFirstItem:Q=true,commandProps:e,inputProps:U,persistInputOnSelect:X=false,persistInputOnBlur:Z=false}=C,{inputRef:t,commandRef:c,onSearchRef:_,scrollbarRef:u,prevExternalOptionsRef:$}=chunkKLVOKO56_cjs.a({onSearch:n}),{uniqueId:p,open:o,setOpen:m,selected:r,setSelected:l,options:j,setOptions:ee,inputSearchValue:te,setInputSearchValue:d,debouncedSearchTerm:re}=chunkUYX4D44N_cjs.a({id:x,value:s,defaultOptions:T,delay:V}),{toggleOption:f,handleKeyDown:oe}=chunkPM4UNYHM_cjs.a({open:o,selected:r,maxSelected:k,onChange:D,onMaxSelected:q,setInputSearchValue:d,commandRef:c,inputRef:t,setSelected:l,setOpen:m,persistInputOnSelect:X});chunkAYDT2WNR_cjs.a({debouncedSearchTerm:re,open:o,onSearchRef:_,triggerSearchOnOpen:W}),chunkUQH4L66A_cjs.a({externalOptions:K,setOptions:ee,prevExternalOptionsRef:$}),chunkDBJQ7H6H_cjs.a({value:s,setSelected:l}),react.useImperativeHandle(P,()=>({selectedValue:[...r],input:t.current,focus:()=>t?.current?.focus(),reset:()=>l([])}),[r,t,l]);let le=react.useCallback(()=>{if(e?.filter)return e.filter},[e?.filter]);return jsxRuntime.jsxs(chunk4CHRDQR7_cjs.a,{ref:c,...e,onKeyDown:S=>{oe(S),e?.onKeyDown?.(S);},className:chunkQRO22BPZ_cjs.a("h-auto overflow-visible bg-transparent",e?.className),shouldFilter:e?.shouldFilter!==void 0?e.shouldFilter:!n,filter:le(),children:[jsxRuntime.jsx(chunk4VLWKHXC_cjs.a,{open:o,disabled:a,inputRef:t,selected:r,uniqueId:p,className:Y,children:jsxRuntime.jsx(chunk4MTRF322_cjs.a,{selected:r,scrollbarRef:u,toggleOption:f,inputProps:U,inputRef:t,open:o,setOpen:m,placeholder:F,hidePlaceholderWhenSelected:L,disabled:a,classNames:z,badgeWrapperClassName:A,badgeClassName:G,getBadgeClassName:J,inputSearchValue:te,setInputSearchValue:d,persistInputOnBlur:Z})}),jsxRuntime.jsx(chunk2BHGUK45_cjs.a,{uniqueId:p,scrollbarRef:u,open:o,loading:B,options:j,selected:r,toggleOption:f,onSearch:n,inputRef:t,emptyIndicator:H,loadingIndicator:E,selectFirstItem:Q})]})});ae.displayName="MultiSelect";exports.a=ae;//# sourceMappingURL=chunk-PBVKIV4W.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-PBVKIV4W.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/multiselect/multiselect.tsx"],"names":["MultiSelect","forwardRef","props","ref","id","value","onChange","placeholder","externalDefaultOptions","externalOptions","delay","onSearch","triggerSearchOnOpen","loading","loadingIndicator","emptyIndicator","maxSelected","onMaxSelected","hidePlaceholderWhenSelected","disabled","className","classNames","badgeWrapperClassName","badgeClassName","getBadgeClassName","selectFirstItem","commandProps","inputProps","persistInputOnSelect","persistInputOnBlur","inputRef","commandRef","onSearchRef","scrollbarRef","prevExternalOptionsRef","useRefs","uniqueId","open","setOpen","selected","setSelected","options","setOptions","inputSearchValue","setInputSearchValue","debouncedSearchTerm","useMultiSelect","toggleOption","handleKeyDown","useInteractions","useSearch","useSyncOptions","useSyncSelected","useImperativeHandle","commandFilter","useCallback","jsxs","Command","e","cn","jsx","MultiSelectTrigger","MultiSelectInput","MultiSelectDropdown"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/v2/multiselect/multiselect.tsx"],"names":["MultiSelect","forwardRef","props","ref","id","value","onChange","placeholder","externalDefaultOptions","externalOptions","delay","onSearch","triggerSearchOnOpen","loading","loadingIndicator","emptyIndicator","maxSelected","onMaxSelected","hidePlaceholderWhenSelected","disabled","className","classNames","badgeWrapperClassName","badgeClassName","getBadgeClassName","selectFirstItem","commandProps","inputProps","persistInputOnSelect","persistInputOnBlur","inputRef","commandRef","onSearchRef","scrollbarRef","prevExternalOptionsRef","useRefs","uniqueId","open","setOpen","selected","setSelected","options","setOptions","inputSearchValue","setInputSearchValue","debouncedSearchTerm","useMultiSelect","toggleOption","handleKeyDown","useInteractions","useSearch","useSyncOptions","useSyncSelected","useImperativeHandle","commandFilter","useCallback","jsxs","Command","e","cn","jsx","MultiSelectTrigger","MultiSelectInput","MultiSelectDropdown"],"mappings":"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","file":"chunk-PBVKIV4W.cjs","sourcesContent":["import { forwardRef, Ref, useCallback, useImperativeHandle } from 'react';\nimport { Command } from '@/v2/command/command';\nimport { cn } from '@/lib/utils';\nimport { MultiSelectProps, MultiSelectRef } from './types';\nimport { useMultiSelect } from './hooks/useMultiSelect';\nimport { useRefs } from './hooks/useRefs';\nimport { useInteractions } from './hooks/useInteractions';\nimport { useSearch } from './hooks/useSearch';\nimport { MultiSelectTrigger } from './components/MultiSelectTrigger';\nimport { MultiSelectInput } from './components/MultiSelectInput';\nimport { MultiSelectDropdown } from './components/MultiSelectDropdown';\nimport { useSyncOptions } from './hooks/useSyncOptions';\nimport { useSyncSelected } from './hooks/useSyncSelected';\n\nexport const MultiSelect = forwardRef<MultiSelectRef, MultiSelectProps>(\n (props: MultiSelectProps, ref: Ref<MultiSelectRef>) => {\n const {\n id,\n value,\n onChange,\n placeholder,\n defaultOptions: externalDefaultOptions = [],\n options: externalOptions = [],\n delay,\n onSearch,\n triggerSearchOnOpen,\n loading = false,\n loadingIndicator,\n emptyIndicator,\n maxSelected = 0,\n onMaxSelected,\n hidePlaceholderWhenSelected = true,\n disabled,\n className,\n classNames,\n badgeWrapperClassName,\n badgeClassName,\n getBadgeClassName = () => '',\n selectFirstItem = true,\n commandProps,\n inputProps,\n persistInputOnSelect = false,\n persistInputOnBlur = false,\n } = props;\n\n const { inputRef, commandRef, onSearchRef, scrollbarRef, prevExternalOptionsRef } = useRefs({\n onSearch,\n });\n\n const {\n uniqueId,\n open,\n setOpen,\n selected,\n setSelected,\n options,\n setOptions,\n inputSearchValue,\n setInputSearchValue,\n debouncedSearchTerm,\n } = useMultiSelect({\n id,\n value,\n defaultOptions: externalDefaultOptions,\n delay,\n });\n\n const { toggleOption, handleKeyDown } = useInteractions({\n open,\n selected,\n maxSelected,\n onChange,\n onMaxSelected,\n setInputSearchValue,\n commandRef,\n inputRef,\n setSelected,\n setOpen,\n persistInputOnSelect,\n });\n\n useSearch({\n debouncedSearchTerm,\n open,\n onSearchRef,\n triggerSearchOnOpen,\n });\n\n useSyncOptions({\n externalOptions,\n setOptions,\n prevExternalOptionsRef,\n });\n\n useSyncSelected({\n value,\n setSelected,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n selectedValue: [...selected],\n input: inputRef.current as HTMLInputElement,\n focus: () => inputRef?.current?.focus(),\n reset: () => setSelected([]),\n }),\n [selected, inputRef, setSelected],\n );\n\n const commandFilter = useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter;\n }\n\n // Using default filter in `cmdk`. We don't have to provide it.\n return undefined;\n }, [commandProps?.filter]);\n\n return (\n <Command\n ref={commandRef}\n {...commandProps}\n onKeyDown={(e) => {\n handleKeyDown(e);\n commandProps?.onKeyDown?.(e);\n }}\n className={cn('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={\n commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch\n } // When onSearch is provided, we don't want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n <MultiSelectTrigger {...{ open, disabled, inputRef, selected, uniqueId, className }}>\n <MultiSelectInput\n {...{\n selected,\n scrollbarRef,\n toggleOption,\n inputProps,\n inputRef,\n open,\n setOpen,\n placeholder,\n hidePlaceholderWhenSelected,\n disabled,\n classNames,\n badgeWrapperClassName,\n badgeClassName,\n getBadgeClassName,\n inputSearchValue,\n setInputSearchValue,\n persistInputOnBlur,\n }}\n />\n </MultiSelectTrigger>\n\n <MultiSelectDropdown\n {...{\n uniqueId,\n scrollbarRef,\n open,\n loading,\n options,\n selected,\n toggleOption,\n onSearch,\n inputRef,\n emptyIndicator,\n loadingIndicator,\n selectFirstItem,\n }}\n />\n </Command>\n );\n },\n);\n\nMultiSelect.displayName = 'MultiSelect';\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk2DLCWPKO_cjs=require('./chunk-2DLCWPKO.cjs'),chunkGGY7YX5J_cjs=require('./chunk-GGY7YX5J.cjs'),chunkIINNHABI_cjs=require('./chunk-IINNHABI.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),react=require('react'),reactDropzone=require('react-dropzone'),lu=require('react-icons/lu'),jsxRuntime=require('react/jsx-runtime');var O=255,oe=e=>e?e.length>O?`Name must be ${O} characters or fewer.`:null:"Name is required.",se=e=>e instanceof Error?e.message:"Something went wrong.",ce=({accept:e,maxSizeInMb:i,disabled:r,onFileSelect:l})=>{let[d,a]=react.useState(null),u=o=>{a(chunkGGY7YX5J_cjs.c(o,{maxFiles:1,maxSizeInMb:i}));};return {...reactDropzone.useDropzone({accept:e,maxSize:i*1024*1024,multiple:false,disabled:r,onDropRejected:u,onDropAccepted:o=>{a(null),l?.(o[0]);}}),rejection:d}},b=({ref:e=void 0,label:i,onClick:r,disabled:l=false,children:d})=>jsxRuntime.jsx(chunkIINNHABI_cjs.b,{ref:e,type:"button",variant:"ghost-icon",size:"sm","aria-label":i,onClick:r,disabled:l,className:"h-6 w-6 p-0 text-gray-500 [&_svg]:size-6",children:d}),de=({fileName:e,mode:i="editable",canReplace:r=false,state:l="idle",error:d,onRename:a,onRemove:u,onView:h,onFileSelect:o,accept:k=chunkGGY7YX5J_cjs.a,maxSizeInMb:R=chunkGGY7YX5J_cjs.b})=>{let N=react.useId(),p=react.useRef(null),x=react.useRef(null),S=react.useRef(null),[w,y]=react.useState(null),[I,g]=react.useState(null),[s,z]=react.useState(false),[L,M]=react.useState(false),A=ce({accept:k,maxSizeInMb:R,disabled:false,onFileSelect:o}),c=w!==null,C=i==="editable",T=C&&r&&!!o,D=I??A.rejection??(l==="error"?d:null),J=async()=>{if(!(!u||L)){M(true);try{await u();}finally{M(false);}}},U=()=>{y(null),g(null);},_=async()=>{if(w===null||s)return;let t=w.trim(),f=oe(t);if(f){g(f);return}if(t===e||!a){U();return}z(true),g(null);try{await a(t),y(null);}catch(F){g(`Rename failed - ${se(F)}`);}finally{z(false);}};react.useEffect(()=>{if(!c)return;let t=f=>{if(f.key!=="Escape")return;let F=f.target;F!==document.body&&!p.current?.contains(F)||(f.preventDefault(),f.stopPropagation(),!s&&(y(null),g(null)));};return window.addEventListener("keydown",t,true),()=>window.removeEventListener("keydown",t,true)},[c,s]);let j=react.useRef(false),B=react.useRef(false);return react.useEffect(()=>{j.current&&!s&&c&&x.current?.focus(),B.current&&!c&&S.current?.focus(),j.current=s,B.current=c;},[s,c]),jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[jsxRuntime.jsxs("div",{ref:p,className:chunkQRO22BPZ_cjs.a("flex items-center gap-4 rounded-lg bg-green-100 p-4",c&&"py-2",l==="error"&&!c&&"border border-red-600"),children:[l==="uploading"?jsxRuntime.jsx(lu.LuLoaderCircle,{"aria-hidden":true,className:"size-6 shrink-0 animate-spin text-green-800"}):jsxRuntime.jsx(lu.LuFileCheck2,{"aria-hidden":true,className:"size-6 shrink-0 text-green-800"}),c?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{ref:x,autoFocus:true,"aria-label":"File name","aria-invalid":!!I,"aria-describedby":D?N:void 0,variant:I?"invalid":"default",className:"h-10 py-0",wrapperClassName:"min-w-0 flex-1",value:w??"",disabled:s,onFocus:t=>t.currentTarget.select(),onChange:t=>y(t.target.value),onKeyDown:t=>{t.key==="Enter"&&(t.preventDefault(),_());}}),jsxRuntime.jsxs("div",{className:"flex shrink-0 items-center gap-4",children:[jsxRuntime.jsx(b,{label:"Save name",onClick:_,disabled:s,children:jsxRuntime.jsx(lu.LuCheck,{"aria-hidden":true,className:"text-green-800"})}),jsxRuntime.jsx(b,{label:"Cancel rename",onClick:U,disabled:s,children:jsxRuntime.jsx(lu.LuX,{"aria-hidden":true})})]})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("p",{"aria-live":"polite",title:e,className:"min-w-0 flex-1 truncate text-black",children:l==="uploading"?`Uploading ${e}\u2026`:e}),l!=="uploading"&&jsxRuntime.jsxs("div",{className:"flex shrink-0 items-center gap-4",children:[C&&a&&jsxRuntime.jsx(b,{ref:S,label:`Rename ${e}`,onClick:()=>{y(e),g(null);},children:jsxRuntime.jsx(lu.LuPencilLine,{"aria-hidden":true})}),T&&jsxRuntime.jsx(b,{label:`Replace ${e}`,onClick:A.open,disabled:L,children:jsxRuntime.jsx(lu.LuRepeat,{"aria-hidden":true})}),C&&u&&jsxRuntime.jsx(b,{label:`Remove ${e}`,onClick:J,disabled:L,children:jsxRuntime.jsx(lu.LuTrash2,{"aria-hidden":true})}),h&&jsxRuntime.jsx(b,{label:`View ${e}`,onClick:h,children:jsxRuntime.jsx(lu.LuEye,{"aria-hidden":true})})]})]})]}),T&&jsxRuntime.jsx("input",{...A.getInputProps()}),D&&jsxRuntime.jsx("p",{id:N,role:"alert",className:"text-sm text-red-600",children:D})]})},ue=({onFileSelect:e,state:i="idle",error:r,disabled:l=false,accept:d,maxSizeInMb:a=chunkGGY7YX5J_cjs.b,title:u="Drag a file or click to browse",helperText:h=`${a} MB max file size`})=>{let o=react.useId(),[k,R]=react.useState(null),N=i==="uploading",p=k??(i==="error"?r:void 0);return jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[jsxRuntime.jsx(chunkGGY7YX5J_cjs.d,{variant:"compact",accept:d,maxFiles:1,maxSizeInMb:a,disabled:l,isLoading:N,invalid:!!p,describedBy:p?o:void 0,title:N?"Uploading\u2026":u,subtitle:h,onReject:R,onDrop:x=>{R(null),x[0]&&e?.(x[0]);}}),p&&jsxRuntime.jsx("p",{id:o,role:"alert",className:"text-sm text-red-600",children:p})]})},Ne=({fileName:e="",className:i="",...r})=>jsxRuntime.jsx("div",{className:i,children:e?jsxRuntime.jsx(de,{fileName:e,...r}):jsxRuntime.jsx(ue,{...r})});exports.a=Ne;//# sourceMappingURL=chunk-PKA77LCP.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-PKA77LCP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/v2/file-upload/file-upload.tsx"],"names":["MAX_NAME_LENGTH","validateName","name","errorMessage","useFileSelect","accept","maxSizeInMb","disabled","onFileSelect","rejection","setRejection","useState","onDropRejected","rejections","getRejectionMessage","useDropzone","files","IconAction","ref","label","onClick","children","jsx","Button","AttachedFile","mode","canReplace","state","error","onRename","onRemove","onView","DEFAULT_ACCEPTED_FILE_TYPES","DEFAULT_MAX_SIZE_IN_MB","errorId","useId","rowRef","useRef","inputRef","renameButtonRef","draft","setDraft","renameError","setRenameError","isSaving","setIsSaving","isRemoving","setIsRemoving","replacePicker","isEditing","isEditable","showReplace","message","remove","cancel","save","next","validationError","e","useEffect","onKeyDown","event","target","wasSaving","wasEditing","jsxs","cn","LuLoaderCircle","LuFileCheck2","Fragment","Input","LuCheck","LuX","LuPencilLine","LuRepeat","LuTrash2","LuEye","EmptyDropzone","title","helperText","isUploading","Dropzone","FileUpload","fileName","className","props"],"mappings":"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","file":"chunk-PKA77LCP.cjs","sourcesContent":["import { type ReactNode, type Ref, useEffect, useId, useRef, useState } from 'react';\nimport { type Accept, type FileRejection, useDropzone } from 'react-dropzone';\nimport {\n LuCheck,\n LuEye,\n LuFileCheck2,\n LuLoaderCircle,\n LuPencilLine,\n LuRepeat,\n LuTrash2,\n LuX,\n} from 'react-icons/lu';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/v2/button/button';\nimport {\n DEFAULT_ACCEPTED_FILE_TYPES,\n DEFAULT_MAX_SIZE_IN_MB,\n Dropzone,\n getRejectionMessage,\n} from '@/v2/dropzone/dropzone';\nimport { Input } from '@/v2/input/input';\n\nconst MAX_NAME_LENGTH = 255;\n\nconst validateName = (name: string) => {\n if (!name) return 'Name is required.';\n if (name.length > MAX_NAME_LENGTH) return `Name must be ${MAX_NAME_LENGTH} characters or fewer.`;\n return null;\n};\n\nconst errorMessage = (e: unknown) => (e instanceof Error ? e.message : 'Something went wrong.');\n\nexport type FileUploadProps = {\n /** When set, the attached-file row renders instead of the drop target. */\n fileName?: string | null;\n onFileSelect?: (file: File) => void;\n mode?: 'editable' | 'readOnly';\n canReplace?: boolean;\n state?: 'idle' | 'uploading' | 'error';\n error?: string | null;\n disabled?: boolean;\n accept?: Accept;\n maxSizeInMb?: number;\n title?: ReactNode;\n helperText?: ReactNode;\n /** Persist the new name; reject to keep the editor open and show the failure. */\n onRename?: (name: string) => Promise<void>;\n /** Detaches the file. Must not reject; the host reports its own failure. */\n onRemove?: () => Promise<void>;\n /** Opens the attached file; the view action shows only when provided. */\n onView?: () => void;\n className?: string;\n};\n\nconst useFileSelect = ({\n accept,\n maxSizeInMb,\n disabled,\n onFileSelect,\n}: {\n accept: Accept;\n maxSizeInMb: number;\n disabled: boolean;\n onFileSelect?: (file: File) => void;\n}) => {\n const [rejection, setRejection] = useState<string | null>(null);\n\n const onDropRejected = (rejections: FileRejection[]) => {\n setRejection(getRejectionMessage(rejections, { maxFiles: 1, maxSizeInMb }));\n };\n\n const dropzone = useDropzone({\n accept,\n maxSize: maxSizeInMb * 1024 * 1024,\n multiple: false,\n disabled,\n onDropRejected,\n onDropAccepted: (files) => {\n setRejection(null);\n onFileSelect?.(files[0]);\n },\n });\n\n return { ...dropzone, rejection };\n};\n\nconst IconAction = ({\n ref = undefined,\n label,\n onClick,\n disabled = false,\n children,\n}: {\n ref?: Ref<HTMLButtonElement>;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n children: ReactNode;\n}) => (\n <Button\n ref={ref}\n type=\"button\"\n variant=\"ghost-icon\"\n size=\"sm\"\n aria-label={label}\n onClick={onClick}\n disabled={disabled}\n className=\"h-6 w-6 p-0 text-gray-500 [&_svg]:size-6\"\n >\n {children}\n </Button>\n);\n\ntype AttachedFileProps = { fileName: string } & Pick<\n FileUploadProps,\n | 'mode'\n | 'canReplace'\n | 'state'\n | 'error'\n | 'onRename'\n | 'onRemove'\n | 'onView'\n | 'onFileSelect'\n | 'accept'\n | 'maxSizeInMb'\n>;\n\nconst AttachedFile = ({\n fileName: name,\n mode = 'editable',\n canReplace = false,\n state = 'idle',\n error,\n onRename,\n onRemove,\n onView,\n onFileSelect,\n accept = DEFAULT_ACCEPTED_FILE_TYPES,\n maxSizeInMb = DEFAULT_MAX_SIZE_IN_MB,\n}: AttachedFileProps) => {\n const errorId = useId();\n const rowRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const renameButtonRef = useRef<HTMLButtonElement>(null);\n // null means the editor is closed.\n const [draft, setDraft] = useState<string | null>(null);\n const [renameError, setRenameError] = useState<string | null>(null);\n const [isSaving, setIsSaving] = useState(false);\n const [isRemoving, setIsRemoving] = useState(false);\n\n const replacePicker = useFileSelect({ accept, maxSizeInMb, disabled: false, onFileSelect });\n\n const isEditing = draft !== null;\n const isEditable = mode === 'editable';\n const showReplace = isEditable && canReplace && !!onFileSelect;\n const message = renameError ?? replacePicker.rejection ?? (state === 'error' ? error : null);\n\n const remove = async () => {\n if (!onRemove || isRemoving) return;\n\n setIsRemoving(true);\n try {\n await onRemove();\n } finally {\n setIsRemoving(false);\n }\n };\n\n const cancel = () => {\n setDraft(null);\n setRenameError(null);\n };\n\n const save = async () => {\n if (draft === null || isSaving) return;\n\n const next = draft.trim();\n const validationError = validateName(next);\n\n if (validationError) {\n setRenameError(validationError);\n return;\n }\n\n if (next === name || !onRename) {\n cancel();\n return;\n }\n\n setIsSaving(true);\n setRenameError(null);\n\n try {\n await onRename(next);\n setDraft(null);\n } catch (e) {\n setRenameError(`Rename failed - ${errorMessage(e)}`);\n } finally {\n setIsSaving(false);\n }\n };\n\n // Radix dialogs and drawers close on Escape from a capture-phase document listener, which runs\n // before any React handler. A window capture listener runs first, so Escape while renaming\n // cancels the rename and leaves the surrounding drawer open. Disabled controls drop focus to\n // <body> during a pending save, so Escape from there counts too; while saving it is swallowed.\n useEffect(() => {\n if (!isEditing) return undefined;\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n\n const target = event.target as Node | null;\n if (target !== document.body && !rowRef.current?.contains(target)) return;\n\n event.preventDefault();\n event.stopPropagation();\n if (isSaving) return;\n setDraft(null);\n setRenameError(null);\n };\n\n window.addEventListener('keydown', onKeyDown, true);\n return () => window.removeEventListener('keydown', onKeyDown, true);\n }, [isEditing, isSaving]);\n\n // Keep keyboard users in place: back to the input when a failed save re-enables it, and back to\n // the Rename button when the editor closes.\n const wasSaving = useRef(false);\n const wasEditing = useRef(false);\n useEffect(() => {\n if (wasSaving.current && !isSaving && isEditing) inputRef.current?.focus();\n if (wasEditing.current && !isEditing) renameButtonRef.current?.focus();\n wasSaving.current = isSaving;\n wasEditing.current = isEditing;\n }, [isSaving, isEditing]);\n\n return (\n <div className=\"flex flex-col gap-1\">\n <div\n ref={rowRef}\n className={cn(\n 'flex items-center gap-4 rounded-lg bg-green-100 p-4',\n // The 40px input is taller than the 24px icons; trim the padding so the row keeps its 56px height.\n isEditing && 'py-2',\n state === 'error' && !isEditing && 'border border-red-600',\n )}\n >\n {state === 'uploading' ? (\n <LuLoaderCircle aria-hidden className=\"size-6 shrink-0 animate-spin text-green-800\" />\n ) : (\n <LuFileCheck2 aria-hidden className=\"size-6 shrink-0 text-green-800\" />\n )}\n\n {isEditing ? (\n <>\n <Input\n ref={inputRef}\n autoFocus\n aria-label=\"File name\"\n aria-invalid={!!renameError}\n aria-describedby={message ? errorId : undefined}\n variant={renameError ? 'invalid' : 'default'}\n className=\"h-10 py-0\"\n wrapperClassName=\"min-w-0 flex-1\"\n value={draft ?? ''}\n disabled={isSaving}\n onFocus={(event) => event.currentTarget.select()}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key !== 'Enter') return;\n // Stops implicit submission of a host <form>.\n event.preventDefault();\n save();\n }}\n />\n <div className=\"flex shrink-0 items-center gap-4\">\n <IconAction label=\"Save name\" onClick={save} disabled={isSaving}>\n <LuCheck aria-hidden className=\"text-green-800\" />\n </IconAction>\n <IconAction label=\"Cancel rename\" onClick={cancel} disabled={isSaving}>\n <LuX aria-hidden />\n </IconAction>\n </div>\n </>\n ) : (\n <>\n <p aria-live=\"polite\" title={name} className=\"min-w-0 flex-1 truncate text-black\">\n {state === 'uploading' ? `Uploading ${name}…` : name}\n </p>\n {state !== 'uploading' && (\n <div className=\"flex shrink-0 items-center gap-4\">\n {isEditable && onRename && (\n <IconAction\n ref={renameButtonRef}\n label={`Rename ${name}`}\n onClick={() => {\n setDraft(name);\n setRenameError(null);\n }}\n >\n <LuPencilLine aria-hidden />\n </IconAction>\n )}\n {showReplace && (\n <IconAction\n label={`Replace ${name}`}\n onClick={replacePicker.open}\n disabled={isRemoving}\n >\n <LuRepeat aria-hidden />\n </IconAction>\n )}\n {isEditable && onRemove && (\n <IconAction label={`Remove ${name}`} onClick={remove} disabled={isRemoving}>\n <LuTrash2 aria-hidden />\n </IconAction>\n )}\n {onView && (\n <IconAction label={`View ${name}`} onClick={onView}>\n <LuEye aria-hidden />\n </IconAction>\n )}\n </div>\n )}\n </>\n )}\n </div>\n {showReplace && <input {...replacePicker.getInputProps()} />}\n {message && (\n <p id={errorId} role=\"alert\" className=\"text-sm text-red-600\">\n {message}\n </p>\n )}\n </div>\n );\n};\n\nconst EmptyDropzone = ({\n onFileSelect,\n state = 'idle',\n error,\n disabled = false,\n accept,\n maxSizeInMb = DEFAULT_MAX_SIZE_IN_MB,\n title = 'Drag a file or click to browse',\n helperText = `${maxSizeInMb} MB max file size`,\n}: Pick<\n FileUploadProps,\n | 'onFileSelect'\n | 'state'\n | 'error'\n | 'disabled'\n | 'accept'\n | 'maxSizeInMb'\n | 'title'\n | 'helperText'\n>) => {\n const errorId = useId();\n const [rejection, setRejection] = useState<string | null>(null);\n const isUploading = state === 'uploading';\n const message = rejection ?? (state === 'error' ? error : undefined);\n\n return (\n <div className=\"flex flex-col gap-1\">\n <Dropzone\n variant=\"compact\"\n accept={accept}\n maxFiles={1}\n maxSizeInMb={maxSizeInMb}\n disabled={disabled}\n isLoading={isUploading}\n invalid={!!message}\n describedBy={message ? errorId : undefined}\n title={isUploading ? 'Uploading…' : title}\n subtitle={helperText}\n onReject={setRejection}\n onDrop={(files) => {\n setRejection(null);\n if (files[0]) onFileSelect?.(files[0]);\n }}\n />\n {message && (\n <p id={errorId} role=\"alert\" className=\"text-sm text-red-600\">\n {message}\n </p>\n )}\n </div>\n );\n};\n\n/**\n * Compact single-file upload zone. Renders an empty drop target (idle, drag-over, uploading,\n * error, disabled) or, once `fileName` is set, the attached file with rename / replace / remove / view.\n */\nexport const FileUpload = ({ fileName = '', className = '', ...props }: FileUploadProps) => (\n <div className={className}>\n {fileName ? <AttachedFile fileName={fileName} {...props} /> : <EmptyDropzone {...props} />}\n </div>\n);\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a}from'./chunk-7GJG2HUA.js';import {a as a$3}from'./chunk-4GCD4SP5.js';import {a as a$4}from'./chunk-274XPO4S.js';import {a as a$5}from'./chunk-XJ7ZDJZG.js';import {a as a$9}from'./chunk-D5AT3ZJD.js';import {a as a$8}from'./chunk-4L5ZRFHA.js';import {a as a$7}from'./chunk-44OJTSLO.js';import {a as a$2}from'./chunk-HDSZKGQO.js';import {a as a$1}from'./chunk-Q27GDY4Y.js';import {a as a$6}from'./chunk-J624VXFX.js';import {a as a$a}from'./chunk-YTIIAU4W.js';import {forwardRef,useImperativeHandle,useCallback}from'react';import {jsxs,jsx}from'react/jsx-runtime';var ae=forwardRef((C,P)=>{let{id:x,value:s,onChange:D,placeholder:F,defaultOptions:T=[],options:K=[],delay:V,onSearch:n,triggerSearchOnOpen:W,loading:B=false,loadingIndicator:E,emptyIndicator:H,maxSelected:k=0,onMaxSelected:q,hidePlaceholderWhenSelected:L=true,disabled:a$b,className:Y,classNames:z,badgeWrapperClassName:A,badgeClassName:G,getBadgeClassName:J=()=>"",selectFirstItem:Q=true,commandProps:e,inputProps:U,persistInputOnSelect:X=false,persistInputOnBlur:Z=false}=C,{inputRef:t,commandRef:c,onSearchRef:_,scrollbarRef:u,prevExternalOptionsRef:$}=a({onSearch:n}),{uniqueId:p,open:o,setOpen:m,selected:r,setSelected:l,options:j,setOptions:ee,inputSearchValue:te,setInputSearchValue:d,debouncedSearchTerm:re}=a$1({id:x,value:s,defaultOptions:T,delay:V}),{toggleOption:f,handleKeyDown:oe}=a$2({open:o,selected:r,maxSelected:k,onChange:D,onMaxSelected:q,setInputSearchValue:d,commandRef:c,inputRef:t,setSelected:l,setOpen:m,persistInputOnSelect:X});a$3({debouncedSearchTerm:re,open:o,onSearchRef:_,triggerSearchOnOpen:W}),a$4({externalOptions:K,setOptions:ee,prevExternalOptionsRef:$}),a$5({value:s,setSelected:l}),useImperativeHandle(P,()=>({selectedValue:[...r],input:t.current,focus:()=>t?.current?.focus(),reset:()=>l([])}),[r,t,l]);let le=useCallback(()=>{if(e?.filter)return e.filter},[e?.filter]);return jsxs(a$6,{ref:c,...e,onKeyDown:S=>{oe(S),e?.onKeyDown?.(S);},className:a$a("h-auto overflow-visible bg-transparent",e?.className),shouldFilter:e?.shouldFilter!==void 0?e.shouldFilter:!n,filter:le(),children:[jsx(a$7,{open:o,disabled:a$b,inputRef:t,selected:r,uniqueId:p,className:Y,children:jsx(a$8,{selected:r,scrollbarRef:u,toggleOption:f,inputProps:U,inputRef:t,open:o,setOpen:m,placeholder:F,hidePlaceholderWhenSelected:L,disabled:a$b,classNames:z,badgeWrapperClassName:A,badgeClassName:G,getBadgeClassName:J,inputSearchValue:te,setInputSearchValue:d,persistInputOnBlur:Z})}),jsx(a$9,{uniqueId:p,scrollbarRef:u,open:o,loading:B,options:j,selected:r,toggleOption:f,onSearch:n,inputRef:t,emptyIndicator:H,loadingIndicator:E,selectFirstItem:Q})]})});ae.displayName="MultiSelect";export{ae as a};//# sourceMappingURL=chunk-RXTVQ2XW.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-RXTVQ2XW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/multiselect/multiselect.tsx"],"names":["MultiSelect","forwardRef","props","ref","id","value","onChange","placeholder","externalDefaultOptions","externalOptions","delay","onSearch","triggerSearchOnOpen","loading","loadingIndicator","emptyIndicator","maxSelected","onMaxSelected","hidePlaceholderWhenSelected","disabled","className","classNames","badgeWrapperClassName","badgeClassName","getBadgeClassName","selectFirstItem","commandProps","inputProps","persistInputOnSelect","persistInputOnBlur","inputRef","commandRef","onSearchRef","scrollbarRef","prevExternalOptionsRef","useRefs","uniqueId","open","setOpen","selected","setSelected","options","setOptions","inputSearchValue","setInputSearchValue","debouncedSearchTerm","useMultiSelect","toggleOption","handleKeyDown","useInteractions","useSearch","useSyncOptions","useSyncSelected","useImperativeHandle","commandFilter","useCallback","jsxs","Command","e","cn","jsx","MultiSelectTrigger","MultiSelectInput","MultiSelectDropdown"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/v2/multiselect/multiselect.tsx"],"names":["MultiSelect","forwardRef","props","ref","id","value","onChange","placeholder","externalDefaultOptions","externalOptions","delay","onSearch","triggerSearchOnOpen","loading","loadingIndicator","emptyIndicator","maxSelected","onMaxSelected","hidePlaceholderWhenSelected","disabled","className","classNames","badgeWrapperClassName","badgeClassName","getBadgeClassName","selectFirstItem","commandProps","inputProps","persistInputOnSelect","persistInputOnBlur","inputRef","commandRef","onSearchRef","scrollbarRef","prevExternalOptionsRef","useRefs","uniqueId","open","setOpen","selected","setSelected","options","setOptions","inputSearchValue","setInputSearchValue","debouncedSearchTerm","useMultiSelect","toggleOption","handleKeyDown","useInteractions","useSearch","useSyncOptions","useSyncSelected","useImperativeHandle","commandFilter","useCallback","jsxs","Command","e","cn","jsx","MultiSelectTrigger","MultiSelectInput","MultiSelectDropdown"],"mappings":"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","file":"chunk-RXTVQ2XW.js","sourcesContent":["import { forwardRef, Ref, useCallback, useImperativeHandle } from 'react';\nimport { Command } from '@/v2/command/command';\nimport { cn } from '@/lib/utils';\nimport { MultiSelectProps, MultiSelectRef } from './types';\nimport { useMultiSelect } from './hooks/useMultiSelect';\nimport { useRefs } from './hooks/useRefs';\nimport { useInteractions } from './hooks/useInteractions';\nimport { useSearch } from './hooks/useSearch';\nimport { MultiSelectTrigger } from './components/MultiSelectTrigger';\nimport { MultiSelectInput } from './components/MultiSelectInput';\nimport { MultiSelectDropdown } from './components/MultiSelectDropdown';\nimport { useSyncOptions } from './hooks/useSyncOptions';\nimport { useSyncSelected } from './hooks/useSyncSelected';\n\nexport const MultiSelect = forwardRef<MultiSelectRef, MultiSelectProps>(\n (props: MultiSelectProps, ref: Ref<MultiSelectRef>) => {\n const {\n id,\n value,\n onChange,\n placeholder,\n defaultOptions: externalDefaultOptions = [],\n options: externalOptions = [],\n delay,\n onSearch,\n triggerSearchOnOpen,\n loading = false,\n loadingIndicator,\n emptyIndicator,\n maxSelected = 0,\n onMaxSelected,\n hidePlaceholderWhenSelected = true,\n disabled,\n className,\n classNames,\n badgeWrapperClassName,\n badgeClassName,\n getBadgeClassName = () => '',\n selectFirstItem = true,\n commandProps,\n inputProps,\n persistInputOnSelect = false,\n persistInputOnBlur = false,\n } = props;\n\n const { inputRef, commandRef, onSearchRef, scrollbarRef, prevExternalOptionsRef } = useRefs({\n onSearch,\n });\n\n const {\n uniqueId,\n open,\n setOpen,\n selected,\n setSelected,\n options,\n setOptions,\n inputSearchValue,\n setInputSearchValue,\n debouncedSearchTerm,\n } = useMultiSelect({\n id,\n value,\n defaultOptions: externalDefaultOptions,\n delay,\n });\n\n const { toggleOption, handleKeyDown } = useInteractions({\n open,\n selected,\n maxSelected,\n onChange,\n onMaxSelected,\n setInputSearchValue,\n commandRef,\n inputRef,\n setSelected,\n setOpen,\n persistInputOnSelect,\n });\n\n useSearch({\n debouncedSearchTerm,\n open,\n onSearchRef,\n triggerSearchOnOpen,\n });\n\n useSyncOptions({\n externalOptions,\n setOptions,\n prevExternalOptionsRef,\n });\n\n useSyncSelected({\n value,\n setSelected,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n selectedValue: [...selected],\n input: inputRef.current as HTMLInputElement,\n focus: () => inputRef?.current?.focus(),\n reset: () => setSelected([]),\n }),\n [selected, inputRef, setSelected],\n );\n\n const commandFilter = useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter;\n }\n\n // Using default filter in `cmdk`. We don't have to provide it.\n return undefined;\n }, [commandProps?.filter]);\n\n return (\n <Command\n ref={commandRef}\n {...commandProps}\n onKeyDown={(e) => {\n handleKeyDown(e);\n commandProps?.onKeyDown?.(e);\n }}\n className={cn('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={\n commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch\n } // When onSearch is provided, we don't want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n <MultiSelectTrigger {...{ open, disabled, inputRef, selected, uniqueId, className }}>\n <MultiSelectInput\n {...{\n selected,\n scrollbarRef,\n toggleOption,\n inputProps,\n inputRef,\n open,\n setOpen,\n placeholder,\n hidePlaceholderWhenSelected,\n disabled,\n classNames,\n badgeWrapperClassName,\n badgeClassName,\n getBadgeClassName,\n inputSearchValue,\n setInputSearchValue,\n persistInputOnBlur,\n }}\n />\n </MultiSelectTrigger>\n\n <MultiSelectDropdown\n {...{\n uniqueId,\n scrollbarRef,\n open,\n loading,\n options,\n selected,\n toggleOption,\n onSearch,\n inputRef,\n emptyIndicator,\n loadingIndicator,\n selectFirstItem,\n }}\n />\n </Command>\n );\n },\n);\n\nMultiSelect.displayName = 'MultiSelect';\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b}from'./chunk-XZCJKB3L.js';import {a}from'./chunk-YTIIAU4W.js';import {cva}from'class-variance-authority';import {useDropzone}from'react-dropzone';import {LuLoaderCircle,LuUpload,LuFileWarning}from'react-icons/lu';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var B={"image/jpeg":[".jpeg",".jpg"],"image/png":[".png"],"image/avif":[".avif"],"image/heic":[".heic"],"image/webp":[".webp"],"application/pdf":[".pdf"],"text/csv":[".csv"],"application/xml":[".xml",".xlsx"],"application/msword":[".doc"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":[".docx"]},L=10,k=[],$={},C=()=>null,S=(c,{maxFiles:s,maxSizeInMb:a})=>{let i=c[0]?.errors[0]?.code;return i==="too-many-files"?s===1?"Please select one file at a time.":`Too many files. Please upload up to ${s} files at a time.`:i==="file-too-large"?s===1?`File is too large. Maximum size is ${a} MB.`:`File is too large. Please upload files smaller than ${a} MB.`:"File type not supported."},M=cva("",{variants:{variant:{default:"flex min-h-48 flex-col gap-4 hover:cursor-pointer",compact:["flex items-center justify-between gap-4 rounded-lg border bg-white p-4 text-gray-700 transition-colors","focus-visible:outline-2 focus-visible:outline-green-800"]},dragging:{true:"",false:""},loading:{true:"",false:""},invalid:{true:"",false:""},inactive:{true:"",false:""},limitReached:{true:"",false:""}},compoundVariants:[{variant:"default",dragging:true,class:"border-grey-700 opacity-75"},{variant:"default",limitReached:true,class:"hover:cursor-not-allowed"},{variant:"default",inactive:true,class:"hover:cursor-not-allowed"},{variant:"compact",dragging:false,loading:false,class:"border-dashed border-gray-300"},{variant:"compact",loading:true,class:"border-dashed border-green-800"},{variant:"compact",dragging:true,class:"border-solid border-green-800 bg-green-100"},{variant:"compact",inactive:false,loading:false,class:"cursor-pointer hover:border-solid hover:border-green-800 hover:bg-green-100"},{variant:"compact",invalid:true,class:"border-solid border-red-600"},{variant:"compact",inactive:true,class:"cursor-not-allowed border-none bg-gray-500/60 text-gray-700"}],defaultVariants:{variant:"default",dragging:false,loading:false,invalid:false,inactive:false,limitReached:false}}),U=cva("bg-grey-100 border-grey-300 flex w-full flex-col items-center justify-center rounded-lg border-2 border-dashed py-10 text-center",{variants:{dragging:{true:"",false:""},invalid:{true:"",false:""},inactive:{true:"",false:""},limitReached:{true:"",false:""}},compoundVariants:[{limitReached:true,dragging:false,class:"border-red-300"},{invalid:true,dragging:false,class:"border-red-600"},{inactive:true,class:"border-transparent bg-gray-500/60 text-gray-700"}],defaultVariants:{dragging:false,invalid:false,inactive:false,limitReached:false}}),J=({accept:c=B,files:s=k,maxFiles:a$1=5,maxSizeInMb:i=L,onDrop:j=C,className:E=void 0,wrapperClassName:u=void 0,extraInputProps:v=$,isLoading:r=false,icon:b$1=void 0,title:n=void 0,subtitle:o=void 0,variant:g="default",disabled:x=false,invalid:h=false,describedBy:y=void 0,onReject:N=void 0})=>{let l=s.length>=a$1,{getRootProps:R,getInputProps:T,isDragActive:p}=useDropzone({maxFiles:a$1,multiple:a$1>1,onDrop:j,maxSize:i*1024*1024,accept:c,onDropRejected:f=>{let F=S(f,{maxFiles:a$1,maxSizeInMb:i});N?N(F):b.error(F.replace(/\.$/,""));},disabled:l||x||r}),w=f=>typeof f=="string",D={...T(),...v,disabled:r||v.disabled},m=x&&!r;return g==="compact"?jsxs("div",{...R({"aria-describedby":y,className:a(M({variant:g,dragging:p,loading:r,invalid:h,inactive:m}),u)}),children:[jsx("input",{...D}),jsxs("div",{className:"flex min-w-0 items-center gap-4",children:[r?jsx(LuLoaderCircle,{"aria-hidden":true,className:"size-6 shrink-0 animate-spin text-green-800"}):b$1??jsx(LuUpload,{"aria-hidden":true,className:"size-6 shrink-0"}),jsx("p",{className:"truncate",children:n})]}),!r&&o&&jsx("p",{className:"shrink-0 text-sm",children:o})]}):jsx("div",{className:a(M({variant:g,dragging:p,limitReached:l,inactive:m}),u),...R({"aria-describedby":y}),children:jsx("div",{className:a(U({dragging:p,invalid:h,inactive:m,limitReached:l}),E),children:l?jsxs("div",{className:"text flex flex-col items-center",children:[jsx(LuFileWarning,{className:"h-8 w-8 text-red-500"}),jsxs("div",{className:"strong mt-4",children:["Maximum ",a$1," file limit reached"]})]}):jsxs(Fragment,{children:[jsx("input",{...D}),r?jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-700"}):b$1??jsx(LuUpload,{className:"h-8 w-8 text-gray-700"}),jsxs("div",{className:"text-grey-700 mt-4 flex flex-col gap-1",children:[w(n)?jsx("div",{className:"text-body-lg",children:n}):n??jsx("p",{className:"text-body-lg",children:"Drag an image or click to browse"}),w(o)?jsx("div",{className:"text-body-sm",children:o}):o??jsxs("p",{className:"text-body-sm",children:[i," MB max file size"]})]})]})})})};export{B as a,L as b,S as c,J as d};//# sourceMappingURL=chunk-SYJ2NNZY.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-SYJ2NNZY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/v2/dropzone/dropzone.tsx"],"names":["DEFAULT_ACCEPTED_FILE_TYPES","DEFAULT_MAX_SIZE_IN_MB","stableArray","stableObject","stableFunc","getRejectionMessage","rejections","maxFiles","maxSizeInMb","code","dropzoneVariants","cva","dropzoneBoxVariants","Dropzone","accept","files","onDrop","className","wrapperClassName","extraInputProps","isLoading","icon","title","subtitle","variant","disabled","invalid","describedBy","onReject","overMaxFileLimit","getRootProps","getInputProps","isDragActive","useDropzone","errorList","message","toast","isString","text","inputProps","isInactive","jsxs","cn","jsx","LuLoaderCircle","LuUpload","LuFileWarning","Fragment"],"mappings":"iRAMO,IAAMA,EAAsC,CACjD,YAAA,CAAc,CAAC,OAAA,CAAS,MAAM,CAAA,CAC9B,WAAA,CAAa,CAAC,MAAM,CAAA,CACpB,aAAc,CAAC,OAAO,EACtB,YAAA,CAAc,CAAC,OAAO,CAAA,CACtB,aAAc,CAAC,OAAO,CAAA,CACtB,iBAAA,CAAmB,CAAC,MAAM,CAAA,CAC1B,UAAA,CAAY,CAAC,MAAM,CAAA,CACnB,iBAAA,CAAmB,CAAC,MAAA,CAAQ,OAAO,EACnC,oBAAA,CAAsB,CAAC,MAAM,CAAA,CAC7B,0EAA2E,CAAC,OAAO,CACrF,CAAA,CACaC,CAAAA,CAAyB,GAChCC,CAAAA,CAAsB,EAAC,CACvBC,CAAAA,CAAe,EAAC,CAChBC,CAAAA,CAAa,IAAM,IAAA,CAEZC,CAAAA,CAAsB,CACjCC,CAAAA,CACA,CAAE,QAAA,CAAAC,CAAAA,CAAU,YAAAC,CAAY,CAAA,GACrB,CACH,IAAMC,EAAOH,CAAAA,CAAW,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,IAAA,CACvC,OAAIG,CAAAA,GAAS,gBAAA,CACJF,IAAa,CAAA,CAChB,mCAAA,CACA,CAAA,oCAAA,EAAuCA,CAAQ,oBAEjDE,CAAAA,GAAS,gBAAA,CACJF,IAAa,CAAA,CAChB,CAAA,mCAAA,EAAsCC,CAAW,CAAA,IAAA,CAAA,CACjD,CAAA,oDAAA,EAAuDA,CAAW,CAAA,IAAA,CAAA,CAEjE,0BACT,CAAA,CAEME,CAAAA,CAAmBC,IAAI,EAAA,CAAI,CAC/B,SAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,oDACT,OAAA,CAAS,CACP,yGACA,yDACF,CACF,EACA,QAAA,CAAU,CAAE,IAAA,CAAM,EAAA,CAAI,MAAO,EAAG,CAAA,CAChC,QAAS,CAAE,IAAA,CAAM,GAAI,KAAA,CAAO,EAAG,CAAA,CAC/B,OAAA,CAAS,CAAE,IAAA,CAAM,EAAA,CAAI,MAAO,EAAG,CAAA,CAC/B,SAAU,CAAE,IAAA,CAAM,EAAA,CAAI,KAAA,CAAO,EAAG,CAAA,CAChC,YAAA,CAAc,CAAE,IAAA,CAAM,EAAA,CAAI,MAAO,EAAG,CACtC,CAAA,CACA,gBAAA,CAAkB,CAChB,CAAE,OAAA,CAAS,SAAA,CAAW,QAAA,CAAU,KAAM,KAAA,CAAO,4BAA6B,CAAA,CAC1E,CAAE,QAAS,SAAA,CAAW,YAAA,CAAc,KAAM,KAAA,CAAO,0BAA2B,EAC5E,CAAE,OAAA,CAAS,SAAA,CAAW,QAAA,CAAU,KAAM,KAAA,CAAO,0BAA2B,EACxE,CAAE,OAAA,CAAS,UAAW,QAAA,CAAU,KAAA,CAAO,OAAA,CAAS,KAAA,CAAO,MAAO,+BAAgC,CAAA,CAC9F,CAAE,OAAA,CAAS,SAAA,CAAW,QAAS,IAAA,CAAM,KAAA,CAAO,gCAAiC,CAAA,CAC7E,CAAE,OAAA,CAAS,SAAA,CAAW,QAAA,CAAU,IAAA,CAAM,MAAO,4CAA6C,CAAA,CAC1F,CACE,OAAA,CAAS,UACT,QAAA,CAAU,KAAA,CACV,QAAS,KAAA,CACT,KAAA,CAAO,6EACT,CAAA,CACA,CAAE,OAAA,CAAS,SAAA,CAAW,QAAS,IAAA,CAAM,KAAA,CAAO,6BAA8B,CAAA,CAC1E,CACE,QAAS,SAAA,CACT,QAAA,CAAU,IAAA,CACV,KAAA,CAAO,6DACT,CACF,CAAA,CACA,gBAAiB,CACf,OAAA,CAAS,UACT,QAAA,CAAU,KAAA,CACV,OAAA,CAAS,KAAA,CACT,QAAS,KAAA,CACT,QAAA,CAAU,KAAA,CACV,YAAA,CAAc,KAChB,CACF,CAAC,CAAA,CAGKC,CAAAA,CAAsBD,IAC1B,kIAAA,CACA,CACE,SAAU,CACR,QAAA,CAAU,CAAE,IAAA,CAAM,EAAA,CAAI,KAAA,CAAO,EAAG,EAChC,OAAA,CAAS,CAAE,KAAM,EAAA,CAAI,KAAA,CAAO,EAAG,CAAA,CAC/B,QAAA,CAAU,CAAE,IAAA,CAAM,GAAI,KAAA,CAAO,EAAG,EAChC,YAAA,CAAc,CAAE,KAAM,EAAA,CAAI,KAAA,CAAO,EAAG,CACtC,EACA,gBAAA,CAAkB,CAChB,CAAE,YAAA,CAAc,IAAA,CAAM,SAAU,KAAA,CAAO,KAAA,CAAO,gBAAiB,CAAA,CAC/D,CAAE,OAAA,CAAS,IAAA,CAAM,SAAU,KAAA,CAAO,KAAA,CAAO,gBAAiB,CAAA,CAC1D,CAAE,QAAA,CAAU,IAAA,CAAM,MAAO,iDAAkD,CAC7E,EACA,eAAA,CAAiB,CAAE,SAAU,KAAA,CAAO,OAAA,CAAS,KAAA,CAAO,QAAA,CAAU,MAAO,YAAA,CAAc,KAAM,CAC3F,CACF,CAAA,CAwBaE,EAAW,CAAC,CACvB,MAAA,CAAAC,CAAAA,CAASd,EACT,KAAA,CAAAe,CAAAA,CAAQb,CAAAA,CACR,QAAA,CAAAK,IAAW,CAAA,CACX,WAAA,CAAAC,CAAAA,CAAcP,CAAAA,CACd,OAAAe,CAAAA,CAASZ,CAAAA,CACT,UAAAa,CAAAA,CAAY,MAAA,CACZ,iBAAAC,CAAAA,CAAmB,MAAA,CACnB,eAAA,CAAAC,CAAAA,CAAkBhB,EAClB,SAAA,CAAAiB,CAAAA,CAAY,MACZ,IAAA,CAAAC,GAAAA,CAAO,OACP,KAAA,CAAAC,CAAAA,CAAQ,MAAA,CACR,QAAA,CAAAC,EAAW,MAAA,CACX,OAAA,CAAAC,EAAU,SAAA,CACV,QAAA,CAAAC,EAAW,KAAA,CACX,OAAA,CAAAC,CAAAA,CAAU,KAAA,CACV,YAAAC,CAAAA,CAAc,MAAA,CACd,QAAA,CAAAC,CAAAA,CAAW,MACb,CAAA,GAAqB,CACnB,IAAMC,CAAAA,CAAmBd,EAAM,MAAA,EAAUR,GAAAA,CAEnC,CAAE,YAAA,CAAAuB,CAAAA,CAAc,cAAAC,CAAAA,CAAe,YAAA,CAAAC,CAAa,CAAA,CAAIC,YAAY,CAChE,QAAA,CAAA1B,IACA,QAAA,CAAUA,GAAAA,CAAW,EACrB,MAAA,CAAAS,CAAAA,CACA,OAAA,CAASR,CAAAA,CAAc,KAAO,IAAA,CAC9B,MAAA,CAAAM,EACA,cAAA,CAAiBoB,CAAAA,EAAc,CAC7B,IAAMC,CAAAA,CAAU9B,CAAAA,CAAoB6B,CAAAA,CAAW,CAAE,QAAA,CAAA3B,GAAAA,CAAU,WAAA,CAAAC,CAAY,CAAC,CAAA,CACpEoB,CAAAA,CAAUA,CAAAA,CAASO,CAAO,EACzBC,CAAAA,CAAM,KAAA,CAAMD,EAAQ,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAC,EAC7C,CAAA,CACA,QAAA,CAAUN,GAAoBJ,CAAAA,EAAYL,CAC5C,CAAC,CAAA,CAEKiB,CAAAA,CAAYC,GACT,OAAOA,CAAAA,EAAS,QAAA,CAGnBC,CAAAA,CAAa,CACjB,GAAGR,CAAAA,GACH,GAAGZ,CAAAA,CACH,SAAUC,CAAAA,EAAaD,CAAAA,CAAgB,QACzC,CAAA,CAEMqB,EAAaf,CAAAA,EAAY,CAACL,EAEhC,OAAII,CAAAA,GAAY,UAEZiB,IAAAA,CAAC,KAAA,CAAA,CACE,GAAGX,CAAAA,CAAa,CACf,kBAAA,CAAoBH,CAAAA,CACpB,UAAWe,CAAAA,CACThC,CAAAA,CAAiB,CACf,OAAA,CAAAc,CAAAA,CACA,QAAA,CAAUQ,CAAAA,CACV,QAASZ,CAAAA,CACT,OAAA,CAAAM,EACA,QAAA,CAAUc,CACZ,CAAC,CAAA,CACDtB,CACF,CACF,CAAC,EAED,QAAA,CAAA,CAAAyB,GAAAA,CAAC,SAAO,GAAGJ,CAAAA,CAAY,EACvBE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCAAA,CACZ,UAAArB,CAAAA,CACCuB,GAAAA,CAACC,cAAAA,CAAA,CAAe,cAAW,IAAA,CAAC,SAAA,CAAU,6CAAA,CAA8C,CAAA,CAEnFvB,KAAQsB,GAAAA,CAACE,QAAAA,CAAA,CAAS,aAAA,CAAW,IAAA,CAAC,UAAU,iBAAA,CAAkB,CAAA,CAE7DF,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,UAAA,CAAY,QAAA,CAAArB,EAAM,CAAA,CAAA,CACjC,CAAA,CACC,CAACF,CAAAA,EAAaG,CAAAA,EAAYoB,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,kBAAA,CAAoB,QAAA,CAAApB,EAAS,CAAA,CAAA,CACvE,CAAA,CAKFoB,IAAC,KAAA,CAAA,CACC,SAAA,CAAWD,CAAAA,CACThC,CAAAA,CAAiB,CACf,OAAA,CAAAc,CAAAA,CACA,SAAUQ,CAAAA,CACV,YAAA,CAAcH,EACd,QAAA,CAAUW,CACZ,CAAC,CAAA,CACDtB,CACF,CAAA,CACC,GAAGY,EAAa,CAAE,kBAAA,CAAoBH,CAAY,CAAC,CAAA,CAEpD,QAAA,CAAAgB,GAAAA,CAAC,OACC,SAAA,CAAWD,CAAAA,CACT9B,EAAoB,CAClB,QAAA,CAAUoB,EACV,OAAA,CAAAN,CAAAA,CACA,QAAA,CAAUc,CAAAA,CACV,aAAcX,CAChB,CAAC,EACDZ,CACF,CAAA,CAEC,SAAAY,CAAAA,CACCY,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCACb,QAAA,CAAA,CAAAE,GAAAA,CAACG,aAAAA,CAAA,CAAc,UAAU,sBAAA,CAAuB,CAAA,CAChDL,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,aAAA,CAAc,QAAA,CAAA,CAAA,UAAA,CAASlC,IAAS,qBAAA,CAAA,CAAmB,CAAA,CAAA,CACpE,EAEAkC,IAAAA,CAAAM,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAJ,IAAC,OAAA,CAAA,CAAO,GAAGJ,EAAY,CAAA,CACtBnB,CAAAA,CACCuB,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8EAAA,CAA+E,CAAA,CAE7FtB,KAAQsB,GAAAA,CAACE,QAAAA,CAAA,CAAS,SAAA,CAAU,uBAAA,CAAwB,EAEvDJ,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACZ,UAAAJ,CAAAA,CAASf,CAAK,EACbqB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,cAAA,CAAgB,QAAA,CAAArB,CAAAA,CAAM,CAAA,CAEpCA,GAASqB,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,cAAA,CAAe,QAAA,CAAA,kCAAA,CAAgC,EAEvEN,CAAAA,CAASd,CAAQ,CAAA,CAChBoB,GAAAA,CAAC,OAAI,SAAA,CAAU,cAAA,CAAgB,SAAApB,CAAAA,CAAS,CAAA,CAEvCA,GAAYkB,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,cAAA,CAAgB,UAAAjC,CAAAA,CAAY,mBAAA,CAAA,CAAiB,GAE3E,CAAA,CAAA,CACF,CAAA,CAEJ,EACF,CAEJ","file":"chunk-SYJ2NNZY.js","sourcesContent":["import { cva } from 'class-variance-authority';\nimport { Accept, FileRejection, useDropzone } from 'react-dropzone';\nimport { LuFileWarning, LuLoaderCircle, LuUpload } from 'react-icons/lu';\nimport { toast } from '@/v2/toast/toaster';\nimport { cn } from '@/lib/utils';\n\nexport const DEFAULT_ACCEPTED_FILE_TYPES: Accept = {\n 'image/jpeg': ['.jpeg', '.jpg'],\n 'image/png': ['.png'],\n 'image/avif': ['.avif'],\n 'image/heic': ['.heic'],\n 'image/webp': ['.webp'],\n 'application/pdf': ['.pdf'],\n 'text/csv': ['.csv'],\n 'application/xml': ['.xml', '.xlsx'],\n 'application/msword': ['.doc'],\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': ['.docx'],\n};\nexport const DEFAULT_MAX_SIZE_IN_MB = 10;\nconst stableArray: File[] = [];\nconst stableObject = {};\nconst stableFunc = () => null;\n\nexport const getRejectionMessage = (\n rejections: FileRejection[],\n { maxFiles, maxSizeInMb }: { maxFiles: number; maxSizeInMb: number },\n) => {\n const code = rejections[0]?.errors[0]?.code;\n if (code === 'too-many-files') {\n return maxFiles === 1\n ? 'Please select one file at a time.'\n : `Too many files. Please upload up to ${maxFiles} files at a time.`;\n }\n if (code === 'file-too-large') {\n return maxFiles === 1\n ? `File is too large. Maximum size is ${maxSizeInMb} MB.`\n : `File is too large. Please upload files smaller than ${maxSizeInMb} MB.`;\n }\n return 'File type not supported.';\n};\n\nconst dropzoneVariants = cva('', {\n variants: {\n variant: {\n default: 'flex min-h-48 flex-col gap-4 hover:cursor-pointer',\n compact: [\n 'flex items-center justify-between gap-4 rounded-lg border bg-white p-4 text-gray-700 transition-colors',\n 'focus-visible:outline-2 focus-visible:outline-green-800',\n ],\n },\n dragging: { true: '', false: '' },\n loading: { true: '', false: '' },\n invalid: { true: '', false: '' },\n inactive: { true: '', false: '' },\n limitReached: { true: '', false: '' },\n },\n compoundVariants: [\n { variant: 'default', dragging: true, class: 'border-grey-700 opacity-75' },\n { variant: 'default', limitReached: true, class: 'hover:cursor-not-allowed' },\n { variant: 'default', inactive: true, class: 'hover:cursor-not-allowed' },\n { variant: 'compact', dragging: false, loading: false, class: 'border-dashed border-gray-300' },\n { variant: 'compact', loading: true, class: 'border-dashed border-green-800' },\n { variant: 'compact', dragging: true, class: 'border-solid border-green-800 bg-green-100' },\n {\n variant: 'compact',\n inactive: false,\n loading: false,\n class: 'cursor-pointer hover:border-solid hover:border-green-800 hover:bg-green-100',\n },\n { variant: 'compact', invalid: true, class: 'border-solid border-red-600' },\n {\n variant: 'compact',\n inactive: true,\n class: 'cursor-not-allowed border-none bg-gray-500/60 text-gray-700',\n },\n ],\n defaultVariants: {\n variant: 'default',\n dragging: false,\n loading: false,\n invalid: false,\n inactive: false,\n limitReached: false,\n },\n});\n\n/** Dashed box inside the default variant. */\nconst dropzoneBoxVariants = cva(\n 'bg-grey-100 border-grey-300 flex w-full flex-col items-center justify-center rounded-lg border-2 border-dashed py-10 text-center',\n {\n variants: {\n dragging: { true: '', false: '' },\n invalid: { true: '', false: '' },\n inactive: { true: '', false: '' },\n limitReached: { true: '', false: '' },\n },\n compoundVariants: [\n { limitReached: true, dragging: false, class: 'border-red-300' },\n { invalid: true, dragging: false, class: 'border-red-600' },\n { inactive: true, class: 'border-transparent bg-gray-500/60 text-gray-700' },\n ],\n defaultVariants: { dragging: false, invalid: false, inactive: false, limitReached: false },\n },\n);\n\nexport type DropzoneProps = {\n accept?: Accept;\n files?: File[];\n maxFiles?: number;\n maxSizeInMb?: number;\n onDrop?: (acceptedFiles: File[]) => void;\n className?: string;\n wrapperClassName?: string;\n extraInputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n isLoading?: boolean;\n icon?: React.ReactNode;\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n variant?: 'default' | 'compact';\n disabled?: boolean;\n invalid?: boolean;\n /** Id of an element describing the zone, e.g. an error message. */\n describedBy?: string;\n /** Receives the rejection message instead of showing a toast. */\n onReject?: (message: string) => void;\n};\n\nexport const Dropzone = ({\n accept = DEFAULT_ACCEPTED_FILE_TYPES,\n files = stableArray,\n maxFiles = 5,\n maxSizeInMb = DEFAULT_MAX_SIZE_IN_MB,\n onDrop = stableFunc,\n className = undefined,\n wrapperClassName = undefined,\n extraInputProps = stableObject,\n isLoading = false,\n icon = undefined,\n title = undefined,\n subtitle = undefined,\n variant = 'default',\n disabled = false,\n invalid = false,\n describedBy = undefined,\n onReject = undefined,\n}: DropzoneProps) => {\n const overMaxFileLimit = files.length >= maxFiles;\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n maxFiles,\n multiple: maxFiles > 1,\n onDrop,\n maxSize: maxSizeInMb * 1024 * 1024,\n accept,\n onDropRejected: (errorList) => {\n const message = getRejectionMessage(errorList, { maxFiles, maxSizeInMb });\n if (onReject) onReject(message);\n else toast.error(message.replace(/\\.$/, ''));\n },\n disabled: overMaxFileLimit || disabled || isLoading,\n });\n\n const isString = (text?: React.ReactNode) => {\n return typeof text === 'string';\n };\n\n const inputProps = {\n ...getInputProps(),\n ...extraInputProps,\n disabled: isLoading || extraInputProps.disabled,\n };\n\n const isInactive = disabled && !isLoading;\n\n if (variant === 'compact') {\n return (\n <div\n {...getRootProps({\n 'aria-describedby': describedBy,\n className: cn(\n dropzoneVariants({\n variant,\n dragging: isDragActive,\n loading: isLoading,\n invalid,\n inactive: isInactive,\n }),\n wrapperClassName,\n ),\n })}\n >\n <input {...inputProps} />\n <div className=\"flex min-w-0 items-center gap-4\">\n {isLoading ? (\n <LuLoaderCircle aria-hidden className=\"size-6 shrink-0 animate-spin text-green-800\" />\n ) : (\n (icon ?? <LuUpload aria-hidden className=\"size-6 shrink-0\" />)\n )}\n <p className=\"truncate\">{title}</p>\n </div>\n {!isLoading && subtitle && <p className=\"shrink-0 text-sm\">{subtitle}</p>}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n dropzoneVariants({\n variant,\n dragging: isDragActive,\n limitReached: overMaxFileLimit,\n inactive: isInactive,\n }),\n wrapperClassName,\n )}\n {...getRootProps({ 'aria-describedby': describedBy })}\n >\n <div\n className={cn(\n dropzoneBoxVariants({\n dragging: isDragActive,\n invalid,\n inactive: isInactive,\n limitReached: overMaxFileLimit,\n }),\n className,\n )}\n >\n {overMaxFileLimit ? (\n <div className=\"text flex flex-col items-center\">\n <LuFileWarning className=\"h-8 w-8 text-red-500\" />\n <div className=\"strong mt-4\">Maximum {maxFiles} file limit reached</div>\n </div>\n ) : (\n <>\n <input {...inputProps} />\n {isLoading ? (\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-700\" />\n ) : (\n (icon ?? <LuUpload className=\"h-8 w-8 text-gray-700\" />)\n )}\n <div className=\"text-grey-700 mt-4 flex flex-col gap-1\">\n {isString(title) ? (\n <div className=\"text-body-lg\">{title}</div>\n ) : (\n (title ?? <p className=\"text-body-lg\">Drag an image or click to browse</p>)\n )}\n {isString(subtitle) ? (\n <div className=\"text-body-sm\">{subtitle}</div>\n ) : (\n (subtitle ?? <p className=\"text-body-sm\">{maxSizeInMb} MB max file size</p>)\n )}\n </div>\n </>\n )}\n </div>\n </div>\n );\n};\n"]}
|