@aspprev/versi-ds 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -396
- package/dist/charts.js +1 -1
- package/dist/{chunk-OWXG2A4N.js → chunk-ATWH3MA6.js} +1 -1
- package/dist/chunk-ATWH3MA6.js.map +1 -0
- package/dist/{chunk-CWIPMGCA.js → chunk-ET2BGHTO.js} +2 -1
- package/dist/chunk-ET2BGHTO.js.map +1 -0
- package/dist/{chunk-BY4HJZFJ.js → chunk-FR5W52XU.js} +283 -23
- package/dist/chunk-FR5W52XU.js.map +1 -0
- package/dist/chunk-H4BBKKRZ.js +380 -0
- package/dist/chunk-H4BBKKRZ.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-PIXRKI25.js} +84 -10
- package/dist/chunk-PIXRKI25.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 +23 -4
- package/dist/core.js +12 -6
- package/dist/countries.js +1 -1
- package/dist/documents.d.ts +81 -1
- package/dist/documents.js +14 -4
- package/dist/forms.d.ts +26 -2
- package/dist/forms.js +5 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +30 -12
- package/dist/manifest.json +9 -9
- package/dist/overlays.js +1 -1
- package/dist/styles.css +1 -1
- package/package.json +27 -19
- 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 +0 -45
- package/dist/chunk-XGWGBD7X.js.map +0 -1
|
@@ -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\";\r\n\r\nimport React, { Fragment } from \"react\";\r\nimport {\r\n MdCheckCircle,\r\n MdCancel,\r\n MdDeleteForever,\r\n MdOutlineClose,\r\n MdDownload,\r\n MdSend,\r\n MdErrorOutline,\r\n} from \"react-icons/md\";\r\nimport {\r\n Transition,\r\n Dialog,\r\n TransitionChild,\r\n DialogTitle,\r\n DialogPanel,\r\n} from \"@headlessui/react\";\r\n\r\nexport type ModalProps = {\r\n children?: React.ReactNode;\r\n isOpen: boolean;\r\n title?: string;\r\n onClose: () => void;\r\n showIcon?: boolean;\r\n variant?:\r\n | \"success\"\r\n | \"error\"\r\n | \"warning\"\r\n | \"delete\"\r\n | \"downloading\"\r\n | \"sendMessage\";\r\n size?: \"small\" | \"medium\" | \"large\" | \"viewer\" | \"full\";\r\n className?: string;\r\n} & React.HTMLAttributes<HTMLDivElement>;\r\n\r\nconst modalMaxWidths = {\r\n small: \"28rem\",\r\n medium: \"42rem\",\r\n large: \"56rem\",\r\n viewer: \"72rem\",\r\n full: \"calc(100vw - 40px)\",\r\n} as const;\r\n\r\nconst Modal = ({\r\n children,\r\n isOpen,\r\n onClose,\r\n className,\r\n style,\r\n title,\r\n showIcon = true,\r\n variant = \"success\",\r\n size = \"small\",\r\n}: ModalProps) => {\r\n const variantStyles = {\r\n success: {\r\n bgColor: \"bg-feedback-success-soft\",\r\n icon: <MdCheckCircle className=\"h-6 w-6 text-feedback-success-content\" />,\r\n },\r\n error: {\r\n bgColor: \"bg-feedback-danger-soft\",\r\n icon: <MdCancel className=\"h-6 w-6 text-feedback-danger-content\" />,\r\n },\r\n warning: {\r\n bgColor: \"bg-feedback-warning-soft\",\r\n icon: (\r\n <MdErrorOutline className=\"h-6 w-6 text-feedback-warning-content\" />\r\n ),\r\n },\r\n downloading: {\r\n bgColor: \"bg-feedback-info-soft\",\r\n icon: <MdDownload className=\"h-6 w-6 text-feedback-info-content\" />,\r\n },\r\n delete: {\r\n bgColor: \"bg-feedback-info-soft\",\r\n icon: <MdDeleteForever className=\"h-6 w-6 text-feedback-info-content\" />,\r\n },\r\n sendMessage: {\r\n bgColor: \"bg-feedback-info-soft\",\r\n icon: <MdSend className=\"h-6 w-6 text-feedback-info-content\" />,\r\n },\r\n };\r\n\r\n const { bgColor, icon } = variantStyles[variant];\r\n\r\n return (\r\n <Transition appear show={isOpen} as={Fragment}>\r\n <Dialog\r\n as=\"div\"\r\n className=\"relative z-modal gap-0\"\r\n aria-label={title ? undefined : \"Janela de diálogo\"}\n onClose={onClose}\r\n >\r\n <TransitionChild\r\n as={Fragment}\r\n enter=\"ease-out duration-300\"\r\n enterFrom=\"opacity-0\"\r\n enterTo=\"opacity-100\"\r\n leave=\"ease-in duration-200\"\r\n leaveFrom=\"opacity-100\"\r\n leaveTo=\"opacity-0\"\r\n >\r\n <div className=\"fixed inset-0 bg-overlay/50 backdrop-blur-[1px]\" />\r\n </TransitionChild>\r\n <div className=\"portal-safe-modal fixed inset-0 overflow-y-auto gap-0\">\r\n <div className=\"flex min-h-full items-center justify-center p-5 gap-0\">\r\n <DialogPanel\r\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 ?? \"\"}`}\r\n style={{\r\n ...style,\r\n width: \"100%\",\r\n maxWidth: modalMaxWidths[size],\r\n }}\r\n >\r\n <div className=\"absolute right-5 top-5 flex items-center justify-end\">\r\n <button\r\n type=\"button\"\r\n aria-label=\"Fechar janela\"\r\n onClick={onClose}\r\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\"\r\n >\r\n <MdOutlineClose\r\n aria-hidden=\"true\"\r\n size={20}\r\n className=\"text-content-secondary\"\r\n />\r\n </button>\r\n </div>\r\n\r\n {showIcon && (\r\n <div aria-hidden=\"true\" className=\"flex justify-center p-0\">\r\n <div\r\n className={`inline-flex items-center justify-center w-12 h-12 rounded-full ${bgColor}`}\r\n >\r\n {icon}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"space-y-3\">\r\n {title && (\r\n <DialogTitle\r\n as=\"h3\"\r\n className=\"text-xl font-extrabold text-center\"\r\n >\r\n {title}\r\n </DialogTitle>\r\n )}\r\n {children}\r\n </div>\r\n </DialogPanel>\r\n </div>\r\n </div>\r\n </Dialog>\r\n </Transition>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n\r\n","\"use client\";\r\n\r\nimport {\r\n Switch as HeadlessSwitch,\r\n} from \"@headlessui/react\";\r\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\r\ntype NativeSwitchProps = {\r\n id?: string;\r\n name?: string;\r\n value?: string;\r\n form?: string;\r\n autoFocus?: boolean;\r\n tabIndex?: number;\r\n} & (\r\n | {\r\n \"aria-label\": string;\r\n \"aria-labelledby\"?: never;\r\n }\r\n | {\r\n \"aria-label\"?: never;\r\n \"aria-labelledby\": string;\r\n }\r\n);\r\n\r\nexport type InputSwitchProps = {\r\n defaultEnable?: boolean;\r\n checked?: boolean;\r\n variant?: \"primary\" | \"secondary\" | \"tertiary\" | \"contract\" | \"theme\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n disabled?: boolean;\n onChange?: (enabled: boolean) => void;\n icon?: IconType;\n} & NativeSwitchProps;\n\r\nexport type InputSwitchStyleProps = Pick<\r\n InputSwitchProps,\r\n \"variant\" | \"disabled\" | \"size\"\r\n> & {\r\n enabled: boolean;\r\n};\r\n\r\nexport type SwitchProps = InputSwitchProps;\r\n\r\nconst InputSwitch: React.FC<InputSwitchProps> = ({\r\n defaultEnable: enabledByDefault,\r\n variant = \"primary\",\r\n size = \"md\",\r\n disabled,\r\n onChange,\n checked,\n icon: Icon,\n ...rest\n}) => {\r\n const [enabled, setEnabled] = useState(enabledByDefault ?? false);\n const resolvedEnabled = typeof checked === \"boolean\" ? checked : enabled;\r\n const style = useStyle({\r\n variant,\r\n enabled: resolvedEnabled,\r\n disabled,\r\n size,\r\n });\r\n\r\n const toggle = () => {\r\n const newState = !resolvedEnabled;\r\n if (typeof checked !== \"boolean\") {\r\n setEnabled(newState);\r\n }\r\n onChange?.(newState);\r\n };\r\n return (\r\n <HeadlessSwitch\r\n checked={resolvedEnabled}\r\n onChange={toggle}\r\n disabled={disabled ?? false}\n className={style.Container}\r\n {...rest}\r\n >\r\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\" && (\r\n <span className={style.Switch}>\r\n {resolvedEnabled && (\r\n <MdCheck className={style.Icon} aria-disabled={disabled} />\r\n )}\r\n {resolvedEnabled || (\r\n <MdOutlineClose className={style.Icon} aria-disabled={disabled} />\r\n )}\r\n </span>\r\n )}\r\n\r\n {variant === \"theme\" && (\r\n <span className={style.SwitchTheme}>\r\n {resolvedEnabled && (\r\n <MdNightsStay\r\n className={style.IconTheme}\r\n aria-disabled={disabled}\r\n />\r\n )}\r\n {resolvedEnabled || (\r\n <MdSunny className={style.IconTheme} aria-disabled={disabled} />\r\n )}\r\n </span>\r\n )}\r\n </HeadlessSwitch>\r\n );\r\n};\r\n\r\nexport default InputSwitch;\r\n\r\n","import { cva } from \"class-variance-authority\";\r\nimport classNames from \"classnames\";\r\nimport { InputSwitchProps, InputSwitchStyleProps } from \"./InputSwitch\";\r\n\r\nconst SIZE_STYLES: Record<\r\n NonNullable<InputSwitchProps[\"size\"]>,\r\n {\r\n container: string;\r\n knob: string;\r\n icon: string;\r\n }\r\n> = {\r\n sm: {\r\n container:\r\n \"h-[1rem] w-[1.75rem] [--switch-padding:2px] [--switch-knob-size:0.75rem] [--switch-width:1.75rem]\",\r\n knob: \"h-[var(--switch-knob-size)] w-[var(--switch-knob-size)]\",\r\n icon: \"h-2 w-2\",\r\n },\r\n md: {\r\n container:\r\n \"h-[1.25rem] w-[3rem] [--switch-padding:2px] [--switch-knob-size:1rem] [--switch-width:3rem]\",\r\n knob: \"h-[var(--switch-knob-size)] w-[var(--switch-knob-size)]\",\r\n icon: \"h-3 w-3\",\r\n },\r\n lg: {\r\n container:\r\n \"h-[1.5rem] w-[3.5rem] [--switch-padding:2px] [--switch-knob-size:1.25rem] [--switch-width:3.5rem]\",\r\n knob: \"h-[var(--switch-knob-size)] w-[var(--switch-knob-size)]\",\r\n icon: \"h-4 w-4\",\r\n },\r\n};\r\n\r\nconst getInputSwitchStyles = ({\r\n variant,\r\n enabled,\r\n disabled,\r\n size = \"md\",\r\n}: InputSwitchStyleProps) => {\r\n const sizeStyle = SIZE_STYLES[size];\r\n const containerVariant = cva(\r\n classNames(\r\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\",\r\n sizeStyle.container,\r\n { \"pointer-events-none\": disabled },\r\n ),\r\n {\r\n variants: {\r\n variant: {\r\n primary: classNames(\r\n \"[--switch-state-layer:var(--switch-track-primary-on)]\",\r\n { \"bg-switch-track-primary-on\": enabled },\r\n { \"bg-switch-track-off\": !enabled },\r\n ),\r\n secondary: classNames(\r\n \"[--switch-state-layer:var(--switch-track-secondary-on)]\",\r\n { \"bg-switch-track-secondary-on\": enabled },\r\n { \"bg-switch-track-off\": !enabled },\r\n ),\r\n tertiary: classNames(\r\n \"[--switch-state-layer:var(--switch-track-tertiary-on)]\",\r\n { \"bg-switch-track-tertiary-on\": enabled },\r\n { \"bg-switch-track-off\": !enabled },\r\n ),\r\n contract: classNames(\r\n enabled\r\n ? \"bg-switch-track-contract-on [--switch-state-layer:var(--switch-track-contract-on)]\"\r\n : \"bg-switch-track-contract-off [--switch-state-layer:var(--switch-track-contract-off)]\",\r\n ),\r\n theme: classNames(\r\n enabled\r\n ? \"bg-switch-track-theme-on [--switch-state-layer:var(--switch-track-theme-on)]\"\r\n : \"bg-switch-track-theme-off [--switch-state-layer:var(--switch-track-theme-off)]\",\r\n ),\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"primary\",\r\n },\r\n },\r\n );\r\n const containerClasses = containerVariant({ variant });\r\n\r\n const switchClasses = classNames(\r\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\",\r\n sizeStyle.knob,\r\n disabled ? \"bg-switch-knob-disabled\" : \"bg-switch-knob\",\r\n enabled\r\n ? \"translate-x-[calc(var(--switch-width)-var(--switch-knob-size)-var(--switch-padding)*2)]\"\r\n : \"translate-x-0\",\r\n );\r\n\r\n const switchClassesTheme = classNames(\r\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\",\r\n sizeStyle.knob,\r\n {\r\n \"bg-switch-knob-theme-on\": enabled && !disabled,\r\n \"bg-switch-knob\": !enabled && !disabled,\r\n \"bg-switch-knob-disabled\": disabled,\r\n \"translate-x-[calc(var(--switch-width)-var(--switch-knob-size)-var(--switch-padding)*2)]\":\r\n enabled,\r\n \"translate-x-0\": !enabled,\r\n },\r\n );\r\n\r\n const iconClasses = classNames(\r\n \"aria-disabled:text-font-disabled\",\r\n sizeStyle.icon,\r\n { \"text-feedback-success-content\": enabled && !disabled },\r\n { \"text-feedback-danger-content\": !enabled && !disabled },\r\n { \"text-content-disabled\": disabled },\r\n );\r\n\r\n const iconClassesTheme = classNames(\r\n \"aria-disabled:text-font-disabled\",\r\n sizeStyle.icon,\r\n { \"text-content-inverse\": enabled && !disabled },\r\n { \"text-feedback-warning-content\": !enabled && !disabled },\r\n { \"text-content-disabled\": disabled },\r\n );\r\n\r\n return {\r\n Icon: iconClasses,\r\n IconTheme: iconClassesTheme,\r\n Switch: switchClasses,\r\n SwitchTheme: switchClassesTheme,\r\n Container: containerClasses,\r\n };\r\n};\r\n\r\nexport default getInputSwitchStyles;\r\n\r\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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/chart/LazyApexChart.tsx","../src/utils/chart-theme.ts","../src/components/chart/interactive-donut-utils.ts","../src/hooks/useHighContrastPreference.ts","../src/components/chart/InteractiveDonutChart.tsx","../src/components/chart/TimeSeriesChart.tsx","../src/components/chart/TimeRangeSelector.tsx","../src/components/chart/time-series-chart-utils.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { Props as ReactApexChartProps } from \"react-apexcharts\";\n\nexport type Props = ReactApexChartProps;\n\nexport default function LazyApexChart(props: Props) {\n const [ApexChart, setApexChart] = useState<\n React.ComponentType<Props> | null\n >(null);\n\n useEffect(() => {\n let active = true;\n import(\"react-apexcharts\").then(({ default: component }) => {\n if (active) setApexChart(() => component);\n });\n return () => {\n active = false;\n };\n }, []);\n\n if (!ApexChart) {\n return (\n <div\n className=\"flex min-h-40 items-center justify-center text-sm text-content-muted\"\n role=\"status\"\n aria-label=\"Carregando grafico\"\n >\n Carregando grafico...\n </div>\n );\n }\n\n return <ApexChart {...props} />;\n}\n","const SERIES_FALLBACKS = [\r\n \"#0f62c1\",\r\n \"#16d39a\",\r\n \"#feb019\",\r\n \"#ff4560\",\r\n \"#775dd0\",\r\n \"#00b8d9\",\r\n \"#ff8f00\",\r\n \"#26a69a\",\r\n \"#ec407a\",\r\n \"#7cb342\",\r\n \"#5c6bc0\",\r\n \"#8d6e63\",\r\n] as const;\r\n\r\nconst DONUT_SERIES_FALLBACKS = [\r\n \"#66d288\",\r\n \"#3182f6\",\r\n \"#ffc25c\",\r\n \"#7c58e8\",\r\n \"#ff6b6b\",\r\n ...SERIES_FALLBACKS.slice(5),\r\n] as const;\r\n\r\nconst MUTED_SERIES_FALLBACKS = [\r\n \"#c5cad0\",\r\n \"#d9dde1\",\r\n \"#eceef0\",\r\n \"#aeb5bd\",\r\n] as const;\r\n\r\nconst readColorToken = (token: string, fallback: string): string => {\r\n if (typeof window === \"undefined\") return fallback;\r\n const value = window\r\n .getComputedStyle(document.body ?? document.documentElement)\r\n .getPropertyValue(token)\r\n .trim();\r\n return value ? `rgb(${value})` : fallback;\r\n};\r\n\r\nexport const getChartTheme = () => ({\r\n series: SERIES_FALLBACKS.map((fallback, index) =>\r\n readColorToken(`--chart-${index + 1}`, fallback),\r\n ),\r\n donutSeries: DONUT_SERIES_FALLBACKS.map((fallback, index) =>\r\n readColorToken(`--chart-donut-${index + 1}`, fallback),\r\n ),\r\n mutedSeries: MUTED_SERIES_FALLBACKS.map((fallback, index) =>\r\n readColorToken(`--chart-muted-${index + 1}`, fallback),\r\n ),\r\n balance: readColorToken(\"--chart-balance\", \"#00a76f\"),\r\n invested: readColorToken(\"--chart-invested\", \"#1e90ff\"),\r\n grid: readColorToken(\"--chart-grid\", \"#e5e7eb\"),\r\n axis: readColorToken(\"--chart-axis\", \"#6b7280\"),\r\n axisBorder: readColorToken(\"--chart-axis-border\", \"#d1d5db\"),\r\n tooltipText: readColorToken(\"--chart-tooltip-text\", \"#111827\"),\r\n neutralLine: readColorToken(\"--chart-line-neutral\", \"#181818\"),\r\n surface: readColorToken(\"--surface-card\", \"#ffffff\"),\r\n});\r\n\r\nexport const getChartSeriesRecord = (\r\n backendColors?: Record<number, string>,\r\n count = 5,\r\n): Record<number, string> => {\r\n const { series } = getChartTheme();\r\n const fallbackColors = Object.fromEntries(\r\n Array.from({ length: count }, (_, index) => [index + 1, series[index]]),\r\n );\r\n\r\n const isDarkSchemeActive =\r\n typeof document !== \"undefined\" &&\r\n document.documentElement.dataset.colorScheme === \"dark\";\r\n\r\n const highContrastActive =\n typeof document !== \"undefined\" &&\n document.documentElement.dataset.contrast === \"high\";\n\n return highContrastActive || isDarkSchemeActive\n ? fallbackColors\r\n : { ...fallbackColors, ...backendColors };\r\n};\r\n","export function resolveInteractiveDonutColors({\r\n count,\r\n colors,\r\n mutedColors,\r\n selectedIndex,\r\n}: {\r\n count: number;\r\n colors: string[];\r\n mutedColors: string[];\r\n selectedIndex: number | null;\r\n}) {\r\n if (colors.length === 0 || mutedColors.length === 0) return [];\r\n\r\n return Array.from({ length: count }, (_, index) => {\r\n const color = colors[index % colors.length];\r\n\r\n if (selectedIndex === null || index === selectedIndex) return color;\r\n\r\n return mutedColors[index % mutedColors.length];\r\n });\r\n}\r\n\r\nexport function resolveRelativeDonutSelection({\r\n currentIndex,\r\n direction,\r\n count,\r\n}: {\r\n currentIndex: number | null;\r\n direction: -1 | 1;\r\n count: number;\r\n}) {\r\n if (count <= 0) return null;\r\n if (currentIndex === null) return direction > 0 ? 0 : count - 1;\r\n\r\n return (currentIndex + direction + count) % count;\r\n}\r\n\r\nconst TOOLTIP_ENTITIES: Record<string, string> = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n};\r\n\r\nexport function escapeDonutTooltipText(value: unknown) {\r\n return String(value ?? \"\").replace(\r\n /[&<>\"']/g,\r\n (character) => TOOLTIP_ENTITIES[character],\r\n );\r\n}\r\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function useHighContrastPreference() {\n const [highContrast, setHighContrast] = useState(false);\n\n useEffect(() => {\n const root = document.documentElement;\n const read = () => setHighContrast(root.dataset.contrast === \"high\");\n read();\n\n const observer = new MutationObserver(read);\n observer.observe(root, {\n attributes: true,\n attributeFilter: [\"data-contrast\"],\n });\n return () => observer.disconnect();\n }, []);\n\n return highContrast;\n}\n","\"use client\";\r\n\r\nimport { useHighContrastPreference } from \"../../hooks/useHighContrastPreference\";\nimport { getChartTheme } from \"../../utils/chart-theme\";\nimport {\r\n useEffect,\r\n useId,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type KeyboardEvent,\r\n} from \"react\";\r\nimport Chart, { type Props as DonutChartProps } from \"./LazyApexChart\";\r\nimport {\r\n escapeDonutTooltipText,\r\n resolveInteractiveDonutColors,\r\n resolveRelativeDonutSelection,\r\n} from \"./interactive-donut-utils\";\r\n\r\nexport type InteractiveDonutOptions = NonNullable<DonutChartProps[\"options\"]>;\r\n\r\nexport type InteractiveDonutProps = Omit<\n DonutChartProps,\r\n \"options\" | \"series\" | \"type\"\r\n> & {\r\n options?: InteractiveDonutOptions;\r\n series: number[];\r\n colors?: string[];\r\n mutedColors?: string[];\r\n valueFormatter?: (value: number) => string;\r\n ariaLabel?: string;\r\n className?: string;\r\n chartClassName?: string;\r\n responsiveHeight?: boolean;\r\n highContrastOverride?: boolean;\r\n};\r\n\r\nexport default function InteractiveDonutChart({\r\n options = {},\r\n series,\r\n colors,\r\n mutedColors,\r\n valueFormatter = (value) =>\n new Intl.NumberFormat(\"pt-BR\", {\n style: \"currency\",\n currency: \"BRL\",\n }).format(value),\n ariaLabel = \"Gráfico de distribuição\",\r\n className,\r\n chartClassName,\r\n responsiveHeight = false,\r\n highContrastOverride,\r\n ...rest\r\n}: InteractiveDonutProps) {\n const storedHighContrast = useHighContrastPreference();\r\n const highContrast = highContrastOverride ?? storedHighContrast;\r\n const [selectedIndex, setSelectedIndex] = useState<number | null>(null);\r\n const [legendSelectedIndex, setLegendSelectedIndex] = useState<number | null>(\r\n null,\r\n );\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const instructionsId = useId();\r\n const chartTheme = getChartTheme();\r\n const baseColors =\r\n !highContrast && colors?.length ? colors : chartTheme.donutSeries;\r\n const neutralColors = !highContrast && mutedColors?.length\r\n ? mutedColors\r\n : chartTheme.mutedSeries;\r\n const labels = useMemo(() => options.labels ?? [], [options.labels]);\r\n\r\n useEffect(() => {\r\n setSelectedIndex((current) =>\r\n current !== null && current >= series.length ? null : current,\r\n );\r\n setLegendSelectedIndex((current) =>\r\n current !== null && current >= series.length ? null : current,\r\n );\r\n }, [series.length]);\r\n\r\n useEffect(() => {\r\n const resetOnOutsideClick = (event: PointerEvent) => {\r\n if (containerRef.current?.contains(event.target as Node)) return;\r\n\r\n setSelectedIndex(null);\r\n setLegendSelectedIndex(null);\r\n };\r\n\r\n document.addEventListener(\"pointerdown\", resetOnOutsideClick);\r\n return () =>\r\n document.removeEventListener(\"pointerdown\", resetOnOutsideClick);\r\n }, []);\r\n\r\n const [pieCircle, setPieCircle] = useState<{\r\n cx: number;\r\n cy: number;\r\n diameter: number;\r\n } | null>(null);\r\n const [measuredChartHeight, setMeasuredChartHeight] = useState<number | null>(\r\n null,\r\n );\r\n\r\n useEffect(() => {\r\n const container = containerRef.current;\r\n if (!container) return;\r\n\r\n const measure = () => {\r\n const containerRect = container.getBoundingClientRect();\r\n\r\n if (responsiveHeight) {\r\n const fallbackHeight =\r\n typeof rest.height === \"number\" ? rest.height : 0;\r\n const nextHeight = Math.max(\r\n fallbackHeight,\r\n Math.floor(containerRect.height),\r\n );\r\n\r\n if (nextHeight > 0) {\r\n setMeasuredChartHeight((current) =>\r\n current === nextHeight ? current : nextHeight,\r\n );\r\n }\r\n }\r\n\r\n const areas = container.querySelectorAll<SVGPathElement>(\r\n \".apexcharts-pie-area\",\r\n );\r\n if (!areas.length) return;\r\n\r\n let minX = Infinity;\r\n let minY = Infinity;\r\n let maxX = -Infinity;\r\n let maxY = -Infinity;\r\n\r\n areas.forEach((area) => {\r\n const rect = area.getBoundingClientRect();\r\n minX = Math.min(minX, rect.left);\r\n minY = Math.min(minY, rect.top);\r\n maxX = Math.max(maxX, rect.right);\r\n maxY = Math.max(maxY, rect.bottom);\r\n });\r\n\r\n setPieCircle({\r\n cx: (minX + maxX) / 2 - containerRect.left,\r\n cy: (minY + maxY) / 2 - containerRect.top,\r\n diameter: Math.min(maxX - minX, maxY - minY),\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(measure);\r\n resizeObserver.observe(container);\r\n\r\n const mutationObserver = new MutationObserver(measure);\r\n mutationObserver.observe(container, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\"d\"],\r\n });\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n mutationObserver.disconnect();\r\n };\r\n }, [responsiveHeight, rest.height, series.length]);\r\n\r\n const donutSizeRatio = useMemo(() => {\r\n const size = options.plotOptions?.pie?.donut?.size ?? \"65%\";\r\n const parsed = parseFloat(String(size));\r\n return Number.isFinite(parsed) ? parsed / 100 : 0.65;\r\n }, [options.plotOptions?.pie?.donut?.size]);\r\n\r\n const displayColors = resolveInteractiveDonutColors({\r\n count: series.length,\r\n colors: baseColors,\r\n mutedColors: neutralColors,\r\n selectedIndex,\r\n });\r\n\r\n const legendValue =\r\n legendSelectedIndex !== null\r\n ? {\r\n label:\r\n labels[legendSelectedIndex] ??\r\n `Categoria ${legendSelectedIndex + 1}`,\r\n value: Number(series[legendSelectedIndex] ?? 0),\r\n }\r\n : null;\r\n\r\n const interactiveOptions = useMemo<InteractiveDonutOptions>(() => {\r\n const originalSelection = options.chart?.events?.dataPointSelection;\r\n const originalLegendClick = options.chart?.events?.legendClick;\r\n\r\n return {\r\n ...options,\r\n colors: displayColors,\r\n fill: highContrast\r\n ? {\r\n type: \"pattern\",\r\n pattern: {\r\n style: [\r\n \"verticalLines\",\r\n \"horizontalLines\",\r\n \"slantedLines\",\r\n \"squares\",\r\n \"circles\",\r\n ],\r\n width: 6,\r\n height: 6,\r\n strokeWidth: 2,\r\n },\r\n }\r\n : {\r\n ...options.fill,\r\n type: options.fill?.type ?? \"solid\",\r\n opacity: options.fill?.opacity ?? 1,\r\n },\r\n stroke: highContrast\r\n ? { ...options.stroke, colors: [\"#ffffff\"], width: 2 }\r\n : options.stroke,\r\n chart: {\r\n ...options.chart,\r\n events: {\r\n ...options.chart?.events,\r\n dataPointSelection(event, chart, config) {\r\n originalSelection?.(event, chart, config);\r\n const nextIndex = Number(config?.dataPointIndex);\r\n\r\n if (!Number.isInteger(nextIndex) || nextIndex < 0) return;\r\n\r\n setSelectedIndex((current) =>\r\n current === nextIndex ? null : nextIndex,\r\n );\r\n },\r\n legendClick(chartContext, seriesIndex, config) {\r\n originalLegendClick?.(chartContext, seriesIndex, config);\r\n\r\n if (typeof seriesIndex !== \"number\" || seriesIndex < 0) return;\r\n\r\n setLegendSelectedIndex((current) =>\r\n current === seriesIndex ? null : seriesIndex,\r\n );\r\n },\r\n },\r\n },\r\n legend: {\r\n ...options.legend,\r\n labels: {\r\n ...options.legend?.labels,\r\n colors: chartTheme.axis,\r\n },\r\n onItemClick: {\r\n ...options.legend?.onItemClick,\r\n toggleDataSeries: false,\r\n },\r\n },\r\n states: {\r\n ...options.states,\r\n hover: {\r\n ...options.states?.hover,\r\n filter: { type: \"none\" },\r\n },\r\n active: {\r\n ...options.states?.active,\r\n allowMultipleDataPointsSelection: false,\r\n filter: { type: \"none\" },\r\n },\r\n },\r\n tooltip: {\r\n ...options.tooltip,\r\n enabled: true,\r\n followCursor: true,\r\n custom({ series: tooltipSeries, seriesIndex }) {\r\n const value = Number(tooltipSeries?.[seriesIndex] ?? 0);\r\n const label = escapeDonutTooltipText(\r\n labels[seriesIndex] ?? `Categoria ${seriesIndex + 1}`,\r\n );\r\n const formattedValue = escapeDonutTooltipText(valueFormatter(value));\r\n\r\n return `<div class=\"donut-chart-tooltip\"><span class=\"donut-chart-tooltip-label\">${label}</span><strong class=\"donut-chart-tooltip-value\">${formattedValue}</strong></div>`;\r\n },\r\n },\r\n };\r\n }, [\r\n chartTheme.axis,\r\n displayColors,\r\n highContrast,\r\n labels,\r\n options,\r\n valueFormatter,\r\n ]);\r\n\r\n const selectedLabel =\r\n selectedIndex === null\r\n ? \"Nenhuma categoria selecionada\"\r\n : `${labels[selectedIndex] ?? `Categoria ${selectedIndex + 1}`}: ${valueFormatter(\r\n Number(series[selectedIndex] ?? 0),\r\n )}`;\r\n\r\n const legendValueLabel =\r\n legendSelectedIndex === null\r\n ? \"\"\r\n : `Valor em destaque: ${\r\n labels[legendSelectedIndex] ?? `Categoria ${legendSelectedIndex + 1}`\r\n }: ${valueFormatter(Number(series[legendSelectedIndex] ?? 0))}`;\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n if (\r\n [\"ArrowRight\", \"ArrowDown\", \"ArrowLeft\", \"ArrowUp\"].includes(event.key)\r\n ) {\r\n event.preventDefault();\r\n const direction =\r\n event.key === \"ArrowRight\" || event.key === \"ArrowDown\" ? 1 : -1;\r\n setSelectedIndex((current) =>\r\n resolveRelativeDonutSelection({\r\n currentIndex: current,\r\n direction,\r\n count: series.length,\r\n }),\r\n );\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setSelectedIndex(null);\r\n setLegendSelectedIndex(null);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n role=\"group\"\r\n tabIndex={0}\r\n aria-label={ariaLabel}\r\n aria-describedby={instructionsId}\r\n onKeyDown={handleKeyDown}\r\n className={`chart-keyboard-focus-ring relative min-w-0 rounded-sm ${className ?? \"\"}`.trim()}\r\n >\r\n <Chart\r\n key={highContrast ? \"donut-high-contrast\" : \"donut-standard\"}\r\n {...rest}\r\n className={chartClassName}\r\n height={\r\n responsiveHeight && measuredChartHeight\r\n ? measuredChartHeight\r\n : rest.height\r\n }\r\n options={interactiveOptions}\r\n series={series}\r\n type=\"donut\"\r\n />\r\n {legendValue && pieCircle && (\r\n <div\r\n aria-hidden=\"true\"\r\n className=\"pointer-events-none absolute flex flex-col items-center justify-center text-center\"\r\n style={{\r\n left: pieCircle.cx,\r\n top: pieCircle.cy,\r\n width: pieCircle.diameter * donutSizeRatio * 0.94,\r\n transform: \"translate(-50%, -50%)\",\r\n }}\r\n >\r\n <span className=\"w-full truncate text-xs leading-tight text-content-secondary\">\r\n {legendValue.label}\r\n </span>\r\n <span className=\"w-full break-words text-md font-bold leading-tight text-content-primary\">\r\n {valueFormatter(legendValue.value)}\r\n </span>\r\n </div>\r\n )}\r\n <span className=\"sr-only\" aria-live=\"polite\">\r\n {selectedLabel}\r\n </span>\r\n <span className=\"sr-only\" aria-live=\"polite\">\r\n {legendValueLabel}\r\n </span>\r\n <span id={instructionsId} className=\"sr-only\">\r\n Use as setas para navegar pelas categorias e Escape para limpar a\r\n seleção.\r\n </span>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useHighContrastPreference } from \"../../hooks/useHighContrastPreference\";\nimport { getChartTheme } from \"../../utils/chart-theme\";\nimport { useEffect, useRef, useState } from \"react\";\r\nimport Chart, { type Props as ApexChartProps } from \"./LazyApexChart\";\r\n\r\nexport type TimeSeriesChartOptions = NonNullable<ApexChartProps[\"options\"]>;\r\n\r\nexport type TimeSeriesChartProps = Omit<ApexChartProps, \"options\"> & {\n options: TimeSeriesChartOptions;\r\n ariaLabel: string;\r\n className?: string;\r\n chartClassName?: string;\r\n responsiveHeight?: boolean;\r\n highContrastOverride?: boolean;\r\n};\r\n\r\nexport default function TimeSeriesChart({\r\n options,\r\n ariaLabel,\r\n className,\r\n chartClassName,\r\n responsiveHeight = false,\r\n highContrastOverride,\r\n ...chartProps\r\n}: TimeSeriesChartProps) {\r\n const storedHighContrast = useHighContrastPreference();\r\n const highContrast = highContrastOverride ?? storedHighContrast;\r\n const theme = getChartTheme();\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [measuredHeight, setMeasuredHeight] = useState<number | null>(null);\r\n const [measuredWidth, setMeasuredWidth] = useState<number | null>(null);\r\n const themeKey = [\r\n highContrast ? \"high-contrast\" : \"standard\",\r\n theme.axis,\r\n theme.axisBorder,\r\n theme.grid,\r\n theme.surface,\r\n ...theme.series,\r\n ].join(\"|\");\r\n\r\n useEffect(() => {\r\n if (!responsiveHeight) {\r\n setMeasuredHeight(null);\r\n setMeasuredWidth(null);\r\n return;\r\n }\r\n\r\n const container = containerRef.current;\r\n if (!container || typeof ResizeObserver === \"undefined\") return;\r\n\r\n const fallbackHeight =\r\n typeof chartProps.height === \"number\" ? chartProps.height : 0;\r\n let frame = 0;\r\n const measure = () => {\r\n cancelAnimationFrame(frame);\r\n frame = requestAnimationFrame(() => {\r\n const bounds = container.getBoundingClientRect();\r\n const nextWidth = Math.floor(bounds.width);\r\n const nextHeight = Math.max(\r\n fallbackHeight,\r\n Math.floor(bounds.height),\r\n );\r\n\r\n if (nextWidth > 0) {\r\n setMeasuredWidth((current) =>\r\n current === nextWidth ? current : nextWidth,\r\n );\r\n }\r\n\r\n if (nextHeight > 0) {\r\n setMeasuredHeight((current) =>\r\n current === nextHeight ? current : nextHeight,\r\n );\r\n }\r\n });\r\n };\r\n\r\n measure();\r\n const resizeObserver = new ResizeObserver(measure);\r\n resizeObserver.observe(container);\r\n return () => {\r\n cancelAnimationFrame(frame);\r\n resizeObserver.disconnect();\r\n };\r\n }, [chartProps.height, responsiveHeight]);\r\n\r\n const renderedHeight =\r\n responsiveHeight && measuredHeight ? measuredHeight : chartProps.height;\r\n const renderedWidth =\r\n responsiveHeight && measuredWidth ? measuredWidth : chartProps.width;\r\n const xAxis = options.xaxis;\r\n const xAxisCategories = Array.isArray(xAxis?.categories)\r\n ? xAxis.categories\r\n : [];\r\n const availableWidth =\r\n typeof renderedWidth === \"number\" ? renderedWidth : 720;\r\n const maxVisibleXAxisLabels = Math.max(\r\n 4,\r\n Math.min(12, Math.floor(availableWidth / 88)),\r\n );\r\n const xAxisLabelStep = Math.max(\r\n 1,\r\n Math.ceil(xAxisCategories.length / maxVisibleXAxisLabels),\r\n );\r\n const hasDenseXAxis = xAxisCategories.length > maxVisibleXAxisLabels;\r\n const xAxisCategoriesKey = JSON.stringify(xAxisCategories);\r\n const responsiveXAxisFormatter = xAxisCategories.length\r\n ? (\r\n value: string | number,\n _timestamp?: number,\n opts?: { dataPointIndex?: number },\n ) => {\r\n const fallbackIndex = xAxisCategories.findIndex(\r\n (category) => String(category) === String(value),\r\n );\r\n const index =\n opts?.dataPointIndex ?? (fallbackIndex >= 0 ? fallbackIndex : 0);\n const isLast = index === xAxisCategories.length - 1;\r\n\r\n return index % xAxisLabelStep === 0 || isLast\r\n ? String(xAxisCategories[index] ?? value)\r\n : \"\";\r\n }\r\n : xAxis?.labels?.formatter;\r\n const renderKey = [\r\n themeKey,\r\n renderedWidth ?? \"auto-width\",\r\n renderedHeight ?? \"auto-height\",\r\n xAxisCategoriesKey,\r\n ].join(\"|\");\r\n\r\n const yAxis = Array.isArray(options.yaxis)\r\n ? options.yaxis.map((axis) => ({\r\n ...axis,\r\n labels: {\r\n ...axis.labels,\r\n show: true,\r\n style: {\r\n fontSize: \"11px\",\r\n fontWeight: 500,\r\n ...axis.labels?.style,\r\n colors: theme.axis,\r\n },\r\n },\r\n }))\r\n : {\r\n ...options.yaxis,\r\n labels: {\r\n ...options.yaxis?.labels,\r\n show: true,\r\n style: {\r\n fontSize: \"11px\",\r\n fontWeight: 500,\r\n ...options.yaxis?.labels?.style,\r\n colors: theme.axis,\r\n },\r\n },\r\n };\r\n\r\n const sharedOptions: TimeSeriesChartOptions = {\r\n ...options,\r\n colors: highContrast ? [...theme.series] : options.colors,\r\n chart: {\r\n toolbar: { show: false },\r\n zoom: { enabled: false },\r\n parentHeightOffset: 0,\r\n redrawOnParentResize: true,\r\n redrawOnWindowResize: true,\r\n ...options.chart,\r\n foreColor: theme.axis,\r\n },\r\n dataLabels: {\r\n enabled: false,\r\n ...options.dataLabels,\r\n },\r\n grid: {\r\n show: true,\r\n borderColor: theme.grid,\r\n strokeDashArray: 0,\r\n ...options.grid,\r\n xaxis: {\r\n lines: {\r\n ...options.grid?.xaxis?.lines,\r\n show: hasDenseXAxis\r\n ? false\r\n : (options.grid?.xaxis?.lines?.show ?? true),\r\n },\r\n },\r\n yaxis: {\r\n lines: { show: true, ...options.grid?.yaxis?.lines },\r\n },\r\n padding: {\r\n top: 0,\r\n right: 8,\r\n bottom: 8,\r\n left: 8,\r\n ...options.grid?.padding,\r\n },\r\n },\r\n stroke: {\r\n width: 2,\r\n curve: \"straight\",\r\n ...options.stroke,\r\n colors: highContrast ? [...theme.series] : options.stroke?.colors,\r\n dashArray: highContrast\r\n ? [0, 6, 2, 8, 4, 10, 1, 7, 3, 9, 5, 11]\r\n : (options.stroke?.dashArray ?? 0),\r\n },\r\n markers: {\r\n strokeWidth: 1,\r\n strokeColors: [theme.surface],\r\n ...options.markers,\r\n size: highContrast ? 4 : (options.markers?.size ?? 3),\r\n hover: { size: 4, ...options.markers?.hover },\r\n },\r\n annotations: highContrast\r\n ? {\r\n ...options.annotations,\r\n xaxis: options.annotations?.xaxis?.map((annotation, index) => ({\r\n ...annotation,\r\n fillColor: theme.series[index % theme.series.length],\r\n opacity: 0.28,\r\n })),\r\n }\r\n : options.annotations,\r\n xaxis: {\r\n tooltip: { enabled: false },\r\n axisBorder: { color: theme.axisBorder },\r\n ...xAxis,\r\n tickAmount: xAxisCategories.length ? undefined : xAxis?.tickAmount,\r\n axisTicks: {\r\n color: theme.axisBorder,\r\n ...xAxis?.axisTicks,\r\n show: hasDenseXAxis ? false : (xAxis?.axisTicks?.show ?? true),\r\n },\r\n labels: {\r\n ...xAxis?.labels,\r\n show: true,\r\n formatter: responsiveXAxisFormatter,\r\n style: {\r\n fontSize: \"11px\",\r\n fontWeight: 500,\r\n ...xAxis?.labels?.style,\r\n colors: theme.axis,\r\n },\r\n },\r\n },\r\n yaxis: yAxis,\r\n tooltip: {\r\n shared: true,\r\n intersect: false,\r\n followCursor: true,\r\n ...options.tooltip,\r\n },\r\n legend: {\r\n ...options.legend,\r\n labels: {\r\n ...options.legend?.labels,\r\n colors: theme.axis,\r\n },\r\n },\r\n noData: {\r\n text: \"Nenhum dado disponível no período selecionado\",\r\n ...options.noData,\r\n style: {\r\n fontSize: \"15px\",\r\n ...options.noData?.style,\r\n color: theme.axis,\r\n },\r\n },\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n role=\"img\"\r\n aria-label={ariaLabel}\r\n className={className}\r\n >\r\n <Chart\r\n key={renderKey}\r\n {...chartProps}\r\n className={chartClassName}\r\n width={renderedWidth}\r\n height={renderedHeight}\r\n options={sharedOptions}\r\n />\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nexport type TimeRangeSelectorProps<T extends string | number> = {\n options: readonly T[];\r\n selected: T;\r\n onSelect: (range: T) => void;\r\n ariaLabel?: string;\r\n className?: string;\r\n};\r\n\r\nexport default function TimeRangeSelector<T extends string | number>({\r\n options,\r\n selected,\r\n onSelect,\r\n ariaLabel = \"Período do gráfico\",\r\n className,\r\n}: TimeRangeSelectorProps<T>) {\r\n return (\r\n <div\r\n role=\"group\"\r\n aria-label={ariaLabel}\r\n className={`flex min-w-0 flex-wrap justify-start gap-1.5 ${className ?? \"\"}`.trim()}\r\n >\r\n {options.map((range) => {\r\n const isSelected = selected === range;\r\n\r\n return (\r\n <button\r\n key={range}\r\n type=\"button\"\r\n aria-pressed={isSelected}\r\n onClick={() => onSelect(range)}\r\n className={`shrink-0 whitespace-nowrap rounded-sm border px-2.5 py-1 text-sm font-semibold transition-colors ${\r\n isSelected\r\n ? \"border-selection-border bg-selection-background text-selection-content\"\r\n : \"border-primary-1 text-primary-1 hover:bg-primary-5\"\r\n }`}\r\n >\r\n {range}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n","const TOOLTIP_ENTITIES: Record<string, string> = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n};\r\n\r\nexport function escapeTimeSeriesTooltipText(value: unknown) {\r\n return String(value ?? \"\").replace(\r\n /[&<>\"']/g,\r\n (character) => TOOLTIP_ENTITIES[character],\r\n );\r\n}\r\n\r\nconst SAFE_TOOLTIP_COLOR =\r\n /^(?:#[\\da-f]{3,8}|rgba?\\([\\d\\s.,%]+\\)|hsla?\\([\\d\\s.,%]+\\)|var\\(--[\\w-]+\\)|[a-z]+)$/i;\r\n\r\nexport function normalizeTimeSeriesTooltipColor(value?: string) {\r\n const color = String(value ?? \"\").trim();\r\n return SAFE_TOOLTIP_COLOR.test(color) ? color : \"currentColor\";\r\n}\r\n\r\nexport type TimeSeriesTooltipRow = {\r\n label: string;\r\n value: string;\r\n color?: string;\r\n};\r\n\r\nexport function buildTimeSeriesTooltip({\r\n reference,\r\n rows,\r\n}: {\r\n reference: string;\r\n rows: TimeSeriesTooltipRow[];\r\n}) {\r\n const content = rows\r\n .map(({ label, value, color }) => {\r\n const marker = color\r\n ? `<span class=\"time-series-chart-tooltip-marker\" style=\"background-color:${normalizeTimeSeriesTooltipColor(color)}\"></span>`\r\n : \"\";\r\n\r\n return `<div class=\"time-series-chart-tooltip-row\"><span class=\"time-series-chart-tooltip-name\">${marker}${escapeTimeSeriesTooltipText(label)}</span><strong>${escapeTimeSeriesTooltipText(value)}</strong></div>`;\r\n })\r\n .join(\"\");\r\n\r\n return `<div class=\"time-series-chart-tooltip\"><div class=\"time-series-chart-tooltip-reference\">${escapeTimeSeriesTooltipText(reference)}</div>${content}</div>`;\r\n}\r\n"],"mappings":"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","names":["useEffect","useState","useEffect","useState","jsx","_a","_b","useState","useEffect","_c","_d","_e","_f","_g","_h","_i","useEffect","useRef","useState","jsx","_a","_b","useRef","useState","useEffect","jsx","TOOLTIP_ENTITIES"]}
|