@rpcbase/ui 0.282.0 → 0.284.0

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/index13.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { cn as e } from "./index12.js";
2
2
  import { c as t } from "react/compiler-runtime";
3
- import "react";
4
3
  import { jsx as n } from "react/jsx-runtime";
5
4
  //#region src/components/Input/index.tsx
6
5
  function r(r) {
@@ -1 +1 @@
1
- {"version":3,"file":"index13.js","names":["type"],"sources":["../src/components/Input/index.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\ntype InputProps = React.ComponentProps<\"input\">\n\nexport function Input(props: InputProps) {\n const { className, type, ...rest } = props\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...rest}\n />\n )\n}\n\nInput.displayName = \"Input\"\n"],"mappings":";;;;;AAOA,SAAO,EAAA,GAAA;CAAA,IAAA,IAAA,EAAA,EAAA,GAAA,GAAA,GAAA;CAAA,AAAA,EAAA,OAAA,KACqC,IAAA,EAAA,IAAA,IAAA,EAAA,IAAA,IAAA,EAAA,OAA1C,wBAAA,GAAA,KAAqC,GAAK,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAAA,AAAA,EAAA,OAAA,IAOrC,IAAA,EAAA,MAHU,IAAA,EACT,qaACA,CACF,GAAC,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAED,OAFC,EAAA,OAAA,KAAA,EAAA,OAAA,KAAA,EAAA,OAAA,KALH,IAAA,kBAAA,SAAA;EACQ;EACK,WAAA;EAGV,GACG;CAAI,CAAA,GACR,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,KAAA,IAAA,EAAA,IAPF;AAOE;AAIN,EAAM,cAAc"}
1
+ {"version":3,"file":"index13.js","names":["cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )","<input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...rest}\n />"],"sources":["../src/components/Input/index.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\ntype InputProps = React.ComponentProps<\"input\">\n\nexport function Input(props: InputProps) {\n const { className, type, ...rest } = props\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...rest}\n />\n )\n}\n\nInput.displayName = \"Input\"\n"],"mappings":";;;;AAOA,SAAgB,EAAM,GAAmB;gBAC/B,GAAoB,GAAT;CAAkB,AAAA,EAAA,OAAA,sCAA/B,wBAAmB,GAAA,KAAY;CAItBA,IAAAA;CAET,AAAA,EAAA,OAAA,gBAFS,IAAA,EACT,qaACA,CACF,GADE,EAAA,KAAA;CAJJC,IAAAA;CADF,OAOQ,EAAA,OAAA,KAAA,EAAA,OAJOD,KAAAA,EAAAA,OADL,KADR,IAAA,kBAAC,SAAD;EACQ;EACN,WAAWA;EAIX,GAAI;CACL,CAAA,GADK,EAAA,KAAA,GAJOA,EAAAA,KAAAA,GADL,EAAA,KAAA,yBADRC;AASJ;AAEA,EAAM,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"index14.js","names":["displayText","index","matched","lastIndex","parts","prediction","error","e","prev"],"sources":["../src/components/AddressAutocompleteInput/index.tsx"],"sourcesContent":["/// <reference types=\"google.maps\" />\n\nimport { ReactNode, ChangeEvent, KeyboardEvent, useState, useEffect, useRef, useMemo } from \"react\"\nimport clsx from \"clsx\"\nimport { Loader2 } from \"lucide-react\"\n\nimport { useMapsLibrary } from \"@/helpers/useMapsLibrary\"\nimport { Input } from \"@/components/Input\"\nimport { cn } from \"@/lib/utils\"\n\n\nconst DEFAULT_ALLOWED_TYPES = new Set([\n \"street_address\",\n \"route\",\n \"premise\",\n \"subpremise\",\n \"intersection\",\n \"sublocality\",\n \"sublocality_level_1\",\n \"sublocality_level_2\",\n \"sublocality_level_3\",\n \"sublocality_level_4\",\n \"sublocality_level_5\",\n \"administrative_area_level_1\",\n \"administrative_area_level_2\",\n \"administrative_area_level_3\",\n \"administrative_area_level_4\",\n \"administrative_area_level_5\",\n \"administrative_area_level_6\",\n \"administrative_area_level_7\",\n \"postal_code\",\n \"locality\",\n \"country\",\n \"geocode\",\n \"plus_code\",\n \"political\",\n \"neighborhood\",\n \"colloquial_area\",\n \"lodging\",\n \"train_station\",\n \"transit_station\",\n])\n\nconst detailedTextByPrediction = new WeakMap<google.maps.places.PlacePrediction, string>()\n\nconst getDisplayText = (prediction: google.maps.places.PlacePrediction) => {\n const fullText = detailedTextByPrediction.get(prediction) ?? prediction.text?.text ?? \"\"\n return fullText.replace(/, France$/, \"\").trim()\n}\n\nconst PredictionItem = ({ prediction }: { prediction: google.maps.places.PlacePrediction }) => {\n const displayText = getDisplayText(prediction)\n const fullText = detailedTextByPrediction.get(prediction) ?? prediction.text?.text ?? \"\"\n const matches = prediction.text?.matches ?? []\n const wasCountryRemoved = displayText.length < fullText.length\n\n if (matches.length === 0) {\n return <>{displayText}</>\n }\n\n const parts: ReactNode[] = []\n let lastIndex = 0\n\n matches.forEach((substring, index) => {\n if (wasCountryRemoved && substring.startOffset >= displayText.length) {\n return\n }\n\n const startOffset = substring.startOffset\n const endOffset = Math.min(substring.endOffset, displayText.length)\n\n if (startOffset > lastIndex) {\n parts.push(displayText.substring(lastIndex, startOffset))\n }\n\n if (endOffset > startOffset) {\n const matched = displayText.substring(startOffset, endOffset)\n parts.push(<strong key={index}>{matched}</strong>)\n }\n\n lastIndex = Math.max(lastIndex, endOffset)\n })\n\n if (lastIndex < displayText.length) {\n parts.push(displayText.substring(lastIndex))\n }\n\n if (parts.length === 0) {\n return <>{displayText}</>\n }\n\n return <>{parts}</>\n}\n\nconst isAllowedPrediction = (\n prediction: google.maps.places.PlacePrediction,\n allowedTypes: ReadonlySet<string> | null,\n) => {\n if (!prediction.types || prediction.types.length === 0) {\n return true\n }\n\n if (!allowedTypes || allowedTypes.size === 0) {\n return true\n }\n\n return prediction.types.some(type => allowedTypes.has(type))\n}\n\nconst isNamedPlacePrediction = (prediction: google.maps.places.PlacePrediction) =>\n prediction.types?.some(type => type === \"establishment\" || type === \"point_of_interest\") ?? false\n\nconst getPredictionId = (prediction: google.maps.places.PlacePrediction, index: number) =>\n prediction.placeId || `${prediction.text?.text ?? \"prediction\"}-${index}`\n\nconst getUniquePredictions = (predictions: google.maps.places.PlacePrediction[]) => {\n const map = new Map<string, google.maps.places.PlacePrediction>()\n\n predictions.forEach(prediction => {\n const key = prediction.placeId\n\n if (!key) {\n return\n }\n\n if (!map.has(key)) {\n map.set(key, prediction)\n }\n })\n\n return Array.from(map.values())\n}\n\nconst getFilteredPredictions = (\n predictions: google.maps.places.PlacePrediction[],\n allowedTypes: ReadonlySet<string> | null,\n) => predictions.filter(prediction => isAllowedPrediction(prediction, allowedTypes))\n\nconst sortPredictions = (predictions: google.maps.places.PlacePrediction[]) =>\n predictions.sort((a, b) => {\n const aDistance = a.distanceMeters ?? Number.POSITIVE_INFINITY\n const bDistance = b.distanceMeters ?? Number.POSITIVE_INFINITY\n\n return aDistance - bDistance\n })\n\nconst buildDisplayPredictions = (\n predictions: google.maps.places.PlacePrediction[],\n allowedTypes: ReadonlySet<string> | null,\n) => sortPredictions(getFilteredPredictions(getUniquePredictions(predictions), allowedTypes))\n\nconst isExactMatch = (prediction: google.maps.places.PlacePrediction, value: string) => {\n const display = getDisplayText(prediction)\n return display.toLowerCase() === value.trim().toLowerCase()\n}\n\nexport const AddressAutocompleteInput = ({\n id,\n label,\n placeholder,\n value,\n onValueChange,\n disabled,\n name,\n className,\n autofillShimName,\n googleMapsApiKey,\n locationRestriction,\n allowedTypes,\n loadingIndicator,\n}: {\n id: string\n label: string\n placeholder: string\n value: string | undefined\n onValueChange: (value: string) => void\n disabled?: boolean\n name?: string\n className?: string\n autofillShimName?: string\n googleMapsApiKey?: string\n locationRestriction?: google.maps.LatLngBoundsLiteral | google.maps.LatLngBounds\n allowedTypes?: Iterable<string>\n loadingIndicator?: ReactNode\n}) => {\n const [inputValue, setInputValue] = useState(value ?? \"\")\n const [predictions, setPredictions] = useState<google.maps.places.PlacePrediction[]>([])\n const [isDropdownOpen, setIsDropdownOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const [isLoading, setIsLoading] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLUListElement>(null)\n const isSelecting = useRef(false)\n const hasUserTyped = useRef(false)\n const sessionTokenRef = useRef<google.maps.places.AutocompleteSessionToken | null>(null)\n const detailedTextRequestsRef = useRef(new Map<string, Promise<string | undefined>>())\n const optionRefs = useRef<(HTMLLIElement | null)[]>([])\n const scrollBehaviorRef = useRef<ScrollBehavior>(\"smooth\")\n const valueRef = useRef(value)\n const onValueChangeRef = useRef(onValueChange)\n const placesLibrary = useMapsLibrary(\"places\", googleMapsApiKey)\n const allowedTypesSet = useMemo(() => {\n if (!allowedTypes) {\n return DEFAULT_ALLOWED_TYPES\n }\n\n const newSet = new Set<string>()\n for (const type of allowedTypes) {\n newSet.add(type)\n }\n return newSet\n }, [allowedTypes])\n\n useEffect(() => {\n setInputValue(value ?? \"\")\n hasUserTyped.current = false\n }, [value])\n\n useEffect(() => {\n valueRef.current = value\n onValueChangeRef.current = onValueChange\n }, [onValueChange, value])\n\n useEffect(() => {\n if (isSelecting.current) {\n isSelecting.current = false\n return\n }\n\n const trimmed = inputValue.trim()\n\n if (trimmed === \"\") {\n setIsLoading(false)\n } else {\n setIsLoading(true)\n }\n\n let isActive = true\n\n const handler = setTimeout(() => {\n if (!isActive) {\n return\n }\n\n if (trimmed === \"\") {\n setPredictions([])\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n if (valueRef.current !== \"\") {\n onValueChangeRef.current(\"\")\n }\n return\n }\n\n if (!placesLibrary) return\n\n const { AutocompleteSuggestion, AutocompleteSessionToken } = placesLibrary\n\n if (!AutocompleteSuggestion || !AutocompleteSessionToken) {\n console.error(\"AddressAutocompleteInput: missing AutocompleteSuggestion or AutocompleteSessionToken exports\")\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n return\n }\n\n if (!sessionTokenRef.current) {\n sessionTokenRef.current = new AutocompleteSessionToken()\n }\n\n const request: google.maps.places.AutocompleteRequest = {\n input: inputValue,\n sessionToken: sessionTokenRef.current ?? undefined,\n includedRegionCodes: [\"fr\"],\n }\n if (locationRestriction) {\n request.locationRestriction = locationRestriction\n }\n\n AutocompleteSuggestion.fetchAutocompleteSuggestions(request)\n .then(async (response: { suggestions: google.maps.places.AutocompleteSuggestion[] }) => {\n if (!isActive) {\n return\n }\n\n const placePredictions = response.suggestions\n .map((suggestion: google.maps.places.AutocompleteSuggestion) => suggestion.placePrediction)\n .filter((prediction): prediction is google.maps.places.PlacePrediction => Boolean(prediction))\n\n const combinedPredictions = buildDisplayPredictions(placePredictions, allowedTypesSet)\n await Promise.all(combinedPredictions.map(async prediction => {\n const placeId = prediction.placeId\n if (!placeId || !isNamedPlacePrediction(prediction)) {\n return\n }\n\n let detailedTextRequest = detailedTextRequestsRef.current.get(placeId)\n if (!detailedTextRequest) {\n detailedTextRequest = (async () => {\n try {\n const place = prediction.toPlace()\n const result = await place.fetchFields({ fields: [\"formattedAddress\"] })\n const formattedAddress = result.place.formattedAddress?.trim()\n const placeName = prediction.mainText?.text?.trim()\n if (!formattedAddress || !placeName) return undefined\n return `${placeName}, ${formattedAddress}`\n } catch (error) {\n detailedTextRequestsRef.current.delete(placeId)\n console.error(\"AddressAutocompleteInput: place details fetch failed\", error)\n return undefined\n }\n })()\n detailedTextRequestsRef.current.set(placeId, detailedTextRequest)\n }\n\n const detailedText = await detailedTextRequest\n if (detailedText) {\n detailedTextByPrediction.set(prediction, detailedText)\n }\n }))\n\n if (!isActive) {\n return\n }\n\n const singlePrediction = combinedPredictions[0]\n const hasExactMatch =\n singlePrediction && combinedPredictions.length === 1 && isExactMatch(singlePrediction, inputValue)\n\n if (!hasUserTyped.current && hasExactMatch) {\n setPredictions(combinedPredictions)\n setIsDropdownOpen(false)\n setIsLoading(false)\n return\n }\n\n if (combinedPredictions.length > 0) {\n setPredictions(combinedPredictions)\n if (hasUserTyped.current) {\n setIsDropdownOpen(true)\n }\n setHighlightedIndex(-1)\n } else {\n setPredictions([])\n setIsDropdownOpen(false)\n }\n setIsLoading(false)\n })\n .catch((error: unknown) => {\n if (!isActive) {\n return\n }\n console.error(\"AddressAutocompleteInput: suggestion fetch failed\", error)\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n })\n }, 300)\n\n return () => {\n isActive = false\n clearTimeout(handler)\n }\n }, [inputValue, placesLibrary, locationRestriction, allowedTypesSet])\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n inputRef.current &&\n !inputRef.current.contains(event.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [])\n\n const handleSelectPrediction = (prediction: google.maps.places.PlacePrediction) => {\n isSelecting.current = true\n const newAddress = getDisplayText(prediction)\n setInputValue(newAddress)\n onValueChange(newAddress)\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n sessionTokenRef.current = null\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n hasUserTyped.current = true\n setInputValue(e.target.value)\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!isDropdownOpen || predictions.length === 0) {\n if (e.key === \"Enter\") {\n e.preventDefault()\n onValueChange(inputValue)\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n }\n return\n }\n\n if (e.key === \"ArrowDown\") {\n scrollBehaviorRef.current = e.repeat ? \"auto\" : \"smooth\"\n e.preventDefault()\n setHighlightedIndex(prev => {\n if (predictions.length === 0) {\n return -1\n }\n return prev < 0 ? 0 : (prev + 1) % predictions.length\n })\n } else if (e.key === \"ArrowUp\") {\n scrollBehaviorRef.current = e.repeat ? \"auto\" : \"smooth\"\n e.preventDefault()\n setHighlightedIndex(prev => {\n if (predictions.length === 0) {\n return -1\n }\n if (prev <= 0) {\n return predictions.length - 1\n }\n return (prev - 1) % predictions.length\n })\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n if (highlightedIndex > -1 && predictions[highlightedIndex]) {\n handleSelectPrediction(predictions[highlightedIndex])\n } else {\n onValueChange(inputValue)\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n }\n } else if (e.key === \"Escape\") {\n setIsDropdownOpen(false)\n }\n }\n\n const handleBlur = () => {\n setIsDropdownOpen(false)\n if (value !== inputValue) {\n onValueChange(inputValue)\n }\n sessionTokenRef.current = null\n }\n\n const shimName = autofillShimName ?? (name ? `${name}_shim` : undefined)\n\n useEffect(() => {\n if (!isDropdownOpen || highlightedIndex < 0) {\n scrollBehaviorRef.current = \"smooth\"\n return\n }\n\n const item = optionRefs.current[highlightedIndex]\n const list = dropdownRef.current\n\n if (!item || !list) {\n scrollBehaviorRef.current = \"smooth\"\n return\n }\n\n const behavior = scrollBehaviorRef.current\n scrollBehaviorRef.current = \"smooth\"\n\n const top = item.offsetTop\n const bottom = top + item.offsetHeight\n const viewTop = list.scrollTop\n const viewBottom = viewTop + list.clientHeight\n\n if (top >= viewTop && bottom <= viewBottom) {\n return\n }\n\n item.scrollIntoView({\n block: \"nearest\",\n behavior,\n })\n }, [highlightedIndex, isDropdownOpen])\n\n optionRefs.current.length = predictions.length\n\n return (\n <div className=\"relative\">\n {shimName && (\n <input\n tabIndex={-1}\n autoComplete=\"street-address\"\n name={shimName}\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n left: \"-9999px\",\n top: \"-9999px\",\n height: \"1px\",\n width: \"1px\",\n }}\n />\n )}\n <label htmlFor={id} className=\"text-left block text-sm font-medium text-gray-700 mb-1 cursor-pointer\">\n {label}\n </label>\n <div className=\"relative\">\n <Input\n ref={inputRef}\n id={id}\n type=\"text\"\n placeholder={placeholder}\n name={name ?? `${id}_input`}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (predictions.length > 0 && inputValue) {\n setIsDropdownOpen(true)\n }\n }}\n onBlur={handleBlur}\n disabled={disabled}\n autoComplete=\"new-password\"\n className={cn(\"w-full\", isLoading && \"pr-9\", className)}\n />\n {isLoading && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-3 top-1/2 flex size-4 -translate-y-1/2 items-center justify-center text-gray-400\"\n data-slot=\"address-autocomplete-loading-indicator\"\n >\n {loadingIndicator === undefined ? <Loader2 className=\"size-full animate-spin\" /> : loadingIndicator}\n </span>\n )}\n </div>\n {isDropdownOpen && predictions.length > 0 && (\n <ul\n ref={dropdownRef}\n className=\"absolute z-10 mt-1 w-full max-h-60 overflow-y-auto rounded-md border border-gray-200 bg-white text-left shadow-lg\"\n role=\"listbox\"\n >\n {predictions.map((prediction, index) => (\n <li\n key={getPredictionId(prediction, index)}\n ref={node => {\n optionRefs.current[index] = node\n }}\n className={clsx(\n \"cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100\",\n { \"bg-gray-100\": highlightedIndex === index },\n )}\n role=\"option\"\n onMouseDown={e => {\n e.preventDefault()\n handleSelectPrediction(prediction)\n }}\n >\n <PredictionItem prediction={prediction} />\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;AAWA,IAAM,oBAAwB,IAAI,IAAI,ggBA6BnB,CAClB,GAEK,oBAA2B,IAAI,QAAoD,GAEnF,KAAkB,OACL,EAAyB,IAAI,CAAU,KAAK,EAAW,MAAM,QAAQ,GAAA,CACtE,QAAQ,aAAa,EAAE,CAAC,CAAC,KAAK,GAG1C,KAAiB,MAAA;CAAA,IAAA,IAAA,EAAA,CAAA,GAAC,EAAA,kBAAA,GAAkE,GAAA,GAAA;CAAA,IAAA,EAAA,OAAA,GAAA;EAO/E,IAAA,OAAkB,IAAlB,6BAAiB;EAAC,KAAA;GAN3B,IAAoB,EAAe,CAAU;GAC7C,IAAA,IAAiB,EAAwB,IAAK,CAAmC,KAApB,EAAU,MAAW,QAAjE,IACjB,IAAgB,EAAU,MAAc,WAAxB,CAAA,GAChB,IAA0B,EAAW,SAAU,EAAQ;GAEvD,IAAI,EAAO,WAAY,GAAC;IACf,IAAA,kBAAA,GAAA,EAAA,UAAG,EAAW,CAAA;IAAd,MAAA;GAAkB;GAG3B,IAA2B,CAAA;GAC3B,IAAA,IAAgB;GAsBhB,AApBA,EAAO,SAAS,GAAA,MAAA;IACd,IAAI,KAAqB,EAAS,eAAgB,EAAW,QAAO;IAIpE,IAAA,IAAoB,EAAS,aAC7B,IAAkB,KAAI,IAAK,EAAS,WAAY,EAAW,MAAO;IAMlE,IAJI,IAAc,KAChB,EAAK,KAAM,EAAW,UAAW,GAAW,CAAW,CAAC,GAGtD,IAAY,GAAW;KACzB,IAAA,IAAgB,EAAW,UAAW,GAAa,CAAS;KAC5D,EAAK,KAAM,kBAAA,UAAA,EAAA,UAAqB,EAAiB,GAAzB,CAAyB,CAAA;IAAC;IAGpD,IAAY,KAAI,IAAK,GAAW,CAAS;GAAhC,CACV,GAEG,IAAY,EAAW,UACzB,EAAK,KAAM,EAAW,UAAW,CAAS,CAAC;EAC5C;EAAA,AAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,OAAA,AAAA,IAAA,EAAA,IAAA,IAAA,EAAA,IAAA,IAAA,EAAA;CAAA,IAAA,MAAA,OAAA,IAAA,6BAAA,GAAA,OAAA;CAED,IAAI,EAAK,WAAY,GAAC;EAAA,IAAA;EACK,OADL,EAAA,OAAA,IACK,IAAA,EAAA,MAAlB,IAAA,kBAAA,GAAA,EAAA,UAAG,EAAW,CAAA,GAAI,EAAA,KAAA,GAAA,EAAA,KAAA,IAAlB;CAAkB;CAC1B,IAAA;CAEkB,OAFlB,EAAA,OAAA,IAEkB,IAAA,EAAA,MAAZ,IAAA,kBAAA,GAAA,EAAA,UAAG,EAAK,CAAA,GAAI,EAAA,KAAA,GAAA,EAAA,KAAA,IAAZ;AAAY,GAGf,KACJ,GACA,MAEI,CAAC,EAAW,SAAS,EAAW,MAAM,WAAW,KAIjD,CAAC,KAAgB,EAAa,SAAS,KAIpC,EAAW,MAAM,MAAK,MAAQ,EAAa,IAAI,CAAI,CAAC,GAGvD,MAA0B,MAC9B,EAAW,OAAO,MAAK,MAAQ,MAAS,mBAAmB,MAAS,mBAAmB,KAAK,IAExF,KAAmB,GAAgD,MACvE,EAAW,WAAW,GAAG,EAAW,MAAM,QAAQ,aAAY,GAAI,KAE9D,KAAwB,MAAsD;CAClF,IAAM,oBAAM,IAAI,IAAgD;CAchE,OAZA,EAAY,SAAQ,MAAc;EAChC,IAAM,IAAM,EAAW;EAElB,MAIA,EAAI,IAAI,CAAG,KACd,EAAI,IAAI,GAAK,CAAU;CAE3B,CAAC,GAEM,MAAM,KAAK,EAAI,OAAO,CAAC;AAChC,GAEM,KACJ,GACA,MACG,EAAY,QAAO,MAAc,EAAoB,GAAY,CAAY,CAAC,GAE7E,KAAmB,MACvB,EAAY,MAAM,GAAG,OACD,EAAE,kBAAkB,aACpB,EAAE,kBAAkB,SAGvC,GAEG,KACJ,GACA,MACG,EAAgB,EAAuB,EAAqB,CAAW,GAAG,CAAY,CAAC,GAEtF,KAAgB,GAAgD,MACpD,EAAe,CACxB,CAAA,CAAQ,YAAY,MAAM,EAAM,KAAK,CAAC,CAAC,YAAY,GAG/C,KAA4B,EACvC,OACA,UACA,gBACA,UACA,kBACA,aACA,SACA,cACA,sBACA,qBACA,wBACA,iBACA,0BAeI;CACJ,IAAM,CAAC,GAAY,KAAiB,EAAS,KAAS,EAAE,GAClD,CAAC,GAAa,KAAkB,EAA+C,CAAA,CAAE,GACjF,CAAC,GAAgB,KAAqB,EAAS,EAAK,GACpD,CAAC,GAAkB,KAAuB,EAAS,EAAE,GACrD,CAAC,GAAW,KAAgB,EAAS,EAAK,GAE1C,IAAW,EAAyB,IAAI,GACxC,IAAc,EAAyB,IAAI,GAC3C,IAAc,EAAO,EAAK,GAC1B,IAAe,EAAO,EAAK,GAC3B,IAAkB,EAA2D,IAAI,GACjF,IAA0B,kBAAO,IAAI,IAAyC,CAAC,GAC/E,IAAa,EAAiC,CAAA,CAAE,GAChD,IAAoB,EAAuB,QAAQ,GACnD,IAAW,EAAO,CAAK,GACvB,IAAmB,EAAO,CAAa,GACvC,IAAgB,EAAe,UAAU,CAAgB,GACzD,IAAkB,QAAc;EACpC,IAAI,CAAC,GACH,OAAO;EAGT,IAAM,oBAAS,IAAI,IAAY;EAC/B,KAAK,IAAM,KAAQ,GACjB,EAAO,IAAI,CAAI;EAEjB,OAAO;CACT,GAAG,CAAC,CAAY,CAAC;CA0JjB,AAxJA,QAAgB;EAEd,AADA,EAAc,KAAS,EAAE,GACzB,EAAa,UAAU;CACzB,GAAG,CAAC,CAAK,CAAC,GAEV,QAAgB;EAEd,AADA,EAAS,UAAU,GACnB,EAAiB,UAAU;CAC7B,GAAG,CAAC,GAAe,CAAK,CAAC,GAEzB,QAAgB;EACd,IAAI,EAAY,SAAS;GACvB,EAAY,UAAU;GACtB;EACF;EAEA,IAAM,IAAU,EAAW,KAAK;EAEhC,AACE,EADE,MAAY,EAGG;EAGnB,IAAI,IAAW,IAET,IAAU,iBAAiB;GAC/B,IAAI,CAAC,GACH;GAGF,IAAI,MAAY,IAAI;IAIlB,AAHA,EAAe,CAAA,CAAE,GACjB,EAAkB,EAAK,GACvB,EAAgB,UAAU,MACtB,EAAS,YAAY,MACvB,EAAiB,QAAQ,EAAE;IAE7B;GACF;GAEA,IAAI,CAAC,GAAe;GAEpB,IAAM,EAAE,2BAAwB,gCAA6B;GAE7D,IAAI,CAAC,KAA0B,CAAC,GAA0B;IAIxD,AAHA,QAAQ,MAAM,8FAA8F,GAC5G,EAAe,CAAA,CAAE,GACjB,EAAkB,EAAK,GACvB,EAAa,EAAK;IAClB;GACF;GAEA,AACE,EAAgB,YAAU,IAAI,EAAyB;GAGzD,IAAM,IAAkD;IACtD,OAAO;IACP,cAAc,EAAgB,WAAW,KAAA;IACzC,qBAAqB,CAAC,IAAI;GAC5B;GAKA,AAJI,MACF,EAAQ,sBAAsB,IAGhC,EAAuB,6BAA6B,CAAO,CAAC,CACzD,KAAK,OAAO,MAA2E;IACtF,IAAI,CAAC,GACH;IAOF,IAAM,IAAsB,EAJH,EAAS,YAC/B,KAAK,MAA0D,EAAW,eAAe,CAAC,CAC1F,QAAQ,MAAiE,EAAQ,CAEhC,GAAkB,CAAe;IAgCrF,IA/BA,MAAM,QAAQ,IAAI,EAAoB,IAAI,OAAMK,MAAc;KAC5D,IAAM,IAAUA,EAAW;KAC3B,IAAI,CAAC,KAAW,CAAC,GAAuBA,CAAU,GAChD;KAGF,IAAI,IAAsB,EAAwB,QAAQ,IAAI,CAAO;KACrE,AAAK,MACH,KAAuB,YAAY;MACjC,IAAI;OAGF,IAAM,KAAmB,MAFXA,EAAW,QACJ,CAAA,CAAM,YAAY,EAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,EAAA,CACvC,MAAM,kBAAkB,KAAK,GACvD,IAAYA,EAAW,UAAU,MAAM,KAAK;OAElD,OADI,CAAC,KAAoB,CAAC,IAAW,SAC9B,GAAG,EAAS,IAAK;MAC1B,SAAS,GAAO;OAEd,AADA,EAAwB,QAAQ,OAAO,CAAO,GAC9C,QAAQ,MAAM,wDAAwD,CAAK;OAC3E;MACF;KACF,EAAA,CAAG,GACH,EAAwB,QAAQ,IAAI,GAAS,CAAmB;KAGlE,IAAM,IAAe,MAAM;KAC3B,AAAI,KACF,EAAyB,IAAIA,GAAY,CAAY;IAEzD,CAAC,CAAC,GAEE,CAAC,GACH;IAGF,IAAM,IAAmB,EAAoB,IACvC,IACJ,KAAoB,EAAoB,WAAW,KAAK,EAAa,GAAkB,CAAU;IAEnG,IAAI,CAAC,EAAa,WAAW,GAAe;KAG1C,AAFA,EAAe,CAAmB,GAClC,EAAkB,EAAK,GACvB,EAAa,EAAK;KAClB;IACF;IAYA,AAVI,EAAoB,SAAS,KAC/B,EAAe,CAAmB,GAC9B,EAAa,WACf,EAAkB,EAAI,GAExB,EAAoB,EAAE,MAEtB,EAAe,CAAA,CAAE,GACjB,EAAkB,EAAK,IAEzB,EAAa,EAAK;GACpB,CAAC,CAAC,CACD,OAAOC,MAAmB;IACpB,MAGL,QAAQ,MAAM,qDAAqDA,CAAK,GACxE,EAAe,CAAA,CAAE,GACjB,EAAkB,EAAK,GACvB,EAAa,EAAK;GACpB,CAAC;EACL,GAAG,GAAG;EAEN,aAAa;GAEX,AADA,IAAW,IACX,aAAa,CAAO;EACtB;CACF,GAAG;EAAC;EAAY;EAAe;EAAqB;CAAe,CAAC,GAEpE,QAAgB;EACd,IAAM,KAAsB,MAAsB;GAChD,AACE,EAAS,WACT,CAAC,EAAS,QAAQ,SAAS,EAAM,MAAc,KAC/C,EAAY,WACZ,CAAC,EAAY,QAAQ,SAAS,EAAM,MAAc,KAElD,EAAkB,EAAK;EAE3B;EAEA,OADA,SAAS,iBAAiB,aAAa,CAAkB,SAC5C;GACX,SAAS,oBAAoB,aAAa,CAAkB;EAC9D;CACF,GAAG,CAAA,CAAE;CAEL,IAAM,KAA0BD,MAAmD;EACjF,EAAY,UAAU;EACtB,IAAM,IAAa,EAAeA,CAAU;EAM5C,AALA,EAAc,CAAU,GACxB,EAAc,CAAU,GACxB,EAAe,CAAA,CAAE,GACjB,EAAkB,EAAK,GACvB,EAAa,EAAK,GAClB,EAAgB,UAAU;CAC5B,GAEM,MAAqB,MAAqC;EAE9D,AADA,EAAa,UAAU,IACvB,EAAc,EAAE,OAAO,KAAK;CAC9B,GAEM,MAAiBE,MAAuC;EAC5D,IAAI,CAAC,KAAkB,EAAY,WAAW,GAAG;GAC/C,AAAIA,EAAE,QAAQ,YACZA,EAAE,eAAe,GACjB,EAAc,CAAU,GACxB,EAAkB,EAAK,GACvB,EAAgB,UAAU;GAE5B;EACF;EAEA,AAAIA,EAAE,QAAQ,eACZ,EAAkB,UAAUA,EAAE,SAAS,SAAS,UAChDA,EAAE,eAAe,GACjB,GAAoB,MACd,EAAY,WAAW,IAClB,KAEF,IAAO,IAAI,KAAK,IAAO,KAAK,EAAY,MAChD,KACQA,EAAE,QAAQ,aACnB,EAAkB,UAAUA,EAAE,SAAS,SAAS,UAChDA,EAAE,eAAe,GACjB,GAAoBC,MACd,EAAY,WAAW,IAClB,KAELA,KAAQ,IACH,EAAY,SAAS,KAEtBA,IAAO,KAAK,EAAY,MACjC,KACQD,EAAE,QAAQ,WACnBA,EAAE,eAAe,GACb,IAAmB,MAAM,EAAY,KACvC,EAAuB,EAAY,EAAiB,KAEpD,EAAc,CAAU,GACxB,EAAkB,EAAK,GACvB,EAAgB,UAAU,SAEnBA,EAAE,QAAQ,YACnB,EAAkB,EAAK;CAE3B,GAEM,WAAmB;EAKvB,AAJA,EAAkB,EAAK,GACnB,MAAU,KACZ,EAAc,CAAU,GAE1B,EAAgB,UAAU;CAC5B,GAEM,IAAW,OAAqB,IAAO,GAAG,EAAI,SAAU,KAAA;CAoC9D,OAlCA,QAAgB;EACd,IAAI,CAAC,KAAkB,IAAmB,GAAG;GAC3C,EAAkB,UAAU;GAC5B;EACF;EAEA,IAAM,IAAO,EAAW,QAAQ,IAC1B,IAAO,EAAY;EAEzB,IAAI,CAAC,KAAQ,CAAC,GAAM;GAClB,EAAkB,UAAU;GAC5B;EACF;EAEA,IAAM,IAAW,EAAkB;EACnC,EAAkB,UAAU;EAE5B,IAAM,IAAM,EAAK,WACX,IAAS,IAAM,EAAK,cACpB,IAAU,EAAK,WACf,IAAa,IAAU,EAAK;EAE9B,KAAO,KAAW,KAAU,KAIhC,EAAK,eAAe;GAClB,OAAO;GACP;EACF,CAAC;CACH,GAAG,CAAC,GAAkB,CAAc,CAAC,GAErC,EAAW,QAAQ,SAAS,EAAY,QAGtC,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACG,KACC,kBAAC,SAAD;IACE,UAAU;IACV,cAAa;IACb,MAAM;IACN,eAAY;IACZ,OAAO;KACL,UAAU;KACV,MAAM;KACN,KAAK;KACL,QAAQ;KACR,OAAO;IACT;GAAE,CAAA;GAGN,kBAAC,SAAD;IAAO,SAAS;IAAI,WAAU;IAC3B,UAAA;GACI,CAAA;GACP,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAAC,GAAD;KACE,KAAK;KACD;KACJ,MAAK;KACQ;KACb,MAAM,KAAQ,GAAG,EAAE;KACnB,OAAO;KACP,UAAU;KACV,WAAW;KACX,eAAe;MACb,AAAI,EAAY,SAAS,KAAK,KAC5B,EAAkB,EAAI;KAE1B;KACA,QAAQ;KACE;KACV,cAAa;KACb,WAAW,EAAG,UAAU,KAAa,QAAQ,CAAS;IAAE,CAAA,GAEzD,KACC,kBAAC,QAAD;KACE,eAAY;KACZ,WAAU;KACV,aAAU;KAET,UAAA,MAAqB,KAAA,IAAY,kBAAC,GAAD,EAAS,WAAU,yBAAwB,CAAA,IAAM;IAC/E,CAAA,CAEL;;GACJ,KAAkB,EAAY,SAAS,KACtC,kBAAC,MAAD;IACE,KAAK;IACL,WAAU;IACV,MAAK;IAEJ,UAAA,EAAY,KAAKF,GAAY,MAC5B,kBAAC,MAAD;KAEE,MAAK,MAAQ;MACX,EAAW,QAAQ,KAAS;KAC9B;KACA,WAAW,EACT,oEACA,EAAE,eAAe,MAAqB,EAAM,CAC9C;KACA,MAAK;KACL,cAAaE,MAAK;MAEhB,AADAA,EAAE,eAAe,GACjB,EAAuBF,CAAU;KACnC;KAEA,UAAA,kBAAC,GAAD,EAAgB,YAAYA,EAAW,CAAA;IACrC,GAfG,EAAgBA,GAAY,CAAK,CAepC,CACL;GACC,CAAA;EAEH;;AAET"}
1
+ {"version":3,"file":"index14.js","names":["{ prediction }: { prediction: google.maps.places.PlacePrediction }","<>{displayText}</>","<>{parts}</>"],"sources":["../src/components/AddressAutocompleteInput/index.tsx"],"sourcesContent":["/// <reference types=\"google.maps\" />\n\nimport { ReactNode, ChangeEvent, KeyboardEvent, useState, useEffect, useRef, useMemo } from \"react\"\nimport clsx from \"clsx\"\nimport { Loader2 } from \"lucide-react\"\n\nimport { useMapsLibrary } from \"@/helpers/useMapsLibrary\"\nimport { Input } from \"@/components/Input\"\nimport { cn } from \"@/lib/utils\"\n\n\nconst DEFAULT_ALLOWED_TYPES = new Set([\n \"street_address\",\n \"route\",\n \"premise\",\n \"subpremise\",\n \"intersection\",\n \"sublocality\",\n \"sublocality_level_1\",\n \"sublocality_level_2\",\n \"sublocality_level_3\",\n \"sublocality_level_4\",\n \"sublocality_level_5\",\n \"administrative_area_level_1\",\n \"administrative_area_level_2\",\n \"administrative_area_level_3\",\n \"administrative_area_level_4\",\n \"administrative_area_level_5\",\n \"administrative_area_level_6\",\n \"administrative_area_level_7\",\n \"postal_code\",\n \"locality\",\n \"country\",\n \"geocode\",\n \"plus_code\",\n \"political\",\n \"neighborhood\",\n \"colloquial_area\",\n \"lodging\",\n \"train_station\",\n \"transit_station\",\n])\n\nconst detailedTextByPrediction = new WeakMap<google.maps.places.PlacePrediction, string>()\n\nconst getDisplayText = (prediction: google.maps.places.PlacePrediction) => {\n const fullText = detailedTextByPrediction.get(prediction) ?? prediction.text?.text ?? \"\"\n return fullText.replace(/, France$/, \"\").trim()\n}\n\nconst PredictionItem = ({ prediction }: { prediction: google.maps.places.PlacePrediction }) => {\n const displayText = getDisplayText(prediction)\n const fullText = detailedTextByPrediction.get(prediction) ?? prediction.text?.text ?? \"\"\n const matches = prediction.text?.matches ?? []\n const wasCountryRemoved = displayText.length < fullText.length\n\n if (matches.length === 0) {\n return <>{displayText}</>\n }\n\n const parts: ReactNode[] = []\n let lastIndex = 0\n\n matches.forEach((substring, index) => {\n if (wasCountryRemoved && substring.startOffset >= displayText.length) {\n return\n }\n\n const startOffset = substring.startOffset\n const endOffset = Math.min(substring.endOffset, displayText.length)\n\n if (startOffset > lastIndex) {\n parts.push(displayText.substring(lastIndex, startOffset))\n }\n\n if (endOffset > startOffset) {\n const matched = displayText.substring(startOffset, endOffset)\n parts.push(<strong key={index}>{matched}</strong>)\n }\n\n lastIndex = Math.max(lastIndex, endOffset)\n })\n\n if (lastIndex < displayText.length) {\n parts.push(displayText.substring(lastIndex))\n }\n\n if (parts.length === 0) {\n return <>{displayText}</>\n }\n\n return <>{parts}</>\n}\n\nconst isAllowedPrediction = (\n prediction: google.maps.places.PlacePrediction,\n allowedTypes: ReadonlySet<string> | null,\n) => {\n if (!prediction.types || prediction.types.length === 0) {\n return true\n }\n\n if (!allowedTypes || allowedTypes.size === 0) {\n return true\n }\n\n return prediction.types.some(type => allowedTypes.has(type))\n}\n\nconst isNamedPlacePrediction = (prediction: google.maps.places.PlacePrediction) =>\n prediction.types?.some(type => type === \"establishment\" || type === \"point_of_interest\") ?? false\n\nconst getPredictionId = (prediction: google.maps.places.PlacePrediction, index: number) =>\n prediction.placeId || `${prediction.text?.text ?? \"prediction\"}-${index}`\n\nconst getUniquePredictions = (predictions: google.maps.places.PlacePrediction[]) => {\n const map = new Map<string, google.maps.places.PlacePrediction>()\n\n predictions.forEach(prediction => {\n const key = prediction.placeId\n\n if (!key) {\n return\n }\n\n if (!map.has(key)) {\n map.set(key, prediction)\n }\n })\n\n return Array.from(map.values())\n}\n\nconst getFilteredPredictions = (\n predictions: google.maps.places.PlacePrediction[],\n allowedTypes: ReadonlySet<string> | null,\n) => predictions.filter(prediction => isAllowedPrediction(prediction, allowedTypes))\n\nconst sortPredictions = (predictions: google.maps.places.PlacePrediction[]) =>\n predictions.sort((a, b) => {\n const aDistance = a.distanceMeters ?? Number.POSITIVE_INFINITY\n const bDistance = b.distanceMeters ?? Number.POSITIVE_INFINITY\n\n return aDistance - bDistance\n })\n\nconst buildDisplayPredictions = (\n predictions: google.maps.places.PlacePrediction[],\n allowedTypes: ReadonlySet<string> | null,\n) => sortPredictions(getFilteredPredictions(getUniquePredictions(predictions), allowedTypes))\n\nconst isExactMatch = (prediction: google.maps.places.PlacePrediction, value: string) => {\n const display = getDisplayText(prediction)\n return display.toLowerCase() === value.trim().toLowerCase()\n}\n\nexport const AddressAutocompleteInput = ({\n id,\n label,\n placeholder,\n value,\n onValueChange,\n disabled,\n name,\n className,\n autofillShimName,\n googleMapsApiKey,\n locationRestriction,\n allowedTypes,\n loadingIndicator,\n}: {\n id: string\n label: string\n placeholder: string\n value: string | undefined\n onValueChange: (value: string) => void\n disabled?: boolean\n name?: string\n className?: string\n autofillShimName?: string\n googleMapsApiKey?: string\n locationRestriction?: google.maps.LatLngBoundsLiteral | google.maps.LatLngBounds\n allowedTypes?: Iterable<string>\n loadingIndicator?: ReactNode\n}) => {\n const [inputValue, setInputValue] = useState(value ?? \"\")\n const [predictions, setPredictions] = useState<google.maps.places.PlacePrediction[]>([])\n const [isDropdownOpen, setIsDropdownOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const [isLoading, setIsLoading] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLUListElement>(null)\n const isSelecting = useRef(false)\n const hasUserTyped = useRef(false)\n const sessionTokenRef = useRef<google.maps.places.AutocompleteSessionToken | null>(null)\n const detailedTextRequestsRef = useRef(new Map<string, Promise<string | undefined>>())\n const optionRefs = useRef<(HTMLLIElement | null)[]>([])\n const scrollBehaviorRef = useRef<ScrollBehavior>(\"smooth\")\n const valueRef = useRef(value)\n const onValueChangeRef = useRef(onValueChange)\n const placesLibrary = useMapsLibrary(\"places\", googleMapsApiKey)\n const allowedTypesSet = useMemo(() => {\n if (!allowedTypes) {\n return DEFAULT_ALLOWED_TYPES\n }\n\n const newSet = new Set<string>()\n for (const type of allowedTypes) {\n newSet.add(type)\n }\n return newSet\n }, [allowedTypes])\n\n useEffect(() => {\n setInputValue(value ?? \"\")\n hasUserTyped.current = false\n }, [value])\n\n useEffect(() => {\n valueRef.current = value\n onValueChangeRef.current = onValueChange\n }, [onValueChange, value])\n\n useEffect(() => {\n if (isSelecting.current) {\n isSelecting.current = false\n return\n }\n\n const trimmed = inputValue.trim()\n\n if (trimmed === \"\") {\n setIsLoading(false)\n } else {\n setIsLoading(true)\n }\n\n let isActive = true\n\n const handler = setTimeout(() => {\n if (!isActive) {\n return\n }\n\n if (trimmed === \"\") {\n setPredictions([])\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n if (valueRef.current !== \"\") {\n onValueChangeRef.current(\"\")\n }\n return\n }\n\n if (!placesLibrary) return\n\n const { AutocompleteSuggestion, AutocompleteSessionToken } = placesLibrary\n\n if (!AutocompleteSuggestion || !AutocompleteSessionToken) {\n console.error(\"AddressAutocompleteInput: missing AutocompleteSuggestion or AutocompleteSessionToken exports\")\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n return\n }\n\n if (!sessionTokenRef.current) {\n sessionTokenRef.current = new AutocompleteSessionToken()\n }\n\n const request: google.maps.places.AutocompleteRequest = {\n input: inputValue,\n sessionToken: sessionTokenRef.current ?? undefined,\n includedRegionCodes: [\"fr\"],\n }\n if (locationRestriction) {\n request.locationRestriction = locationRestriction\n }\n\n AutocompleteSuggestion.fetchAutocompleteSuggestions(request)\n .then(async (response: { suggestions: google.maps.places.AutocompleteSuggestion[] }) => {\n if (!isActive) {\n return\n }\n\n const placePredictions = response.suggestions\n .map((suggestion: google.maps.places.AutocompleteSuggestion) => suggestion.placePrediction)\n .filter((prediction): prediction is google.maps.places.PlacePrediction => Boolean(prediction))\n\n const combinedPredictions = buildDisplayPredictions(placePredictions, allowedTypesSet)\n await Promise.all(combinedPredictions.map(async prediction => {\n const placeId = prediction.placeId\n if (!placeId || !isNamedPlacePrediction(prediction)) {\n return\n }\n\n let detailedTextRequest = detailedTextRequestsRef.current.get(placeId)\n if (!detailedTextRequest) {\n detailedTextRequest = (async () => {\n try {\n const place = prediction.toPlace()\n const result = await place.fetchFields({ fields: [\"formattedAddress\"] })\n const formattedAddress = result.place.formattedAddress?.trim()\n const placeName = prediction.mainText?.text?.trim()\n if (!formattedAddress || !placeName) return undefined\n return `${placeName}, ${formattedAddress}`\n } catch (error) {\n detailedTextRequestsRef.current.delete(placeId)\n console.error(\"AddressAutocompleteInput: place details fetch failed\", error)\n return undefined\n }\n })()\n detailedTextRequestsRef.current.set(placeId, detailedTextRequest)\n }\n\n const detailedText = await detailedTextRequest\n if (detailedText) {\n detailedTextByPrediction.set(prediction, detailedText)\n }\n }))\n\n if (!isActive) {\n return\n }\n\n const singlePrediction = combinedPredictions[0]\n const hasExactMatch =\n singlePrediction && combinedPredictions.length === 1 && isExactMatch(singlePrediction, inputValue)\n\n if (!hasUserTyped.current && hasExactMatch) {\n setPredictions(combinedPredictions)\n setIsDropdownOpen(false)\n setIsLoading(false)\n return\n }\n\n if (combinedPredictions.length > 0) {\n setPredictions(combinedPredictions)\n if (hasUserTyped.current) {\n setIsDropdownOpen(true)\n }\n setHighlightedIndex(-1)\n } else {\n setPredictions([])\n setIsDropdownOpen(false)\n }\n setIsLoading(false)\n })\n .catch((error: unknown) => {\n if (!isActive) {\n return\n }\n console.error(\"AddressAutocompleteInput: suggestion fetch failed\", error)\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n })\n }, 300)\n\n return () => {\n isActive = false\n clearTimeout(handler)\n }\n }, [inputValue, placesLibrary, locationRestriction, allowedTypesSet])\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n inputRef.current &&\n !inputRef.current.contains(event.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [])\n\n const handleSelectPrediction = (prediction: google.maps.places.PlacePrediction) => {\n isSelecting.current = true\n const newAddress = getDisplayText(prediction)\n setInputValue(newAddress)\n onValueChange(newAddress)\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n sessionTokenRef.current = null\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n hasUserTyped.current = true\n setInputValue(e.target.value)\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!isDropdownOpen || predictions.length === 0) {\n if (e.key === \"Enter\") {\n e.preventDefault()\n onValueChange(inputValue)\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n }\n return\n }\n\n if (e.key === \"ArrowDown\") {\n scrollBehaviorRef.current = e.repeat ? \"auto\" : \"smooth\"\n e.preventDefault()\n setHighlightedIndex(prev => {\n if (predictions.length === 0) {\n return -1\n }\n return prev < 0 ? 0 : (prev + 1) % predictions.length\n })\n } else if (e.key === \"ArrowUp\") {\n scrollBehaviorRef.current = e.repeat ? \"auto\" : \"smooth\"\n e.preventDefault()\n setHighlightedIndex(prev => {\n if (predictions.length === 0) {\n return -1\n }\n if (prev <= 0) {\n return predictions.length - 1\n }\n return (prev - 1) % predictions.length\n })\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n if (highlightedIndex > -1 && predictions[highlightedIndex]) {\n handleSelectPrediction(predictions[highlightedIndex])\n } else {\n onValueChange(inputValue)\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n }\n } else if (e.key === \"Escape\") {\n setIsDropdownOpen(false)\n }\n }\n\n const handleBlur = () => {\n setIsDropdownOpen(false)\n if (value !== inputValue) {\n onValueChange(inputValue)\n }\n sessionTokenRef.current = null\n }\n\n const shimName = autofillShimName ?? (name ? `${name}_shim` : undefined)\n\n useEffect(() => {\n if (!isDropdownOpen || highlightedIndex < 0) {\n scrollBehaviorRef.current = \"smooth\"\n return\n }\n\n const item = optionRefs.current[highlightedIndex]\n const list = dropdownRef.current\n\n if (!item || !list) {\n scrollBehaviorRef.current = \"smooth\"\n return\n }\n\n const behavior = scrollBehaviorRef.current\n scrollBehaviorRef.current = \"smooth\"\n\n const top = item.offsetTop\n const bottom = top + item.offsetHeight\n const viewTop = list.scrollTop\n const viewBottom = viewTop + list.clientHeight\n\n if (top >= viewTop && bottom <= viewBottom) {\n return\n }\n\n item.scrollIntoView({\n block: \"nearest\",\n behavior,\n })\n }, [highlightedIndex, isDropdownOpen])\n\n optionRefs.current.length = predictions.length\n\n return (\n <div className=\"relative\">\n {shimName && (\n <input\n tabIndex={-1}\n autoComplete=\"street-address\"\n name={shimName}\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n left: \"-9999px\",\n top: \"-9999px\",\n height: \"1px\",\n width: \"1px\",\n }}\n />\n )}\n <label htmlFor={id} className=\"text-left block text-sm font-medium text-gray-700 mb-1 cursor-pointer\">\n {label}\n </label>\n <div className=\"relative\">\n <Input\n ref={inputRef}\n id={id}\n type=\"text\"\n placeholder={placeholder}\n name={name ?? `${id}_input`}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (predictions.length > 0 && inputValue) {\n setIsDropdownOpen(true)\n }\n }}\n onBlur={handleBlur}\n disabled={disabled}\n autoComplete=\"new-password\"\n className={cn(\"w-full\", isLoading && \"pr-9\", className)}\n />\n {isLoading && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-3 top-1/2 flex size-4 -translate-y-1/2 items-center justify-center text-gray-400\"\n data-slot=\"address-autocomplete-loading-indicator\"\n >\n {loadingIndicator === undefined ? <Loader2 className=\"size-full animate-spin\" /> : loadingIndicator}\n </span>\n )}\n </div>\n {isDropdownOpen && predictions.length > 0 && (\n <ul\n ref={dropdownRef}\n className=\"absolute z-10 mt-1 w-full max-h-60 overflow-y-auto rounded-md border border-gray-200 bg-white text-left shadow-lg\"\n role=\"listbox\"\n >\n {predictions.map((prediction, index) => (\n <li\n key={getPredictionId(prediction, index)}\n ref={node => {\n optionRefs.current[index] = node\n }}\n className={clsx(\n \"cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100\",\n { \"bg-gray-100\": highlightedIndex === index },\n )}\n role=\"option\"\n onMouseDown={e => {\n e.preventDefault()\n handleSelectPrediction(prediction)\n }}\n >\n <PredictionItem prediction={prediction} />\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index15.js","names":["onClick"],"sources":["../src/components/ApplePayButton/index.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from \"react\"\nimport clsx from \"clsx\"\n\n\ntype ApplePayButtonProps = ComponentPropsWithoutRef<\"button\">\n\n\nexport const ApplePayButton = ({\n className,\n onClick,\n children,\n ...buttonProps\n}: ApplePayButtonProps) => {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={clsx(\n \"flex w-full items-center justify-center rounded-md border border-transparent bg-black py-2 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 focus:outline-hidden\",\n className,\n )}\n {...buttonProps}\n >\n {children ?? <span className=\"sr-only\">Pay with Apple Pay</span>}\n <svg fill=\"currentColor\" viewBox=\"0 0 50 20\" className=\"h-5 w-auto\">\n <path d=\"M9.536 2.579c-.571.675-1.485 1.208-2.4 1.132-.113-.914.334-1.884.858-2.484C8.565.533 9.564.038 10.374 0c.095.951-.276 1.884-.838 2.579zm.829 1.313c-1.324-.077-2.457.751-3.085.751-.638 0-1.6-.713-2.647-.694-1.362.019-2.628.79-3.323 2.017-1.429 2.455-.372 6.09 1.009 8.087.676.99 1.485 2.075 2.552 2.036 1.009-.038 1.409-.656 2.628-.656 1.228 0 1.58.656 2.647.637 1.104-.019 1.8-.99 2.475-1.979.771-1.122 1.086-2.217 1.105-2.274-.02-.019-2.133-.828-2.152-3.263-.02-2.036 1.666-3.007 1.742-3.064-.952-1.408-2.437-1.56-2.951-1.598zm7.645-2.76v14.834h2.305v-5.072h3.19c2.913 0 4.96-1.998 4.96-4.89 0-2.893-2.01-4.872-4.885-4.872h-5.57zm2.305 1.941h2.656c2 0 3.142 1.066 3.142 2.94 0 1.875-1.142 2.95-3.151 2.95h-2.647v-5.89zM32.673 16.08c1.448 0 2.79-.733 3.4-1.893h.047v1.779h2.133V8.582c0-2.14-1.714-3.52-4.351-3.52-2.447 0-4.256 1.399-4.323 3.32h2.076c.171-.913 1.018-1.512 2.18-1.512 1.41 0 2.2.656 2.2 1.865v.818l-2.876.171c-2.675.162-4.123 1.256-4.123 3.159 0 1.922 1.495 3.197 3.637 3.197zm.62-1.76c-1.229 0-2.01-.59-2.01-1.494 0-.933.752-1.475 2.19-1.56l2.562-.162v.837c0 1.39-1.181 2.379-2.743 2.379zM41.1 20c2.247 0 3.304-.856 4.227-3.454l4.047-11.341h-2.342l-2.714 8.763h-.047l-2.714-8.763h-2.409l3.904 10.799-.21.656c-.352 1.114-.923 1.542-1.942 1.542-.18 0-.533-.02-.676-.038v1.779c.133.038.705.057.876.057z\" />\n </svg>\n </button>\n )\n}\n"],"mappings":";;;;AAOA,IAAa,KAAiB,MAAA;CAAA,IAAA,IAAA,EAAA,EAAA,GAAA,GAAA,GAAA,GAAA;CAAA,AAAA,EAAA,OAAA,KAKR,IAAA,EAAA,IAAA,IAAA,EAAA,IAAA,IAAA,EAAA,IAAA,IAAA,EAAA,OALS,wCAAA,GAAA,KAAA,GAKT,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAAA,AAAA,EAAA,OAAA,IAQf,IAAA,EAAA,MAHU,IAAA,EACT,qMACA,CACF,GAAC,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAAA,AAAA,EAAA,OAAA,IAG+D,IAAA,EAAA,MAA/D,IAAA,KAAY,kBAAA,QAAA;EAAgB,WAAA;EAAU,UAAA;CAAyB,CAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAAA,AAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,KAChE,IAAA,kBAAA,OAAA;EAAU,MAAA;EAAuB,SAAA;EAAsB,WAAA;EACrD,UAAA,kBAAA,QAAA,EAAQ,GAAA,syCAAqyC,CAAA;CACzyC,CAAA,GAAA,EAAA,KAAA,KAAA,IAAA,EAAA;CAAA,IAAA;CACC,OADD,EAAA,QAAA,KAAA,EAAA,QAAA,KAAA,EAAA,QAAA,KAAA,EAAA,QAAA,KAZR,IAAA,kBAAA,UAAA;EACO,MAAA;EACI;EACE,WAAA;EAGV,GACG;EAPN,UAAA,CASG,GACD,CAGO;KAAA,EAAA,MAAA,GAAA,EAAA,MAAA,GAAA,EAAA,MAAA,GAAA,EAAA,MAAA,GAAA,EAAA,MAAA,KAAA,IAAA,EAAA,KAbT;AAaS"}
1
+ {"version":3,"file":"index15.js","names":["{\n className,\n onClick,\n children,\n ...buttonProps\n}: ApplePayButtonProps","clsx(\n \"flex w-full items-center justify-center rounded-md border border-transparent bg-black py-2 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 focus:outline-hidden\",\n className,\n )","children ?? <span className=\"sr-only\">Pay with Apple Pay</span>","<svg fill=\"currentColor\" viewBox=\"0 0 50 20\" className=\"h-5 w-auto\">\n <path d=\"M9.536 2.579c-.571.675-1.485 1.208-2.4 1.132-.113-.914.334-1.884.858-2.484C8.565.533 9.564.038 10.374 0c.095.951-.276 1.884-.838 2.579zm.829 1.313c-1.324-.077-2.457.751-3.085.751-.638 0-1.6-.713-2.647-.694-1.362.019-2.628.79-3.323 2.017-1.429 2.455-.372 6.09 1.009 8.087.676.99 1.485 2.075 2.552 2.036 1.009-.038 1.409-.656 2.628-.656 1.228 0 1.58.656 2.647.637 1.104-.019 1.8-.99 2.475-1.979.771-1.122 1.086-2.217 1.105-2.274-.02-.019-2.133-.828-2.152-3.263-.02-2.036 1.666-3.007 1.742-3.064-.952-1.408-2.437-1.56-2.951-1.598zm7.645-2.76v14.834h2.305v-5.072h3.19c2.913 0 4.96-1.998 4.96-4.89 0-2.893-2.01-4.872-4.885-4.872h-5.57zm2.305 1.941h2.656c2 0 3.142 1.066 3.142 2.94 0 1.875-1.142 2.95-3.151 2.95h-2.647v-5.89zM32.673 16.08c1.448 0 2.79-.733 3.4-1.893h.047v1.779h2.133V8.582c0-2.14-1.714-3.52-4.351-3.52-2.447 0-4.256 1.399-4.323 3.32h2.076c.171-.913 1.018-1.512 2.18-1.512 1.41 0 2.2.656 2.2 1.865v.818l-2.876.171c-2.675.162-4.123 1.256-4.123 3.159 0 1.922 1.495 3.197 3.637 3.197zm.62-1.76c-1.229 0-2.01-.59-2.01-1.494 0-.933.752-1.475 2.19-1.56l2.562-.162v.837c0 1.39-1.181 2.379-2.743 2.379zM41.1 20c2.247 0 3.304-.856 4.227-3.454l4.047-11.341h-2.342l-2.714 8.763h-.047l-2.714-8.763h-2.409l3.904 10.799-.21.656c-.352 1.114-.923 1.542-1.942 1.542-.18 0-.533-.02-.676-.038v1.779c.133.038.705.057.876.057z\" />\n </svg>","<button\n type=\"button\"\n onClick={onClick}\n className={clsx(\n \"flex w-full items-center justify-center rounded-md border border-transparent bg-black py-2 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 focus:outline-hidden\",\n className,\n )}\n {...buttonProps}\n >\n {children ?? <span className=\"sr-only\">Pay with Apple Pay</span>}\n <svg fill=\"currentColor\" viewBox=\"0 0 50 20\" className=\"h-5 w-auto\">\n <path d=\"M9.536 2.579c-.571.675-1.485 1.208-2.4 1.132-.113-.914.334-1.884.858-2.484C8.565.533 9.564.038 10.374 0c.095.951-.276 1.884-.838 2.579zm.829 1.313c-1.324-.077-2.457.751-3.085.751-.638 0-1.6-.713-2.647-.694-1.362.019-2.628.79-3.323 2.017-1.429 2.455-.372 6.09 1.009 8.087.676.99 1.485 2.075 2.552 2.036 1.009-.038 1.409-.656 2.628-.656 1.228 0 1.58.656 2.647.637 1.104-.019 1.8-.99 2.475-1.979.771-1.122 1.086-2.217 1.105-2.274-.02-.019-2.133-.828-2.152-3.263-.02-2.036 1.666-3.007 1.742-3.064-.952-1.408-2.437-1.56-2.951-1.598zm7.645-2.76v14.834h2.305v-5.072h3.19c2.913 0 4.96-1.998 4.96-4.89 0-2.893-2.01-4.872-4.885-4.872h-5.57zm2.305 1.941h2.656c2 0 3.142 1.066 3.142 2.94 0 1.875-1.142 2.95-3.151 2.95h-2.647v-5.89zM32.673 16.08c1.448 0 2.79-.733 3.4-1.893h.047v1.779h2.133V8.582c0-2.14-1.714-3.52-4.351-3.52-2.447 0-4.256 1.399-4.323 3.32h2.076c.171-.913 1.018-1.512 2.18-1.512 1.41 0 2.2.656 2.2 1.865v.818l-2.876.171c-2.675.162-4.123 1.256-4.123 3.159 0 1.922 1.495 3.197 3.637 3.197zm.62-1.76c-1.229 0-2.01-.59-2.01-1.494 0-.933.752-1.475 2.19-1.56l2.562-.162v.837c0 1.39-1.181 2.379-2.743 2.379zM41.1 20c2.247 0 3.304-.856 4.227-3.454l4.047-11.341h-2.342l-2.714 8.763h-.047l-2.714-8.763h-2.409l3.904 10.799-.21.656c-.352 1.114-.923 1.542-1.942 1.542-.18 0-.533-.02-.676-.038v1.779c.133.038.705.057.876.057z\" />\n </svg>\n </button>"],"sources":["../src/components/ApplePayButton/index.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from \"react\"\nimport clsx from \"clsx\"\n\n\ntype ApplePayButtonProps = ComponentPropsWithoutRef<\"button\">\n\n\nexport const ApplePayButton = ({\n className,\n onClick,\n children,\n ...buttonProps\n}: ApplePayButtonProps) => {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={clsx(\n \"flex w-full items-center justify-center rounded-md border border-transparent bg-black py-2 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 focus:outline-hidden\",\n className,\n )}\n {...buttonProps}\n >\n {children ?? <span className=\"sr-only\">Pay with Apple Pay</span>}\n <svg fill=\"currentColor\" viewBox=\"0 0 50 20\" className=\"h-5 w-auto\">\n <path d=\"M9.536 2.579c-.571.675-1.485 1.208-2.4 1.132-.113-.914.334-1.884.858-2.484C8.565.533 9.564.038 10.374 0c.095.951-.276 1.884-.838 2.579zm.829 1.313c-1.324-.077-2.457.751-3.085.751-.638 0-1.6-.713-2.647-.694-1.362.019-2.628.79-3.323 2.017-1.429 2.455-.372 6.09 1.009 8.087.676.99 1.485 2.075 2.552 2.036 1.009-.038 1.409-.656 2.628-.656 1.228 0 1.58.656 2.647.637 1.104-.019 1.8-.99 2.475-1.979.771-1.122 1.086-2.217 1.105-2.274-.02-.019-2.133-.828-2.152-3.263-.02-2.036 1.666-3.007 1.742-3.064-.952-1.408-2.437-1.56-2.951-1.598zm7.645-2.76v14.834h2.305v-5.072h3.19c2.913 0 4.96-1.998 4.96-4.89 0-2.893-2.01-4.872-4.885-4.872h-5.57zm2.305 1.941h2.656c2 0 3.142 1.066 3.142 2.94 0 1.875-1.142 2.95-3.151 2.95h-2.647v-5.89zM32.673 16.08c1.448 0 2.79-.733 3.4-1.893h.047v1.779h2.133V8.582c0-2.14-1.714-3.52-4.351-3.52-2.447 0-4.256 1.399-4.323 3.32h2.076c.171-.913 1.018-1.512 2.18-1.512 1.41 0 2.2.656 2.2 1.865v.818l-2.876.171c-2.675.162-4.123 1.256-4.123 3.159 0 1.922 1.495 3.197 3.637 3.197zm.62-1.76c-1.229 0-2.01-.59-2.01-1.494 0-.933.752-1.475 2.19-1.56l2.562-.162v.837c0 1.39-1.181 2.379-2.743 2.379zM41.1 20c2.247 0 3.304-.856 4.227-3.454l4.047-11.341h-2.342l-2.714 8.763h-.047l-2.714-8.763h-2.409l3.904 10.799-.21.656c-.352 1.114-.923 1.542-1.942 1.542-.18 0-.533-.02-.676-.038v1.779c.133.038.705.057.876.057z\" />\n </svg>\n </button>\n )\n}\n"],"mappings":";;;;AAOA,IAAa,KAAA,MAKc;gBADtB,GADH,GAFA,GACA;CAF6BA,AAAAA,EAAAA,OAAAA,gDAC7B,wCAGA,GAAA,KAJ6BA;CAUdC,IAAAA;CAET,AAAA,EAAA,OAAA,gBAFS,IAAA,EACT,qMACA,CACF,GADE,EAAA,KAAA;CAIDC,IAAAA;0BAAY,IAAA,KAAA,kBAAC,QAAD;EAAM,WAAU;EAAU,UAAA;CAAwB,CAAA,GAA9D,EAAA,KAAA;CACDC,IAAAA;qDAAC,IAAA,kBAAA,OAAD;EAAK,MAAK;EAAe,SAAQ;EAAY,WAAU;EACrD,UAAA,kBAAC,QAAD,EAAM,GAAE,syCAAuyC,CAAA;CAC5yC,CAAA;CAZPC,IAAAA;CADF,OAQQ,EAAA,QAAA,KAAA,EAAA,QALK,KAAA,EAAA,QACEH,KAAAA,EAAAA,QAMVC,KATH,IAAA,kBAAC,UAAD;EACE,MAAK;EACI;EACT,WAAWD;EAIX,GAAI;EAPN,UAAA,CASGC,GACDC,CAGM;KANF,EAAA,MAAA,GALK,EAAA,MAAA,GACEF,EAAAA,MAAAA,GAMVC,EAAAA,MAAAA,2BATHE;AAeJ"}
package/dist/index16.js CHANGED
@@ -1,49 +1,57 @@
1
1
  import { cn as e } from "./index12.js";
2
- import "react";
3
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
2
+ import { c as t } from "react/compiler-runtime";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  //#region src/components/Checkbox/index.tsx
5
- var r = {
5
+ var i = {
6
6
  red: "checked:border-red-700 checked:bg-red-700 indeterminate:border-red-700 indeterminate:bg-red-700 focus-visible:outline-red-700",
7
7
  sky: "checked:border-sky-600 checked:bg-sky-600 indeterminate:border-sky-600 indeterminate:bg-sky-600 focus-visible:outline-sky-600",
8
8
  primary: "checked:border-primary checked:bg-primary indeterminate:border-primary indeterminate:bg-primary focus-visible:outline-primary"
9
- }, i = ({ id: i, name: a, defaultValue: o, defaultChecked: s, checked: c, onChange: l, color: u = "primary", className: d, ...f }) => {
10
- let p = r[u];
11
- return /* @__PURE__ */ t("div", {
9
+ }, a = (a) => {
10
+ let o = t(25), s, c, l, u, d, f, p, m, h;
11
+ o[0] === a ? (s = o[1], c = o[2], l = o[3], u = o[4], d = o[5], f = o[6], p = o[7], m = o[8], h = o[9]) : ({id: d, name: f, defaultValue: u, defaultChecked: l, checked: s, onChange: p, color: h, className: c, ...m} = a, o[0] = a, o[1] = s, o[2] = c, o[3] = l, o[4] = u, o[5] = d, o[6] = f, o[7] = p, o[8] = m, o[9] = h);
12
+ let g = i[h === void 0 ? "primary" : h], _;
13
+ o[10] !== c || o[11] !== g ? (_ = e("col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto", g, c), o[10] = c, o[11] = g, o[12] = _) : _ = o[12];
14
+ let v;
15
+ o[13] !== s || o[14] !== l || o[15] !== u || o[16] !== d || o[17] !== f || o[18] !== p || o[19] !== m || o[20] !== _ ? (v = /* @__PURE__ */ n("input", {
16
+ ...m,
17
+ id: d,
18
+ name: f,
19
+ type: "checkbox",
20
+ defaultValue: u,
21
+ defaultChecked: l,
22
+ checked: s,
23
+ onChange: p,
24
+ className: _
25
+ }), o[13] = s, o[14] = l, o[15] = u, o[16] = d, o[17] = f, o[18] = p, o[19] = m, o[20] = _, o[21] = v) : v = o[21];
26
+ let y;
27
+ o[22] === Symbol.for("react.memo_cache_sentinel") ? (y = /* @__PURE__ */ r("svg", {
28
+ fill: "none",
29
+ viewBox: "0 0 14 14",
30
+ className: "pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25",
31
+ children: [/* @__PURE__ */ n("path", {
32
+ d: "M3 8L6 11L11 3.5",
33
+ strokeWidth: 2,
34
+ strokeLinecap: "round",
35
+ strokeLinejoin: "round",
36
+ className: "opacity-0 group-has-checked:opacity-100"
37
+ }), /* @__PURE__ */ n("path", {
38
+ d: "M3 7H11",
39
+ strokeWidth: 2,
40
+ strokeLinecap: "round",
41
+ strokeLinejoin: "round",
42
+ className: "opacity-0 group-has-indeterminate:opacity-100"
43
+ })]
44
+ }), o[22] = y) : y = o[22];
45
+ let b;
46
+ return o[23] === v ? b = o[24] : (b = /* @__PURE__ */ n("div", {
12
47
  className: "flex h-6 shrink-0 items-center",
13
- children: /* @__PURE__ */ n("div", {
48
+ children: /* @__PURE__ */ r("div", {
14
49
  className: "group grid size-4 grid-cols-1",
15
- children: [/* @__PURE__ */ t("input", {
16
- ...f,
17
- id: i,
18
- name: a,
19
- type: "checkbox",
20
- defaultValue: o,
21
- defaultChecked: s,
22
- checked: c,
23
- onChange: l,
24
- className: e("col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto", p, d)
25
- }), /* @__PURE__ */ n("svg", {
26
- fill: "none",
27
- viewBox: "0 0 14 14",
28
- className: "pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25",
29
- children: [/* @__PURE__ */ t("path", {
30
- d: "M3 8L6 11L11 3.5",
31
- strokeWidth: 2,
32
- strokeLinecap: "round",
33
- strokeLinejoin: "round",
34
- className: "opacity-0 group-has-checked:opacity-100"
35
- }), /* @__PURE__ */ t("path", {
36
- d: "M3 7H11",
37
- strokeWidth: 2,
38
- strokeLinecap: "round",
39
- strokeLinejoin: "round",
40
- className: "opacity-0 group-has-indeterminate:opacity-100"
41
- })]
42
- })]
50
+ children: [v, y]
43
51
  })
44
- });
52
+ }), o[23] = v, o[24] = b), b;
45
53
  };
46
54
  //#endregion
47
- export { i as Checkbox };
55
+ export { a as Checkbox };
48
56
 
49
57
  //# sourceMappingURL=index16.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index16.js","names":[],"sources":["../src/components/Checkbox/index.tsx"],"sourcesContent":["import React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\nconst colorVariants = {\n red: \"checked:border-red-700 checked:bg-red-700 indeterminate:border-red-700 indeterminate:bg-red-700 focus-visible:outline-red-700\",\n sky: \"checked:border-sky-600 checked:bg-sky-600 indeterminate:border-sky-600 indeterminate:bg-sky-600 focus-visible:outline-sky-600\",\n primary:\n \"checked:border-primary checked:bg-primary indeterminate:border-primary indeterminate:bg-primary focus-visible:outline-primary\",\n}\n\ninterface CheckboxProps\n extends Partial<Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\">> {\n id: string;\n name: string;\n checked: boolean;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n color?: keyof typeof colorVariants;\n};\n\nexport const Checkbox = ({\n id,\n name,\n defaultValue,\n defaultChecked,\n checked,\n onChange,\n color = \"primary\",\n className,\n ...props\n}: CheckboxProps) => {\n\n const colorClasses = colorVariants[color]\n\n return (\n <div className=\"flex h-6 shrink-0 items-center\">\n <div className=\"group grid size-4 grid-cols-1\">\n <input\n {...props}\n id={id}\n name={name}\n type=\"checkbox\"\n defaultValue={defaultValue}\n defaultChecked={defaultChecked}\n checked={checked}\n onChange={onChange}\n className={cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )}\n />\n <svg\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n className=\"pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-checked:opacity-100\"\n />\n <path\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-indeterminate:opacity-100\"\n />\n </svg>\n </div>\n </div>\n )\n}\n"],"mappings":";;;;AAKA,IAAM,IAAgB;CACpB,KAAK;CACL,KAAK;CACL,SACE;AACJ,GAWa,KAAY,EACvB,OACA,SACA,iBACA,mBACA,YACA,aACA,WAAQ,WACR,cACA,GAAG,QACgB;CAEnB,IAAM,IAAe,EAAc;CAEnC,OACE,kBAAC,OAAD;EAAK,WAAU;EACb,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,kBAAC,SAAD;IACE,GAAI;IACA;IACE;IACN,MAAK;IACS;IACE;IACP;IACC;IACV,WAAW,EACT,qQACA,GACA,CACF;GAAE,CAAA,GAEJ,kBAAC,OAAD;IACE,MAAK;IACL,SAAQ;IACR,WAAU;IAHZ,UAAA,CAKE,kBAAC,QAAD;KACE,GAAE;KACF,aAAa;KACb,eAAc;KACd,gBAAe;KACf,WAAU;IAAyC,CAAA,GAErD,kBAAC,QAAD;KACE,GAAE;KACF,aAAa;KACb,eAAc;KACd,gBAAe;KACf,WAAU;IAA+C,CAAA,CAExD;GACF,CAAA,CAAA;;CACF,CAAA;AAET"}
1
+ {"version":3,"file":"index16.js","names":["color = \"primary\"","{\n id,\n name,\n defaultValue,\n defaultChecked,\n checked,\n onChange,\n color = \"primary\",\n className,\n ...props\n}: CheckboxProps","cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )","<input\n {...props}\n id={id}\n name={name}\n type=\"checkbox\"\n defaultValue={defaultValue}\n defaultChecked={defaultChecked}\n checked={checked}\n onChange={onChange}\n className={cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )}\n />","<svg\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n className=\"pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-checked:opacity-100\"\n />\n <path\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-indeterminate:opacity-100\"\n />\n </svg>","<div className=\"flex h-6 shrink-0 items-center\">\n <div className=\"group grid size-4 grid-cols-1\">\n <input\n {...props}\n id={id}\n name={name}\n type=\"checkbox\"\n defaultValue={defaultValue}\n defaultChecked={defaultChecked}\n checked={checked}\n onChange={onChange}\n className={cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )}\n />\n <svg\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n className=\"pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-checked:opacity-100\"\n />\n <path\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-indeterminate:opacity-100\"\n />\n </svg>\n </div>\n </div>"],"sources":["../src/components/Checkbox/index.tsx"],"sourcesContent":["import React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\nconst colorVariants = {\n red: \"checked:border-red-700 checked:bg-red-700 indeterminate:border-red-700 indeterminate:bg-red-700 focus-visible:outline-red-700\",\n sky: \"checked:border-sky-600 checked:bg-sky-600 indeterminate:border-sky-600 indeterminate:bg-sky-600 focus-visible:outline-sky-600\",\n primary:\n \"checked:border-primary checked:bg-primary indeterminate:border-primary indeterminate:bg-primary focus-visible:outline-primary\",\n}\n\ninterface CheckboxProps\n extends Partial<Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\">> {\n id: string;\n name: string;\n checked: boolean;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n color?: keyof typeof colorVariants;\n};\n\nexport const Checkbox = ({\n id,\n name,\n defaultValue,\n defaultChecked,\n checked,\n onChange,\n color = \"primary\",\n className,\n ...props\n}: CheckboxProps) => {\n\n const colorClasses = colorVariants[color]\n\n return (\n <div className=\"flex h-6 shrink-0 items-center\">\n <div className=\"group grid size-4 grid-cols-1\">\n <input\n {...props}\n id={id}\n name={name}\n type=\"checkbox\"\n defaultValue={defaultValue}\n defaultChecked={defaultChecked}\n checked={checked}\n onChange={onChange}\n className={cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )}\n />\n <svg\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n className=\"pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-checked:opacity-100\"\n />\n <path\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-indeterminate:opacity-100\"\n />\n </svg>\n </div>\n </div>\n )\n}\n"],"mappings":";;;;AAKA,IAAM,IAAgB;CACpB,KAAK;CACL,KAAK;CACL,SACE;AACJ,GAWa,KAAA,MAUQ;gBALnB,GAGA,GAJA,GADA,GAFA,GACA,GAIA,GAGG,GAFHA;CAPuBC,AAAAA,EAAAA,OAAAA,kGACvB,8EAMA,OAAA,iBAEA,GAAA,KATuBA;CAYvB,IAAM,IAAe,EALrB,MAAA,KAAA,IAAQ,YAARD,IAmBmBE;CAGT,AAAA,EAAA,QAAA,KAAA,EAAA,QADA,KAFS,IAAA,EACT,qQACA,GACA,CACF,GADE,EAAA,MAAA,GADA,EAAA,MAAA;CAXJC,IAAAA;CAOW,AAAA,EAAA,QAAA,KAAA,EAAA,QADO,KAAA,EAAA,QADF,KAAA,EAAA,QAHV,KAAA,EAAA,QACE,KAAA,EAAA,QAKI,KAAA,EAAA,QAPN,KAAA,EAAA,QAQOD,KATb,IAAA,kBAAC,SAAD;EACE,GAAI;EACA;EACE;EACN,MAAK;EACS;EACE;EACP;EACC;EACV,WAAWA;CAKZ,CAAA,GAPU,EAAA,MAAA,GADO,EAAA,MAAA,GADF,EAAA,MAAA,GAHV,EAAA,MAAA,GACE,EAAA,MAAA,GAKI,EAAA,MAAA,GAPN,EAAA,MAAA,GAQOA,EAAAA,MAAAA;CAMbE,IAAAA;sDAAC,IAAA,kBAAA,OAAD;EACE,MAAK;EACL,SAAQ;EACR,WAAU;EAHZ,UAAA,CAKE,kBAAC,QAAD;GACE,GAAE;GACF,aAAa;GACb,eAAc;GACd,gBAAe;GACf,WAAU;EACX,CAAA,GACD,kBAAC,QAAD;GACE,GAAE;GACF,aAAa;GACb,eAAc;GACd,gBAAe;GACf,WAAU;EACX,CAAA,CACE;;CApCTC,IAAAA;CADF,OAGMF,EAAAA,QAAAA,iBAFJ,IAAA,kBAAC,OAAD;EAAK,WAAU;EACb,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACEA,GAeAC,CAoBG;;CACF,CAAA,GApCDD,EAAAA,MAAAA,eAFJE;AAwCJ"}