@aspprev/versi-ds 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/barcode/barcode.tsx","../src/components/file-upload/FileDropzone.tsx","../src/components/file-upload/FileUploadProgress.tsx","../src/components/file-upload/FileList.tsx","../src/components/file-upload/FileViewer.tsx","../src/components/qr-code/QRCode.tsx"],"sourcesContent":["\"use client\";\n\nimport JsBarcode from \"jsbarcode\";\nimport { useEffect, useRef } from \"react\";\n\nconst linhaDigitavelParaCodigoBarras = (linha: string): string => {\n const d = linha.replace(/\\D/g, \"\");\n\n const banco = d.substring(0, 3);\n const moeda = d.substring(3, 4);\n const campo1 = d.substring(4, 9);\n const campo2 = d.substring(10, 20);\n const campo3 = d.substring(21, 31);\n const digitoGeral = d.substring(32, 33);\n const vencimento = d.substring(33, 37);\n const valor = d.substring(37, 47);\n\n return (\n banco + moeda + digitoGeral + vencimento + valor + campo1 + campo2 + campo3\n );\n};\n\nexport interface BoletoBarCodeProps {\n linhaDigitavel: string;\n}\n\nexport function BoletoBarCode({ linhaDigitavel }: BoletoBarCodeProps) {\n const svgRef = useRef<SVGSVGElement>(null);\n\n useEffect(() => {\n if (!svgRef.current) return;\n\n try {\n const codigoBarras = linhaDigitavelParaCodigoBarras(linhaDigitavel);\n\n JsBarcode(svgRef.current, codigoBarras, {\n format: \"ITF\",\n lineColor: \"#000000\",\n background: \"#FFFFFF\",\n displayValue: false,\n width: 2,\n height: 80,\n margin: 0,\n });\n } catch (error) {\n console.error(\"Erro ao gerar código de barras:\", error);\n }\n }, [linhaDigitavel]);\n\n return (\n <div className=\"w-full space-y-3 bg-surface-card\">\n <svg ref={svgRef} className=\"w-full\" />\n <p className=\"text-center font-mono text-sm tracking-widest text-content-primary\">\n {linhaDigitavel}\n </p>\n </div>\n );\n}\n\n","\"use client\";\n\nimport classNames from \"classnames\";\nimport { useId, useRef, useState, type ChangeEvent, type DragEvent, type ReactNode } from \"react\";\n\nexport interface FileRejection {\n file: File;\n reason: \"type\" | \"size\" | \"count\";\n message: string;\n}\n\nexport interface FileDropzoneProps {\n accept?: string;\n multiple?: boolean;\n maxFiles?: number;\n maxSize?: number;\n disabled?: boolean;\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n className?: string;\n onFilesAccepted?: (files: File[]) => void;\n onFilesRejected?: (rejections: FileRejection[]) => void;\n}\n\nconst acceptsFile = (file: File, accept?: string) => {\n if (!accept?.trim()) return true;\n return accept.split(\",\").map((item) => item.trim().toLowerCase()).some((rule) => {\n if (rule.endsWith(\"/*\")) return file.type.toLowerCase().startsWith(rule.slice(0, -1));\n if (rule.startsWith(\".\")) return file.name.toLowerCase().endsWith(rule);\n return file.type.toLowerCase() === rule;\n });\n};\n\nexport function FileDropzone({\n accept,\n multiple = false,\n maxFiles = multiple ? Number.POSITIVE_INFINITY : 1,\n maxSize,\n disabled = false,\n label = \"Selecionar arquivos\",\n hint = \"Arraste e solte os arquivos aqui ou use o teclado para selecionar.\",\n error,\n className,\n onFilesAccepted,\n onFilesRejected,\n}: FileDropzoneProps) {\n const inputId = useId();\n const messageId = `${inputId}-message`;\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const processFiles = (fileList: FileList | File[]) => {\n if (disabled) return;\n const selected = Array.from(fileList);\n const accepted: File[] = [];\n const rejected: FileRejection[] = [];\n selected.forEach((file, index) => {\n const reason = !acceptsFile(file, accept)\n ? \"type\"\n : maxSize !== undefined && file.size > maxSize\n ? \"size\"\n : index >= maxFiles\n ? \"count\"\n : undefined;\n if (!reason) accepted.push(file);\n else {\n const message = reason === \"type\"\n ? \"Tipo de arquivo não permitido.\"\n : reason === \"size\"\n ? \"O arquivo excede o tamanho máximo permitido.\"\n : \"Quantidade máxima de arquivos excedida.\";\n rejected.push({ file, reason, message });\n }\n });\n if (!multiple && accepted.length > 1) accepted.splice(1);\n if (accepted.length) onFilesAccepted?.(accepted);\n if (rejected.length) onFilesRejected?.(rejected);\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.files) processFiles(event.target.files);\n event.target.value = \"\";\n };\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setIsDragging(false);\n processFiles(event.dataTransfer.files);\n };\n const message = error || hint;\n\n return (\n <div\n onDragEnter={(event) => { event.preventDefault(); if (!disabled) setIsDragging(true); }}\n onDragOver={(event) => event.preventDefault()}\n onDragLeave={(event) => { if (event.currentTarget === event.target) setIsDragging(false); }}\n onDrop={handleDrop}\n className={classNames(\n \"flex min-h-32 w-full cursor-pointer flex-col items-center justify-center rounded-sm border-2 border-dashed p-6 text-center transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\",\n isDragging ? \"border-action-primary bg-primary-1/10\" : \"border-border-default bg-surface-card hover:border-border-strong\",\n disabled && \"cursor-not-allowed opacity-60\",\n Boolean(error) && \"border-field-border-error\",\n className,\n )}\n >\n <label htmlFor={inputId} className=\"flex cursor-pointer flex-col items-center focus-within:outline focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-focus-ring\">\n <span className=\"font-semibold text-content-primary\">{label}</span>\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleInputChange}\n aria-describedby={message ? messageId : undefined}\n className=\"sr-only\"\n />\n </label>\n {message && <span id={messageId} className={classNames(\"mt-1 text-sm\", error ? \"text-field-assistive-error\" : \"text-content-secondary\")}>{message}</span>}\n </div>\n );\n}\n\nexport default FileDropzone;\n","\"use client\";\n\nimport classNames from \"classnames\";\n\nexport type FileUploadProgressStatus = \"idle\" | \"uploading\" | \"success\" | \"error\";\n\nexport interface FileUploadProgressProps {\n value?: number | null;\n label?: string;\n status?: FileUploadProgressStatus;\n showValue?: boolean;\n className?: string;\n}\n\nexport function FileUploadProgress({\n value,\n label = \"Progresso do upload\",\n status = \"uploading\",\n showValue = true,\n className,\n}: FileUploadProgressProps) {\n const resolvedValue = typeof value === \"number\"\n ? Math.min(100, Math.max(0, value))\n : undefined;\n const statusText = status === \"success\"\n ? \"Concluído\"\n : status === \"error\"\n ? \"Erro\"\n : resolvedValue === undefined\n ? \"Em andamento\"\n : `${Math.round(resolvedValue)}%`;\n\n return (\n <div className={classNames(\"w-full\", className)}>\n <div className=\"mb-1 flex items-center justify-between gap-2 text-xs text-content-secondary\">\n <span>{label}</span>\n {showValue && <span aria-hidden=\"true\">{statusText}</span>}\n </div>\n <div\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={resolvedValue === undefined ? undefined : 0}\n aria-valuemax={resolvedValue === undefined ? undefined : 100}\n aria-valuenow={resolvedValue}\n aria-valuetext={statusText}\n className=\"h-2 w-full overflow-hidden rounded-full bg-surface-muted\"\n >\n <div\n className={classNames(\n \"h-full rounded-full transition-[width] duration-200\",\n status === \"error\" ? \"bg-feedback-danger-strong\" : \"bg-action-primary\",\n resolvedValue === undefined ? \"w-1/2 animate-pulse\" : undefined,\n )}\n style={resolvedValue === undefined ? undefined : { width: `${resolvedValue}%` }}\n />\n </div>\n <span className=\"sr-only\" role=\"status\" aria-live=\"polite\">{statusText}</span>\n </div>\n );\n}\n\nexport default FileUploadProgress;\n","\"use client\";\n\nimport classNames from \"classnames\";\nimport { MdClose, MdRefresh } from \"react-icons/md\";\nimport FileUploadProgress, { type FileUploadProgressStatus } from \"./FileUploadProgress\";\n\nexport type FileUploadItemStatus = FileUploadProgressStatus | \"pending\";\n\nexport interface FileUploadItem {\n id?: string;\n file: File;\n progress?: number | null;\n status?: FileUploadItemStatus;\n error?: string;\n}\n\nexport interface FileListProps {\n files: FileUploadItem[];\n accessibleName?: string;\n onRemove?: (item: FileUploadItem, index: number) => void;\n onRetry?: (item: FileUploadItem, index: number) => void;\n className?: string;\n}\n\nconst fileId = (item: FileUploadItem, index: number) => item.id ?? `${item.file.name}-${item.file.size}-${item.file.lastModified}-${index}`;\n\nexport function FileList({ files, accessibleName = \"Arquivos selecionados\", onRemove, onRetry, className }: FileListProps) {\n return (\n <ul aria-label={accessibleName} className={classNames(\"w-full space-y-2\", className)}>\n {files.map((item, index) => {\n const status = item.status ?? \"pending\";\n const progressStatus: FileUploadProgressStatus = status === \"pending\" ? \"idle\" : status;\n return (\n <li key={fileId(item, index)} className=\"flex min-w-0 flex-wrap items-center gap-3 rounded-sm border border-border-default bg-surface-card p-3\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-semibold text-content-primary\" title={item.file.name}>{item.file.name}</p>\n <p className=\"text-xs text-content-secondary\">{Math.ceil(item.file.size / 1024)} KB</p>\n {(status === \"uploading\" || status === \"success\" || status === \"error\") && (\n <FileUploadProgress value={item.progress} status={progressStatus} label={`Progresso de ${item.file.name}`} />\n )}\n {item.error && <p role=\"alert\" className=\"mt-1 text-sm text-field-assistive-error\">{item.error}</p>}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {status === \"error\" && onRetry && <button type=\"button\" onClick={() => onRetry(item, index)} aria-label={`Tentar novamente ${item.file.name}`} className=\"flex h-11 w-11 items-center justify-center rounded-sm text-content-secondary hover:bg-surface-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-focus-ring\"><MdRefresh aria-hidden=\"true\" className=\"h-5 w-5\" /></button>}\n {onRemove && <button type=\"button\" onClick={() => onRemove(item, index)} aria-label={`Remover ${item.file.name}`} className=\"flex h-11 w-11 items-center justify-center rounded-sm text-content-secondary hover:bg-surface-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-focus-ring\"><MdClose aria-hidden=\"true\" className=\"h-5 w-5\" /></button>}\n </div>\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport default FileList;\n","\"use client\";\n\nimport classNames from \"classnames\";\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\n\nexport type FileViewerSource = string | Blob | {\n url?: string;\n blob?: Blob;\n contentType?: string;\n fileName?: string;\n};\n\nexport interface FileViewerProps {\n source?: FileViewerSource;\n fileName?: string;\n contentType?: string;\n loading?: boolean;\n error?: ReactNode;\n onDownload?: () => void;\n fallback?: ReactNode;\n title?: string;\n className?: string;\n}\n\nconst extensionType = (fileName?: string) => {\n const extension = fileName?.split(\".\").pop()?.toLowerCase();\n if (extension === \"pdf\") return \"application/pdf\";\n if ([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\"].includes(extension ?? \"\")) return `image/${extension === \"jpg\" ? \"jpeg\" : extension}`;\n if ([\"txt\", \"csv\", \"json\", \"xml\", \"md\"].includes(extension ?? \"\")) return \"text/plain\";\n return \"application/octet-stream\";\n};\n\nexport function FileViewer({ source, fileName, contentType, loading = false, error, onDownload, fallback, title = fileName ?? \"Visualização do arquivo\", className }: FileViewerProps) {\n const [objectUrl, setObjectUrl] = useState<string>();\n const [textContent, setTextContent] = useState<string>();\n const resolved = typeof source === \"object\" && source !== null && !(source instanceof Blob) ? source : undefined;\n const blob = source instanceof Blob ? source : resolved?.blob;\n const url = typeof source === \"string\" ? source : resolved?.url;\n const resolvedName = fileName ?? resolved?.fileName;\n const resolvedType = contentType ?? resolved?.contentType ?? blob?.type ?? extensionType(resolvedName);\n\n useEffect(() => {\n if (!blob) {\n setObjectUrl(undefined);\n setTextContent(undefined);\n return;\n }\n const nextUrl = URL.createObjectURL(blob);\n setObjectUrl(nextUrl);\n let active = true;\n if (resolvedType.startsWith(\"text/\") || resolvedType === \"application/json\") {\n blob.text().then((text) => { if (active) setTextContent(text); });\n } else {\n setTextContent(undefined);\n }\n return () => { active = false; URL.revokeObjectURL(nextUrl); };\n }, [blob, resolvedType]);\n\n const displayUrl = objectUrl ?? url;\n const downloadUrl = useMemo(() => displayUrl, [displayUrl]);\n if (loading) return <div className={classNames(\"flex min-h-32 items-center justify-center rounded-sm border border-border-default bg-surface-card p-6 text-content-secondary\", className)} role=\"status\" aria-live=\"polite\">Carregando arquivo…</div>;\n if (error) return <div className={classNames(\"rounded-sm border border-field-border-error bg-surface-card p-4 text-field-assistive-error\", className)} role=\"alert\">{error}</div>;\n if (!displayUrl && !textContent) return <div className={classNames(\"rounded-sm border border-border-default bg-surface-card p-4 text-content-secondary\", className)}>{fallback ?? \"Arquivo indisponível.\"}</div>;\n\n const download = onDownload ? <button type=\"button\" onClick={onDownload} className=\"min-h-11 rounded-sm border border-border-default px-3 text-sm font-semibold text-content-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-focus-ring\">Baixar arquivo</button> : downloadUrl ? <a href={downloadUrl} download={resolvedName} className=\"inline-flex min-h-11 items-center rounded-sm border border-border-default px-3 text-sm font-semibold text-content-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-focus-ring\">Baixar arquivo</a> : null;\n\n return (\n <div className={classNames(\"flex min-w-0 flex-col gap-3 rounded-sm border border-border-default bg-surface-card p-3\", className)}>\n {resolvedType.startsWith(\"image/\") && displayUrl && <img src={displayUrl} alt={title} className=\"max-h-[70vh] max-w-full object-contain\" />}\n {resolvedType === \"application/pdf\" && displayUrl && <iframe src={displayUrl} title={title} className=\"min-h-[32rem] w-full border-0\" />}\n {(resolvedType.startsWith(\"text/\") || resolvedType === \"application/json\") && (textContent !== undefined ? <pre className=\"max-h-[70vh] overflow-auto whitespace-pre-wrap break-words text-sm text-content-primary\">{textContent}</pre> : displayUrl && <iframe src={displayUrl} title={title} sandbox=\"\" className=\"min-h-64 w-full border-0\" />)}\n {!resolvedType.startsWith(\"image/\") && resolvedType !== \"application/pdf\" && !resolvedType.startsWith(\"text/\") && resolvedType !== \"application/json\" && (fallback ?? <p className=\"text-content-secondary\">Este tipo de arquivo não possui visualização disponível.</p>)}\n {download && <div className=\"flex justify-end\">{download}</div>}\n </div>\n );\n}\n\nexport default FileViewer;\n","\"use client\";\n\nimport QRCodeGenerator from \"qrcode\";\nimport { useEffect, useState, type HTMLAttributes } from \"react\";\nimport classNames from \"classnames\";\n\nexport type QRCodeErrorCorrectionLevel = \"L\" | \"M\" | \"Q\" | \"H\";\n\nexport interface QRCodeProps extends Omit<HTMLAttributes<HTMLDivElement>, \"color\"> {\n value: string;\n size?: number;\n level?: QRCodeErrorCorrectionLevel;\n includeMargin?: boolean;\n fgColor?: string;\n bgColor?: string;\n ariaLabel?: string;\n description?: string;\n}\n\nfunction getRelativeLuminance(color: string) {\n const match = color.trim().match(/^#([\\da-f]{6})$/i);\n if (!match) return null;\n\n const channels = [0, 2, 4].map((offset) => Number.parseInt(match[1].slice(offset, offset + 2), 16) / 255);\n const linear = channels.map((channel) => (\n channel <= 0.03928 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4\n ));\n\n return 0.2126 * linear[0] + 0.7152 * linear[1] + 0.0722 * linear[2];\n}\n\nfunction resolveAccessibleColors(fgColor: string, bgColor: string) {\n const foregroundLuminance = getRelativeLuminance(fgColor);\n const backgroundLuminance = getRelativeLuminance(bgColor);\n\n if (foregroundLuminance === null || backgroundLuminance === null) {\n return { dark: fgColor, light: bgColor };\n }\n\n const lighter = Math.max(foregroundLuminance, backgroundLuminance);\n const darker = Math.min(foregroundLuminance, backgroundLuminance);\n const contrastRatio = (lighter + 0.05) / (darker + 0.05);\n\n return contrastRatio >= 3\n ? { dark: fgColor, light: bgColor }\n : { dark: \"#000000\", light: \"#FFFFFF\" };\n}\n\nexport function QRCode({\n value,\n size = 192,\n level = \"M\",\n includeMargin = true,\n fgColor = \"#000000\",\n bgColor = \"#FFFFFF\",\n ariaLabel = \"Código QR\",\n description,\n className,\n ...rest\n}: QRCodeProps) {\n const [dataUrl, setDataUrl] = useState<string | null>(null);\n const descriptionId = description ? `${rest.id ?? \"qr-code\"}-description` : undefined;\n const colors = resolveAccessibleColors(fgColor, bgColor);\n\n useEffect(() => {\n let active = true;\n setDataUrl(null);\n QRCodeGenerator.toDataURL(value, {\n width: size,\n margin: includeMargin ? 4 : 0,\n errorCorrectionLevel: level,\n color: colors,\n })\n .then((url) => { if (active) setDataUrl(url); })\n .catch(() => { if (active) setDataUrl(null); });\n return () => { active = false; };\n }, [bgColor, fgColor, includeMargin, level, size, value]);\n\n return (\n <div\n {...rest}\n role=\"img\"\n aria-label={ariaLabel}\n aria-describedby={descriptionId}\n className={classNames(\"inline-flex max-w-full flex-col items-center gap-2\", className)}\n >\n {dataUrl ? (\n <img src={dataUrl} alt=\"\" width={size} height={size} className=\"h-auto max-w-full\" />\n ) : (\n <span\n aria-hidden=\"true\"\n className=\"inline-block animate-pulse rounded-sm bg-surface-muted\"\n style={{ width: size, height: size, maxWidth: \"100%\" }}\n />\n )}\n {description && <span id={descriptionId} className=\"sr-only\">{description}</span>}\n </div>\n );\n}\n\nexport default QRCode;\n"],"mappings":"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","names":["useRef","jsx","jsxs","message","classNames","jsx","jsxs","classNames","jsx","jsxs","classNames","classNames","useEffect","useState","jsx","jsxs","useEffect","useState","classNames","jsx","jsxs","_a","useState","useEffect","classNames"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Modal/Modal.tsx","../src/components/InputSwitch/InputSwitch.tsx","../src/components/InputSwitch/InputSwitch.style.ts","../src/components/accessibility-preferences/AccessibilityPreferencesPanel.tsx","../src/components/accessibility-preferences/HighContrastToggle.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { Fragment } from \"react\";\nimport {\n MdCheckCircle,\n MdCancel,\n MdDeleteForever,\n MdOutlineClose,\n MdDownload,\n MdSend,\n MdErrorOutline,\n} from \"react-icons/md\";\nimport {\n Transition,\n Dialog,\n TransitionChild,\n DialogTitle,\n DialogPanel,\n} from \"@headlessui/react\";\n\nexport type ModalProps = {\n children?: React.ReactNode;\n isOpen: boolean;\n title?: string;\n onClose: () => void;\n showIcon?: boolean;\n variant?:\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"delete\"\n | \"downloading\"\n | \"sendMessage\";\n size?: \"small\" | \"medium\" | \"large\" | \"viewer\" | \"full\";\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst modalMaxWidths = {\n small: \"28rem\",\n medium: \"42rem\",\n large: \"56rem\",\n viewer: \"72rem\",\n full: \"calc(100vw - 40px)\",\n} as const;\n\nconst Modal = ({\n children,\n isOpen,\n onClose,\n className,\n style,\n title,\n showIcon = true,\n variant = \"success\",\n size = \"small\",\n}: ModalProps) => {\n const variantStyles = {\n success: {\n bgColor: \"bg-feedback-success-soft\",\n icon: <MdCheckCircle className=\"h-6 w-6 text-feedback-success-content\" />,\n },\n error: {\n bgColor: \"bg-feedback-danger-soft\",\n icon: <MdCancel className=\"h-6 w-6 text-feedback-danger-content\" />,\n },\n warning: {\n bgColor: \"bg-feedback-warning-soft\",\n icon: (\n <MdErrorOutline className=\"h-6 w-6 text-feedback-warning-content\" />\n ),\n },\n downloading: {\n bgColor: \"bg-feedback-info-soft\",\n icon: <MdDownload className=\"h-6 w-6 text-feedback-info-content\" />,\n },\n delete: {\n bgColor: \"bg-feedback-info-soft\",\n icon: <MdDeleteForever className=\"h-6 w-6 text-feedback-info-content\" />,\n },\n sendMessage: {\n bgColor: \"bg-feedback-info-soft\",\n icon: <MdSend className=\"h-6 w-6 text-feedback-info-content\" />,\n },\n };\n\n const { bgColor, icon } = variantStyles[variant];\n\n return (\n <Transition appear show={isOpen} as={Fragment}>\n <Dialog\n as=\"div\"\n className=\"relative z-modal gap-0\"\n aria-label={title ? undefined : \"Janela de diálogo\"}\n onClose={onClose}\n >\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-overlay/50 backdrop-blur-[1px]\" />\n </TransitionChild>\n <div className=\"portal-safe-modal fixed inset-0 overflow-y-auto gap-0\">\n <div className=\"flex min-h-full items-center justify-center p-5 gap-0\">\n <DialogPanel\n className={`relative flex max-h-[calc(100dvh-40px)] max-w-[calc(100vw-40px)] flex-col space-y-5 overflow-x-hidden overflow-y-auto rounded-sm bg-surface-card p-5 shadow-md transition-all ${className ?? \"\"}`}\n style={{\n ...style,\n width: \"100%\",\n maxWidth: modalMaxWidths[size],\n }}\n >\n <div className=\"absolute right-5 top-5 flex items-center justify-end\">\n <button\n type=\"button\"\n aria-label=\"Fechar janela\"\n onClick={onClose}\n className=\"inline-flex h-6 w-6 touch-manipulation items-center justify-center rounded-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\n >\n <MdOutlineClose\n aria-hidden=\"true\"\n size={20}\n className=\"text-content-secondary\"\n />\n </button>\n </div>\n\n {showIcon && (\n <div aria-hidden=\"true\" className=\"flex justify-center p-0\">\n <div\n className={`inline-flex items-center justify-center w-12 h-12 rounded-full ${bgColor}`}\n >\n {icon}\n </div>\n </div>\n )}\n\n <div className=\"space-y-3\">\n {title && (\n <DialogTitle\n as=\"h3\"\n className=\"text-xl font-extrabold text-center\"\n >\n {title}\n </DialogTitle>\n )}\n {children}\n </div>\n </DialogPanel>\n </div>\n </div>\n </Dialog>\n </Transition>\n );\n};\n\nexport default Modal;\n\n","\"use client\";\n\nimport {\n Switch as HeadlessSwitch,\n} from \"@headlessui/react\";\nimport React, { useState } from \"react\";\nimport useStyle from \"./InputSwitch.style\";\nimport { MdCheck, MdOutlineClose, MdSunny, MdNightsStay } from \"react-icons/md\";\nimport type { IconType } from \"react-icons\";\n\ntype NativeSwitchProps = {\n id?: string;\n name?: string;\n value?: string;\n form?: string;\n autoFocus?: boolean;\n tabIndex?: number;\n} & (\n | {\n \"aria-label\": string;\n \"aria-labelledby\"?: never;\n }\n | {\n \"aria-label\"?: never;\n \"aria-labelledby\": string;\n }\n);\n\nexport type InputSwitchProps = {\n defaultEnable?: boolean;\n checked?: boolean;\n variant?: \"primary\" | \"secondary\" | \"tertiary\" | \"contract\" | \"theme\";\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n onChange?: (enabled: boolean) => void;\n icon?: IconType;\n} & NativeSwitchProps;\n\nexport type InputSwitchStyleProps = Pick<\n InputSwitchProps,\n \"variant\" | \"disabled\" | \"size\"\n> & {\n enabled: boolean;\n};\n\nexport type SwitchProps = InputSwitchProps;\n\nconst InputSwitch: React.FC<InputSwitchProps> = ({\n defaultEnable: enabledByDefault,\n variant = \"primary\",\n size = \"md\",\n disabled,\n onChange,\n checked,\n icon: Icon,\n ...rest\n}) => {\n const [enabled, setEnabled] = useState(enabledByDefault ?? false);\n const resolvedEnabled = typeof checked === \"boolean\" ? checked : enabled;\n const style = useStyle({\n variant,\n enabled: resolvedEnabled,\n disabled,\n size,\n });\n\n const toggle = () => {\n const newState = !resolvedEnabled;\n if (typeof checked !== \"boolean\") {\n setEnabled(newState);\n }\n onChange?.(newState);\n };\n return (\n <HeadlessSwitch\n checked={resolvedEnabled}\n onChange={toggle}\n disabled={disabled ?? false}\n className={style.Container}\n {...rest}\n >\n {variant !== \"contract\" && variant !== \"theme\" && (\n <span className={style.Switch}>\n {Icon && <Icon aria-hidden=\"true\" className={style.Icon} />}\n </span>\n )}\n {variant === \"contract\" && (\n <span className={style.Switch}>\n {resolvedEnabled && (\n <MdCheck className={style.Icon} aria-disabled={disabled} />\n )}\n {resolvedEnabled || (\n <MdOutlineClose className={style.Icon} aria-disabled={disabled} />\n )}\n </span>\n )}\n\n {variant === \"theme\" && (\n <span className={style.SwitchTheme}>\n {resolvedEnabled && (\n <MdNightsStay\n className={style.IconTheme}\n aria-disabled={disabled}\n />\n )}\n {resolvedEnabled || (\n <MdSunny className={style.IconTheme} aria-disabled={disabled} />\n )}\n </span>\n )}\n </HeadlessSwitch>\n );\n};\n\nexport default InputSwitch;\n\n","import { cva } from \"class-variance-authority\";\nimport classNames from \"classnames\";\nimport { InputSwitchProps, InputSwitchStyleProps } from \"./InputSwitch\";\n\nconst SIZE_STYLES: Record<\n NonNullable<InputSwitchProps[\"size\"]>,\n {\n container: string;\n knob: string;\n icon: string;\n }\n> = {\n sm: {\n container:\n \"h-[1rem] w-[1.75rem] [--switch-padding:2px] [--switch-knob-size:0.75rem] [--switch-width:1.75rem]\",\n knob: \"h-[var(--switch-knob-size)] w-[var(--switch-knob-size)]\",\n icon: \"h-2 w-2\",\n },\n md: {\n container:\n \"h-[1.25rem] w-[3rem] [--switch-padding:2px] [--switch-knob-size:1rem] [--switch-width:3rem]\",\n knob: \"h-[var(--switch-knob-size)] w-[var(--switch-knob-size)]\",\n icon: \"h-3 w-3\",\n },\n lg: {\n container:\n \"h-[1.5rem] w-[3.5rem] [--switch-padding:2px] [--switch-knob-size:1.25rem] [--switch-width:3.5rem]\",\n knob: \"h-[var(--switch-knob-size)] w-[var(--switch-knob-size)]\",\n icon: \"h-4 w-4\",\n },\n};\n\nconst getInputSwitchStyles = ({\n variant,\n enabled,\n disabled,\n size = \"md\",\n}: InputSwitchStyleProps) => {\n const sizeStyle = SIZE_STYLES[size];\n const containerVariant = cva(\n classNames(\n \"switch-control relative inline-flex shrink-0 items-center rounded-full transition-colors before:absolute before:left-1/2 before:top-1/2 before:h-5 before:w-full before:min-w-5 before:-translate-x-1/2 before:-translate-y-1/2 before:content-[''] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-1 disabled:bg-switch-track-disabled\",\n sizeStyle.container,\n { \"pointer-events-none\": disabled },\n ),\n {\n variants: {\n variant: {\n primary: classNames(\n \"[--switch-state-layer:var(--switch-track-primary-on)]\",\n { \"bg-switch-track-primary-on\": enabled },\n { \"bg-switch-track-off\": !enabled },\n ),\n secondary: classNames(\n \"[--switch-state-layer:var(--switch-track-secondary-on)]\",\n { \"bg-switch-track-secondary-on\": enabled },\n { \"bg-switch-track-off\": !enabled },\n ),\n tertiary: classNames(\n \"[--switch-state-layer:var(--switch-track-tertiary-on)]\",\n { \"bg-switch-track-tertiary-on\": enabled },\n { \"bg-switch-track-off\": !enabled },\n ),\n contract: classNames(\n enabled\n ? \"bg-switch-track-contract-on [--switch-state-layer:var(--switch-track-contract-on)]\"\n : \"bg-switch-track-contract-off [--switch-state-layer:var(--switch-track-contract-off)]\",\n ),\n theme: classNames(\n enabled\n ? \"bg-switch-track-theme-on [--switch-state-layer:var(--switch-track-theme-on)]\"\n : \"bg-switch-track-theme-off [--switch-state-layer:var(--switch-track-theme-off)]\",\n ),\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n },\n );\n const containerClasses = containerVariant({ variant });\n\n const switchClasses = classNames(\n \"switch-knob absolute left-[var(--switch-padding)] top-1/2 flex items-center justify-center rounded-full transition-[transform,box-shadow,background-color] duration-200 ease-in-out -translate-y-1/2\",\n sizeStyle.knob,\n disabled ? \"bg-switch-knob-disabled\" : \"bg-switch-knob\",\n enabled\n ? \"translate-x-[calc(var(--switch-width)-var(--switch-knob-size)-var(--switch-padding)*2)]\"\n : \"translate-x-0\",\n );\n\n const switchClassesTheme = classNames(\n \"switch-knob absolute left-[var(--switch-padding)] top-1/2 flex items-center justify-center rounded-full transition-[transform,box-shadow,background-color] duration-200 ease-in-out -translate-y-1/2\",\n sizeStyle.knob,\n {\n \"bg-switch-knob-theme-on\": enabled && !disabled,\n \"bg-switch-knob\": !enabled && !disabled,\n \"bg-switch-knob-disabled\": disabled,\n \"translate-x-[calc(var(--switch-width)-var(--switch-knob-size)-var(--switch-padding)*2)]\":\n enabled,\n \"translate-x-0\": !enabled,\n },\n );\n\n const iconClasses = classNames(\n \"aria-disabled:text-font-disabled\",\n sizeStyle.icon,\n { \"text-feedback-success-content\": enabled && !disabled },\n { \"text-feedback-danger-content\": !enabled && !disabled },\n { \"text-content-disabled\": disabled },\n );\n\n const iconClassesTheme = classNames(\n \"aria-disabled:text-font-disabled\",\n sizeStyle.icon,\n { \"text-content-inverse\": enabled && !disabled },\n { \"text-feedback-warning-content\": !enabled && !disabled },\n { \"text-content-disabled\": disabled },\n );\n\n return {\n Icon: iconClasses,\n IconTheme: iconClassesTheme,\n Switch: switchClasses,\n SwitchTheme: switchClassesTheme,\n Container: containerClasses,\n };\n};\n\nexport default getInputSwitchStyles;\n\n","\"use client\";\n\nimport { useId, useState } from \"react\";\nimport {\n MdAccessibilityNew,\n MdAnimation,\n MdCenterFocusStrong,\n MdContrast,\n MdLink,\n MdPalette,\n MdRestartAlt,\n MdTextFields,\n} from \"react-icons/md\";\nimport InputSwitch from \"../InputSwitch/InputSwitch\";\nimport Modal from \"../Modal/Modal\";\n\nexport type AccessibilityColorScheme = \"system\" | \"light\" | \"dark\";\nexport type AccessibilityHighContrastTheme = \"light\" | \"dark\";\nexport type AccessibilityFontScale = \"standard\" | \"large\" | \"extra-large\";\n\nexport interface AccessibilityPreferences {\n colorScheme: AccessibilityColorScheme;\n highContrast: boolean;\n highContrastTheme: AccessibilityHighContrastTheme;\n fontScale: AccessibilityFontScale;\n reduceMotion: boolean;\n emphasizeFocus: boolean;\n underlineLinks: boolean;\n}\n\nexport const DEFAULT_ACCESSIBILITY_PREFERENCES: AccessibilityPreferences = {\n colorScheme: \"light\",\n highContrast: false,\n highContrastTheme: \"light\",\n fontScale: \"standard\",\n reduceMotion: false,\n emphasizeFocus: false,\n underlineLinks: false,\n};\n\nexport type AccessibilityPreferencesPanelProps = {\n preferences: AccessibilityPreferences;\n onPreferencesChange: (\n changes: Partial<AccessibilityPreferences>,\n ) => void;\n onReset?: () => void;\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n showTrigger?: boolean;\n triggerLabel?: string;\n className?: string;\n};\n\nconst readingOptions = [\n {\n key: \"reduceMotion\" as const,\n label: \"Reduzir animações\",\n description: \"Minimiza animações, transições e rolagens suaves.\",\n Icon: MdAnimation,\n },\n {\n key: \"emphasizeFocus\" as const,\n label: \"Destacar foco\",\n description: \"Evidencia o elemento selecionado durante o uso do teclado.\",\n Icon: MdCenterFocusStrong,\n },\n {\n key: \"underlineLinks\" as const,\n label: \"Sublinhar links\",\n description: \"Mantém links de texto sublinhados fora do foco.\",\n Icon: MdLink,\n },\n];\n\nconst sectionClass =\n \"rounded-md border border-border-default bg-surface-subtle p-4 tablet:p-5\";\nconst choiceClass =\n \"flex min-h-11 cursor-pointer gap-3 rounded-sm border border-border-default bg-surface-card p-3 text-content-primary transition-colors hover:border-border-strong hover:bg-surface-muted\";\n\nexport default function AccessibilityPreferencesPanel({\n preferences,\n onPreferencesChange,\n onReset,\n isOpen: controlledOpen,\n onOpenChange,\n showTrigger = true,\n triggerLabel = \"Preferências de acessibilidade\",\n className,\n}: AccessibilityPreferencesPanelProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const [announcement, setAnnouncement] = useState(\"\");\n const titleId = useId();\n const isOpen = controlledOpen ?? internalOpen;\n const setOpen = (open: boolean) => {\n if (controlledOpen === undefined) setInternalOpen(open);\n onOpenChange?.(open);\n };\n const update = (changes: Partial<AccessibilityPreferences>, message: string) => {\n onPreferencesChange(changes);\n setAnnouncement(message);\n };\n const isDark = preferences.colorScheme === \"dark\";\n\n return (\n <>\n {showTrigger && (\n <button\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n onClick={() => setOpen(true)}\n className={`inline-flex min-h-11 items-center justify-center gap-2 rounded-sm border-2 border-action-primary-content bg-action-primary px-3 text-sm font-bold text-action-primary-content shadow-sm hover:bg-action-primary-hover focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ${className ?? \"\"}`.trim()}\n >\n <MdAccessibilityNew aria-hidden=\"true\" className=\"h-5 w-5\" />\n <span>{triggerLabel}</span>\n </button>\n )}\n\n <Modal\n isOpen={isOpen}\n onClose={() => setOpen(false)}\n title={triggerLabel}\n showIcon={false}\n size=\"large\"\n >\n <p className=\"mt-2 text-center text-sm text-content-secondary\">\n As alterações são aplicadas pelo consumidor do componente.\n </p>\n\n <div className=\"mt-5 grid gap-4 desktop:grid-cols-2\">\n <fieldset className={sectionClass}>\n <legend className=\"sr-only\">Aparência</legend>\n <div className=\"mb-4 flex items-start gap-3\">\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary-5 text-primary-1\">\n <MdPalette aria-hidden=\"true\" className=\"h-5 w-5\" />\n </span>\n <div>\n <h3 className=\"font-bold\">Aparência</h3>\n <p className=\"text-sm text-content-secondary\">Tema e contraste visual.</p>\n </div>\n </div>\n <div className=\"divide-y divide-border-subtle rounded-sm border border-border-default bg-surface-card px-3\">\n <div className=\"flex min-h-16 items-center justify-between gap-4 py-3\">\n <span className=\"font-semibold\">Tema {isDark ? \"escuro\" : \"claro\"}</span>\n <InputSwitch\n aria-label=\"Alternar tema claro ou escuro\"\n variant=\"theme\"\n size=\"lg\"\n checked={isDark}\n disabled={preferences.colorScheme === \"system\"}\n onChange={(enabled) =>\n update(\n { colorScheme: enabled ? \"dark\" : \"light\", highContrastTheme: enabled ? \"dark\" : \"light\" },\n `Tema ${enabled ? \"escuro\" : \"claro\"} ativado.`,\n )\n }\n />\n </div>\n <label className=\"flex min-h-14 cursor-pointer items-start gap-3 py-3\">\n <input\n type=\"checkbox\"\n className=\"checkbox-control mt-0.5\"\n checked={preferences.colorScheme === \"system\"}\n onChange={(event) =>\n update(\n { colorScheme: event.target.checked ? \"system\" : isDark ? \"dark\" : \"light\" },\n event.target.checked ? \"Tema definido pelo dispositivo.\" : \"Tema do dispositivo desativado.\",\n )\n }\n />\n <span className=\"font-semibold\">Usar configuração do dispositivo</span>\n </label>\n <div className=\"flex min-h-16 items-center justify-between gap-4 py-3\">\n <span className=\"flex items-center gap-1.5 font-semibold\"><MdContrast aria-hidden=\"true\" className=\"h-4 w-4\" />Alto contraste</span>\n <InputSwitch\n aria-label=\"Alternar alto contraste\"\n checked={preferences.highContrast}\n size=\"lg\"\n onChange={(enabled) => update({ highContrast: enabled }, `Alto contraste ${enabled ? \"ativado\" : \"desativado\"}.`)}\n />\n </div>\n </div>\n </fieldset>\n\n <fieldset className={sectionClass}>\n <legend className=\"sr-only\">Tamanho do texto</legend>\n <div className=\"mb-4 flex items-start gap-3\">\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary-5 text-primary-1\"><MdTextFields aria-hidden=\"true\" className=\"h-5 w-5\" /></span>\n <div><h3 className=\"font-bold\">Tamanho do texto</h3><p className=\"text-sm text-content-secondary\">Amplie os textos para facilitar a leitura.</p></div>\n </div>\n <div className=\"grid gap-2\">\n {([\"standard\", \"large\", \"extra-large\"] as const).map((scale) => (\n <label key={scale} className={`${choiceClass} items-center`}>\n <input type=\"radio\" name={`${titleId}-font-scale`} value={scale} checked={preferences.fontScale === scale} onChange={() => update({ fontScale: scale }, `Tamanho do texto alterado.`)} className=\"radio-control shrink-0\" />\n <span className=\"flex w-9 shrink-0 justify-center font-extrabold text-primary-1\">Aa</span>\n <span className=\"font-semibold\">{scale === \"standard\" ? \"Padrão\" : scale === \"large\" ? \"Grande\" : \"Muito grande\"}</span>\n </label>\n ))}\n </div>\n </fieldset>\n\n <fieldset className={`${sectionClass} desktop:col-span-2`}>\n <legend className=\"sr-only\">Leitura e navegação</legend>\n <div className=\"mb-4 flex items-start gap-3\"><span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary-5 text-primary-1\"><MdAccessibilityNew aria-hidden=\"true\" className=\"h-5 w-5\" /></span><div><h3 className=\"font-bold\">Leitura e navegação</h3><p className=\"text-sm text-content-secondary\">Ajustes para reduzir distrações e facilitar a orientação.</p></div></div>\n <div className=\"grid gap-3 tablet:grid-cols-3\">\n {readingOptions.map(({ key, label, description, Icon }) => (\n <label key={key} className={`${choiceClass} items-start`}>\n <input type=\"checkbox\" checked={preferences[key]} onChange={(event) => update({ [key]: event.target.checked }, `${label} ${event.target.checked ? \"ativado\" : \"desativado\"}.`)} className=\"checkbox-control mt-1\" />\n <span><span className=\"flex items-center gap-2 font-semibold\"><Icon aria-hidden=\"true\" className=\"h-5 w-5 shrink-0 text-primary-1\" />{label}</span><span className=\"mt-1 block text-sm text-content-secondary\">{description}</span></span>\n </label>\n ))}\n </div>\n </fieldset>\n </div>\n <div className=\"mt-5 flex justify-center border-t border-border-subtle pt-4 tablet:justify-start\">\n <button type=\"button\" onClick={() => { onReset?.(); setAnnouncement(\"Configurações padrão restauradas.\"); }} className=\"inline-flex min-h-11 items-center gap-2 rounded-sm border-2 border-action-primary px-4 font-bold text-content-link hover:bg-surface-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"><MdRestartAlt aria-hidden=\"true\" className=\"h-5 w-5\" />Restaurar configurações padrão</button>\n </div>\n <p className=\"sr-only\" role=\"status\" aria-live=\"polite\">{announcement}</p>\n </Modal>\n </>\n );\n}\n","\"use client\";\n\nimport { MdContrast } from \"react-icons/md\";\n\nexport interface HighContrastToggleProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n label?: string;\n className?: string;\n}\n\nexport default function HighContrastToggle({\n checked,\n onChange,\n label = \"Alto contraste\",\n className,\n}: HighContrastToggleProps) {\n return (\n <button\n type=\"button\"\n aria-pressed={checked}\n onClick={() => onChange(!checked)}\n className={`inline-flex min-h-11 items-center justify-center gap-2 rounded-sm border-2 border-action-primary-content bg-action-primary px-3 text-sm font-bold text-action-primary-content shadow-sm hover:bg-action-primary-hover active:bg-action-primary-active focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ${className ?? \"\"}`.trim()}\n >\n <MdContrast aria-hidden=\"true\" className=\"h-5 w-5\" />\n <span>{label}</span>\n <span aria-hidden=\"true\" className=\"rounded-sm bg-surface-card px-1.5 py-0.5 text-xs text-content-primary\">\n {checked ? \"Ativado\" : \"Desativado\"}\n </span>\n </button>\n );\n}\n"],"mappings":"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","names":["MdOutlineClose","jsx","jsxs","MdOutlineClose","useState","Fragment","jsx","jsxs","useState","MdContrast","jsx","jsxs"]}