@alfadocs/ui-kit-debug 1.75.0 → 1.75.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/_chunks/{booking-ojunD_Y_.js → booking-D2r19Lia.js} +2 -2
- package/dist/_chunks/{booking-ojunD_Y_.js.map → booking-D2r19Lia.js.map} +1 -1
- package/dist/_chunks/{calendar-appointment-editor-dialog-CctI6mpd.js → calendar-appointment-editor-dialog-B4My4eiB.js} +2 -2
- package/dist/_chunks/{calendar-appointment-editor-dialog-CctI6mpd.js.map → calendar-appointment-editor-dialog-B4My4eiB.js.map} +1 -1
- package/dist/_chunks/{patient-details-Dgd_tocD.js → patient-details-B-I9Xkh9.js} +2 -2
- package/dist/_chunks/{patient-details-Dgd_tocD.js.map → patient-details-B-I9Xkh9.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-BFVlJnS9.js → patient-field-row-Bn0z6lAZ.js} +2 -2
- package/dist/_chunks/{patient-field-row-BFVlJnS9.js.map → patient-field-row-Bn0z6lAZ.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-BTKvFUmh.js → patient-summary-card-bhDo0gVX.js} +2 -2
- package/dist/_chunks/{patient-summary-card-BTKvFUmh.js.map → patient-summary-card-bhDo0gVX.js.map} +1 -1
- package/dist/_chunks/{phone-input-EwVuqFik.js → phone-input-C3NrD-nl.js} +78 -73
- package/dist/_chunks/phone-input-C3NrD-nl.js.map +1 -0
- package/dist/_chunks/{registration-form-B6qqeXP1.js → registration-form-DeK2QiJu.js} +2 -2
- package/dist/_chunks/{registration-form-B6qqeXP1.js.map → registration-form-DeK2QiJu.js.map} +1 -1
- package/dist/_chunks/{send-registration-link-form-pO2bGjGa.js → send-registration-link-form-__DWY62q.js} +2 -2
- package/dist/_chunks/{send-registration-link-form-pO2bGjGa.js.map → send-registration-link-form-__DWY62q.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-BFslxbRr.js → use-appointment-details-read-lFUL4kkd.js} +2 -2
- package/dist/_chunks/{use-appointment-details-read-BFslxbRr.js.map → use-appointment-details-read-lFUL4kkd.js.map} +1 -1
- package/dist/agent-catalog.json +1 -1
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/send-registration-link-form/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +1 -1
- package/dist/_chunks/phone-input-EwVuqFik.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alfadocs/ui-kit-debug",
|
|
3
|
-
"version": "1.75.
|
|
3
|
+
"version": "1.75.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe. (debug build — identical runtime to @alfadocs/ui-kit, ships source maps for symbolication).",
|
|
6
6
|
"license": "BUSL-1.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"phone-input-EwVuqFik.js","sources":["../../src/components/phone-input/phone-input.agent.ts","../../src/components/phone-input/phone-input.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — PhoneInput. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { PhoneInputHandle } from './phone-input';\n\nexport const phoneInputAgent: AgentAdapter<PhoneInputHandle> = {\n id: 'phone-input',\n // A phone number is a single form value, not free-form rich text — `set_value`\n // (not `edit_inline`, which is reserved for in-place rich/cell editing).\n capabilities: ['set_value'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.phoneInput.state.value',\n description:\n 'Current E.164 phone number, or empty string when not yet valid.',\n read: (handle) => handle.getValue(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.phoneInput.state.isEmpty',\n description: 'Whether the input has no value.',\n read: (handle) => handle.getValue() === '',\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n argsSchema: {\n type: 'object',\n properties: {\n value: {\n type: 'string',\n description:\n 'Phone number in E.164 or national format; the parser infers the country.',\n },\n },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.phoneInput.actions.setValue',\n description:\n 'Replace the phone number (E.164 or national format; parser will infer country).',\n examples: [\n { args: { value: '+393331234567' }, note: 'Set an Italian mobile.' },\n ],\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.phoneInput.actions.clear',\n description: 'Empty the input. Loses any typed value.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n focus: {\n safety: 'read',\n descriptionKey: 'ui.agent.phoneInput.actions.focus',\n description: 'Move keyboard focus to the phone-number input.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'phone-input',\n description: 'Marks the PhoneInput wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n} from 'react';\nimport { useAgentRegistration } from '../../agent';\nimport { phoneInputAgent } from './phone-input.agent';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useDomValue } from '../_shared/use-dom-value';\n\n/** Agent-readiness curated handle for PhoneInput. */\nexport interface PhoneInputHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n clear: () => void;\n focus: () => void;\n}\nimport * as Popover from '@radix-ui/react-popover';\nimport {\n findPopoverTrigger,\n useNonModalTabExit,\n} from '../_shared/non-modal-tab-exit';\nimport { Command, defaultFilter } from 'cmdk';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown } from 'lucide-react';\nimport {\n AsYouType,\n getCountries,\n getCountryCallingCode,\n parsePhoneNumberFromString,\n type CountryCode,\n} from 'libphonenumber-js/min';\nimport {\n FormFieldContext,\n useFormField,\n useFormFieldControlId,\n} from '../form-field/form-field-context';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { normalizeDiacritics } from '../_shared/normalize-diacritics';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport { Flag } from '../flag';\n\nexport interface PhoneInputChangeMeta {\n country: CountryCode;\n isValid: boolean;\n isPossible: boolean;\n type?: string;\n}\n\nexport interface PhoneInputProps {\n value?: string;\n defaultValue?: string;\n /**\n * Country pre-selected when no value is supplied. Defaults to `IT`\n * (AlfaDocs's dominant user base is Italian). Pass a different\n * `CountryCode` to override, or enable `detectBrowserCountry` to\n * derive it from the browser locale.\n */\n defaultCountry?: CountryCode;\n /**\n * When true, infer the default country from `navigator.language` /\n * `Intl.Locale` before falling back to `defaultCountry` (or `IT`).\n * Off by default — most AlfaDocs flows should stay on IT regardless\n * of the visitor's browser locale.\n */\n detectBrowserCountry?: boolean;\n onChange?: (e164: string, meta: PhoneInputChangeMeta) => void;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n popularCountries?: CountryCode[];\n /**\n * Restrict the country picker to this set (ISO 3166-1 alpha-2 codes), in\n * the order given. Unsupported or duplicate codes are dropped; an empty /\n * all-invalid list is ignored (every country stays selectable).\n * `popularCountries` is intersected with this set. When the list resolves\n * to a single country the picker collapses to a fixed, non-interactive\n * dial code — only the national-number field stays editable.\n */\n allowedCountries?: CountryCode[];\n className?: string;\n id?: string;\n name?: string;\n /**\n * What `name` posts in a native form. `national` (the default) posts the\n * number field's own text, e.g. `333 123 4567`. `e164` posts the full\n * number from a hidden field instead, e.g. `+393331234567`: the string\n * `onChange` reports, so it is empty while the text is not yet a number.\n */\n nameFormat?: 'national' | 'e164';\n required?: boolean;\n /**\n * Fires once when focus has left the whole control. Moving between the\n * country picker and the number field does not fire it. It takes no\n * event: the control has several parts, so there is no single target.\n */\n onBlur?: () => void;\n 'aria-label'?: string;\n}\n\nconst phoneInputWrapperVariants = cva(\n [\n 'ds:group ds:relative ds:inline-flex ds:items-stretch ds:w-full',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--control-border)] ds:bg-input',\n 'ds:shadow-[var(--shadow-input)]',\n 'ds:text-foreground',\n 'ds:transition-[colors,box-shadow] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n /* The ring is for the number field only. The country button draws its\n own, and `focus-within` here would draw a second one around it. */\n 'ds:has-[input:focus]:outline-[length:var(--focus-ring-width)] ds:has-[input:focus]:outline-solid',\n 'ds:has-[input:focus]:outline-ring ds:has-[input:focus]:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:has-[input:focus]:outline-[CanvasText]',\n 'ds:has-[input:disabled]:cursor-not-allowed ds:has-[input:disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-8 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:h-[var(--min-target-size)] ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:text-[length:var(--font-size-lg)]',\n },\n tone: {\n default: '',\n error: 'ds:border-destructive ds:has-[input:focus]:outline-destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst countryTriggerVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:bg-transparent ds:text-foreground',\n 'ds:border-0 ds:border-e ds:border-e-border',\n 'ds:rounded-s-[var(--radius-sm)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-muted',\n 'ds:focus:outline-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:ps-3 ds:pe-2',\n md: 'ds:ps-3 ds:pe-2',\n lg: 'ds:ps-4 ds:pe-3',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst phoneNumberInputVariants = cva(\n [\n 'ds:flex-1 ds:min-w-0 ds:bg-transparent ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:border-0 ds:outline-none',\n 'ds:disabled:cursor-not-allowed',\n 'ds:read-only:cursor-default',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:ps-2 ds:pe-3 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:ps-2 ds:pe-3 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:ps-3 ds:pe-4 ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst pickerContentClasses = [\n 'ds:z-[var(--z-popover)] ds:overflow-hidden ds:w-72',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst pickerSearchClasses = [\n 'ds:w-full ds:bg-transparent ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:border-0 ds:border-b ds:border-b-border ds:outline-none',\n 'ds:ps-3 ds:pe-3 ds:py-2 ds:text-[var(--font-size-sm)]',\n 'ds:focus:outline-none',\n].join(' ');\n\nconst pickerListClasses =\n 'ds:max-h-72 ds:overflow-y-auto ds:p-[var(--spacing-xs)]';\n\nconst pickerItemClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)] ds:ps-3 ds:pe-3 ds:py-2 ds:text-[var(--font-size-sm)]',\n 'ds:text-foreground ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n].join(' ');\n\nconst pickerGroupHeadingClasses = [\n 'ds:ps-3 ds:pe-3 ds:py-1.5',\n 'type-eyebrow ds:text-muted-foreground',\n].join(' ');\n\nconst pickerEmptyClasses =\n 'ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground';\n\nconst chevronSizeBySize = {\n sm: 'ds:size-3.5',\n md: 'ds:size-4',\n lg: 'ds:size-5',\n} as const;\n\nconst flagSizeBySize = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n} as const satisfies Record<'sm' | 'md' | 'lg', 'sm' | 'md' | 'lg'>;\n\nfunction countDigitsBefore(str: string, position: number): number {\n let digits = 0;\n for (let i = 0; i < position && i < str.length; i++) {\n if (str[i] >= '0' && str[i] <= '9') digits++;\n }\n return digits;\n}\n\nfunction positionAfterDigits(str: string, targetDigits: number): number {\n if (targetDigits === 0) return 0;\n let count = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] >= '0' && str[i] <= '9') {\n count++;\n if (count === targetDigits) return i + 1;\n }\n }\n return str.length;\n}\n\nfunction resolveDefaultCountry(\n explicit: CountryCode | undefined,\n supported: Set<string>,\n detectBrowser: boolean,\n locale: string,\n allowedList: CountryCode[] | null,\n): CountryCode {\n const allowed =\n allowedList && allowedList.length ? new Set<string>(allowedList) : null;\n const ok = (code: string) =>\n supported.has(code) && (!allowed || allowed.has(code));\n\n if (explicit && ok(explicit)) return explicit;\n\n if (detectBrowser) {\n const fromNavigator =\n typeof navigator !== 'undefined' ? navigator.language : undefined;\n if (fromNavigator) {\n const match = fromNavigator.match(/-([A-Za-z]{2})/);\n if (match) {\n const candidate = match[1].toUpperCase();\n if (ok(candidate)) return candidate as CountryCode;\n }\n }\n\n try {\n const region = new Intl.Locale(locale).region;\n if (region && ok(region.toUpperCase())) {\n return region.toUpperCase() as CountryCode;\n }\n } catch {\n // Intl.Locale may throw on malformed BCP-47 — fall through.\n }\n }\n\n // A restricted list with no explicit / detected hit defaults to the\n // consumer's first listed country; otherwise AlfaDocs's Italian-first\n // fallback.\n if (allowed) return allowedList![0];\n return 'IT';\n}\n\ninterface CountryRow {\n code: CountryCode;\n name: string;\n dialCode: string;\n}\n\nfunction buildCountryRows(\n locale: string,\n countries: CountryCode[],\n): CountryRow[] {\n let displayNames: Intl.DisplayNames;\n try {\n displayNames = new Intl.DisplayNames([locale], { type: 'region' });\n } catch {\n displayNames = new Intl.DisplayNames(['en'], { type: 'region' });\n }\n const rows = countries.map<CountryRow>((code) => ({\n code,\n name: displayNames.of(code) ?? code,\n dialCode: getCountryCallingCode(code),\n }));\n const collator = new Intl.Collator(locale);\n return rows.sort((a, b) => collator.compare(a.name, b.name));\n}\n\nexport const PhoneInput = forwardRef<HTMLInputElement, PhoneInputProps>(\n function PhoneInput(\n {\n value,\n defaultValue,\n defaultCountry,\n detectBrowserCountry = false,\n onChange,\n size = 'md',\n tone = 'default',\n disabled,\n readOnly,\n placeholder,\n popularCountries,\n allowedCountries,\n className,\n id,\n name,\n nameFormat = 'national',\n required,\n onBlur,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation('ui');\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const supportedCountries = useMemo(\n () => new Set(getCountries() as string[]),\n [],\n );\n\n // Consumer-restricted country set, filtered to supported + deduped with\n // order preserved. `null` means \"no restriction\" (every country shown).\n const allowedList = useMemo<CountryCode[] | null>(() => {\n if (!allowedCountries || allowedCountries.length === 0) return null;\n const seen = new Set<string>();\n const filtered = allowedCountries.filter((code) => {\n if (!supportedCountries.has(code) || seen.has(code)) return false;\n seen.add(code);\n return true;\n });\n return filtered.length > 0 ? filtered : null;\n }, [allowedCountries, supportedCountries]);\n\n // A single allowed country has nothing to pick — render the dial code as a\n // fixed, non-interactive prefix instead of a one-item picker.\n const isCountryFixed = allowedList !== null && allowedList.length === 1;\n\n const initialState = useMemo(() => {\n const resolvedCountry = resolveDefaultCountry(\n defaultCountry,\n supportedCountries,\n detectBrowserCountry,\n i18n.language,\n allowedList,\n );\n const raw = value ?? defaultValue;\n if (raw) {\n const parsed = parsePhoneNumberFromString(raw);\n if (parsed?.country) {\n // Clamp the parsed country to `allowedCountries` so the rendered dial\n // code can never leave the allowed set — a single-country lock stays\n // on its country even when handed an off-set value.\n if (!allowedList || allowedList.includes(parsed.country)) {\n return {\n country: parsed.country,\n display: parsed.formatNational(),\n pinned: true,\n };\n }\n return {\n country: resolvedCountry,\n display: new AsYouType(resolvedCountry).input(\n parsed.nationalNumber,\n ),\n pinned: true,\n };\n }\n return { country: resolvedCountry, display: raw, pinned: false };\n }\n return { country: resolvedCountry, display: '', pinned: false };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [country, setCountry] = useState<CountryCode>(initialState.country);\n const [displayValue, setDisplayValue] = useState<string>(\n initialState.display,\n );\n const [pickerOpen, setPickerOpen] = useState(false);\n const [pickerSearch, setPickerSearch] = useState('');\n\n const isControlled = value !== undefined;\n const lastEmittedRef = useRef<string>('');\n const pendingCaretRef = useRef<number | null>(null);\n // Pins the country once the user (or an incoming value) selects one,\n // so the locale-flip effect below stops re-resolving.\n const userSelectedCountryRef = useRef(initialState.pinned);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const composedInputRef = composeRefs(ref, inputRef);\n // The number is written to the input's DOM property, never to its\n // `value` attribute, where a copied outerHTML or a session replay\n // could read it. Declared before the caret effect below, which places\n // the caret in the text this one writes.\n const syncDisplay = useDomValue(inputRef, displayValue);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const pickerContentRef = useRef<HTMLDivElement | null>(null);\n\n // Re-resolve the country when i18n.language flips from the bootstrap\n // fallback to the real locale on first paint, unless the user has\n // already pinned a country.\n useEffect(() => {\n if (userSelectedCountryRef.current) return;\n const next = resolveDefaultCountry(\n defaultCountry,\n supportedCountries,\n detectBrowserCountry,\n i18n.language,\n allowedList,\n );\n setCountry((prev) => (prev === next ? prev : next));\n }, [\n i18n.language,\n defaultCountry,\n supportedCountries,\n detectBrowserCountry,\n allowedList,\n ]);\n\n // Sync state back from a controlled `value` prop change that did not\n // originate from this component (e.g. parent reset). Skip the sync when\n // the incoming value matches what we just emitted.\n useEffect(() => {\n if (!isControlled) return;\n const current = value ?? '';\n if (current === lastEmittedRef.current) return;\n if (current === '') {\n setDisplayValue('');\n return;\n }\n const parsed = parsePhoneNumberFromString(current);\n if (\n parsed?.country &&\n (!allowedList || allowedList.includes(parsed.country))\n ) {\n userSelectedCountryRef.current = true;\n setCountry(parsed.country);\n setDisplayValue(parsed.formatNational());\n } else {\n // Off-set or unparseable controlled value — keep the country within the\n // allowed set; only sync the displayed digits.\n setDisplayValue(parsed ? parsed.formatNational() : current);\n }\n }, [value, isControlled, allowedList]);\n\n useIsomorphicLayoutEffect(() => {\n if (pendingCaretRef.current == null) return;\n const pos = pendingCaretRef.current;\n pendingCaretRef.current = null;\n const node = inputRef.current;\n if (node && document.activeElement === node) {\n node.setSelectionRange(pos, pos);\n }\n });\n\n const emit = useCallback(\n (nextDisplay: string, nextCountry: CountryCode) => {\n const parsed = parsePhoneNumberFromString(nextDisplay, nextCountry);\n const e164 = parsed?.number ?? '';\n lastEmittedRef.current = e164;\n onChange?.(e164, {\n country: nextCountry,\n isValid: parsed?.isValid() ?? false,\n isPossible: parsed?.isPossible() ?? false,\n type: parsed?.getType(),\n });\n },\n [onChange],\n );\n\n const controlId = useFormFieldControlId(ctx, id);\n const inputId = id ?? (inFormField ? controlId : undefined);\n const effectiveDisabled =\n (inFormField ? ctx.disabled : false) || Boolean(disabled);\n const effectiveRequired =\n (inFormField ? ctx.required : false) || Boolean(required);\n const effectiveInvalid = inFormField ? ctx.invalid : false;\n const effectiveTone = effectiveInvalid ? 'error' : tone;\n const describedBy =\n inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.phone.placeholder', 'Phone number');\n\n /* Focus leaving the whole control. The picker is portalled, so it is\n outside the wrapper in the DOM but still part of the control. */\n const onBlurRef = useRef(onBlur);\n onBlurRef.current = onBlur;\n const focusInsideRef = useRef(false);\n const pressInsideRef = useRef(false);\n const isInside = useCallback(\n (node: EventTarget | null) =>\n node instanceof Node &&\n Boolean(\n wrapperRef.current?.contains(node) ||\n pickerContentRef.current?.contains(node),\n ),\n [],\n );\n const leave = useCallback(() => {\n if (!focusInsideRef.current) return;\n focusInsideRef.current = false;\n onBlurRef.current?.();\n }, []);\n const handleFocus = () => {\n focusInsideRef.current = true;\n };\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n const next = event.relatedTarget;\n if (isInside(next)) return;\n /* Safari does not focus a button on click: pressing the country\n button blurs the number field to nowhere. */\n if (next === null && pressInsideRef.current) return;\n leave();\n };\n const listensForBlur = onBlur !== undefined;\n useEffect(() => {\n if (!listensForBlur) return;\n let check: number | undefined;\n const onPointerDown = (event: PointerEvent) => {\n pressInsideRef.current = isInside(event.target);\n if (pressInsideRef.current) return;\n /* A press outside closes the picker, and its focused search box\n can unmount without a blur event. */\n check = window.setTimeout(() => {\n if (!isInside(document.activeElement)) leave();\n }, 0);\n };\n const onPointerUp = () => {\n pressInsideRef.current = false;\n };\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('pointerup', onPointerUp, true);\n document.addEventListener('pointercancel', onPointerUp, true);\n return () => {\n window.clearTimeout(check);\n document.removeEventListener('pointerdown', onPointerDown, true);\n document.removeEventListener('pointerup', onPointerUp, true);\n document.removeEventListener('pointercancel', onPointerUp, true);\n };\n }, [listensForBlur, isInside, leave]);\n\n const postsE164 = nameFormat === 'e164' && name !== undefined;\n const e164Value = postsE164\n ? (parsePhoneNumberFromString(displayValue, country)?.number ?? '')\n : '';\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n // A keystroke the formatter drops (or a read-only field refuses)\n // leaves the text as it was, so no render follows: ask for one, to\n // take the refused character out.\n syncDisplay();\n if (readOnly) return;\n const target = event.target;\n const raw = target.value;\n const caret = target.selectionStart ?? raw.length;\n const digitsBefore = countDigitsBefore(raw, caret);\n\n const formatter = new AsYouType(country);\n const formatted = formatter.input(raw);\n\n pendingCaretRef.current = positionAfterDigits(formatted, digitsBefore);\n setDisplayValue(formatted);\n emit(formatted, country);\n };\n\n const lastEmittedRefForHandle = lastEmittedRef;\n const agentHandle = useMemo<PhoneInputHandle>(\n () => ({\n getValue: () => lastEmittedRefForHandle.current,\n setValue: (next) => {\n if (next === '') {\n setDisplayValue('');\n emit('', country);\n return;\n }\n const parsed = parsePhoneNumberFromString(next);\n if (parsed?.country) {\n userSelectedCountryRef.current = true;\n setCountry(parsed.country);\n setDisplayValue(parsed.formatNational());\n emit(parsed.formatNational(), parsed.country);\n } else {\n const formatter = new AsYouType(country);\n const formatted = formatter.input(next);\n setDisplayValue(formatted);\n emit(formatted, country);\n }\n },\n clear: () => {\n setDisplayValue('');\n emit('', country);\n },\n focus: () => inputRef.current?.focus(),\n }),\n [country, emit, lastEmittedRefForHandle],\n );\n useAgentRegistration(phoneInputAgent, agentHandle, id);\n const exitOnTab = useNonModalTabExit(true, {\n getAnchor: findPopoverTrigger,\n onReturnToTrigger: () => setPickerOpen(false),\n });\n\n const handleCountrySelect = (nextCountry: CountryCode) => {\n if (nextCountry === country) {\n setPickerOpen(false);\n return;\n }\n const digits = displayValue.replace(/\\D/g, '');\n const formatter = new AsYouType(nextCountry);\n const reformatted = digits ? formatter.input(digits) : '';\n userSelectedCountryRef.current = true;\n setCountry(nextCountry);\n setDisplayValue(reformatted);\n setPickerOpen(false);\n setPickerSearch('');\n emit(reformatted, nextCountry);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n };\n\n const countryRows = useMemo(\n () =>\n buildCountryRows(\n i18n.language,\n allowedList ?? (Array.from(supportedCountries) as CountryCode[]),\n ),\n [i18n.language, supportedCountries, allowedList],\n );\n\n const popularRows = useMemo(() => {\n if (!popularCountries || popularCountries.length === 0) return [];\n const byCode = new Map(countryRows.map((row) => [row.code, row]));\n return popularCountries\n .filter((code): code is CountryCode => supportedCountries.has(code))\n .map((code) => byCode.get(code))\n .filter((row): row is CountryRow => Boolean(row));\n }, [popularCountries, countryRows, supportedCountries]);\n\n const popularCodes = useMemo(\n () => new Set(popularRows.map((row) => row.code)),\n [popularRows],\n );\n\n const remainingRows = useMemo(\n () =>\n popularCodes.size > 0\n ? countryRows.filter((row) => !popularCodes.has(row.code))\n : countryRows,\n [countryRows, popularCodes],\n );\n\n const selected = useMemo(\n () => countryRows.find((row) => row.code === country),\n [countryRows, country],\n );\n const selectedDialCode = selected ? selected.dialCode : '';\n const selectedName = selected ? selected.name : country;\n\n const triggerLabel = t('inputs.phone.countryPickerLabel', 'Country');\n const triggerAccessibleName = `${triggerLabel}: ${selectedName}, +${selectedDialCode}`;\n\n const filterFn = useCallback(\n (candidate: string, searchStr: string, keywords?: string[]) => {\n const normalizedCandidate = normalizeDiacritics(candidate);\n const normalizedSearch = normalizeDiacritics(searchStr);\n const normalizedKeywords = keywords?.map(normalizeDiacritics);\n return defaultFilter(\n normalizedCandidate,\n normalizedSearch,\n normalizedKeywords,\n );\n },\n [],\n );\n\n const renderRow = (row: CountryRow) => {\n const accessibleLabel = `${row.name}, +${row.dialCode}`;\n return (\n <Command.Item\n key={row.code}\n value={row.code}\n keywords={[row.name, row.dialCode, `+${row.dialCode}`]}\n onSelect={() => handleCountrySelect(row.code)}\n className={pickerItemClasses}\n aria-label={accessibleLabel}\n >\n <Flag country={row.code} size={flagSizeBySize[size]} />\n <span className=\"ds:flex-1 ds:truncate\">{row.name}</span>\n <bdi dir=\"ltr\" className=\"ds:text-muted-foreground ds:tabular-nums\">\n +{row.dialCode}\n </bdi>\n </Command.Item>\n );\n };\n\n return (\n <div\n ref={wrapperRef}\n onFocus={handleFocus}\n onBlur={handleBlur}\n data-component=\"phone-input\"\n data-component-id={id}\n data-slot=\"phone-input\"\n className={phoneInputWrapperVariants({\n size,\n tone: effectiveTone,\n className,\n })}\n >\n {isCountryFixed ? (\n <span\n data-slot=\"phone-country-fixed\"\n className={`${countryTriggerVariants({ size })} ds:cursor-default ds:hover:bg-transparent`}\n >\n <span className=\"ds:sr-only\">{`${triggerLabel}: ${selectedName}`}</span>\n <Flag country={country} size={flagSizeBySize[size]} />\n <bdi dir=\"ltr\" className=\"ds:tabular-nums\">\n +{selectedDialCode}\n </bdi>\n </span>\n ) : (\n <Popover.Root open={pickerOpen} onOpenChange={setPickerOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n // A read-only number keeps its country too. The wrapper dims only for\n // a disabled number field, so a locked number stays legible.\n disabled={effectiveDisabled || Boolean(readOnly)}\n // What opens is a dialog: a search box over the list.\n aria-haspopup=\"dialog\"\n aria-expanded={pickerOpen}\n aria-label={triggerAccessibleName}\n className={countryTriggerVariants({ size })}\n >\n <Flag country={country} size={flagSizeBySize[size]} />\n <bdi dir=\"ltr\" className=\"ds:tabular-nums\">\n +{selectedDialCode}\n </bdi>\n <ChevronDown\n aria-hidden=\"true\"\n className={[\n chevronSizeBySize[size],\n 'ds:shrink-0 ds:text-muted-foreground',\n 'ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n pickerOpen ? 'ds:rotate-180' : '',\n ].join(' ')}\n />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n ref={pickerContentRef}\n onKeyDown={exitOnTab}\n sideOffset={6}\n align=\"start\"\n // Radix gives the content role=\"dialog\" with no name.\n aria-label={triggerLabel}\n className={pickerContentClasses}\n >\n <Command\n filter={filterFn}\n shouldFilter\n loop\n label={triggerLabel}\n >\n <Command.Input\n asChild\n value={pickerSearch}\n onValueChange={setPickerSearch}\n >\n <input\n data-phone-country-search=\"true\"\n type=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n placeholder={t(\n 'inputs.phone.searchCountry',\n 'Search countries…',\n )}\n className={pickerSearchClasses}\n />\n </Command.Input>\n <Command.List className={pickerListClasses}>\n <Command.Empty className={pickerEmptyClasses}>\n {t('inputs.phone.noCountryFound', 'No country found')}\n </Command.Empty>\n {popularRows.length > 0 ? (\n <Command.Group\n heading={\n <span className={pickerGroupHeadingClasses}>\n {t('inputs.phone.popularCountries', 'Popular')}\n </span>\n }\n >\n {popularRows.map(renderRow)}\n </Command.Group>\n ) : null}\n <Command.Group\n heading={\n popularRows.length > 0 ? (\n <span className={pickerGroupHeadingClasses}>\n {t('inputs.phone.allCountries', 'All countries')}\n </span>\n ) : undefined\n }\n >\n {remainingRows.map(renderRow)}\n </Command.Group>\n </Command.List>\n </Command>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n <input\n ref={composedInputRef}\n id={inputId}\n name={postsE164 ? undefined : name}\n type=\"tel\"\n inputMode=\"tel\"\n autoComplete=\"tel-national\"\n placeholder={resolvedPlaceholder}\n disabled={effectiveDisabled}\n readOnly={readOnly}\n required={effectiveRequired}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n onChange={handleInputChange}\n className={phoneNumberInputVariants({ size })}\n />\n {postsE164 ? (\n <input\n type=\"hidden\"\n name={name}\n value={e164Value}\n disabled={effectiveDisabled}\n />\n ) : null}\n </div>\n );\n },\n);\n\nPhoneInput.displayName = 'PhoneInput';\n\nexport {\n phoneInputWrapperVariants,\n countryTriggerVariants,\n phoneNumberInputVariants,\n};\n"],"names":["phoneInputAgent","handle","args","phoneInputWrapperVariants","cva","countryTriggerVariants","phoneNumberInputVariants","pickerContentClasses","pickerSearchClasses","pickerListClasses","pickerItemClasses","MENU_ROW_HIGHLIGHT","pickerGroupHeadingClasses","pickerEmptyClasses","chevronSizeBySize","flagSizeBySize","countDigitsBefore","str","position","digits","i","positionAfterDigits","targetDigits","count","resolveDefaultCountry","explicit","supported","detectBrowser","locale","allowedList","allowed","ok","code","fromNavigator","match","candidate","region","buildCountryRows","countries","displayNames","rows","getCountryCallingCode","collator","a","b","PhoneInput","forwardRef","value","defaultValue","defaultCountry","detectBrowserCountry","onChange","size","tone","disabled","readOnly","placeholder","popularCountries","allowedCountries","className","id","name","nameFormat","required","onBlur","ariaLabel","ref","t","i18n","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","supportedCountries","useMemo","getCountries","seen","filtered","isCountryFixed","initialState","resolvedCountry","raw","parsed","parsePhoneNumberFromString","AsYouType","country","setCountry","useState","displayValue","setDisplayValue","pickerOpen","setPickerOpen","pickerSearch","setPickerSearch","isControlled","lastEmittedRef","useRef","pendingCaretRef","userSelectedCountryRef","inputRef","composedInputRef","composeRefs","syncDisplay","useDomValue","wrapperRef","pickerContentRef","useEffect","next","prev","current","useIsomorphicLayoutEffect","pos","node","emit","useCallback","nextDisplay","nextCountry","e164","controlId","useFormFieldControlId","inputId","effectiveDisabled","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","resolvedPlaceholder","onBlurRef","focusInsideRef","pressInsideRef","isInside","_a","_b","leave","handleFocus","handleBlur","event","listensForBlur","check","onPointerDown","onPointerUp","postsE164","e164Value","handleInputChange","target","caret","digitsBefore","formatted","lastEmittedRefForHandle","agentHandle","useAgentRegistration","exitOnTab","useNonModalTabExit","findPopoverTrigger","handleCountrySelect","formatter","reformatted","countryRows","popularRows","byCode","row","popularCodes","remainingRows","selected","selectedDialCode","selectedName","triggerLabel","triggerAccessibleName","filterFn","searchStr","keywords","normalizedCandidate","normalizeDiacritics","normalizedSearch","normalizedKeywords","defaultFilter","renderRow","accessibleLabel","jsxs","Command","jsx","Flag","Popover","ChevronDown"],"mappings":"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"}
|