@komensal/ui 0.16.1 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-Y7PKMFTB.js +295 -0
- package/dist/chunk-Y7PKMFTB.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +18 -19
- package/dist/index.js.map +1 -1
- package/dist/maps.js +362 -3
- package/dist/maps.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-5VBG6IKL.js +0 -649
- package/dist/chunk-5VBG6IKL.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/utils/color.ts","../src/utils/format.ts","../src/utils/styles.ts","../src/utils/tag-emoji.ts","../src/utils/toast-emitter.ts","../src/utils/url.ts","../src/utils/z-index.ts","../src/components/form-context.ts","../src/components/form.tsx","../src/components/label.tsx","../src/components/form-fields/label-field.tsx","../src/components/google-map-picker.tsx","../src/components/use-google-map-picker.ts","../src/components/form-fields/form-field-shell.tsx","../src/components/form-fields/map-picker-field.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","export function isLightColor(hex: string): boolean {\n const normalized = hex.replace('#', '')\n const r = parseInt(normalized.slice(0, 2), 16)\n const g = parseInt(normalized.slice(2, 4), 16)\n const b = parseInt(normalized.slice(4, 6), 16)\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255\n\n return luminance > 0.6\n}\n","const DEFAULT_CURRENCY = 'COP'\nconst DEFAULT_LOCALE = 'es-CO'\n\nexport function capitalize(value: null | string | undefined): string {\n if (!value) return ''\n const trimmed = value.trimStart()\n if (trimmed.length === 0) return value\n return trimmed.charAt(0).toLocaleUpperCase('es') + trimmed.slice(1)\n}\n\nexport function formatNumber(value: number, locale = DEFAULT_LOCALE): string {\n return new Intl.NumberFormat(locale, { style: 'decimal' }).format(value)\n}\n\nexport function formatPrice(value: number, locale = DEFAULT_LOCALE, currency = DEFAULT_CURRENCY): string {\n return new Intl.NumberFormat(locale, {\n currency,\n maximumFractionDigits: 0,\n style: 'currency'\n })\n .format(value)\n .replace(/\\s/g, '')\n}\n","import { cn } from './cn'\n\nexport const focusRing = cn('focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none')\n\nexport const inputSurface = cn(\n 'w-full rounded-[10px] px-3 text-base font-normal',\n 'border-border bg-surface text-foreground border',\n 'transition-all duration-200 ease-in-out',\n 'placeholder:text-icon-muted placeholder:text-sm placeholder:leading-none placeholder:font-normal',\n 'disabled:bg-inactive disabled:text-inactive-text disabled:border-inactive disabled:placeholder:text-inactive-text disabled:cursor-not-allowed'\n)\n\nexport const inputBase = cn('flex h-[50px] items-center justify-between gap-[10px]', inputSurface)\n\nexport const inputPlaceholder = cn('text-icon-muted text-sm leading-none font-normal')\n\nexport const inputDisabled = cn('cursor-not-allowed opacity-50')\n\nexport const inputCompact = cn(\n 'border-border bg-surface text-foreground focus:border-primary focus:ring-ring h-9 w-full rounded-lg border px-2.5 text-sm focus:ring-2 focus:outline-none'\n)\n\nexport const inputFocus = cn(\n 'focus:outline-none focus-visible:outline-none',\n 'focus-visible:ring-ring focus-visible:border-primary focus-visible:ring-2',\n 'data-[state=open]:ring-ring data-[state=open]:border-primary data-[state=open]:ring-2'\n)\n","const TAG_EMOJI_RULES: { emoji: string; keywords: string[] }[] = [\n { emoji: '🌶️', keywords: ['picante', 'picoso', 'spicy'] },\n { emoji: '🥜', keywords: ['nuez', 'nueces', 'mani', 'cacahuate', 'frutos secos'] },\n { emoji: '🌱', keywords: ['vegano', 'vegetariano', 'vegan'] },\n { emoji: '🌾', keywords: ['sin gluten', 'gluten free'] },\n { emoji: '🥛', keywords: ['lacteos', 'leche', 'lactosa'] },\n { emoji: '🦐', keywords: ['marisco', 'camaron'] },\n { emoji: '🔥', keywords: ['popular', 'top ventas'] },\n { emoji: '🆕', keywords: ['nuevo', 'new'] },\n { emoji: '🍬', keywords: ['dulce'] },\n { emoji: '🧊', keywords: ['frio', 'helado'] }\n]\n\nexport function getTagEmoji(tag: string): null | string {\n const normalized = normalize(tag)\n const match = TAG_EMOJI_RULES.find((rule) => rule.keywords.some((keyword) => normalized.includes(keyword)))\n return match?.emoji ?? null\n}\n\nfunction normalize(text: string): string {\n return text\n .toLowerCase()\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n}\n","import { ToastOptions, ToastType } from '../types/toast'\n\ntype ToastEmitter = ((type: ToastType, options: ToastOptions) => void) | null\n\nlet emitToast: ToastEmitter = null\n\nexport const toast = {\n error(options: string | ToastOptions) {\n emit('destructive', options)\n },\n info(options: string | ToastOptions) {\n emit('info', options)\n },\n success(options: string | ToastOptions) {\n emit('success', options)\n },\n wait(options: string | ToastOptions) {\n emit('wait', options)\n },\n warning(options: string | ToastOptions) {\n emit('warning', options)\n }\n}\n\nexport function registerToastEmitter(fn: ToastEmitter) {\n emitToast = fn\n}\n\nfunction emit(type: ToastType, options: string | ToastOptions) {\n if (!emitToast) return\n\n if (typeof options === 'string') {\n emitToast(type, { title: options })\n } else {\n emitToast(type, options)\n }\n}\n","export function isSafeUrl(url: string): boolean {\n try {\n const parsed = new URL(url, 'https://placeholder.invalid')\n return parsed.protocol === 'http:' || parsed.protocol === 'https:'\n } catch {\n return false\n }\n}\n","export const zPopover = 'z-50'\nexport const zDialogOverlay = 'z-60'\nexport const zDialogContent = 'z-70'\nexport const zPopoverAboveDialog = 'z-100'\nexport const zToast = 'z-4000'\n","import * as React from 'react'\nimport { FieldPath, FieldValues, useFormContext } from 'react-hook-form'\n\nexport interface FormControlA11yProps {\n 'aria-describedby'?: string\n 'aria-invalid': boolean\n id: string\n}\n\ninterface FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> {\n name: TName\n}\n\ninterface FormItemContextValue {\n id: string\n}\n\nexport const FormFieldContext = React.createContext<FormFieldContextValue | null>(null)\n\nexport const FormItemContext = React.createContext<FormItemContextValue | null>(null)\n\nexport const getFormItemId = (id: string) => `${id}-form-item`\n\nexport const useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { formState, getFieldState } = useFormContext()\n\n if (!fieldContext) {\n throw new Error('useFormField must be used within <FormField>')\n }\n\n if (!itemContext) {\n throw new Error('useFormField must be used within <FormItem>')\n }\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n const { id } = itemContext\n\n return {\n formDescriptionId: `${id}-form-item-description`,\n formItemId: getFormItemId(id),\n formMessageId: `${id}-form-item-message`,\n id,\n name: fieldContext.name,\n ...fieldState\n }\n}\n\nexport const useFormControlProps = (): FormControlA11yProps => {\n const { error, formItemId, formMessageId } = useFormField()\n\n return {\n 'aria-describedby': error?.message ? formMessageId : undefined,\n 'aria-invalid': !!error,\n id: formItemId\n }\n}\n\nexport const useOptionalFormItemId = () => {\n const itemContext = React.useContext(FormItemContext)\n return itemContext ? getFormItemId(itemContext.id) : undefined\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport * as React from 'react'\nimport { Controller, ControllerProps, FieldPath, FieldValues, FormProvider } from 'react-hook-form'\n\nimport { cn } from '../utils'\nimport { FormFieldContext, FormItemContext, useFormControlProps, useFormField } from './form-context'\n\nconst Form = FormProvider\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div className={cn('space-y-1', className)} ref={ref} {...props} />\n </FormItemContext.Provider>\n )\n }\n)\nFormItem.displayName = 'FormItem'\n\nconst FormControl = React.forwardRef<React.ElementRef<typeof Slot>, React.ComponentPropsWithoutRef<typeof Slot>>(\n ({ ...props }, ref) => {\n const controlProps = useFormControlProps()\n\n return <Slot {...controlProps} ref={ref} {...props} />\n }\n)\nFormControl.displayName = 'FormControl'\n\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ children, className, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error?.message ? String(error.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p className={cn('text-destructive text-xs font-medium', className)} id={formMessageId} ref={ref} {...props}>\n {body}\n </p>\n )\n }\n)\nFormMessage.displayName = 'FormMessage'\n\nexport { Form, FormControl, FormField, FormItem, FormMessage, useFormField }\n","import * as LabelPrimitive from '@radix-ui/react-label'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\nconst labelVariants = cva('text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70')\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root className={cn(labelVariants(), className)} ref={ref} {...props} />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import { cn } from '../../utils'\nimport { useOptionalFormItemId } from '../form-context'\nimport { Label } from '../label'\n\ninterface LabelFieldProps {\n htmlFor?: string\n label?: string\n labelClassName?: string\n name: string\n visualRequired?: boolean\n}\n\nexport const LabelField = ({ htmlFor, label, labelClassName, name, visualRequired }: LabelFieldProps) => {\n const formItemId = useOptionalFormItemId()\n\n return (\n <Label\n className={cn('text-body mb-2 text-start text-sm leading-none font-normal tracking-normal', labelClassName)}\n htmlFor={htmlFor ?? formItemId ?? name}\n >\n <span>{label}</span> {visualRequired && <span className='text-destructive'> *</span>}\n </Label>\n )\n}\n","import { AdvancedMarker, APIProvider, Map } from '@vis.gl/react-google-maps'\nimport { useId } from 'react'\n\nimport { cn, focusRing, inputBase, inputFocus, zPopover } from '../utils'\nimport { PICKER_MAP_ID, useGoogleMapPicker } from './use-google-map-picker'\n\nconst DEFAULT_CENTER = { lat: 4.711, lng: -74.0721 }\n\nexport interface GoogleMapPickerProps {\n apiKey?: string\n 'aria-describedby'?: string\n 'aria-invalid'?: boolean\n 'aria-label'?: string\n 'aria-labelledby'?: string\n centerOn?: google.maps.LatLngLiteral\n countryCode?: string\n disabled?: boolean\n hasError?: boolean\n id?: string\n initialPosition?: google.maps.LatLngLiteral\n locationQuery?: string\n locationZoom?: number\n mapId?: string\n onAddressResolved?: (resolved: ResolvedAddress) => void\n onChange: (address: string) => void\n onError?: (error: unknown) => void\n placeholder?: string\n value: string\n}\n\nexport interface ResolvedAddress {\n address: string\n city: null | string\n country: null | string\n countryName: null | string\n department: null | string\n lat: null | number\n lng: null | number\n}\n\nconst MapPickerContent = (props: GoogleMapPickerProps) => {\n const {\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n disabled,\n hasError,\n id,\n mapId,\n placeholder\n } = props\n const listboxId = useId()\n const {\n handleBlur,\n handleInputChange,\n handleMapClick,\n handleMarkerDragEnd,\n handleSelect,\n inputValue,\n position,\n setShowDropdown,\n showDropdown,\n suggestions\n } = useGoogleMapPicker(props)\n\n const isExpanded = showDropdown && suggestions.length > 0\n\n return (\n <div className='flex flex-col gap-3'>\n <div className='relative'>\n <input\n aria-autocomplete='list'\n aria-controls={isExpanded ? listboxId : undefined}\n aria-describedby={ariaDescribedBy}\n aria-expanded={isExpanded}\n aria-invalid={ariaInvalid ?? (hasError ? true : undefined)}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(inputBase, inputFocus, hasError && 'border-destructive')}\n disabled={disabled}\n id={id}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onFocus={() => suggestions.length > 0 && setShowDropdown(true)}\n placeholder={placeholder}\n role='combobox'\n type='text'\n value={inputValue}\n />\n\n {isExpanded && (\n <ul\n className={cn(\n 'border-border bg-surface absolute mt-1 w-full overflow-hidden rounded-[10px] border shadow-md',\n zPopover\n )}\n id={listboxId}\n role='listbox'\n >\n {suggestions.map((suggestion) => (\n <li key={suggestion.placePrediction?.placeId ?? suggestion.placePrediction?.text.text} role='none'>\n <button\n aria-selected={false}\n className={cn(\n 'text-foreground hover:bg-hover w-full px-4 py-3 text-left text-sm transition-colors focus-visible:ring-inset',\n focusRing\n )}\n onClick={() => void handleSelect(suggestion)}\n role='option'\n type='button'\n >\n {suggestion.placePrediction?.text.text ?? ''}\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n <div className='border-border h-59 overflow-hidden rounded-[10px] border md:h-87.5'>\n <Map\n defaultCenter={DEFAULT_CENTER}\n defaultZoom={5}\n disableDefaultUI\n gestureHandling='cooperative'\n id={PICKER_MAP_ID}\n mapId={mapId ?? import.meta.env.VITE_GOOGLE_MAPS_MAP_ID ?? 'DEMO_MAP_ID'}\n onClick={handleMapClick}\n style={{ height: '100%', width: '100%' }}\n >\n {position && <AdvancedMarker draggable={!disabled} onDragEnd={handleMarkerDragEnd} position={position} />}\n </Map>\n </div>\n </div>\n )\n}\n\nexport const GoogleMapPicker = (props: GoogleMapPickerProps) => (\n <APIProvider apiKey={props.apiKey ?? import.meta.env.VITE_GOOGLE_MAPS_API_KEY ?? ''} language='es' region='CO'>\n <MapPickerContent {...props} />\n </APIProvider>\n)\n","import type { MapMouseEvent } from '@vis.gl/react-google-maps'\n\nimport { useMap, useMapsLibrary } from '@vis.gl/react-google-maps'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { GoogleMapPickerProps } from './google-map-picker'\n\nexport const PICKER_MAP_ID = 'komensal-restaurant-map'\nconst SELECTED_ZOOM = 15\nconst CITY_ZOOM = 12\nconst DEBOUNCE_MS = 300\nconst BLUR_CLOSE_DELAY_MS = 150\n\ninterface RawComponent {\n long: null | string\n short: null | string\n types: string[]\n}\n\nconst parseComponents = (components: RawComponent[]) => {\n const find = (type: string) => components.find((c) => c.types.includes(type))\n const country = find('country')\n const department = find('administrative_area_level_1')\n const city = find('locality') ?? find('administrative_area_level_2')\n return {\n city: city?.long ?? null,\n country: country?.short ?? null,\n countryName: country?.long ?? null,\n department: department?.long ?? null\n }\n}\n\nexport function useGoogleMapPicker({\n centerOn,\n countryCode,\n disabled,\n initialPosition,\n locationQuery,\n locationZoom,\n onAddressResolved,\n onChange,\n onError,\n value\n}: GoogleMapPickerProps) {\n const placesLib = useMapsLibrary('places')\n const geocodingLib = useMapsLibrary('geocoding')\n const map = useMap(PICKER_MAP_ID)\n const onChangeRef = useRef(onChange)\n const onResolvedRef = useRef(onAddressResolved)\n const onErrorRef = useRef(onError)\n const geocoder = useMemo<google.maps.Geocoder | null>(\n () => (geocodingLib ? new geocodingLib.Geocoder() : null),\n [geocodingLib]\n )\n const debounceRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n const blurTimeoutRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n\n const [inputValue, setInputValue] = useState(value)\n const [suggestions, setSuggestions] = useState<google.maps.places.AutocompleteSuggestion[]>([])\n const [showDropdown, setShowDropdown] = useState(false)\n const [sessionToken, setSessionToken] = useState<google.maps.places.AutocompleteSessionToken | undefined>()\n const [position, setPosition] = useState<google.maps.LatLngLiteral | null>(initialPosition ?? null)\n\n useEffect(() => {\n onChangeRef.current = onChange\n onResolvedRef.current = onAddressResolved\n onErrorRef.current = onError\n })\n\n useEffect(\n () => () => {\n if (debounceRef.current) clearTimeout(debounceRef.current)\n if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current)\n },\n []\n )\n\n const [prevValue, setPrevValue] = useState(value)\n if (prevValue !== value) {\n setPrevValue(value)\n setInputValue(value)\n }\n\n useEffect(() => {\n if (map && centerOn) {\n map.panTo(centerOn)\n map.setZoom(CITY_ZOOM)\n }\n }, [map, centerOn])\n\n useEffect(() => {\n if (map && position) {\n map.panTo(position)\n map.setZoom(SELECTED_ZOOM)\n }\n }, [map, position])\n\n const [prevPlacesLib, setPrevPlacesLib] = useState(placesLib)\n if (prevPlacesLib !== placesLib) {\n setPrevPlacesLib(placesLib)\n if (placesLib) setSessionToken(new placesLib.AutocompleteSessionToken())\n }\n\n useEffect(() => {\n if (!geocoder || !locationQuery || !map || position) return\n const g = geocoder\n const ctrl = { cancelled: false }\n void (async () => {\n try {\n const { results } = await g.geocode({ address: locationQuery })\n if (ctrl.cancelled || results.length === 0) return\n const loc = results[0].geometry.location\n map.panTo({ lat: loc.lat(), lng: loc.lng() })\n map.setZoom(locationZoom ?? CITY_ZOOM)\n } catch (error) {\n if (!ctrl.cancelled) {\n console.error('[GoogleMapPicker] geocode by query failed', error)\n onErrorRef.current?.(error)\n }\n }\n })()\n return () => {\n ctrl.cancelled = true\n }\n }, [geocoder, locationQuery, locationZoom, map, position])\n\n const fetchSuggestions = useCallback(\n async (input: string) => {\n if (!placesLib || input.length < 2) {\n setSuggestions([])\n return\n }\n try {\n const result = await placesLib.AutocompleteSuggestion.fetchAutocompleteSuggestions({\n includedRegionCodes: countryCode ? [countryCode.trim().toLowerCase()] : undefined,\n input,\n sessionToken\n })\n setSuggestions(result.suggestions)\n setShowDropdown(true)\n } catch (error) {\n console.error('[GoogleMapPicker] fetchAutocompleteSuggestions failed', error)\n onErrorRef.current?.(error)\n setSuggestions([])\n }\n },\n [placesLib, sessionToken, countryCode]\n )\n\n const reverseGeocode = useCallback(\n async (latLng: google.maps.LatLngLiteral) => {\n if (!geocoder) return\n try {\n const { results } = await geocoder.geocode({ location: latLng })\n if (results.length > 0) {\n const result = results[0]\n const address = result.formatted_address\n setInputValue(address)\n onChangeRef.current(address)\n const parts = parseComponents(\n result.address_components.map((c) => ({ long: c.long_name, short: c.short_name, types: c.types }))\n )\n onResolvedRef.current?.({ address, lat: latLng.lat, lng: latLng.lng, ...parts })\n }\n } catch (error) {\n console.error('[GoogleMapPicker] reverse geocode failed', error)\n onErrorRef.current?.(error)\n }\n },\n [geocoder]\n )\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n setInputValue(val)\n onChangeRef.current(val)\n\n if (debounceRef.current) clearTimeout(debounceRef.current)\n debounceRef.current = setTimeout(() => void fetchSuggestions(val), DEBOUNCE_MS)\n }\n\n const handleSelect = async (suggestion: google.maps.places.AutocompleteSuggestion) => {\n const prediction = suggestion.placePrediction\n if (!prediction) return\n\n const place = prediction.toPlace()\n await place.fetchFields({ fields: ['formattedAddress', 'location', 'addressComponents'] })\n\n const address = place.formattedAddress ?? prediction.text.text\n setInputValue(address)\n onChangeRef.current(address)\n setSuggestions([])\n setShowDropdown(false)\n\n const lat = place.location?.lat() ?? null\n const lng = place.location?.lng() ?? null\n if (place.location) {\n setPosition({ lat: place.location.lat(), lng: place.location.lng() })\n }\n\n const parts = parseComponents(\n (place.addressComponents ?? []).map((c) => ({ long: c.longText, short: c.shortText, types: c.types }))\n )\n onResolvedRef.current?.({ address, lat, lng, ...parts })\n\n if (placesLib) setSessionToken(new placesLib.AutocompleteSessionToken())\n }\n\n const handleBlur = () => {\n if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current)\n blurTimeoutRef.current = setTimeout(() => setShowDropdown(false), BLUR_CLOSE_DELAY_MS)\n }\n\n const handleMapClick = useCallback(\n (e: MapMouseEvent) => {\n if (disabled || !e.detail.latLng) return\n const latLng = e.detail.latLng\n setPosition(latLng)\n void reverseGeocode(latLng)\n },\n [disabled, reverseGeocode]\n )\n\n const handleMarkerDragEnd = useCallback(\n (e: google.maps.MapMouseEvent) => {\n const latLng = e.latLng\n if (!latLng) return\n const pos = { lat: latLng.lat(), lng: latLng.lng() }\n setPosition(pos)\n void reverseGeocode(pos)\n },\n [reverseGeocode]\n )\n\n return {\n handleBlur,\n handleInputChange,\n handleMapClick,\n handleMarkerDragEnd,\n handleSelect,\n inputValue,\n position,\n setShowDropdown,\n showDropdown,\n suggestions\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { cn } from '../../utils'\nimport { FormItem, FormMessage } from '../form'\nimport { type FormControlA11yProps, useFormControlProps } from '../form-context'\nimport { LabelField } from './label-field'\n\ninterface FormFieldShellProps {\n children: (controlProps: FormControlA11yProps) => ReactNode\n hasError?: boolean\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: string\n visualRequired?: boolean\n}\n\nconst FieldControl = ({ children }: { children: FormFieldShellProps['children'] }) => {\n const controlProps = useFormControlProps()\n return <>{children(controlProps)}</>\n}\n\nexport const FormFieldShell = ({\n children,\n hasError,\n label,\n labelClassName,\n mainClassName,\n name,\n visualRequired\n}: FormFieldShellProps) => (\n <FormItem className={cn('flex flex-col', mainClassName)}>\n <LabelField\n label={label}\n labelClassName={cn(labelClassName, hasError && 'text-destructive')}\n name={name}\n visualRequired={visualRequired}\n />\n <FieldControl>{children}</FieldControl>\n <FormMessage />\n </FormItem>\n)\n","import type { Control, FieldValues, Path } from 'react-hook-form'\n\nimport { FormField } from '../form'\nimport { GoogleMapPicker, type GoogleMapPickerProps } from '../google-map-picker'\nimport { FormFieldShell } from './form-field-shell'\n\ntype MapPickerFieldProps<T extends FieldValues> = Omit<GoogleMapPickerProps, 'hasError' | 'onChange' | 'value'> & {\n control: Control<T>\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: Path<T>\n visualRequired?: boolean\n}\n\nexport const MapPickerField = <T extends FieldValues>({\n control,\n label,\n labelClassName,\n mainClassName,\n name,\n visualRequired,\n ...pickerProps\n}: MapPickerFieldProps<T>) => (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormFieldShell\n hasError={!!fieldState.error}\n label={label}\n labelClassName={labelClassName}\n mainClassName={mainClassName}\n name={name}\n visualRequired={visualRequired}\n >\n {(controlProps) => (\n <GoogleMapPicker\n {...pickerProps}\n {...controlProps}\n hasError={!!fieldState.error}\n onChange={field.onChange}\n value={field.value ?? ''}\n />\n )}\n </FormFieldShell>\n )}\n />\n)\n"],"mappings":"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","names":["React","React","jsx","jsx","useId","jsx","jsxs","useId","jsx","jsxs","jsx"]}
|