@aspprev/versi-ds 0.1.0 → 0.1.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/README.md +6 -8
- package/dist/charts.js +1 -1
- package/dist/{chunk-BY4HJZFJ.js → chunk-5VJ6H62W.js} +7 -7
- package/dist/chunk-5VJ6H62W.js.map +1 -0
- package/dist/{chunk-OWXG2A4N.js → chunk-ATWH3MA6.js} +1 -1
- package/dist/chunk-ATWH3MA6.js.map +1 -0
- package/dist/{chunk-CWIPMGCA.js → chunk-CSQXTG32.js} +1 -1
- package/dist/chunk-CSQXTG32.js.map +1 -0
- package/dist/{chunk-2ACDV5D5.js → chunk-JSPXVXUY.js} +1 -1
- package/dist/chunk-JSPXVXUY.js.map +1 -0
- package/dist/{chunk-OPUUOVCL.js → chunk-L5UMGEXV.js} +9 -3
- package/dist/chunk-L5UMGEXV.js.map +1 -0
- package/dist/{chunk-XGWGBD7X.js → chunk-TESAXMCF.js} +1 -1
- package/dist/chunk-TESAXMCF.js.map +1 -0
- package/dist/{chunk-6MXHE5MD.js → chunk-V66QL3TD.js} +1 -1
- package/dist/chunk-V66QL3TD.js.map +1 -0
- package/dist/chunk-YCW3REQK.js +3102 -0
- package/dist/chunk-YCW3REQK.js.map +1 -0
- package/dist/core.d.ts +1 -1
- package/dist/core.js +3 -3
- package/dist/countries.js +1 -1
- package/dist/documents.js +2 -2
- package/dist/forms.js +3 -3
- package/dist/index.js +8 -8
- package/dist/manifest.json +9 -9
- package/dist/overlays.js +1 -1
- package/package.json +9 -3
- package/dist/chunk-2ACDV5D5.js.map +0 -1
- package/dist/chunk-6MXHE5MD.js.map +0 -1
- package/dist/chunk-A3PA5H7L.js +0 -3099
- package/dist/chunk-A3PA5H7L.js.map +0 -1
- package/dist/chunk-BY4HJZFJ.js.map +0 -1
- package/dist/chunk-CWIPMGCA.js.map +0 -1
- package/dist/chunk-OPUUOVCL.js.map +0 -1
- package/dist/chunk-OWXG2A4N.js.map +0 -1
- package/dist/chunk-XGWGBD7X.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/input/Input.tsx","../src/components/field/FieldFrame.tsx","../src/components/field/field-styles.ts","../src/components/inputSelect/InputSelect.tsx","../src/utils/floating-panel-position.ts","../src/components/textArea/TextArea.tsx","../src/components/inputPhone/InputPhone.tsx","../src/components/datePicker/UnifiedDatePicker.tsx","../src/components/datePicker/datePicker.tsx","../src/components/selectMulti/SelectMultiView.tsx","../src/components/selectMulti/SelectMulti.tsx","../src/components/selectCountry/SelectCountry.tsx","../src/components/radio-group/radio-group.tsx","../src/components/radioCardGroup/RadioCardGroup.tsx"],"sourcesContent":["\"use client\";\r\nimport React, { useRef, useCallback, useId, useState } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport { IconBaseProps } from \"react-icons\";\r\nimport { PatternFormat, NumberFormatValues } from \"react-number-format\";\r\nimport { useField } from \"formik\";\r\nimport { MdInfoOutline, MdVisibility, MdVisibilityOff } from \"react-icons/md\";\r\nimport { mergeAriaDescribedBy } from \"../../utils/accessibility\";\nimport Tooltip from \"../tooltip/Tooltip\";\r\nimport FieldFrame from \"../field/FieldFrame\";\r\nimport {\r\n FIELD_CONTROL_CLASS,\r\n FIELD_DISABLED_CLASS,\r\n FIELD_ERROR_CLASS,\r\n FIELD_INPUT_CLASS,\r\n} from \"../field/field-styles\";\r\n\r\nexport type InputProps = {\n name: string;\r\n label?: string;\r\n helperText?: string | React.ReactNode;\r\n placeholder?: string;\r\n prefix?: string;\r\n suffix?: string;\r\n mask?:\r\n | \"cep\"\r\n | \"conta\"\r\n | \"currency\"\r\n | \"cpf\"\r\n | \"phone\"\r\n | \"date\"\r\n | \"datePicker\"\r\n | \"specialChars\"\r\n | \"cnpj\"\r\n | \"agencia\";\r\n disabled?: boolean;\r\n error?: boolean;\r\n disallowSpaces?: boolean;\r\n leadIcon?: React.ComponentType<IconBaseProps>;\r\n endIcon?: React.ComponentType<IconBaseProps>;\r\n} & React.InputHTMLAttributes<HTMLInputElement>;\r\n\r\nconst BaseInput = React.forwardRef<\r\n HTMLInputElement,\r\n React.InputHTMLAttributes<HTMLInputElement>\r\n>((props, ref) => (\r\n <input\r\n {...props}\r\n ref={ref}\r\n className={classNames(FIELD_INPUT_CLASS, props.className)}\r\n />\r\n));\r\nBaseInput.displayName = \"BaseInput\";\r\n\r\nfunction normalizeCurrencyDigits(value: unknown) {\r\n if (value === undefined || value === null) return \"\";\r\n return String(value).replace(/\\D/g, \"\");\r\n}\r\n\r\nfunction formatCurrencyAmount(value: number) {\r\n return value.toLocaleString(\"pt-BR\", {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n });\r\n}\r\n\r\nfunction formatCurrencyDigitsForDisplay(value: unknown) {\r\n if (value === undefined || value === null || value === \"\") return \"\";\r\n\r\n if (typeof value === \"number\" && Number.isFinite(value)) {\r\n return formatCurrencyAmount(value);\r\n }\r\n\r\n const stringValue = String(value).trim();\r\n\r\n if (!stringValue) return \"\";\r\n\r\n const digits = normalizeCurrencyDigits(stringValue);\r\n\r\n if (!digits) return \"\";\r\n\r\n const normalized = digits.padStart(3, \"0\");\r\n const integerPart = normalized.slice(0, -2).replace(/^0+(?=\\d)/, \"\") || \"0\";\r\n const decimalPart = normalized.slice(-2);\r\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \".\");\r\n\r\n return `${formattedInteger},${decimalPart}`;\r\n}\r\n\r\nfunction formatContaValue(value: string) {\r\n const upperValue = value.toUpperCase();\r\n const hasHyphen = upperValue.includes(\"-\");\r\n const [rawBody = \"\", rawDigit = \"\"] = upperValue.split(\"-\", 2);\r\n\r\n if (hasHyphen) {\r\n const bodySeed = rawBody.replace(/\\D/g, \"\");\r\n const suffixChars = rawDigit.replace(/[^0-9X]/g, \"\");\r\n const suffixBody = suffixChars.slice(0, -1).replace(/\\D/g, \"\");\r\n const body = `${bodySeed}${suffixBody}`.slice(0, 12);\r\n const digit = suffixChars.slice(-1);\r\n\r\n if (!body) return \"\";\r\n return digit ? `${body}-${digit}` : `${body}-`;\r\n }\r\n\r\n const compactDigits = upperValue.replace(/\\D/g, \"\").slice(0, 13);\r\n if (!compactDigits) return \"\";\r\n\r\n if (compactDigits.length <= 12) {\r\n return `${compactDigits}-`;\r\n }\r\n\r\n return `${compactDigits.slice(0, 12)}-${compactDigits.slice(12, 13)}`;\r\n}\r\n\r\nconst Input: React.FC<InputProps> = ({\r\n name,\r\n label,\r\n helperText,\r\n placeholder,\r\n prefix,\r\n suffix,\r\n mask,\r\n disabled,\r\n error,\r\n disallowSpaces,\r\n leadIcon: LeadIcon,\r\n endIcon: EndIcon,\r\n type,\r\n className,\r\n ...rest\r\n}) => {\r\n const [field, meta, helpers] = useField(name);\r\n\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const iconRef = useRef<HTMLButtonElement>(null);\r\n const [hovered, setHovered] = useState(false);\r\n\r\n const isPasswordType = type === \"password\";\r\n const [showPassword, setShowPassword] = useState(false);\r\n const currentType = isPasswordType\r\n ? showPassword\r\n ? \"text\"\r\n : \"password\"\r\n : type;\r\n\r\n const hasError = Boolean(meta.touched && meta.error);\r\n const inputId = rest.id ?? name;\r\n const errorId = `${inputId}-error`;\r\n const ariaDescribedBy = mergeAriaDescribedBy(\r\n rest[\"aria-describedby\"],\r\n hasError ? errorId : undefined,\r\n );\r\n const accessibilityProps = {\r\n id: inputId,\r\n \"aria-invalid\": hasError || undefined,\r\n \"aria-describedby\": ariaDescribedBy,\r\n };\r\n\r\n const safeValue = (v: unknown) =>\r\n v === undefined || v === null ? \"\" : (v as string | number);\r\n\r\n const sanitizeValue = useCallback(\r\n (value: string) => {\r\n if (!disallowSpaces) return value;\r\n return value.replace(/\\s/g, \"\");\r\n },\r\n [disallowSpaces],\r\n );\r\n\r\n const handlePasteFormik = useCallback(\r\n (e: React.ClipboardEvent<HTMLInputElement>) => {\r\n if (!disallowSpaces) {\r\n rest.onPaste?.(e);\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n const pastedText = e.clipboardData.getData(\"text\");\r\n const sanitizedValue = sanitizeValue(pastedText);\r\n helpers.setValue(sanitizedValue);\r\n rest.onPaste?.(e);\r\n },\r\n [disallowSpaces, helpers, rest, sanitizeValue],\r\n );\r\n\r\n const handleValueChange = useCallback(\r\n (values: NumberFormatValues) => {\r\n helpers.setValue(values.value);\r\n },\r\n [helpers],\r\n );\r\n\r\n const handleCurrencyChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const formattedCurrencyValue = formatCurrencyDigitsForDisplay(\r\n e.target.value,\r\n );\r\n\r\n helpers.setValue(formattedCurrencyValue);\r\n\r\n if (rest.onChange) {\r\n const event = {\r\n ...e,\r\n target: { ...e.target, value: formattedCurrencyValue },\r\n currentTarget: {\r\n ...e.currentTarget,\r\n value: formattedCurrencyValue,\r\n },\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n\r\n rest.onChange(event);\r\n }\r\n },\r\n [helpers, rest],\r\n );\r\n\r\n const cleanSpecialChars = (value: string) => {\r\n if (!value) return \"\";\r\n let newValue = value;\r\n newValue = newValue.replace(/[áàãâä]/gi, \"a\");\r\n newValue = newValue.replace(/[éèêë]/gi, \"e\");\r\n newValue = newValue.replace(/[íìîï]/gi, \"i\");\r\n newValue = newValue.replace(/[óòõôö]/gi, \"o\");\r\n newValue = newValue.replace(/[úùûü]/gi, \"u\");\r\n newValue = newValue.replace(/[ç]/gi, \"c\");\r\n newValue = newValue.replace(/['\"`´@!#$%&¨()*;:?\\-_+={}\\[\\]\\\\\\/|<>.,]/g, \"\");\r\n return newValue;\r\n };\r\n\r\n const patternMasks: Record<string, string> = {\r\n cpf: \"###.###.###-##\",\r\n cnpj: \"##.###.###/####-##\",\r\n cep: \"#####-###\",\r\n phone: \"(##) #####-####\",\r\n date: \"##/##/####\",\r\n agencia: \"####\",\r\n };\r\n\r\n const renderMaskedInput = (inputType?: string) => {\r\n const autoCompleteValue = rest.autoComplete;\r\n\r\n if (mask === \"currency\") {\r\n const rawCurrencyValue =\r\n typeof field.value === \"string\" || typeof field.value === \"number\"\r\n ? field.value\r\n : \"\";\r\n\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n name={name}\r\n ref={inputRef}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n value={formatCurrencyDigitsForDisplay(rawCurrencyValue)}\r\n onChange={handleCurrencyChange}\r\n onBlur={field.onBlur}\r\n placeholder={placeholder}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n autoComplete={autoCompleteValue}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n\r\n if (mask === \"specialChars\") {\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n {...field}\r\n name={name}\r\n ref={inputRef}\r\n placeholder={placeholder}\r\n type={inputType === \"date\" ? \"text\" : inputType}\r\n value={String(safeValue(field.value))}\r\n onKeyDown={(e) => {\r\n if (disallowSpaces && e.key === \" \") {\r\n e.preventDefault();\r\n }\r\n rest.onKeyDown?.(e);\r\n }}\r\n onPaste={handlePasteFormik}\r\n onChange={(e) => {\r\n const cleanedValue = cleanSpecialChars(e.target.value);\r\n const sanitizedValue = sanitizeValue(cleanedValue);\r\n helpers.setValue(sanitizedValue);\r\n rest.onChange?.(e);\r\n }}\r\n autoComplete={autoCompleteValue}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n\r\n if (mask === \"datePicker\") {\r\n const dateValue = field.value\r\n ? typeof field.value === \"string\"\r\n ? field.value\r\n : field.value instanceof Date\r\n ? field.value.toLocaleDateString(\"pt-BR\")\r\n : String(field.value)\r\n : \"\";\r\n\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n {...field}\r\n name={name}\r\n ref={inputRef}\r\n placeholder={placeholder}\r\n type={inputType}\r\n value={dateValue}\r\n onKeyDown={(e) => {\r\n if (disallowSpaces && e.key === \" \") {\r\n e.preventDefault();\r\n }\r\n rest.onKeyDown?.(e);\r\n }}\r\n onPaste={handlePasteFormik}\r\n onChange={(e) => {\r\n const cleanedValue = cleanSpecialChars(e.target.value);\r\n const sanitizedValue = sanitizeValue(cleanedValue);\r\n helpers.setValue(sanitizedValue);\r\n }}\r\n autoComplete={autoCompleteValue}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n\r\n if (mask === \"conta\") {\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n name={name}\r\n ref={inputRef}\r\n placeholder={placeholder}\r\n maxLength={14}\r\n value={String(safeValue(field.value))}\r\n disabled={disabled}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n onKeyDown={(e) => {\r\n if (disallowSpaces && e.key === \" \") {\r\n e.preventDefault();\r\n }\r\n if (\r\n e.key === \"Backspace\" &&\r\n e.currentTarget.selectionStart === e.currentTarget.selectionEnd &&\r\n e.currentTarget.selectionStart === e.currentTarget.value.length &&\r\n e.currentTarget.value.endsWith(\"-\")\r\n ) {\r\n e.preventDefault();\r\n const nextValue = formatContaValue(\r\n e.currentTarget.value.slice(0, -2),\r\n );\r\n helpers.setValue(nextValue);\r\n return;\r\n }\r\n rest.onKeyDown?.(e);\r\n }}\r\n onPaste={handlePasteFormik}\r\n onChange={(e) => {\r\n const val = sanitizeValue(formatContaValue(e.target.value));\r\n e.target.value = val;\r\n e.currentTarget.value = val;\r\n helpers.setValue(val);\r\n rest.onChange?.(e);\r\n }}\r\n autoComplete={autoCompleteValue}\r\n />\r\n );\r\n }\r\n\r\n if (mask && patternMasks[mask]) {\r\n const patternValue =\r\n typeof field.value === \"string\" || typeof field.value === \"number\"\r\n ? field.value\r\n : \"\";\r\n\r\n return (\r\n <PatternFormat\r\n {...rest}\r\n {...accessibilityProps}\r\n {...field}\r\n name={name}\r\n value={patternValue}\r\n defaultValue=\"\"\r\n getInputRef={inputRef}\r\n customInput={BaseInput}\r\n format={patternMasks[mask]}\r\n allowEmptyFormatting={false}\r\n mask=\"\"\r\n placeholder={placeholder}\r\n onValueChange={handleValueChange}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n autoComplete={autoCompleteValue}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n {...field}\r\n name={name}\r\n ref={inputRef}\r\n placeholder={placeholder}\r\n type={inputType === \"date\" ? \"text\" : inputType}\r\n value={String(safeValue(field.value))}\r\n onKeyDown={(e) => {\r\n if (disallowSpaces && e.key === \" \") {\r\n e.preventDefault();\r\n }\r\n rest.onKeyDown?.(e);\r\n }}\r\n onPaste={handlePasteFormik}\r\n onChange={(e) => {\r\n const sanitizedValue = sanitizeValue(e.target.value);\r\n helpers.setValue(sanitizedValue);\r\n rest.onChange?.(e);\r\n }}\r\n autoComplete={autoCompleteValue}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n disabled={disabled}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <FieldFrame\r\n label={label}\r\n labelFor={inputId}\r\n invalid={Boolean(hasError)}\r\n message={meta.error}\r\n messageId={errorId}\r\n labelAdornment={\r\n helperText ? (\r\n <>\r\n <button\r\n ref={iconRef}\r\n onMouseEnter={() => setHovered(true)}\r\n onMouseLeave={() => setHovered(false)}\r\n onFocus={() => setHovered(true)}\r\n onBlur={() => setHovered(false)}\r\n type=\"button\"\r\n aria-label={`Mais informações sobre ${label ?? name}`}\r\n className=\"rounded-sm pb-[3px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-1\"\r\n >\r\n <MdInfoOutline aria-hidden=\"true\" className=\"mr-0 text-content-muted\" />\r\n </button>\r\n\r\n <Tooltip\r\n targetRef={iconRef}\r\n content={helperText}\r\n visible={hovered}\r\n preferredPosition=\"bottom\"\r\n />\r\n </>\r\n ) : undefined\r\n }\r\n >\r\n <div\r\n data-has-value={String(safeValue(field.value)).length > 0}\r\n className={classNames(\r\n FIELD_CONTROL_CLASS,\r\n {\r\n [FIELD_DISABLED_CLASS]: disabled,\r\n [FIELD_ERROR_CLASS]: hasError,\r\n },\r\n )}\r\n >\r\n {LeadIcon && (\r\n <LeadIcon\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n )}\r\n {prefix && <span>{prefix}</span>}\r\n {renderMaskedInput(currentType)}\r\n {suffix && <span>{suffix}</span>}\r\n\r\n {isPasswordType ? (\r\n <button\r\n type=\"button\"\r\n aria-label={showPassword ? \"Ocultar senha\" : \"Mostrar senha\"}\r\n aria-pressed={showPassword}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"flex items-center justify-center rounded-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-1\"\r\n >\r\n {showPassword ? (\r\n <MdVisibilityOff\r\n aria-hidden=\"true\"\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n ) : (\r\n <MdVisibility\r\n aria-hidden=\"true\"\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n )}\r\n </button>\r\n ) : (\r\n EndIcon && (\r\n <EndIcon\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n )\r\n )}\r\n </div>\r\n </FieldFrame>\r\n );\r\n};\r\n\r\nexport default Input;\r\n\r\n// ==========================\r\n// Input sem Formik (standalone) com máscaras\r\n// ==========================\r\nexport type InputStandaloneProps = {\n label?: string;\r\n helperText?: string | React.ReactNode;\r\n prefix?: string;\r\n suffix?: string;\r\n mask?:\r\n | \"cep\"\r\n | \"conta\"\r\n | \"currency\"\r\n | \"cpf\"\r\n | \"phone\"\r\n | \"date\"\r\n | \"datePicker\"\r\n | \"specialChars\"\r\n | \"cnpj\"\r\n | \"agencia\";\r\n disabled?: boolean;\r\n error?: boolean;\r\n errorText?: string;\r\n disallowSpaces?: boolean;\r\n leadIcon?: React.ComponentType<IconBaseProps>;\r\n endIcon?: React.ComponentType<IconBaseProps>;\r\n} & React.InputHTMLAttributes<HTMLInputElement>;\r\n\r\nexport const InputStandalone: React.FC<InputStandaloneProps> = (props) => {\n const {\r\n label,\r\n helperText,\r\n prefix,\r\n suffix,\r\n mask,\r\n disabled,\r\n error,\r\n errorText,\r\n disallowSpaces,\r\n leadIcon: LeadIcon,\r\n endIcon: EndIcon,\r\n type,\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const iconRef = useRef<HTMLButtonElement>(null);\r\n const [hovered, setHovered] = useState(false);\r\n\r\n const isPasswordType = type === \"password\";\r\n const [showPassword, setShowPassword] = useState(false);\r\n const currentType = isPasswordType\r\n ? showPassword\r\n ? \"text\"\r\n : \"password\"\r\n : type;\r\n\r\n const hasError = Boolean(error);\r\n const generatedInputId = useId();\r\n const inputId = rest.id ?? generatedInputId;\r\n const errorId = `${inputId}-error`;\r\n const ariaDescribedBy = mergeAriaDescribedBy(\r\n rest[\"aria-describedby\"],\r\n hasError && errorText ? errorId : undefined,\r\n );\r\n const accessibilityProps = {\r\n id: inputId,\r\n \"aria-invalid\": hasError || undefined,\r\n \"aria-describedby\": ariaDescribedBy,\r\n };\r\n\r\n const safeValue = (v: unknown) =>\r\n v === undefined || v === null ? \"\" : (v as string | number);\r\n\r\n const sanitizeValue = useCallback(\r\n (value: string) => {\r\n if (!disallowSpaces) return value;\r\n return value.replace(/\\s/g, \"\");\r\n },\r\n [disallowSpaces],\r\n );\r\n\r\n const handlePasteStandalone = useCallback(\r\n (e: React.ClipboardEvent<HTMLInputElement>) => {\r\n if (!disallowSpaces) {\r\n rest.onPaste?.(e);\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n const pastedText = e.clipboardData.getData(\"text\");\r\n const sanitizedValue = sanitizeValue(pastedText);\r\n\r\n const syntheticEvent = {\r\n ...e,\r\n target: {\r\n ...e.target,\r\n value: sanitizedValue,\r\n },\r\n currentTarget: {\r\n ...e.currentTarget,\r\n value: sanitizedValue,\r\n },\r\n } as unknown as React.ChangeEvent<HTMLInputElement>;\r\n\r\n rest.onChange?.(syntheticEvent);\r\n rest.onPaste?.(e);\r\n },\r\n [disallowSpaces, rest, sanitizeValue],\r\n );\r\n\r\n const cleanSpecialChars = (value: string) => {\r\n if (!value) return \"\";\r\n let newValue = value;\r\n newValue = newValue.replace(/[áàãâä]/gi, \"a\");\r\n newValue = newValue.replace(/[éèêë]/gi, \"e\");\r\n newValue = newValue.replace(/[íìîï]/gi, \"i\");\r\n newValue = newValue.replace(/[óòõôö]/gi, \"o\");\r\n newValue = newValue.replace(/[úùûü]/gi, \"u\");\r\n newValue = newValue.replace(/[ç]/gi, \"c\");\r\n newValue = newValue.replace(/['\"`´@!#$%&¨()*;:?\\-_+={}\\[\\]\\\\\\/|<>.,]/g, \"\");\r\n return newValue;\r\n };\r\n\r\n const patternMasks: Record<string, string> = {\r\n cpf: \"###.###.###-##\",\r\n cnpj: \"##.###.###/####-##\",\r\n cep: \"#####-###\",\r\n phone: \"(##) #####-####\",\r\n date: \"##/##/####\",\r\n agencia: \"####\",\r\n };\r\n\r\n const renderMaskedInput = (inputType?: string) => {\r\n const autoCompleteValue = rest.autoComplete;\r\n\r\n if (mask === \"currency\") {\r\n const rawCurrencyValue =\r\n typeof rest.value === \"string\" || typeof rest.value === \"number\"\r\n ? rest.value\r\n : \"\";\r\n\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n ref={inputRef}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n value={formatCurrencyDigitsForDisplay(rawCurrencyValue)}\r\n onChange={(e) => {\r\n if (rest.onChange) {\r\n const formattedCurrencyValue = formatCurrencyDigitsForDisplay(\r\n e.target.value,\r\n );\r\n const event = {\r\n target: { value: formattedCurrencyValue },\r\n currentTarget: { value: formattedCurrencyValue },\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n rest.onChange(event);\r\n }\r\n }}\r\n placeholder={rest.placeholder}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n autoComplete={autoCompleteValue}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n\r\n if (mask === \"specialChars\") {\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n ref={inputRef}\r\n placeholder={rest.placeholder}\r\n type={inputType === \"date\" ? \"text\" : inputType}\r\n value={String(safeValue(rest.value))}\r\n onKeyDown={(e) => {\r\n if (disallowSpaces && e.key === \" \") {\r\n e.preventDefault();\r\n }\r\n rest.onKeyDown?.(e);\r\n }}\r\n onPaste={handlePasteStandalone}\r\n onChange={(e) => {\r\n const cleaned = cleanSpecialChars(e.target.value);\r\n const sanitizedValue = sanitizeValue(cleaned);\r\n e.target.value = sanitizedValue;\r\n rest.onChange?.(e);\r\n }}\r\n autoComplete={autoCompleteValue}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n\r\n if (mask === \"datePicker\") {\r\n const dateValue = rest.value\r\n ? typeof rest.value === \"string\"\r\n ? rest.value\r\n : rest.value instanceof Date\r\n ? rest.value.toLocaleDateString(\"pt-BR\")\r\n : String(rest.value)\r\n : \"\";\r\n\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n ref={inputRef}\r\n placeholder={rest.placeholder}\r\n type={inputType}\r\n value={dateValue}\r\n onKeyDown={(e) => {\r\n if (disallowSpaces && e.key === \" \") {\r\n e.preventDefault();\r\n }\r\n rest.onKeyDown?.(e);\r\n }}\r\n onPaste={handlePasteStandalone}\r\n onChange={(e) => {\r\n const cleaned = cleanSpecialChars(e.target.value);\r\n const sanitizedValue = sanitizeValue(cleaned);\r\n e.target.value = sanitizedValue;\r\n rest.onChange?.(e);\r\n }}\r\n autoComplete={autoCompleteValue}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n\r\n if (mask === \"conta\") {\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n ref={inputRef}\r\n placeholder={rest.placeholder}\r\n maxLength={14}\r\n value={String(safeValue(rest.value))}\r\n disabled={disabled}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n onKeyDown={(e) => {\r\n if (disallowSpaces && e.key === \" \") {\r\n e.preventDefault();\r\n }\r\n if (\r\n e.key === \"Backspace\" &&\r\n e.currentTarget.selectionStart === e.currentTarget.selectionEnd &&\r\n e.currentTarget.selectionStart === e.currentTarget.value.length &&\r\n e.currentTarget.value.endsWith(\"-\")\r\n ) {\r\n e.preventDefault();\r\n const nextValue = formatContaValue(\r\n e.currentTarget.value.slice(0, -2),\r\n );\r\n e.currentTarget.value = nextValue;\r\n if (rest.onChange) {\r\n const event = {\r\n target: { value: nextValue },\r\n currentTarget: { value: nextValue },\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n rest.onChange(event);\r\n }\r\n return;\r\n }\r\n rest.onKeyDown?.(e);\r\n }}\r\n onPaste={handlePasteStandalone}\r\n onChange={(e) => {\r\n const val = sanitizeValue(formatContaValue(e.target.value));\r\n e.target.value = val;\r\n rest.onChange?.(e);\r\n }}\r\n autoComplete={autoCompleteValue}\r\n />\r\n );\r\n }\r\n\r\n if (mask && patternMasks[mask]) {\r\n const patternValue =\r\n typeof rest.value === \"string\" || typeof rest.value === \"number\"\r\n ? rest.value\r\n : \"\";\r\n\r\n return (\r\n <PatternFormat\r\n {...rest}\r\n {...accessibilityProps}\r\n value={patternValue}\r\n defaultValue=\"\"\r\n getInputRef={inputRef}\r\n customInput={BaseInput}\r\n format={patternMasks[mask]}\r\n allowEmptyFormatting={false}\r\n mask=\"\"\r\n placeholder={rest.placeholder}\r\n onValueChange={(values: NumberFormatValues) => {\r\n if (rest.onChange) {\r\n const event = {\r\n target: { value: values.value },\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n rest.onChange(event);\r\n }\r\n }}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n autoComplete={autoCompleteValue}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <input\r\n {...rest}\r\n {...accessibilityProps}\r\n ref={inputRef}\r\n placeholder={rest.placeholder}\r\n type={inputType === \"date\" ? \"text\" : inputType}\r\n value={String(safeValue(rest.value))}\r\n onKeyDown={(e) => {\r\n if (disallowSpaces && e.key === \" \") {\r\n e.preventDefault();\r\n }\r\n rest.onKeyDown?.(e);\r\n }}\r\n onPaste={handlePasteStandalone}\r\n onChange={(e) => {\r\n const sanitizedValue = sanitizeValue(e.target.value);\r\n e.target.value = sanitizedValue;\r\n rest.onChange?.(e);\r\n }}\r\n autoComplete={autoCompleteValue}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n disabled={disabled}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <FieldFrame\r\n label={label}\r\n labelFor={inputId}\r\n invalid={Boolean(hasError)}\r\n message={errorText}\r\n messageId={errorId}\r\n labelAdornment={\r\n helperText ? (\r\n <>\r\n <button\r\n ref={iconRef}\r\n onMouseEnter={() => setHovered(true)}\r\n onMouseLeave={() => setHovered(false)}\r\n onFocus={() => setHovered(true)}\r\n onBlur={() => setHovered(false)}\r\n type=\"button\"\r\n aria-label={`Mais informações sobre ${label ?? rest.name ?? \"este campo\"}`}\r\n className=\"rounded-sm pb-[3px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-1\"\r\n >\r\n <MdInfoOutline aria-hidden=\"true\" className=\"mr-0 text-content-muted\" />\r\n </button>\r\n\r\n <Tooltip\r\n targetRef={iconRef}\r\n content={helperText}\r\n visible={hovered}\r\n preferredPosition=\"bottom\"\r\n />\r\n </>\r\n ) : undefined\r\n }\r\n >\r\n <div\r\n data-has-value={\r\n String(safeValue(rest.value ?? rest.defaultValue)).length > 0\r\n }\r\n className={classNames(\r\n FIELD_CONTROL_CLASS,\r\n {\r\n [FIELD_DISABLED_CLASS]: disabled,\r\n [FIELD_ERROR_CLASS]: hasError,\r\n },\r\n )}\r\n >\r\n {LeadIcon && (\r\n <LeadIcon\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n )}\r\n {prefix && <span>{prefix}</span>}\r\n\r\n {renderMaskedInput(currentType)}\r\n\r\n {suffix && <span>{suffix}</span>}\r\n\r\n {isPasswordType ? (\r\n <button\r\n type=\"button\"\r\n aria-label={showPassword ? \"Ocultar senha\" : \"Mostrar senha\"}\r\n aria-pressed={showPassword}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"flex items-center justify-center rounded-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-1\"\r\n >\r\n {showPassword ? (\r\n <MdVisibilityOff\r\n aria-hidden=\"true\"\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n ) : (\r\n <MdVisibility\r\n aria-hidden=\"true\"\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n )}\r\n </button>\r\n ) : (\r\n EndIcon && (\r\n <EndIcon\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n )\r\n )}\r\n </div>\r\n </FieldFrame>\r\n );\r\n};\r\n","import classNames from \"classnames\";\r\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\r\nimport {\r\n FIELD_DESCRIPTION_CLASS,\r\n FIELD_LABEL_CLASS,\r\n FIELD_MESSAGE_CLASS,\r\n FIELD_ROOT_CLASS,\r\n} from \"./field-styles\";\r\n\r\nexport type FieldFrameProps = Omit<\r\n HTMLAttributes<HTMLDivElement>,\r\n \"children\"\r\n> & {\r\n children: ReactNode;\r\n label?: ReactNode;\r\n labelFor?: string;\r\n labelId?: string;\r\n labelAdornment?: ReactNode;\r\n description?: ReactNode;\r\n descriptionId?: string;\r\n message?: ReactNode;\r\n messageId?: string;\r\n invalid?: boolean;\r\n};\r\n\r\nconst FieldFrame = forwardRef<HTMLDivElement, FieldFrameProps>(\r\n function FieldFrame(\r\n {\r\n children,\r\n label,\r\n labelFor,\r\n labelId,\r\n labelAdornment,\r\n description,\r\n descriptionId,\r\n message,\r\n messageId,\r\n invalid = false,\r\n className,\r\n ...rest\r\n },\r\n ref,\r\n ) {\r\n return (\r\n <div\r\n ref={ref}\r\n className={classNames(FIELD_ROOT_CLASS, className)}\r\n {...rest}\r\n >\r\n {(label || labelAdornment) && (\r\n <div className=\"field-label-slot flex flex-row items-end justify-between\">\r\n {label && (\r\n <label\r\n id={labelId}\r\n htmlFor={labelFor}\r\n className={FIELD_LABEL_CLASS}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n {labelAdornment}\r\n </div>\r\n )}\r\n\r\n {children}\r\n\r\n {description !== undefined && description !== null && !invalid && (\r\n <span id={descriptionId} className={FIELD_DESCRIPTION_CLASS}>\r\n {description}\r\n </span>\r\n )}\r\n\r\n {message !== undefined && message !== null && invalid && (\r\n <span\r\n id={messageId}\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n className={FIELD_MESSAGE_CLASS}\r\n >\r\n {message}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nFieldFrame.displayName = \"FieldFrame\";\r\n\r\nexport default FieldFrame;\r\n","export const FIELD_ROOT_CLASS =\r\n \"field-layout flex w-full min-w-0 flex-col leading-6\";\r\n\r\nexport const FIELD_LABEL_CLASS =\r\n \"field-label-slot px-0.5 text-md tracking-wide text-field-content\";\r\n\r\nexport const FIELD_CONTROL_CLASS =\r\n \"field-control-slot field-keyboard-focus-ring relative mt-4xs mb-[4px] flex min-h-control-md w-full min-w-0 items-center gap-3 rounded-sm border border-field-border-default bg-field-surface px-3 text-field-icon transition-colors focus-within:border-field-border-active focus-within:text-field-content data-[has-value=true]:text-field-content\";\r\n\r\nexport const FIELD_DISABLED_CLASS =\r\n \"cursor-not-allowed border-field-border-default bg-field-surface-disabled text-field-content-disabled focus-within:border-field-border-default\";\r\n\r\nexport const FIELD_ERROR_CLASS =\r\n \"border-field-border-error text-field-assistive-error focus-within:border-field-border-error\";\r\n\r\nexport const FIELD_MESSAGE_CLASS =\r\n \"field-message-slot text-xs tracking-wide text-field-assistive-error\";\r\n\r\nexport const FIELD_DESCRIPTION_CLASS =\r\n \"field-message-slot text-xs tracking-wide text-field-assistive\";\r\n\r\nexport const FIELD_INPUT_CLASS =\r\n \"w-full border-none bg-transparent text-field-content outline-none placeholder:text-field-placeholder focus:outline-none disabled:text-field-content-disabled disabled:placeholder:text-field-content-disabled\";\r\n\r\n","\"use client\";\r\nimport classNames from \"classnames\";\r\nimport { useField } from \"formik\";\r\nimport React, { useCallback, useEffect, useId, useRef, useState } from \"react\";\r\nimport { IconBaseProps } from \"react-icons\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { calculateFloatingPanelRect } from \"../../utils/floating-panel-position\";\nimport { getFloatingLayerClass } from \"../../utils/floating-layer\";\nimport {\r\n MdInfoOutline,\r\n MdOutlineKeyboardArrowDown,\r\n MdOutlineKeyboardArrowUp,\r\n MdSearch,\r\n} from \"react-icons/md\";\r\nimport Tooltip from \"../tooltip/Tooltip\";\r\nimport FieldFrame from \"../field/FieldFrame\";\r\nimport {\r\n FIELD_CONTROL_CLASS,\r\n FIELD_DISABLED_CLASS,\r\n FIELD_ERROR_CLASS,\r\n} from \"../field/field-styles\";\r\n\r\nexport type InputSelectOption = {\r\n label: string;\r\n value: string;\r\n};\r\n\r\nexport type InputSelectProps = {\n name: string;\r\n label?: string;\r\n helperText?: string | React.ReactNode;\r\n placeholder?: string;\r\n defaultValue?: InputSelectOption;\r\n options: InputSelectOption[];\r\n prefix?: string;\r\n suffix?: string;\r\n disabled?: boolean;\r\n error?: boolean;\r\n leadIcon?: React.ComponentType<IconBaseProps>;\r\n endIcon?: React.ComponentType<IconBaseProps>;\r\n searchable?: boolean;\r\n searchPlaceholder?: string;\r\n noOptionsText?: string;\r\n renderOption?: (option: InputSelectOption) => React.ReactNode;\r\n renderValue?: (\r\n option: InputSelectOption | null,\r\n placeholder?: string,\r\n ) => React.ReactNode;\r\n searchAccessor?: (option: InputSelectOption) => string;\r\n onChange?: (event: React.ChangeEvent<HTMLSelectElement>) => void;\r\n} & Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">;\r\n\r\nconst InputSelect: React.FC<InputSelectProps> = ({\r\n name,\r\n label,\r\n helperText,\r\n placeholder,\r\n defaultValue,\r\n options,\r\n prefix,\r\n suffix,\r\n disabled,\r\n error,\r\n leadIcon: LeadIcon,\r\n endIcon: EndIcon,\r\n searchable,\r\n searchPlaceholder = \"Pesquisar...\",\r\n noOptionsText = \"Nenhuma opção encontrada\",\r\n renderOption,\r\n renderValue,\r\n searchAccessor,\r\n className,\r\n onChange,\r\n ...rest\r\n}) => {\r\n const isSearchable = searchable ?? options.length > 10;\r\n\r\n const normalizeSearchText = (value: string) =>\r\n value\r\n .normalize(\"NFD\")\r\n .replace(/[\\u0300-\\u036f]/g, \"\")\r\n .toLowerCase();\r\n\r\n const [field, meta, helpers] = useField(name!);\r\n const inputRef = useRef<HTMLButtonElement>(null);\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n const iconRef = useRef<HTMLButtonElement>(null);\r\n const searchInputRef = useRef<HTMLInputElement>(null);\r\n const [hovered, setHovered] = useState(false);\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [selectionAnnouncement, setSelectionAnnouncement] = useState(\"\");\r\n const [isMounted, setIsMounted] = useState(false);\r\n const rafRef = useRef<number | null>(null);\r\n const selectId = useId();\r\n const labelId = `${selectId}-label`;\r\n const listboxId = `${selectId}-listbox`;\r\n const resultsId = `${selectId}-results`;\r\n const valueDescriptionId = `${selectId}-value-description`;\r\n\r\n useEffect(() => {\r\n setIsMounted(true);\r\n }, []);\r\n\r\n const updateDropdownPosition = useCallback(() => {\r\n if (open && inputRef.current) {\r\n const rect = inputRef.current.getBoundingClientRect();\r\n const dropdown = dropdownRef.current;\r\n\r\n if (!dropdown) return;\r\n\r\n const panelRect = calculateFloatingPanelRect({\r\n trigger: rect,\r\n panel: {\r\n width: rect.width,\r\n height: Math.min(dropdown.scrollHeight || 240, 240),\r\n },\r\n viewport: {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n },\r\n });\r\n\r\n dropdown.style.top = `${panelRect.top}px`;\r\n dropdown.style.left = `${panelRect.left}px`;\r\n dropdown.style.width = `${panelRect.width}px`;\r\n dropdown.style.maxHeight = `${panelRect.maxHeight}px`;\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n if (isSearchable) {\r\n searchInputRef.current?.focus({ preventScroll: true });\r\n return;\r\n }\r\n\r\n const selectedOptionElement =\r\n dropdownRef.current?.querySelector<HTMLElement>(\r\n '[role=\"option\"][aria-selected=\"true\"]',\r\n );\r\n const firstOptionElement =\r\n dropdownRef.current?.querySelector<HTMLElement>('[role=\"option\"]');\r\n\r\n (selectedOptionElement ?? firstOptionElement)?.focus({\r\n preventScroll: true,\r\n });\r\n }, [isSearchable, open]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n setSearchTerm(\"\");\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n updateDropdownPosition();\r\n }\r\n }, [open, updateDropdownPosition]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n const scheduleDropdownPosition = () => {\r\n if (rafRef.current != null) return;\r\n\r\n rafRef.current = window.requestAnimationFrame(() => {\r\n rafRef.current = null;\r\n updateDropdownPosition();\r\n });\r\n };\r\n\r\n window.addEventListener(\"scroll\", scheduleDropdownPosition, true);\r\n window.addEventListener(\"resize\", scheduleDropdownPosition);\r\n\r\n return () => {\r\n if (rafRef.current != null) {\r\n window.cancelAnimationFrame(rafRef.current);\r\n rafRef.current = null;\r\n }\r\n window.removeEventListener(\"scroll\", scheduleDropdownPosition, true);\r\n window.removeEventListener(\"resize\", scheduleDropdownPosition);\r\n };\r\n }, [open, updateDropdownPosition]);\r\n\r\n const selectedOption =\r\n options.find((o) => o.value === (field.value || defaultValue?.value)) ||\r\n null;\r\n\r\n const closeDropdown = useCallback((restoreFocus = false) => {\r\n setOpen(false);\r\n\r\n if (restoreFocus) {\r\n inputRef.current?.focus({ preventScroll: true });\r\n }\r\n }, []);\r\n\r\n const moveFocusFromTrigger = useCallback((backward: boolean) => {\r\n const trigger = inputRef.current;\r\n if (!trigger) return;\r\n\r\n const focusableElements = Array.from(\r\n document.querySelectorAll<HTMLElement>(\r\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\r\n ),\r\n ).filter(\r\n (element) =>\r\n !dropdownRef.current?.contains(element) &&\r\n element.getAttribute(\"aria-hidden\") !== \"true\" &&\r\n element.getClientRects().length > 0,\r\n );\r\n const triggerIndex = focusableElements.indexOf(trigger);\r\n const targetIndex = triggerIndex + (backward ? -1 : 1);\r\n\r\n focusableElements[targetIndex]?.focus({ preventScroll: true });\r\n }, []);\r\n\r\n const handleSelect = (value: string) => {\r\n const option = options.find((candidate) => candidate.value === value);\r\n\r\n helpers.setValue(value);\r\n helpers.setTouched(true);\r\n setSelectionAnnouncement(\r\n option ? `Selecionado: ${option.label}` : \"Seleção atualizada\",\r\n );\r\n\r\n if (onChange) {\r\n const syntheticEvent = {\r\n target: { value, name },\r\n currentTarget: { value, name },\r\n } as React.ChangeEvent<HTMLSelectElement>;\r\n onChange(syntheticEvent);\r\n }\r\n\r\n closeDropdown(true);\r\n };\r\n\r\n const handleBlur = useCallback(() => {\r\n helpers.setTouched(true);\r\n }, [helpers]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\r\n inputRef.current &&\r\n !inputRef.current.contains(event.target as Node) &&\r\n (!dropdownRef.current ||\r\n !dropdownRef.current.contains(event.target as Node))\r\n ) {\r\n handleBlur();\r\n closeDropdown();\r\n }\r\n };\r\n\r\n if (open) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [closeDropdown, handleBlur, open]);\r\n\r\n const hasError = meta.touched && meta.error;\r\n const errorId = `${selectId}-error`;\r\n const normalizedSearch = normalizeSearchText(searchTerm.trim());\r\n const filteredOptions = isSearchable\r\n ? options.filter((option) => {\r\n const label = normalizeSearchText(String(option.label || \"\"));\r\n const value = normalizeSearchText(String(option.value || \"\"));\r\n const extraSearch = normalizeSearchText(\r\n String(searchAccessor?.(option) || \"\"),\r\n );\r\n return (\r\n label.includes(normalizedSearch) ||\r\n value.includes(normalizedSearch) ||\r\n extraSearch.includes(normalizedSearch)\r\n );\r\n })\r\n : options;\r\n const resultAnnouncement =\r\n filteredOptions.length === 0\r\n ? noOptionsText\r\n : normalizedSearch\r\n ? filteredOptions.length === 1\r\n ? \"1 resultado encontrado\"\r\n : `${filteredOptions.length} resultados encontrados`\r\n : filteredOptions.length === 1\r\n ? \"1 opção disponível\"\r\n : `${filteredOptions.length} opções disponíveis`;\r\n const selectedValueDescription = selectedOption\r\n ? `Selecionado: ${selectedOption.label}`\r\n : placeholder\r\n ? `Nenhuma opção selecionada. ${placeholder}`\r\n : \"Nenhuma opção selecionada\";\r\n const triggerDescribedBy = [\r\n valueDescriptionId,\r\n hasError ? errorId : undefined,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const focusOption = (position: \"first\" | \"last\") => {\r\n const optionElements = Array.from(\r\n dropdownRef.current?.querySelectorAll<HTMLButtonElement>(\r\n '[role=\"option\"]',\r\n ) ?? [],\r\n );\r\n const option =\r\n position === \"first\"\r\n ? optionElements[0]\r\n : optionElements[optionElements.length - 1];\r\n\r\n option?.focus({ preventScroll: true });\r\n };\r\n\r\n const handleOptionKeyDown = (\r\n event: React.KeyboardEvent<HTMLButtonElement>,\r\n ) => {\r\n const optionElements = Array.from(\r\n dropdownRef.current?.querySelectorAll<HTMLButtonElement>(\r\n '[role=\"option\"]',\r\n ) ?? [],\r\n );\r\n const currentIndex = optionElements.indexOf(event.currentTarget);\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closeDropdown(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Tab\") {\r\n event.preventDefault();\r\n closeDropdown();\r\n handleBlur();\r\n moveFocusFromTrigger(event.shiftKey);\r\n return;\r\n }\r\n\r\n if (\r\n event.key !== \"ArrowDown\" &&\r\n event.key !== \"ArrowUp\" &&\r\n event.key !== \"Home\" &&\r\n event.key !== \"End\"\r\n ) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n if (event.key === \"Home\") {\r\n optionElements[0]?.focus({ preventScroll: true });\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n optionElements[optionElements.length - 1]?.focus({\r\n preventScroll: true,\r\n });\r\n return;\r\n }\r\n\r\n const direction = event.key === \"ArrowDown\" ? 1 : -1;\r\n const nextIndex =\r\n (currentIndex + direction + optionElements.length) %\r\n optionElements.length;\r\n optionElements[nextIndex]?.focus({ preventScroll: true });\r\n };\r\n\r\n const selectedValueContent = renderValue ? (\r\n renderValue(selectedOption, placeholder)\r\n ) : (\r\n <span\r\n className={classNames(\"block w-full truncate overflow-hidden\", {\r\n \"text-field-placeholder\": !selectedOption && placeholder,\r\n })}\r\n >\r\n {selectedOption ? selectedOption.label : placeholder}\r\n </span>\r\n );\r\n\r\n const dropdownContent =\r\n open && !disabled ? (\r\n <div\r\n ref={dropdownRef}\r\n className={`fixed ${getFloatingLayerClass(inputRef.current, \"popover\")} overflow-y-auto overflow-x-hidden overscroll-contain rounded-sm border border-field-border-default bg-field-surface text-field-content shadow-lg`}\n >\r\n {isSearchable && (\r\n <div className=\"sticky top-0 flex items-center gap-2 border-b border-field-border-default bg-field-surface p-2\">\r\n <MdSearch aria-hidden=\"true\" className=\"h-4 w-4 text-field-icon\" />\r\n <input\r\n ref={searchInputRef}\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n onMouseDown={(e) => e.stopPropagation()}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Tab\") {\r\n event.preventDefault();\r\n closeDropdown();\r\n handleBlur();\r\n moveFocusFromTrigger(event.shiftKey);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closeDropdown(true);\r\n }\r\n\r\n if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n focusOption(\"first\");\r\n }\r\n\r\n if (event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n focusOption(\"last\");\r\n }\r\n }}\r\n aria-label={`Pesquisar opções de ${label ?? name}`}\r\n aria-controls={listboxId}\r\n aria-describedby={resultsId}\r\n placeholder={searchPlaceholder}\r\n className=\"w-full bg-transparent text-sm text-field-content outline-none placeholder:text-field-placeholder\"\r\n />\r\n </div>\r\n )}\r\n {isSearchable && (\r\n <span\r\n id={resultsId}\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n className=\"sr-only\"\r\n >\r\n {resultAnnouncement}\r\n </span>\r\n )}\r\n <div\r\n id={listboxId}\r\n role=\"listbox\"\r\n aria-labelledby={label ? labelId : undefined}\r\n >\r\n {filteredOptions.length === 0 ? (\r\n <div className=\"px-3 py-2 text-sm text-content-muted\">\r\n {noOptionsText}\r\n </div>\r\n ) : (\r\n filteredOptions.map((opc) => (\r\n <button\r\n key={opc.value}\r\n type=\"button\"\r\n role=\"option\"\r\n aria-selected={selectedOption?.value === opc.value}\r\n tabIndex={-1}\r\n onMouseDown={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }}\r\n onClick={() => handleSelect(opc.value)}\r\n onKeyDown={handleOptionKeyDown}\r\n className=\"w-full px-3 py-2 text-left text-sm hover:bg-surface-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-focus-ring\"\r\n >\r\n {renderOption ? renderOption(opc) : opc.label}\r\n </button>\r\n ))\r\n )}\r\n </div>\r\n </div>\r\n ) : null;\r\n\r\n return (\r\n <FieldFrame\r\n className={className}\r\n label={label}\r\n labelFor={selectId}\r\n labelId={label ? labelId : undefined}\r\n invalid={Boolean(hasError)}\r\n message={meta.error}\r\n messageId={errorId}\r\n labelAdornment={\r\n helperText ? (\r\n <>\r\n <button\r\n ref={iconRef}\r\n onMouseEnter={() => setHovered(true)}\r\n onMouseLeave={() => setHovered(false)}\r\n onFocus={() => setHovered(true)}\r\n onBlur={() => setHovered(false)}\r\n type=\"button\"\r\n aria-label={`Mais informações sobre ${label ?? name}`}\r\n className=\"rounded-sm pb-[3px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-1\"\r\n >\r\n <MdInfoOutline\r\n aria-hidden=\"true\"\r\n className=\"mr-0 text-content-muted\"\r\n />\r\n </button>\r\n\r\n <Tooltip\r\n targetRef={iconRef}\r\n content={helperText}\r\n visible={hovered}\r\n preferredPosition=\"bottom\"\r\n />\r\n </>\r\n ) : undefined\r\n }\r\n {...rest}\r\n >\r\n <button\r\n type=\"button\"\r\n id={selectId}\r\n name={name}\r\n ref={inputRef}\r\n data-has-value={Boolean(selectedOption)}\r\n role=\"combobox\"\r\n aria-controls={listboxId}\r\n aria-expanded={open}\r\n aria-haspopup=\"listbox\"\r\n aria-labelledby={label ? labelId : undefined}\r\n aria-label={label ? undefined : (placeholder ?? name)}\r\n aria-invalid={Boolean(hasError) || undefined}\r\n aria-describedby={triggerDescribedBy}\r\n disabled={disabled}\r\n onBlur={() => !open && handleBlur()}\r\n onClick={() => setOpen((prev) => !prev)}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen((prev) => !prev);\r\n }\r\n\r\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n setOpen(true);\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n closeDropdown();\r\n }\r\n }}\r\n className={classNames(`${FIELD_CONTROL_CLASS} px-2`, {\r\n [FIELD_DISABLED_CLASS]: disabled,\r\n [FIELD_ERROR_CLASS]: hasError,\r\n \"cursor-pointer\": !disabled,\r\n })}\r\n >\r\n {LeadIcon && (\r\n <LeadIcon\r\n aria-hidden=\"true\"\r\n className={classNames(`h-5 w-5`, {\r\n \"text-field-assistive-error\": hasError,\r\n \"text-field-content\": !hasError && (open || selectedOption),\r\n \"text-field-content-disabled\": disabled,\r\n \"cursor-not-allowed\": disabled,\r\n \"cursor-pointer\": !disabled,\r\n })}\r\n />\r\n )}\r\n {prefix && <span>{prefix}</span>}\r\n\r\n <span\r\n className={classNames(\r\n \"flex-1 min-w-0 flex items-center justify-between leading-5\",\r\n \"bg-transparent text-field-content text-left\",\r\n {\r\n \"text-field-content-disabled\": disabled,\r\n \"cursor-not-allowed\": disabled,\r\n \"cursor-pointer\": !disabled,\r\n },\r\n )}\r\n >\r\n {selectedValueContent}\r\n </span>\r\n\r\n {EndIcon ? (\r\n <EndIcon\r\n aria-hidden=\"true\"\r\n className={classNames(`h-5 w-5`, {\r\n \"text-field-assistive-error\": hasError,\r\n \"text-field-content\": !hasError && (open || selectedOption),\r\n \"text-field-content-disabled\": disabled,\r\n \"cursor-not-allowed\": disabled,\r\n \"cursor-pointer\": !disabled,\r\n })}\r\n />\r\n ) : (\r\n <span\r\n className={classNames(\r\n \"flex items-center justify-center text-field-icon\",\r\n {\r\n \"text-field-assistive-error\": hasError,\r\n \"text-field-content\": !hasError && (open || selectedOption),\r\n \"text-field-content-disabled\": disabled,\r\n \"cursor-not-allowed\": disabled,\r\n \"cursor-pointer\": !disabled,\r\n },\r\n )}\r\n >\r\n {open ? (\r\n <MdOutlineKeyboardArrowUp\r\n aria-hidden=\"true\"\r\n className=\"h-5 w-5\"\r\n />\r\n ) : (\r\n <MdOutlineKeyboardArrowDown\r\n aria-hidden=\"true\"\r\n className=\"h-5 w-5\"\r\n />\r\n )}\r\n </span>\r\n )}\r\n </button>\r\n <span id={valueDescriptionId} className=\"sr-only\">\r\n {selectedValueDescription}\r\n </span>\r\n <span\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n className=\"sr-only\"\r\n >\r\n {selectionAnnouncement}\r\n </span>\r\n {isMounted && dropdownContent\r\n ? createPortal(dropdownContent, document.body)\r\n : null}\r\n </FieldFrame>\r\n );\r\n};\r\n\r\nexport default InputSelect;\r\n","export type FloatingPanelPlacement = \"top\" | \"bottom\" | \"viewport\";\r\n\r\ntype TriggerRect = {\r\n top: number;\r\n bottom: number;\r\n left: number;\r\n width: number;\r\n};\r\n\r\ntype PanelSize = {\r\n width: number;\r\n height: number;\r\n};\r\n\r\ntype ViewportSize = {\r\n width: number;\r\n height: number;\r\n};\r\n\r\ntype FloatingPanelPositionParams = {\r\n trigger: TriggerRect;\r\n panel: PanelSize;\r\n viewport: ViewportSize;\r\n gap?: number;\r\n margin?: number;\r\n};\r\n\r\nexport type FloatingPanelRect = {\r\n top: number;\r\n left: number;\r\n width: number;\r\n maxHeight: number;\r\n placement: FloatingPanelPlacement;\r\n};\r\n\r\nfunction clamp(value: number, minimum: number, maximum: number) {\r\n return Math.min(Math.max(value, minimum), Math.max(minimum, maximum));\r\n}\r\n\r\nexport function calculateFloatingPanelRect({\r\n trigger,\r\n panel,\r\n viewport,\r\n gap = 4,\r\n margin = 8,\r\n}: FloatingPanelPositionParams): FloatingPanelRect {\r\n const viewportWidth = Math.max(0, viewport.width - margin * 2);\r\n const viewportHeight = Math.max(0, viewport.height - margin * 2);\r\n const width = Math.min(Math.max(0, panel.width), viewportWidth);\r\n const desiredHeight = Math.min(Math.max(0, panel.height), viewportHeight);\r\n const spaceBelow = Math.max(\r\n 0,\r\n viewport.height - trigger.bottom - gap - margin,\r\n );\r\n const spaceAbove = Math.max(0, trigger.top - gap - margin);\r\n\r\n let top = margin;\r\n let placement: FloatingPanelPlacement = \"viewport\";\r\n\r\n if (spaceBelow >= desiredHeight) {\r\n top = trigger.bottom + gap;\r\n placement = \"bottom\";\r\n } else if (spaceAbove >= desiredHeight) {\r\n top = trigger.top - desiredHeight - gap;\r\n placement = \"top\";\r\n }\r\n\r\n return {\r\n top,\r\n left: clamp(trigger.left, margin, viewport.width - width - margin),\r\n width,\r\n maxHeight: desiredHeight,\r\n placement,\r\n };\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useRef } from \"react\";\nimport classNames from \"classnames\";\nimport { IconBaseProps } from \"react-icons\";\nimport { useField } from \"formik\";\nimport { mergeAriaDescribedBy } from \"../../utils/accessibility\";\nimport FieldFrame from \"../field/FieldFrame\";\r\nimport {\r\n FIELD_CONTROL_CLASS,\r\n FIELD_DISABLED_CLASS,\r\n FIELD_ERROR_CLASS,\r\n FIELD_INPUT_CLASS,\r\n} from \"../field/field-styles\";\r\n\r\nexport type TextAreaProps = {\r\n name: string;\r\n label?: string;\r\n helperText?: string;\r\n placeholder?: string;\r\n prefix?: string;\r\n suffix?: string;\r\n disabled?: boolean;\r\n icon?: React.ComponentType<IconBaseProps>;\r\n} & React.TextareaHTMLAttributes<HTMLTextAreaElement>;\r\n\r\nconst TextArea: React.FC<TextAreaProps> = ({\r\n name,\r\n label,\r\n helperText,\r\n className,\r\n placeholder,\r\n prefix,\r\n suffix,\r\n disabled,\r\n icon: Icon,\r\n ...rest\r\n}) => {\r\n const [field, meta] = useField(name);\r\n const componentRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n const hasError = meta.touched && meta.error;\n const errorId = `${name}-error`;\n const descriptionId = `${name}-description`;\n const ariaDescribedBy = mergeAriaDescribedBy(\n rest[\"aria-describedby\"],\n helperText && !hasError ? descriptionId : undefined,\n hasError ? errorId : undefined,\n );\n\r\n return (\r\n <FieldFrame\r\n label={label}\r\n labelFor={name}\n description={helperText}\n descriptionId={descriptionId}\n message={meta.error}\r\n messageId={errorId}\r\n invalid={Boolean(hasError)}\r\n >\r\n <div\r\n data-has-value={String(field.value ?? \"\").length > 0}\r\n className={classNames(\r\n `${FIELD_CONTROL_CLASS} py-1`,\r\n {\r\n [FIELD_DISABLED_CLASS]: disabled,\r\n [FIELD_ERROR_CLASS]: hasError,\r\n },\r\n )}\r\n >\r\n {Icon && <Icon aria-hidden=\"true\" className=\"h-5 w-5\" />}\n {prefix && <span>{prefix}</span>}\r\n <textarea\r\n {...field}\r\n {...rest}\r\n id={name}\n aria-invalid={Boolean(hasError) || undefined}\n aria-describedby={ariaDescribedBy}\n ref={componentRef}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n className={classNames(FIELD_INPUT_CLASS, className)}\r\n />\r\n {suffix && <span>{suffix}</span>}\r\n </div>\r\n\r\n </FieldFrame>\r\n );\r\n};\r\n\r\nexport default TextArea;\r\n","\"use client\";\n\r\nimport classNames from \"classnames\";\r\nimport FieldFrame from \"../field/FieldFrame\";\r\nimport {\r\n FIELD_DISABLED_CLASS,\r\n FIELD_ERROR_CLASS,\r\n FIELD_INPUT_CLASS,\r\n} from \"../field/field-styles\";\r\nimport { useField } from \"formik\";\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport {\r\n MdOutlineKeyboardArrowDown,\r\n MdOutlineKeyboardArrowUp,\r\n MdSearch,\r\n} from \"react-icons/md\";\r\nimport { PatternFormat } from \"react-number-format\";\nimport { createPortal } from \"react-dom\";\nimport { calculateFloatingPanelRect } from \"../../utils/floating-panel-position\";\nimport { getFloatingLayerClass } from \"../../utils/floating-layer\";\nimport {\n filterCountryOptions,\n getCountryFlagUrl,\n PHONE_COUNTRY_OPTIONS,\n type CountryListFilter,\n} from \"../../countries\";\n\r\nexport type PhoneCountryOption = {\r\n label: string;\r\n value: string;\r\n cca2: string;\r\n idd: {\r\n root: string;\r\n suffixes: string[];\r\n display: string;\r\n };\r\n flags?: {\r\n png?: string;\r\n svg?: string;\r\n alt?: string;\r\n };\r\n};\r\n\r\nexport type PhoneValue = {\r\n ddi: number;\r\n ddd: string;\r\n numero: string;\r\n};\r\n\r\ntype RawPhonePayload =\r\n | string\r\n | number\r\n | null\r\n | undefined\r\n | {\r\n ddi?: string | number | null;\r\n ddd?: string | number | null;\r\n numero?: string | number | null;\r\n };\r\n\r\nexport type InputPhoneProps = {\n name: string;\r\n label?: string;\r\n placeholder?: string;\r\n /** Lista base customizada. Quando omitida, usa todos os paises do pacote. */\n countries?: PhoneCountryOption[];\n /** Use `all` (padrao), `include` ou `exclude` com codigos ISO-2. */\n countryList?: CountryListFilter;\n disabled?: boolean;\r\n className?: string;\r\n};\r\n\r\nconst DEFAULT_BRAZIL_DDI = 55;\r\nconst DEFAULT_BRAZIL_CCA2 = \"BR\";\r\nconst phoneMasksByDdi: Record<string, string | null> = {\r\n \"1\": \"(###) ###-####\",\r\n \"31\": \"## ########\",\r\n \"32\": \"### ## ## ##\",\r\n \"44\": \"#### ######\",\r\n \"49\": null,\r\n \"51\": \"### ### ###\",\r\n \"55\": \"(##) #####-####\",\r\n \"58\": \"### #######\",\r\n \"351\": \"### ### ###\",\r\n};\r\n\r\nfunction normalizeDigits(value: string | number | null | undefined) {\r\n return String(value ?? \"\").replace(/\\D/g, \"\");\r\n}\r\n\r\nfunction normalizeSearchText(value: string) {\r\n return value\r\n .normalize(\"NFD\")\r\n .replace(/[\\u0300-\\u036f]/g, \"\")\r\n .toLowerCase();\r\n}\r\n\r\nfunction toPhoneValue(value?: Partial<PhoneValue> | null): PhoneValue {\r\n return {\r\n ddi: Number(normalizeDigits(value?.ddi) || DEFAULT_BRAZIL_DDI),\r\n ddd: normalizeDigits(value?.ddd),\r\n numero: normalizeDigits(value?.numero),\r\n };\r\n}\r\n\r\nfunction getMaskForDdi(ddi: number) {\r\n return phoneMasksByDdi[normalizeDigits(ddi)] ?? null;\r\n}\r\n\r\nfunction getAreaCodeLength(mask: string | null) {\r\n if (!mask) return 0;\r\n\r\n const match = mask.match(/\\((#+)\\)/);\r\n return match ? match[1].length : 0;\r\n}\r\n\r\nfunction splitNationalNumber(localNumber: string, mask: string | null) {\r\n const digits = normalizeDigits(localNumber);\r\n const areaCodeLength = getAreaCodeLength(mask);\r\n\r\n if (!areaCodeLength) {\r\n return {\r\n ddd: \"\",\r\n numero: digits,\r\n };\r\n }\r\n\r\n return {\r\n ddd: digits.slice(0, areaCodeLength),\r\n numero: digits.slice(areaCodeLength),\r\n };\r\n}\r\n\r\nfunction getDialDigits(country?: PhoneCountryOption | null) {\r\n return normalizeDigits(country?.idd?.display);\r\n}\r\n\r\nfunction getCountryByDdi(countries: PhoneCountryOption[], ddi: number) {\r\n const normalizedDdi = Number(normalizeDigits(ddi));\r\n\r\n return (\r\n countries.find(\r\n (country) => Number(getDialDigits(country)) === normalizedDdi,\r\n ) ||\r\n countries.find((country) => country.cca2 === DEFAULT_BRAZIL_CCA2) ||\r\n countries[0] ||\r\n null\r\n );\r\n}\r\n\r\nfunction getCountriesByDialLength(countries: PhoneCountryOption[]) {\r\n return [...countries].sort((a, b) => {\r\n return getDialDigits(b).length - getDialDigits(a).length;\r\n });\r\n}\r\n\r\nfunction getExplicitCountryFromRawValue(\r\n rawValue: RawPhonePayload,\r\n countries: PhoneCountryOption[],\r\n) {\r\n if (typeof rawValue !== \"string\") return null;\r\n\r\n const trimmedValue = rawValue.trim();\r\n if (!trimmedValue || !/[^\\d]/.test(trimmedValue)) return null;\r\n\r\n return (\r\n getCountriesByDialLength(countries).find((country) => {\r\n const dialDigits = getDialDigits(country);\r\n if (!dialDigits) return false;\r\n\r\n const dialPattern = new RegExp(`^\\\\+?\\\\s*${dialDigits}(?=\\\\D|$)`);\r\n return dialPattern.test(trimmedValue);\r\n }) || null\r\n );\r\n}\r\n\r\nfunction parseStoredPhoneValue(\r\n rawValue: RawPhonePayload,\r\n countries: PhoneCountryOption[],\r\n): PhoneValue {\r\n if (rawValue && typeof rawValue === \"object\" && !Array.isArray(rawValue)) {\r\n return {\r\n ddi: Number(normalizeDigits(rawValue.ddi) || DEFAULT_BRAZIL_DDI),\r\n ddd: normalizeDigits(rawValue.ddd),\r\n numero: normalizeDigits(rawValue.numero),\r\n };\r\n }\r\n\r\n const digits = normalizeDigits(\r\n rawValue as string | number | null | undefined,\r\n );\r\n\r\n if (!digits) {\r\n return {\r\n ddi: DEFAULT_BRAZIL_DDI,\r\n ddd: \"\",\r\n numero: \"\",\r\n };\r\n }\r\n\r\n const explicitCountry = getExplicitCountryFromRawValue(rawValue, countries);\r\n if (explicitCountry) {\r\n const dialDigits = getDialDigits(explicitCountry);\r\n const localDigits = digits.slice(dialDigits.length);\r\n const local = splitNationalNumber(\r\n localDigits,\r\n getMaskForDdi(Number(dialDigits)),\r\n );\r\n\r\n return {\r\n ddi: Number(dialDigits),\r\n ...local,\r\n };\r\n }\r\n\r\n if (digits.length <= 11) {\r\n const local = splitNationalNumber(\r\n digits,\r\n getMaskForDdi(DEFAULT_BRAZIL_DDI),\r\n );\r\n return {\r\n ddi: DEFAULT_BRAZIL_DDI,\r\n ...local,\r\n };\r\n }\r\n\r\n const optionsByDialLength = getCountriesByDialLength(countries);\r\n\r\n const matchedCountry = optionsByDialLength.find((country) => {\r\n const dialDigits = getDialDigits(country);\r\n return (\r\n dialDigits &&\r\n digits.startsWith(dialDigits) &&\r\n digits.length > dialDigits.length + 4\r\n );\r\n });\r\n\r\n if (!matchedCountry) {\r\n const local = splitNationalNumber(\r\n digits,\r\n getMaskForDdi(DEFAULT_BRAZIL_DDI),\r\n );\r\n return {\r\n ddi: DEFAULT_BRAZIL_DDI,\r\n ...local,\r\n };\r\n }\r\n\r\n const dialDigits = getDialDigits(matchedCountry);\r\n const localDigits = digits.slice(dialDigits.length);\r\n const local = splitNationalNumber(\r\n localDigits,\r\n getMaskForDdi(Number(dialDigits)),\r\n );\r\n\r\n return {\r\n ddi: Number(dialDigits),\r\n ...local,\r\n };\r\n}\r\n\r\nexport function buildPhonePayload(\r\n phoneValue: PhoneValue | Partial<PhoneValue> | null | undefined,\r\n) {\r\n const normalized = toPhoneValue(phoneValue);\r\n const ddiDigits = normalizeDigits(normalized.ddi);\r\n const dddDigits = normalizeDigits(normalized.ddd);\r\n const numberDigits = normalizeDigits(normalized.numero);\r\n const phoneDigits = `${dddDigits}${numberDigits}`;\r\n\r\n if (!phoneDigits) {\r\n return \"\";\r\n }\r\n\r\n // return `${ddiDigits}${phoneDigits}`;\r\n return `${ddiDigits}-${dddDigits}-${numberDigits}`;\r\n}\r\n\r\nexport function parsePhonePayload(\n rawValue: RawPhonePayload,\n countries: PhoneCountryOption[] = PHONE_COUNTRY_OPTIONS,\n) {\n return parseStoredPhoneValue(rawValue, countries);\r\n}\r\n\r\nfunction renderFlag(option: PhoneCountryOption | null) {\n const svgSrc = String(\n getCountryFlagUrl(option?.cca2) || option?.flags?.svg || \"\",\n ).trim();\n\r\n if (!svgSrc) {\r\n return <span className=\"h-5 w-7 shrink-0 rounded-sm bg-surface-muted\" />;\r\n }\r\n\r\n return (\r\n <img\r\n src={svgSrc}\r\n alt=\"\"\r\n aria-hidden=\"true\"\r\n className=\"h-5 w-7 shrink-0 object-contain\"\r\n loading=\"lazy\"\r\n referrerPolicy=\"no-referrer\"\r\n />\r\n );\r\n}\r\n\r\nexport function InputPhone({\n name,\r\n label,\r\n placeholder,\n countries,\n countryList,\n disabled,\r\n className,\r\n}: InputPhoneProps) {\n const availableCountries = useMemo(\n () =>\n filterCountryOptions(\n countries || PHONE_COUNTRY_OPTIONS,\n countryList,\n ) as PhoneCountryOption[],\n [countries, countryList],\n );\n const [field, meta, helpers] = useField<PhoneValue>(name);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const countryButtonRef = useRef<HTMLButtonElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const initializedRef = useRef(false);\r\n const [open, setOpen] = useState(false);\n const [selectedCountryCode, setSelectedCountryCode] = useState<string>();\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [dropdownPosition, setDropdownPosition] = useState<{\n top: number;\n left: number;\n width: number;\n maxHeight: number;\n } | null>(null);\n\r\n const value = useMemo(() => toPhoneValue(field.value), [field.value]);\r\n const selectedCountry = useMemo(\n () => availableCountries.find((country) => country.cca2 === selectedCountryCode &&\n Number(getDialDigits(country)) === value.ddi) || getCountryByDdi(availableCountries, value.ddi),\n [availableCountries, value.ddi, selectedCountryCode],\n );\r\n const phoneMask = getMaskForDdi(value.ddi);\r\n const phoneDigits = `${normalizeDigits(value.ddd)}${normalizeDigits(value.numero)}`;\r\n const normalizedSearch = normalizeSearchText(searchTerm.trim());\r\n const filteredCountries = useMemo(() => {\r\n return availableCountries.filter((country) => {\n const searchableText = [\r\n country.label,\r\n country.cca2,\r\n country.idd.display,\r\n getDialDigits(country),\r\n ]\r\n .join(\" \")\r\n .trim();\r\n\r\n return normalizeSearchText(searchableText).includes(normalizedSearch);\r\n });\r\n }, [availableCountries, normalizedSearch]);\n\r\n const getErrorMessage = useCallback(() => {\r\n if (!meta.touched || !meta.error) return \"\";\r\n if (typeof meta.error === \"string\") return meta.error;\r\n if (typeof meta.error === \"object\") {\r\n const phoneError = meta.error as { numero?: string; ddd?: string };\r\n return String(phoneError.numero || phoneError.ddd || \"\");\r\n }\r\n return \"\";\r\n }, [meta.error, meta.touched]);\r\n\r\n const errorMessage = getErrorMessage();\r\n const hasError = Boolean(errorMessage);\r\n const errorId = `${name}-error`;\n const dropdownId = `${name}-countries`;\n const isDropdownPositioned = dropdownPosition !== null;\n\n const updateDropdownPosition = useCallback(() => {\n const trigger = countryButtonRef.current;\n const dropdown = dropdownRef.current;\n if (!open || !trigger) return;\n\n const rect = trigger.getBoundingClientRect();\n const panelRect = calculateFloatingPanelRect({\n trigger: {\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n width: 220,\n },\n panel: {\n width: 220,\n height: Math.min(dropdown?.scrollHeight || 320, 320),\n },\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight,\n },\n });\n\n setDropdownPosition(panelRect);\n }, [open]);\n\r\n useEffect(() => {\n if (!open) {\n setSearchTerm(\"\");\n setDropdownPosition(null);\n return;\n }\n\n updateDropdownPosition();\n }, [open, updateDropdownPosition]);\n\n useEffect(() => {\n if (open && isDropdownPositioned) {\n searchInputRef.current?.focus({ preventScroll: true });\n }\n }, [isDropdownPositioned, open]);\n\n useEffect(() => {\n if (disabled) setOpen(false);\n }, [disabled]);\n\n useEffect(() => {\n if (!open) return;\n\n const scheduleDropdownPosition = () => updateDropdownPosition();\n window.addEventListener(\"resize\", scheduleDropdownPosition);\n window.addEventListener(\"scroll\", scheduleDropdownPosition, true);\n\n return () => {\n window.removeEventListener(\"resize\", scheduleDropdownPosition);\n window.removeEventListener(\"scroll\", scheduleDropdownPosition, true);\n };\n }, [open, updateDropdownPosition]);\n\r\n useEffect(() => {\r\n if (initializedRef.current || availableCountries.length === 0) return;\n\r\n const parsed = parseStoredPhoneValue(\r\n field.value as RawPhonePayload,\n availableCountries,\n );\r\n helpers.setValue(parsed);\r\n initializedRef.current = true;\r\n }, [availableCountries, field.value, helpers]);\n\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\n !wrapperRef.current?.contains(event.target as Node) &&\n !dropdownRef.current?.contains(event.target as Node)\n ) {\n setOpen(false);\r\n helpers.setTouched(true);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [helpers, open]);\r\n\r\n const setPhoneValue = (nextValue: Partial<PhoneValue>) => {\n helpers.setValue({\n ...value,\r\n ...nextValue,\r\n ddi: Number(\r\n normalizeDigits(nextValue.ddi ?? value.ddi) || DEFAULT_BRAZIL_DDI,\r\n ),\r\n ddd: normalizeDigits(nextValue.ddd ?? value.ddd),\r\n numero: normalizeDigits(nextValue.numero ?? value.numero),\n });\n };\n\n const dropdownLayerClass = getFloatingLayerClass(\n countryButtonRef.current,\n \"popover\",\n );\n const dropdownZClass =\n dropdownLayerClass === \"z-popover\" ? \"z-menu\" : dropdownLayerClass;\n\n return (\n <FieldFrame\r\n className={className}\r\n label={label}\r\n labelFor={name}\r\n invalid={Boolean(hasError)}\r\n message={errorMessage}\r\n messageId={errorId}\r\n >\r\n <div\r\n ref={wrapperRef}\r\n className=\"field-control-slot relative mt-4xs mb-[4px]\"\r\n >\r\n <div\r\n data-has-value={phoneDigits.length > 0}\r\n className={classNames(\r\n \"field-keyboard-focus-ring flex min-h-control-md items-center overflow-hidden rounded-sm border border-field-border-default bg-field-surface text-field-icon transition-colors focus-within:border-field-border-active focus-within:text-field-content data-[has-value=true]:text-field-content\",\r\n {\r\n [FIELD_ERROR_CLASS]: hasError,\r\n [FIELD_DISABLED_CLASS]: disabled,\r\n },\r\n )}\r\n >\r\n <button\n ref={countryButtonRef}\n type=\"button\"\r\n aria-label={`Selecionar país de ${label || name}: ${selectedCountry?.label || \"\"} ${selectedCountry?.idd.display || `+${value.ddi}`}`}\n aria-haspopup=\"dialog\"\n aria-expanded={open && !disabled}\n aria-controls={open && !disabled ? dropdownId : undefined}\n disabled={disabled}\n onClick={() => setOpen((prev) => !prev)}\n onKeyDown={(event) => {\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n setOpen(true);\n }\n }}\n onBlur={() => helpers.setTouched(true)}\r\n className={classNames(\r\n \"flex h-full items-center gap-1.5 pl-2 pr-1 text-left\",\r\n \"border-r border-field-border-default bg-transparent text-field-content focus:outline-none\",\r\n {\r\n \"cursor-pointer\": !disabled,\r\n \"cursor-not-allowed text-content-disabled\": disabled,\r\n },\r\n )}\r\n >\r\n {renderFlag(selectedCountry)}\r\n <span className=\"text-sm\">\r\n {selectedCountry?.idd.display || `+${value.ddi}`}\r\n </span>\r\n {open ? (\r\n <MdOutlineKeyboardArrowUp\r\n className={classNames(\"h-4 w-4 shrink-0\", {\r\n \"text-field-assistive-error\": hasError,\r\n \"text-field-content\": !hasError,\r\n })}\r\n />\r\n ) : (\r\n <MdOutlineKeyboardArrowDown\r\n className={classNames(\"h-4 w-4 shrink-0\", {\r\n \"text-field-assistive-error\": hasError,\r\n \"text-field-content\": !hasError && phoneDigits.length > 0,\r\n \"text-field-icon\": !hasError && phoneDigits.length === 0,\r\n })}\r\n />\r\n )}\r\n </button>\r\n\r\n <div className=\"min-w-0 flex-1 pl-1 pr-3\">\r\n {phoneMask ? (\r\n <PatternFormat\r\n id={name}\r\n name={name}\n type=\"tel\"\n inputMode=\"tel\"\n aria-label={label ? undefined : name}\n aria-invalid={hasError || undefined}\r\n aria-describedby={hasError ? errorId : undefined}\r\n value={phoneDigits}\r\n format={phoneMask}\r\n allowEmptyFormatting={false}\r\n mask=\"\"\r\n placeholder={placeholder || phoneMask.replace(/#/g, \"9\")}\r\n disabled={disabled}\r\n className={FIELD_INPUT_CLASS}\r\n onBlur={() => helpers.setTouched(true)}\r\n onValueChange={(values) => {\r\n const areaCodeLength = getAreaCodeLength(phoneMask);\r\n const digits = normalizeDigits(values.value);\r\n setPhoneValue({\r\n ddd: areaCodeLength ? digits.slice(0, areaCodeLength) : \"\",\r\n numero: areaCodeLength\r\n ? digits.slice(areaCodeLength)\r\n : digits,\r\n });\r\n }}\r\n />\r\n ) : (\r\n <input\r\n id={name}\r\n name={name}\n aria-label={label ? undefined : name}\n aria-invalid={hasError || undefined}\r\n aria-describedby={hasError ? errorId : undefined}\r\n type=\"tel\"\r\n inputMode=\"numeric\"\r\n value={normalizeDigits(value.numero)}\r\n placeholder={placeholder || \"Digite o telefone\"}\r\n disabled={disabled}\r\n className={FIELD_INPUT_CLASS}\r\n onBlur={() => helpers.setTouched(true)}\r\n onChange={(event) =>\r\n setPhoneValue({ ddd: \"\", numero: event.target.value })\r\n }\r\n />\r\n )}\r\n </div>\r\n </div>\r\n\r\n {open &&\n !disabled &&\n dropdownPosition &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={dropdownRef}\n id={dropdownId}\n role=\"dialog\"\n aria-label={`Selecionar país de ${label || name}`}\n onKeyDown={(event) => {\n if (event.key === \"Escape\" || event.key === \"Tab\") {\n event.preventDefault();\n setOpen(false);\n helpers.setTouched(true);\n if (event.key === \"Escape\" || event.shiftKey) countryButtonRef.current?.focus();\n else document.getElementById(name)?.focus();\n return;\n }\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) return;\n if (event.target === searchInputRef.current && [\"Home\", \"End\"].includes(event.key)) return;\n const options = Array.from(dropdownRef.current?.querySelectorAll<HTMLButtonElement>(\"button\") || []);\n if (!options.length) return;\n event.preventDefault();\n const index = options.indexOf(document.activeElement as HTMLButtonElement);\n const next = event.key === \"Home\" ? 0 : event.key === \"End\" ? options.length - 1\n : event.key === \"ArrowDown\" ? (index + 1) % options.length\n : (index <= 0 ? options.length : index) - 1;\n options[next]?.focus();\n }}\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n width: dropdownPosition.width,\n maxHeight: dropdownPosition.maxHeight,\n }}\n className={classNames(\n \"fixed mt-1 overflow-hidden rounded-sm border border-field-border-default bg-field-surface shadow-lg\",\n dropdownZClass,\n )}\n >\n <div className=\"flex items-center gap-2 border-b border-field-border-default bg-field-surface p-2\">\n <MdSearch className=\"h-4 w-4 text-field-icon\" />\r\n <input\r\n ref={searchInputRef}\r\n type=\"text\"\n aria-label=\"Pesquisar país ou DDI\"\n value={searchTerm}\r\n onChange={(event) => setSearchTerm(event.target.value)}\r\n placeholder=\"Busque um país ou DDI\"\r\n className=\"w-full bg-transparent text-sm text-field-content outline-none placeholder:text-field-placeholder\"\r\n />\r\n </div>\r\n\r\n <div className=\"max-h-60 overflow-y-auto\">\r\n {filteredCountries.length === 0 ? (\r\n <div role=\"status\" className=\"px-3 py-2 text-sm text-content-muted\">\n Nenhum DDI encontrado\r\n </div>\r\n ) : (\r\n filteredCountries.map((country) => (\r\n <button\r\n key={`${country.cca2}-${country.idd.display}`}\r\n type=\"button\"\r\n aria-pressed={selectedCountry?.cca2 === country.cca2}\n onClick={() => {\n setSelectedCountryCode(country.cca2);\n setPhoneValue({ ddi: Number(getDialDigits(country)) });\n helpers.setTouched(true);\n setOpen(false);\n countryButtonRef.current?.focus();\n }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-left text-sm hover:bg-surface-muted focus-visible:bg-surface-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-focus-ring\"\n >\r\n {renderFlag(country)}\r\n <span className=\"min-w-0 flex-1 truncate text-field-content\">\r\n {country.label}\r\n </span>\r\n <span className=\"shrink-0 text-content-muted\">\r\n {country.idd.display}\r\n </span>\r\n </button>\r\n ))\r\n )}\r\n </div>\n </div>,\n document.body,\n )}\n </div>\r\n\r\n </FieldFrame>\r\n );\n}\n\n/** @deprecated Use InputPhone. */\nexport const PhoneInput = InputPhone;\n/** @deprecated Use InputPhoneCountryOption. */\nexport type InputPhoneCountryOption = PhoneCountryOption;\n/** @deprecated Use InputPhoneValue. */\nexport type InputPhoneValue = PhoneValue;\n/** @deprecated Use InputPhoneProps. */\nexport type PhoneInputProps = InputPhoneProps;\n\nexport default InputPhone;\n","\"use client\";\r\n\r\nimport { getFloatingLayerClass } from \"../../utils/floating-layer\";\r\nimport { calculateFloatingPanelRect } from \"../../utils/floating-panel-position\";\r\nimport classNames from \"classnames\";\r\nimport {\r\n addMonths,\r\n addYears,\r\n eachDayOfInterval,\r\n endOfMonth,\r\n endOfWeek,\r\n format,\r\n isAfter,\r\n isBefore,\r\n isSameDay,\r\n isSameMonth,\r\n isToday,\r\n isValid,\r\n parse,\r\n startOfDay,\r\n startOfMonth,\r\n startOfWeek,\r\n subMonths,\r\n} from \"date-fns\";\r\nimport { ptBR } from \"date-fns/locale/pt-BR\";\r\nimport { FormikContext, FormikContextType, getIn } from \"formik\";\r\nimport React, { useContext, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { MdCalendarMonth, MdChevronLeft, MdChevronRight } from \"react-icons/md\";\r\nimport FieldFrame from \"../field/FieldFrame\";\r\nimport {\r\n FIELD_CONTROL_CLASS,\r\n FIELD_DISABLED_CLASS,\r\n FIELD_ERROR_CLASS,\r\n FIELD_INPUT_CLASS,\r\n} from \"../field/field-styles\";\r\n\r\ntype ViewMode = \"days\" | \"months\" | \"years\";\r\nexport type DatePickerNavigationVariant = \"drilldown\" | \"dropdown\";\r\n\r\nexport interface UnifiedDatePickerProps {\r\n value?: Date | string | null;\r\n label?: string;\r\n onChange?: (date: Date | null) => void;\r\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\r\n placeholder?: string;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n isDisabled?: boolean;\r\n disabled?: boolean;\r\n name?: string;\r\n error?: boolean;\r\n errorText?: string;\r\n helperText?: string | React.ReactNode;\r\n defaultView?: ViewMode;\r\n navigationVariant?: DatePickerNavigationVariant;\r\n showAdjacentDays?: boolean;\r\n className?: string;\r\n}\r\n\r\nconst WEEKDAYS = [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"];\r\nconst CALENDAR_WIDTH = 256;\r\nconst VIEWPORT_MARGIN = 8;\r\nconst CALENDAR_GAP = 4;\r\nconst MONTHS = [\r\n \"Janeiro\",\r\n \"Fevereiro\",\r\n \"Março\",\r\n \"Abril\",\r\n \"Maio\",\r\n \"Junho\",\r\n \"Julho\",\r\n \"Agosto\",\r\n \"Setembro\",\r\n \"Outubro\",\r\n \"Novembro\",\r\n \"Dezembro\",\r\n];\r\n\r\nconst formatDateForInput = (date: Date | null) => {\r\n if (!date || !isValid(date)) return \"\";\r\n return format(date, \"dd/MM/yyyy\");\r\n};\r\n\r\nconst formatInputValue = (value: string) => {\r\n const digits = value.replace(/\\D/g, \"\").slice(0, 8);\r\n if (digits.length <= 2) return digits;\r\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\r\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\r\n};\r\n\r\nconst parseDateValue = (value: unknown): Date | null => {\r\n if (!value) return null;\r\n\r\n if (value instanceof Date) {\r\n return isValid(value) ? value : null;\r\n }\r\n\r\n if (typeof value === \"string\") {\r\n const trimmedValue = value.trim();\r\n if (!trimmedValue) return null;\r\n\r\n const parsedPtBr = parse(trimmedValue, \"dd/MM/yyyy\", new Date());\r\n if (\r\n isValid(parsedPtBr) &&\r\n format(parsedPtBr, \"dd/MM/yyyy\") === trimmedValue\r\n ) {\r\n return parsedPtBr;\r\n }\r\n\r\n const nativeDate = new Date(trimmedValue);\r\n return isValid(nativeDate) ? nativeDate : null;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst getSafeViewDate = (date: Date | null) =>\r\n date && isValid(date) ? date : new Date();\r\n\r\nconst UnifiedDatePicker: React.FC<UnifiedDatePickerProps> = ({\r\n value,\r\n onChange,\r\n onBlur,\r\n label,\r\n placeholder = \"dd/mm/aaaa\",\r\n minDate = addYears(new Date(), -120),\r\n maxDate = addYears(new Date(), 120),\r\n isDisabled = false,\r\n disabled = false,\r\n name = \"data\",\r\n error,\r\n errorText,\r\n defaultView = \"days\",\r\n navigationVariant = \"drilldown\",\r\n showAdjacentDays = true,\r\n className,\r\n}) => {\r\n const formik = useContext(\r\n FormikContext as React.Context<\r\n FormikContextType<Record<string, unknown>> | undefined\r\n >,\r\n );\r\n const hasFormikField = Boolean(formik && name);\r\n\r\n const formikRawValue = hasFormikField && formik\n ? getIn(formik.values, name)\n : undefined;\r\n const selectedDate = useMemo(\r\n () => parseDateValue(hasFormikField ? formikRawValue : value),\r\n [formikRawValue, hasFormikField, value],\r\n );\r\n\r\n const formikTouched = hasFormikField && formik\n ? Boolean(getIn(formik.touched, name))\n : false;\r\n const formikError = hasFormikField && formik ? getIn(formik.errors, name) : undefined;\n\r\n const isFieldDisabled = disabled || isDisabled;\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [isEditing, setIsEditing] = useState(false);\r\n const [draftValue, setDraftValue] = useState(\r\n formatDateForInput(selectedDate),\r\n );\r\n const [viewDate, setViewDate] = useState<Date>(getSafeViewDate(selectedDate));\r\n const [mode, setMode] = useState<ViewMode>(defaultView);\r\n const [inputError, setInputError] = useState<string | null>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n const rafRef = useRef<number | null>(null);\r\n const [isMounted, setIsMounted] = useState(false);\r\n const [panelNeedsScroll, setPanelNeedsScroll] = useState(false);\r\n const [dropdownStyle, setDropdownStyle] = useState<React.CSSProperties>({});\r\n\r\n useEffect(() => {\r\n setIsMounted(true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isEditing) {\r\n setDraftValue(formatDateForInput(selectedDate));\r\n }\r\n setViewDate(getSafeViewDate(selectedDate));\r\n }, [isEditing, selectedDate]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n setMode(navigationVariant === \"dropdown\" ? \"days\" : defaultView);\r\n\r\n const onMouseDown = (event: MouseEvent) => {\r\n if (\r\n !containerRef.current?.contains(event.target as Node) &&\r\n !dropdownRef.current?.contains(event.target as Node)\r\n ) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n const onKeyDown = (event: KeyboardEvent) => {\r\n if (event.key === \"Escape\") setIsOpen(false);\r\n };\r\n\r\n document.addEventListener(\"mousedown\", onMouseDown);\r\n document.addEventListener(\"keydown\", onKeyDown);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", onMouseDown);\r\n document.removeEventListener(\"keydown\", onKeyDown);\r\n };\r\n }, [defaultView, isOpen, navigationVariant]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const updateDropdownPosition = () => {\r\n if (!containerRef.current) return;\r\n\r\n const rect = (\r\n inputRef.current ?? containerRef.current\r\n ).getBoundingClientRect();\r\n\r\n const isOutOfViewport =\r\n rect.bottom <= 0 ||\r\n rect.top >= window.innerHeight ||\r\n rect.right <= 0 ||\r\n rect.left >= window.innerWidth;\r\n\r\n if (isOutOfViewport) {\r\n setIsOpen(false);\r\n return;\r\n }\r\n\r\n const dropdown = dropdownRef.current;\r\n const panelHeight = dropdown?.scrollHeight || 320;\r\n const panelRect = calculateFloatingPanelRect({\r\n trigger: rect,\r\n panel: {\r\n width: CALENDAR_WIDTH,\r\n height: panelHeight,\r\n },\r\n viewport: {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n },\r\n gap: CALENDAR_GAP,\r\n margin: VIEWPORT_MARGIN,\r\n });\r\n const needsScroll = panelHeight > panelRect.maxHeight + 1;\r\n\r\n setPanelNeedsScroll(needsScroll);\r\n\r\n setDropdownStyle({\r\n position: \"fixed\",\r\n top: panelRect.top,\r\n left: panelRect.left,\r\n width: panelRect.width,\r\n maxHeight: needsScroll ? panelRect.maxHeight : undefined,\r\n });\r\n };\r\n\r\n const scheduleDropdownPosition = () => {\r\n if (rafRef.current != null) return;\r\n\r\n rafRef.current = window.requestAnimationFrame(() => {\r\n rafRef.current = null;\r\n updateDropdownPosition();\r\n });\r\n };\r\n\r\n updateDropdownPosition();\r\n window.addEventListener(\"resize\", scheduleDropdownPosition);\r\n window.addEventListener(\"scroll\", scheduleDropdownPosition, true);\r\n\r\n return () => {\r\n if (rafRef.current != null) {\r\n window.cancelAnimationFrame(rafRef.current);\r\n rafRef.current = null;\r\n }\r\n window.removeEventListener(\"resize\", scheduleDropdownPosition);\r\n window.removeEventListener(\"scroll\", scheduleDropdownPosition, true);\r\n };\r\n }, [isOpen, defaultView, navigationVariant, viewDate, draftValue]);\r\n\r\n const syncValue = (nextDate: Date | null) => {\r\n if (hasFormikField && formik) {\r\n formik.setFieldValue(name, nextDate);\r\n }\r\n\r\n onChange?.(nextDate);\r\n };\r\n\r\n const touchField = () => {\r\n if (hasFormikField && formik) {\r\n formik.setFieldTouched(name, true);\r\n }\r\n };\r\n\r\n const openCalendar = () => {\r\n if (isFieldDisabled) return;\r\n setIsOpen(true);\r\n inputRef.current?.focus();\r\n };\r\n\r\n const getDaysInView = () => {\r\n const start = startOfWeek(startOfMonth(viewDate), { weekStartsOn: 0 });\r\n const end = endOfWeek(endOfMonth(viewDate), { weekStartsOn: 0 });\r\n return eachDayOfInterval({ start, end });\r\n };\r\n\r\n const handleDayClick = (day: Date) => {\r\n if (isBefore(day, startOfDay(minDate)) || isAfter(day, startOfDay(maxDate)))\r\n return;\r\n\r\n syncValue(day);\r\n setDraftValue(formatDateForInput(day));\r\n setInputError(null);\r\n setViewDate(day);\r\n touchField();\r\n setIsOpen(false);\r\n };\r\n\r\n const handleMonthClick = (monthIndex: number) => {\r\n setViewDate((currentDate) => {\r\n const nextDate = new Date(currentDate);\r\n nextDate.setMonth(monthIndex);\r\n return nextDate;\r\n });\r\n setMode(\"days\");\r\n };\r\n\r\n const handleMonthChange = (monthIndex: number) => {\r\n setViewDate((currentDate) => {\r\n const nextDate = new Date(currentDate);\r\n nextDate.setDate(1);\r\n nextDate.setMonth(monthIndex);\r\n return nextDate;\r\n });\r\n };\r\n\r\n const handleYearClick = (year: number) => {\r\n setViewDate((currentDate) => {\r\n const nextDate = new Date(currentDate);\r\n nextDate.setFullYear(year);\r\n return nextDate;\r\n });\r\n setMode(\"days\");\r\n };\r\n\r\n const handleYearChange = (year: number) => {\r\n setViewDate((currentDate) => {\r\n const nextDate = new Date(currentDate);\r\n nextDate.setDate(1);\r\n nextDate.setFullYear(year);\r\n\r\n if (year === minDate.getFullYear() && nextDate < startOfMonth(minDate)) {\r\n nextDate.setMonth(minDate.getMonth());\r\n }\r\n\r\n if (year === maxDate.getFullYear() && nextDate > startOfMonth(maxDate)) {\r\n nextDate.setMonth(maxDate.getMonth());\r\n }\r\n\r\n return nextDate;\r\n });\r\n };\r\n\r\n const commitDraftValue = (rawValue: string) => {\r\n const normalizedValue = formatInputValue(rawValue);\r\n setDraftValue(normalizedValue);\r\n touchField();\r\n\r\n if (!normalizedValue) {\r\n syncValue(null);\r\n setInputError(null);\r\n return;\r\n }\r\n\r\n if (normalizedValue.length < 10) {\r\n syncValue(null);\r\n setInputError(\"Data incompleta\");\r\n return;\r\n }\r\n\r\n const parsedDate = parseDateValue(normalizedValue);\r\n if (!parsedDate) {\r\n syncValue(null);\r\n setInputError(\"Data invalida\");\r\n return;\r\n }\r\n\r\n if (\r\n isBefore(parsedDate, startOfDay(minDate)) ||\r\n isAfter(parsedDate, startOfDay(maxDate))\r\n ) {\r\n syncValue(null);\r\n setInputError(\"Data fora do intervalo permitido\");\r\n return;\r\n }\r\n\r\n syncValue(parsedDate);\r\n setViewDate(parsedDate);\r\n setInputError(null);\r\n };\r\n\r\n const yearRangeStart = viewDate.getFullYear() - 5;\r\n const years = Array.from(\r\n { length: 12 },\r\n (_, index) => yearRangeStart + index,\r\n );\r\n const minYear = minDate.getFullYear();\r\n const maxYear = maxDate.getFullYear();\r\n const selectableYears = Array.from(\r\n { length: Math.max(0, maxYear - minYear + 1) },\r\n (_, index) => minYear + index,\r\n );\r\n const previousMonth = subMonths(viewDate, 1);\r\n const nextMonth = addMonths(viewDate, 1);\r\n const previousMonthDisabled = isBefore(\r\n endOfMonth(previousMonth),\r\n startOfDay(minDate),\r\n );\r\n const nextMonthDisabled = isAfter(\r\n startOfMonth(nextMonth),\r\n startOfDay(maxDate),\r\n );\r\n const headerLabel =\r\n mode === \"days\"\r\n ? format(viewDate, \"MMMM yyyy\", { locale: ptBR })\r\n : mode === \"months\"\r\n ? String(viewDate.getFullYear())\r\n : `${yearRangeStart} - ${yearRangeStart + 11}`;\r\n\r\n const resolvedErrorText =\r\n inputError ||\r\n (formikTouched && typeof formikError === \"string\"\r\n ? formikError\r\n : errorText);\r\n const hasError = Boolean(\r\n inputError || (formikTouched && formikError) || error,\r\n );\r\n const errorId = `${name}-error`;\r\n\r\n return (\r\n <FieldFrame\r\n className=\"relative\"\r\n ref={containerRef}\r\n label={label}\r\n labelFor={name}\r\n invalid={hasError}\r\n message={resolvedErrorText}\r\n messageId={errorId}\r\n >\r\n <div\r\n data-has-value={draftValue.length > 0}\r\n className={classNames(\r\n FIELD_CONTROL_CLASS,\r\n {\r\n [FIELD_DISABLED_CLASS]: isFieldDisabled,\r\n [FIELD_ERROR_CLASS]: hasError,\r\n },\r\n className,\r\n )}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={name}\r\n name={name}\r\n aria-invalid={hasError || undefined}\r\n aria-describedby={hasError && resolvedErrorText ? errorId : undefined}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n autoComplete=\"off\"\r\n maxLength={10}\r\n disabled={isFieldDisabled}\r\n placeholder={placeholder}\r\n value={draftValue}\r\n onClick={openCalendar}\r\n onFocus={() => {\r\n setIsEditing(true);\r\n openCalendar();\r\n }}\r\n onChange={(event) => {\r\n const nextValue = formatInputValue(event.target.value);\r\n setDraftValue(nextValue);\r\n setInputError(null);\r\n\r\n if (nextValue.length === 10) {\r\n const parsedDate = parseDateValue(nextValue);\r\n if (parsedDate) {\r\n setViewDate(parsedDate);\r\n }\r\n }\r\n }}\r\n onBlur={(event) => {\r\n setIsEditing(false);\r\n commitDraftValue(event.target.value);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n commitDraftValue(draftValue);\r\n setIsOpen(false);\r\n }\r\n }}\r\n className={FIELD_INPUT_CLASS}\r\n />\r\n\r\n <button\r\n type=\"button\"\r\n disabled={isFieldDisabled}\r\n onClick={openCalendar}\r\n className=\"flex items-center justify-center disabled:cursor-not-allowed\"\r\n aria-label=\"Abrir calendario\"\r\n >\r\n <MdCalendarMonth\r\n className={classNames(\"h-5 w-5\", {\r\n \"text-field-assistive-error\": hasError,\r\n })}\r\n />\r\n </button>\r\n </div>\r\n\r\n {isMounted && isOpen\r\n ? createPortal(\r\n <div\r\n ref={dropdownRef}\r\n style={dropdownStyle}\r\n className={classNames(\r\n getFloatingLayerClass(containerRef.current, \"popover\"),\r\n \"rounded-sm border border-border-default bg-white shadow-md transition-all duration-150\",\r\n panelNeedsScroll\r\n ? \"overflow-y-auto overscroll-contain\"\r\n : \"overflow-visible\",\r\n \"py-3\",\r\n )}\r\n >\r\n <div className=\"mb-1 flex items-center justify-between px-1\">\r\n <button\r\n type=\"button\"\r\n aria-label=\"Exibir mês anterior\"\r\n disabled={\r\n navigationVariant === \"dropdown\" && previousMonthDisabled\r\n }\r\n onClick={() =>\r\n mode === \"days\"\r\n ? setViewDate((currentDate) => subMonths(currentDate, 1))\r\n : mode === \"months\"\r\n ? setViewDate((currentDate) => {\r\n const nextDate = new Date(currentDate);\r\n nextDate.setFullYear(nextDate.getFullYear() - 1);\r\n return nextDate;\r\n })\r\n : setViewDate((currentDate) => {\r\n const nextDate = new Date(currentDate);\r\n nextDate.setFullYear(nextDate.getFullYear() - 12);\r\n return nextDate;\r\n })\r\n }\r\n className=\"rounded-sm p-1 text-primary-1 transition-colors hover:bg-primary-1/10 disabled:cursor-not-allowed disabled:text-content-disabled\"\r\n >\r\n <MdChevronLeft aria-hidden=\"true\" className=\"h-5 w-5\" />\r\n </button>\r\n\r\n {navigationVariant === \"dropdown\" ? (\r\n <div className=\"flex items-center gap-[6px]\">\r\n <select\r\n aria-label=\"Selecionar mês do calendário\"\r\n value={viewDate.getMonth()}\r\n onChange={(event) =>\r\n handleMonthChange(Number(event.target.value))\r\n }\r\n className=\"h-6 w-24 rounded-sm border-2 border-border-default bg-field-surface px-0.5 text-xs leading-3 text-field-content focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n >\r\n {MONTHS.map((month, monthIndex) => (\r\n <option\r\n key={month}\r\n value={monthIndex}\r\n disabled={\r\n (viewDate.getFullYear() === minYear &&\r\n monthIndex < minDate.getMonth()) ||\r\n (viewDate.getFullYear() === maxYear &&\r\n monthIndex > maxDate.getMonth())\r\n }\r\n >\r\n {month}\r\n </option>\r\n ))}\r\n </select>\r\n\r\n <select\r\n aria-label=\"Selecionar ano do calendário\"\r\n value={viewDate.getFullYear()}\r\n onChange={(event) =>\r\n handleYearChange(Number(event.target.value))\r\n }\r\n className=\"h-6 w-[58px] rounded-sm border-2 border-border-default bg-field-surface px-0.5 text-xs leading-3 text-field-content focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n >\r\n {selectableYears.map((year) => (\r\n <option key={year} value={year}>\r\n {year}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n ) : (\r\n <button\r\n type=\"button\"\r\n onClick={() =>\r\n setMode((currentMode) =>\r\n currentMode === \"days\"\r\n ? \"months\"\r\n : currentMode === \"months\"\r\n ? \"years\"\r\n : \"days\",\r\n )\r\n }\r\n className=\"px-2 text-sm font-semibold capitalize text-content-primary transition-colors hover:text-primary-1\"\r\n >\r\n {headerLabel}\r\n </button>\r\n )}\r\n\r\n <button\r\n type=\"button\"\r\n aria-label=\"Exibir próximo mês\"\r\n disabled={\r\n navigationVariant === \"dropdown\" && nextMonthDisabled\r\n }\r\n onClick={() =>\r\n mode === \"days\"\r\n ? setViewDate((currentDate) => addMonths(currentDate, 1))\r\n : mode === \"months\"\r\n ? setViewDate((currentDate) => {\r\n const nextDate = new Date(currentDate);\r\n nextDate.setFullYear(nextDate.getFullYear() + 1);\r\n return nextDate;\r\n })\r\n : setViewDate((currentDate) => {\r\n const nextDate = new Date(currentDate);\r\n nextDate.setFullYear(nextDate.getFullYear() + 12);\r\n return nextDate;\r\n })\r\n }\r\n className=\"rounded-sm p-1 text-primary-1 transition-colors hover:bg-primary-1/10 disabled:cursor-not-allowed disabled:text-content-disabled\"\r\n >\r\n <MdChevronRight aria-hidden=\"true\" className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n\r\n {mode === \"days\" && (\r\n <div className=\"px-3\">\r\n <div className=\"grid grid-cols-7 gap-x-1\">\r\n {WEEKDAYS.map((weekday) => (\r\n <div\r\n key={weekday}\r\n className=\"select-none py-0.5 text-center text-2xs font-semibold text-content-muted\"\r\n >\r\n {weekday}\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"grid grid-cols-7 gap-x-1\">\r\n {getDaysInView().map((day, index) => {\r\n const selected = selectedDate\r\n ? isSameDay(day, selectedDate)\r\n : false;\r\n const currentDay = isToday(day);\r\n const inMonth = isSameMonth(day, viewDate);\r\n const dayDisabled =\r\n isBefore(day, startOfDay(minDate)) ||\r\n isAfter(day, startOfDay(maxDate));\r\n\r\n if (!showAdjacentDays && !inMonth) {\r\n return (\r\n <span\r\n key={`${day.toISOString()}-${index}`}\r\n aria-hidden=\"true\"\r\n className=\"h-7\"\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n key={`${day.toISOString()}-${index}`}\r\n type=\"button\"\r\n onClick={() => handleDayClick(day)}\r\n disabled={dayDisabled}\r\n className={classNames(\r\n \"group flex h-7 w-full items-center justify-center text-xs transition-colors\",\r\n {\r\n \"opacity-30 cursor-not-allowed\": dayDisabled,\r\n \"cursor-pointer\": !dayDisabled,\r\n },\r\n )}\r\n >\r\n <span\r\n className={classNames(\r\n \"flex h-6 w-6 items-center justify-center rounded-sm transition-colors\",\r\n {\r\n \"border border-selection-border bg-selection-background font-semibold text-selection-content\":\r\n selected,\r\n \"border border-primary-1 text-primary-1 font-semibold group-hover:bg-primary-1/10\":\r\n currentDay && inMonth && !selected,\r\n \"text-content-primary group-hover:bg-primary-1/10\":\r\n inMonth && !selected && !currentDay,\r\n \"text-content-muted\": !inMonth,\r\n },\r\n )}\r\n >\r\n {format(day, \"d\")}\r\n </span>\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {mode === \"months\" && (\r\n <div className=\"grid grid-cols-3 gap-1 px-3\">\r\n {MONTHS.map((month, index) => {\r\n const selected = index === viewDate.getMonth();\r\n\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n onClick={() => handleMonthClick(index)}\r\n className={classNames(\r\n \"rounded-sm py-1 text-xs capitalize transition-colors\",\r\n {\r\n \"border border-selection-border bg-selection-background font-semibold text-selection-content\":\r\n selected,\r\n \"text-content-primary hover:bg-primary-1/10\":\r\n !selected,\r\n },\r\n )}\r\n >\r\n {month.slice(0, 3)}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n\r\n {mode === \"years\" && (\r\n <div className=\"grid grid-cols-3 gap-1 px-3\">\r\n {years.map((year) => {\r\n const selected = year === viewDate.getFullYear();\r\n\r\n return (\r\n <button\r\n key={year}\r\n type=\"button\"\r\n onClick={() => handleYearClick(year)}\r\n className={classNames(\r\n \"rounded-sm py-1 text-xs transition-colors\",\r\n {\r\n \"border border-selection-border bg-selection-background font-semibold text-selection-content\":\r\n selected,\r\n \"text-content-primary hover:bg-primary-1/10\":\r\n !selected,\r\n },\r\n )}\r\n >\r\n {year}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>,\r\n document.body,\r\n )\r\n : null}\r\n </FieldFrame>\r\n );\r\n};\r\n\r\nexport default UnifiedDatePicker;\n\n/** @deprecated Use DatePicker. Kept for deep-import compatibility. */\nexport const DatePickerLegacy = UnifiedDatePicker;\n/** @deprecated Use DatePickerProps. */\nexport type DatepickerProps = UnifiedDatePickerProps;\n/** @deprecated Use DatePickerNavigationVariant. */\nexport type DatepickerNavigationVariant = DatePickerNavigationVariant;\n","\"use client\";\n\nimport UnifiedDatePicker from \"./UnifiedDatePicker\";\nimport type {\n DatePickerNavigationVariant as DatePickerNavigationVariantType,\n UnifiedDatePickerProps,\n} from \"./UnifiedDatePicker\";\n\nexport const DatePicker = UnifiedDatePicker;\nexport { UnifiedDatePicker };\nexport type {\n DatePickerNavigationVariant,\n UnifiedDatePickerProps as DatePickerProps,\n UnifiedDatePickerProps,\n} from \"./UnifiedDatePicker\";\n/** @deprecated Use DatePicker. */\nexport const Datepicker = DatePicker;\n/** @deprecated Use DatePickerProps. */\nexport type DatepickerProps = UnifiedDatePickerProps;\n/** @deprecated Use DatePickerNavigationVariant. */\nexport type DatepickerNavigationVariant = DatePickerNavigationVariantType;\n\nexport default DatePicker;\n","\"use client\";\r\n\r\nimport cs from \"classnames\";\r\nimport {\r\n InputHTMLAttributes,\r\n KeyboardEvent,\r\n useEffect,\r\n useId,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { MdClose, MdKeyboardArrowDown } from \"react-icons/md\";\nimport FieldFrame from \"../field/FieldFrame\";\nimport { getFloatingLayerClass } from \"../../utils/floating-layer\";\n\r\nexport interface SelectMultiViewProps extends InputHTMLAttributes<HTMLInputElement> {\n options: {\r\n label: string;\r\n value: string;\r\n }[];\r\n label?: string;\r\n error?: string;\r\n checkedList?: string[];\r\n onClear?: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function SelectMultiView(props: SelectMultiViewProps) {\n const { options, error, label, checkedList = [], onClear, disabled } = props;\r\n const [isOpened, setIsOpened] = useState(false);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const triggerRef = useRef<HTMLButtonElement>(null);\r\n const groupRef = useRef<HTMLDivElement>(null);\r\n const baseId = useId();\r\n const triggerId = `${baseId}-trigger`;\r\n const labelId = `${baseId}-label`;\r\n const groupId = `${baseId}-options`;\r\n const summaryId = `${baseId}-summary`;\r\n const errorId = `${baseId}-error`;\r\n const selectedCount = checkedList.length;\r\n const selectedSummary =\r\n selectedCount === 0\r\n ? \"Nenhuma opção selecionada\"\r\n : selectedCount === 1\r\n ? \"1 opção selecionada\"\r\n : `${selectedCount} opções selecionadas`;\r\n const describedBy = [summaryId, error ? errorId : undefined]\n .filter(Boolean)\r\n .join(\" \");\n const floatingLayerClass = getFloatingLayerClass(\n triggerRef.current,\n \"popover\",\n );\n const menuLayerClass =\n floatingLayerClass === \"z-popover\" ? \"z-menu\" : floatingLayerClass;\n\r\n const closeAndFocusTrigger = () => {\r\n setIsOpened(false);\r\n triggerRef.current?.focus({ preventScroll: true });\r\n };\r\n\r\n useEffect(() => {\r\n if (!isOpened) return;\r\n\r\n groupRef.current\r\n ?.querySelector<HTMLInputElement>('input[type=\"checkbox\"]')\r\n ?.focus({ preventScroll: true });\r\n }, [isOpened]);\r\n\r\n useEffect(() => {\r\n function handleClickOutside(event: MouseEvent) {\r\n if (!containerRef.current?.contains(event.target as Node)) {\r\n setIsOpened(false);\r\n }\r\n }\r\n\r\n if (isOpened) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [isOpened]);\r\n\r\n useEffect(() => {\r\n if (disabled) setIsOpened(false);\r\n }, [disabled]);\r\n\r\n const handleOptionKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\r\n const checkboxes = Array.from(\r\n groupRef.current?.querySelectorAll<HTMLInputElement>(\r\n 'input[type=\"checkbox\"]:not([disabled])',\r\n ) ?? [],\r\n );\r\n const currentIndex = checkboxes.indexOf(event.currentTarget);\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closeAndFocusTrigger();\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n event.currentTarget.click();\r\n return;\r\n }\r\n\r\n if (\r\n event.key !== \"ArrowDown\" &&\r\n event.key !== \"ArrowUp\" &&\r\n event.key !== \"Home\" &&\r\n event.key !== \"End\"\r\n ) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n if (event.key === \"Home\") {\r\n checkboxes[0]?.focus({ preventScroll: true });\r\n return;\r\n }\r\n\r\n if (event.key === \"End\") {\r\n checkboxes[checkboxes.length - 1]?.focus({ preventScroll: true });\r\n return;\r\n }\r\n\r\n const direction = event.key === \"ArrowDown\" ? 1 : -1;\r\n const nextIndex =\r\n (currentIndex + direction + checkboxes.length) % checkboxes.length;\r\n checkboxes[nextIndex]?.focus({ preventScroll: true });\r\n };\r\n\r\n return (\r\n <FieldFrame\r\n ref={containerRef}\r\n className=\"multi-select-container\"\r\n label={label}\r\n labelFor={triggerId}\r\n labelId={label ? labelId : undefined}\r\n invalid={Boolean(error)}\r\n message={error}\r\n messageId={errorId}\r\n >\r\n <div\r\n aria-invalid={Boolean(error) || undefined}\r\n className=\"relative mb-[4px] mt-4xs\"\r\n >\r\n <button\r\n type=\"button\"\r\n id={triggerId}\r\n ref={triggerRef}\r\n aria-controls={groupId}\r\n aria-expanded={isOpened}\n aria-invalid={Boolean(error) || undefined}\n aria-labelledby={label ? labelId : undefined}\n aria-label={label ? undefined : \"Selecionar opções\"}\r\n aria-describedby={describedBy}\r\n disabled={disabled}\r\n onClick={() => setIsOpened((current) => !current)}\r\n onKeyDown={(event) => {\r\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n setIsOpened(true);\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n setIsOpened(false);\r\n }\r\n }}\r\n className={cs(\r\n \"flex h-control-md w-full cursor-pointer items-center justify-between rounded-sm border border-field-border-default bg-field-surface px-3 text-field-icon focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\",\r\n error && \"border-field-border-error text-field-assistive-error\",\r\n !error &&\r\n isOpened &&\r\n \"border-field-border-active text-field-content\",\r\n !error && selectedCount > 0 && \"text-field-content\",\r\n disabled &&\r\n \"cursor-not-allowed border-field-border-default bg-field-surface-disabled text-field-content-disabled\",\r\n )}\r\n >\r\n <span\r\n className={cs(\r\n \"min-w-0 flex-1 truncate text-left text-base font-normal text-field-placeholder\",\r\n {\r\n \"pr-12 text-field-content\": !disabled && selectedCount > 0,\r\n \"text-field-content-disabled\": disabled,\r\n },\r\n )}\r\n >\r\n Selecione\r\n </span>\r\n <MdKeyboardArrowDown\r\n aria-hidden=\"true\"\r\n className={cs(\r\n \"shrink-0 text-base text-field-icon transition-transform\",\r\n {\r\n \"rotate-180\": isOpened,\r\n \"text-field-assistive-error\": error,\r\n \"text-field-content\": !error && (isOpened || selectedCount > 0),\r\n \"text-field-content-disabled\": disabled,\r\n },\r\n )}\r\n />\r\n </button>\r\n\r\n <span id={summaryId} className=\"sr-only\">\r\n {selectedSummary}\r\n </span>\r\n\r\n {isOpened && (\r\n <div\r\n id={groupId}\r\n ref={groupRef}\r\n role=\"group\"\r\n aria-labelledby={label ? labelId : undefined}\r\n aria-label={label ? undefined : \"Opções disponíveis\"}\r\n aria-describedby={summaryId}\r\n className={cs(\n \"absolute top-[100%] w-full rounded-sm bg-surface-card p-3\",\n menuLayerClass,\n \"flex flex-col items-stretch gap-2 shadow-md\",\n )}\n >\r\n {options.map((option, index) => {\r\n const isChecked = checkedList.includes(option.value);\r\n\r\n return (\r\n <label\r\n key={option.value}\r\n className={cs(\r\n \"flex h-10 cursor-pointer items-center gap-2 rounded p-2\",\r\n isChecked && \"bg-primary-5 text-primary-1\",\r\n disabled && \"cursor-not-allowed\",\r\n )}\r\n >\r\n <input\r\n id={`${baseId}-option-${index}`}\r\n type=\"checkbox\"\r\n className=\"peer sr-only\"\r\n value={option.value}\r\n checked={isChecked}\r\n name={props.name}\r\n onChange={props.onChange}\r\n onKeyDown={handleOptionKeyDown}\r\n aria-invalid={Boolean(error) || undefined}\r\n aria-describedby={error ? errorId : undefined}\r\n disabled={disabled}\r\n />\r\n <span aria-hidden=\"true\" className=\"checkbox-control-proxy\" />\r\n {option.label}\r\n </label>\r\n );\r\n })}\r\n </div>\r\n )}\r\n\r\n {selectedCount > 0 && onClear && (\r\n <button\r\n type=\"button\"\r\n aria-label={`Limpar seleção de ${label ?? \"opções\"}`}\r\n disabled={disabled}\r\n onClick={onClear}\r\n className=\"absolute right-9 top-1/2 flex min-h-6 min-w-6 -translate-y-1/2 touch-manipulation items-center justify-center gap-1 rounded-full bg-action-primary px-2 text-xs text-action-primary-content focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring disabled:cursor-not-allowed\"\r\n >\r\n <span aria-hidden=\"true\">{selectedCount}</span>\r\n <MdClose aria-hidden=\"true\" size={10} />\r\n </button>\r\n )}\r\n </div>\r\n </FieldFrame>\r\n );\r\n}\r\n\r\nexport default SelectMultiView;\n\n/** @deprecated Use SelectMultiViewProps. */\nexport type MultiSelectViewProps = SelectMultiViewProps;\n","import type { InputHTMLAttributes } from \"react\";\nimport SelectMultiView from \"./SelectMultiView\";\n\nexport interface SelectMultiOption {\n label: string;\n value: string;\n}\n\nexport interface SelectMultiProps extends InputHTMLAttributes<HTMLInputElement> {\n options: SelectMultiOption[];\n label?: string;\n error?: string;\n onReset?: () => void;\n}\n\nexport function SelectMulti(props: SelectMultiProps) {\n return (\n <SelectMultiView\r\n {...props}\r\n checkedList={props.value as string[]}\r\n onClear={props.onReset}\r\n />\r\n );\r\n}\n\n/** @deprecated Use SelectMulti. */\nexport const MultiSelect = SelectMulti;\n/** @deprecated Use SelectMultiOption. */\nexport type MultiSelectOption = SelectMultiOption;\n/** @deprecated Use SelectMultiProps. */\nexport type MultiSelectProps = SelectMultiProps;\n\nexport default SelectMulti;\n","\"use client\";\n\nimport InputSelect, {\n type InputSelectOption,\n} from \"../inputSelect/InputSelect\";\nimport {\n COUNTRY_OPTIONS,\n filterCountryOptions,\n getCountryFlagUrl,\n type CountryListFilter,\n} from \"../../countries\";\nimport type React from \"react\";\n\r\nexport type SelectCountryOption = InputSelectOption & {\r\n cca2?: string;\r\n flags?: {\r\n png?: string;\r\n svg?: string;\r\n alt?: string;\r\n };\r\n};\r\n\r\nexport type SelectCountryProps = Omit<\n React.ComponentProps<typeof InputSelect>,\r\n \"options\" | \"renderOption\" | \"renderValue\"\r\n> & {\n /** Lista base customizada. Quando omitida, usa todos os paises do pacote. */\n options?: SelectCountryOption[];\n /** Use `all` (padrao), `include` ou `exclude` com codigos ISO-2. */\n countryList?: CountryListFilter;\n};\n\nfunction renderFlag(option: SelectCountryOption) {\n const svgSrc = String(\n getCountryFlagUrl(option.cca2) || option.flags?.svg || \"\",\n ).trim();\n\r\n if (!svgSrc) {\r\n return (\r\n <span\r\n aria-hidden=\"true\"\r\n className=\"h-5 w-7 shrink-0 rounded-sm bg-surface-muted\"\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <span\r\n aria-hidden=\"true\"\r\n className=\"flex h-5 w-7 shrink-0 items-center justify-center\"\r\n >\r\n <img\r\n src={svgSrc}\r\n alt=\"\"\r\n className=\"h-full w-full object-contain\"\r\n loading=\"lazy\"\r\n referrerPolicy=\"no-referrer\"\r\n />\r\n </span>\r\n );\r\n}\r\n\r\nfunction renderCountryContent(\r\n option: SelectCountryOption | null,\r\n placeholder?: string,\r\n) {\r\n if (!option) {\r\n return (\r\n <span className=\"block w-full truncate overflow-hidden text-content-muted\">\r\n {placeholder}\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <span className=\"flex w-full min-w-0 items-center gap-2\">\r\n {renderFlag(option)}\r\n <span className=\"block truncate overflow-hidden\">{option.label}</span>\r\n </span>\r\n );\r\n}\r\n\r\nexport function SelectCountry({\n options,\n countryList,\n searchable = true,\r\n searchPlaceholder = \"Busque um país\",\r\n noOptionsText = \"Nenhum país encontrado\",\r\n defaultValue,\r\n onChange,\r\n className,\r\n ...props\r\n}: SelectCountryProps) {\n const availableOptions = filterCountryOptions(\n options || COUNTRY_OPTIONS,\n countryList,\n );\n\n return (\n <InputSelect\r\n {...props}\r\n className={className}\r\n defaultValue={defaultValue}\r\n onChange={onChange}\r\n options={availableOptions}\n searchable={searchable}\r\n searchPlaceholder={searchPlaceholder}\r\n noOptionsText={noOptionsText}\r\n renderOption={(option) =>\r\n renderCountryContent(option as SelectCountryOption)\r\n }\r\n renderValue={(option, placeholder) =>\r\n renderCountryContent(option as SelectCountryOption | null, placeholder)\r\n }\r\n />\r\n );\n}\n\n/** @deprecated Use SelectCountry. */\nexport const CountrySelect = SelectCountry;\n/** @deprecated Use SelectCountryOption. */\nexport type CountrySelectOption = SelectCountryOption;\n/** @deprecated Use SelectCountryProps. */\nexport type CountrySelectProps = SelectCountryProps;\n\nexport default SelectCountry;\n","\"use client\";\r\n\r\nimport { useField } from \"formik\";\r\nimport { useId } from \"react\";\r\nimport {\r\n FIELD_LABEL_CLASS,\r\n FIELD_MESSAGE_CLASS,\r\n FIELD_ROOT_CLASS,\r\n} from \"../field/field-styles\";\r\n\r\nexport interface RadioGroupProps extends React.InputHTMLAttributes<HTMLInputElement> {\n name: string;\r\n label?: string;\r\n options: {\r\n label: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\nexport function RadioGroup({\r\n name,\r\n label,\r\n options,\r\n className,\r\n ...rest\r\n}: RadioGroupProps) {\r\n const [field, meta] = useField(name!);\r\n\r\n const hasError = Boolean(meta.touched && meta.error);\r\n const errorId = `${useId()}-error`;\r\n\r\n return (\r\n <fieldset\r\n className={`${FIELD_ROOT_CLASS} ${className ?? \"\"}`}\r\n aria-describedby={hasError ? errorId : undefined}\r\n aria-invalid={hasError || undefined}\r\n >\r\n {label && <legend className={FIELD_LABEL_CLASS}>{label}</legend>}\r\n <div className=\"field-control-slot mt-4xs mb-[4px] flex min-h-control-md flex-wrap items-center gap-x-6 gap-y-2\">\r\n {options.map((option) => (\r\n <label\r\n key={option.value}\r\n className=\"flex min-h-7 cursor-pointer items-center gap-2\"\r\n >\r\n <input\r\n type=\"radio\"\r\n {...rest}\r\n {...field}\r\n value={option.value}\r\n checked={field.value === option.value}\r\n aria-describedby={hasError ? errorId : undefined}\r\n data-invalid={hasError || undefined}\r\n className=\"radio-control\"\r\n />\r\n <span className=\"text-content-secondary\">{option.label}</span>\r\n </label>\r\n ))}\r\n </div>\r\n {hasError && (\r\n <span\r\n id={errorId}\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n className={FIELD_MESSAGE_CLASS}\r\n >\r\n {meta.error}\r\n </span>\r\n )}\r\n </fieldset>\r\n );\r\n}\r\n\r\n\r\n","\"use client\";\r\n\r\nimport classNames from \"classnames\";\r\nimport { FormikContext, FormikContextType, FormikValues, getIn } from \"formik\";\r\nimport {\r\n ChangeEvent,\r\n ReactNode,\r\n useContext,\r\n useId,\r\n useMemo,\r\n useState,\r\n} from \"react\";\r\n\r\nexport type RadioCardOption = {\n value: string;\r\n title: ReactNode;\r\n description?: ReactNode;\r\n disabled?: boolean;\r\n};\r\n\r\nexport type RadioCardGroupProps = {\n name?: string;\r\n label?: ReactNode;\r\n options: RadioCardOption[];\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string, event: ChangeEvent<HTMLInputElement>) => void;\r\n error?: string | boolean;\r\n touched?: boolean;\r\n className?: string;\r\n optionClassName?: string;\r\n columnsClassName?: string;\r\n disabled?: boolean;\r\n};\r\n\r\nconst isFormikContext = (\r\n context: FormikContextType<FormikValues> | undefined,\r\n): context is FormikContextType<FormikValues> =>\r\n Boolean(context && typeof context.setFieldValue === \"function\");\r\n\r\nexport function RadioCardGroup({\r\n name,\r\n label,\r\n options,\r\n value,\r\n defaultValue = \"\",\r\n onChange,\r\n error,\r\n touched,\r\n className,\r\n optionClassName,\r\n columnsClassName,\r\n disabled = false,\r\n}: RadioCardGroupProps) {\r\n const formikContext = useContext(\r\n FormikContext as unknown as React.Context<\r\n FormikContextType<FormikValues> | undefined\r\n >,\r\n );\r\n const generatedName = useId();\r\n const errorId = `${generatedName}-error`;\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n\r\n const hasFormikBinding = Boolean(name) && isFormikContext(formikContext);\r\n const fieldName = name ?? generatedName;\r\n\r\n const fieldValue = useMemo(() => {\r\n if (hasFormikBinding && name) {\r\n return String(getIn(formikContext.values, name) ?? \"\");\r\n }\r\n\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n\r\n return internalValue;\r\n }, [formikContext?.values, hasFormikBinding, internalValue, name, value]);\r\n\r\n const fieldTouched =\r\n hasFormikBinding && name\r\n ? Boolean(getIn(formikContext.touched, name))\r\n : Boolean(touched);\r\n\r\n const fieldError =\r\n hasFormikBinding && name ? getIn(formikContext.errors, name) : error;\r\n\r\n const hasError = Boolean(fieldTouched && fieldError);\r\n const helperText =\r\n typeof fieldError === \"string\" && hasError ? fieldError : undefined;\r\n\r\n const handleChange = (\r\n nextValue: string,\r\n event: ChangeEvent<HTMLInputElement>,\r\n ) => {\r\n if (hasFormikBinding && name) {\r\n formikContext.setFieldValue(name, nextValue);\r\n formikContext.setFieldTouched(name, true, false);\r\n } else if (value === undefined) {\r\n setInternalValue(nextValue);\r\n }\r\n\r\n onChange?.(nextValue, event);\r\n };\r\n\r\n return (\r\n <fieldset\r\n className={classNames(\"flex min-w-0 flex-col\", className)}\r\n aria-describedby={helperText ? errorId : undefined}\r\n aria-invalid={hasError || undefined}\r\n >\r\n {label && (\r\n <legend className=\"mb-2 px-0.5 text-[16px] tracking-wide\">\r\n {label}\r\n </legend>\r\n )}\r\n\r\n <div className={classNames(\"grid gap-3\", columnsClassName)}>\r\n {options.map((option) => {\r\n const optionId = `${fieldName}-${option.value}`;\r\n const checked = fieldValue === option.value;\r\n const optionDisabled = disabled || Boolean(option.disabled);\r\n\r\n return (\r\n <label\r\n key={option.value}\r\n htmlFor={optionId}\r\n className={classNames(\r\n \"block rounded-md border p-4 transition-colors\",\r\n checked\r\n ? \"border-primary-1 bg-primary-5\"\r\n : \"border-transparent bg-bg-light\",\r\n hasError && !checked\r\n ? \"outline outline-1 outline-feedback-danger-border\"\r\n : \"outline outline-1 outline-transparent\",\r\n optionDisabled\r\n ? \"cursor-not-allowed opacity-60\"\r\n : \"cursor-pointer\",\r\n optionClassName,\r\n )}\r\n >\r\n <div className=\"flex items-start gap-3\">\r\n <input\r\n id={optionId}\r\n type=\"radio\"\r\n name={fieldName}\r\n value={option.value}\r\n checked={checked}\r\n disabled={optionDisabled}\r\n onChange={(event) => handleChange(option.value, event)}\r\n onBlur={() => {\r\n if (hasFormikBinding && name) {\r\n formikContext.setFieldTouched(name, true, false);\r\n }\r\n }}\r\n aria-describedby={helperText ? errorId : undefined}\r\n className=\"radio-control mt-0.5\"\r\n />\r\n\r\n <div className=\"min-w-0 flex-1\">\r\n <div className=\"font-bold text-content-primary\">\r\n {option.title}\r\n </div>\r\n {option.description && (\r\n <div className=\"mt-1 text-content-primary\">\r\n {option.description}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n\r\n {helperText && (\r\n <span\r\n id={errorId}\r\n role=\"alert\"\r\n aria-live=\"assertive\"\r\n className=\"mt-1 text-xs tracking-wide text-feedback-danger-content\"\r\n >\r\n {helperText}\r\n </span>\r\n )}\r\n </fieldset>\r\n );\r\n}\r\n\r\n"],"mappings":"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","names":["classNames","FieldFrame","jsx","jsxs","classNames","_a","_b","_c","classNames","useField","useCallback","useId","useRef","useState","MdInfoOutline","Fragment","jsx","jsxs","normalizeSearchText","useField","useRef","useState","useId","useCallback","_a","_b","label","classNames","MdInfoOutline","useRef","classNames","useField","jsx","jsxs","_a","useField","useRef","classNames","classNames","useField","useCallback","useEffect","useRef","useState","MdOutlineKeyboardArrowDown","MdOutlineKeyboardArrowUp","MdSearch","PatternFormat","createPortal","jsx","jsxs","dialDigits","localDigits","local","useField","useRef","useState","useCallback","useEffect","classNames","MdOutlineKeyboardArrowUp","MdOutlineKeyboardArrowDown","PatternFormat","createPortal","MdSearch","classNames","useEffect","useMemo","useRef","useState","createPortal","jsx","jsxs","useMemo","useState","useRef","useEffect","classNames","createPortal","useEffect","useId","useRef","useState","jsx","jsxs","useState","useRef","useId","useEffect","jsx","jsx","jsxs","renderFlag","useField","useId","jsx","jsxs","useField","useId","classNames","FormikContext","getIn","useContext","useId","useMemo","useState","jsx","jsxs"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useBreakpoint.tsx","../src/components/tooltip/Tooltip.tsx","../src/components/tooltip/calculate-tooltip-position.ts","../src/components/tooltip/use-tooltip-relationship.ts","../src/utils/accessibility.ts","../src/utils/floating-layer.ts"],"sourcesContent":["\"use client\";\r\n\r\nimport { useState, useEffect } from \"react\";\r\n\r\nexport const breakpoints = {\r\n mobile: 640,\r\n tablet: 1024,\r\n desktop: 1440,\r\n tv: 1920,\r\n};\r\n\r\ntype Breakpoint = keyof typeof breakpoints;\r\n\r\nexport const useBreakpoint = (): Breakpoint => {\r\n const getBreakpoint = (width: number): Breakpoint => {\r\n const entries = Object.entries(breakpoints) as [Breakpoint, number][];\r\n return entries.reduce<Breakpoint>(\n (prev, [key, minWidth]) => (width >= minWidth ? key : prev),\n \"mobile\"\n );\r\n };\r\n\r\n const [currentBreakpoint, setCurrentBreakpoint] =\r\n useState<Breakpoint>(\"mobile\");\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const newBreakpoint = getBreakpoint(window.innerWidth);\r\n setCurrentBreakpoint(newBreakpoint);\r\n };\r\n\r\n handleResize();\r\n\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n };\r\n }, []);\r\n\r\n return currentBreakpoint;\r\n};\r\n","\"use client\";\r\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\r\nimport React, {\r\n useCallback,\r\n useEffect,\r\n useId,\r\n useLayoutEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport {\r\n calculateTooltipPosition,\r\n type TooltipPosition,\r\n} from \"./calculate-tooltip-position\";\r\nimport { useTooltipRelationship } from \"./use-tooltip-relationship\";\r\nimport { getFloatingLayerClass } from \"../../utils/floating-layer\";\r\n\r\nexport type TooltipProps = {\n targetRef: React.RefObject<HTMLElement | null>;\n content: React.ReactNode;\r\n visible: boolean;\r\n preferredPosition?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n};\r\n\r\nconst Tooltip: React.FC<TooltipProps> = ({\r\n targetRef,\r\n content,\r\n visible,\r\n preferredPosition = \"bottom\",\r\n}) => {\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n const arrowRef = useRef<HTMLDivElement>(null);\r\n const tooltipId = useId();\r\n const [coords, setCoords] = useState({ top: 0, left: 0 });\r\n const [finalPosition, setFinalPosition] =\r\n useState<TooltipPosition>(preferredPosition);\r\n const breakpoint = useBreakpoint();\r\n const isMobile = breakpoint === \"mobile\";\r\n\r\n useTooltipRelationship(targetRef, tooltipId, visible);\r\n\r\n const updatePosition = useCallback(() => {\r\n if (!targetRef.current || !tooltipRef.current) return;\r\n\r\n const target = targetRef.current.getBoundingClientRect();\r\n const tooltip = tooltipRef.current.getBoundingClientRect();\r\n\r\n if (isMobile) {\r\n setCoords({\r\n top: Math.max(8, (window.innerHeight - tooltip.height) / 2),\r\n left: Math.max(8, (window.innerWidth - tooltip.width) / 2),\r\n });\r\n setFinalPosition(\"bottom\");\r\n return;\r\n }\r\n\r\n const nextPosition = calculateTooltipPosition({\r\n target,\r\n tooltip,\r\n preferred: preferredPosition,\r\n viewportWidth: window.innerWidth,\r\n viewportHeight: window.innerHeight,\r\n });\r\n setCoords({ top: nextPosition.top, left: nextPosition.left });\r\n setFinalPosition(nextPosition.position);\r\n }, [isMobile, preferredPosition, targetRef]);\r\n\r\n useLayoutEffect(() => {\r\n if (!visible) return;\r\n updatePosition();\r\n\r\n window.addEventListener(\"resize\", updatePosition);\r\n window.addEventListener(\"scroll\", updatePosition, true);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", updatePosition);\r\n window.removeEventListener(\"scroll\", updatePosition, true);\r\n };\r\n }, [content, updatePosition, visible]);\r\n\r\n useLayoutEffect(() => {\r\n if (\n !arrowRef.current ||\n isMobile ||\n !targetRef.current ||\n !tooltipRef.current\n ) {\n return;\n }\n\n const arrow = arrowRef.current;\n const tooltip = tooltipRef.current;\n const rect = targetRef.current.getBoundingClientRect();\r\n const horizontalCenter = Math.min(\r\n Math.max(rect.left + rect.width / 2 - coords.left - 6, 8),\r\n Math.max(8, tooltip.offsetWidth - 20),\n );\r\n const verticalCenter = Math.min(\r\n Math.max(rect.top + rect.height / 2 - coords.top - 6, 8),\r\n Math.max(8, tooltip.offsetHeight - 20),\n );\r\n\r\n arrow.style.top = \"\";\r\n arrow.style.bottom = \"\";\r\n arrow.style.left = \"\";\r\n arrow.style.right = \"\";\r\n\r\n if (finalPosition === \"bottom\") {\r\n arrow.style.top = \"-6px\";\r\n arrow.style.left = `${horizontalCenter}px`;\r\n return;\r\n }\r\n\r\n if (finalPosition === \"top\") {\r\n arrow.style.bottom = \"-6px\";\r\n arrow.style.left = `${horizontalCenter}px`;\r\n return;\r\n }\r\n\r\n if (finalPosition === \"right\") {\r\n arrow.style.left = \"-6px\";\r\n arrow.style.top = `${verticalCenter}px`;\r\n return;\r\n }\r\n\r\n arrow.style.right = \"-6px\";\r\n arrow.style.top = `${verticalCenter}px`;\r\n }, [coords, finalPosition, isMobile, targetRef, visible]);\r\n\r\n useEffect(() => {\r\n if (!visible) return;\r\n\r\n tooltipRef.current?.animate([{ opacity: 0 }, { opacity: 1 }], {\r\n duration: 150,\r\n easing: \"ease-out\",\r\n });\r\n }, [visible]);\r\n\r\n if (typeof window === \"undefined\") return null;\r\n\r\n return ReactDOM.createPortal(\r\n visible ? (\r\n <div\r\n id={tooltipId}\r\n ref={tooltipRef}\r\n role=\"tooltip\"\r\n style={{ top: coords.top, left: coords.left }}\r\n className={`fixed ${getFloatingLayerClass(targetRef.current, \"tooltip\")} max-h-[calc(100dvh-1rem)] overflow-y-auto overscroll-contain break-words whitespace-normal rounded-sm bg-surface-tooltip px-3 py-2 text-sm text-content-inverse shadow-lg ${\r\n isMobile ? \"w-[90vw] max-w-[90vw]\" : \"w-max max-w-sm\"\r\n }`}\r\n >\r\n {content}\r\n\r\n {/* Setinha só no desktop */}\n {!isMobile && (\r\n <>\r\n {finalPosition === \"bottom\" && (\r\n <div\r\n ref={arrowRef}\r\n className=\"absolute h-0 w-0 border-b-[6px] border-l-[6px] border-r-[6px] border-b-surface-tooltip border-l-transparent border-r-transparent\"\r\n />\r\n )}\r\n {finalPosition === \"top\" && (\r\n <div\r\n ref={arrowRef}\r\n className=\"absolute h-0 w-0 border-l-[6px] border-r-[6px] border-t-[6px] border-l-transparent border-r-transparent border-t-surface-tooltip\"\r\n />\r\n )}\r\n {finalPosition === \"right\" && (\r\n <div\r\n ref={arrowRef}\r\n className=\"absolute h-0 w-0 border-b-[6px] border-r-[6px] border-t-[6px] border-b-transparent border-r-surface-tooltip border-t-transparent\"\r\n />\r\n )}\r\n {finalPosition === \"left\" && (\r\n <div\r\n ref={arrowRef}\r\n className=\"absolute h-0 w-0 border-b-[6px] border-l-[6px] border-t-[6px] border-b-transparent border-l-surface-tooltip border-t-transparent\"\r\n />\r\n )}\r\n </>\r\n )}\r\n </div>\r\n ) : null,\r\n document.body,\r\n );\r\n};\r\n\r\nexport default Tooltip;\r\n\r\n\r\n","export type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\ntype Rect = {\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n};\r\n\r\ntype Size = {\r\n width: number;\r\n height: number;\r\n};\r\n\r\ntype CalculateTooltipPositionParams = {\r\n target: Rect;\r\n tooltip: Size;\r\n preferred: TooltipPosition;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n gap?: number;\r\n margin?: number;\r\n};\r\n\r\ntype TooltipCoordinates = {\r\n top: number;\r\n left: number;\r\n position: TooltipPosition;\r\n};\r\n\r\nconst OPPOSITE_POSITION: Record<TooltipPosition, TooltipPosition> = {\r\n top: \"bottom\",\r\n bottom: \"top\",\r\n left: \"right\",\r\n right: \"left\",\r\n};\r\n\r\nfunction coordinatesFor(\r\n target: Rect,\r\n tooltip: Size,\r\n position: TooltipPosition,\r\n gap: number,\r\n) {\r\n if (position === \"top\") {\r\n return {\r\n top: target.top - tooltip.height - gap,\r\n left: target.left + target.width / 2 - tooltip.width / 2,\r\n };\r\n }\r\n if (position === \"bottom\") {\r\n return {\r\n top: target.bottom + gap,\r\n left: target.left + target.width / 2 - tooltip.width / 2,\r\n };\r\n }\r\n if (position === \"left\") {\r\n return {\r\n top: target.top + target.height / 2 - tooltip.height / 2,\r\n left: target.left - tooltip.width - gap,\r\n };\r\n }\r\n return {\r\n top: target.top + target.height / 2 - tooltip.height / 2,\r\n left: target.right + gap,\r\n };\r\n}\r\n\r\nfunction fitsViewport(\r\n coordinates: { top: number; left: number },\r\n tooltip: Size,\r\n viewportWidth: number,\r\n viewportHeight: number,\r\n margin: number,\r\n) {\r\n return (\r\n coordinates.top >= margin &&\r\n coordinates.left >= margin &&\r\n coordinates.top + tooltip.height <= viewportHeight - margin &&\r\n coordinates.left + tooltip.width <= viewportWidth - margin\r\n );\r\n}\r\n\r\nfunction clamp(value: number, minimum: number, maximum: number) {\r\n return Math.min(Math.max(value, minimum), Math.max(minimum, maximum));\r\n}\r\n\r\nexport function calculateTooltipPosition({\r\n target,\r\n tooltip,\r\n preferred,\r\n viewportWidth,\r\n viewportHeight,\r\n gap = 8,\r\n margin = 8,\r\n}: CalculateTooltipPositionParams): TooltipCoordinates {\r\n const positions = [\r\n preferred,\r\n OPPOSITE_POSITION[preferred],\r\n \"bottom\",\r\n \"top\",\r\n \"right\",\r\n \"left\",\r\n ].filter(\r\n (position, index, values): position is TooltipPosition =>\r\n values.indexOf(position) === index,\r\n );\r\n\r\n for (const position of positions) {\r\n const coordinates = coordinatesFor(target, tooltip, position, gap);\r\n if (\r\n fitsViewport(\r\n coordinates,\r\n tooltip,\r\n viewportWidth,\r\n viewportHeight,\r\n margin,\r\n )\r\n ) {\r\n return { ...coordinates, position };\r\n }\r\n }\r\n\r\n const fallback = coordinatesFor(target, tooltip, preferred, gap);\r\n return {\r\n top: clamp(fallback.top, margin, viewportHeight - tooltip.height - margin),\r\n left: clamp(fallback.left, margin, viewportWidth - tooltip.width - margin),\r\n position: preferred,\r\n };\r\n}\r\n\r\n","\"use client\";\r\n\r\nimport { useEffect, type RefObject } from \"react\";\r\nimport { mergeAriaDescribedBy } from \"../../utils/accessibility\";\r\n\r\nexport function useTooltipRelationship(\r\n targetRef: RefObject<HTMLElement | null> | undefined,\r\n tooltipId: string,\r\n visible: boolean,\r\n) {\r\n useEffect(() => {\r\n const target = targetRef?.current;\r\n if (!target || !visible) return;\r\n\r\n const previousDescription = target.getAttribute(\"aria-describedby\");\r\n target.setAttribute(\r\n \"aria-describedby\",\r\n mergeAriaDescribedBy(previousDescription, tooltipId) ?? tooltipId,\r\n );\r\n\r\n return () => {\r\n if (previousDescription) {\r\n target.setAttribute(\"aria-describedby\", previousDescription);\r\n } else {\r\n target.removeAttribute(\"aria-describedby\");\r\n }\r\n };\r\n }, [targetRef, tooltipId, visible]);\r\n}\r\n\r\n\r\n","export function mergeAriaDescribedBy(\r\n ...values: Array<string | null | undefined>\r\n) {\r\n const identifiers = values\r\n .flatMap((value) => value?.trim().split(/\\s+/) ?? [])\r\n .filter(Boolean);\r\n\r\n return identifiers.length > 0\r\n ? Array.from(new Set(identifiers)).join(\" \")\r\n : undefined;\r\n}\r\n","export type FloatingLayer = \"popover\" | \"tooltip\";\r\n\r\nexport function getFloatingLayerClass(\r\n trigger: HTMLElement | null | undefined,\r\n layer: FloatingLayer,\r\n) {\r\n if (trigger?.closest('[role=\"dialog\"][aria-modal=\"true\"]')) {\r\n return \"z-modal-overlay\";\r\n }\r\n\r\n return layer === \"popover\" ? \"z-popover\" : \"z-tooltip\";\r\n}\r\n"],"mappings":"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","names":["useEffect","useState","useEffect","useEffect","useState","useEffect"]}
|