@cnc-ti/layout-basic 8.8.1 → 8.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/Button/index.tsx","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/class-variance-authority/dist/index.mjs","../../../node_modules/shared/src/utils.ts","../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/lucide-react/src/Icon.ts","../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/lucide-react/src/icons/bell-off.ts","../../../node_modules/lucide-react/src/icons/bell-ring.ts","../../../node_modules/lucide-react/src/icons/bell.ts","../../../node_modules/lucide-react/src/icons/calendar-days.ts","../../../node_modules/lucide-react/src/icons/check.ts","../../../node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../../node_modules/lucide-react/src/icons/chevron-up.ts","../../../node_modules/lucide-react/src/icons/chevrons-up-down.ts","../../../node_modules/lucide-react/src/icons/circle.ts","../../../node_modules/lucide-react/src/icons/download.ts","../../../node_modules/lucide-react/src/icons/external-link.ts","../../../node_modules/lucide-react/src/icons/file-text.ts","../../../node_modules/lucide-react/src/icons/filter-x.ts","../../../node_modules/lucide-react/src/icons/folder-open.ts","../../../node_modules/lucide-react/src/icons/list-filter.ts","../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../node_modules/lucide-react/src/icons/mail-open.ts","../../../node_modules/lucide-react/src/icons/mail.ts","../../../node_modules/lucide-react/src/icons/paperclip.ts","../../../node_modules/lucide-react/src/icons/pencil.ts","../../../node_modules/lucide-react/src/icons/plus.ts","../../../node_modules/lucide-react/src/icons/search.ts","../../../node_modules/lucide-react/src/icons/trash-2.ts","../../../node_modules/lucide-react/src/icons/user.ts","../../../node_modules/lucide-react/src/icons/x.ts","../../../node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../node_modules/tailwind-merge/src/lib/config-utils.ts","../../../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../node_modules/tailwind-merge/src/lib/tw-join.ts","../../../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/from-theme.ts","../../../node_modules/tailwind-merge/src/lib/validators.ts","../../../node_modules/tailwind-merge/src/lib/default-config.ts","../../../node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/components/utils.ts","../src/components/DropDownMenu/index.tsx","../src/components/Header/index.tsx","../src/components/AppsMenu/index.tsx","../src/components/Dialog/index.tsx","../src/components/Modal/index.tsx","../src/components/Modal/ModalMudancaEntidade/index.tsx","../src/components/Sidebar/index.tsx","../src/components/assets/logotipo-default.tsx","../src/components/Popover/index.tsx","../src/components/Select/index.tsx","../src/components/Tabs/index.tsx","../src/components/atoms/forms/input.tsx","../src/components/atoms/forms/textarea.tsx","../src/components/atoms/forms/checkbox.tsx","../src/components/atoms/forms/switch.tsx","../src/components/atoms/display/badge.tsx","../src/components/atoms/display/avatar.tsx","../src/components/molecules/card.tsx","../src/components/molecules/collapsible.tsx","../src/components/molecules/display/page-header.tsx","../src/components/molecules/display/empty-state.tsx","../src/components/molecules/display/result-metadata.tsx","../src/components/molecules/display/label-value.tsx","../src/components/molecules/forms/combobox.tsx","../src/components/molecules/forms/combobox-footer.tsx","../src/components/molecules/overlay/command.tsx","../src/components/molecules/overlay/popover.tsx","../src/components/molecules/forms/multi-select.tsx","../src/components/molecules/overlay/confirm-dialog.tsx","../src/components/molecules/overlay/tooltip.tsx","../src/components/organisms/filter/index.tsx","../src/components/organisms/card-list/index.tsx","../src/components/organisms/drawer/drawer.tsx","../src/components/organisms/drawer/drawer-context.tsx","../src/components/organisms/drawer/use-drawer.ts","../src/components/organisms/upload/file-upload.tsx","../src/components/organisms/upload/utils.ts","../src/components/organisms/upload/file-list.tsx","../src/components/organisms/calendar/calendar-utils.ts","../src/components/organisms/calendar/mini-month-calendar.tsx","../src/components/organisms/calendar/month-year-picker.tsx","../src/components/organisms/period-range-list/index.tsx","../src/components/organisms/header-notifications/index.tsx","../src/components/organisms/header-notifications/cliente.ts","../src/components/organisms/header-notifications/mapear.ts","../src/components/organisms/header-notifications/modal-lembretes.tsx","../src/components/organisms/header-notifications/usar-notificacoes.ts","../src/alertas/alertas.tsx","../src/alertas/formulario-alerta.tsx","../src/alertas/date-utils.ts","../src/alertas/alerta-item.tsx","../src/alertas/usar-alertas.ts","../src/alertas/cliente.ts"],"sourcesContent":["import \"./tailwindcss/tailwind.css\";\nexport * from \"./components/Button\";\nexport * from \"./components/Header\";\nexport * from \"./components/AppsMenu\";\nexport * from \"./components/Modal\";\nexport * from \"./components/Modal/ModalMudancaEntidade\";\nexport * from \"./components/Dialog\";\nexport * from \"./components/Button\";\nexport * from \"./components/Sidebar\";\nexport * from \"./components/Popover\";\nexport * from \"./components/DropDownMenu\";\nexport * from \"./components/Select\";\nexport * from \"./components/Tabs\";\n\n/** Atoms */\nexport * from \"./components/atoms/forms/input\";\nexport * from \"./components/atoms/forms/textarea\";\nexport * from \"./components/atoms/forms/checkbox\";\nexport * from \"./components/atoms/forms/switch\";\nexport * from \"./components/atoms/display/badge\";\nexport * from \"./components/atoms/display/avatar\";\n/** Molecules */\nexport * from \"./components/molecules/card\";\nexport * from \"./components/molecules/collapsible\";\nexport * from \"./components/molecules/display/page-header\";\nexport * from \"./components/molecules/display/empty-state\";\nexport * from \"./components/molecules/display/result-metadata\";\nexport * from \"./components/molecules/display/label-value\";\nexport * from \"./components/molecules/forms/combobox\";\nexport * from \"./components/molecules/forms/multi-select\";\nexport * from \"./components/molecules/overlay/command\";\nexport * from \"./components/molecules/overlay/confirm-dialog\";\nexport * from \"./components/molecules/overlay/tooltip\";\n/** Organisms */\nexport * from \"./components/organisms/filter\";\nexport * from \"./components/organisms/card-list\";\nexport * from \"./components/organisms/drawer\";\nexport * from \"./components/organisms/upload\";\nexport * from \"./components/organisms/calendar\";\nexport * from \"./components/organisms/period-range-list\";\nexport * from \"./components/organisms/header-notifications\";\n\n/** Modulos */\nexport * from \"./alertas\";\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { Loader2 } from \"lucide-react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\n\nconst buttonVariants = cva(\n \"cnc-inline-flex cnc-items-center cnc-justify-center cnc-border cnc-whitespace-nowrap cnc-rounded-md cnc-text-sm cnc-font-medium cnc-ring-offset-background cnc-transition-colors focus-visible:cnc-outline-none focus-visible:cnc-ring-2 focus-visible:cnc-ring-ring focus-visible:cnc-ring-offset-2 disabled:cnc-pointer-events-none disabled:cnc-opacity-50\",\n {\n variants: {\n variant: {\n confirm:\n \"cnc-bg-brand-blue-400 cnc-border-brand-blue-500 hover:cnc-bg-brand-blue-400/90 cnc-text-white\",\n create:\n \"cnc-bg-brand-green-100 cnc-border-brand-green-200 hover:cnc-bg-brand-green-100/80 cnc-text-white\",\n secondary:\n \"cnc-bg-brand-gray-20 cnc-text-secondary-foreground hover:cnc-brightness-95 cnc-text-white\",\n danger:\n \"cnc-bg-brand-red-500 cnc-border-brand-red-600 hover:cnc-bg-brand-red-500/80 cnc-text-white\",\n outline:\n \"cnc-border cnc-border-input cnc-text-brand-gray-200 cnc-bg-background cnc-shadow-sm hover:cnc-bg-brand-blue-50 hover:cnc-text-accent-foreground\",\n default:\n \"cnc-bg-primary cnc-text-primary-foreground hover:cnc-bg-primary/90 cnc-text-white\",\n },\n size: {\n default: \"cnc-h-10 cnc-px-4 cnc-py-2\",\n sm: \"cnc-h-9 cnc-rounded-md cnc-px-3\",\n lg: \"cnc-h-11 cnc-rounded-md cnc-px-8\",\n icon: \"cnc-h-10 cnc-w-10\",\n },\n outline: {\n true: \"cnc-bg-transparent\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n outline: false,\n },\n compoundVariants: [\n {\n variant: \"confirm\",\n outline: true,\n className: \"cnc-text-brand-blue-400 hover:cnc-text-white\",\n },\n {\n variant: \"create\",\n outline: true,\n className: \"cnc-text-brand-green-100 hover:cnc-text-white\",\n },\n ],\n }\n);\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n isLoading?: boolean;\n variant?:\n | \"default\"\n | \"confirm\"\n | \"create\"\n | \"secondary\"\n | \"danger\"\n | \"outline\"\n | null\n | undefined;\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\" | null | undefined;\n}\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n isLoading = false,\n outline = false,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n className={cn(\n buttonVariants({ variant, size, className, outline }),\n disabled &&\n \"cnc-cursor-not-allowed cnc-border-gray-100 cnc-bg-brand-gray-10 cnc-text-brand-gray-600\",\n isLoading &&\n \"cnc-cursor-not-allowed cnc-border-gray-100 cnc-bg-brand-gray-10 cnc-text-brand-gray-600\"\n )}\n ref={ref}\n disabled={isLoading || disabled}\n {...props}\n >\n <>\n {isLoading && (\n <Loader2 className=\"cnc-mr-2 cnc-h-4 cnc-w-4 cnc-animate-spin cnc-text-brand-gray-600\" />\n )}\n {children}\n </>\n </Comp>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return Boolean(className) && array.indexOf(className) === index;\n })\n .join(' ');\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) => {\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n ...props,\n }),\n );\n\n Component.displayName = `${iconName}`;\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name BellOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOC43IDNBNiA2IDAgMCAxIDE4IDhhMjEuMyAyMS4zIDAgMCAwIC42IDUiIC8+CiAgPHBhdGggZD0iTTE3IDE3SDNzMy0yIDMtOWE0LjY3IDQuNjcgMCAwIDEgLjMtMS43IiAvPgogIDxwYXRoIGQ9Ik0xMC4zIDIxYTEuOTQgMS45NCAwIDAgMCAzLjQgMCIgLz4KICA8cGF0aCBkPSJtMiAyIDIwIDIwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/bell-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst BellOff = createLucideIcon('BellOff', [\n ['path', { d: 'M8.7 3A6 6 0 0 1 18 8a21.3 21.3 0 0 0 .6 5', key: 'o7mx20' }],\n ['path', { d: 'M17 17H3s3-2 3-9a4.67 4.67 0 0 1 .3-1.7', key: '16f1lm' }],\n ['path', { d: 'M10.3 21a1.94 1.94 0 0 0 3.4 0', key: 'qgo35s' }],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n]);\n\nexport default BellOff;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name BellRing\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiA4YTYgNiAwIDAgMSAxMiAwYzAgNyAzIDkgMyA5SDNzMy0yIDMtOSIgLz4KICA8cGF0aCBkPSJNMTAuMyAyMWExLjk0IDEuOTQgMCAwIDAgMy40IDAiIC8+CiAgPHBhdGggZD0iTTQgMkMyLjggMy43IDIgNS43IDIgOCIgLz4KICA8cGF0aCBkPSJNMjIgOGMwLTIuMy0uOC00LjMtMi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/bell-ring\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst BellRing = createLucideIcon('BellRing', [\n ['path', { d: 'M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9', key: '1qo2s2' }],\n ['path', { d: 'M10.3 21a1.94 1.94 0 0 0 3.4 0', key: 'qgo35s' }],\n ['path', { d: 'M4 2C2.8 3.7 2 5.7 2 8', key: 'tap9e0' }],\n ['path', { d: 'M22 8c0-2.3-.8-4.3-2-6', key: '5bb3ad' }],\n]);\n\nexport default BellRing;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Bell\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiA4YTYgNiAwIDAgMSAxMiAwYzAgNyAzIDkgMyA5SDNzMy0yIDMtOSIgLz4KICA8cGF0aCBkPSJNMTAuMyAyMWExLjk0IDEuOTQgMCAwIDAgMy40IDAiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/bell\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Bell = createLucideIcon('Bell', [\n ['path', { d: 'M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9', key: '1qo2s2' }],\n ['path', { d: 'M10.3 21a1.94 1.94 0 0 0 3.4 0', key: 'qgo35s' }],\n]);\n\nexport default Bell;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name CalendarDays\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAydjQiIC8+CiAgPHBhdGggZD0iTTE2IDJ2NCIgLz4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjQiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik0zIDEwaDE4IiAvPgogIDxwYXRoIGQ9Ik04IDE0aC4wMSIgLz4KICA8cGF0aCBkPSJNMTIgMTRoLjAxIiAvPgogIDxwYXRoIGQ9Ik0xNiAxNGguMDEiIC8+CiAgPHBhdGggZD0iTTggMThoLjAxIiAvPgogIDxwYXRoIGQ9Ik0xMiAxOGguMDEiIC8+CiAgPHBhdGggZD0iTTE2IDE4aC4wMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/calendar-days\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CalendarDays = createLucideIcon('CalendarDays', [\n ['path', { d: 'M8 2v4', key: '1cmpym' }],\n ['path', { d: 'M16 2v4', key: '4m81vk' }],\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', key: '1hopcy' }],\n ['path', { d: 'M3 10h18', key: '8toen8' }],\n ['path', { d: 'M8 14h.01', key: '6423bh' }],\n ['path', { d: 'M12 14h.01', key: '1etili' }],\n ['path', { d: 'M16 14h.01', key: '1gbofw' }],\n ['path', { d: 'M8 18h.01', key: 'lrp35t' }],\n ['path', { d: 'M12 18h.01', key: 'mhygvu' }],\n ['path', { d: 'M16 18h.01', key: 'kzsmim' }],\n]);\n\nexport default CalendarDays;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('Check', [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]]);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('ChevronDown', [\n ['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }],\n]);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('ChevronLeft', [\n ['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }],\n]);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('ChevronRight', [\n ['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }],\n]);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTggMTUtNi02LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronUp = createLucideIcon('ChevronUp', [['path', { d: 'm18 15-6-6-6 6', key: '153udz' }]]);\n\nexport default ChevronUp;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronsUpDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNyAxNSA1IDUgNS01IiAvPgogIDxwYXRoIGQ9Im03IDkgNS01IDUgNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevrons-up-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronsUpDown = createLucideIcon('ChevronsUpDown', [\n ['path', { d: 'm7 15 5 5 5-5', key: '1hf1tw' }],\n ['path', { d: 'm7 9 5-5 5 5', key: 'sgt6xg' }],\n]);\n\nexport default ChevronsUpDown;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Circle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Circle = createLucideIcon('Circle', [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n]);\n\nexport default Circle;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Download\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgLz4KICA8cG9seWxpbmUgcG9pbnRzPSI3IDEwIDEyIDE1IDE3IDEwIiAvPgogIDxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iMTUiIHkyPSIzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/download\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Download = createLucideIcon('Download', [\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n ['polyline', { points: '7 10 12 15 17 10', key: '2ggqvy' }],\n ['line', { x1: '12', x2: '12', y1: '15', y2: '3', key: '1vk2je' }],\n]);\n\nexport default Download;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('ExternalLink', [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n]);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FileText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdaIiAvPgogIDxwYXRoIGQ9Ik0xNCAydjRhMiAyIDAgMCAwIDIgMmg0IiAvPgogIDxwYXRoIGQ9Ik0xMCA5SDgiIC8+CiAgPHBhdGggZD0iTTE2IDEzSDgiIC8+CiAgPHBhdGggZD0iTTE2IDE3SDgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/file-text\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileText = createLucideIcon('FileText', [\n ['path', { d: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z', key: '1rqfz7' }],\n ['path', { d: 'M14 2v4a2 2 0 0 0 2 2h4', key: 'tnqrlb' }],\n ['path', { d: 'M10 9H8', key: 'b1mrlr' }],\n ['path', { d: 'M16 13H8', key: 't4e002' }],\n ['path', { d: 'M16 17H8', key: 'z1uh3a' }],\n]);\n\nexport default FileText;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FilterX\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuMDEzIDNIMmw4IDkuNDZWMTlsNCAydi04LjU0bC45LTEuMDU1IiAvPgogIDxwYXRoIGQ9Im0yMiAzLTUgNSIgLz4KICA8cGF0aCBkPSJtMTcgMyA1IDUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/filter-x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FilterX = createLucideIcon('FilterX', [\n ['path', { d: 'M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055', key: '1fi1da' }],\n ['path', { d: 'm22 3-5 5', key: '12jva0' }],\n ['path', { d: 'm17 3 5 5', key: 'k36vhe' }],\n]);\n\nexport default FilterX;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FolderOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiAxNCAxLjUtMi45QTIgMiAwIDAgMSA5LjI0IDEwSDIwYTIgMiAwIDAgMSAxLjk0IDIuNWwtMS41NCA2YTIgMiAwIDAgMS0xLjk1IDEuNUg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgxOGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderOpen = createLucideIcon('FolderOpen', [\n [\n 'path',\n {\n d: 'm6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2',\n key: 'usdka0',\n },\n ],\n]);\n\nexport default FolderOpen;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ListFilter\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyA2aDE4IiAvPgogIDxwYXRoIGQ9Ik03IDEyaDEwIiAvPgogIDxwYXRoIGQ9Ik0xMCAxOGg0IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/list-filter\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ListFilter = createLucideIcon('ListFilter', [\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M7 12h10', key: 'b7w52i' }],\n ['path', { d: 'M10 18h4', key: '1ulq68' }],\n]);\n\nexport default ListFilter;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('LoaderCircle', [\n ['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }],\n]);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name MailOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEuMiA4LjRjLjUuMzguOC45Ny44IDEuNnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlYxMGEyIDIgMCAwIDEgLjgtMS42bDgtNmEyIDIgMCAwIDEgMi40IDBsOCA2WiIgLz4KICA8cGF0aCBkPSJtMjIgMTAtOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDEwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/mail-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MailOpen = createLucideIcon('MailOpen', [\n [\n 'path',\n {\n d: 'M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z',\n key: '1jhwl8',\n },\n ],\n ['path', { d: 'm22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10', key: '1qfld7' }],\n]);\n\nexport default MailOpen;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Mail\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHg9IjIiIHk9IjQiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Im0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/mail\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mail = createLucideIcon('Mail', [\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2', key: '18n3k1' }],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7', key: '1ocrg3' }],\n]);\n\nexport default Mail;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Paperclip\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMjEuNDQgMTEuMDUtOS4xOSA5LjE5YTYgNiAwIDAgMS04LjQ5LTguNDlsOC41Ny04LjU3QTQgNCAwIDEgMSAxOCA4Ljg0bC04LjU5IDguNTdhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/paperclip\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Paperclip = createLucideIcon('Paperclip', [\n [\n 'path',\n {\n d: 'm21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48',\n key: '1u3ebp',\n },\n ],\n]);\n\nexport default Paperclip;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIgLz4KICA8cGF0aCBkPSJtMTUgNSA0IDQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/pencil\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Pencil = createLucideIcon('Pencil', [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n]);\n\nexport default Pencil;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('Plus', [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n]);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxwYXRoIGQ9Im0yMSAyMS00LjMtNC4zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon('Search', [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['path', { d: 'm21 21-4.3-4.3', key: '1qie3q' }],\n]);\n\nexport default Search;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyA2aDE4IiAvPgogIDxwYXRoIGQ9Ik0xOSA2djE0YzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0yVjYiIC8+CiAgPHBhdGggZD0iTTggNlY0YzAtMSAxLTIgMi0yaDRjMSAwIDIgMSAyIDJ2MiIgLz4KICA8bGluZSB4MT0iMTAiIHgyPSIxMCIgeTE9IjExIiB5Mj0iMTciIC8+CiAgPGxpbmUgeDE9IjE0IiB4Mj0iMTQiIHkxPSIxMSIgeTI9IjE3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/trash-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Trash2 = createLucideIcon('Trash2', [\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6', key: '4alrt4' }],\n ['path', { d: 'M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2', key: 'v07s0e' }],\n ['line', { x1: '10', x2: '10', y1: '11', y2: '17', key: '1uufr5' }],\n ['line', { x1: '14', x2: '14', y1: '11', y2: '17', key: 'xtxkd' }],\n]);\n\nexport default Trash2;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('User', [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n]);\n\nexport default User;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('X', [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n]);\n\nexport default X;\n","import {\n ClassGroup,\n ClassValidator,\n Config,\n GenericClassGroupIds,\n GenericConfig,\n GenericThemeGroupIds,\n ThemeGetter,\n ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: GenericClassGroupIds\n}\n\ninterface ClassValidatorObject {\n classGroupId: GenericClassGroupIds\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport const createClassGroupUtils = (config: GenericConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: GenericClassGroupIds,\n hasPostfixModifier: boolean,\n ) => {\n const conflicts = conflictingClassGroups[classGroupId] || []\n\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n }\n\n return conflicts\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n classPartObject: ClassPartObject,\n): GenericClassGroupIds | undefined => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nconst getGroupIdForArbitraryProperty = (className: string) => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':'),\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<GenericClassGroupIds, GenericThemeGroupIds>) => {\n const { theme, prefix } = config\n const classMap: ClassPartObject = {\n nextPart: new Map<string, ClassPartObject>(),\n validators: [],\n }\n\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(\n Object.entries(config.classGroups),\n prefix,\n )\n\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme)\n })\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<GenericThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: GenericClassGroupIds,\n theme: ThemeObject<GenericThemeGroupIds>,\n) => {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme,\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme,\n )\n })\n })\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string) => {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: [],\n })\n }\n\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n })\n\n return currentClassPartObject\n}\n\nconst isThemeGetter = (func: ClassValidator | ThemeGetter): func is ThemeGetter =>\n (func as ThemeGetter).isThemeGetter\n\nconst getPrefixedClassGroupEntries = (\n classGroupEntries: Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]>,\n prefix: string | undefined,\n): Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]> => {\n if (!prefix) {\n return classGroupEntries\n }\n\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map((classDefinition) => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition\n }\n\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(\n Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]),\n )\n }\n\n return classDefinition\n })\n\n return [classGroupId, prefixedClassGroup]\n })\n}\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport const createLruCache = <Key, Value>(maxCacheSize: number): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache = new Map<Key, Value>()\n let previousCache = new Map<Key, Value>()\n\n const update = (key: Key, value: Value) => {\n cache.set(key, value)\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = new Map()\n }\n }\n\n return {\n get(key) {\n let value = cache.get(key)\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value)\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { GenericConfig } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nexport const createParseClassName = (config: GenericConfig) => {\n const { separator, experimentalParseClassName } = config\n const isSeparatorSingleCharacter = separator.length === 1\n const firstSeparatorCharacter = separator[0]\n const separatorLength = separator.length\n\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = (className: string) => {\n const modifiers = []\n\n let bracketDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index]\n\n if (bracketDepth === 0) {\n if (\n currentCharacter === firstSeparatorCharacter &&\n (isSeparatorSingleCharacter ||\n className.slice(index, index + separatorLength) === separator)\n ) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + separatorLength\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') {\n bracketDepth++\n } else if (currentCharacter === ']') {\n bracketDepth--\n }\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.substring(modifierStart)\n const hasImportantModifier =\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n const baseClassName = hasImportantModifier\n ? baseClassNameWithImportantModifier.substring(1)\n : baseClassNameWithImportantModifier\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n }\n }\n\n if (experimentalParseClassName) {\n return (className: string) => experimentalParseClassName({ className, parseClassName })\n }\n\n return parseClassName\n}\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const sortModifiers = (modifiers: string[]) => {\n if (modifiers.length <= 1) {\n return modifiers\n }\n\n const sortedModifiers: string[] = []\n let unsortedModifiers: string[] = []\n\n modifiers.forEach((modifier) => {\n const isArbitraryVariant = modifier[0] === '['\n\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n unsortedModifiers = []\n } else {\n unsortedModifiers.push(modifier)\n }\n })\n\n sortedModifiers.push(...unsortedModifiers.sort())\n\n return sortedModifiers\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { GenericConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: GenericConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER, sortModifiers } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds } = configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const { modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition } =\n parseClassName(originalClassName)\n\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition)\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n const variantModifier = sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < arguments.length) {\n if ((argument = arguments[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string) => {\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { GenericConfig } from './types'\n\ntype CreateConfigFirst = () => GenericConfig\ntype CreateConfigSubsequent = (config: GenericConfig) => GenericConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall = initTailwindMerge\n\n function initTailwindMerge(classList: string) {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as GenericConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n function tailwindMerge(classList: string) {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments as any))\n }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || []\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst stringLengths = new Set(['px', 'full', 'screen'])\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isLength = (value: string) =>\n isNumber(value) || stringLengths.has(value) || fractionRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, 'length', isLengthOnly)\n\nexport const isNumber = (value: string) => Boolean(value) && !Number.isNaN(Number(value))\n\nexport const isArbitraryNumber = (value: string) => getIsArbitraryValue(value, 'number', isNumber)\n\nexport const isInteger = (value: string) => Boolean(value) && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nconst sizeLabels = new Set(['length', 'size', 'percentage'])\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, sizeLabels, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, 'position', isNever)\n\nconst imageLabels = new Set(['image', 'url'])\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, imageLabels, isImage)\n\nexport const isArbitraryShadow = (value: string) => getIsArbitraryValue(value, '', isShadow)\n\nexport const isAny = () => true\n\nconst getIsArbitraryValue = (\n value: string,\n label: string | Set<string>,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n const colors = fromTheme('colors')\n const spacing = fromTheme('spacing')\n const blur = fromTheme('blur')\n const brightness = fromTheme('brightness')\n const borderColor = fromTheme('borderColor')\n const borderRadius = fromTheme('borderRadius')\n const borderSpacing = fromTheme('borderSpacing')\n const borderWidth = fromTheme('borderWidth')\n const contrast = fromTheme('contrast')\n const grayscale = fromTheme('grayscale')\n const hueRotate = fromTheme('hueRotate')\n const invert = fromTheme('invert')\n const gap = fromTheme('gap')\n const gradientColorStops = fromTheme('gradientColorStops')\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions')\n const inset = fromTheme('inset')\n const margin = fromTheme('margin')\n const opacity = fromTheme('opacity')\n const padding = fromTheme('padding')\n const saturate = fromTheme('saturate')\n const scale = fromTheme('scale')\n const sepia = fromTheme('sepia')\n const skew = fromTheme('skew')\n const space = fromTheme('space')\n const translate = fromTheme('translate')\n\n const getOverscroll = () => ['auto', 'contain', 'none'] as const\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing] as const\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing] as const\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength] as const\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue] as const\n const getPositions = () =>\n [\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ] as const\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'] as const\n const getBlendModes = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const getAlign = () =>\n ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'] as const\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue] as const\n const getBreaks = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue]\n\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary(),\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{ aspect: ['auto', 'square', 'video', isArbitraryValue] }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{ columns: [isTshirtSize] }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': getBreaks() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': getBreaks() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: [...getPositions(), isArbitraryValue] }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: getOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': getOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': getOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: getOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': getOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': getOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: [inset] }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': [inset] }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': [inset] }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{ start: [inset] }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{ end: [inset] }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: [inset] }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: [inset] }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: [inset] }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: [inset] }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: ['auto', isInteger, isArbitraryValue] }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{ basis: getSpacingWithAutoAndArbitrary() }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['wrap', 'wrap-reverse', 'nowrap'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: ['1', 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: getZeroAndEmpty() }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: getZeroAndEmpty() }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{ order: ['first', 'last', 'none', isInteger, isArbitraryValue] }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': [isAny] }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [\n {\n col: [\n 'auto',\n { span: ['full', isInteger, isArbitraryValue] },\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': [isAny] }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [\n { row: ['auto', { span: [isInteger, isArbitraryValue] }, isArbitraryValue] },\n ],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: [gap] }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': [gap] }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': [gap] }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: ['normal', ...getAlign()] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': ['start', 'end', 'center', 'stretch'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...getAlign(), 'baseline'] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{ self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline'] }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': [...getAlign(), 'baseline'] }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: [padding] }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: [padding] }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: [padding] }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: [padding] }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: [padding] }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: [padding] }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: [padding] }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: [padding] }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: [padding] }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: [margin] }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: [margin] }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: [margin] }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: [margin] }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: [margin] }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: [margin] }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: [margin] }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: [margin] }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: [margin] }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{ 'space-x': [space] }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{ 'space-y': [space] }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [\n {\n w: [\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svw',\n 'lvw',\n 'dvw',\n isArbitraryValue,\n spacing,\n ],\n },\n ],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{ 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit'] }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n isArbitraryValue,\n spacing,\n 'none',\n 'full',\n 'min',\n 'max',\n 'fit',\n 'prose',\n { screen: [isTshirtSize] },\n isTshirtSize,\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [\n {\n h: [\n isArbitraryValue,\n spacing,\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svh',\n 'lvh',\n 'dvh',\n ],\n },\n ],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [\n { 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [\n { 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{ size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit'] }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{ text: ['base', isTshirtSize, isArbitraryLength] }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [\n {\n font: [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{ font: [isAny] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [\n {\n tracking: [\n 'tighter',\n 'tight',\n 'normal',\n 'wide',\n 'wider',\n 'widest',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{ 'line-clamp': ['none', isNumber, isArbitraryNumber] }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n 'none',\n 'tight',\n 'snug',\n 'normal',\n 'relaxed',\n 'loose',\n isLength,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryValue] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{ list: ['none', 'disc', 'decimal', isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: [colors] }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{ 'placeholder-opacity': [opacity] }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: [colors] }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{ 'text-opacity': [opacity] }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...getLineStyles(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n { decoration: ['auto', 'from-font', isLength, isArbitraryLength] },\n ],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{ 'underline-offset': ['auto', isLength, isArbitraryValue] }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: [colors] }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: getSpacingWithArbitrary() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryValue] }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{ 'bg-opacity': [opacity] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: [...getPositions(), isArbitraryPosition] }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: ['no-repeat', { repeat: ['', 'x', 'y', 'round', 'space'] }] }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: ['auto', 'cover', 'contain', isArbitrarySize] }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n { 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: [colors] }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: [gradientColorStops] }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: [gradientColorStops] }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: [gradientColorStops] }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: [borderRadius] }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': [borderRadius] }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': [borderRadius] }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': [borderRadius] }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': [borderRadius] }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': [borderRadius] }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': [borderRadius] }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': [borderRadius] }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': [borderRadius] }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': [borderRadius] }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': [borderRadius] }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': [borderRadius] }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': [borderRadius] }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': [borderRadius] }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': [borderRadius] }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: [borderWidth] }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': [borderWidth] }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': [borderWidth] }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': [borderWidth] }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': [borderWidth] }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': [borderWidth] }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': [borderWidth] }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': [borderWidth] }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': [borderWidth] }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{ 'border-opacity': [opacity] }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...getLineStyles(), 'hidden'] }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{ 'divide-x': [borderWidth] }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{ 'divide-y': [borderWidth] }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{ 'divide-opacity': [opacity] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{ divide: getLineStyles() }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: [borderColor] }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': [borderColor] }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': [borderColor] }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': [borderColor] }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': [borderColor] }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': [borderColor] }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': [borderColor] }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': [borderColor] }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': [borderColor] }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: [borderColor] }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: ['', ...getLineStyles()] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{ 'outline-offset': [isLength, isArbitraryValue] }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{ outline: [isLength, isArbitraryLength] }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: [colors] }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{ ring: getLengthWithEmptyAndArbitrary() }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{ ring: [colors] }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{ 'ring-opacity': [opacity] }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{ 'ring-offset': [isLength, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{ 'ring-offset': [colors] }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{ shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow] }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{ shadow: [isAny] }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [opacity] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': getBlendModes() }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{ filter: ['', 'none'] }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: [blur] }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [brightness] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [contrast] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{ 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue] }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: [grayscale] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [hueRotate] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: [invert] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [saturate] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: [sepia] }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{ 'backdrop-filter': ['', 'none'] }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': [blur] }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{ 'backdrop-brightness': [brightness] }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{ 'backdrop-contrast': [contrast] }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{ 'backdrop-grayscale': [grayscale] }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{ 'backdrop-hue-rotate': [hueRotate] }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{ 'backdrop-invert': [invert] }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{ 'backdrop-opacity': [opacity] }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{ 'backdrop-saturate': [saturate] }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{ 'backdrop-sepia': [sepia] }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': [borderSpacing] }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': [borderSpacing] }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': [borderSpacing] }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n 'none',\n 'all',\n '',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: getNumberAndArbitrary() }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{ ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue] }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: getNumberAndArbitrary() }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue] }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{ transform: ['', 'gpu', 'none'] }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: [scale] }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': [scale] }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': [scale] }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: [isInteger, isArbitraryValue] }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': [translate] }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': [translate] }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': [skew] }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': [skew] }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [\n {\n origin: [\n 'center',\n 'top',\n 'top-right',\n 'right',\n 'bottom-right',\n 'bottom',\n 'bottom-left',\n 'left',\n 'top-left',\n isArbitraryValue,\n ],\n },\n ],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: ['auto', colors] }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: [colors] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['none', 'auto'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', 'y', 'x', ''] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': getSpacingWithArbitrary() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [\n {\n touch: ['auto', 'none', 'manipulation'],\n },\n ],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [\n {\n 'touch-pan': ['x', 'left', 'right'],\n },\n ],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [\n {\n 'touch-pan': ['y', 'up', 'down'],\n },\n ],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n { 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue] },\n ],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: [colors, 'none'] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{ stroke: [isLength, isArbitraryLength, isArbitraryNumber] }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: [colors, 'none'] }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-s',\n 'border-w-e',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-s',\n 'border-color-e',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { ConfigExtension, GenericConfig } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: GenericConfig,\n {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'separator', separator)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n for (const configKey in override) {\n overrideConfigProperties(\n baseConfig[configKey as keyof typeof override],\n override[configKey as keyof typeof override],\n )\n }\n\n for (const key in extend) {\n mergeConfigProperties(\n baseConfig[key as keyof typeof extend],\n extend[key as keyof typeof extend],\n )\n }\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue)\n }\n }\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds, GenericConfig } from './types'\n\ntype CreateConfigSubsequent = (config: GenericConfig) => GenericConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"cnc-flex cnc-cursor-default cnc-select-none cnc-items-center cnc-rounded-sm cnc-px-2 cnc-py-1.5 cnc-text-sm cnc-outline-none focus:cnc-bg-accent data-[state=open]:cnc-bg-accent\",\n inset && \"cnc-pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"cnc-ml-auto cnc-h-4 cnc-w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"cnc-z-50 cnc-min-w-[8rem] cnc-overflow-hidden cnc-rounded-md cnc-border cnc-bg-popover cnc-p-1 cnc-text-popover-foreground cnc-shadow-lg data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"cnc-z-50 cnc-min-w-[12rem] cnc-overflow-hidden cnc-rounded-md cnc-border cnc-bg-popover cnc-p-1 cnc-text-popover-foreground cnc-shadow-md data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2 cnc-bg-white\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-select-none cnc-items-center cnc-rounded-sm cnc-px-2 cnc-py-1.5 cnc-text-sm cnc-outline-none cnc-transition-colors focus:cnc-bg-accent focus:cnc-text-accent-foreground data-[disabled]:cnc-pointer-events-none data-[disabled]:cnc-opacity-50 hover:cnc-bg-brand-gray-10 cnc-cursor-pointer cnc-pr-8\",\n inset,\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-cursor-default cnc-select-none cnc-items-center cnc-rounded-sm cnc-py-1.5 cnc-pl-8 cnc-pr-2 cnc-text-sm cnc-outline-none cnc-transition-colors focus:cnc-bg-accent focus:cnc-text-accent-foreground data-[disabled]:cnc-pointer-events-none data-[disabled]:cnc-opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"cnc-absolute cnc-left-2 cnc-flex cnc-h-3.5 cnc-w-3.5 cnc-items-center cnc-justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-cursor-default cnc-select-none cnc-items-center cnc-rounded-sm cnc-py-1.5 cnc-pl-8 cnc-pr-2 cnc-text-sm cnc-outline-none cnc-transition-colors focus:cnc-bg-accent focus:cnc-text-accent-foreground data-[disabled]:cnc-pointer-events-none data-[disabled]:cnc-opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"cnc-absolute cnc-left-2 cnc-flex cnc-h-3.5 cnc-w-3.5 cnc-items-center cnc-justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"cnc-px-2 cnc-py-1.5 cnc-text-sm cnc-font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 cnc-my-1 cnc-h-px cnc-bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"cnc-ml-auto cnc-text-xs cnc-tracking-widest cnc-opacity-60\",\n className\n )}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import { HTMLAttributes, ReactNode } from \"react\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../DropDownMenu\";\nimport { cn } from \"../utils\";\n\nfunction getInitials(fullName: string): string {\n if (!fullName) {\n return \"\";\n }\n const nameParts = fullName.trim().split(\" \");\n\n if (nameParts.length < 2) {\n return nameParts[0][0].toUpperCase();\n }\n\n const firstNameInitial = nameParts[0][0].toUpperCase();\n const lastNameInitial = nameParts[nameParts.length - 1][0].toUpperCase();\n\n return `${firstNameInitial}${lastNameInitial}`;\n}\n\nexport interface HeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"primary\";\n}\n\nexport function Header({\n variant = \"default\",\n className,\n ...props\n}: HeaderProps) {\n return (\n <header\n data-header-type={variant}\n className={cn(\n \"cnc-header cnc-h-[60px] cnc-flex cnc-items-center cnc-justify-end cnc-gap-4 cnc-px-4 lg:cnc-px-0 cnc-w-full cnc-shadow-md\",\n variant === \"primary\" ? \"cnc-bg-primary-800\" : \"cnc-bg-white\",\n className\n )}\n {...props}\n />\n );\n}\ninterface HeaderContainerProps extends HTMLAttributes<HTMLDivElement> {\n /** Classes CSS adicionais para estilização personalizada. */\n className?: string;\n /** Indica se o menu (sidebar) está aberto. Controla a exibição do ícone de hambúrguer e a lógica de toggle.*/\n isOpen?: boolean;\n /** Função de callback chamada quando o ícone de hambúrguer (toggle do menu) é clicado. */\n onOpenMenu?: () => void;\n /**\n * Indica se o cabeçalho deve exibir um ícone de hambúrguer para controlar um sidebar.\n *\n * - Se `true`, o ícone de hambúrguer será exibido e, ao ser clicado, chamará a função `onOpenMenu` (botão só será apresentado em caso do `isOpen` estiver como `false`).\n * - Se `false`, o ícone de hambúrguer não será exibido. Neste caso, um logotipo pode ser exibido se a prop `logo` for fornecida (verifique a documentação do componente `Header` para mais detalhes sobre a prop `logo`).\n * @defaultValue true\n */\n hasSidebar?: boolean;\n /**\n * URL ou caminho para o logotipo a ser exibido no cabeçalho.\n *\n * Esta prop é usada em conjunto com `hasSidebar`.\n *\n * - Se `hasSidebar` for `false`, o logotipo será exibido.\n * - Se `hasSidebar` for `true` (ou indefinido, pois o padrão é `false`), o logotipo não será exibido, e o ícone de hambúrguer será exibido em seu lugar.\n *\n * O logotipo será renderizado como uma imagem (`<img>`) dentro de um link (`<a>`) que aponta para a URL especificada em `logoLink` (se fornecida). Caso contrário, o link apontará para `/`.\n *\n * @example\n * <HeaderContainer logo=\"/images/logo.svg\" logoLink=\"/home\" />\n */\n logo?: string;\n\n /**\n * URL para onde o logotipo deve redirecionar ao ser clicado.\n *\n * Se não for fornecida, irá se comportar como uma imagem normal.\n *\n * @example\n * <HeaderContainer logo=\"/images/logo.svg\" logoLink=\"/home\" />\n */\n logoLink?: string;\n\n container?: boolean;\n\n /**\n * Conteúdo opcional exibido à esquerda dos `children` do cabeçalho — a área\n * reservada para o sino de notificações.\n *\n * Não é renderizado quando omitido, então nenhum consumidor atual é afetado.\n * O uso previsto é o componente `HeaderNotifications`, mas qualquer nó React\n * é aceito.\n *\n * @example\n * <HeaderContainer\n * onOpenMenu={toggleSidebar}\n * isOpen={collapsed}\n * notifications={<HeaderNotifications items={notificacoes} />}\n * >\n * <HeaderProfileHeader user={usuario}>...</HeaderProfileHeader>\n * </HeaderContainer>\n */\n notifications?: ReactNode;\n}\nexport const HeaderContainer: React.FC<HeaderContainerProps> = ({\n className,\n isOpen,\n onOpenMenu,\n hasSidebar = true,\n container = false,\n logo,\n logoLink,\n notifications,\n children,\n ...props\n}) => {\n const renderLogo = () => {\n if (!hasSidebar && logo) {\n return logoLink ? (\n <a href={logoLink}>\n <img src={logo} alt=\"Logotipo\" className=\"cnc-h-8\" />\n </a>\n ) : (\n <img src={logo} alt=\"Logotipo\" className=\"cnc-h-8\" />\n );\n }\n return null;\n };\n\n return (\n <div\n className={cn(\n \"cnc-flex cnc-flex-1 cnc-justify-between cnc-items-center\",\n container && \"cnc-container cnc-mx-auto\",\n className\n )}\n {...props}\n >\n <div className=\"cnc-flex cnc-items-center\">\n {onOpenMenu && !isOpen && hasSidebar ? (\n <button\n onClick={onOpenMenu}\n className=\"hover:cnc-brightness-75 cnc-sidebar-child-hidden cnc-cursor-pointer\"\n >\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 512 512\"\n className=\"cnc-size-6 cnc-text-brand-blue-900 cnc-header-item\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeMiterlimit=\"10\"\n strokeWidth=\"48\"\n d=\"M88 152h336M88 256h336M88 360h336\"\n ></path>\n </svg>\n </button>\n ) : (\n !hasSidebar && renderLogo()\n )}\n </div>\n <div className=\"cnc-flex\">\n {notifications && (\n <div className=\"cnc-flex cnc-items-center cnc-pr-3\">{notifications}</div>\n )}\n {children}\n </div>\n </div>\n );\n};\n\ninterface ProfileProps extends HTMLAttributes<HTMLDivElement> {\n user: { entityName: string; userName: string };\n}\nexport const HeaderProfileHeader: React.FC<ProfileProps> = ({\n user,\n children,\n}) => {\n const { userName, entityName } = user;\n const initials = getInitials(userName);\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <div\n id=\"cnc-border-lateral\"\n className=\"cnc-border-solid cnc-border-l-2 cnc-border-brand-blue-60 cnc-header-item\"\n >\n <div className=\"cnc-flex cnc-flex-row cnc-gap-2 cnc-items-center cnc-justify-center hover:cnc-bg-gray-100 cnc-transition cnc-duration-300 cnc-ease-in-out cnc-cursor-pointer cnc-px-4 cnc-py-2 cnc-rounded-lg cnc-ml-8 cnc-header-item\">\n <div className=\"cnc-flex cnc-flex-col cnc-justify-end cnc-text-end\">\n <p className=\"cnc-text-xs cnc-font-extrabold cnc-text-brand-blue-900 cnc-header-item\">\n {entityName}\n </p>\n <p className=\"cnc-text-xs cnc-font-normal cnc-text-brand-gray-700 cnc-header-item/50\">\n {userName}\n </p>\n </div>\n <div>\n <div className=\"cnc-flex cnc-items-center cnc-justify-center cnc-w-10 cnc-h-10 cnc-rounded-full cnc-bg-brand-white cnc-text-brand-blue-900 cnc-text-sm cnc-font-normal cnc-border-solid cnc-border-2 cnc-header-item\">\n {initials}\n </div>\n </div>\n </div>\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent>{children}</DropdownMenuContent>\n </DropdownMenu>\n );\n};\ninterface ProfileItemProps extends HTMLAttributes<HTMLDivElement> {\n onClick: () => void;\n icon: ReactNode;\n}\nexport const HeaderProfileItem: React.FC<ProfileItemProps> = ({\n onClick,\n icon,\n children,\n}) => {\n return (\n <DropdownMenuItem onClick={onClick}>\n {icon}\n {children}\n </DropdownMenuItem>\n );\n};\n\nexport const AplicationsHeader = ({ children }: any) => {\n return (\n <>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <div className=\"cnc-flex cnc-flex-row cnc-gap-2 cnc-items-center cnc-justify-center hover:cnc-bg-gray-100 cnc-transition cnc-duration-300 cnc-ease-in-out cnc-cursor-pointer cnc-px-4 cnc-py-2 cnc-rounded-lg cnc-header-item\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 16 16\"\n // fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"cnc-header-item\"\n >\n <path\n d=\"M2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4ZM8 16C9.1 16 10 15.1 10 14C10 12.9 9.1 12 8 12C6.9 12 6 12.9 6 14C6 15.1 6.9 16 8 16ZM2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16ZM2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10ZM8 10C9.1 10 10 9.1 10 8C10 6.9 9.1 6 8 6C6.9 6 6 6.9 6 8C6 9.1 6.9 10 8 10ZM12 2C12 3.1 12.9 4 14 4C15.1 4 16 3.1 16 2C16 0.9 15.1 0 14 0C12.9 0 12 0.9 12 2ZM8 4C9.1 4 10 3.1 10 2C10 0.9 9.1 0 8 0C6.9 0 6 0.9 6 2C6 3.1 6.9 4 8 4ZM14 10C15.1 10 16 9.1 16 8C16 6.9 15.1 6 14 6C12.9 6 12 6.9 12 8C12 9.1 12.9 10 14 10ZM14 16C15.1 16 16 15.1 16 14C16 12.9 15.1 12 14 12C12.9 12 12 12.9 12 14C12 15.1 12.9 16 14 16Z\"\n // fill=\"black\"\n />\n </svg>\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"flex\">{children}</DropdownMenuContent>\n </DropdownMenu>\n </>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from \"react\";\n\ndeclare var process: { env: Record<string, string | undefined> };\nexport interface AppItem {\n name: string;\n url: string;\n icon?: string;\n image?: string;\n color?: string;\n}\n\nexport const availableApps: Record<string, AppItem> = {\n GEV: { name: \"Gestão de Eventos\", url: process.env.NEXT_PUBLIC_GEV_APP_URL ?? \"https://gestaoeventos.cnc.org.br\", icon: \"fa-solid fa-calendar-days\", color: \"#E35169\" },\n RENAR: { name: \"RENAR\", url: process.env.NEXT_PUBLIC_RENAR_APP_URL ?? \"https://renar.azurewebsites.net/\", icon: \"fa-solid fa-book\", color: \"#FFAB00\" },\n GDS: { name: \"GDS\", url: process.env.NEXT_PUBLIC_GDS_APP_URL ?? \"https://gds.cnc.org.br/\", icon: \"fa-solid fa-layer-group\", color: \"#0052CC\" },\n GDC: { name: \"Gestão de Câmaras\", url: process.env.NEXT_PUBLIC_GDC_APP_URL ?? \"https://gestaocamaras.cnc.org.br/\", icon: \"fa-solid fa-building-columns\", color: \"#36B37E\" },\n GDD: { name: \"Gestão de Demandas\", url: process.env.NEXT_PUBLIC_GDD_APP_URL ?? \"https://gestaodemandas.cnc.org.br/\", icon: \"fa-solid fa-list-check\", color: \"#6554C0\" },\n CDD: { name: \"OráculoS\", url: process.env.NEXT_PUBLIC_CDD_APP_URL ?? \"https://oraculos.cnc.org.br/\", icon: \"fa-solid fa-database\", color: \"#00B8D9\" },\n};\n\nexport interface AppInput {\n code: string;\n url: string;\n}\n\nexport interface AppsMenuProps {\n apps?: AppInput[];\n}\n\nexport function AppsMenu({\n apps = Object.keys(availableApps).map((key) => ({ code: key, url: availableApps[key].url })),\n}: AppsMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const renderApps = apps\n .map((app) => {\n const baseApp = availableApps[app.code];\n if (!baseApp) return null;\n return { ...baseApp, url: app.url };\n })\n .filter((app): app is AppItem => app !== null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n\n return (\n <div className=\"cnc-relative cnc-flex cnc-items-center cnc-h-full\" ref={menuRef}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={`cnc-flex cnc-items-center cnc-justify-center cnc-w-[38px] cnc-h-[38px] cnc-rounded-full cnc-transition-all cnc-duration-200 ${\n isOpen\n ? \"cnc-bg-brand-blue-100 cnc-text-white cnc-ring-[3px] cnc-ring-brand-blue-50\"\n : \"cnc-bg-transparent cnc-text-brand-gray-500 hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n }`}\n aria-label=\"Aplicativos e Sistemas\"\n >\n <i className=\"fa-solid fa-border-all cnc-text-[18px]\"></i>\n </button>\n\n {isOpen && (\n <>\n <div className=\"cnc-absolute cnc-right-2 cnc-top-full cnc-mt-[9px] cnc-h-4 cnc-w-4 cnc-rotate-45 cnc-rounded-tl-sm cnc-bg-white cnc-pointer-events-none cnc-z-[51]\"></div>\n <div className=\"cnc-absolute cnc-right-0 cnc-top-full cnc-mt-3 cnc-w-72 cnc-translate-x-3 cnc-bg-white cnc-rounded-2xl cnc-shadow-[0_8px_30px_rgb(0,0,0,0.12)] cnc-z-50 cnc-p-3\">\n <div className=\"cnc-grid cnc-grid-cols-3 cnc-gap-1\">\n {renderApps.map((app) => (\n <a\n key={app.name}\n href={app.url}\n className=\"cnc-flex cnc-flex-col cnc-items-center cnc-justify-center cnc-py-3 cnc-px-2 cnc-rounded-xl hover:cnc-bg-brand-gray-10 cnc-transition-colors cnc-group cnc-text-center cnc-gap-1.5\"\n >\n <div className=\"cnc-flex cnc-h-8 cnc-w-8 cnc-items-center cnc-justify-center cnc-bg-transparent cnc-transition-colors\">\n {app.image ? (\n <img src={app.image} alt={app.name} width={22} height={22} />\n ) : (\n <i className={`${app.icon} cnc-text-[22px]`} style={{ color: app.color }}></i>\n )}\n </div>\n <span className=\"cnc-text-[11px] cnc-font-medium cnc-leading-tight cnc-text-brand-gray-700 cnc-tracking-tight\">\n {app.name}\n </span>\n </a>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"cnc-fixed cnc-inset-0 cnc-z-50 cnc-bg-black/80 data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"cnc-fixed cnc-left-[50%] cnc-top-[50%] cnc-z-50 cnc-grid cnc-w-full cnc-max-w-[42rem] cnc-translate-x-[-50%] cnc-translate-y-[-50%] cnc-gap-4 cnc-border cnc-bg-background cnc-p-6 cnc-pt-4 cnc-shadow-lg cnc-duration-200 data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[state=closed]:cnc-slide-out-to-left-1/2 data-[state=closed]:cnc-slide-out-to-top-[48%] data-[state=open]:cnc-slide-in-from-left-1/2 data-[state=open]:cnc-slide-in-from-top-[48%] cnc-sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"cnc-absolute cnc-right-4 cnc-top-4 cnc-rounded-sm cnc-opacity-70 cnc-ring-offset-background cnc-transition-opacity hover:cnc-opacity-100 focus:cnc-outline-none focus:cnc-ring-2 focus:cnc-ring-ring focus:cnc-ring-offset-2 disabled:cnc-pointer-events-none data-[state=open]:cnc-bg-accent data-[state=open]:cnc-text-muted-foreground\">\n <X className=\"cnc-h-4 cnc-w-4\" />\n <span className=\"cnc-sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-space-y-1.5 cnc-text-center sm:cnc-text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col-reverse sm:cnc-flex-row sm:cnc-justify-end sm:cnc-space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"cnc-text-lg cnc-font-semibold cnc-leading-none cnc-tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"cnc-text-sm cnc-text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","// import { Button } from \"../Button\";\nimport { Dialog, DialogContent, DialogHeader, DialogOverlay } from \"../Dialog\";\n\ntype entidadeOptionsType = {\n name: string;\n value: string;\n};\nexport type ModalProps = {\n title?: string;\n content?: React.ReactElement;\n onClose?: any;\n visibleModal?: boolean;\n};\n\nexport const Modal = ({\n title,\n content,\n visibleModal,\n onClose,\n}: ModalProps) => {\n return (\n <Dialog open={visibleModal} onOpenChange={onClose}>\n <DialogOverlay className=\"cnc-inset-0 cnc-bg-blackA6= data-[state=open]:cnc-animate-overlayShow\" />\n <DialogContent className=\"cnc-max-h-[100vh] cnc-p-0 cnc-rounded-sm cnc-bg-white cnc-focus:outline-none data-[state=open]:cnc-animate-contentShow\">\n {title && (\n <DialogHeader className=\"cnc-text-sm cnc-h-14 cnc-text-black cnc-font- cnc-border-b cnc-w-full cnc-leading-10\">\n {title}\n </DialogHeader>\n )}\n <div className=\"cnc-flex cnc-flex-col cnc-mb-16 cnc-mx-20 cnc-align-middle cnc-items-left cnc-justify-center\">\n {content}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","// import { Button } from \"../Button\";\nimport React, { ReactNode, useEffect } from \"react\";\nimport { Modal } from \"..\";\nimport { Button } from \"../../Button\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogOverlay,\n DialogTitle,\n} from \"../../Dialog\";\nimport { cn } from \"../../utils\";\n\ntype ModalMudancaEnntidadeProps = {\n /** @param {string} title - O título do modal. */\n title?: string;\n /** @param {function} onClose - Função chamada ao fechar o modal. */\n onClose?: any;\n /** @param {boolean} visibleModal - Define se o modal está visível. */\n visibleModal?: boolean;\n /** @param {React.ComponentType} SelectComponent - (Depreciado) Componente de seleção a ser exibido no modal. */\n SelectComponent?: any;\n buttonAction: React.MouseEventHandler<HTMLButtonElement>;\n};\n\ntype ModalMudancaEntidadeProps = {\n /** @param {string} title - O título do modal. Valor padrão: 'Selecionar a entidade'.' */\n title?: string;\n /** @param {function} onClose - Função chamada ao fechar o modal. */\n onOpenChange?: (open: boolean) => void;\n /** @param {boolean} isOpen - Define se o modal está visível. */\n isOpen?: boolean;\n /** @param {ReactNode} children - Contéudo do modal */\n children?: ReactNode;\n /** @param {string} className - Class name para ser aplicada no container do conteudo */\n className?: string;\n};\n\nexport function ModalEntidade({\n isOpen,\n onOpenChange,\n title = \"Selecionar a entidade\",\n children,\n className,\n}: ModalMudancaEntidadeProps) {\n return (\n <Dialog open={isOpen} onOpenChange={onOpenChange}>\n <DialogContent className=\"cnc-max-h-[100vh] cnc-p-0 cnc-rounded-sm cnc-bg-white cnc-focus:outline-none data-[state=open]:cnc-animate-contentShow\">\n {title && (\n <DialogHeader>\n <DialogTitle className=\"cnc-font-normal cnc-text-base\">\n {title}\n </DialogTitle>\n </DialogHeader>\n )}\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-w-full cnc-max-w-[513px] cnc-mx-auto cnc-py-6\",\n className\n )}\n >\n {children}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\n/**\n * Componente `ModalMudancaEntidade`.\n *\n * @deprecated Este componente foi depreciado. Use `ModalEntidade` em seu lugar.\n * Verifique o Storybook para exemplos de utilização e documentação completa.\n */\nexport const ModalMudancaEntidade = ({\n title,\n onClose,\n visibleModal,\n SelectComponent,\n buttonAction,\n}: ModalMudancaEnntidadeProps) => {\n return (\n <Modal\n title={title}\n onClose={onClose}\n visibleModal={visibleModal}\n content={\n <>\n <DialogTitle className=\"cnc-DialogTitle cnc-mt-10 cnc-mb-4 \">\n Selecionar a entidade\n </DialogTitle>\n <div className=\"cnc-flex cnc-mb-5 \">\n <SelectComponent />\n <Button className=\"cnc-text-white cnc-ml-5\" onClick={buttonAction}>\n Trocar entidade\n </Button>\n </div>\n </>\n }\n ></Modal>\n );\n};\n","import * as Accordion from \"@radix-ui/react-accordion\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport React, {\n cloneElement,\n ComponentProps,\n isValidElement,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n SVGProps,\n} from \"react\";\nimport { LogotipoDefault } from \"../assets/logotipo-default\";\n/**\n * Propriedades para o componente SidebarContainer.\n *\n * @extends HTMLAttributes<HTMLDivElement>\n */\nexport interface SidebarContainerProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Indica se o sidebar está aberto ou fechado.\n * @default true\n */\n isOpen?: boolean;\n}\n\nexport function SidebarContainer({\n isOpen = true,\n ...rest\n}: SidebarContainerProps) {\n return (\n <div\n data-is-open={isOpen}\n style={{ width: isOpen ? '100%' : '0' }} \n className={`cnc-w-full cnc-max-w-full cnc-transition-all cnc-duration-300 cnc-ease-in-out cnc-sidebar-container cnc-bg-brand-blue-400 data-[is-open=true]:w-0`}\n {...rest}\n />\n );\n}\n\nexport interface SidebarImageBrandProps extends PropsWithChildren {\n /** @param {boolean} [props.asChild=false] - Se `true`, e `children` for um elemento React válido, este será usado como logotipo. Se `img` também for fornecido, `img` terá precedência. Se `children` não for um elemento React válido, o comportamento padrão de exibir a imagem de `img` ou `children` como conteúdo será usado. */\n asChild?: boolean;\n /** @param {{ src?: string; alt?: string }} [props.img] - Objeto com as propriedades `src` e `alt` da imagem, usado quando `asChild` é `false` ou quando `asChild` é `true` mas `children` não é um elemento React válido para ser usado como logotipo. */\n img?: {\n src?: string;\n alt?: string;\n };\n /** @param {ReactNode} [props.children] - Conteúdo personalizado ou elemento filho a ser exibido como logotipo quando `asChild` for `true` e `img` não for fornecido. Normalmente usado para o botão de toggle ou um logotipo customizado. */\n children?: ReactNode;\n onChangeToggle?: () => void;\n}\n/**\n * Componente para exibir a imagem da marca (logotipo) na barra lateral.\n *\n * Exibe uma imagem, um elemento filho como logotipo ou conteúdo personalizado na parte superior da barra lateral.\n * Permite a inclusão de um botão de alternância (toggle) para colapsar a barra lateral.\n * A prop `asChild` permite usar um elemento filho como logotipo, caso a prop `img` não seja fornecida.\n */\nexport function SidebarImageBrand({\n asChild = false,\n onChangeToggle,\n img,\n children,\n}: SidebarImageBrandProps) {\n return (\n <div className=\"cnc-flex cnc-items-center cnc-justify-between cnc-bg-primary-900 cnc-w-full cnc-h-full cnc-max-h-[70px] cnc-py-5 cnc-px-6 cnc-transition-all cnc-duration-300 cnc-ease-in-out cnc-sidebar-child-w-0\">\n <span className=\"cnc-sidebar-child-hidden\">\n {asChild && !img ? (\n children\n ) : img && img.src ? (\n <img\n src={img.src}\n alt={img?.alt}\n className=\"cnc-w-[159px] cnc-h-[28px] cnc-object-contain\"\n />\n ) : (\n <LogotipoDefault />\n )}\n </span>\n {onChangeToggle && (\n <button\n onClick={onChangeToggle}\n className=\"hover:cnc-brightness-75 cnc-sidebar-child-hidden\"\n >\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 512 512\"\n className=\"cnc-size-6 cnc-text-white\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeMiterlimit=\"10\"\n strokeWidth=\"48\"\n d=\"M88 152h336M88 256h336M88 360h336\"\n ></path>\n </svg>\n </button>\n )}\n </div>\n );\n}\n\ntype AccordionRootProps = ComponentProps<typeof Accordion.Root>;\n\nexport type SidebarProps = AccordionRootProps & {\n /** @param {ReactNode} props.children - Os elementos filhos a serem renderizados dentro do Sidebar. */\n children?: AccordionRootProps[\"children\"];\n /** @param {'single' | 'multiple'} [props.type='single'] - Determina se um ou vários itens podem ser abertos simultaneamente. */\n type: AccordionRootProps[\"type\"];\n};\n/**\n * Componente Sidebar, responsável por renderizar a estrutura principal do menu lateral\n * e gerenciar o comportamento de acordeão dos itens de navegação.\n *\n * Este componente utiliza o Radix UI Accordion para controlar a expansão e o colapso\n * dos itens do menu. O tipo de acordeão (único ou múltiplo) é determinado pela propriedade `type`.\n *\n * Estende as tipagens do componente `Accordion.Root` do Radix UI.\n */\nexport function Sidebar({ children, ...rest }: SidebarProps) {\n return (\n <Accordion.Root {...rest}>\n <div\n className=\"cnc-w-full cnc-h-screen-minus-70 cnc-flex cnc-flex-col cnc-py-8 cnc-bg-primary-800 cnc-px-5 \n cnc-scroll-smooth cnc-overflow-y-auto\n [&::-webkit-scrollbar]:cnc-w-1\n [&::-webkit-scrollbar-track]:cnc-bg-brand-blue-500\n [&::-webkit-scrollbar-thumb]:cnc-rounded\n [&::-webkit-scrollbar-thumb]:cnc-border\n [&::-webkit-scrollbar-thumb]:cnc-border-solid\n [&::-webkit-scrollbar-thumb]:cnc-border-brand-gray-400\n [&::-webkit-scrollbar-thumb]:cnc-bg-brand-gray-200\n cnc-sidebar-child-w-0\"\n >\n {children}\n </div>\n </Accordion.Root>\n );\n}\n/**\n * Componente de link de navegação para o Sidebar.\n *\n * Renderiza um link com ícone e título, permitindo navegação dentro do Sidebar.\n * Recomenda-se que o ícone fornecido tenha 20px de altura e largura para\n * consistência visual.\n *\n * @param {SidebarNavLinkProps} props - As propriedades do componente.\n * @param {ReactNode} props.children - O título do link e o icone que pode ser fornecido como componente ou svg (🚨recomendado 20px x 20px).\n * @param {string} props.href O caminho para redirecionamento.\n */\nexport interface SidebarNavLinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n asChild?: boolean;\n /**\n * Determina se é principal ou filho de um collapse nav, 'primary' link solto e 'secondary' é utilizado no collapse.\n * @default 'primary'\n */\n type?: \"primary\" | \"secondary\";\n}\n\nexport function SidebarNavLink({\n asChild = false,\n type = \"primary\",\n ...rest\n}: SidebarNavLinkProps) {\n const Component = asChild ? Slot : \"a\";\n\n return (\n <Component\n data-type={type}\n className=\"cnc-sidebar-item cnc-w-full cnc-py-4 cnc-text-white cnc-flex cnc-gap-2 cnc-items-center cnc-text-base hover:cnc-text-blue-600 data-[type=secondary]:cnc-pl-0 data-[type=secondary]:cnc-text-sm data-[type=secondary]:cnc-py-0 data-[type=secondary]:cnc-my-2 cnc-sidebar-child-hidden\"\n {...rest}\n />\n );\n}\n\ninterface IconProps extends SVGProps<SVGSVGElement> {}\n\nexport interface SidebarNavCollapseProps extends Accordion.AccordionItemProps {\n title: string;\n icon?: ReactElement<IconProps> | ReactNode;\n}\n\nexport function SidebarNavCollapse({\n children,\n title,\n icon,\n ...rest\n}: SidebarNavCollapseProps) {\n return (\n <Accordion.Item {...rest} className=\"cnc-sidebar-item\">\n <Accordion.Trigger className=\"group cnc-w-full cnc-py-4 cnc-text-base cnc-text-white cnc-flex cnc-gap-2 cnc-items-center cnc-justify-between hover:cnc-text-blue-600 cnc-sidebar-child-hidden\">\n <div className=\"cnc-flex cnc-items-center cnc-gap-2\">\n {icon && renderIconItem(icon)}\n {title}\n </div>\n <div className=\"cnc-w-4 cnc-h-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"cnc-w-full cnc-h-full cnc-text-violet10 cnc-transition-transform cnc-duration-300 cnc-ease-[cubic-bezier(0.87,_0,_0.13,_1)] group-data-[state=open]:cnc-rotate-90\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </div>\n </Accordion.Trigger>\n <Accordion.Content className=\"cnc-overflow-hidden data-[state=closed]:cnc-animate-slideUp data-[state=open]:cnc-animate-slideDown cnc-py-2\">\n <div className=\"cnc-bg-white/10 cnc-rounded-md cnc-font-normal cnc-px-5 cnc-py-3\">\n {children}\n </div>\n </Accordion.Content>\n </Accordion.Item>\n );\n}\nfunction renderIconItem(icon: SidebarNavCollapseProps[\"icon\"]) {\n if (!icon) return null;\n\n if (isValidElement(icon) && icon.type === \"svg\") {\n const svgIcon = icon as ReactElement<SVGProps<SVGSVGElement>>;\n\n return cloneElement(svgIcon, {\n height: 20,\n width: 20,\n });\n }\n\n if (isValidElement(icon)) {\n return <span className=\"cnc-w-5 cnc-h-5 cnc-overflow-hidden\">{icon}</span>;\n }\n\n return <span className=\"cnc-w-5 cnc-h-5 cnc-overflow-hidden\">{icon}</span>;\n}\n","export function LogotipoDefault() {\n return (\n <svg\n width=\"209\"\n height=\"20\"\n viewBox=\"0 0 209 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20.539 0H36.2809C36.2809 0 36.9745 4.48363 30.7294 6.63394C31.7327 5.31688 31.7006 3.41772 31.7006 3.41772H20.202C9.32 3.41772 1.29805 18.1019 0.207031 20.0001C0.207031 20.0001 4.07335 8.64018 11.9375 3.02348C13.5682 1.85731 17.0906 0 20.539 0Z\"\n fill=\"#C89633\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22.519 7.7601C22.4995 8.13682 22.4176 9.21051 21.9053 10.1606L21.8984 10.1616V10.1674C27.035 9.71961 29.5142 8.17673 30.687 6.64844C28.7232 7.32011 26.0843 7.7601 22.519 7.7601Z\"\n fill=\"#C89633\"\n />\n <path\n d=\"M15.6289 10.2526C17.6892 10.2994 18.8026 10.313 18.8026 10.313C19.9394 10.3344 20.9691 10.2497 21.9198 10.1621C21.1415 11.8189 19.2049 13.5127 13.9602 13.4134C7.19489 13.2859 3.46398 16.9946 1.55469 18.9863L1.56405 18.9719C3.47675 16.0444 7.38469 10.0631 15.6289 10.2526Z\"\n fill=\"white\"\n />\n <path\n d=\"M60.457 3.08307V4.09961H61.9417H63.4264V3.08307V2.06652H61.9417H60.457V3.08307Z\"\n fill=\"white\"\n />\n <path\n d=\"M53.2447 2.39671C51.2817 2.622 49.907 3.55062 49.4231 4.97928C49.2636 5.43535 49.2746 6.85851 49.4396 7.2926C49.885 8.49596 50.8803 9.12237 53.3052 9.7268C55.1198 10.1829 55.4222 10.2873 55.8456 10.6005C56.0601 10.7598 56.1866 11.117 56.1536 11.4906C56.0986 12.1665 55.5432 12.5017 54.372 12.5456C53.1732 12.6006 52.222 12.2929 50.9682 11.4467L50.4789 11.117L50.017 11.606C49.2581 12.4083 48.7248 13.0017 48.7467 13.0237C49.797 13.8699 51.0562 14.4853 52.2605 14.7436C53.1348 14.9304 54.6139 14.9799 55.4662 14.8425C57.3633 14.5513 58.617 13.5787 59.0019 12.1225C59.1174 11.6994 59.1284 10.6994 59.0294 10.2873C58.793 9.3092 57.9682 8.51794 56.621 7.97945C56.3405 7.86955 55.4552 7.6058 54.6524 7.397C52.8048 6.91345 52.4584 6.74861 52.2824 6.25957C51.9635 5.36391 52.6619 4.7375 53.9651 4.74849C54.4655 4.75399 54.7679 4.81443 56.0161 5.18258C56.1041 5.21006 56.1096 5.12764 56.1096 3.94625C56.1096 2.78684 56.1041 2.67694 56.0161 2.64947C55.9611 2.63299 55.6367 2.57254 55.2903 2.5066C54.5314 2.37473 53.8001 2.33626 53.2447 2.39671Z\"\n fill=\"white\"\n />\n <path\n d=\"M74.6953 7.57213C74.6953 11.2592 74.7173 11.7647 74.8933 12.3142C75.1297 13.056 75.872 13.8912 76.5924 14.2374C77.4667 14.655 78.198 14.8088 79.5507 14.8528L80.469 14.8857V13.8692V12.8582L79.8806 12.7867C78.8579 12.6713 78.1045 12.3252 77.8846 11.8746C77.6976 11.4844 77.6646 11.1108 77.6646 9.23157V7.3963H79.0668H80.469V6.4347V5.47311L79.0833 5.46212L77.6921 5.44563L77.6756 4.65987L77.6591 3.87961H76.18H74.6953V7.57213Z\"\n fill=\"white\"\n />\n <path\n d=\"M68.4882 5.25987C67.9383 5.3258 66.9375 5.6445 66.5031 5.89726C65.5024 6.47972 64.9305 7.50725 65.046 8.52379C65.0899 8.95239 65.2274 9.2546 65.5134 9.56231C65.9203 10.0019 66.6406 10.3151 67.8503 10.5789C68.1528 10.6448 68.6256 10.7492 68.9006 10.8096C69.5164 10.9415 70.1268 11.2272 70.2918 11.4525C70.5392 11.7987 70.3907 12.3042 69.9728 12.5515C69.7309 12.6944 69.6869 12.6999 69.0051 12.6999C68.0098 12.6944 66.6351 12.3812 65.8323 11.98C65.6288 11.8756 65.4474 11.7932 65.4309 11.7932C65.4144 11.7932 65.4034 12.3097 65.4034 12.9416V14.0955L65.6948 14.1999C66.8056 14.6121 67.6744 14.8044 68.7081 14.8538C70.1103 14.9253 71.353 14.5901 72.2658 13.9087C72.9037 13.4307 73.2831 12.8702 73.4646 12.1449C73.5855 11.6613 73.514 11.0734 73.2666 10.5624C72.8762 9.73815 71.7544 9.13372 69.8519 8.7216C69.0875 8.55676 68.4882 8.34796 68.3067 8.18311C68.1528 8.04574 68.1747 7.71605 68.3507 7.50725C68.6201 7.18855 68.7576 7.15008 69.5989 7.15008H70.3523V6.21047V5.27085L70.0168 5.23239C69.5879 5.18843 69.0106 5.19942 68.4882 5.25987Z\"\n fill=\"white\"\n />\n <path\n d=\"M97.0316 5.25947C96.8116 5.28695 96.3607 5.39684 96.0253 5.50674C94.8156 5.90786 93.9523 6.67714 93.5069 7.74863C93.166 8.57285 93.1605 8.6278 93.133 11.8038L93.1055 14.7051H94.6231H96.1408V12.0511C96.1408 10.4905 96.1628 9.25971 96.1958 9.0509C96.3002 8.44098 96.6467 7.90798 97.1086 7.6717C97.345 7.55082 97.4495 7.53433 97.9554 7.53433C98.4942 7.53433 98.5547 7.54532 98.8242 7.69368C99.2861 7.95194 99.5995 8.419 99.7095 9.01793C99.748 9.22124 99.77 10.3202 99.77 12.0236V14.7051H101.282H102.794V11.9412C102.794 10.2817 102.822 9.08937 102.855 8.94101C103.064 8.02337 103.685 7.50686 104.581 7.50686C105.571 7.50686 106.215 8.11129 106.363 9.17179C106.401 9.43005 106.423 10.6169 106.423 12.1555V14.7051H107.914H109.398L109.382 11.7489C109.36 8.92452 109.354 8.78166 109.239 8.36955C108.854 6.99034 107.897 5.9738 106.572 5.52872C105.786 5.27046 105.527 5.232 104.526 5.2375C103.702 5.2375 103.526 5.25947 103.047 5.38586C102.448 5.53971 101.942 5.7595 101.563 6.01776C101.425 6.11117 101.299 6.1881 101.271 6.1881C101.249 6.1881 101.057 6.07271 100.848 5.94083C99.9459 5.35289 98.4723 5.09463 97.0316 5.25947Z\"\n fill=\"white\"\n />\n <path\n d=\"M86.1337 5.30344C84.3081 5.57818 82.9884 6.49581 82.2296 8.02338C81.8887 8.71572 81.7732 9.35862 81.8062 10.3367C81.8447 11.2488 81.9327 11.65 82.2351 12.2489C82.785 13.3369 83.3898 13.9138 84.5171 14.4194C85.1274 14.6941 85.6938 14.815 86.4966 14.8534C87.085 14.8809 88.1462 14.8095 88.5532 14.7106C88.6576 14.6831 88.8116 14.6446 88.8996 14.6282L89.048 14.5952V13.5786C89.048 13.0182 89.0425 12.5621 89.037 12.5621C89.026 12.5621 88.8336 12.617 88.6081 12.6775C88.0253 12.8368 86.898 12.8808 86.3866 12.7599C85.6333 12.5841 85.0449 12.117 84.726 11.4412C84.616 11.2159 84.5446 11.0016 84.5666 10.9686C84.5885 10.9301 85.7433 10.9137 88.1682 10.9137H91.7369L91.7754 10.6609C91.8304 10.2872 91.7534 9.46851 91.605 8.80914C91.286 7.38598 90.3567 6.22657 89.1195 5.69357C88.3552 5.36938 86.9475 5.18255 86.1337 5.30344ZM87.5909 7.52884C87.7448 7.56731 87.9648 7.64973 88.0858 7.71567C88.5257 7.93546 89.0041 8.60033 89.081 9.09487L89.1195 9.32016H86.8265C84.9845 9.32016 84.5391 9.30367 84.5391 9.24872C84.5391 9.06739 84.99 8.26515 85.2099 8.05634C85.4738 7.80358 85.8588 7.58379 86.1722 7.51236C86.4911 7.43543 87.2829 7.44642 87.5909 7.52884Z\"\n fill=\"white\"\n />\n <path\n d=\"M114.892 5.30939C114.634 5.33686 114.315 5.38082 114.178 5.4028L113.93 5.45225L113.914 6.58419L113.903 7.71612L114.134 7.65568C114.266 7.62821 114.815 7.60073 115.36 7.59524C116.179 7.58974 116.405 7.60623 116.652 7.68865C117.125 7.8425 117.46 8.12274 117.631 8.4854C117.779 8.80959 117.862 9.37556 117.768 9.37556C117.735 9.37556 117.515 9.32611 117.279 9.27116C116.223 9.00741 114.639 8.98543 113.573 9.20522C111.956 9.5459 110.988 10.6009 110.988 12.0296C110.988 13.2879 111.879 14.3319 113.27 14.711C113.864 14.8759 115.316 14.8924 115.91 14.744C116.41 14.6176 117.152 14.244 117.477 13.9473C117.625 13.8209 117.757 13.7165 117.774 13.7165C117.79 13.7165 117.807 13.9363 117.807 14.211V14.7055H119.242H120.672L120.65 11.5295C120.628 7.97438 120.628 7.99636 120.226 7.24357C119.517 5.9303 118.318 5.34236 116.212 5.28741C115.745 5.27093 115.151 5.28191 114.892 5.30939ZM117.235 10.7712C117.851 10.9251 117.862 10.9306 117.862 11.3537C117.862 12.2329 117.251 12.7933 116.069 12.9912C115.64 13.0681 115.497 13.0681 115.156 13.0131C114.628 12.9252 114.211 12.7164 114.04 12.4637C113.864 12.1999 113.848 11.6394 114.007 11.3757C114.205 11.0515 114.656 10.7822 115.167 10.6888C115.525 10.6229 116.844 10.6778 117.235 10.7712Z\"\n fill=\"white\"\n />\n <path\n d=\"M60.457 10.1169V14.7051H61.9417H63.4264V10.1169V5.52872H61.9417H60.457V10.1169Z\"\n fill=\"white\"\n />\n <path\n d=\"M173.197 1.72126C172.114 3.40817 171.586 4.24338 171.586 4.28185C171.586 4.30383 172.02 4.32031 172.554 4.32031H173.527L173.752 4.117C174.324 3.61148 175.71 2.27074 175.71 2.22678C175.71 2.19931 175.655 2.14986 175.589 2.12238C175.518 2.09491 175.034 1.8861 174.511 1.65532C173.994 1.43003 173.554 1.24321 173.538 1.24321C173.521 1.24321 173.368 1.45751 173.197 1.72126Z\"\n fill=\"white\"\n />\n <path\n d=\"M194.074 2.97369V3.99023H195.559H197.044L197.033 2.98468L197.016 1.98462L195.548 1.96814L194.074 1.95715V2.97369Z\"\n fill=\"white\"\n />\n <path\n d=\"M135.845 2.43604C133.887 2.63386 132.37 3.21082 131.144 4.22736C130.346 4.88674 129.653 5.94724 129.4 6.89784C129.241 7.51326 129.197 8.99687 129.323 9.76614C129.664 11.8322 131.138 13.4861 133.398 14.3488C134.173 14.6455 135.872 14.9258 136.873 14.9258H137.275V13.7554V12.5905L136.543 12.585C135.702 12.574 135.257 12.4751 134.525 12.1344C132.997 11.4201 132.144 9.99692 132.238 8.30452C132.287 7.30446 132.59 6.63409 133.283 5.94174C134.091 5.14499 135.059 4.77684 136.494 4.72189L137.275 4.68892V3.546V2.39758L136.659 2.40857C136.318 2.40857 135.949 2.42506 135.845 2.43604Z\"\n fill=\"white\"\n />\n <path\n d=\"M142.609 5.13944C140.503 5.44715 138.831 6.8813 138.342 8.80449C137.797 10.964 138.847 13.1839 140.915 14.2224C141.652 14.5905 142.141 14.7114 143.104 14.7444C143.774 14.7664 143.983 14.7554 144.407 14.6565C145.424 14.4312 146.227 13.9971 146.953 13.2773C148.173 12.0519 148.635 10.4255 148.223 8.79899C148.08 8.24951 147.689 7.46375 147.349 7.04065C146.441 5.91421 144.973 5.1834 143.488 5.12296C143.17 5.10647 142.774 5.11746 142.609 5.13944ZM144.297 7.44727C144.682 7.61761 145.089 8.0517 145.237 8.45282C145.578 9.36496 145.545 10.8156 145.166 11.6014C144.83 12.2992 144.253 12.6179 143.312 12.6179C142.565 12.6179 142.174 12.497 141.778 12.1398C141.311 11.7167 141.107 11.0464 141.107 9.95291C141.107 8.48579 141.514 7.68904 142.411 7.39781C142.889 7.23846 143.884 7.26594 144.297 7.44727Z\"\n fill=\"white\"\n />\n <path\n d=\"M154.046 5.12263C153.667 5.16659 152.831 5.37539 152.501 5.50177C152.044 5.6831 151.302 6.18862 150.994 6.5293C150.675 6.88097 150.345 7.43595 150.197 7.85905C149.944 8.60635 149.922 8.89208 149.922 11.8263V14.5957H151.434H152.941L152.957 11.6944L152.974 8.79866L153.106 8.46897C153.386 7.78212 153.963 7.39748 154.733 7.39748C155.267 7.39748 155.597 7.52387 155.932 7.85355C156.52 8.42502 156.575 8.79317 156.575 12.1011V14.5957H158.088H159.594L159.611 11.667C159.633 8.35358 159.616 8.45799 160.078 7.94697C160.474 7.50738 160.672 7.42496 161.359 7.42496C161.849 7.42496 161.97 7.44694 162.157 7.54584C162.448 7.70519 162.767 8.0184 162.893 8.26567C163.168 8.80416 163.174 8.88658 163.174 11.8318V14.5957H164.692H166.204L166.187 11.6944L166.165 8.79866L165.995 8.2327C165.725 7.35902 165.439 6.86449 164.922 6.36995C164.345 5.83146 163.79 5.52924 162.943 5.30945C161.348 4.89184 159.512 5.13362 158.357 5.91388C158.219 6.0018 158.088 6.07873 158.06 6.07873C158.038 6.07873 157.835 5.96883 157.615 5.83146C157.23 5.59518 156.729 5.40286 156.042 5.22703C155.712 5.14461 154.425 5.07867 154.046 5.12263Z\"\n fill=\"white\"\n />\n <path\n d=\"M182.994 5.1446C181.399 5.38638 180.184 6.17763 179.579 7.36451C179.177 8.14478 179.172 8.20522 179.172 11.5845V14.5957H180.684H182.196V11.6395C182.202 8.969 182.207 8.66129 182.295 8.40853C182.526 7.74915 183.12 7.3755 184.192 7.23264C184.44 7.19967 184.726 7.15571 184.825 7.14472L185.001 7.11725L184.99 6.11719L184.973 5.11713L184.121 5.11164C183.653 5.10614 183.147 5.12263 182.994 5.1446Z\"\n fill=\"white\"\n />\n <path\n d=\"M190.311 5.1395C189.706 5.2384 188.705 5.54062 188.21 5.7769C187.248 6.23297 186.61 6.81542 186.126 7.6836C185.73 8.38694 185.609 8.93642 185.609 9.98044C185.615 11.3267 185.928 12.1729 186.737 13.0465C187.479 13.8433 188.425 14.3323 189.788 14.6236C190.514 14.7829 191.62 14.8379 192.169 14.7445L192.428 14.7005V13.7004V12.7004L191.993 12.7169C190.844 12.7718 189.832 12.3927 189.107 11.6289C188.617 11.1179 188.425 10.5299 188.485 9.71669C188.54 8.88147 188.881 8.33748 189.678 7.7935C190.305 7.3649 191.136 7.12313 191.988 7.12313H192.428V6.16703C192.428 5.4582 192.411 5.19444 192.362 5.16148C192.263 5.10653 190.646 5.09004 190.311 5.1395Z\"\n fill=\"white\"\n />\n <path\n d=\"M203.01 5.14533C201.784 5.32666 200.524 5.99703 199.776 6.86521C198.93 7.85428 198.473 9.26095 198.627 10.4259C198.842 12.0908 199.82 13.459 201.344 14.2228C202.168 14.6349 202.614 14.7338 203.725 14.7283C204.808 14.7283 205.22 14.6404 205.996 14.2667C208.487 13.0414 209.487 10.25 208.289 7.85977C207.491 6.27177 205.781 5.20028 203.917 5.12335C203.598 5.10686 203.191 5.11785 203.01 5.14533ZM204.72 7.44766C204.874 7.5136 205.116 7.68394 205.253 7.8268C205.666 8.24441 205.831 8.74993 205.88 9.73351C205.93 10.8105 205.71 11.6512 205.259 12.0908C204.901 12.437 204.533 12.5743 203.901 12.6073C202.592 12.6677 201.932 12.2282 201.624 11.0633C201.492 10.5742 201.498 9.24996 201.63 8.79939C201.861 8.03561 202.24 7.59602 202.839 7.39821C203.312 7.24435 204.313 7.26633 204.72 7.44766Z\"\n fill=\"white\"\n />\n <path\n d=\"M171.532 5.33081C170.025 5.68797 168.931 6.54517 168.26 7.8914C167.93 8.55627 167.793 9.1662 167.793 10.0344C167.793 11.9081 168.651 13.3752 170.212 14.1775C170.768 14.4632 171.059 14.5621 171.725 14.683C172.533 14.8314 174.199 14.7434 174.958 14.5072C175.04 14.4797 175.051 14.3808 175.051 13.4741V12.4686L174.49 12.6005C173.809 12.7543 172.83 12.7708 172.34 12.6444C171.637 12.4631 171.103 12.0565 170.806 11.4795C170.696 11.2762 170.592 11.0509 170.57 10.9795L170.537 10.8586H174.133H177.735L177.768 10.6883C177.916 9.95196 177.619 8.36395 177.179 7.52324C176.684 6.56165 175.711 5.74292 174.721 5.4462C173.77 5.16597 172.434 5.11651 171.532 5.33081ZM173.523 7.40236C173.93 7.49028 174.199 7.63864 174.512 7.95184C174.804 8.24307 175.046 8.69914 175.09 9.05081L175.123 9.2651L172.846 9.25411L170.57 9.23763L170.586 9.10026C170.592 9.02333 170.685 8.78705 170.79 8.56726C170.988 8.16614 171.373 7.75952 171.719 7.57819C172.148 7.35291 172.934 7.27598 173.523 7.40236Z\"\n fill=\"white\"\n />\n <path\n d=\"M194.074 10.0075V14.5957H195.559H197.044V10.0075V5.41934H195.559H194.074V10.0075Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n","\"use client\";\n\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"cnc-z-50 cnc-w-72 cnc-rounded-md cnc-border cnc-bg-popover cnc-p-4 cnc-text-popover-foreground cnc-shadow-md cnc-outline-none data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverContent, PopoverTrigger };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"../utils\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectPortal = SelectPrimitive.Portal;\n\nconst SelectViewport = SelectPrimitive.Viewport;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"cnc-flex cnc-h-10 cnc-w-full cnc-items-center cnc-justify-between cnc-rounded-md cnc-border cnc-border-input cnc-bg-background cnc-px-3 cnc-py-2 cnc-text-sm cnc-text-brand-gray-200 cnc-font-medium hover:cnc-text-accent-foreground hover:cnc-bg-brand-blue-50 placeholder:cnc-text-muted-foreground focus:cnc-outline-none focus:cnc-ring-ring focus:cnc-ring-offset-2 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50 [&>span]:cnc-line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"cnc-flex cnc-cursor-default cnc-items-center cnc-justify-center cnc-py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"cnc-h-4 cnc-w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"cnc-flex cnc-cursor-default cnc-items-center cnc-justify-center cnc-py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"cnc-h-4 cnc-w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"cnc-relative cnc-z-50 cnc-max-h-96 cnc-min-w-[8rem] cnc-overflow-hidden cnc-rounded-md cnc-border cnc-bg-popover cnc-text-popover-foreground cnc-shadow-md data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"cnc-p-1\",\n position === \"popper\" &&\n \"cnc-h-[var(--radix-select-trigger-height)] cnc-w-full cnc-min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"cnc-py-1.5 cnc-pl-8 cnc-pr-2 cnc-text-sm cnc-font-semibold\",\n className\n )}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-w-full cnc-cursor-default cnc-select-none cnc-items-center cnc-rounded-sm cnc-py-1.5 cnc-pl-8 cnc-pr-2 cnc-text-sm cnc-outline-none focus:cnc-text-accent-foreground data-[disabled]:cnc-pointer-events-none data-[disabled]:cnc-opacity-50 hover:cnc-bg-slate-50\",\n className\n )}\n {...props}\n >\n <span className=\"cnc-absolute cnc-left-2 cnc-flex cnc-h-3.5 cnc-w-3.5 cnc-cnc-items-center cnc-justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"cnc-h-4 cnc-w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-cnc-mx-1 cnc-my-1 cnc-h-px cnc-bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectViewport,\n SelectValue,\n SelectPortal,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => {\n return (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\"cnc-flex cnc-gap-[2px] cnc-border-b \", className)}\n {...props}\n />\n );\n});\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"cnc-data-[state=active]:bg-muted cnc-data-[state=active]:text-primary cnc-relative cnc-text-sm cnc-font-normal cnc-px-4 cnc-py-2 cnc-bg-[#00000005] data-[state=active]:cnc-bg-white data-[state=active]:cnc-text-[#04319bfd] data-[state=active]:cnc-font-bold cnc-border-l cnc-border-r cnc-border-t cnc-rounded-tl-sm cnc-rounded-tr-sm \",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n return (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"cnc-space-y-4 cnc-border-l cnc-border-r cnc-border-b cnc-p-5 cnc-h-full\",\n className\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Content>\n );\n});\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","\"use client\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface InputProps extends React.ComponentProps<\"input\"> {\n label?: string;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, id, label, required, ...props }, ref) => {\n const idGenerate = id\n ? id\n : label && `field-${Date.now()}-${Math.random() * 100000}`;\n\n return (\n <div className=\"cnc-w-full\">\n {label && (\n <label\n htmlFor={idGenerate}\n className=\"cnc-block cnc-text-sm cnc-mb-1 cnc-font-medium cnc-text-brand-gray-600\"\n >\n {label}\n {required && <span className=\"text-red-500\"> *</span>}\n </label>\n )}\n <input\n type={type}\n id={idGenerate}\n className={cn(\n \"cnc-flex cnc-h-10 cnc-w-full cnc-rounded-md cnc-border cnc-border-input cnc-bg-transparent cnc-px-3 cnc-py-1 cnc-text-base cnc-shadow-sm cnc-transition-colors\",\n \" file:cnc-border-0 file:cnc-bg-transparent file:cnc-text-sm file:cnc-font-medium file:cnc-text-foreground placeholder:cnc-text-muted-foreground focus-visible:cnc-outline-none\",\n \"focus-visible:cnc-ring-2 focus-visible:cnc-ring-brand-gray-500/50 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50 md:cnc-text-sm \",\n \"not-disabled:hover:cnc-border-brand-gray-500\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, id, label, required, ...props }, ref) => {\n const idGenerate = id\n ? id\n : label && `field-${Date.now()}-${Math.random() * 100000}`;\n\n return (\n <div className=\"cnc-w-full\">\n {label && (\n <label\n htmlFor={idGenerate}\n className=\"cnc-block cnc-text-sm cnc-mb-1 cnc-font-medium cnc-text-brand-gray-600\"\n >\n {label}\n {required && <span className=\"text-red-500\"> *</span>}\n </label>\n )}\n <textarea\n id={idGenerate}\n className={cn(\n \"cnc-flex cnc-min-h-[96px] cnc-w-full cnc-rounded-md cnc-border cnc-border-input cnc-bg-transparent cnc-px-3 cnc-py-2 cnc-text-base cnc-shadow-sm cnc-transition-colors\",\n \"placeholder:cnc-text-muted-foreground focus-visible:cnc-outline-none\",\n \"focus-visible:cnc-ring-2 focus-visible:cnc-ring-brand-gray-500/50 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50 md:cnc-text-sm\",\n \"not-disabled:hover:cnc-border-brand-gray-500\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };","\"use client\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface CheckboxProps extends React.ComponentProps<\"input\"> {\n label?: string;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, id, label, ...props }, ref) => {\n console.log();\n\n const idGenerate = id\n ? id\n : label && `field-${Date.now()}-${Math.random() * 100000}`;\n\n return (\n <div className=\"cnc-w-full cnc-flex cnc-flex-row\">\n <input\n type=\"checkbox\"\n id={idGenerate}\n className={cn(\"cnc-w-6 cnc-h-6\", className)}\n ref={ref}\n {...props}\n />\n {label && (\n <label\n htmlFor={idGenerate}\n className=\"cnc-block cnc-text-sm cnc-font-medium cnc-text-brand-gray-600 cnc-ml-2\"\n >\n {label}\n </label>\n )}\n </div>\n );\n }\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n","\"use client\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface SwitchProps {\n label?: string;\n id?: string;\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n onBlur?: () => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n className?: string;\n \"aria-label\"?: string;\n}\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n className,\n id,\n label,\n required,\n checked,\n defaultChecked,\n onChange,\n onBlur,\n disabled,\n name,\n \"aria-label\": ariaLabel,\n },\n ref\n ) => {\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n );\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? checked : internalChecked;\n\n const reactId = React.useId();\n const fieldId = id || reactId;\n\n const handleToggle = () => {\n if (disabled) return;\n const newValue = !isChecked;\n if (!isControlled) {\n setInternalChecked(newValue);\n }\n onChange?.(newValue);\n };\n\n return (\n <div className={cn(\"cnc-flex cnc-items-center cnc-gap-2\", className)}>\n <input\n type=\"checkbox\"\n name={name}\n checked={isChecked}\n readOnly\n className=\"cnc-sr-only\"\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n <button\n ref={ref}\n id={fieldId}\n type=\"button\"\n role=\"switch\"\n aria-checked={isChecked}\n aria-label={!label ? ariaLabel : undefined}\n onClick={handleToggle}\n onBlur={onBlur}\n disabled={disabled}\n className={cn(\n \"cnc-relative cnc-inline-flex cnc-h-6 cnc-w-11 cnc-shrink-0 cnc-cursor-pointer cnc-rounded-full cnc-border cnc-transition-colors\",\n \"focus-visible:cnc-outline-none focus-visible:cnc-ring-2 focus-visible:cnc-ring-brand-gray-500/50\",\n \"disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\",\n isChecked\n ? \"cnc-bg-brand-blue-400 cnc-border-brand-blue-500\"\n : \"cnc-bg-brand-gray-20 cnc-border-brand-gray-100\"\n )}\n >\n <span\n className={cn(\n \"cnc-pointer-events-none cnc-block cnc-h-5 cnc-w-5 cnc-rounded-full cnc-bg-white cnc-shadow-sm cnc-transition-transform\",\n isChecked ? \"cnc-translate-x-5\" : \"cnc-translate-x-0\"\n )}\n />\n </button>\n {label && (\n <label\n htmlFor={fieldId}\n className=\"cnc-text-sm cnc-font-medium cnc-text-brand-gray-600 cnc-cursor-pointer\"\n >\n {label}\n {required && <span className=\"cnc-text-red-500\"> *</span>}\n </label>\n )}\n </div>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n","import React from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type BadgeVariant =\n | \"default\"\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\n\ninterface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * Variação de cor do badge.\n */\n variant?: BadgeVariant;\n /**\n * Define se o badge deve ter bordas arredondadas.\n */\n rounded?: boolean;\n /**\n * Define o tamanho do badge.\n */\n size?: BadgeSize;\n}\n\n/**\n * Badge é um componente para exibir pequenas contagens, status ou rótulos informativos.\n */\nexport const Badge = ({\n variant = \"default\",\n rounded = true,\n size = \"md\",\n className,\n ...rest\n}: BadgeProps) => {\n const baseStyle =\n \"cnc-inline-flex cnc-items-center cnc-font-semibold cnc-transition-colors\";\n\n const variants: Record<BadgeVariant, string> = {\n default: \"cnc-bg-brand-gray-20 cnc-text-brand-gray-600\",\n primary: \"cnc-bg-brand-blue-100 cnc-text-white\",\n success: \"cnc-bg-brand-green-200 cnc-text-white\",\n warning: \"cnc-bg-brand-gold-400 cnc-text-white\",\n danger: \"cnc-bg-brand-red-500 cnc-text-white\",\n info: \"cnc-bg-brand-blue-60 cnc-text-brand-blue-900\",\n };\n\n const sizes: Record<BadgeSize, string> = {\n sm: \"cnc-text-xs cnc-px-2 cnc-py-0.5\",\n md: \"cnc-text-sm cnc-px-3 cnc-py-1\",\n lg: \"cnc-text-base cnc-px-4 cnc-py-2\",\n };\n\n return (\n <span\n className={cn(\n baseStyle,\n variants[variant],\n sizes[size],\n rounded ? \"cnc-rounded-full\" : \"\",\n className\n )}\n {...rest}\n />\n );\n};\n","\"use client\";\n\nimport { User } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** URL da imagem do usuário. Se ausente ou falhar, exibe o fallback. */\n src?: string | null;\n /** Texto alternativo da imagem. */\n alt?: string;\n /** Conteúdo de fallback quando não há imagem (ex.: iniciais do nome). */\n fallback?: React.ReactNode;\n /** Tamanho do avatar. Padrão: \"md\". */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Indica carregamento (esqueleto pulsante). */\n isLoading?: boolean;\n}\n\nconst avatarSizeClasses: Record<NonNullable<AvatarProps[\"size\"]>, string> = {\n sm: \"cnc-size-8 cnc-text-[10px]\",\n md: \"cnc-size-12 cnc-text-xs\",\n lg: \"cnc-size-16 cnc-text-sm\",\n xl: \"cnc-size-24 cnc-text-xl\",\n};\n\nconst avatarSizeIcon: Record<NonNullable<AvatarProps[\"size\"]>, number> = {\n sm: 16,\n md: 20,\n lg: 28,\n xl: 40,\n};\n\nexport function Avatar({\n src,\n alt,\n fallback,\n size = \"md\",\n isLoading = false,\n className,\n ...props\n}: AvatarProps) {\n const [hasError, setHasError] = React.useState(false);\n\n const baseClasses = cn(\n \"cnc-flex cnc-shrink-0 cnc-items-center cnc-justify-center cnc-overflow-hidden cnc-rounded-full cnc-border-2 cnc-border-brand-gray-50 cnc-bg-brand-gray-10 cnc-text-brand-gray-200\",\n avatarSizeClasses[size],\n className\n );\n\n if (isLoading) {\n return (\n <span\n className={cn(baseClasses, \"cnc-animate-pulse cnc-bg-brand-gray-50\")}\n role=\"status\"\n aria-label=\"Carregando avatar\"\n {...props}\n />\n );\n }\n\n const showImage = src && !hasError;\n\n return (\n <span className={baseClasses} {...props}>\n {showImage ? (\n <img\n src={src!}\n alt={alt ?? \"Avatar\"}\n className=\"cnc-h-full cnc-w-full cnc-object-cover\"\n onError={() => setHasError(true)}\n />\n ) : fallback ? (\n <span className=\"cnc-font-bold\">{fallback}</span>\n ) : (\n <User\n className=\"cnc-shrink-0\"\n size={avatarSizeIcon[size]}\n aria-hidden=\"true\"\n />\n )}\n </span>\n );\n}","import { cn } from \"../utils\";\nimport React from \"react\";\n\n/**\n * Componente principal do Card.\n * Utilizado para agrupar visualmente conteúdos relacionados.\n */\nexport function Card({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"cnc-w-full cnc-flex cnc-flex-col cnc-border-2 cnc-border-brand-gray-50 cnc-rounded-md cnc-shadow\",\n className\n )}\n {...rest}\n />\n );\n}\n\n/**\n * Cabeçalho do Card, geralmente utilizado para título ou ações superiores.\n */\nexport function CardHeader({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div className=\"cnc-px-6 cnc-pt-6\">\n <div\n className={cn(\n \"cnc-flex cnc-items-center cnc-justify-between cnc-w-full cnc-border-b-2 cnc-border-brand-gray-50 cnc-pb-4\",\n className\n )}\n {...rest}\n />\n </div>\n );\n}\n\n/**\n * Conteúdo principal do Card. Ideal para exibir informações ou formulários.\n */\nexport function CardContent({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"cnc-px-6 cnc-py-2\", className)} {...rest} />;\n}\n\n/**\n * Rodapé do Card. Usado normalmente para botões ou ações relacionadas.\n */\nexport function CardFooter({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"cnc-mt-4 cnc-flex cnc-border-t-2 cnc-border-brand-gray-50\",\n className\n )}\n {...rest}\n />\n );\n}\n\n/**\n * Item do Rodapé do Card. Cada item representa uma ação ou elemento visual.\n *\n * ✅ Comportamento:\n * - Quando dois ou mais `<CardFooterItem />` são renderizados dentro do `<CardFooter />`,\n * o segundo e os subsequentes recebem automaticamente uma **borda à esquerda** como separador visual,\n * aplicada pela classe `.cnc-molecule-card-item + .cnc-molecule-card-item`.\n */\nexport function CardFooterItem({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"cnc-molecule-card-item cnc-flex cnc-flex-1 cnc-items-center cnc-justify-center cnc-py-3\",\n className\n )}\n {...rest}\n />\n );\n}\n","\"use client\";\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nconst Collapsible = CollapsiblePrimitive.Root;\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\n/**\n * Componente que adiciona animação ao conteúdo do Collapsible.\n *\n * @param {React.HTMLAttributes<HTMLDivElement>} props - Propriedades do componente\n * @returns {JSX.Element} Elemento animado do conteúdo\n */\nconst AnimatedCollapsibleContent = ({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) => {\n return <CollapsibleContent className=\"cnc-collapsible-content\" {...rest} />;\n};\n\nexport {\n Collapsible,\n CollapsibleTrigger,\n AnimatedCollapsibleContent as CollapsibleContent,\n};\n","\"use client\";\nimport { ElementType } from \"react\";\nimport { cn } from \"../../utils\";\n\n/**\n * Props base para componentes de layout do cabeçalho da página.\n * @property {React.ReactNode} [children] - Elementos filhos a serem renderizados.\n * @property {string} [className] - Classe adicional para estilização personalizada.\n */\ninterface PageHeaderBaseWithChildrenProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Componente principal de cabeçalho da página.\n * Responsável por layout responsivo entre colunas (mobile) e linha (desktop).\n *\n * @component\n * @param {PageHeaderBaseWithChildrenProps} props\n * @returns {JSX.Element}\n */\nexport function PageHeader({\n children,\n className,\n}: PageHeaderBaseWithChildrenProps) {\n return (\n <header\n className={cn(\n \"cnc-w-full cnc-flex cnc-flex-col cnc-items-center cnc-gap-4 cnc-p-4 cnc-bg-brand-blue-50 cnc-border-b-2 cnc-border-brand-blue-60 md:cnc-flex-row md:cnc-justify-between md:cnc-items-start md:cnc-p-8\",\n className\n )}\n >\n {children}\n </header>\n );\n}\n\n/**\n * Container para título e descrição no cabeçalho da página.\n * Responsável por alinhar o conteúdo de forma responsiva.\n *\n * @component\n * @param {PageHeaderBaseWithChildrenProps} props\n * @returns {JSX.Element}\n */\nexport function PageHeaderTitleContent({\n children,\n className,\n}: PageHeaderBaseWithChildrenProps) {\n return (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-items-center cnc-text-center md:cnc-flex-row md:cnc-items-start md:cnc-text-left\",\n className\n )}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Props para o componente de título do cabeçalho.\n * @property {string} title - Título principal da página.\n * @property {string} [description] - Descrição opcional abaixo do título.\n * @property {ElementType} [titleAs] - Elemento HTML para o título (ex: h1, h2).\n */\ninterface PageHeaderTitleProps {\n title: string;\n description?: string;\n titleAs?: ElementType;\n}\n\n/**\n * Exibe o título e a descrição da página.\n *\n * @component\n * @param {PageHeaderTitleProps} props\n * @returns {JSX.Element}\n */\nexport function PageHeaderTitle({\n title,\n description,\n titleAs = \"h1\",\n}: PageHeaderTitleProps) {\n const ComponentTitle: ElementType = titleAs;\n\n return (\n <div>\n <ComponentTitle className=\"cnc-text-2xl cnc-font-semibold cnc-text-brand-blue-600\">\n {title}\n </ComponentTitle>\n {description && (\n <p className=\"cnc-text-sm cnc-text-brand-gray-500\">{description}</p>\n )}\n </div>\n );\n}\n\n/**\n * Container para ações (botões, links) no cabeçalho da página.\n * Alinha verticalmente no mobile e horizontalmente no desktop.\n *\n * @component\n * @param {PageHeaderBaseWithChildrenProps} props\n * @returns {JSX.Element}\n */\nexport function PageHeaderActionsContainer({\n children,\n className,\n}: PageHeaderBaseWithChildrenProps) {\n return (\n <div\n className={cn(\n \"cnc-flex cnc-items-center cnc-gap-2 md:cnc-flex-row md:cnc-gap-4\",\n className\n )}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Props para o componente de título simples.\n * @property {string} title - Texto do título.\n * @property {ElementType} [as] - Elemento HTML a ser usado (default: h1).\n */\ninterface TitleProps {\n title: string;\n as?: ElementType;\n}\n\n/**\n * Componente reutilizável de título com estilos padrão.\n *\n * @component\n * @param {TitleProps} props\n * @returns {JSX.Element}\n */\nexport function Title({ title, as: Component = \"h1\" }: TitleProps) {\n return (\n <Component className=\"cnc-text-[24px] cnc-text-[#1F2C4D] cnc-font-bold cnc-mt-2 cnc-mb-4 text-center md:cnc-text-[28px] md:cnc-text-left\">\n {title}\n </Component>\n );\n}\n","\"use client\";\n\nimport { FolderOpen } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n title: string;\n description?: React.ReactNode;\n action?: React.ReactNode;\n minHeight?: string;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n minHeight = \"cnc-min-h-48\",\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-items-center cnc-justify-center cnc-rounded-md cnc-border cnc-border-dashed cnc-border-brand-gray-50 cnc-bg-brand-blue-50 cnc-px-4 cnc-py-8 cnc-text-center\",\n minHeight,\n className\n )}\n {...props}\n >\n <div className=\"cnc-mb-3 cnc-text-brand-gray-200\">\n {icon ?? <FolderOpen className=\"cnc-h-10 cnc-w-10\" />}\n </div>\n <p className=\"cnc-text-sm cnc-font-medium cnc-text-brand-blue-600\">{title}</p>\n {description ? (\n <p className=\"cnc-mt-1 cnc-max-w-md cnc-text-sm cnc-text-brand-gray-200\">\n {description}\n </p>\n ) : null}\n {action ? <div className=\"cnc-mt-4\">{action}</div> : null}\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../utils\";\n\n/**\n * Regra de gênero para o sufixo \"encontrad(o|a)s\".\n * Se omitido, usa heurística: última letra do `resourceName` é \"a\" → feminina.\n */\nexport type ResultMetadataGender = \"masc\" | \"fem\";\n\nexport interface ResultMetadataProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Nome do recurso a ser exibido (ex: \"Negociações\", \"Subgrupos\"). */\n resourceName: string;\n /** Total de registros retornados pela API. */\n total: number;\n /** Quantidade de registros exibidos na tela. */\n displayed: number;\n /** Indica se os dados ainda estão sendo carregados (opcional). */\n isLoading?: boolean;\n /**\n * Gênero forçado para \"encontrado(s)\" / \"encontrada(s)\".\n * Use quando a heurística da última letra falha (ex.: \"Sistema\").\n */\n forceWordGender?: ResultMetadataGender;\n /**\n * A partir de quantos registros exibidos o aviso\n * \"Exibindo os X primeiros registros...\" aparece. Padrão: 30.\n */\n truncationThreshold?: number;\n}\n\nfunction encontradosSuffix(\n resourceName: string,\n forceWordGender?: ResultMetadataGender\n): \"o\" | \"a\" {\n if (forceWordGender === \"masc\") return \"o\";\n if (forceWordGender === \"fem\") return \"a\";\n return resourceName.endsWith(\"a\") ? \"a\" : \"o\";\n}\n\nexport function ResultMetadata({\n resourceName,\n total,\n displayed,\n isLoading = false,\n forceWordGender,\n truncationThreshold = 30,\n className,\n ...props\n}: ResultMetadataProps) {\n const encontradVogal = encontradosSuffix(resourceName, forceWordGender);\n\n return (\n <div\n className={cn(\"cnc-mt-4 cnc-mb-4\", className)}\n role=\"status\"\n aria-live=\"polite\"\n {...props}\n >\n <div className=\"cnc-text-base cnc-font-bold cnc-text-brand-blue-100\">\n {`${resourceName} encontrad${encontradVogal}s | ${\n isLoading ? \"carregando ...\" : total?.toLocaleString(\"pt-BR\")\n }`}\n </div>\n {displayed >= truncationThreshold && (\n <div>\n Exibindo os <span className=\"cnc-font-bold\">{displayed}</span> primeiros\n registros. Utilize os filtros para refinar sua busca.\n </div>\n )}\n </div>\n );\n}","\"use client\";\n\nimport { ExternalLink } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface LabelValueProps {\n /** Rótulo exibido em destaque acima do valor. */\n label: string;\n /** Valor exibido. Vazio ou ausente mostra \"-\". */\n value?: React.ReactNode;\n /** Link externo opcional exibido ao lado do valor. */\n href?: string;\n className?: string;\n valueClassName?: string;\n}\n\nexport function LabelValue({\n label,\n value,\n href,\n className,\n valueClassName,\n}: LabelValueProps) {\n return (\n <div className={className}>\n <div className=\"cnc-mb-2 cnc-text-sm cnc-font-bold cnc-leading-4 cnc-text-primary\">\n {label}\n </div>\n <div\n className={cn(\n \"cnc-flex cnc-flex-row cnc-items-center cnc-justify-start cnc-gap-2 cnc-text-sm cnc-font-medium cnc-text-brand-gray-600\",\n valueClassName\n )}\n >\n {value ?? \"-\"}\n {href && (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"cnc-inline-flex cnc-items-center cnc-text-brand-blue-500 hover:cnc-opacity-80\"\n aria-label={`Abrir link externo de ${label}`}\n >\n <ExternalLink className=\"cnc-size-4\" />\n </a>\n )}\n </div>\n </div>\n );\n}","\"use client\";\n\nimport { Check, ChevronsUpDown } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport {\n ComboboxDropdownFooter,\n type ComboboxFooterAction,\n type ComboboxFooterRenderContext,\n} from \"./combobox-footer\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../overlay/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/popover\";\n\nexport type { ComboboxFooterAction, ComboboxFooterRenderContext };\n\n/**\n * Representa uma opção que pode ser selecionada no combobox.\n */\nexport interface ItemOption {\n value: any;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options?: ItemOption[];\n placeholder?: string;\n command?: {\n placeholder?: string;\n emptyMessage?: React.ReactNode;\n };\n onChange?: (value: string) => void;\n value?: string;\n onInput?: (value: string) => void;\n modal?: boolean;\n popoverClassName?: string;\n buttonClassName?: string;\n disabled?: boolean;\n /** Botão fixo no rodapé do dropdown (ex.: \"Cadastrar novo\") */\n footerAction?: ComboboxFooterAction;\n /** Slot customizado no rodapé; tem precedência sobre footerAction */\n renderFooter?: (ctx: ComboboxFooterRenderContext) => React.ReactNode;\n}\n\nexport function Combobox({\n options,\n placeholder = \"\",\n command,\n onChange,\n value = \"\",\n onInput,\n modal = false,\n popoverClassName,\n buttonClassName,\n disabled = false,\n footerAction,\n renderFooter,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n\n return (\n <Popover open={open} onOpenChange={setOpen} modal={modal}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n className={cn(\n \"cnc-w-full cnc-justify-between cnc-truncate \",\n buttonClassName\n )}\n disabled={disabled}\n >\n <div>\n {value\n ? options?.find((framework) => framework.value === value)?.label\n : placeholder}\n </div>\n <ChevronsUpDown className=\"cnc-ml-2 cnc-h-4 cnc-w-4 cnc-shrink-0 cnc-opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className={cn(\n \"cnc-w-[--radix-popover-trigger-width] cnc-p-0\",\n popoverClassName\n )}\n >\n <Command>\n <CommandInput\n placeholder={command?.placeholder}\n onInput={(e: any) => onInput && onInput(e.target?.value)}\n />\n <CommandList>\n <CommandEmpty>\n {command?.emptyMessage ?? \"Nenhum item encontrado\"}\n </CommandEmpty>\n <CommandGroup>\n {options?.map((option) => (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={(currentValue) => {\n if (onChange)\n onChange(currentValue === value ? \"\" : currentValue);\n setOpen(false);\n }}\n keywords={[option.value, option.label]}\n disabled={option.disabled}\n >\n <Check\n className={cn(\n \"cnc-mr-2 cnc-h-4 cnc-w-4\",\n value === option.value\n ? \"cnc-opacity-100\"\n : \"cnc-opacity-0\"\n )}\n />\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n <ComboboxDropdownFooter\n footerAction={footerAction}\n renderFooter={renderFooter}\n close={() => setOpen(false)}\n hidden={disabled}\n />\n </PopoverContent>\n </Popover>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\n\nexport interface ComboboxFooterAction {\n /** Texto do botão (ex.: \"Cadastrar Nova Temática\") */\n label: React.ReactNode;\n /** App abre modal, chama API, atualiza options */\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\n /** Variante visual (default: create) */\n variant?: \"create\" | \"confirm\" | \"outline\";\n disabled?: boolean;\n}\n\nexport interface ComboboxFooterRenderContext {\n close: () => void;\n}\n\ninterface ComboboxDropdownFooterProps {\n footerAction?: ComboboxFooterAction;\n renderFooter?: (ctx: ComboboxFooterRenderContext) => React.ReactNode;\n close: () => void;\n /** Quando o combobox está disabled, o footer não é exibido */\n hidden?: boolean;\n}\n\nexport function ComboboxDropdownFooter({\n footerAction,\n renderFooter,\n close,\n hidden = false,\n}: ComboboxDropdownFooterProps) {\n if (hidden) return null;\n\n if (renderFooter) {\n return (\n <div className=\"cnc-border-t cnc-border-brand-gray-50 cnc-p-2\">\n {renderFooter({ close })}\n </div>\n );\n }\n\n if (!footerAction) return null;\n\n return (\n <div className=\"cnc-border-t cnc-border-brand-gray-50 cnc-p-2\">\n <Button\n type=\"button\"\n variant={footerAction.variant ?? \"create\"}\n className=\"cnc-w-full\"\n disabled={footerAction.disabled}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n footerAction.onClick(event);\n }}\n >\n {footerAction.label}\n </Button>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { type DialogProps } from \"@radix-ui/react-dialog\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { Search } from \"lucide-react\";\n\nimport { cn } from \"../../utils\";\nimport { Dialog, DialogContent } from \"../../Dialog\";\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"cnc-flex cnc-h-full cnc-w-full cnc-flex-col cnc-overflow-hidden cnc-rounded-md cnc-bg-popover cnc-text-popover-foreground\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = CommandPrimitive.displayName;\n\nconst CommandDialog = ({ children, ...props }: DialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"cnc-overflow-hidden cnc-p-0\">\n <Command className=\"cnc-[&_cmdk-group-heading]:cnc-px-2 cnc-[&_cmdk-group-heading]:cnc-font-medium cnc-[&_cmdk-group-heading]:cnc-text-muted-foreground cnc-[&_cmdk-group]:not([hidden])~[cmdk-group]:cnc-pt-0 cnc-[&_cmdk-group]:cnc-px-2 cnc-[&_cmdk-input-wrapper]_svg:cnc-h-5 cnc-[&_cmdk-input-wrapper]_svg:cnc-w-5 cnc-[&_cmdk-input]:cnc-h-12 cnc-[&_cmdk-item]:cnc-px-2 cnc-[&_cmdk-item]:cnc-py-3 cnc-[&_cmdk-item]_svg:cnc-h-5 cnc-[&_cmdk-item]_svg:cnc-w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div\n className=\"cnc-flex cnc-items-center cnc-border-b cnc-px-3\"\n cmdk-input-wrapper=\"\"\n >\n <Search className=\"cnc-mr-2 cnc-h-4 cnc-w-4 cnc-shrink-0 cnc-opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"cnc-flex cnc-h-10 cnc-w-full cnc-rounded-md cnc-bg-transparent cnc-py-3 cnc-text-sm cnc-outline-none placeholder:cnc-text-muted-foreground disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n));\nCommandInput.displayName = CommandPrimitive.Input.displayName;\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\n \"cnc-max-h-[300px] cnc-overflow-y-auto cnc-overflow-x-hidden\",\n className\n )}\n {...props}\n />\n));\nCommandList.displayName = CommandPrimitive.List.displayName;\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"cnc-py-6 cnc-text-center cnc-text-sm\"\n {...props}\n />\n));\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"cnc-overflow-hidden cnc-p-1 cnc-text-foreground cnc-[&_cmdk-group-heading]:cnc-px-2 cnc-[&_cmdk-group-heading]:cnc-py-1.5 cnc-[&_cmdk-group-heading]:cnc-text-xs cnc-[&_cmdk-group-heading]:cnc-font-medium cnc-[&_cmdk-group-heading]:cnc-text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"cnc--mx-1 cnc-h-px cnc-bg-border\", className)}\n {...props}\n />\n));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-cursor-default cnc-gap-2 cnc-select-none cnc-items-center cnc-rounded-sm cnc-px-2 cnc-py-1.5 cnc-text-sm cnc-outline-none data-[disabled=true]:cnc-pointer-events-none data-[disabled=true]:cnc-opacity-50 data-[selected=true]:cnc-bg-accent data-[selected=true]:cnc-text-accent-foreground [&_svg]:cnc-pointer-events-none [&_svg]:cnc-size-4 [&_svg]:cnc-shrink-0\",\n className\n )}\n {...props}\n />\n));\nCommandItem.displayName = CommandPrimitive.Item.displayName;\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"cnc-ml-auto cnc-text-xs cnc-tracking-widest cnc-text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n};\nCommandShortcut.displayName = \"CommandShortcut\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"cnc-z-50 cnc-w-72 cnc-rounded-md cnc-border cnc-bg-popover cnc-p-4 cnc-text-popover-foreground cnc-shadow-md cnc-outline-none data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2 cnc-origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","\"use client\";\n\nimport { Check, ChevronsUpDown } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport {\n ComboboxDropdownFooter,\n type ComboboxFooterAction,\n type ComboboxFooterRenderContext,\n} from \"./combobox-footer\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../overlay/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/popover\";\n\nexport type { ComboboxFooterAction, ComboboxFooterRenderContext };\n\n/**\n * Representa uma opção selecionável no MultiSelect.\n */\nexport interface MultiSelectOption<TValue extends string = string> {\n value: TValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps<TValue extends string = string> {\n options?: MultiSelectOption<TValue>[];\n value?: TValue[];\n onChange?: (value: TValue[]) => void;\n placeholder?: string;\n disabled?: boolean;\n modal?: boolean;\n className?: string;\n buttonClassName?: string;\n popoverClassName?: string;\n command?: {\n placeholder?: string;\n emptyMessage?: React.ReactNode;\n };\n selectedCountText?: (count: number) => string;\n footerAction?: ComboboxFooterAction;\n renderFooter?: (ctx: ComboboxFooterRenderContext) => React.ReactNode;\n}\n\nexport function MultiSelect<TValue extends string = string>({\n options,\n value = [],\n onChange,\n placeholder = \"Selecione...\",\n disabled = false,\n modal = false,\n className,\n buttonClassName,\n popoverClassName,\n command,\n selectedCountText = (count) => `${count} selecionados`,\n footerAction,\n renderFooter,\n}: MultiSelectProps<TValue>) {\n const [open, setOpen] = React.useState(false);\n\n const buttonText = (() => {\n if (value.length === 0) return placeholder;\n if (value.length === 1) {\n return (\n options?.find((option) => option.value === value[0])?.label ??\n selectedCountText(1)\n );\n }\n return selectedCountText(value.length);\n })();\n\n const toggleOption = (optionValue: TValue) => {\n if (!onChange) return;\n onChange(\n value.includes(optionValue)\n ? value.filter((item) => item !== optionValue)\n : [...value, optionValue]\n );\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen} modal={modal}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"cnc-w-full cnc-justify-between cnc-truncate\",\n buttonClassName,\n className\n )}\n >\n <span className=\"cnc-truncate\">{buttonText}</span>\n <ChevronsUpDown className=\"cnc-ml-2 cnc-h-4 cnc-w-4 cnc-shrink-0 cnc-opacity-50\" />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"cnc-w-[--radix-popover-trigger-width] cnc-p-0\",\n popoverClassName\n )}\n >\n <Command>\n <CommandInput placeholder={command?.placeholder} />\n <CommandList>\n <CommandEmpty>\n {command?.emptyMessage ?? \"Nenhum item encontrado\"}\n </CommandEmpty>\n <CommandGroup>\n {options?.map((option) => {\n const isSelected = value.includes(option.value);\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={() => toggleOption(option.value)}\n keywords={[option.value, option.label]}\n disabled={option.disabled}\n >\n <Check\n className={cn(\n \"cnc-mr-2 cnc-h-4 cnc-w-4\",\n isSelected ? \"cnc-opacity-100\" : \"cnc-opacity-0\"\n )}\n />\n {option.label}\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n <ComboboxDropdownFooter\n footerAction={footerAction}\n renderFooter={renderFooter}\n close={() => setOpen(false)}\n hidden={disabled}\n />\n </PopoverContent>\n </Popover>\n );\n}\n","\"use client\";\n\nimport { Trash2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../../Dialog\";\nimport { cn } from \"../../utils\";\n\nexport interface ConfirmDialogProps {\n /** Controla a abertura/fechamento do diálogo. */\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Título do diálogo (ex.: \"Excluir demanda\"). */\n title: string;\n /** Descrição/confirmação da ação (pode conter elementos em destaque). */\n description?: React.ReactNode;\n /** Rótulo da ação de confirmação. Padrão: \"Confirmar\". */\n confirmLabel?: string;\n /** Rótulo da ação de cancelamento. Padrão: \"Cancelar\". */\n cancelLabel?: string;\n /** Rótulo exibido no botão de confirmação durante o carregamento. */\n loadingLabel?: string;\n /**\n * Chamado ao confirmar. Se retornar uma Promise, o botão entra em estado\n * de carregamento até ela resolver. O fechamento fica a cargo do consumidor.\n */\n onConfirm?: () => void | Promise<void>;\n /** Ícone exibido no círculo do cabeçalho. Padrão: ícone de lixeira. */\n icon?: React.ReactNode;\n /** Exibe o círculo colorido atrás do ícone. Padrão: `true`. */\n showIconBackground?: boolean;\n /** Alinhamento dos botões no rodapé. Padrão: `\"center\"`. */\n footerAlign?: \"center\" | \"end\";\n /** Variante do botão de confirmação. Padrão: \"danger\". */\n confirmVariant?: \"danger\" | \"confirm\";\n /** Conteúdo extra entre a descrição e o rodapé (ex.: Checkbox de confirmação). */\n children?: React.ReactNode;\n /** Controla o estado de carregamento externamente, sobrescrevendo o interno. */\n isLoading?: boolean;\n className?: string;\n}\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = \"Confirmar\",\n cancelLabel = \"Cancelar\",\n loadingLabel = \"Aguarde...\",\n onConfirm,\n icon,\n showIconBackground = true,\n footerAlign = \"center\",\n confirmVariant = \"danger\",\n children,\n isLoading,\n className,\n}: ConfirmDialogProps) {\n const [localLoading, setLocalLoading] = React.useState(false);\n\n /** isLoading efetivo: prop externa tem precedência sobre o estado interno. */\n const isBusy = isLoading ?? localLoading;\n\n const handleConfirm = async () => {\n if (isLoading !== undefined) {\n await onConfirm?.();\n return;\n }\n\n setLocalLoading(true);\n try {\n await onConfirm?.();\n } finally {\n setLocalLoading(false);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className={cn(\"cnc-max-w-md cnc-text-center\", className)}>\n <DialogHeader>\n <div\n className={cn(\n \"cnc-mx-auto cnc-mb-2 cnc-flex cnc-items-center cnc-justify-center\",\n showIconBackground &&\n \"cnc-size-16 cnc-rounded-full cnc-bg-red-100\",\n showIconBackground &&\n confirmVariant === \"confirm\" &&\n \"cnc-bg-brand-green-100/20\"\n )}\n >\n {icon ?? (\n <Trash2 className={cn(\"cnc-size-8 cnc-text-red-600\", confirmVariant === \"confirm\" && \"cnc-text-brand-green-300\")} />\n )}\n </div>\n <DialogTitle className=\"cnc-text-center\">{title}</DialogTitle>\n {description && (\n <DialogDescription className=\"cnc-text-center\">\n {description}\n </DialogDescription>\n )}\n </DialogHeader>\n\n {children}\n\n <DialogFooter\n className={cn(\n \"cnc-flex cnc-gap-2\",\n footerAlign === \"end\"\n ? \"cnc-justify-end sm:cnc-justify-end\"\n : \"cnc-justify-center sm:cnc-justify-center\"\n )}\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={isBusy}\n >\n {cancelLabel}\n </Button>\n <Button\n type=\"button\"\n variant={confirmVariant}\n isLoading={isBusy}\n onClick={handleConfirm}\n >\n {isBusy ? loadingLabel : confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface TooltipProps {\n text: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n contentClassName?: string;\n}\n\nexport function Tooltip({\n text,\n children,\n className,\n contentClassName,\n}: TooltipProps) {\n return (\n <div className={cn(\"cnc-relative cnc-inline-flex cnc-group\", className)}>\n <div\n role=\"tooltip\"\n className={cn(\n \"cnc-pointer-events-none cnc-absolute cnc-bottom-full cnc-left-1/2 cnc-z-50 cnc-mb-2 cnc-w-max cnc-max-w-xs cnc--translate-x-1/2 cnc-rounded cnc-bg-black cnc-px-2 cnc-py-1 cnc-text-xs cnc-text-white cnc-opacity-0 cnc-shadow-md cnc-transition-opacity cnc-duration-200 group-hover:cnc-opacity-100 group-focus-within:cnc-opacity-100\",\n contentClassName\n )}\n >\n {text}\n </div>\n <span className=\"cnc-cursor-pointer\">{children}</span>\n </div>\n );\n}","\"use client\";\n\nimport { FilterX, ListFilter, Search } from \"lucide-react\";\nimport * as React from \"react\";\nimport {\n Controller,\n useForm,\n useWatch,\n type Control,\n type FieldErrors,\n type UseFormRegister,\n} from \"react-hook-form\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport { Switch } from \"../../atoms/forms/switch\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../../molecules/collapsible\";\nimport { Combobox, type ItemOption } from \"../../molecules/forms/combobox\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst INPUT_BASE_CLASSES = [\n \"cnc-flex cnc-h-10 cnc-w-full cnc-rounded-md cnc-border cnc-bg-transparent cnc-px-3 cnc-py-1 cnc-text-base cnc-shadow-sm cnc-transition-colors\",\n \"placeholder:cnc-text-muted-foreground focus-visible:cnc-outline-none\",\n \"focus-visible:cnc-ring-2 focus-visible:cnc-ring-brand-gray-500/50 md:cnc-text-sm\",\n \"not-disabled:hover:cnc-border-brand-gray-500\",\n \"disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\",\n].join(\" \");\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type FilterFieldType = \"text\" | \"combobox\" | \"switch\" | \"date\";\n\nexport type FilterValues = Record<string, string | boolean>;\n\nexport interface FilterField {\n type: FilterFieldType;\n name: string;\n label?: string;\n placeholder?: string;\n id?: string;\n required?: boolean;\n disabled?: boolean;\n data?: ItemOption[];\n errorMessage?: string;\n defaultValue?: string | boolean;\n width?: string;\n onInput?: (value: string) => void;\n}\n\nexport interface FilterProps {\n fields: FilterField[];\n collapsibleFields?: FilterField[];\n onSearch: (filters: FilterValues) => void;\n onClean?: () => void;\n hideCleanFilterButton?: boolean;\n isLoading?: boolean;\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction buildDefaultValues(fields: FilterField[]): FilterValues {\n const defaults: FilterValues = {};\n for (const field of fields) {\n defaults[field.name] =\n field.defaultValue ?? (field.type === \"switch\" ? false : \"\");\n }\n return defaults;\n}\n\nfunction buildValidationRules(field: FilterField) {\n if (!field.required) return undefined;\n return {\n required: field.errorMessage || \"Campo obrigatório\",\n validate: (value: string | boolean) => {\n if (field.type === \"switch\") return true;\n if (value === \"\" || value === null || value === undefined) {\n return field.errorMessage || \"Campo obrigatório\";\n }\n return true;\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// FilterFieldItem — memoised per-field renderer (avoids full-form re-render)\n// ---------------------------------------------------------------------------\n\ninterface FilterFieldItemProps {\n field: FilterField;\n register: UseFormRegister<FilterValues>;\n control: Control<FilterValues>;\n error?: FieldErrors<FilterValues>[string];\n}\n\nconst FilterFieldItem = React.memo(function FilterFieldItem({\n field,\n register,\n control,\n error,\n}: FilterFieldItemProps) {\n const fieldId = field.id || `filter-field-${field.name}`;\n\n return (\n <div\n className=\"cnc-filter-field cnc-px-2 cnc-mb-3\"\n style={\n { \"--cnc-filter-field-w\": field.width || \"25%\" } as React.CSSProperties\n }\n >\n {field.label && (\n <label\n htmlFor={fieldId}\n className=\"cnc-block cnc-text-sm cnc-mb-1 cnc-font-medium cnc-text-brand-gray-600\"\n >\n {field.label}\n {field.required && <span className=\"cnc-text-red-500\"> *</span>}\n </label>\n )}\n\n {(field.type === \"text\" || field.type === \"date\") && (\n <input\n id={fieldId}\n type={field.type === \"date\" ? \"date\" : \"text\"}\n placeholder={field.placeholder}\n disabled={field.disabled}\n {...register(field.name, buildValidationRules(field))}\n className={cn(\n INPUT_BASE_CLASSES,\n error ? \"cnc-border-red-500\" : \"cnc-border-input\"\n )}\n />\n )}\n\n {field.type === \"combobox\" && (\n <Controller\n name={field.name}\n control={control}\n rules={buildValidationRules(field)}\n render={({ field: rhfField }) => (\n <Combobox\n value={(rhfField.value as string) || \"\"}\n onChange={(value) => rhfField.onChange(value)}\n options={field.data}\n placeholder={field.placeholder || \"Selecione uma opção\"}\n disabled={field.disabled}\n onInput={field.onInput}\n buttonClassName={cn(error && \"cnc-border-red-500\")}\n />\n )}\n />\n )}\n\n {field.type === \"switch\" && (\n <Controller\n name={field.name}\n control={control}\n rules={buildValidationRules(field)}\n render={({ field: rhfField }) => (\n <Switch\n checked={!!rhfField.value}\n onChange={(checked) => rhfField.onChange(checked)}\n onBlur={rhfField.onBlur}\n disabled={field.disabled}\n />\n )}\n />\n )}\n\n {error && (\n <span className=\"cnc-block cnc-text-xs cnc-text-red-500 cnc-mt-1\">\n {error.message as string}\n </span>\n )}\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// CleanButton — isolates useWatch re-renders from the rest of the form\n// ---------------------------------------------------------------------------\n\ninterface CleanButtonProps {\n control: Control<FilterValues>;\n onClean: () => void;\n}\n\nfunction CleanButton({ control, onClean }: CleanButtonProps) {\n const values = useWatch({ control });\n\n const hasActiveFilters = React.useMemo(() => {\n const keys = Object.keys(values);\n return keys.some((key) => {\n const val = values[key];\n if (typeof val === \"boolean\") return val;\n if (typeof val === \"string\") return val.trim() !== \"\";\n return val !== null && val !== undefined && val !== \"\";\n });\n }, [values]);\n\n return (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClean}\n disabled={!hasActiveFilters}\n className=\"cnc-shrink-0 cnc-gap-2\"\n >\n <FilterX className=\"cnc-h-4 cnc-w-4\" />\n Limpar\n </Button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Filter (main)\n// ---------------------------------------------------------------------------\n\nexport const Filter = React.forwardRef<HTMLFormElement, FilterProps>(\n function Filter(\n {\n fields,\n collapsibleFields,\n onSearch,\n onClean,\n hideCleanFilterButton = false,\n isLoading = false,\n className,\n },\n ref\n ) {\n const [isCollapsibleOpen, setIsCollapsibleOpen] = React.useState(false);\n\n const allFields = React.useMemo(\n () => [...fields, ...(collapsibleFields || [])],\n [fields, collapsibleFields]\n );\n\n const defaultValues = React.useMemo(\n () => buildDefaultValues(allFields),\n [allFields]\n );\n\n const {\n register,\n handleSubmit,\n control,\n reset,\n formState: { errors },\n } = useForm<FilterValues>({ defaultValues });\n\n // Auto-open collapsible when a collapsible field has a validation error\n React.useEffect(() => {\n if (collapsibleFields?.some((f) => errors[f.name])) {\n setIsCollapsibleOpen(true);\n }\n }, [errors, collapsibleFields]);\n\n const onSubmit = (data: FilterValues) => {\n onSearch(data);\n };\n\n const handleClean = React.useCallback(() => {\n const emptyValues: FilterValues = {};\n for (const field of allFields) {\n emptyValues[field.name] = field.type === \"switch\" ? false : \"\";\n }\n reset(emptyValues);\n onClean?.();\n }, [allFields, reset, onClean]);\n\n return (\n <Collapsible\n open={isCollapsibleOpen}\n onOpenChange={setIsCollapsibleOpen}\n >\n <form\n ref={ref}\n onSubmit={handleSubmit(onSubmit)}\n className={cn(\n \"cnc-w-full cnc-rounded-md cnc-border cnc-border-brand-gray-50 cnc-p-4 cnc-shadow-sm\",\n className\n )}\n style={{ backgroundColor: \"#F8FAFC\" }}\n >\n <div className=\"cnc-flex cnc-flex-wrap cnc-items-end\">\n {fields.map((field) => (\n <FilterFieldItem\n key={field.name}\n field={field}\n register={register}\n control={control}\n error={errors[field.name]}\n />\n ))}\n\n <div className=\"cnc-filter-actions cnc-flex cnc-items-center cnc-gap-2 cnc-px-2 cnc-mb-3 cnc-ml-auto cnc-h-10\">\n {collapsibleFields && collapsibleFields.length > 0 && (\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"cnc-shrink-0\"\n >\n <ListFilter className=\"cnc-h-4 cnc-w-4\" />\n </Button>\n </CollapsibleTrigger>\n )}\n\n <Button\n type=\"submit\"\n variant=\"confirm\"\n isLoading={isLoading}\n className=\"cnc-shrink-0 cnc-gap-2\"\n >\n <Search className=\"cnc-h-4 cnc-w-4\" />\n Pesquisar\n </Button>\n\n {!hideCleanFilterButton && (\n <CleanButton control={control} onClean={handleClean} />\n )}\n </div>\n </div>\n\n {collapsibleFields && collapsibleFields.length > 0 && (\n <CollapsibleContent>\n <div className=\"cnc-flex cnc-flex-wrap cnc-items-end cnc-pt-2\">\n {collapsibleFields.map((field) => (\n <FilterFieldItem\n key={field.name}\n field={field}\n register={register}\n control={control}\n error={errors[field.name]}\n />\n ))}\n </div>\n </CollapsibleContent>\n )}\n </form>\n </Collapsible>\n );\n }\n);\n","\"use client\";\n\nimport { FolderOpen } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface CardListProps<T> {\n items: T[];\n renderCard: (item: T, index: number) => React.ReactNode;\n emptyMessage?: string;\n minItemWidth?: string;\n className?: string;\n gap?: string;\n getKey?: (item: T, index: number) => React.Key;\n isLoading?: boolean;\n skeletonCount?: number;\n}\n\nexport function CardList<T>({\n items,\n renderCard,\n emptyMessage = \"Nenhum item\",\n minItemWidth = \"260px\",\n className,\n gap = \"cnc-gap-4\",\n getKey,\n isLoading = false,\n skeletonCount = 6,\n}: CardListProps<T>) {\n const gridStyle: React.CSSProperties = {\n gridTemplateColumns: `repeat(auto-fill, minmax(min(100%, ${minItemWidth}), 1fr))`,\n };\n\n if (isLoading) {\n return (\n <div\n className={cn(\"cnc-grid cnc-w-full\", gap, className)}\n style={gridStyle}\n aria-busy=\"true\"\n >\n {Array.from({ length: skeletonCount }).map((_, i) => (\n <div\n key={i}\n className=\"cnc-animate-pulse cnc-rounded-md cnc-border-2 cnc-border-brand-gray-50 cnc-bg-white cnc-shadow cnc-p-6\"\n >\n <div className=\"cnc-h-4 cnc-w-1/2 cnc-bg-brand-gray-100 cnc-rounded cnc-mb-4\" />\n <div className=\"cnc-h-3 cnc-w-3/4 cnc-bg-brand-gray-100 cnc-rounded cnc-mb-2\" />\n <div className=\"cnc-h-3 cnc-w-2/3 cnc-bg-brand-gray-100 cnc-rounded cnc-mb-6\" />\n <div className=\"cnc-h-8 cnc-w-full cnc-bg-brand-gray-100 cnc-rounded\" />\n </div>\n ))}\n </div>\n );\n }\n\n if (!items || items.length === 0) {\n return (\n <div\n className={cn(\n \"cnc-w-full cnc-flex cnc-flex-col cnc-items-center cnc-justify-center cnc-rounded-md cnc-py-16 cnc-px-4\",\n className\n )}\n style={{ backgroundColor: \"#F8FAFC\", color: \"#64748B\" }}\n >\n <FolderOpen className=\"cnc-h-8 cnc-w-8 cnc-mb-2\" />\n <p className=\"cnc-text-sm\">{emptyMessage}</p>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\"cnc-grid cnc-w-full\", gap, className)}\n style={gridStyle}\n >\n {items.map((item, index) => (\n <React.Fragment key={getKey ? getKey(item, index) : index}>\n {renderCard(item, index)}\n </React.Fragment>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nconst Drawer = DialogPrimitive.Root;\n\nconst DrawerTrigger = DialogPrimitive.Trigger;\n\nconst DrawerPortal = DialogPrimitive.Portal;\n\nconst DrawerClose = DialogPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"cnc-fixed cnc-inset-0 cnc-z-50 cnc-bg-black/80 data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDrawerOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\n/** Tamanhos pré-definidos para a largura do painel em telas >= sm. */\nconst drawerSizeToWidth: Record<\"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\", string> = {\n sm: \"24rem\",\n md: \"32rem\",\n lg: \"40rem\",\n xl: \"48rem\",\n full: \"100vw\",\n};\n\nexport interface DrawerContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Lado da tela em que o painel desliza. Padrão: \"right\". */\n side?: \"left\" | \"right\";\n /** Largura pré-definida do painel em telas >= sm. Padrão: \"md\". */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n /** Largura customizada (sobrescreve `size`). */\n width?: string;\n /** Exibe o botão de fechar padrão no canto superior. Padrão: true. */\n closeButton?: boolean;\n}\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n DrawerContentProps\n>(\n (\n {\n className,\n children,\n side = \"right\",\n size = \"md\",\n width,\n closeButton = true,\n style,\n ...props\n },\n ref\n ) => {\n const resolvedWidth = width ?? drawerSizeToWidth[size];\n\n return (\n <DrawerPortal>\n <DrawerOverlay />\n <DialogPrimitive.Content\n ref={ref}\n style={{ \"--drawer-width\": resolvedWidth, ...style } as React.CSSProperties}\n className={cn(\n \"cnc-fixed cnc-inset-y-0 cnc-z-50 cnc-flex cnc-w-full cnc-flex-col cnc-bg-background cnc-shadow-lg cnc-duration-200 data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0\",\n \"sm:cnc-w-[--drawer-width] sm:cnc-max-w-full\",\n side === \"right\" &&\n \"cnc-right-0 cnc-border-l data-[state=closed]:cnc-slide-out-to-right-full data-[state=open]:cnc-slide-in-from-right-full\",\n side === \"left\" &&\n \"cnc-left-0 cnc-border-r data-[state=closed]:cnc-slide-out-to-left-full data-[state=open]:cnc-slide-in-from-left-full\",\n className\n )}\n {...props}\n >\n {children}\n {closeButton && (\n <DialogPrimitive.Close className=\"cnc-absolute cnc-right-4 cnc-top-4 cnc-rounded-sm cnc-opacity-70 cnc-ring-offset-background cnc-transition-opacity hover:cnc-opacity-100 focus:cnc-outline-none focus:cnc-ring-2 focus:cnc-ring-ring focus:cnc-ring-offset-2 disabled:cnc-pointer-events-none data-[state=open]:cnc-bg-accent data-[state=open]:cnc-text-muted-foreground\">\n <X className=\"cnc-h-4 cnc-w-4\" />\n <span className=\"cnc-sr-only\">Fechar</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DrawerPortal>\n );\n }\n);\nDrawerContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DrawerHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-space-y-1.5 cnc-border-b cnc-p-6\",\n className\n )}\n {...props}\n />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerBody = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"cnc-flex-1 cnc-overflow-y-auto cnc-p-6\", className)} {...props} />\n);\nDrawerBody.displayName = \"DrawerBody\";\n\nconst DrawerFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"cnc-border-t cnc-p-6\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"cnc-text-lg cnc-font-semibold cnc-leading-none cnc-tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDrawerTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"cnc-text-sm cnc-text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Drawer,\n DrawerTrigger,\n DrawerPortal,\n DrawerClose,\n DrawerOverlay,\n DrawerContent,\n DrawerHeader,\n DrawerBody,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","\"use client\";\n\nimport * as React from \"react\";\n\n/**\n * Contexto opcional para orquestrar múltiplos `Drawer`s por id, no padrão\n * `activeDrawer`/`openDrawer(id)` já usado nos projetos consumidores.\n *\n * Uso típico:\n * ```tsx\n * <DrawerProvider>\n * <MinhaPagina />\n * </DrawerProvider>\n *\n * const { isOpen, openDrawer, closeDrawer } = useDrawer();\n * <Drawer open={isOpen(\"detalhes\")} onOpenChange={(open) => !open && closeDrawer()}>\n * ...\n * </Drawer>\n * ```\n */\nexport interface DrawerContextValue {\n activeDrawer: string | null;\n openDrawer: (drawerId: string) => void;\n closeDrawer: () => void;\n isOpen: (drawerId: string) => boolean;\n}\n\nexport interface DrawerProviderProps {\n children: React.ReactNode;\n}\n\nexport const DrawerContext = React.createContext<DrawerContextValue | undefined>(\n undefined\n);\n\nexport function DrawerProvider({ children }: DrawerProviderProps) {\n const [activeDrawer, setActiveDrawer] = React.useState<string | null>(null);\n\n const openDrawer = React.useCallback((drawerId: string) => {\n setActiveDrawer(drawerId);\n }, []);\n\n const closeDrawer = React.useCallback(() => {\n setActiveDrawer(null);\n }, []);\n\n const isOpen = React.useCallback(\n (drawerId: string) => activeDrawer === drawerId,\n [activeDrawer]\n );\n\n const value = React.useMemo(\n () => ({ activeDrawer, openDrawer, closeDrawer, isOpen }),\n [activeDrawer, openDrawer, closeDrawer, isOpen]\n );\n\n return (\n <DrawerContext.Provider value={value}>{children}</DrawerContext.Provider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { DrawerContext, DrawerContextValue } from \"./drawer-context\";\n\nexport function useDrawer(): DrawerContextValue {\n const context = React.useContext(DrawerContext);\n\n if (!context) {\n throw new Error(\"useDrawer deve ser usado dentro de um DrawerProvider\");\n }\n\n return context;\n}\n","\"use client\";\n\nimport { Paperclip } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport { FileList, type FileListItem } from \"./file-list\";\nimport { type FileRejection, validateFiles } from \"./utils\";\n\nexport interface FileUploadProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** Arquivos atualmente selecionados. */\n value?: File[];\n onChange?: (files: File[]) => void;\n /** Permite selecionar mais de um arquivo. Padrão: true. */\n multiple?: boolean;\n /** Valor repassado ao input nativo. */\n accept?: string;\n /** Lista de MIME types aceitos para validação em JavaScript. */\n allowedTypes?: string[];\n /** Tamanho máximo por arquivo, em bytes. */\n maxSize?: number;\n disabled?: boolean;\n /** Indica que uma operação externa está em andamento. */\n isLoading?: boolean;\n /** Rótulo exibido no botão de seleção. */\n buttonLabel?: string;\n /** Texto de apoio abaixo do botão. */\n hint?: React.ReactNode;\n /** Ícone exibido no botão. */\n icon?: React.ReactNode;\n /** Chamado quando um ou mais arquivos são rejeitados. */\n onReject?: (rejections: FileRejection[]) => void;\n /** Exibe a lista de arquivos selecionados abaixo do botão. */\n showList?: boolean;\n /** Personaliza o título da lista de pendentes. */\n listTitle?: (count: number) => React.ReactNode;\n buttonClassName?: string;\n listClassName?: string;\n}\n\nfunction fileToListItem(file: File, index: number): FileListItem {\n return {\n id: `${file.name}-${file.size}-${file.lastModified}-${index}`,\n name: file.name,\n size: file.size,\n status: \"pending\",\n };\n}\n\nexport const FileUpload = React.forwardRef<HTMLInputElement, FileUploadProps>(\n (\n {\n value = [],\n onChange,\n multiple = true,\n accept,\n allowedTypes,\n maxSize,\n disabled = false,\n isLoading = false,\n buttonLabel = \"Adicionar arquivos\",\n hint,\n icon,\n onReject,\n showList = true,\n listTitle = (count) => `Arquivos selecionados (${count})`,\n className,\n buttonClassName,\n listClassName,\n ...props\n },\n ref\n ) => {\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const hintId = React.useId();\n\n React.useImperativeHandle(ref, () => fileInputRef.current as HTMLInputElement, []);\n\n const isBusy = disabled || isLoading;\n\n const items = value.map(fileToListItem);\n\n const clearInput = () => {\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n\n const handleFileSelection = (event: React.ChangeEvent<HTMLInputElement>) => {\n const selectedFiles = Array.from(event.target.files ?? []);\n\n if (!selectedFiles.length) {\n clearInput();\n return;\n }\n\n const { acceptedFiles, rejectedFiles } = validateFiles({\n currentFiles: value,\n incomingFiles: selectedFiles,\n allowedTypes,\n maxSize,\n multiple,\n });\n\n if (acceptedFiles.length > 0) {\n onChange?.(multiple ? [...value, ...acceptedFiles] : acceptedFiles.slice(0, 1));\n }\n\n if (rejectedFiles.length > 0) {\n onReject?.(rejectedFiles);\n }\n\n clearInput();\n };\n\n const handleRemove = (_item: FileListItem, index: number) => {\n onChange?.(value.filter((_, currentIndex) => currentIndex !== index));\n };\n\n return (\n <div className={cn(\"cnc-flex cnc-min-w-0 cnc-flex-col cnc-gap-3\", className)} {...props}>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple={multiple}\n accept={accept}\n className=\"cnc-sr-only\"\n tabIndex={-1}\n disabled={isBusy}\n aria-describedby={hint ? hintId : undefined}\n onChange={handleFileSelection}\n />\n\n <div className=\"cnc-flex cnc-flex-col cnc-gap-2 sm:cnc-flex-row sm:cnc-flex-wrap sm:cnc-items-center\">\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={isBusy}\n className={buttonClassName}\n onClick={() => fileInputRef.current?.click()}\n >\n {icon ?? <Paperclip className=\"cnc-mr-2 cnc-size-4\" />}\n {buttonLabel}\n </Button>\n </div>\n\n {hint ? (\n <p id={hintId} className=\"cnc-text-sm cnc-text-slate-600\">\n {hint}\n </p>\n ) : null}\n\n {showList && items.length > 0 ? (\n <div className=\"cnc-flex cnc-flex-col cnc-gap-2\">\n <p role=\"status\" className=\"cnc-text-sm cnc-font-medium cnc-text-slate-700\">\n {listTitle(items.length)}\n </p>\n <FileList\n items={items}\n onRemove={handleRemove}\n disabled={isBusy}\n className={listClassName}\n />\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nFileUpload.displayName = \"FileUpload\";\n","export type FileRejectionReason = \"type\" | \"size\" | \"duplicate\";\n\nexport interface FileRejection {\n file: File;\n reason: FileRejectionReason;\n /** Mensagem pronta para ser exibida pelo consumidor. */\n message: string;\n}\n\nexport interface ValidateFilesOptions {\n currentFiles?: File[];\n incomingFiles: File[];\n allowedTypes?: string[];\n maxSize?: number;\n multiple?: boolean;\n}\n\nfunction formatSizeLimit(bytes: number) {\n if (bytes < 1024 * 1024) {\n return `${Math.max(1, Math.round(bytes / 1024))} KB`;\n }\n\n return `${(bytes / (1024 * 1024)).toLocaleString(\"pt-BR\", {\n maximumFractionDigits: 1,\n minimumFractionDigits: 0,\n })} MB`;\n}\n\n/** Formata bytes em KB ou MB usando localidade pt-BR. */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024 * 1024) {\n return `${Math.max(1, Math.round(bytes / 1024))} KB`;\n }\n\n return `${(bytes / (1024 * 1024)).toLocaleString(\"pt-BR\", {\n maximumFractionDigits: 1,\n minimumFractionDigits: 0,\n })} MB`;\n}\n\nfunction isDuplicateFile(file: File, files: File[]) {\n return files.some(\n (currentFile) =>\n currentFile.name === file.name && currentFile.size === file.size\n );\n}\n\n/**\n * Valida um lote de arquivos e separa itens aceitos de itens recusados.\n */\nexport function validateFiles({\n currentFiles = [],\n incomingFiles,\n allowedTypes,\n maxSize,\n multiple = true,\n}: ValidateFilesOptions) {\n const acceptedFiles: File[] = [];\n const rejectedFiles: FileRejection[] = [];\n const baseFiles = multiple ? currentFiles : [];\n\n for (const file of incomingFiles) {\n if (allowedTypes?.length && !allowedTypes.includes(file.type)) {\n rejectedFiles.push({\n file,\n reason: \"type\",\n message: `Tipo não permitido: ${file.name}`,\n });\n continue;\n }\n\n if (maxSize !== undefined && file.size > maxSize) {\n rejectedFiles.push({\n file,\n reason: \"size\",\n message: `Arquivo maior que ${formatSizeLimit(maxSize)}: ${file.name}`,\n });\n continue;\n }\n\n if (isDuplicateFile(file, [...baseFiles, ...acceptedFiles])) {\n rejectedFiles.push({\n file,\n reason: \"duplicate\",\n message: `Arquivo já adicionado: ${file.name}`,\n });\n continue;\n }\n\n if (!multiple) {\n acceptedFiles.splice(0, acceptedFiles.length, file);\n continue;\n }\n\n acceptedFiles.push(file);\n }\n\n return { acceptedFiles, rejectedFiles };\n}\n","\"use client\";\n\nimport { Download, FileText, Trash2, X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\nimport { formatFileSize } from \"./utils\";\n\nexport interface FileListItem {\n /** Chave estável do item. */\n id: string;\n /** Nome do arquivo exibido para o usuário. */\n name: string;\n /** Tamanho em bytes, quando disponível. */\n size?: number;\n /** Linha secundária de metadados. */\n meta?: React.ReactNode;\n /** Descrição opcional exibida abaixo dos metadados. */\n description?: React.ReactNode;\n /** Indica que o item representa um arquivo ainda não persistido. */\n status?: \"pending\" | \"persisted\";\n disabled?: boolean;\n}\n\nexport interface FileListProps extends React.HTMLAttributes<HTMLUListElement> {\n items: FileListItem[];\n onRemove?: (item: FileListItem, index: number) => void;\n onDownload?: (item: FileListItem, index: number) => void;\n disabled?: boolean;\n variant?: \"bordered\" | \"plain\";\n emptyState?: React.ReactNode;\n removeLabel?: string;\n}\n\nexport function FileList({\n items,\n onRemove,\n onDownload,\n disabled = false,\n variant = \"bordered\",\n emptyState,\n removeLabel = \"Remover\",\n className,\n ...props\n}: FileListProps) {\n if (items.length === 0) {\n return emptyState ? <>{emptyState}</> : null;\n }\n\n return (\n <ul\n className={cn(\n \"cnc-divide-y\",\n variant === \"bordered\"\n ? \"cnc-rounded-md cnc-border cnc-border-slate-200 cnc-bg-white cnc-divide-slate-200\"\n : \"cnc-bg-transparent cnc-divide-slate-100\",\n className\n )}\n {...props}\n >\n {items.map((item, index) => {\n const canRemove = !!onRemove;\n const canDownload = !!onDownload;\n const isDisabled = disabled || item.disabled;\n const isPending = item.status === \"pending\";\n\n return (\n <li\n key={item.id}\n className={cn(\n \"cnc-flex cnc-flex-col cnc-gap-2\",\n variant === \"bordered\"\n ? \"cnc-px-4 cnc-py-3 sm:cnc-flex-row sm:cnc-items-center sm:cnc-justify-between\"\n : \"cnc-px-0 cnc-py-4 first:cnc-pt-0 last:cnc-pb-0 sm:cnc-flex-row sm:cnc-items-center sm:cnc-justify-between\"\n )}\n >\n <div className=\"cnc-flex cnc-min-w-0 cnc-flex-1 cnc-items-start cnc-gap-2\">\n <FileText className=\"cnc-mt-0.5 cnc-size-4 cnc-shrink-0 cnc-text-slate-500\" />\n <div className=\"cnc-min-w-0\">\n {canDownload ? (\n <button\n type=\"button\"\n onClick={() => onDownload(item, index)}\n disabled={isDisabled}\n className=\"cnc-inline-flex cnc-items-center cnc-gap-1 cnc-text-left cnc-text-sm cnc-font-medium cnc-text-[#002f87] hover:cnc-underline disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\"\n >\n <span className=\"cnc-min-w-0 cnc-truncate\">{item.name}</span>\n <Download className=\"cnc-size-3.5 cnc-shrink-0\" />\n </button>\n ) : (\n <p className=\"cnc-text-sm cnc-font-medium cnc-text-slate-800\">\n <span className=\"cnc-break-all\">{item.name}</span>\n </p>\n )}\n\n {(item.meta || item.size !== undefined) && (\n <div className=\"cnc-mt-0.5 cnc-flex cnc-flex-wrap cnc-gap-x-2 cnc-gap-y-1 cnc-text-xs cnc-text-slate-500\">\n {item.meta}\n {item.meta && item.size !== undefined ? <span>·</span> : null}\n {item.size !== undefined ? <span>{formatFileSize(item.size)}</span> : null}\n </div>\n )}\n\n {item.description ? (\n <p className=\"cnc-mt-1 cnc-line-clamp-2 cnc-text-xs cnc-text-slate-600\">\n {item.description}\n </p>\n ) : null}\n </div>\n </div>\n\n {canRemove ? (\n isPending ? (\n <button\n type=\"button\"\n onClick={() => onRemove(item, index)}\n disabled={isDisabled}\n className=\"cnc-inline-flex cnc-shrink-0 cnc-items-center cnc-justify-center cnc-rounded-md cnc-p-1.5 cnc-text-slate-500 cnc-transition hover:cnc-bg-slate-100 hover:cnc-text-slate-800 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\"\n aria-label={`Remover ${item.name}`}\n >\n <X className=\"cnc-size-4\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => onRemove(item, index)}\n disabled={isDisabled}\n className=\"cnc-inline-flex cnc-h-9 cnc-w-full cnc-shrink-0 cnc-items-center cnc-justify-center cnc-gap-2 cnc-rounded-md cnc-border cnc-border-red-200 cnc-px-3 cnc-text-sm cnc-font-semibold cnc-text-red-700 cnc-transition hover:cnc-bg-red-50 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-60 sm:cnc-w-auto\"\n aria-label={`Remover ${item.name}`}\n >\n <Trash2 className=\"cnc-size-4\" />\n {removeLabel}\n </button>\n )\n ) : null}\n </li>\n );\n })}\n </ul>\n );\n}\n","export const MESES_PT_BR = [\n \"Janeiro\",\n \"Fevereiro\",\n \"Março\",\n \"Abril\",\n \"Maio\",\n \"Junho\",\n \"Julho\",\n \"Agosto\",\n \"Setembro\",\n \"Outubro\",\n \"Novembro\",\n \"Dezembro\",\n] as const;\n\nexport const MESES_PT_BR_ABREV = [\n \"JAN\",\n \"FEV\",\n \"MAR\",\n \"ABR\",\n \"MAI\",\n \"JUN\",\n \"JUL\",\n \"AGO\",\n \"SET\",\n \"OUT\",\n \"NOV\",\n \"DEZ\",\n] as const;\n\nexport const DIAS_SEMANA_PT_BR = [\"DOM\", \"SEG\", \"TER\", \"QUA\", \"QUI\", \"SEX\", \"SÁB\"] as const;\n\n/** Formata uma Date como `yyyy-MM-dd` no horário local. */\nexport function toDateKey(date: Date): string {\n const ano = date.getFullYear();\n const mes = String(date.getMonth() + 1).padStart(2, \"0\");\n const dia = String(date.getDate()).padStart(2, \"0\");\n return `${ano}-${mes}-${dia}`;\n}\n\n/** Normaliza uma Date para o meio-dia do dia local (evita deslocamento de fuso). */\nexport function toLocalNoon(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 12, 0, 0, 0);\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isToday(date: Date): boolean {\n return isSameDay(date, new Date());\n}\n\nexport interface MonthDay {\n /** Dia ao meio-dia local. */\n date: Date;\n number: number;\n /** Chave `yyyy-MM-dd` do dia. */\n dateKey: string;\n isToday: boolean;\n isSelected: boolean;\n hasItems: boolean;\n}\n\n/**\n * Monta a grade de dias de um mês a partir de domingo.\n * Células `null` no início representam o deslocamento do primeiro dia da semana.\n */\nexport function buildMonthDays(\n month: Date,\n selectedDate?: Date | null,\n hasItems?: (date: Date) => boolean\n): (MonthDay | null)[] {\n const year = month.getFullYear();\n const monthIndex = month.getMonth();\n const totalDays = new Date(year, monthIndex + 1, 0).getDate();\n const startOffset = new Date(year, monthIndex, 1).getDay();\n\n const cells: (MonthDay | null)[] = [];\n for (let i = 0; i < startOffset; i++) {\n cells.push(null);\n }\n\n for (let day = 1; day <= totalDays; day++) {\n const date = new Date(year, monthIndex, day, 12, 0, 0, 0);\n cells.push({\n date,\n number: day,\n dateKey: toDateKey(date),\n isToday: isToday(date),\n isSelected: selectedDate ? isSameDay(date, selectedDate) : false,\n hasItems: hasItems?.(date) ?? false,\n });\n }\n\n return cells;\n}\n\n/** Formata um mês como \"Setembro 2026\". */\nexport function formatMonthYear(date: Date): string {\n return `${MESES_PT_BR[date.getMonth()]} ${date.getFullYear()}`;\n}\n\n/** Rótulo completo de um dia para leitores de tela, ex.: \"quinta-feira, 27 de agosto de 2026\". */\nexport function formatDayAriaLabel(date: Date): string {\n return date.toLocaleDateString(\"pt-BR\", {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n });\n}","\"use client\";\n\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\nimport {\n DIAS_SEMANA_PT_BR,\n buildMonthDays,\n formatDayAriaLabel,\n formatMonthYear,\n toLocalNoon,\n type MonthDay,\n} from \"./calendar-utils\";\n\nexport interface MiniMonthCalendarDay extends MonthDay {}\n\nexport interface MiniMonthCalendarProps {\n /** Mês exibido (controlado). Ausente ou vazio usa o mês atual. */\n month?: Date;\n /** Chamado ao navegar para outro mês. */\n onMonthChange?: (month: Date) => void;\n /** Data selecionada (controlada). */\n selectedDate?: Date | null;\n /** Chamado ao clicar em um dia. */\n onSelectDate?: (date: Date) => void;\n /** Indica se o dia tem itens — mostra um ponto indicador abaixo do número. */\n hasItems?: (date: Date) => boolean;\n /** Substitui o conteúdo interno de cada célula de dia. */\n renderDay?: (day: MiniMonthCalendarDay) => React.ReactNode;\n /** Cabeçalho dos dias da semana. Padrão: DOM..SÁB. */\n weekDays?: readonly string[];\n /** Texto do título do mês. Padrão: formatMonthYear. */\n monthLabel?: (month: Date) => string;\n previousLabel?: string;\n nextLabel?: string;\n className?: string;\n}\n\nexport function MiniMonthCalendar({\n month: monthProp,\n onMonthChange,\n selectedDate,\n onSelectDate,\n hasItems,\n renderDay,\n weekDays = DIAS_SEMANA_PT_BR,\n monthLabel = formatMonthYear,\n previousLabel = \"Mês anterior\",\n nextLabel = \"Próximo mês\",\n className,\n}: MiniMonthCalendarProps) {\n const month = React.useMemo(() => toLocalNoon(monthProp ?? new Date()), [monthProp]);\n\n const cells = React.useMemo(\n () => buildMonthDays(month, selectedDate, hasItems),\n [month, selectedDate, hasItems]\n );\n\n const goToMonth = (offset: number) => {\n onMonthChange?.(\n new Date(month.getFullYear(), month.getMonth() + offset, 1, 12, 0, 0, 0)\n );\n };\n\n return (\n <div className={cn(\"cnc-w-full\", className)}>\n <div className=\"cnc-mb-4 cnc-flex cnc-items-center cnc-justify-between cnc-px-1\">\n <button\n type=\"button\"\n onClick={() => goToMonth(-1)}\n aria-label={previousLabel}\n className=\"cnc-rounded cnc-p-1 cnc-text-brand-gray-200 cnc-transition-colors hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n >\n <ChevronLeft className=\"cnc-size-4\" />\n </button>\n <span className=\"cnc-text-sm cnc-font-bold cnc-text-primary\">\n {monthLabel(month)}\n </span>\n <button\n type=\"button\"\n onClick={() => goToMonth(1)}\n aria-label={nextLabel}\n className=\"cnc-rounded cnc-p-1 cnc-text-brand-gray-200 cnc-transition-colors hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n >\n <ChevronRight className=\"cnc-size-4\" />\n </button>\n </div>\n\n <div className=\"cnc-grid cnc-grid-cols-7 cnc-gap-y-3 cnc-text-center cnc-text-xs\">\n {weekDays.map((dayName) => (\n <span\n key={dayName}\n className=\"cnc-text-[11px] cnc-font-medium cnc-text-brand-gray-200\"\n >\n {dayName}\n </span>\n ))}\n\n {cells.map((cell, index) => {\n if (!cell) {\n return <span key={`vazio-${index}`} />;\n }\n\n return (\n <button\n key={cell.dateKey}\n type=\"button\"\n onClick={() => onSelectDate?.(cell.date)}\n aria-label={formatDayAriaLabel(cell.date)}\n aria-pressed={cell.isSelected}\n className={cn(\n \"cnc-group cnc-relative cnc-flex cnc-h-8 cnc-flex-col cnc-items-center cnc-justify-center cnc-rounded-full cnc-transition-colors\",\n cell.isSelected\n ? \"cnc-bg-primary cnc-text-white\"\n : \"cnc-text-brand-gray-600 hover:cnc-bg-brand-blue-50 hover:cnc-text-primary\",\n cell.isToday &&\n !cell.isSelected &&\n \"cnc-underline cnc-decoration-primary cnc-decoration-2 cnc-underline-offset-4\"\n )}\n >\n {renderDay ? (\n renderDay(cell)\n ) : (\n <>\n <span className=\"cnc-text-xs cnc-font-semibold\">{cell.number}</span>\n {cell.hasItems && (\n <span className=\"cnc-absolute cnc-bottom-1 cnc-size-1 cnc-rounded-full cnc-bg-primary group-aria-pressed:cnc-bg-white\" />\n )}\n </>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}","\"use client\";\n\nimport { ChevronDown, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../molecules/overlay/popover\";\nimport { MESES_PT_BR_ABREV, formatMonthYear } from \"./calendar-utils\";\n\nexport interface MonthYearPickerProps {\n /** Mês/ano atual (controlado). */\n value: Date;\n onChange: (date: Date) => void;\n disabled?: boolean;\n /** Texto do trigger. Padrão: formatMonthYear. */\n triggerLabel?: (value: Date) => string;\n previousYearLabel?: string;\n nextYearLabel?: string;\n className?: string;\n triggerClassName?: string;\n contentClassName?: string;\n}\n\nexport function MonthYearPicker({\n value,\n onChange,\n disabled = false,\n triggerLabel = formatMonthYear,\n previousYearLabel = \"Ano anterior\",\n nextYearLabel = \"Próximo ano\",\n className,\n triggerClassName,\n contentClassName,\n}: MonthYearPickerProps) {\n const [open, setOpen] = React.useState(false);\n const [viewYear, setViewYear] = React.useState(() => value.getFullYear());\n\n // Ao abrir, sincroniza a navegação de anos com o valor controlado.\n React.useEffect(() => {\n if (open) setViewYear(value.getFullYear());\n }, [open, value]);\n\n const isSelectedMonth = (monthIndex: number) =>\n value.getFullYear() === viewYear && value.getMonth() === monthIndex;\n\n const handleMonthSelect = (monthIndex: number) => {\n // Clampa o dia para o último dia existente no mês (ex.: 31 → 30, fev → 28/29).\n const lastDay = new Date(viewYear, monthIndex + 1, 0).getDate();\n const day = Math.min(value.getDate(), lastDay);\n onChange(new Date(viewYear, monthIndex, day));\n setOpen(false);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={disabled}\n aria-expanded={open}\n className={cn(\n \"cnc-justify-between cnc-gap-2 cnc-font-bold\",\n triggerClassName\n )}\n >\n <span className=\"cnc-text-sm\">{triggerLabel(value)}</span>\n <ChevronDown\n className={cn(\n \"cnc-size-4 cnc-transition-transform\",\n open && \"cnc-rotate-180\"\n )}\n />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\"cnc-w-72 cnc-p-4\", className, contentClassName)}\n >\n <div className=\"cnc-mb-4 cnc-flex cnc-items-center cnc-justify-between\">\n <button\n type=\"button\"\n onClick={() => setViewYear((prev) => prev - 1)}\n aria-label={previousYearLabel}\n className=\"cnc-rounded-full cnc-p-1 cnc-text-brand-gray-200 cnc-transition-colors hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n >\n <ChevronLeft className=\"cnc-size-5\" />\n </button>\n <span className=\"cnc-text-base cnc-font-bold cnc-text-primary\">\n {viewYear}\n </span>\n <button\n type=\"button\"\n onClick={() => setViewYear((prev) => prev + 1)}\n aria-label={nextYearLabel}\n className=\"cnc-rounded-full cnc-p-1 cnc-text-brand-gray-200 cnc-transition-colors hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n >\n <ChevronRight className=\"cnc-size-5\" />\n </button>\n </div>\n\n <div className=\"cnc-grid cnc-grid-cols-3 cnc-gap-x-2 cnc-gap-y-1\">\n {MESES_PT_BR_ABREV.map((month, monthIndex) => (\n <button\n key={month}\n type=\"button\"\n onClick={() => handleMonthSelect(monthIndex)}\n aria-pressed={isSelectedMonth(monthIndex)}\n className={cn(\n \"cnc-rounded-lg cnc-py-2 cnc-text-[10px] cnc-font-bold cnc-uppercase cnc-transition-colors\",\n isSelectedMonth(monthIndex)\n ? \"cnc-bg-primary-800 cnc-text-white cnc-shadow-md\"\n : \"cnc-text-brand-gray-200 hover:cnc-bg-brand-blue-50 hover:cnc-text-primary\"\n )}\n >\n {month}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n );\n}","\"use client\";\n\nimport { Plus, Trash2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { Input } from \"../../atoms/forms/input\";\nimport { cn } from \"../../utils\";\n\nexport interface PeriodRange {\n /** Identificador estável para React (gerado se ausente) */\n id?: string;\n start: string;\n end: string;\n}\n\nexport type PeriodRangeInputType = \"datetime-local\" | \"date\";\n\nexport interface PeriodRangeListLabels {\n start?: string;\n end?: string;\n add?: string;\n empty?: string;\n startColumn?: string;\n endColumn?: string;\n actionsColumn?: string;\n}\n\nexport interface PeriodRangeListValidateOptions {\n endAfterStart?: boolean;\n noDuplicates?: boolean;\n minItems?: number;\n}\n\nexport interface PeriodRangeListProps {\n value?: PeriodRange[];\n onChange?: (periods: PeriodRange[]) => void;\n inputType?: PeriodRangeInputType;\n labels?: PeriodRangeListLabels;\n readOnly?: boolean;\n disabled?: boolean;\n required?: boolean;\n error?: string;\n validate?: PeriodRangeListValidateOptions;\n className?: string;\n}\n\nconst DEFAULT_LABELS: Required<PeriodRangeListLabels> = {\n start: \"Início\",\n end: \"Fim\",\n add: \"Adicionar\",\n empty: \"Nenhum período adicionado.\",\n startColumn: \"Início\",\n endColumn: \"Fim\",\n actionsColumn: \"Ações\",\n};\n\nfunction createPeriodId() {\n return `period-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction normalizePeriods(periods: PeriodRange[]): PeriodRange[] {\n return periods.map((period) => ({\n ...period,\n id: period.id ?? createPeriodId(),\n }));\n}\n\nfunction formatForDisplay(value: string, inputType: PeriodRangeInputType): string {\n if (!value) return \"\";\n\n if (inputType === \"date\") {\n const [year, month, day] = value.split(\"-\");\n if (year && month && day) return `${day}/${month}/${year}`;\n return value;\n }\n\n const normalized = value.slice(0, 16);\n const [datePart, timePart] = normalized.split(\"T\");\n if (!datePart) return value;\n\n const [year, month, day] = datePart.split(\"-\");\n const dateText =\n year && month && day ? `${day}/${month}/${year}` : datePart;\n return timePart ? `${dateText} ${timePart}` : dateText;\n}\n\nfunction splitDisplay(value: string, inputType: PeriodRangeInputType) {\n const formatted = formatForDisplay(value, inputType);\n if (inputType === \"date\") {\n return { date: formatted, time: \"\" };\n }\n\n const parts = formatted.split(\" \");\n if (parts.length <= 1) {\n return { date: formatted, time: \"\" };\n }\n\n const time = parts.pop() ?? \"\";\n return { date: parts.join(\" \"), time };\n}\n\nexport function PeriodRangeList({\n value = [],\n onChange,\n inputType = \"datetime-local\",\n labels: labelsProp,\n readOnly = false,\n disabled = false,\n required = false,\n error,\n validate,\n className,\n}: PeriodRangeListProps) {\n const labels = { ...DEFAULT_LABELS, ...labelsProp };\n const endAfterStart = validate?.endAfterStart ?? true;\n const noDuplicates = validate?.noDuplicates ?? true;\n\n const [startDraft, setStartDraft] = React.useState(\"\");\n const [endDraft, setEndDraft] = React.useState(\"\");\n\n const periods = React.useMemo(() => normalizePeriods(value), [value]);\n\n const isInvalidRange =\n Boolean(startDraft && endDraft) &&\n endAfterStart &&\n startDraft >= endDraft;\n\n const isDuplicate =\n Boolean(startDraft && endDraft) &&\n noDuplicates &&\n periods.some(\n (period) => period.start === startDraft && period.end === endDraft\n );\n\n const canAdd =\n Boolean(startDraft && endDraft) && !isInvalidRange && !isDuplicate;\n\n const addTitle = isDuplicate\n ? \"Este período já foi adicionado\"\n : isInvalidRange\n ? \"A data final deve ser posterior à data inicial\"\n : undefined;\n\n function emitChange(next: PeriodRange[]) {\n onChange?.(normalizePeriods(next));\n }\n\n function handleAdd() {\n if (!canAdd || disabled || readOnly) return;\n\n emitChange([\n ...periods,\n {\n id: createPeriodId(),\n start: startDraft,\n end: endDraft,\n },\n ]);\n setStartDraft(\"\");\n setEndDraft(\"\");\n }\n\n function handleRemove(id: string) {\n if (disabled || readOnly) return;\n emitChange(periods.filter((period) => period.id !== id));\n }\n\n const showRequiredOnInputs = required && periods.length === 0;\n\n return (\n <div className={cn(\"cnc-w-full cnc-space-y-4\", className)}>\n {!readOnly && (\n <div className=\"cnc-grid cnc-grid-cols-1 md:cnc-grid-cols-12 cnc-gap-4 cnc-items-end\">\n <div className=\"md:cnc-col-span-5\">\n <Input\n type={inputType}\n label={labels.start}\n required={showRequiredOnInputs}\n value={startDraft}\n disabled={disabled}\n onChange={(event) => setStartDraft(event.target.value)}\n />\n </div>\n <div className=\"md:cnc-col-span-5\">\n <Input\n type={inputType}\n label={labels.end}\n required={showRequiredOnInputs}\n value={endDraft}\n min={startDraft || undefined}\n disabled={disabled}\n onChange={(event) => setEndDraft(event.target.value)}\n />\n </div>\n <div className=\"md:cnc-col-span-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"cnc-w-full cnc-gap-2\"\n disabled={!canAdd || disabled}\n title={addTitle}\n onClick={handleAdd}\n >\n <Plus className=\"cnc-h-4 cnc-w-4\" />\n {labels.add}\n </Button>\n </div>\n </div>\n )}\n\n <div className=\"cnc-overflow-hidden cnc-rounded-lg cnc-border cnc-border-brand-gray-50 cnc-shadow-sm\">\n <table className=\"cnc-min-w-full cnc-divide-y cnc-divide-brand-gray-50\">\n <thead className=\"cnc-bg-brand-gray-10\">\n <tr>\n <th className=\"cnc-px-6 cnc-py-3 cnc-text-left cnc-text-xs cnc-font-semibold cnc-uppercase cnc-tracking-wider cnc-text-brand-gray-600\">\n {labels.startColumn}\n </th>\n <th className=\"cnc-px-6 cnc-py-3 cnc-text-left cnc-text-xs cnc-font-semibold cnc-uppercase cnc-tracking-wider cnc-text-brand-gray-600\">\n {labels.endColumn}\n </th>\n {!readOnly && (\n <th className=\"cnc-px-6 cnc-py-3 cnc-text-right cnc-text-xs cnc-font-semibold cnc-uppercase cnc-tracking-wider cnc-text-brand-gray-600\">\n {labels.actionsColumn}\n </th>\n )}\n </tr>\n </thead>\n <tbody className=\"cnc-divide-y cnc-divide-brand-gray-50 cnc-bg-white cnc-text-sm\">\n {periods.map((period) => {\n const startDisplay = splitDisplay(period.start, inputType);\n const endDisplay = splitDisplay(period.end, inputType);\n\n return (\n <tr key={period.id} className=\"hover:cnc-bg-brand-gray-10/50\">\n <td className=\"cnc-px-6 cnc-py-4 cnc-text-brand-gray-600\">\n <span className=\"cnc-font-medium cnc-text-brand-gray-600\">\n {startDisplay.date}\n </span>\n {startDisplay.time ? (\n <span className=\"cnc-ml-2 cnc-text-brand-gray-200\">\n {startDisplay.time}\n </span>\n ) : null}\n </td>\n <td className=\"cnc-px-6 cnc-py-4 cnc-text-brand-gray-600\">\n <span className=\"cnc-font-medium cnc-text-brand-gray-600\">\n {endDisplay.date}\n </span>\n {endDisplay.time ? (\n <span className=\"cnc-ml-2 cnc-text-brand-gray-200\">\n {endDisplay.time}\n </span>\n ) : null}\n </td>\n {!readOnly && (\n <td className=\"cnc-px-6 cnc-py-4 cnc-text-right\">\n <button\n type=\"button\"\n className=\"cnc-text-brand-gray-200 hover:cnc-text-brand-red-500 cnc-transition-colors disabled:cnc-opacity-50\"\n disabled={disabled}\n aria-label=\"Remover período\"\n onClick={() => handleRemove(period.id!)}\n >\n <Trash2 className=\"cnc-h-5 cnc-w-5\" />\n </button>\n </td>\n )}\n </tr>\n );\n })}\n {periods.length === 0 && (\n <tr>\n <td\n colSpan={readOnly ? 2 : 3}\n className=\"cnc-px-6 cnc-py-8 cnc-text-center cnc-text-brand-gray-200 cnc-italic\"\n >\n {labels.empty}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n {error ? (\n <p className=\"cnc-text-xs cnc-font-medium cnc-text-brand-red-500\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/** Alias explícito para formulários só com data */\nexport const DateTimeRangeList = PeriodRangeList;\n","\"use client\";\n\nimport { Bell, BellOff, Mail, MailOpen, Trash2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../Popover\";\nimport { cn } from \"../../utils\";\nimport { URL_PADRAO_NOTIFICACOES } from \"./cliente\";\nimport {\n contarNaoLidas,\n mapearParaItem,\n selecionarLembretesVencidos,\n selecionarVisiveis,\n} from \"./mapear\";\nimport { ModalLembretes } from \"./modal-lembretes\";\nimport type {\n HeaderNotificationItem,\n HeaderNotificationsBaseProps,\n HeaderNotificationsProps,\n Notificacao,\n} from \"./tipos\";\nimport { usarNotificacoes } from \"./usar-notificacoes\";\n\nexport { ErroNotificacoes, URL_PADRAO_NOTIFICACOES } from \"./cliente\";\nexport type {\n HeaderNotificationItem,\n HeaderNotificationsBaseProps,\n HeaderNotificationsConectadoProps,\n HeaderNotificationsControladoProps,\n HeaderNotificationsProps,\n Notificacao,\n StatusLeitura,\n StatusNotificacao,\n} from \"./tipos\";\n\ntype PropsInternas = HeaderNotificationsBaseProps & {\n items?: HeaderNotificationItem[];\n isLoading?: boolean;\n unreadCount?: number;\n email?: string;\n sistema?: string;\n baseUrl?: string;\n getHref?: (notificacao: Notificacao) => string | undefined;\n filtros?: Record<string, string>;\n intervaloAtualizacao?: number;\n limite?: number;\n onErro?: (erro: Error) => void;\n alertarLembretes?: boolean;\n tituloLembretes?: string;\n rotuloDispensarLembretes?: string;\n};\n\n/**\n * Sino de notificações do cabeçalho: badge de não lidas, painel com a lista,\n * estados de loading e vazio, marcar todas como lidas e atalho para a tela\n * completa.\n *\n * Opera em dois modos, mutuamente exclusivos pelo tipo:\n *\n * **Conectado** — recebe `email` e `sistema` e cuida sozinho de buscar,\n * formatar a data, filtrar o que já aconteceu e marcar como lida. `baseUrl` é\n * opcional e cai em `URL_PADRAO_NOTIFICACOES`, que aponta para o ambiente de\n * desenvolvimento — em produção passe a prop.\n *\n * **Controlado** — recebe `items` já prontos e devolve as interações por\n * callback, sem fazer nenhuma requisição.\n *\n * @example\n * <HeaderContainer\n * onOpenMenu={toggleSidebar}\n * isOpen={collapsed}\n * notifications={\n * <HeaderNotifications\n * email={sessao.user.email}\n * sistema=\"gestao-demandas\"\n * getHref={(n) => `/demandas/${n.metadados?.demandaId}`}\n * onViewAll={() => router.push(\"/notificacoes\")}\n * />\n * }\n * >\n * <HeaderProfileHeader user={usuario}>...</HeaderProfileHeader>\n * </HeaderContainer>\n */\nexport function HeaderNotifications(props: HeaderNotificationsProps) {\n const {\n items = [],\n isLoading = false,\n skeletonCount = 3,\n title = \"Notificações\",\n emptyMessage = \"Nenhuma notificação\",\n unreadCount,\n maxCount = 9,\n onSelect,\n onMarkAsRead,\n onMarkAsUnread,\n onDelete,\n onMarkAllAsRead,\n onOpenChange,\n footer,\n align = \"end\",\n className,\n contentClassName,\n email,\n sistema,\n baseUrl = URL_PADRAO_NOTIFICACOES,\n getHref,\n filtros,\n intervaloAtualizacao,\n limite = 20,\n onErro,\n alertarLembretes = false,\n tituloLembretes,\n rotuloDispensarLembretes,\n } = props as PropsInternas;\n\n const [aberto, setAberto] = React.useState(false);\n const [lembretesEmAlerta, setLembretesEmAlerta] = React.useState<Notificacao[]>(\n []\n );\n const avaliouLembretesRef = React.useRef(false);\n\n const conectado = Boolean(email && sistema);\n\n const remoto = usarNotificacoes({\n email: email ?? \"\",\n sistema: sistema ?? \"\",\n baseUrl,\n filtros,\n intervaloAtualizacao,\n habilitado: conectado,\n onErro,\n });\n\n const elegiveis = React.useMemo(\n () => (conectado ? selecionarVisiveis(remoto.notificacoes) : []),\n [conectado, remoto.notificacoes]\n );\n\n const itensRemotos = React.useMemo(\n () =>\n elegiveis\n .slice(0, limite)\n .map((notificacao) => mapearParaItem(notificacao, getHref)),\n [elegiveis, limite, getHref]\n );\n\n const itens = conectado ? itensRemotos : items;\n const carregandoLista = conectado ? remoto.carregando : isLoading;\n\n React.useEffect(() => {\n if (!conectado || !alertarLembretes) return;\n if (remoto.carregando || avaliouLembretesRef.current) return;\n\n avaliouLembretesRef.current = true;\n setLembretesEmAlerta(selecionarLembretesVencidos(remoto.notificacoes));\n }, [conectado, alertarLembretes, remoto.carregando, remoto.notificacoes]);\n\n const dispensarLembretes = () => {\n remoto.marcarComoLidas(lembretesEmAlerta.map((lembrete) => lembrete.id));\n setLembretesEmAlerta([]);\n };\n\n const naoLidas = conectado\n ? contarNaoLidas(elegiveis)\n : unreadCount ?? items.filter((item) => !item.read).length;\n\n const rotuloContagem = naoLidas > maxCount ? `${maxCount}+` : `${naoLidas}`;\n\n const alterarAbertura = (proximoEstado: boolean) => {\n setAberto(proximoEstado);\n if (proximoEstado && conectado) remoto.atualizar();\n onOpenChange?.(proximoEstado);\n };\n\n const selecionar = (item: HeaderNotificationItem) => {\n if (!item.read) {\n if (conectado) remoto.marcarUmaComoLida(item.id);\n onMarkAsRead?.(item);\n }\n\n if (!onSelect) return;\n\n onSelect(item);\n alterarAbertura(false);\n };\n\n const marcarTodas = () => {\n if (conectado) remoto.marcarTodasComoLidas();\n onMarkAllAsRead?.();\n };\n\n const alternarLeitura = (item: HeaderNotificationItem) => {\n if (item.read) {\n if (conectado) remoto.marcarUmaComoNaoLida(item.id);\n onMarkAsUnread?.(item);\n return;\n }\n\n if (conectado) remoto.marcarUmaComoLida(item.id);\n onMarkAsRead?.(item);\n };\n\n const excluirItem = (item: HeaderNotificationItem) => {\n if (conectado) remoto.excluir(item.id);\n onDelete?.(item);\n };\n\n const podeMarcarTodas = conectado || Boolean(onMarkAllAsRead);\n const podeAlternarLeitura = conectado || Boolean(onMarkAsUnread);\n const podeExcluir = conectado || Boolean(onDelete);\n const alvoClicavel = conectado || Boolean(onSelect) || Boolean(onMarkAsRead);\n\n const anelDeFoco =\n \"focus-visible:cnc-ring-2 focus-visible:cnc-ring-inset focus-visible:cnc-ring-brand-gray-500/50\";\n\n const renderarConteudo = () => {\n if (carregandoLista) {\n return (\n <div aria-busy=\"true\">\n {Array.from({ length: skeletonCount }).map((_, indice) => (\n <div\n key={indice}\n className=\"cnc-flex cnc-border-b cnc-border-l-[3px] cnc-border-brand-gray-50 cnc-border-l-transparent cnc-py-3 cnc-pl-3 cnc-pr-4 last:cnc-border-b-0\"\n >\n <div className=\"cnc-flex cnc-w-full cnc-flex-col cnc-gap-2\">\n <div className=\"cnc-h-3 cnc-w-1/2 cnc-animate-pulse cnc-rounded cnc-bg-brand-gray-20\" />\n <div className=\"cnc-h-3 cnc-w-3/4 cnc-animate-pulse cnc-rounded cnc-bg-brand-gray-20\" />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (itens.length === 0) {\n return (\n <div className=\"cnc-flex cnc-flex-col cnc-items-center cnc-justify-center cnc-px-4 cnc-py-12 cnc-text-brand-gray-200\">\n <BellOff className=\"cnc-mb-2 cnc-h-7 cnc-w-7\" aria-hidden=\"true\" />\n <p className=\"cnc-text-sm\">{emptyMessage}</p>\n </div>\n );\n }\n\n return (\n <ul className=\"cnc-m-0 cnc-list-none cnc-p-0\">\n {itens.map((item) => {\n const conteudo = (\n <span className=\"cnc-flex cnc-min-w-0 cnc-flex-1 cnc-flex-col cnc-gap-0.5\">\n <span className=\"cnc-flex cnc-items-baseline cnc-justify-between cnc-gap-2\">\n <span\n className={cn(\n \"cnc-truncate cnc-text-sm cnc-text-brand-blue-900\",\n item.read ? \"cnc-font-medium\" : \"cnc-font-bold\"\n )}\n >\n {item.title}\n </span>\n {item.date && (\n <span className=\"cnc-shrink-0 cnc-text-[11px] cnc-text-brand-gray-600\">\n {item.date}\n </span>\n )}\n </span>\n {item.message && (\n <span className=\"cnc-line-clamp-2 cnc-text-xs cnc-text-brand-gray-600\">\n {item.message}\n </span>\n )}\n {!item.read && <span className=\"cnc-sr-only\">Não lida</span>}\n </span>\n );\n\n const classesLinha = cn(\n \"cnc-flex cnc-w-full cnc-items-start cnc-border-l-[3px] cnc-transition cnc-duration-200\",\n item.read\n ? \"cnc-border-l-transparent hover:cnc-bg-brand-blue-50\"\n : \"cnc-border-l-brand-blue-400 cnc-bg-brand-blue-50 hover:cnc-bg-brand-blue-60\"\n );\n\n const classesAlvo = cn(\n \"cnc-flex cnc-min-w-0 cnc-flex-1 cnc-bg-transparent cnc-py-3 cnc-pl-3 cnc-pr-2 cnc-text-left cnc-no-underline cnc-outline-none\",\n alvoClicavel && \"cnc-cursor-pointer\",\n anelDeFoco\n );\n\n const classesAcao = cn(\n \"cnc-flex cnc-h-7 cnc-w-7 cnc-shrink-0 cnc-cursor-pointer cnc-items-center cnc-justify-center cnc-rounded cnc-border-0 cnc-bg-transparent cnc-p-0 cnc-text-brand-gray-200 cnc-outline-none cnc-transition cnc-duration-200 hover:cnc-bg-white\",\n anelDeFoco\n );\n\n const renderarAlvo = () =>\n alvoClicavel ? (\n <button\n type=\"button\"\n onClick={() => selecionar(item)}\n className={classesAlvo}\n >\n {conteudo}\n </button>\n ) : (\n <div className={classesAlvo}>{conteudo}</div>\n );\n\n const rotuloLeitura = item.read\n ? \"Marcar como não lida\"\n : \"Marcar como lida\";\n\n return (\n <li\n key={item.id}\n className=\"cnc-border-b cnc-border-brand-gray-50 last:cnc-border-b-0\"\n >\n <div className={classesLinha}>\n {renderarAlvo()}\n\n {(podeAlternarLeitura || podeExcluir) && (\n <div className=\"cnc-flex cnc-shrink-0 cnc-items-center cnc-gap-1 cnc-py-3 cnc-pr-2\">\n {podeAlternarLeitura && (\n <button\n type=\"button\"\n aria-label={rotuloLeitura}\n title={rotuloLeitura}\n onClick={() => alternarLeitura(item)}\n className={cn(\n classesAcao,\n \"hover:cnc-text-brand-blue-400\"\n )}\n >\n {item.read ? (\n <Mail className=\"cnc-h-4 cnc-w-4\" aria-hidden=\"true\" />\n ) : (\n <MailOpen\n className=\"cnc-h-4 cnc-w-4\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n )}\n\n {podeExcluir && (\n <button\n type=\"button\"\n aria-label=\"Excluir notificação\"\n title=\"Excluir notificação\"\n onClick={() => excluirItem(item)}\n className={cn(classesAcao, \"hover:cnc-text-brand-red-600\")}\n >\n <Trash2 className=\"cnc-h-4 cnc-w-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n )}\n </div>\n </li>\n );\n })}\n </ul>\n );\n };\n\n const temRodapePadrao = podeMarcarTodas && naoLidas > 0;\n\n return (\n <>\n {alertarLembretes && (\n <ModalLembretes\n lembretes={lembretesEmAlerta}\n aberto={lembretesEmAlerta.length > 0}\n onDispensar={dispensarLembretes}\n titulo={tituloLembretes}\n rotuloDispensar={rotuloDispensarLembretes}\n />\n )}\n <Popover open={aberto} onOpenChange={alterarAbertura}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-label={\n naoLidas > 0\n ? `${title}, ${naoLidas} não ${naoLidas === 1 ? \"lida\" : \"lidas\"}`\n : title\n }\n className={cn(\n \"cnc-relative cnc-flex cnc-h-10 cnc-w-10 cnc-items-center cnc-justify-center cnc-rounded-full cnc-transition cnc-duration-300 cnc-ease-in-out hover:cnc-bg-brand-blue-60 data-[state=open]:cnc-bg-brand-blue-60 cnc-cursor-pointer cnc-outline-none cnc-header-item\",\n anelDeFoco,\n className\n )}\n >\n <Bell\n className=\"cnc-h-5 cnc-w-5 cnc-text-brand-blue-900 cnc-header-item\"\n aria-hidden=\"true\"\n />\n {naoLidas > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"cnc-absolute -cnc-right-0.5 -cnc-top-0.5 cnc-flex cnc-h-[18px] cnc-min-w-[18px] cnc-items-center cnc-justify-center cnc-rounded-full cnc-border-2 cnc-border-white cnc-bg-brand-red-500 cnc-px-1 cnc-text-[10px] cnc-font-bold cnc-leading-none cnc-text-white\"\n >\n {rotuloContagem}\n </span>\n )}\n </button>\n </PopoverTrigger>\n\n <PopoverContent\n align={align}\n sideOffset={20}\n aria-label={title}\n style={{ width: \"min(380px, calc(100vw - 2rem))\", padding: 0 }}\n className={cn(\n \"cnc-overflow-hidden cnc-rounded-lg cnc-border cnc-border-brand-gray-50 cnc-bg-white cnc-shadow-custom\",\n contentClassName\n )}\n >\n <div className=\"cnc-flex cnc-items-center cnc-justify-between cnc-gap-2 cnc-border-b cnc-border-brand-gray-50 cnc-px-4 cnc-py-3\">\n <h2 className=\"cnc-m-0 cnc-text-base cnc-font-extrabold cnc-text-brand-blue-900\">\n {title}\n </h2>\n {naoLidas > 0 && (\n <span className=\"cnc-rounded-md cnc-bg-brand-blue-60 cnc-px-2 cnc-py-1 cnc-text-xs cnc-font-semibold cnc-text-brand-blue-400\">\n {naoLidas === 1 ? \"1 nova\" : `${naoLidas} novas`}\n </span>\n )}\n </div>\n\n <div className=\"cnc-max-h-[360px] cnc-overflow-y-auto\">\n {renderarConteudo()}\n </div>\n\n {footer ? (\n <div className=\"cnc-border-t cnc-border-brand-gray-50 cnc-px-4 cnc-py-3\">\n {footer}\n </div>\n ) : (\n temRodapePadrao && (\n <div className=\"cnc-flex cnc-justify-end cnc-border-t cnc-border-brand-gray-50 cnc-px-4 cnc-py-3\">\n <button\n type=\"button\"\n onClick={marcarTodas}\n className={cn(\n \"cnc-cursor-pointer cnc-rounded cnc-bg-transparent cnc-p-0 cnc-text-xs cnc-font-semibold cnc-text-brand-blue-100 cnc-outline-none hover:cnc-underline\",\n anelDeFoco\n )}\n >\n Marcar todas como lidas\n </button>\n </div>\n )\n )}\n </PopoverContent>\n </Popover>\n </>\n );\n}\n","import type { Notificacao, StatusLeitura } from \"./tipos\";\n\n/**\n * Usada quando `baseUrl` não é informada. Aponta para o ambiente de\n * desenvolvimento — em produção passe a prop explicitamente, senão a aplicação\n * lê e grava no dev.\n */\nexport const URL_PADRAO_NOTIFICACOES =\n \"https://dev-apinotificacoes-b5feekb4bdfyb7c2.eastus2-01.azurewebsites.net/v1\";\n\nexport class ErroNotificacoes extends Error {\n readonly status?: number;\n\n constructor(mensagem: string, status?: number) {\n super(mensagem);\n this.name = \"ErroNotificacoes\";\n this.status = status;\n Object.setPrototypeOf(this, ErroNotificacoes.prototype);\n }\n}\n\nexport function normalizarBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, \"\");\n}\n\nexport function extrairLista(payload: unknown): Notificacao[] {\n if (Array.isArray(payload)) return payload as Notificacao[];\n\n if (payload && typeof payload === \"object\") {\n const registro = payload as Record<string, unknown>;\n const chaves = [\"dados\", \"data\", \"notificacoes\", \"items\", \"content\"];\n\n for (const chave of chaves) {\n if (Array.isArray(registro[chave])) return registro[chave] as Notificacao[];\n }\n }\n\n return [];\n}\n\nexport interface ParametrosBusca {\n baseUrl: string;\n email: string;\n sistema: string;\n filtros?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport async function buscarNotificacoes({\n baseUrl,\n email,\n sistema,\n filtros,\n signal,\n}: ParametrosBusca): Promise<Notificacao[]> {\n const parametros = new URLSearchParams({ email, sistema });\n\n for (const [chave, valor] of Object.entries(filtros ?? {})) {\n if (valor !== undefined && valor !== null) parametros.set(chave, String(valor));\n }\n\n const resposta = await fetch(\n `${normalizarBaseUrl(baseUrl)}/notificacoes?${parametros.toString()}`,\n { method: \"GET\", headers: { Accept: \"application/json\" }, signal }\n );\n\n if (!resposta.ok) {\n throw new ErroNotificacoes(\n `Falha ao buscar notificações de ${sistema}`,\n resposta.status\n );\n }\n\n return extrairLista(await resposta.json());\n}\n\nexport interface ParametrosMarcarUma {\n baseUrl: string;\n id: Notificacao[\"id\"];\n signal?: AbortSignal;\n}\n\nasync function definirStatusLeitura(\n { baseUrl, id, signal }: ParametrosMarcarUma,\n statusLeitura: StatusLeitura\n): Promise<void> {\n const resposta = await fetch(\n `${normalizarBaseUrl(baseUrl)}/notificacoes/${encodeURIComponent(String(id))}`,\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ statusLeitura }),\n signal,\n }\n );\n\n if (!resposta.ok) {\n throw new ErroNotificacoes(\n `Falha ao definir a notificação ${id} como ${statusLeitura}`,\n resposta.status\n );\n }\n}\n\nexport function marcarComoLida(parametros: ParametrosMarcarUma): Promise<void> {\n return definirStatusLeitura(parametros, \"LIDO\");\n}\n\nexport function marcarComoNaoLida(\n parametros: ParametrosMarcarUma\n): Promise<void> {\n return definirStatusLeitura(parametros, \"NAO_LIDO\");\n}\n\n/** Exclusão definitiva — a API não tem lixeira nem desfazer. */\nexport async function excluirNotificacao({\n baseUrl,\n id,\n signal,\n}: ParametrosMarcarUma): Promise<void> {\n const resposta = await fetch(\n `${normalizarBaseUrl(baseUrl)}/notificacoes/${encodeURIComponent(String(id))}`,\n { method: \"DELETE\", signal }\n );\n\n if (!resposta.ok) {\n throw new ErroNotificacoes(\n `Falha ao excluir a notificação ${id}`,\n resposta.status\n );\n }\n}\n\n/**\n * O `GET` devolve `id` como string, mas `PUT /notificacoes/lote` valida o campo\n * como inteiro e responde 400 se receber string. No `PUT /notificacoes/:id` não\n * há problema, porque o id vai na URL.\n */\nexport function normalizarId(id: Notificacao[\"id\"]): string | number {\n if (typeof id === \"number\") return id;\n return /^\\d+$/.test(id) ? Number(id) : id;\n}\n\nexport interface ParametrosMarcarVarias {\n baseUrl: string;\n ids: Array<Notificacao[\"id\"]>;\n signal?: AbortSignal;\n}\n\nexport async function marcarVariasComoLidas({\n baseUrl,\n ids,\n signal,\n}: ParametrosMarcarVarias): Promise<void> {\n if (ids.length === 0) return;\n\n const resposta = await fetch(`${normalizarBaseUrl(baseUrl)}/notificacoes/lote`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n notificacoes: ids.map((id) => ({\n id: normalizarId(id),\n statusLeitura: \"LIDO\",\n })),\n }),\n signal,\n });\n\n if (!resposta.ok) {\n throw new ErroNotificacoes(\n `Falha ao marcar ${ids.length} notificações como lidas`,\n resposta.status\n );\n }\n}\n","import type {\n HeaderNotificationItem,\n Notificacao,\n StatusNotificacao,\n} from \"./tipos\";\n\nconst UM_MINUTO = 60_000;\nconst UMA_HORA = 60 * UM_MINUTO;\nconst UM_DIA = 24 * UMA_HORA;\nconst SETE_DIAS = 7 * UM_DIA;\n\nexport function formatarDataRelativa(\n valor?: string | null,\n agora: number = Date.now()\n): string | undefined {\n if (!valor) return undefined;\n\n const data = new Date(valor);\n const instante = data.getTime();\n if (Number.isNaN(instante)) return undefined;\n\n const diferenca = agora - instante;\n const modulo = Math.abs(diferenca);\n\n if (diferenca >= SETE_DIAS) {\n return new Intl.DateTimeFormat(\"pt-BR\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"2-digit\",\n }).format(data);\n }\n\n if (modulo < UM_MINUTO) return \"agora\";\n\n const formatador = new Intl.RelativeTimeFormat(\"pt-BR\", { numeric: \"auto\" });\n const sinal = diferenca < 0 ? 1 : -1;\n\n if (modulo < UMA_HORA) {\n return formatador.format(sinal * Math.trunc(modulo / UM_MINUTO), \"minute\");\n }\n\n if (modulo < UM_DIA) {\n return formatador.format(sinal * Math.trunc(modulo / UMA_HORA), \"hour\");\n }\n\n return formatador.format(sinal * Math.trunc(modulo / UM_DIA), \"day\");\n}\n\nfunction instanteDe(notificacao: Notificacao): number {\n const bruto = notificacao.disparadoEm ?? notificacao.dataReferencia;\n const instante = bruto ? new Date(bruto).getTime() : Number.NaN;\n return Number.isNaN(instante) ? 0 : instante;\n}\n\nconst STATUS_OCULTOS: StatusNotificacao[] = [\"CANCELADO\", \"FALHOU\"];\n\n/**\n * `disparadoEm` é o sinal preferido, porque alerta com `alertasDiasAntes`\n * dispara antes da `dataReferencia`. Quando ele não vem preenchido — registro\n * que o serviço ainda não processou — a data de referência vencida serve de\n * segundo sinal, para o painel não esconder o que o usuário já deveria ver.\n */\nfunction jaAconteceu(notificacao: Notificacao, agora: number): boolean {\n if (notificacao.disparadoEm) return true;\n\n const referencia = notificacao.dataReferencia\n ? new Date(notificacao.dataReferencia).getTime()\n : Number.NaN;\n\n return !Number.isNaN(referencia) && referencia <= agora;\n}\n\n/**\n * Mantém apenas o que já aconteceu e não foi cancelado nem falhou, da mais\n * recente para a mais antiga.\n */\nexport function selecionarVisiveis(\n notificacoes: Notificacao[],\n limite: number = Number.POSITIVE_INFINITY,\n agora: number = Date.now()\n): Notificacao[] {\n return notificacoes\n .filter(\n (notificacao) =>\n Boolean(notificacao) &&\n jaAconteceu(notificacao, agora) &&\n !STATUS_OCULTOS.includes(notificacao.status)\n )\n .sort((a, b) => instanteDe(b) - instanteDe(a))\n .slice(0, limite);\n}\n\n/**\n * Lembretes que já venceram e ainda não foram vistos. É o que separa alerta de\n * notificação: só entra quem tem `lembrarNoDia` ligado e `dataLembrete`\n * preenchido. Notificação instantânea nunca vira alerta.\n */\nexport function selecionarLembretesVencidos(\n notificacoes: Notificacao[],\n agora: number = Date.now()\n): Notificacao[] {\n return notificacoes\n .filter((notificacao) => {\n if (!notificacao?.lembrarNoDia) return false;\n if (notificacao.statusLeitura === \"LIDO\") return false;\n if (STATUS_OCULTOS.includes(notificacao.status)) return false;\n\n const lembrete = notificacao.dataLembrete\n ? new Date(notificacao.dataLembrete).getTime()\n : Number.NaN;\n\n return !Number.isNaN(lembrete) && lembrete <= agora;\n })\n .sort(\n (a, b) =>\n new Date(b.dataLembrete ?? 0).getTime() -\n new Date(a.dataLembrete ?? 0).getTime()\n );\n}\n\nexport function contarNaoLidas(notificacoes: Notificacao[]): number {\n return notificacoes.filter(\n (notificacao) => notificacao.statusLeitura !== \"LIDO\"\n ).length;\n}\n\nexport function mapearParaItem(\n notificacao: Notificacao,\n getHref?: (notificacao: Notificacao) => string | undefined,\n agora?: number\n): HeaderNotificationItem {\n return {\n id: notificacao.id,\n title: notificacao.titulo,\n message: notificacao.mensagem ?? undefined,\n date: formatarDataRelativa(\n notificacao.disparadoEm ?? notificacao.dataReferencia,\n agora\n ),\n read: notificacao.statusLeitura === \"LIDO\",\n href: getHref?.(notificacao),\n };\n}\n","\"use client\";\n\nimport { BellRing } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { Dialog, DialogContent, DialogTitle } from \"../../Dialog\";\nimport { formatarDataRelativa } from \"./mapear\";\nimport type { Notificacao } from \"./tipos\";\n\nexport interface ModalLembretesProps {\n lembretes: Notificacao[];\n aberto: boolean;\n onDispensar: () => void;\n titulo?: string;\n rotuloDispensar?: string;\n}\n\nexport function ModalLembretes({\n lembretes,\n aberto,\n onDispensar,\n titulo,\n rotuloDispensar = \"Entendi\",\n}: ModalLembretesProps) {\n const visivel = aberto && lembretes.length > 0;\n\n const tituloExibido =\n titulo ??\n (lembretes.length === 1 ? \"Você tem um lembrete\" : \"Você tem lembretes\");\n\n return (\n <Dialog\n open={visivel}\n onOpenChange={(proximoEstado) => {\n if (!proximoEstado) onDispensar();\n }}\n >\n <DialogContent\n className=\"cnc-max-w-[440px] cnc-rounded-lg cnc-bg-white cnc-p-0\"\n onOpenAutoFocus={(evento) => evento.preventDefault()}\n >\n <div className=\"cnc-flex cnc-items-center cnc-gap-3 cnc-border-b cnc-border-brand-gray-50 cnc-px-5 cnc-py-4\">\n <span className=\"cnc-flex cnc-h-9 cnc-w-9 cnc-shrink-0 cnc-items-center cnc-justify-center cnc-rounded-full cnc-bg-brand-blue-60\">\n <BellRing\n className=\"cnc-h-[18px] cnc-w-[18px] cnc-text-brand-blue-400\"\n aria-hidden=\"true\"\n />\n </span>\n <DialogTitle className=\"cnc-m-0 cnc-text-base cnc-font-extrabold cnc-text-brand-blue-900\">\n {tituloExibido}\n </DialogTitle>\n </div>\n\n <ul className=\"cnc-m-0 cnc-max-h-[320px] cnc-list-none cnc-overflow-y-auto cnc-p-0\">\n {lembretes.map((lembrete) => (\n <li\n key={lembrete.id}\n className=\"cnc-flex cnc-flex-col cnc-gap-1 cnc-border-b cnc-border-brand-gray-50 cnc-px-5 cnc-py-4 last:cnc-border-b-0\"\n >\n <div className=\"cnc-flex cnc-items-baseline cnc-justify-between cnc-gap-3\">\n <span className=\"cnc-text-sm cnc-font-bold cnc-text-brand-blue-900\">\n {lembrete.titulo}\n </span>\n <span className=\"cnc-shrink-0 cnc-text-[11px] cnc-text-brand-gray-600\">\n {formatarDataRelativa(lembrete.dataLembrete)}\n </span>\n </div>\n {lembrete.mensagem && (\n <span className=\"cnc-text-xs cnc-leading-relaxed cnc-text-brand-gray-600\">\n {lembrete.mensagem}\n </span>\n )}\n </li>\n ))}\n </ul>\n\n <div className=\"cnc-flex cnc-flex-col cnc-gap-2 cnc-border-t cnc-border-brand-gray-50 cnc-px-5 cnc-py-4\">\n <Button variant=\"confirm\" className=\"cnc-w-full\" onClick={onDispensar}>\n {rotuloDispensar}\n </Button>\n <p className=\"cnc-m-0 cnc-text-center cnc-text-[11px] cnc-text-brand-gray-600\">\n {lembretes.length === 1\n ? \"Ao fechar, este lembrete é marcado como lido.\"\n : `Ao fechar, os ${lembretes.length} lembretes são marcados como lidos.`}\n </p>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport {\n buscarNotificacoes,\n excluirNotificacao,\n marcarComoLida,\n marcarComoNaoLida,\n marcarVariasComoLidas,\n} from \"./cliente\";\nimport type { Notificacao } from \"./tipos\";\n\nexport interface OpcoesUsarNotificacoes {\n email: string;\n sistema: string;\n baseUrl: string;\n filtros?: Record<string, string>;\n intervaloAtualizacao?: number;\n habilitado?: boolean;\n onErro?: (erro: Error) => void;\n}\n\nexport interface RetornoUsarNotificacoes {\n notificacoes: Notificacao[];\n carregando: boolean;\n atualizar: () => void;\n marcarUmaComoLida: (id: Notificacao[\"id\"]) => void;\n marcarUmaComoNaoLida: (id: Notificacao[\"id\"]) => void;\n marcarComoLidas: (ids: Array<Notificacao[\"id\"]>) => void;\n marcarTodasComoLidas: () => void;\n excluir: (id: Notificacao[\"id\"]) => void;\n}\n\nfunction foiAbortado(erro: unknown): boolean {\n return (erro as { name?: string } | null)?.name === \"AbortError\";\n}\n\nexport function usarNotificacoes({\n email,\n sistema,\n baseUrl,\n filtros,\n intervaloAtualizacao = 60_000,\n habilitado = true,\n onErro,\n}: OpcoesUsarNotificacoes): RetornoUsarNotificacoes {\n const [notificacoes, setNotificacoes] = React.useState<Notificacao[]>([]);\n const [carregando, setCarregando] = React.useState(habilitado);\n\n const notificacoesRef = React.useRef<Notificacao[]>(notificacoes);\n const controladorRef = React.useRef<AbortController | null>(null);\n const jaCarregouRef = React.useRef(false);\n const onErroRef = React.useRef(onErro);\n\n React.useEffect(() => {\n notificacoesRef.current = notificacoes;\n }, [notificacoes]);\n\n React.useEffect(() => {\n onErroRef.current = onErro;\n }, [onErro]);\n\n const chaveFiltros = JSON.stringify(filtros ?? {});\n\n const atualizar = React.useCallback(() => {\n if (!habilitado) return;\n\n controladorRef.current?.abort();\n const controlador = new AbortController();\n controladorRef.current = controlador;\n\n void (async () => {\n try {\n const lista = await buscarNotificacoes({\n baseUrl,\n email,\n sistema,\n filtros: JSON.parse(chaveFiltros) as Record<string, string>,\n signal: controlador.signal,\n });\n\n if (controlador.signal.aborted) return;\n setNotificacoes(lista);\n } catch (erro) {\n if (controlador.signal.aborted || foiAbortado(erro)) return;\n onErroRef.current?.(erro as Error);\n } finally {\n if (!controlador.signal.aborted) {\n jaCarregouRef.current = true;\n setCarregando(false);\n }\n }\n })();\n }, [baseUrl, email, sistema, chaveFiltros, habilitado]);\n\n React.useEffect(() => {\n if (!habilitado) {\n setCarregando(false);\n return;\n }\n\n if (!jaCarregouRef.current) setCarregando(true);\n atualizar();\n\n return () => controladorRef.current?.abort();\n }, [atualizar, habilitado]);\n\n React.useEffect(() => {\n if (!habilitado || !intervaloAtualizacao) return;\n\n const temporizador = window.setInterval(() => {\n if (typeof document !== \"undefined\" && document.hidden) return;\n atualizar();\n }, intervaloAtualizacao);\n\n return () => window.clearInterval(temporizador);\n }, [atualizar, habilitado, intervaloAtualizacao]);\n\n const aplicarLeitura = React.useCallback((ids: Array<Notificacao[\"id\"]>) => {\n const alvos = new Set(ids.map(String));\n\n setNotificacoes((atuais) =>\n atuais.map((notificacao) =>\n alvos.has(String(notificacao.id))\n ? { ...notificacao, statusLeitura: \"LIDO\" as const }\n : notificacao\n )\n );\n }, []);\n\n const reverterLeitura = React.useCallback((anteriores: Notificacao[]) => {\n const original = new Map(\n anteriores.map((notificacao) => [String(notificacao.id), notificacao])\n );\n\n setNotificacoes((atuais) =>\n atuais.map((notificacao) => {\n const anterior = original.get(String(notificacao.id));\n return anterior\n ? {\n ...notificacao,\n statusLeitura: anterior.statusLeitura,\n lidoEm: anterior.lidoEm,\n }\n : notificacao;\n })\n );\n }, []);\n\n const marcarUmaComoLida = React.useCallback(\n (id: Notificacao[\"id\"]) => {\n const alvo = notificacoesRef.current.find(\n (notificacao) => String(notificacao.id) === String(id)\n );\n\n if (!alvo || alvo.statusLeitura === \"LIDO\") return;\n\n aplicarLeitura([id]);\n\n void marcarComoLida({ baseUrl, id }).catch((erro) => {\n reverterLeitura([alvo]);\n onErroRef.current?.(erro as Error);\n });\n },\n [baseUrl, aplicarLeitura, reverterLeitura]\n );\n\n const marcarComoLidas = React.useCallback(\n (ids: Array<Notificacao[\"id\"]>) => {\n const alvos = new Set(ids.map(String));\n\n const naoLidas = notificacoesRef.current.filter(\n (notificacao) =>\n alvos.has(String(notificacao.id)) &&\n notificacao.statusLeitura !== \"LIDO\"\n );\n\n if (naoLidas.length === 0) return;\n\n aplicarLeitura(naoLidas.map((notificacao) => notificacao.id));\n\n void marcarVariasComoLidas({\n baseUrl,\n ids: naoLidas.map((notificacao) => notificacao.id),\n }).catch((erro) => {\n reverterLeitura(naoLidas);\n onErroRef.current?.(erro as Error);\n });\n },\n [baseUrl, aplicarLeitura, reverterLeitura]\n );\n\n const marcarTodasComoLidas = React.useCallback(() => {\n marcarComoLidas(notificacoesRef.current.map((notificacao) => notificacao.id));\n }, [marcarComoLidas]);\n\n const marcarUmaComoNaoLida = React.useCallback(\n (id: Notificacao[\"id\"]) => {\n const alvo = notificacoesRef.current.find(\n (notificacao) => String(notificacao.id) === String(id)\n );\n\n if (!alvo || alvo.statusLeitura === \"NAO_LIDO\") return;\n\n setNotificacoes((atuais) =>\n atuais.map((notificacao) =>\n String(notificacao.id) === String(id)\n ? { ...notificacao, statusLeitura: \"NAO_LIDO\" as const }\n : notificacao\n )\n );\n\n void marcarComoNaoLida({ baseUrl, id }).catch((erro) => {\n reverterLeitura([alvo]);\n onErroRef.current?.(erro as Error);\n });\n },\n [baseUrl, reverterLeitura]\n );\n\n const excluir = React.useCallback(\n (id: Notificacao[\"id\"]) => {\n const alvo = notificacoesRef.current.find(\n (notificacao) => String(notificacao.id) === String(id)\n );\n\n if (!alvo) return;\n\n setNotificacoes((atuais) =>\n atuais.filter((notificacao) => String(notificacao.id) !== String(id))\n );\n\n void excluirNotificacao({ baseUrl, id }).catch((erro) => {\n onErroRef.current?.(erro as Error);\n atualizar();\n });\n },\n [baseUrl, atualizar]\n );\n\n return {\n notificacoes,\n carregando,\n atualizar,\n marcarUmaComoLida,\n marcarUmaComoNaoLida,\n marcarComoLidas,\n marcarTodasComoLidas,\n excluir,\n };\n}\n","import * as React from 'react';\nimport { Bell, Plus } from 'lucide-react';\nimport { FormularioAlerta } from './formulario-alerta';\nimport { AlertaItem } from './alerta-item';\nimport type { Alerta, AtualizarAlertaInput, CriarAlertaInput } from './types';\nimport { usarAlertas } from './usar-alertas';\nimport { URL_PADRAO_NOTIFICACOES } from './cliente';\n\nexport interface AlertasProps {\n alertas?: Alerta[];\n isLoading?: boolean;\n isSaving?: boolean;\n isRemovendo?: boolean;\n podeCriar?: boolean;\n /**\n * Criar/editar/concluir/excluir são sempre responsabilidade do projeto que usa\n * a lib — ela nunca faz essas requisições sozinha. Implemente aqui a chamada\n * ao backend do próprio projeto (que por sua vez fala com a API de\n * notificações). Pode ser assíncrono: a lib aguarda antes de fechar o\n * formulário e atualizar a lista.\n */\n onCriar?: (payload: CriarAlertaInput) => void | Promise<void>;\n onAtualizar?: (alertaId: string, payload: AtualizarAlertaInput) => void | Promise<void>;\n onConcluir?: (alertaId: string) => void | Promise<void>;\n onExcluir?: (alerta: Alerta) => void | Promise<void>;\n\n /** E-mail do destinatário. Vira `?email=` no GET da lista de alertas. */\n email?: string;\n /** Identificador do sistema chamador, ex.: \"gestao-eventos\". */\n sistema?: string;\n /**\n * Raiz da API já versionada, ex.: `https://.../v1`. Quando omitida, usa\n * `URL_PADRAO_NOTIFICACOES`, que aponta para o **ambiente de\n * desenvolvimento** — em produção passe explicitamente.\n */\n baseUrl?: string;\n fetchFn?: typeof fetch;\n /** Atalho pra `filtros: { eventoId }` — mantido pro gestao-eventos. */\n eventoId?: number | string;\n /**\n * Filtro livre por metadado, ex.: `{ demandaId: \"123\" }`. Use quando a\n * entidade que vincula o alerta não se chama \"evento\" — a chave precisa\n * bater com o que foi salvo em `metadados` na criação do alerta.\n */\n filtros?: Record<string, string>;\n /** Falha ao buscar a lista (GET) ou ao salvar/concluir/excluir (erro relançado por onCriar/onAtualizar/onConcluir/onExcluir). */\n onErro?: (erro: Error) => void;\n}\n\nexport function Alertas({\n alertas: alertasProps = [],\n isLoading = false,\n isSaving = false,\n isRemovendo = false,\n podeCriar = true,\n onCriar,\n onAtualizar,\n onConcluir,\n onExcluir,\n baseUrl = URL_PADRAO_NOTIFICACOES,\n sistema,\n email,\n fetchFn,\n eventoId,\n filtros,\n onErro,\n}: AlertasProps) {\n const [formAberto, setFormAberto] = React.useState(false);\n const [alertaEmEdicao, setAlertaEmEdicao] = React.useState<Alerta | null>(null);\n const [salvandoLocal, setSalvandoLocal] = React.useState(false);\n const [removendoLocal, setRemovendoLocal] = React.useState(false);\n\n /** Só governa a listagem (GET), que a lib continua buscando sozinha. */\n const conectado = Boolean(sistema && email);\n\n const remoto = usarAlertas({\n baseUrl,\n sistema,\n email,\n fetchFn,\n eventoId,\n filtros,\n habilitado: conectado,\n onErro,\n });\n\n const alertas = conectado ? remoto.alertas : alertasProps;\n const carregando = conectado ? remoto.carregando : isLoading;\n const salvando = salvandoLocal || isSaving;\n const removendo = removendoLocal || isRemovendo;\n\n const resetForm = () => {\n setFormAberto(false);\n setAlertaEmEdicao(null);\n };\n\n const abrirNovoAlerta = () => {\n setAlertaEmEdicao(null);\n setFormAberto(true);\n };\n\n const abrirEdicao = (alerta: Alerta) => {\n setAlertaEmEdicao(alerta);\n setFormAberto(true);\n };\n\n const handleSalvar = async (payload: CriarAlertaInput | AtualizarAlertaInput) => {\n setSalvandoLocal(true);\n try {\n if (alertaEmEdicao) {\n await onAtualizar?.(alertaEmEdicao.id, payload as AtualizarAlertaInput);\n } else {\n await onCriar?.(payload as CriarAlertaInput);\n }\n if (conectado) remoto.atualizar();\n resetForm();\n } catch (err) {\n // Evitamos fechar o form pro usuário poder tentar de novo, mas o erro\n // precisa chegar em algum lugar visível — onCriar/onAtualizar são do\n // projeto que usa a lib, então não passam por onErro sozinhos.\n console.error(\"Erro ao salvar alerta:\", err);\n onErro?.(err as Error);\n } finally {\n setSalvandoLocal(false);\n }\n };\n\n const handleConcluir = async (alertaId: string) => {\n setRemovendoLocal(true);\n try {\n await onConcluir?.(alertaId);\n if (conectado) remoto.atualizar();\n } catch (err) {\n console.error(\"Erro ao concluir alerta:\", err);\n onErro?.(err as Error);\n } finally {\n setRemovendoLocal(false);\n }\n };\n\n const handleExcluir = (alerta: Alerta) => {\n if (!window.confirm(`Tem certeza que deseja excluir o alerta \"${alerta.titulo}\"?`)) return;\n\n void (async () => {\n setRemovendoLocal(true);\n try {\n await onExcluir?.(alerta);\n if (conectado) remoto.atualizar();\n } catch (err) {\n console.error(\"Erro ao excluir alerta:\", err);\n onErro?.(err as Error);\n } finally {\n setRemovendoLocal(false);\n }\n })();\n };\n\n return (\n <div className=\"alertas-container\">\n {!formAberto && podeCriar && (\n <div className=\"alertas-nova-acao\">\n <button\n type=\"button\"\n onClick={abrirNovoAlerta}\n className=\"alerta-btn alerta-btn--primario\"\n >\n <Plus size={16} />\n Novo alerta\n </button>\n </div>\n )}\n\n {formAberto && (\n <FormularioAlerta\n alertaEmEdicao={alertaEmEdicao}\n isSaving={salvando}\n onSalvar={handleSalvar}\n onCancelar={resetForm}\n />\n )}\n\n <section className=\"alertas-lista-section\">\n <div className=\"alertas-lista-header\">\n <h2 className=\"alertas-lista-titulo\">\n Alertas cadastrados ({alertas.length})\n </h2>\n </div>\n\n {carregando ? (\n <div className=\"alertas-estado\">Carregando alertas...</div>\n ) : alertas.length === 0 ? (\n <div className=\"alertas-vazio\">\n <Bell size={32} className=\"alertas-vazio-icone\" />\n <p className=\"alertas-vazio-texto\">Nenhum alerta cadastrado.</p>\n </div>\n ) : (\n <div className=\"alertas-lista\">\n {alertas.map((alerta) => (\n <AlertaItem\n key={alerta.id}\n alerta={alerta}\n disabled={removendo}\n selecionado={alertaEmEdicao?.id === alerta.id}\n onEditar={() => abrirEdicao(alerta)}\n onConcluir={() => handleConcluir(alerta.id)}\n onExcluir={() => handleExcluir(alerta)}\n />\n ))}\n </div>\n )}\n </section>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Plus, X } from 'lucide-react';\nimport {\n datetimeLocalParaIsoComOffset,\n obterHojeDataHoraIsoLocal,\n} from './date-utils';\nimport type {\n Alerta,\n AlertaFormValues,\n AtualizarAlertaInput,\n CriarAlertaInput,\n} from './types';\n\nconst FORM_VAZIO: AlertaFormValues = {\n titulo: '',\n dataReferencia: '',\n lembrarNoDia: true,\n diasAntes: '',\n alertasDiasAntes: [],\n novoAlertaDiasAntes: '',\n mensagem: '',\n enviarEmail: false,\n};\n\nfunction normalizarAlertasDiasAntes(values: AlertaFormValues): number[] {\n const alertas = [...values.alertasDiasAntes];\n if (values.novoAlertaDiasAntes.trim()) {\n alertas.push(values.novoAlertaDiasAntes.trim());\n }\n return Array.from(new Set(alertas.map(Number))).sort((a, b) => a - b);\n}\n\nfunction construirPayload(values: AlertaFormValues): CriarAlertaInput {\n const alertasNumericos = normalizarAlertasDiasAntes(values);\n const diasAntes = alertasNumericos.length\n ? Math.max(...alertasNumericos)\n : values.diasAntes.trim()\n ? Number(values.diasAntes)\n : 0;\n\n return {\n titulo: values.titulo.trim(),\n dataReferencia: datetimeLocalParaIsoComOffset(values.dataReferencia),\n lembrarNoDia: values.lembrarNoDia,\n diasAntes,\n alertasDiasAntes: alertasNumericos,\n mensagem: values.mensagem.trim() || undefined,\n enviarEmail: values.enviarEmail,\n };\n}\n\nfunction preencherFormDoAlerta(alerta: Alerta): AlertaFormValues {\n const alertasDiasAntes =\n alerta.alertasDiasAntes && alerta.alertasDiasAntes.length > 0\n ? alerta.alertasDiasAntes.map(String)\n : alerta.diasAntes > 0\n ? [String(alerta.diasAntes)]\n : [];\n\n const dataObj = new Date(alerta.dataReferencia);\n const formatada = isNaN(dataObj.getTime())\n ? ''\n : (() => {\n const ano = dataObj.getFullYear();\n const mes = String(dataObj.getMonth() + 1).padStart(2, '0');\n const dia = String(dataObj.getDate()).padStart(2, '0');\n const horas = String(dataObj.getHours()).padStart(2, '0');\n const minutos = String(dataObj.getMinutes()).padStart(2, '0');\n return `${ano}-${mes}-${dia}T${horas}:${minutos}`;\n })();\n\n return {\n titulo: alerta.titulo,\n dataReferencia: formatada,\n lembrarNoDia: alerta.lembrarNoDia ?? alerta.diasAntes === 0,\n diasAntes: alerta.diasAntes ? String(alerta.diasAntes) : '',\n alertasDiasAntes,\n novoAlertaDiasAntes: '',\n mensagem: alerta.mensagem ?? '',\n enviarEmail: alerta.enviarEmail ?? false,\n };\n}\n\nfunction validarForm(values: AlertaFormValues): string {\n if (!values.titulo.trim()) return 'Informe o titulo do alerta';\n if (!values.dataReferencia) return 'Informe a data do alerta';\n if (new Date(values.dataReferencia) < new Date()) {\n return 'Informe uma data e hora igual ou posterior ao momento atual';\n }\n if (values.diasAntes.trim() && values.diasAntes !== '0') {\n const diasAntes = Number(values.diasAntes);\n if (!Number.isInteger(diasAntes) || diasAntes < 0) {\n return 'Informe uma quantidade de dias maior ou igual a zero';\n }\n }\n if (values.novoAlertaDiasAntes.trim()) {\n const novoAlerta = Number(values.novoAlertaDiasAntes);\n if (!Number.isInteger(novoAlerta) || novoAlerta <= 0) {\n return 'Informe uma quantidade de dias maior que zero';\n }\n }\n return '';\n}\n\ninterface OpcaoAlertaProps {\n checked: boolean;\n label: string;\n onChange: (checked: boolean) => void;\n}\n\nfunction OpcaoAlerta({ checked, label, onChange }: OpcaoAlertaProps) {\n return (\n <label className=\"alerta-opcao\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => onChange(e.target.checked)}\n className=\"alerta-checkbox\"\n />\n {label}\n </label>\n );\n}\n\nexport interface FormularioAlertaProps {\n alertaEmEdicao?: Alerta | null;\n isSaving?: boolean;\n onSalvar: (payload: CriarAlertaInput | AtualizarAlertaInput) => void;\n onCancelar: () => void;\n}\n\nexport function FormularioAlerta({\n alertaEmEdicao,\n isSaving = false,\n onSalvar,\n onCancelar,\n}: FormularioAlertaProps) {\n const [values, setValues] = React.useState<AlertaFormValues>(() =>\n alertaEmEdicao ? preencherFormDoAlerta(alertaEmEdicao) : FORM_VAZIO,\n );\n const [erro, setErro] = React.useState('');\n\n // \"Agora\" depende do relógio/timezone do cliente — calcular no primeiro\n // render divergiria do HTML gerado no servidor. Começa vazio (sem `min`) e\n // só ganha valor depois de montado, só no client.\n const [hojeDataHoraIso, setHojeDataHoraIso] = React.useState('');\n\n React.useEffect(() => {\n setHojeDataHoraIso(obterHojeDataHoraIsoLocal());\n }, []);\n\n React.useEffect(() => {\n setValues(alertaEmEdicao ? preencherFormDoAlerta(alertaEmEdicao) : FORM_VAZIO);\n setErro('');\n }, [alertaEmEdicao]);\n\n const setField = <K extends keyof AlertaFormValues>(\n campo: K,\n valor: AlertaFormValues[K],\n ) => {\n setErro('');\n setValues((prev) => ({ ...prev, [campo]: valor }));\n };\n\n const toggleLembrarNoDia = (checked: boolean) => {\n setErro('');\n setValues((prev) => ({ ...prev, lembrarNoDia: checked }));\n };\n\n const toggleAlertaDiasAntes = (dias: number, checked: boolean) => {\n setErro('');\n setValues((prev) => {\n const valor = String(dias);\n const alertas = new Set(prev.alertasDiasAntes);\n if (checked) alertas.add(valor);\n else alertas.delete(valor);\n const alertasDiasAntes = Array.from(alertas).sort(\n (a, b) => Number(a) - Number(b),\n );\n return {\n ...prev,\n alertasDiasAntes,\n diasAntes:\n alertasDiasAntes.length > 0\n ? String(Math.max(...alertasDiasAntes.map(Number)))\n : '',\n };\n });\n };\n\n const adicionarAlertaDiasAntes = () => {\n const valor = values.novoAlertaDiasAntes.trim();\n const dias = Number(valor);\n if (!Number.isInteger(dias) || dias <= 0) {\n setErro('Informe uma quantidade de dias maior que zero');\n return;\n }\n setErro('');\n setValues((prev) => {\n const alertas = new Set(prev.alertasDiasAntes);\n alertas.add(String(dias));\n const alertasDiasAntes = Array.from(alertas).sort(\n (a, b) => Number(a) - Number(b),\n );\n return {\n ...prev,\n diasAntes: String(Math.max(...alertasDiasAntes.map(Number))),\n novoAlertaDiasAntes: '',\n alertasDiasAntes,\n };\n });\n };\n\n const removerAlertaDiasAntes = (valor: string) => {\n setValues((prev) => {\n const alertasDiasAntes = prev.alertasDiasAntes.filter((item) => item !== valor);\n return {\n ...prev,\n alertasDiasAntes,\n diasAntes:\n alertasDiasAntes.length > 0\n ? String(Math.max(...alertasDiasAntes.map(Number)))\n : '',\n };\n });\n };\n\n const handleSalvar = () => {\n const mensagemErro = validarForm(values);\n if (mensagemErro) {\n setErro(mensagemErro);\n return;\n }\n onSalvar(construirPayload(values));\n };\n\n const alertasPersonalizados = values.alertasDiasAntes.filter(\n (d) => !['2', '7', '15', '30'].includes(d),\n );\n\n return (\n <section className=\"alerta-form-section\">\n <div className=\"alerta-form-header\">\n <h2 className=\"alerta-form-titulo\">\n {alertaEmEdicao ? 'Editar alerta' : 'Novo alerta'}\n </h2>\n </div>\n\n <div className=\"alerta-form-grid\">\n <div className=\"alerta-campo\">\n <label htmlFor=\"alerta-titulo\" className=\"alerta-label\">\n Titulo <span className=\"alerta-obrigatorio\">*</span>\n </label>\n <input\n id=\"alerta-titulo\"\n type=\"text\"\n value={values.titulo}\n onChange={(e) => setField('titulo', e.target.value)}\n placeholder=\"Informe o titulo do alerta\"\n className=\"alerta-input\"\n />\n </div>\n\n <div className=\"alerta-campo alerta-campo--data\">\n <label htmlFor=\"alerta-data\" className=\"alerta-label\">\n Data e Hora <span className=\"alerta-obrigatorio\">*</span>\n </label>\n <input\n id=\"alerta-data\"\n type=\"datetime-local\"\n min={hojeDataHoraIso}\n value={values.dataReferencia}\n onChange={(e) => setField('dataReferencia', e.target.value)}\n className=\"alerta-input alerta-input--sm\"\n />\n </div>\n\n <div className=\"alerta-campo\">\n <span className=\"alerta-label\">Notificações</span>\n <div className=\"alerta-notif-container\">\n <div className=\"alerta-notif-col\">\n <OpcaoAlerta\n checked={values.lembrarNoDia}\n label=\"Alertar no dia\"\n onChange={toggleLembrarNoDia}\n />\n <OpcaoAlerta\n checked={values.alertasDiasAntes.includes('2')}\n label=\"2 dias antes\"\n onChange={(c) => toggleAlertaDiasAntes(2, c)}\n />\n <OpcaoAlerta\n checked={values.alertasDiasAntes.includes('7')}\n label=\"1 semana antes\"\n onChange={(c) => toggleAlertaDiasAntes(7, c)}\n />\n </div>\n <div className=\"alerta-notif-col\">\n <OpcaoAlerta\n checked={values.alertasDiasAntes.includes('15')}\n label=\"15 dias antes\"\n onChange={(c) => toggleAlertaDiasAntes(15, c)}\n />\n <OpcaoAlerta\n checked={values.alertasDiasAntes.includes('30')}\n label=\"1 mês antes\"\n onChange={(c) => toggleAlertaDiasAntes(30, c)}\n />\n <div className=\"alerta-notif-personalizado\">\n <input\n id=\"alerta-dias\"\n type=\"number\"\n min={1}\n step={1}\n value={values.novoAlertaDiasAntes}\n onChange={(e) => setField('novoAlertaDiasAntes', e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n adicionarAlertaDiasAntes();\n }\n }}\n placeholder=\"Dias\"\n className=\"alerta-input alerta-input--dias\"\n />\n <button\n type=\"button\"\n onClick={adicionarAlertaDiasAntes}\n className=\"alerta-btn alerta-btn--outline\"\n >\n <Plus size={16} />\n Adicionar\n </button>\n </div>\n </div>\n\n {alertasPersonalizados.length > 0 && (\n <div className=\"alerta-tags\">\n {alertasPersonalizados.map((dias) => (\n <span key={dias} className=\"alerta-tag\">\n {dias} dia{Number(dias) > 1 ? 's' : ''} antes\n <button\n type=\"button\"\n onClick={() => removerAlertaDiasAntes(dias)}\n aria-label={`Remover alerta de ${dias} dias antes`}\n className=\"alerta-tag-remover\"\n >\n <X size={14} />\n </button>\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"alerta-campo\">\n <label htmlFor=\"alerta-mensagem\" className=\"alerta-label\">\n Mensagem\n </label>\n <textarea\n id=\"alerta-mensagem\"\n value={values.mensagem}\n onChange={(e) => setField('mensagem', e.target.value)}\n placeholder=\"Informe a mensagem do alerta\"\n rows={3}\n className=\"alerta-textarea\"\n />\n </div>\n\n <div className=\"alerta-campo\">\n <OpcaoAlerta\n checked={values.enviarEmail}\n label=\"Enviar também por e-mail\"\n onChange={(checked) => setField('enviarEmail', checked)}\n />\n </div>\n\n {erro && <div className=\"alerta-erro\">{erro}</div>}\n\n <div className=\"alerta-form-acoes\">\n <button\n type=\"button\"\n onClick={onCancelar}\n className=\"alerta-btn alerta-btn--secundario\"\n >\n Cancelar\n </button>\n <button\n type=\"button\"\n onClick={handleSalvar}\n disabled={isSaving}\n className=\"alerta-btn alerta-btn--primario\"\n >\n <Plus size={16} />\n {isSaving\n ? 'Salvando...'\n : alertaEmEdicao\n ? 'Atualizar alerta'\n : 'Adicionar alerta'}\n </button>\n </div>\n </div>\n </section>\n );\n}\n","export function obterHojeDataHoraIsoLocal(): string {\n const hoje = new Date();\n const ano = hoje.getFullYear();\n const mes = String(hoje.getMonth() + 1).padStart(2, '0');\n const dia = String(hoje.getDate()).padStart(2, '0');\n const horas = String(hoje.getHours()).padStart(2, '0');\n const minutos = String(hoje.getMinutes()).padStart(2, '0');\n return `${ano}-${mes}-${dia}T${horas}:${minutos}`;\n}\n\nexport function datetimeLocalParaIsoComOffset(valorInput: string): string {\n if (!valorInput) return valorInput;\n const data = new Date(valorInput);\n if (isNaN(data.getTime())) return valorInput;\n const offsetMinutos = data.getTimezoneOffset();\n const sinal = offsetMinutos <= 0 ? '+' : '-';\n const absOffset = Math.abs(offsetMinutos);\n const offsetHoras = String(Math.floor(absOffset / 60)).padStart(2, '0');\n const offsetMins = String(absOffset % 60).padStart(2, '0');\n const ano = data.getFullYear();\n const mes = String(data.getMonth() + 1).padStart(2, '0');\n const dia = String(data.getDate()).padStart(2, '0');\n const horas = String(data.getHours()).padStart(2, '0');\n const minutos = String(data.getMinutes()).padStart(2, '0');\n return `${ano}-${mes}-${dia}T${horas}:${minutos}:00${sinal}${offsetHoras}:${offsetMins}`;\n}\n\nexport function formatarDataParaExibicao(iso: string): string {\n if (!iso) return '';\n const dataObj = new Date(iso);\n if (isNaN(dataObj.getTime())) return '';\n const dia = String(dataObj.getDate()).padStart(2, '0');\n const mes = String(dataObj.getMonth() + 1).padStart(2, '0');\n const ano = dataObj.getFullYear();\n const horas = String(dataObj.getHours()).padStart(2, '0');\n const minutos = String(dataObj.getMinutes()).padStart(2, '0');\n return `${dia}/${mes}/${ano} às ${horas}:${minutos}`;\n}\n","import * as React from 'react';\nimport { Bell, CalendarDays, Check, Pencil, Trash2, X } from 'lucide-react';\nimport { formatarDataParaExibicao } from './date-utils';\nimport type { Alerta } from './types';\n\nexport interface AlertaItemProps {\n alerta: Alerta;\n disabled?: boolean;\n selecionado?: boolean;\n onEditar: () => void;\n onConcluir: () => void;\n onExcluir: () => void;\n}\n\nexport function AlertaItem({\n alerta,\n disabled = false,\n selecionado = false,\n onEditar,\n onConcluir,\n onExcluir,\n}: AlertaItemProps) {\n const concluido = alerta.status === 'CONCLUIDO';\n const cancelado = alerta.status === 'CANCELADO';\n const podeAlterar = !concluido && !cancelado;\n const statusLabel = concluido ? 'Concluido' : cancelado ? 'Cancelado' : 'Pendente';\n\n const descricaoAlertas = [\n (alerta.lembrarNoDia ?? alerta.diasAntes === 0) ? 'no dia' : null,\n ...(alerta.alertasDiasAntes && alerta.alertasDiasAntes.length > 0\n ? alerta.alertasDiasAntes.map(\n (dias) => `${dias} dia${dias > 1 ? 's' : ''} antes`,\n )\n : alerta.diasAntes > 0\n ? [`${alerta.diasAntes} dia${alerta.diasAntes > 1 ? 's' : ''} antes`]\n : []),\n ]\n .filter(Boolean)\n .join(', ');\n\n return (\n <article\n className={[\n 'alerta-item',\n selecionado ? 'alerta-item--selecionado' : '',\n concluido ? 'alerta-item--concluido' : '',\n cancelado ? 'alerta-item--cancelado' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"alerta-item-corpo\">\n <div className=\"alerta-item-info\">\n <div className=\"alerta-item-topo\">\n <h3 className=\"alerta-item-titulo\">{alerta.titulo}</h3>\n <span className={`alerta-status alerta-status--${statusLabel.toLowerCase()}`}>\n {statusLabel}\n </span>\n </div>\n\n {alerta.mensagem && (\n <p className=\"alerta-item-mensagem\">{alerta.mensagem}</p>\n )}\n\n <div className=\"alerta-item-meta\">\n <span className=\"alerta-item-meta-linha\">\n <CalendarDays size={14} />\n Data {formatarDataParaExibicao(alerta.dataReferencia)}\n </span>\n <span className=\"alerta-item-meta-linha\">\n <Bell size={14} />\n Notificações: {descricaoAlertas || '—'}\n </span>\n {alerta.enviarEmail && (\n <span className=\"alerta-item-meta-linha alerta-item-email-ativo\">\n <span className=\"alerta-dot\" />\n Notificação por e-mail ativa\n </span>\n )}\n {cancelado && alerta.motivoCancelamento && (\n <span className=\"alerta-item-meta-linha\">\n <X size={14} />\n Cancelado automaticamente: {alerta.motivoCancelamento}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"alerta-item-acoes\">\n <button\n type=\"button\"\n onClick={onEditar}\n disabled={disabled || !podeAlterar}\n title=\"Editar alerta\"\n className=\"alerta-btn-icone\"\n >\n <Pencil size={16} />\n </button>\n {podeAlterar && (\n <button\n type=\"button\"\n onClick={onConcluir}\n disabled={disabled}\n title=\"Concluir alerta\"\n className=\"alerta-btn-icone alerta-btn-icone--sucesso\"\n >\n <Check size={16} />\n </button>\n )}\n <button\n type=\"button\"\n onClick={onExcluir}\n disabled={disabled}\n title=\"Excluir alerta\"\n className=\"alerta-btn-icone alerta-btn-icone--perigo\"\n >\n <Trash2 size={16} />\n </button>\n </div>\n </div>\n </article>\n );\n}\n","import * as React from \"react\";\nimport { buscarAlertas } from \"./cliente\";\nimport type { Alerta } from \"./types\";\n\n/**\n * Só busca a lista de alertas (GET), direto na API de notificações. Criar,\n * editar, concluir e excluir são sempre responsabilidade do projeto que usa a\n * lib — ver `onCriar`/`onAtualizar`/`onConcluir`/`onExcluir` em `Alertas`.\n */\nexport interface OpcoesUsarAlertas {\n baseUrl?: string;\n sistema?: string;\n email?: string;\n fetchFn?: typeof fetch;\n eventoId?: number | string;\n /** Filtro livre por metadado, ex.: `{ demandaId: \"123\" }`. Ver `buscarAlertas`. */\n filtros?: Record<string, string | number>;\n habilitado?: boolean;\n onErro?: (erro: Error) => void;\n}\n\nexport interface RetornoUsarAlertas {\n alertas: Alerta[];\n carregando: boolean;\n atualizar: () => void;\n}\n\nfunction foiAbortado(erro: unknown): boolean {\n return (erro as { name?: string } | null)?.name === \"AbortError\";\n}\n\nexport function usarAlertas({\n baseUrl,\n sistema,\n email,\n fetchFn,\n eventoId,\n filtros,\n habilitado = true,\n onErro,\n}: OpcoesUsarAlertas): RetornoUsarAlertas {\n const [alertas, setAlertas] = React.useState<Alerta[]>([]);\n const [carregando, setCarregando] = React.useState(habilitado);\n\n const controladorRef = React.useRef<AbortController | null>(null);\n const jaCarregouRef = React.useRef(false);\n\n const onErroRef = React.useRef(onErro);\n const fetchFnRef = React.useRef(fetchFn);\n const filtrosRef = React.useRef(filtros);\n\n React.useEffect(() => {\n onErroRef.current = onErro;\n }, [onErro]);\n\n React.useEffect(() => {\n fetchFnRef.current = fetchFn;\n }, [fetchFn]);\n\n React.useEffect(() => {\n filtrosRef.current = filtros;\n }, [filtros]);\n\n const pronto = baseUrl !== undefined && sistema !== undefined && email !== undefined;\n // Chave estável pro useCallback: um `filtros={{ demandaId }}` inline cria um\n // objeto novo a cada render, então comparamos o conteúdo serializado em vez\n // da referência — senão vira o mesmo loop que o fetchFn tinha.\n const filtrosChave = filtros ? JSON.stringify(filtros) : \"\";\n\n const atualizar = React.useCallback(() => {\n if (!habilitado || !pronto) return;\n\n controladorRef.current?.abort();\n const controlador = new AbortController();\n controladorRef.current = controlador;\n\n void (async () => {\n try {\n const lista = await buscarAlertas({\n baseUrl: baseUrl as string,\n sistema: sistema as string,\n email: email as string,\n fetchFn: fetchFnRef.current,\n eventoId,\n filtros: filtrosRef.current,\n signal: controlador.signal,\n });\n\n if (controlador.signal.aborted) return;\n setAlertas(lista);\n } catch (erro) {\n if (controlador.signal.aborted || foiAbortado(erro)) return;\n onErroRef.current?.(erro as Error);\n } finally {\n if (!controlador.signal.aborted) {\n jaCarregouRef.current = true;\n setCarregando(false);\n }\n }\n })();\n // fetchFn e filtros são lidos via ref de propósito — recriados a cada\n // render (comum: `fetchFn={(...a) => fetch(...a)}`, `filtros={{ x }}`),\n // não devem reiniciar a busca sozinhos.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [baseUrl, sistema, email, eventoId, filtrosChave, habilitado, pronto]);\n\n React.useEffect(() => {\n if (!habilitado || !pronto) {\n setCarregando(false);\n return;\n }\n\n if (!jaCarregouRef.current) setCarregando(true);\n atualizar();\n\n return () => controladorRef.current?.abort();\n }, [atualizar, habilitado, pronto]);\n\n return {\n alertas,\n carregando,\n atualizar,\n };\n}\n","import type { Alerta } from \"./types\";\nimport {\n URL_PADRAO_NOTIFICACOES,\n normalizarBaseUrl,\n} from \"../components/organisms/header-notifications/cliente\";\n\nexport { URL_PADRAO_NOTIFICACOES, normalizarBaseUrl };\n\n/**\n * Só a leitura (listagem) fala com a API de notificações direto do browser.\n * Criar, editar, concluir e excluir são sempre responsabilidade do backend do\n * projeto que usa a lib — não existe função de mutação aqui de propósito.\n */\nexport class ErroAlertas extends Error {\n readonly status?: number;\n\n constructor(mensagem: string, status?: number) {\n super(mensagem);\n this.name = \"ErroAlertas\";\n this.status = status;\n Object.setPrototypeOf(this, ErroAlertas.prototype);\n }\n}\n\nexport interface ParametrosBuscaAlertas {\n baseUrl: string;\n sistema: string;\n email: string;\n /** Atalho pra `filtros: { eventoId }` — existe pelo nome, mantido pro gestao-eventos. */\n eventoId?: number | string;\n /**\n * Filtro livre por metadado, ex.: `{ demandaId: \"123\" }`. Vira query string\n * direto (a API trata qualquer chave solta fora de sistema/email/status/\n * statusLeitura como filtro de `metadados`). Use quando a entidade que\n * vincula o alerta não se chama \"evento\".\n */\n filtros?: Record<string, string | number>;\n fetchFn?: typeof fetch;\n signal?: AbortSignal;\n}\n\nexport async function buscarAlertas({\n baseUrl,\n sistema,\n email,\n fetchFn = fetch,\n signal,\n eventoId,\n filtros,\n}: ParametrosBuscaAlertas): Promise<Alerta[]> {\n const params = new URLSearchParams({ sistema, email });\n if (eventoId !== undefined) params.set(\"eventoId\", String(eventoId));\n for (const [chave, valor] of Object.entries(filtros ?? {})) {\n if (valor !== undefined && valor !== null && valor !== \"\") params.set(chave, String(valor));\n }\n\n const url = `${normalizarBaseUrl(baseUrl)}/notificacoes?${params.toString()}`;\n\n const resposta = await fetchFn(url, {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n signal,\n });\n\n if (!resposta.ok) {\n throw new ErroAlertas(`Falha ao buscar alertas`, resposta.status);\n }\n\n return await resposta.json();\n}\n"],"mappings":"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","names":["CollapsibleTrigger","Title","param","import_react","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","classParts","split","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","nextPart","get","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","prefix","Map","prefixedClassGroupEntries","getPrefixedClassGroupEntries","Object","entries","classGroups","forEach","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","key","path","currentClassPartObject","pathPart","has","set","func","classGroupEntries","map","prefixedClassGroup","fromEntries","value","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","startsWith","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","isArbitraryVariant","sort","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","result","originalClassName","Boolean","variantModifier","modifierId","classId","includes","conflictGroups","i","group","twJoin","argument","resolvedValue","string","arguments","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","callTailwindMerge","apply","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","Set","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","Number","isNaN","isArbitraryNumber","isInteger","isPercent","endsWith","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","fromTheme","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","isArbitraryValue","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","isLength","isArbitraryLength","getNumberWithAutoAndArbitrary","isNumber","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","cacheSize","separator","theme","isAny","isTshirtSize","isPercent","classGroups","aspect","container","columns","box","display","float","clear","isolation","object","overflow","overscroll","position","start","end","top","right","bottom","left","visibility","z","isInteger","basis","flex","grow","shrink","order","col","span","row","justify","content","items","self","p","px","py","ps","pe","pt","pr","pb","pl","m","mx","my","ms","me","mt","mr","mb","ml","w","screen","h","size","text","font","isArbitraryNumber","tracking","leading","list","placeholder","decoration","indent","align","whitespace","break","hyphens","bg","isArbitraryPosition","repeat","isArbitrarySize","isArbitraryImage","from","via","to","rounded","border","divide","outline","ring","shadow","isArbitraryShadow","filter","table","caption","transition","duration","ease","delay","animate","transform","rotate","origin","accent","appearance","cursor","caret","resize","scroll","snap","touch","select","fill","stroke","sr","conflictingClassGroups","conflictingClassGroupModifiers","twMerge","createTailwindMerge","getDefaultConfig","React","React","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_slot","import_react","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","CollapsibleTrigger","CollapsibleContent","import_jsx_runtime","Title","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","CommandPrimitive","React","PopoverPrimitive","import_jsx_runtime","Popover","PopoverTrigger","PopoverContent","import_jsx_runtime","Popover","PopoverTrigger","PopoverContent","React","import_jsx_runtime","Popover","PopoverTrigger","PopoverContent","React","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","FilterFieldItem","Filter","CollapsibleTrigger","React","import_jsx_runtime","DialogPrimitive","React","import_jsx_runtime","React","import_jsx_runtime","React","React","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","Popover","PopoverTrigger","PopoverContent","React","import_jsx_runtime","year","month","day","React","import_jsx_runtime","React","import_jsx_runtime","React","React","import_jsx_runtime","import_jsx_runtime","React","foiAbortado","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/Button/index.tsx","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/class-variance-authority/dist/index.mjs","../../../node_modules/shared/src/utils.ts","../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/lucide-react/src/Icon.ts","../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/lucide-react/src/icons/bell-off.ts","../../../node_modules/lucide-react/src/icons/bell-ring.ts","../../../node_modules/lucide-react/src/icons/bell.ts","../../../node_modules/lucide-react/src/icons/calendar-days.ts","../../../node_modules/lucide-react/src/icons/check.ts","../../../node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../../node_modules/lucide-react/src/icons/chevron-up.ts","../../../node_modules/lucide-react/src/icons/chevrons-up-down.ts","../../../node_modules/lucide-react/src/icons/circle.ts","../../../node_modules/lucide-react/src/icons/download.ts","../../../node_modules/lucide-react/src/icons/external-link.ts","../../../node_modules/lucide-react/src/icons/file-text.ts","../../../node_modules/lucide-react/src/icons/filter-x.ts","../../../node_modules/lucide-react/src/icons/folder-open.ts","../../../node_modules/lucide-react/src/icons/list-filter.ts","../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../node_modules/lucide-react/src/icons/mail-open.ts","../../../node_modules/lucide-react/src/icons/mail.ts","../../../node_modules/lucide-react/src/icons/paperclip.ts","../../../node_modules/lucide-react/src/icons/pencil.ts","../../../node_modules/lucide-react/src/icons/plus.ts","../../../node_modules/lucide-react/src/icons/search.ts","../../../node_modules/lucide-react/src/icons/trash-2.ts","../../../node_modules/lucide-react/src/icons/user.ts","../../../node_modules/lucide-react/src/icons/x.ts","../../../node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../node_modules/tailwind-merge/src/lib/config-utils.ts","../../../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../node_modules/tailwind-merge/src/lib/tw-join.ts","../../../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/from-theme.ts","../../../node_modules/tailwind-merge/src/lib/validators.ts","../../../node_modules/tailwind-merge/src/lib/default-config.ts","../../../node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/components/utils.ts","../src/components/DropDownMenu/index.tsx","../src/components/Header/index.tsx","../src/components/AppsMenu/index.tsx","../src/components/Dialog/index.tsx","../src/components/Modal/index.tsx","../src/components/Modal/ModalMudancaEntidade/index.tsx","../src/components/Sidebar/index.tsx","../src/components/assets/logotipo-default.tsx","../src/components/Popover/index.tsx","../src/components/Select/index.tsx","../src/components/Tabs/index.tsx","../src/components/atoms/forms/input.tsx","../src/components/atoms/forms/textarea.tsx","../src/components/atoms/forms/checkbox.tsx","../src/components/atoms/forms/switch.tsx","../src/components/atoms/display/badge.tsx","../src/components/atoms/display/avatar.tsx","../src/components/molecules/card.tsx","../src/components/molecules/collapsible.tsx","../src/components/molecules/display/page-header.tsx","../src/components/molecules/display/empty-state.tsx","../src/components/molecules/display/result-metadata.tsx","../src/components/molecules/display/label-value.tsx","../src/components/molecules/forms/combobox.tsx","../src/components/molecules/forms/combobox-footer.tsx","../src/components/molecules/overlay/command.tsx","../src/components/molecules/overlay/popover.tsx","../src/components/molecules/forms/multi-select.tsx","../src/components/molecules/overlay/confirm-dialog.tsx","../src/components/molecules/overlay/tooltip.tsx","../src/components/organisms/filter/index.tsx","../src/components/organisms/card-list/index.tsx","../src/components/organisms/drawer/drawer.tsx","../src/components/organisms/drawer/drawer-context.tsx","../src/components/organisms/drawer/use-drawer.ts","../src/components/organisms/upload/file-upload.tsx","../src/components/organisms/upload/utils.ts","../src/components/organisms/upload/file-list.tsx","../src/components/organisms/calendar/calendar-utils.ts","../src/components/organisms/calendar/mini-month-calendar.tsx","../src/components/organisms/calendar/month-year-picker.tsx","../src/components/organisms/period-range-list/index.tsx","../src/components/organisms/header-notifications/index.tsx","../src/components/organisms/header-notifications/cliente.ts","../src/components/organisms/header-notifications/mapear.ts","../src/components/organisms/header-notifications/modal-lembretes.tsx","../src/components/organisms/header-notifications/usar-notificacoes.ts","../src/alertas/alertas.tsx","../src/alertas/formulario-alerta.tsx","../src/alertas/date-utils.ts","../src/alertas/alerta-item.tsx","../src/alertas/usar-alertas.ts","../src/alertas/cliente.ts"],"sourcesContent":["import \"./tailwindcss/tailwind.css\";\nexport * from \"./components/Button\";\nexport * from \"./components/Header\";\nexport * from \"./components/AppsMenu\";\nexport * from \"./components/Modal\";\nexport * from \"./components/Modal/ModalMudancaEntidade\";\nexport * from \"./components/Dialog\";\nexport * from \"./components/Button\";\nexport * from \"./components/Sidebar\";\nexport * from \"./components/Popover\";\nexport * from \"./components/DropDownMenu\";\nexport * from \"./components/Select\";\nexport * from \"./components/Tabs\";\n\n/** Atoms */\nexport * from \"./components/atoms/forms/input\";\nexport * from \"./components/atoms/forms/textarea\";\nexport * from \"./components/atoms/forms/checkbox\";\nexport * from \"./components/atoms/forms/switch\";\nexport * from \"./components/atoms/display/badge\";\nexport * from \"./components/atoms/display/avatar\";\n/** Molecules */\nexport * from \"./components/molecules/card\";\nexport * from \"./components/molecules/collapsible\";\nexport * from \"./components/molecules/display/page-header\";\nexport * from \"./components/molecules/display/empty-state\";\nexport * from \"./components/molecules/display/result-metadata\";\nexport * from \"./components/molecules/display/label-value\";\nexport * from \"./components/molecules/forms/combobox\";\nexport * from \"./components/molecules/forms/multi-select\";\nexport * from \"./components/molecules/overlay/command\";\nexport * from \"./components/molecules/overlay/confirm-dialog\";\nexport * from \"./components/molecules/overlay/tooltip\";\n/** Organisms */\nexport * from \"./components/organisms/filter\";\nexport * from \"./components/organisms/card-list\";\nexport * from \"./components/organisms/drawer\";\nexport * from \"./components/organisms/upload\";\nexport * from \"./components/organisms/calendar\";\nexport * from \"./components/organisms/period-range-list\";\nexport * from \"./components/organisms/header-notifications\";\n\n/** Modulos */\nexport * from \"./alertas\";\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { Loader2 } from \"lucide-react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\n\nconst buttonVariants = cva(\n \"cnc-inline-flex cnc-items-center cnc-justify-center cnc-border cnc-whitespace-nowrap cnc-rounded-md cnc-text-sm cnc-font-medium cnc-ring-offset-background cnc-transition-colors focus-visible:cnc-outline-none focus-visible:cnc-ring-2 focus-visible:cnc-ring-ring focus-visible:cnc-ring-offset-2 disabled:cnc-pointer-events-none disabled:cnc-opacity-50\",\n {\n variants: {\n variant: {\n confirm:\n \"cnc-bg-brand-blue-400 cnc-border-brand-blue-500 hover:cnc-bg-brand-blue-400/90 cnc-text-white\",\n create:\n \"cnc-bg-brand-green-100 cnc-border-brand-green-200 hover:cnc-bg-brand-green-100/80 cnc-text-white\",\n secondary:\n \"cnc-bg-brand-gray-20 cnc-text-secondary-foreground hover:cnc-brightness-95 cnc-text-white\",\n danger:\n \"cnc-bg-brand-red-500 cnc-border-brand-red-600 hover:cnc-bg-brand-red-500/80 cnc-text-white\",\n outline:\n \"cnc-border cnc-border-input cnc-text-brand-gray-200 cnc-bg-background cnc-shadow-sm hover:cnc-bg-brand-blue-50 hover:cnc-text-accent-foreground\",\n default:\n \"cnc-bg-primary cnc-text-primary-foreground hover:cnc-bg-primary/90 cnc-text-white\",\n },\n size: {\n default: \"cnc-h-10 cnc-px-4 cnc-py-2\",\n sm: \"cnc-h-9 cnc-rounded-md cnc-px-3\",\n lg: \"cnc-h-11 cnc-rounded-md cnc-px-8\",\n icon: \"cnc-h-10 cnc-w-10\",\n },\n outline: {\n true: \"cnc-bg-transparent\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n outline: false,\n },\n compoundVariants: [\n {\n variant: \"confirm\",\n outline: true,\n className: \"cnc-text-brand-blue-400 hover:cnc-text-white\",\n },\n {\n variant: \"create\",\n outline: true,\n className: \"cnc-text-brand-green-100 hover:cnc-text-white\",\n },\n ],\n }\n);\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n isLoading?: boolean;\n variant?:\n | \"default\"\n | \"confirm\"\n | \"create\"\n | \"secondary\"\n | \"danger\"\n | \"outline\"\n | null\n | undefined;\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\" | null | undefined;\n}\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n isLoading = false,\n outline = false,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n className={cn(\n buttonVariants({ variant, size, className, outline }),\n disabled &&\n \"cnc-cursor-not-allowed cnc-border-gray-100 cnc-bg-brand-gray-10 cnc-text-brand-gray-600\",\n isLoading &&\n \"cnc-cursor-not-allowed cnc-border-gray-100 cnc-bg-brand-gray-10 cnc-text-brand-gray-600\"\n )}\n ref={ref}\n disabled={isLoading || disabled}\n {...props}\n >\n <>\n {isLoading && (\n <Loader2 className=\"cnc-mr-2 cnc-h-4 cnc-w-4 cnc-animate-spin cnc-text-brand-gray-600\" />\n )}\n {children}\n </>\n </Comp>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return Boolean(className) && array.indexOf(className) === index;\n })\n .join(' ');\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) => {\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n ...props,\n }),\n );\n\n Component.displayName = `${iconName}`;\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name BellOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOC43IDNBNiA2IDAgMCAxIDE4IDhhMjEuMyAyMS4zIDAgMCAwIC42IDUiIC8+CiAgPHBhdGggZD0iTTE3IDE3SDNzMy0yIDMtOWE0LjY3IDQuNjcgMCAwIDEgLjMtMS43IiAvPgogIDxwYXRoIGQ9Ik0xMC4zIDIxYTEuOTQgMS45NCAwIDAgMCAzLjQgMCIgLz4KICA8cGF0aCBkPSJtMiAyIDIwIDIwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/bell-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst BellOff = createLucideIcon('BellOff', [\n ['path', { d: 'M8.7 3A6 6 0 0 1 18 8a21.3 21.3 0 0 0 .6 5', key: 'o7mx20' }],\n ['path', { d: 'M17 17H3s3-2 3-9a4.67 4.67 0 0 1 .3-1.7', key: '16f1lm' }],\n ['path', { d: 'M10.3 21a1.94 1.94 0 0 0 3.4 0', key: 'qgo35s' }],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n]);\n\nexport default BellOff;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name BellRing\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiA4YTYgNiAwIDAgMSAxMiAwYzAgNyAzIDkgMyA5SDNzMy0yIDMtOSIgLz4KICA8cGF0aCBkPSJNMTAuMyAyMWExLjk0IDEuOTQgMCAwIDAgMy40IDAiIC8+CiAgPHBhdGggZD0iTTQgMkMyLjggMy43IDIgNS43IDIgOCIgLz4KICA8cGF0aCBkPSJNMjIgOGMwLTIuMy0uOC00LjMtMi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/bell-ring\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst BellRing = createLucideIcon('BellRing', [\n ['path', { d: 'M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9', key: '1qo2s2' }],\n ['path', { d: 'M10.3 21a1.94 1.94 0 0 0 3.4 0', key: 'qgo35s' }],\n ['path', { d: 'M4 2C2.8 3.7 2 5.7 2 8', key: 'tap9e0' }],\n ['path', { d: 'M22 8c0-2.3-.8-4.3-2-6', key: '5bb3ad' }],\n]);\n\nexport default BellRing;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Bell\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiA4YTYgNiAwIDAgMSAxMiAwYzAgNyAzIDkgMyA5SDNzMy0yIDMtOSIgLz4KICA8cGF0aCBkPSJNMTAuMyAyMWExLjk0IDEuOTQgMCAwIDAgMy40IDAiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/bell\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Bell = createLucideIcon('Bell', [\n ['path', { d: 'M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9', key: '1qo2s2' }],\n ['path', { d: 'M10.3 21a1.94 1.94 0 0 0 3.4 0', key: 'qgo35s' }],\n]);\n\nexport default Bell;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name CalendarDays\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAydjQiIC8+CiAgPHBhdGggZD0iTTE2IDJ2NCIgLz4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjQiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik0zIDEwaDE4IiAvPgogIDxwYXRoIGQ9Ik04IDE0aC4wMSIgLz4KICA8cGF0aCBkPSJNMTIgMTRoLjAxIiAvPgogIDxwYXRoIGQ9Ik0xNiAxNGguMDEiIC8+CiAgPHBhdGggZD0iTTggMThoLjAxIiAvPgogIDxwYXRoIGQ9Ik0xMiAxOGguMDEiIC8+CiAgPHBhdGggZD0iTTE2IDE4aC4wMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/calendar-days\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CalendarDays = createLucideIcon('CalendarDays', [\n ['path', { d: 'M8 2v4', key: '1cmpym' }],\n ['path', { d: 'M16 2v4', key: '4m81vk' }],\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', key: '1hopcy' }],\n ['path', { d: 'M3 10h18', key: '8toen8' }],\n ['path', { d: 'M8 14h.01', key: '6423bh' }],\n ['path', { d: 'M12 14h.01', key: '1etili' }],\n ['path', { d: 'M16 14h.01', key: '1gbofw' }],\n ['path', { d: 'M8 18h.01', key: 'lrp35t' }],\n ['path', { d: 'M12 18h.01', key: 'mhygvu' }],\n ['path', { d: 'M16 18h.01', key: 'kzsmim' }],\n]);\n\nexport default CalendarDays;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('Check', [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]]);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('ChevronDown', [\n ['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }],\n]);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('ChevronLeft', [\n ['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }],\n]);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('ChevronRight', [\n ['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }],\n]);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTggMTUtNi02LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronUp = createLucideIcon('ChevronUp', [['path', { d: 'm18 15-6-6-6 6', key: '153udz' }]]);\n\nexport default ChevronUp;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronsUpDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNyAxNSA1IDUgNS01IiAvPgogIDxwYXRoIGQ9Im03IDkgNS01IDUgNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevrons-up-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronsUpDown = createLucideIcon('ChevronsUpDown', [\n ['path', { d: 'm7 15 5 5 5-5', key: '1hf1tw' }],\n ['path', { d: 'm7 9 5-5 5 5', key: 'sgt6xg' }],\n]);\n\nexport default ChevronsUpDown;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Circle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Circle = createLucideIcon('Circle', [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n]);\n\nexport default Circle;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Download\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgLz4KICA8cG9seWxpbmUgcG9pbnRzPSI3IDEwIDEyIDE1IDE3IDEwIiAvPgogIDxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iMTUiIHkyPSIzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/download\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Download = createLucideIcon('Download', [\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n ['polyline', { points: '7 10 12 15 17 10', key: '2ggqvy' }],\n ['line', { x1: '12', x2: '12', y1: '15', y2: '3', key: '1vk2je' }],\n]);\n\nexport default Download;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('ExternalLink', [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n]);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FileText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdaIiAvPgogIDxwYXRoIGQ9Ik0xNCAydjRhMiAyIDAgMCAwIDIgMmg0IiAvPgogIDxwYXRoIGQ9Ik0xMCA5SDgiIC8+CiAgPHBhdGggZD0iTTE2IDEzSDgiIC8+CiAgPHBhdGggZD0iTTE2IDE3SDgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/file-text\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileText = createLucideIcon('FileText', [\n ['path', { d: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z', key: '1rqfz7' }],\n ['path', { d: 'M14 2v4a2 2 0 0 0 2 2h4', key: 'tnqrlb' }],\n ['path', { d: 'M10 9H8', key: 'b1mrlr' }],\n ['path', { d: 'M16 13H8', key: 't4e002' }],\n ['path', { d: 'M16 17H8', key: 'z1uh3a' }],\n]);\n\nexport default FileText;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FilterX\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuMDEzIDNIMmw4IDkuNDZWMTlsNCAydi04LjU0bC45LTEuMDU1IiAvPgogIDxwYXRoIGQ9Im0yMiAzLTUgNSIgLz4KICA8cGF0aCBkPSJtMTcgMyA1IDUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/filter-x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FilterX = createLucideIcon('FilterX', [\n ['path', { d: 'M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055', key: '1fi1da' }],\n ['path', { d: 'm22 3-5 5', key: '12jva0' }],\n ['path', { d: 'm17 3 5 5', key: 'k36vhe' }],\n]);\n\nexport default FilterX;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name FolderOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiAxNCAxLjUtMi45QTIgMiAwIDAgMSA5LjI0IDEwSDIwYTIgMiAwIDAgMSAxLjk0IDIuNWwtMS41NCA2YTIgMiAwIDAgMS0xLjk1IDEuNUg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgxOGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderOpen = createLucideIcon('FolderOpen', [\n [\n 'path',\n {\n d: 'm6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2',\n key: 'usdka0',\n },\n ],\n]);\n\nexport default FolderOpen;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ListFilter\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyA2aDE4IiAvPgogIDxwYXRoIGQ9Ik03IDEyaDEwIiAvPgogIDxwYXRoIGQ9Ik0xMCAxOGg0IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/list-filter\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ListFilter = createLucideIcon('ListFilter', [\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M7 12h10', key: 'b7w52i' }],\n ['path', { d: 'M10 18h4', key: '1ulq68' }],\n]);\n\nexport default ListFilter;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('LoaderCircle', [\n ['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }],\n]);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name MailOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEuMiA4LjRjLjUuMzguOC45Ny44IDEuNnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlYxMGEyIDIgMCAwIDEgLjgtMS42bDgtNmEyIDIgMCAwIDEgMi40IDBsOCA2WiIgLz4KICA8cGF0aCBkPSJtMjIgMTAtOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDEwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/mail-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MailOpen = createLucideIcon('MailOpen', [\n [\n 'path',\n {\n d: 'M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z',\n key: '1jhwl8',\n },\n ],\n ['path', { d: 'm22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10', key: '1qfld7' }],\n]);\n\nexport default MailOpen;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Mail\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHg9IjIiIHk9IjQiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Im0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/mail\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mail = createLucideIcon('Mail', [\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2', key: '18n3k1' }],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7', key: '1ocrg3' }],\n]);\n\nexport default Mail;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Paperclip\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMjEuNDQgMTEuMDUtOS4xOSA5LjE5YTYgNiAwIDAgMS04LjQ5LTguNDlsOC41Ny04LjU3QTQgNCAwIDEgMSAxOCA4Ljg0bC04LjU5IDguNTdhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/paperclip\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Paperclip = createLucideIcon('Paperclip', [\n [\n 'path',\n {\n d: 'm21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48',\n key: '1u3ebp',\n },\n ],\n]);\n\nexport default Paperclip;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIgLz4KICA8cGF0aCBkPSJtMTUgNSA0IDQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/pencil\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Pencil = createLucideIcon('Pencil', [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n]);\n\nexport default Pencil;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('Plus', [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n]);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxwYXRoIGQ9Im0yMSAyMS00LjMtNC4zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon('Search', [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['path', { d: 'm21 21-4.3-4.3', key: '1qie3q' }],\n]);\n\nexport default Search;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyA2aDE4IiAvPgogIDxwYXRoIGQ9Ik0xOSA2djE0YzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0yVjYiIC8+CiAgPHBhdGggZD0iTTggNlY0YzAtMSAxLTIgMi0yaDRjMSAwIDIgMSAyIDJ2MiIgLz4KICA8bGluZSB4MT0iMTAiIHgyPSIxMCIgeTE9IjExIiB5Mj0iMTciIC8+CiAgPGxpbmUgeDE9IjE0IiB4Mj0iMTQiIHkxPSIxMSIgeTI9IjE3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/trash-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Trash2 = createLucideIcon('Trash2', [\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6', key: '4alrt4' }],\n ['path', { d: 'M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2', key: 'v07s0e' }],\n ['line', { x1: '10', x2: '10', y1: '11', y2: '17', key: '1uufr5' }],\n ['line', { x1: '14', x2: '14', y1: '11', y2: '17', key: 'xtxkd' }],\n]);\n\nexport default Trash2;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('User', [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n]);\n\nexport default User;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('X', [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n]);\n\nexport default X;\n","import {\n ClassGroup,\n ClassValidator,\n Config,\n GenericClassGroupIds,\n GenericConfig,\n GenericThemeGroupIds,\n ThemeGetter,\n ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: GenericClassGroupIds\n}\n\ninterface ClassValidatorObject {\n classGroupId: GenericClassGroupIds\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport const createClassGroupUtils = (config: GenericConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: GenericClassGroupIds,\n hasPostfixModifier: boolean,\n ) => {\n const conflicts = conflictingClassGroups[classGroupId] || []\n\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n }\n\n return conflicts\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n classPartObject: ClassPartObject,\n): GenericClassGroupIds | undefined => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nconst getGroupIdForArbitraryProperty = (className: string) => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':'),\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<GenericClassGroupIds, GenericThemeGroupIds>) => {\n const { theme, prefix } = config\n const classMap: ClassPartObject = {\n nextPart: new Map<string, ClassPartObject>(),\n validators: [],\n }\n\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(\n Object.entries(config.classGroups),\n prefix,\n )\n\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme)\n })\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<GenericThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: GenericClassGroupIds,\n theme: ThemeObject<GenericThemeGroupIds>,\n) => {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme,\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme,\n )\n })\n })\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string) => {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: [],\n })\n }\n\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n })\n\n return currentClassPartObject\n}\n\nconst isThemeGetter = (func: ClassValidator | ThemeGetter): func is ThemeGetter =>\n (func as ThemeGetter).isThemeGetter\n\nconst getPrefixedClassGroupEntries = (\n classGroupEntries: Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]>,\n prefix: string | undefined,\n): Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]> => {\n if (!prefix) {\n return classGroupEntries\n }\n\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map((classDefinition) => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition\n }\n\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(\n Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]),\n )\n }\n\n return classDefinition\n })\n\n return [classGroupId, prefixedClassGroup]\n })\n}\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport const createLruCache = <Key, Value>(maxCacheSize: number): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache = new Map<Key, Value>()\n let previousCache = new Map<Key, Value>()\n\n const update = (key: Key, value: Value) => {\n cache.set(key, value)\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = new Map()\n }\n }\n\n return {\n get(key) {\n let value = cache.get(key)\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value)\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { GenericConfig } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nexport const createParseClassName = (config: GenericConfig) => {\n const { separator, experimentalParseClassName } = config\n const isSeparatorSingleCharacter = separator.length === 1\n const firstSeparatorCharacter = separator[0]\n const separatorLength = separator.length\n\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = (className: string) => {\n const modifiers = []\n\n let bracketDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index]\n\n if (bracketDepth === 0) {\n if (\n currentCharacter === firstSeparatorCharacter &&\n (isSeparatorSingleCharacter ||\n className.slice(index, index + separatorLength) === separator)\n ) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + separatorLength\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') {\n bracketDepth++\n } else if (currentCharacter === ']') {\n bracketDepth--\n }\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.substring(modifierStart)\n const hasImportantModifier =\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n const baseClassName = hasImportantModifier\n ? baseClassNameWithImportantModifier.substring(1)\n : baseClassNameWithImportantModifier\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n }\n }\n\n if (experimentalParseClassName) {\n return (className: string) => experimentalParseClassName({ className, parseClassName })\n }\n\n return parseClassName\n}\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const sortModifiers = (modifiers: string[]) => {\n if (modifiers.length <= 1) {\n return modifiers\n }\n\n const sortedModifiers: string[] = []\n let unsortedModifiers: string[] = []\n\n modifiers.forEach((modifier) => {\n const isArbitraryVariant = modifier[0] === '['\n\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n unsortedModifiers = []\n } else {\n unsortedModifiers.push(modifier)\n }\n })\n\n sortedModifiers.push(...unsortedModifiers.sort())\n\n return sortedModifiers\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { GenericConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: GenericConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER, sortModifiers } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds } = configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const { modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition } =\n parseClassName(originalClassName)\n\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition)\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n const variantModifier = sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < arguments.length) {\n if ((argument = arguments[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string) => {\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { GenericConfig } from './types'\n\ntype CreateConfigFirst = () => GenericConfig\ntype CreateConfigSubsequent = (config: GenericConfig) => GenericConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall = initTailwindMerge\n\n function initTailwindMerge(classList: string) {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as GenericConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n function tailwindMerge(classList: string) {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments as any))\n }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || []\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst stringLengths = new Set(['px', 'full', 'screen'])\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isLength = (value: string) =>\n isNumber(value) || stringLengths.has(value) || fractionRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, 'length', isLengthOnly)\n\nexport const isNumber = (value: string) => Boolean(value) && !Number.isNaN(Number(value))\n\nexport const isArbitraryNumber = (value: string) => getIsArbitraryValue(value, 'number', isNumber)\n\nexport const isInteger = (value: string) => Boolean(value) && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nconst sizeLabels = new Set(['length', 'size', 'percentage'])\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, sizeLabels, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, 'position', isNever)\n\nconst imageLabels = new Set(['image', 'url'])\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, imageLabels, isImage)\n\nexport const isArbitraryShadow = (value: string) => getIsArbitraryValue(value, '', isShadow)\n\nexport const isAny = () => true\n\nconst getIsArbitraryValue = (\n value: string,\n label: string | Set<string>,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n const colors = fromTheme('colors')\n const spacing = fromTheme('spacing')\n const blur = fromTheme('blur')\n const brightness = fromTheme('brightness')\n const borderColor = fromTheme('borderColor')\n const borderRadius = fromTheme('borderRadius')\n const borderSpacing = fromTheme('borderSpacing')\n const borderWidth = fromTheme('borderWidth')\n const contrast = fromTheme('contrast')\n const grayscale = fromTheme('grayscale')\n const hueRotate = fromTheme('hueRotate')\n const invert = fromTheme('invert')\n const gap = fromTheme('gap')\n const gradientColorStops = fromTheme('gradientColorStops')\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions')\n const inset = fromTheme('inset')\n const margin = fromTheme('margin')\n const opacity = fromTheme('opacity')\n const padding = fromTheme('padding')\n const saturate = fromTheme('saturate')\n const scale = fromTheme('scale')\n const sepia = fromTheme('sepia')\n const skew = fromTheme('skew')\n const space = fromTheme('space')\n const translate = fromTheme('translate')\n\n const getOverscroll = () => ['auto', 'contain', 'none'] as const\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing] as const\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing] as const\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength] as const\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue] as const\n const getPositions = () =>\n [\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ] as const\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'] as const\n const getBlendModes = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const getAlign = () =>\n ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'] as const\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue] as const\n const getBreaks = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue]\n\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary(),\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{ aspect: ['auto', 'square', 'video', isArbitraryValue] }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{ columns: [isTshirtSize] }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': getBreaks() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': getBreaks() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: [...getPositions(), isArbitraryValue] }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: getOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': getOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': getOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: getOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': getOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': getOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: [inset] }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': [inset] }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': [inset] }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{ start: [inset] }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{ end: [inset] }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: [inset] }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: [inset] }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: [inset] }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: [inset] }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: ['auto', isInteger, isArbitraryValue] }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{ basis: getSpacingWithAutoAndArbitrary() }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['wrap', 'wrap-reverse', 'nowrap'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: ['1', 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: getZeroAndEmpty() }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: getZeroAndEmpty() }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{ order: ['first', 'last', 'none', isInteger, isArbitraryValue] }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': [isAny] }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [\n {\n col: [\n 'auto',\n { span: ['full', isInteger, isArbitraryValue] },\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': [isAny] }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [\n { row: ['auto', { span: [isInteger, isArbitraryValue] }, isArbitraryValue] },\n ],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: [gap] }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': [gap] }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': [gap] }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: ['normal', ...getAlign()] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': ['start', 'end', 'center', 'stretch'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...getAlign(), 'baseline'] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{ self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline'] }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': [...getAlign(), 'baseline'] }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: [padding] }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: [padding] }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: [padding] }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: [padding] }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: [padding] }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: [padding] }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: [padding] }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: [padding] }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: [padding] }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: [margin] }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: [margin] }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: [margin] }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: [margin] }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: [margin] }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: [margin] }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: [margin] }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: [margin] }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: [margin] }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{ 'space-x': [space] }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{ 'space-y': [space] }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [\n {\n w: [\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svw',\n 'lvw',\n 'dvw',\n isArbitraryValue,\n spacing,\n ],\n },\n ],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{ 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit'] }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n isArbitraryValue,\n spacing,\n 'none',\n 'full',\n 'min',\n 'max',\n 'fit',\n 'prose',\n { screen: [isTshirtSize] },\n isTshirtSize,\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [\n {\n h: [\n isArbitraryValue,\n spacing,\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svh',\n 'lvh',\n 'dvh',\n ],\n },\n ],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [\n { 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [\n { 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{ size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit'] }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{ text: ['base', isTshirtSize, isArbitraryLength] }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [\n {\n font: [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{ font: [isAny] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [\n {\n tracking: [\n 'tighter',\n 'tight',\n 'normal',\n 'wide',\n 'wider',\n 'widest',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{ 'line-clamp': ['none', isNumber, isArbitraryNumber] }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n 'none',\n 'tight',\n 'snug',\n 'normal',\n 'relaxed',\n 'loose',\n isLength,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryValue] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{ list: ['none', 'disc', 'decimal', isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: [colors] }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{ 'placeholder-opacity': [opacity] }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: [colors] }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{ 'text-opacity': [opacity] }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...getLineStyles(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n { decoration: ['auto', 'from-font', isLength, isArbitraryLength] },\n ],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{ 'underline-offset': ['auto', isLength, isArbitraryValue] }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: [colors] }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: getSpacingWithArbitrary() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryValue] }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{ 'bg-opacity': [opacity] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: [...getPositions(), isArbitraryPosition] }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: ['no-repeat', { repeat: ['', 'x', 'y', 'round', 'space'] }] }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: ['auto', 'cover', 'contain', isArbitrarySize] }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n { 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: [colors] }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: [gradientColorStops] }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: [gradientColorStops] }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: [gradientColorStops] }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: [borderRadius] }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': [borderRadius] }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': [borderRadius] }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': [borderRadius] }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': [borderRadius] }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': [borderRadius] }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': [borderRadius] }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': [borderRadius] }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': [borderRadius] }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': [borderRadius] }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': [borderRadius] }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': [borderRadius] }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': [borderRadius] }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': [borderRadius] }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': [borderRadius] }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: [borderWidth] }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': [borderWidth] }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': [borderWidth] }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': [borderWidth] }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': [borderWidth] }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': [borderWidth] }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': [borderWidth] }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': [borderWidth] }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': [borderWidth] }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{ 'border-opacity': [opacity] }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...getLineStyles(), 'hidden'] }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{ 'divide-x': [borderWidth] }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{ 'divide-y': [borderWidth] }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{ 'divide-opacity': [opacity] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{ divide: getLineStyles() }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: [borderColor] }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': [borderColor] }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': [borderColor] }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': [borderColor] }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': [borderColor] }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': [borderColor] }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': [borderColor] }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': [borderColor] }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': [borderColor] }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: [borderColor] }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: ['', ...getLineStyles()] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{ 'outline-offset': [isLength, isArbitraryValue] }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{ outline: [isLength, isArbitraryLength] }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: [colors] }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{ ring: getLengthWithEmptyAndArbitrary() }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{ ring: [colors] }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{ 'ring-opacity': [opacity] }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{ 'ring-offset': [isLength, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{ 'ring-offset': [colors] }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{ shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow] }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{ shadow: [isAny] }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [opacity] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': getBlendModes() }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{ filter: ['', 'none'] }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: [blur] }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [brightness] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [contrast] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{ 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue] }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: [grayscale] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [hueRotate] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: [invert] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [saturate] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: [sepia] }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{ 'backdrop-filter': ['', 'none'] }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': [blur] }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{ 'backdrop-brightness': [brightness] }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{ 'backdrop-contrast': [contrast] }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{ 'backdrop-grayscale': [grayscale] }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{ 'backdrop-hue-rotate': [hueRotate] }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{ 'backdrop-invert': [invert] }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{ 'backdrop-opacity': [opacity] }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{ 'backdrop-saturate': [saturate] }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{ 'backdrop-sepia': [sepia] }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': [borderSpacing] }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': [borderSpacing] }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': [borderSpacing] }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n 'none',\n 'all',\n '',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: getNumberAndArbitrary() }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{ ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue] }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: getNumberAndArbitrary() }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue] }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{ transform: ['', 'gpu', 'none'] }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: [scale] }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': [scale] }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': [scale] }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: [isInteger, isArbitraryValue] }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': [translate] }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': [translate] }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': [skew] }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': [skew] }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [\n {\n origin: [\n 'center',\n 'top',\n 'top-right',\n 'right',\n 'bottom-right',\n 'bottom',\n 'bottom-left',\n 'left',\n 'top-left',\n isArbitraryValue,\n ],\n },\n ],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: ['auto', colors] }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: [colors] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['none', 'auto'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', 'y', 'x', ''] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': getSpacingWithArbitrary() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [\n {\n touch: ['auto', 'none', 'manipulation'],\n },\n ],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [\n {\n 'touch-pan': ['x', 'left', 'right'],\n },\n ],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [\n {\n 'touch-pan': ['y', 'up', 'down'],\n },\n ],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n { 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue] },\n ],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: [colors, 'none'] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{ stroke: [isLength, isArbitraryLength, isArbitraryNumber] }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: [colors, 'none'] }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-s',\n 'border-w-e',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-s',\n 'border-color-e',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { ConfigExtension, GenericConfig } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: GenericConfig,\n {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'separator', separator)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n for (const configKey in override) {\n overrideConfigProperties(\n baseConfig[configKey as keyof typeof override],\n override[configKey as keyof typeof override],\n )\n }\n\n for (const key in extend) {\n mergeConfigProperties(\n baseConfig[key as keyof typeof extend],\n extend[key as keyof typeof extend],\n )\n }\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue)\n }\n }\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds, GenericConfig } from './types'\n\ntype CreateConfigSubsequent = (config: GenericConfig) => GenericConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"cnc-flex cnc-cursor-default cnc-select-none cnc-items-center cnc-rounded-sm cnc-px-2 cnc-py-1.5 cnc-text-sm cnc-outline-none focus:cnc-bg-accent data-[state=open]:cnc-bg-accent\",\n inset && \"cnc-pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"cnc-ml-auto cnc-h-4 cnc-w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"cnc-z-50 cnc-min-w-[8rem] cnc-overflow-hidden cnc-rounded-md cnc-border cnc-bg-popover cnc-p-1 cnc-text-popover-foreground cnc-shadow-lg data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"cnc-z-50 cnc-min-w-[12rem] cnc-overflow-hidden cnc-rounded-md cnc-border cnc-bg-popover cnc-p-1 cnc-text-popover-foreground cnc-shadow-md data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2 cnc-bg-white\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-select-none cnc-items-center cnc-rounded-sm cnc-px-2 cnc-py-1.5 cnc-text-sm cnc-outline-none cnc-transition-colors focus:cnc-bg-accent focus:cnc-text-accent-foreground data-[disabled]:cnc-pointer-events-none data-[disabled]:cnc-opacity-50 hover:cnc-bg-brand-gray-10 cnc-cursor-pointer cnc-pr-8\",\n inset,\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-cursor-default cnc-select-none cnc-items-center cnc-rounded-sm cnc-py-1.5 cnc-pl-8 cnc-pr-2 cnc-text-sm cnc-outline-none cnc-transition-colors focus:cnc-bg-accent focus:cnc-text-accent-foreground data-[disabled]:cnc-pointer-events-none data-[disabled]:cnc-opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"cnc-absolute cnc-left-2 cnc-flex cnc-h-3.5 cnc-w-3.5 cnc-items-center cnc-justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-cursor-default cnc-select-none cnc-items-center cnc-rounded-sm cnc-py-1.5 cnc-pl-8 cnc-pr-2 cnc-text-sm cnc-outline-none cnc-transition-colors focus:cnc-bg-accent focus:cnc-text-accent-foreground data-[disabled]:cnc-pointer-events-none data-[disabled]:cnc-opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"cnc-absolute cnc-left-2 cnc-flex cnc-h-3.5 cnc-w-3.5 cnc-items-center cnc-justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"cnc-px-2 cnc-py-1.5 cnc-text-sm cnc-font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 cnc-my-1 cnc-h-px cnc-bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"cnc-ml-auto cnc-text-xs cnc-tracking-widest cnc-opacity-60\",\n className\n )}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import { HTMLAttributes, ReactNode } from \"react\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../DropDownMenu\";\nimport { cn } from \"../utils\";\n\nfunction getInitials(fullName: string): string {\n if (!fullName) {\n return \"\";\n }\n const nameParts = fullName.trim().split(\" \");\n\n if (nameParts.length < 2) {\n return nameParts[0][0].toUpperCase();\n }\n\n const firstNameInitial = nameParts[0][0].toUpperCase();\n const lastNameInitial = nameParts[nameParts.length - 1][0].toUpperCase();\n\n return `${firstNameInitial}${lastNameInitial}`;\n}\n\nexport interface HeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"primary\";\n}\n\nexport function Header({\n variant = \"default\",\n className,\n ...props\n}: HeaderProps) {\n return (\n <header\n data-header-type={variant}\n className={cn(\n \"cnc-header cnc-h-[60px] cnc-flex cnc-items-center cnc-justify-end cnc-gap-4 cnc-px-4 lg:cnc-px-0 cnc-w-full cnc-shadow-md\",\n variant === \"primary\" ? \"cnc-bg-primary-800\" : \"cnc-bg-white\",\n className\n )}\n {...props}\n />\n );\n}\ninterface HeaderContainerProps extends HTMLAttributes<HTMLDivElement> {\n /** Classes CSS adicionais para estilização personalizada. */\n className?: string;\n /** Indica se o menu (sidebar) está aberto. Controla a exibição do ícone de hambúrguer e a lógica de toggle.*/\n isOpen?: boolean;\n /** Função de callback chamada quando o ícone de hambúrguer (toggle do menu) é clicado. */\n onOpenMenu?: () => void;\n /**\n * Indica se o cabeçalho deve exibir um ícone de hambúrguer para controlar um sidebar.\n *\n * - Se `true`, o ícone de hambúrguer será exibido e, ao ser clicado, chamará a função `onOpenMenu` (botão só será apresentado em caso do `isOpen` estiver como `false`).\n * - Se `false`, o ícone de hambúrguer não será exibido. Neste caso, um logotipo pode ser exibido se a prop `logo` for fornecida (verifique a documentação do componente `Header` para mais detalhes sobre a prop `logo`).\n * @defaultValue true\n */\n hasSidebar?: boolean;\n /**\n * URL ou caminho para o logotipo a ser exibido no cabeçalho.\n *\n * Esta prop é usada em conjunto com `hasSidebar`.\n *\n * - Se `hasSidebar` for `false`, o logotipo será exibido.\n * - Se `hasSidebar` for `true` (ou indefinido, pois o padrão é `false`), o logotipo não será exibido, e o ícone de hambúrguer será exibido em seu lugar.\n *\n * O logotipo será renderizado como uma imagem (`<img>`) dentro de um link (`<a>`) que aponta para a URL especificada em `logoLink` (se fornecida). Caso contrário, o link apontará para `/`.\n *\n * @example\n * <HeaderContainer logo=\"/images/logo.svg\" logoLink=\"/home\" />\n */\n logo?: string;\n\n /**\n * URL para onde o logotipo deve redirecionar ao ser clicado.\n *\n * Se não for fornecida, irá se comportar como uma imagem normal.\n *\n * @example\n * <HeaderContainer logo=\"/images/logo.svg\" logoLink=\"/home\" />\n */\n logoLink?: string;\n\n container?: boolean;\n\n /**\n * Conteúdo opcional exibido à esquerda dos `children` do cabeçalho — a área\n * reservada para o sino de notificações.\n *\n * Não é renderizado quando omitido, então nenhum consumidor atual é afetado.\n * O uso previsto é o componente `HeaderNotifications`, mas qualquer nó React\n * é aceito.\n *\n * @example\n * <HeaderContainer\n * onOpenMenu={toggleSidebar}\n * isOpen={collapsed}\n * notifications={<HeaderNotifications items={notificacoes} />}\n * >\n * <HeaderProfileHeader user={usuario}>...</HeaderProfileHeader>\n * </HeaderContainer>\n */\n notifications?: ReactNode;\n}\nexport const HeaderContainer: React.FC<HeaderContainerProps> = ({\n className,\n isOpen,\n onOpenMenu,\n hasSidebar = true,\n container = false,\n logo,\n logoLink,\n notifications,\n children,\n ...props\n}) => {\n const renderLogo = () => {\n if (!hasSidebar && logo) {\n return logoLink ? (\n <a href={logoLink}>\n <img src={logo} alt=\"Logotipo\" className=\"cnc-h-8\" />\n </a>\n ) : (\n <img src={logo} alt=\"Logotipo\" className=\"cnc-h-8\" />\n );\n }\n return null;\n };\n\n return (\n <div\n className={cn(\n \"cnc-flex cnc-flex-1 cnc-justify-between cnc-items-center\",\n container && \"cnc-container cnc-mx-auto\",\n className\n )}\n {...props}\n >\n <div className=\"cnc-flex cnc-items-center\">\n {onOpenMenu && !isOpen && hasSidebar ? (\n <button\n onClick={onOpenMenu}\n className=\"hover:cnc-brightness-75 cnc-sidebar-child-hidden cnc-cursor-pointer\"\n >\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 512 512\"\n className=\"cnc-size-6 cnc-text-brand-blue-900 cnc-header-item\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeMiterlimit=\"10\"\n strokeWidth=\"48\"\n d=\"M88 152h336M88 256h336M88 360h336\"\n ></path>\n </svg>\n </button>\n ) : (\n !hasSidebar && renderLogo()\n )}\n </div>\n <div className=\"cnc-flex\">\n {notifications && (\n <div className=\"cnc-flex cnc-items-center cnc-pr-3\">{notifications}</div>\n )}\n {children}\n </div>\n </div>\n );\n};\n\ninterface ProfileProps extends HTMLAttributes<HTMLDivElement> {\n user: { entityName: string; userName: string };\n}\nexport const HeaderProfileHeader: React.FC<ProfileProps> = ({\n user,\n children,\n}) => {\n const { userName, entityName } = user;\n const initials = getInitials(userName);\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <div\n id=\"cnc-border-lateral\"\n className=\"cnc-border-solid cnc-border-l-2 cnc-border-brand-blue-60 cnc-header-item\"\n >\n <div className=\"cnc-flex cnc-flex-row cnc-gap-2 cnc-items-center cnc-justify-center hover:cnc-bg-gray-100 cnc-transition cnc-duration-300 cnc-ease-in-out cnc-cursor-pointer cnc-px-4 cnc-py-2 cnc-rounded-lg cnc-ml-8 cnc-header-item\">\n <div className=\"cnc-flex cnc-flex-col cnc-justify-end cnc-text-end\">\n <p className=\"cnc-text-xs cnc-font-extrabold cnc-text-brand-blue-900 cnc-header-item\">\n {entityName}\n </p>\n <p className=\"cnc-text-xs cnc-font-normal cnc-text-brand-gray-700 cnc-header-item/50\">\n {userName}\n </p>\n </div>\n <div>\n <div className=\"cnc-flex cnc-items-center cnc-justify-center cnc-w-10 cnc-h-10 cnc-rounded-full cnc-bg-brand-white cnc-text-brand-blue-900 cnc-text-sm cnc-font-normal cnc-border-solid cnc-border-2 cnc-header-item\">\n {initials}\n </div>\n </div>\n </div>\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent>{children}</DropdownMenuContent>\n </DropdownMenu>\n );\n};\ninterface ProfileItemProps extends HTMLAttributes<HTMLDivElement> {\n onClick: () => void;\n icon: ReactNode;\n}\nexport const HeaderProfileItem: React.FC<ProfileItemProps> = ({\n onClick,\n icon,\n children,\n}) => {\n return (\n <DropdownMenuItem onClick={onClick}>\n {icon}\n {children}\n </DropdownMenuItem>\n );\n};\n\nexport const AplicationsHeader = ({ children }: any) => {\n return (\n <>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <div className=\"cnc-flex cnc-flex-row cnc-gap-2 cnc-items-center cnc-justify-center hover:cnc-bg-gray-100 cnc-transition cnc-duration-300 cnc-ease-in-out cnc-cursor-pointer cnc-px-4 cnc-py-2 cnc-rounded-lg cnc-header-item\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 16 16\"\n // fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"cnc-header-item\"\n >\n <path\n d=\"M2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4ZM8 16C9.1 16 10 15.1 10 14C10 12.9 9.1 12 8 12C6.9 12 6 12.9 6 14C6 15.1 6.9 16 8 16ZM2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16ZM2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10ZM8 10C9.1 10 10 9.1 10 8C10 6.9 9.1 6 8 6C6.9 6 6 6.9 6 8C6 9.1 6.9 10 8 10ZM12 2C12 3.1 12.9 4 14 4C15.1 4 16 3.1 16 2C16 0.9 15.1 0 14 0C12.9 0 12 0.9 12 2ZM8 4C9.1 4 10 3.1 10 2C10 0.9 9.1 0 8 0C6.9 0 6 0.9 6 2C6 3.1 6.9 4 8 4ZM14 10C15.1 10 16 9.1 16 8C16 6.9 15.1 6 14 6C12.9 6 12 6.9 12 8C12 9.1 12.9 10 14 10ZM14 16C15.1 16 16 15.1 16 14C16 12.9 15.1 12 14 12C12.9 12 12 12.9 12 14C12 15.1 12.9 16 14 16Z\"\n // fill=\"black\"\n />\n </svg>\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"flex\">{children}</DropdownMenuContent>\n </DropdownMenu>\n </>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from \"react\";\n\ndeclare var process: { env: Record<string, string | undefined> };\nexport interface AppItem {\n name: string;\n url: string;\n icon?: string;\n image?: string;\n color?: string;\n}\n\nexport const availableApps: Record<string, AppItem> = {\n GEV: { name: \"Gestão de Eventos\", url: process.env.NEXT_PUBLIC_GEV_APP_URL ?? \"https://gestaoeventos.cnc.org.br\", icon: \"fa-solid fa-calendar-days\", color: \"#E35169\" },\n RENAR: { name: \"RENAR\", url: process.env.NEXT_PUBLIC_RENAR_APP_URL ?? \"https://renar.azurewebsites.net/\", icon: \"fa-solid fa-book\", color: \"#FFAB00\" },\n GDS: { name: \"GDS\", url: process.env.NEXT_PUBLIC_GDS_APP_URL ?? \"https://gds.cnc.org.br/\", icon: \"fa-solid fa-layer-group\", color: \"#0052CC\" },\n GDC: { name: \"Gestão de Câmaras\", url: process.env.NEXT_PUBLIC_GDC_APP_URL ?? \"https://gestaocamaras.cnc.org.br/\", icon: \"fa-solid fa-building-columns\", color: \"#36B37E\" },\n GDD: { name: \"Gestão de Demandas\", url: process.env.NEXT_PUBLIC_GDD_APP_URL ?? \"https://gestaodemandas.cnc.org.br/\", icon: \"fa-solid fa-list-check\", color: \"#6554C0\" },\n CDD: { name: \"OráculoS\", url: process.env.NEXT_PUBLIC_CDD_APP_URL ?? \"https://oraculos.cnc.org.br/\", icon: \"fa-solid fa-database\", color: \"#00B8D9\" },\n};\n\nexport interface AppInput {\n code: string;\n url: string;\n}\n\nexport interface AppsMenuProps {\n apps?: AppInput[];\n /**\n * Controla a exibição do AppsMenu no header.\n *\n * @defaultValue false\n */\n show?: boolean;\n}\n\nexport function AppsMenu({\n apps = Object.keys(availableApps).map((key) => ({ code: key, url: availableApps[key].url })),\n show = false,\n}: AppsMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const renderApps = apps\n .map((app) => {\n const baseApp = availableApps[app.code];\n if (!baseApp) return null;\n return { ...baseApp, url: app.url };\n })\n .filter((app): app is AppItem => app !== null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n\n if (!show) {\n return null;\n }\n\n return (\n <div className=\"cnc-relative cnc-flex cnc-items-center cnc-h-full\" ref={menuRef}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={`cnc-flex cnc-items-center cnc-justify-center cnc-w-[38px] cnc-h-[38px] cnc-rounded-full cnc-transition-all cnc-duration-200 ${\n isOpen\n ? \"cnc-bg-brand-blue-100 cnc-text-white cnc-ring-[3px] cnc-ring-brand-blue-50\"\n : \"cnc-bg-transparent cnc-text-brand-gray-500 hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n }`}\n aria-label=\"Aplicativos e Sistemas\"\n >\n <i className=\"fa-solid fa-border-all cnc-text-[18px]\"></i>\n </button>\n\n {isOpen && (\n <>\n <div className=\"cnc-absolute cnc-right-2 cnc-top-full cnc-mt-[9px] cnc-h-4 cnc-w-4 cnc-rotate-45 cnc-rounded-tl-sm cnc-bg-white cnc-pointer-events-none cnc-z-[51]\"></div>\n <div className=\"cnc-absolute cnc-right-0 cnc-top-full cnc-mt-3 cnc-w-72 cnc-translate-x-3 cnc-bg-white cnc-rounded-2xl cnc-shadow-[0_8px_30px_rgb(0,0,0,0.12)] cnc-z-50 cnc-p-3\">\n <div className=\"cnc-grid cnc-grid-cols-3 cnc-gap-1\">\n {renderApps.map((app) => (\n <a\n key={app.name}\n href={app.url}\n className=\"cnc-flex cnc-flex-col cnc-items-center cnc-justify-center cnc-py-3 cnc-px-2 cnc-rounded-xl hover:cnc-bg-brand-gray-10 cnc-transition-colors cnc-group cnc-text-center cnc-gap-1.5\"\n >\n <div className=\"cnc-flex cnc-h-8 cnc-w-8 cnc-items-center cnc-justify-center cnc-bg-transparent cnc-transition-colors\">\n {app.image ? (\n <img src={app.image} alt={app.name} width={22} height={22} />\n ) : (\n <i className={`${app.icon} cnc-text-[22px]`} style={{ color: app.color }}></i>\n )}\n </div>\n <span className=\"cnc-text-[11px] cnc-font-medium cnc-leading-tight cnc-text-brand-gray-700 cnc-tracking-tight\">\n {app.name}\n </span>\n </a>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"cnc-fixed cnc-inset-0 cnc-z-50 cnc-bg-black/80 data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"cnc-fixed cnc-left-[50%] cnc-top-[50%] cnc-z-50 cnc-grid cnc-w-full cnc-max-w-[42rem] cnc-translate-x-[-50%] cnc-translate-y-[-50%] cnc-gap-4 cnc-border cnc-bg-background cnc-p-6 cnc-pt-4 cnc-shadow-lg cnc-duration-200 data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[state=closed]:cnc-slide-out-to-left-1/2 data-[state=closed]:cnc-slide-out-to-top-[48%] data-[state=open]:cnc-slide-in-from-left-1/2 data-[state=open]:cnc-slide-in-from-top-[48%] cnc-sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"cnc-absolute cnc-right-4 cnc-top-4 cnc-rounded-sm cnc-opacity-70 cnc-ring-offset-background cnc-transition-opacity hover:cnc-opacity-100 focus:cnc-outline-none focus:cnc-ring-2 focus:cnc-ring-ring focus:cnc-ring-offset-2 disabled:cnc-pointer-events-none data-[state=open]:cnc-bg-accent data-[state=open]:cnc-text-muted-foreground\">\n <X className=\"cnc-h-4 cnc-w-4\" />\n <span className=\"cnc-sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-space-y-1.5 cnc-text-center sm:cnc-text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col-reverse sm:cnc-flex-row sm:cnc-justify-end sm:cnc-space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"cnc-text-lg cnc-font-semibold cnc-leading-none cnc-tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"cnc-text-sm cnc-text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","// import { Button } from \"../Button\";\nimport { Dialog, DialogContent, DialogHeader, DialogOverlay } from \"../Dialog\";\n\ntype entidadeOptionsType = {\n name: string;\n value: string;\n};\nexport type ModalProps = {\n title?: string;\n content?: React.ReactElement;\n onClose?: any;\n visibleModal?: boolean;\n};\n\nexport const Modal = ({\n title,\n content,\n visibleModal,\n onClose,\n}: ModalProps) => {\n return (\n <Dialog open={visibleModal} onOpenChange={onClose}>\n <DialogOverlay className=\"cnc-inset-0 cnc-bg-blackA6= data-[state=open]:cnc-animate-overlayShow\" />\n <DialogContent className=\"cnc-max-h-[100vh] cnc-p-0 cnc-rounded-sm cnc-bg-white cnc-focus:outline-none data-[state=open]:cnc-animate-contentShow\">\n {title && (\n <DialogHeader className=\"cnc-text-sm cnc-h-14 cnc-text-black cnc-font- cnc-border-b cnc-w-full cnc-leading-10\">\n {title}\n </DialogHeader>\n )}\n <div className=\"cnc-flex cnc-flex-col cnc-mb-16 cnc-mx-20 cnc-align-middle cnc-items-left cnc-justify-center\">\n {content}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","// import { Button } from \"../Button\";\nimport React, { ReactNode, useEffect } from \"react\";\nimport { Modal } from \"..\";\nimport { Button } from \"../../Button\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogOverlay,\n DialogTitle,\n} from \"../../Dialog\";\nimport { cn } from \"../../utils\";\n\ntype ModalMudancaEnntidadeProps = {\n /** @param {string} title - O título do modal. */\n title?: string;\n /** @param {function} onClose - Função chamada ao fechar o modal. */\n onClose?: any;\n /** @param {boolean} visibleModal - Define se o modal está visível. */\n visibleModal?: boolean;\n /** @param {React.ComponentType} SelectComponent - (Depreciado) Componente de seleção a ser exibido no modal. */\n SelectComponent?: any;\n buttonAction: React.MouseEventHandler<HTMLButtonElement>;\n};\n\ntype ModalMudancaEntidadeProps = {\n /** @param {string} title - O título do modal. Valor padrão: 'Selecionar a entidade'.' */\n title?: string;\n /** @param {function} onClose - Função chamada ao fechar o modal. */\n onOpenChange?: (open: boolean) => void;\n /** @param {boolean} isOpen - Define se o modal está visível. */\n isOpen?: boolean;\n /** @param {ReactNode} children - Contéudo do modal */\n children?: ReactNode;\n /** @param {string} className - Class name para ser aplicada no container do conteudo */\n className?: string;\n};\n\nexport function ModalEntidade({\n isOpen,\n onOpenChange,\n title = \"Selecionar a entidade\",\n children,\n className,\n}: ModalMudancaEntidadeProps) {\n return (\n <Dialog open={isOpen} onOpenChange={onOpenChange}>\n <DialogContent className=\"cnc-max-h-[100vh] cnc-p-0 cnc-rounded-sm cnc-bg-white cnc-focus:outline-none data-[state=open]:cnc-animate-contentShow\">\n {title && (\n <DialogHeader>\n <DialogTitle className=\"cnc-font-normal cnc-text-base\">\n {title}\n </DialogTitle>\n </DialogHeader>\n )}\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-w-full cnc-max-w-[513px] cnc-mx-auto cnc-py-6\",\n className\n )}\n >\n {children}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\n/**\n * Componente `ModalMudancaEntidade`.\n *\n * @deprecated Este componente foi depreciado. Use `ModalEntidade` em seu lugar.\n * Verifique o Storybook para exemplos de utilização e documentação completa.\n */\nexport const ModalMudancaEntidade = ({\n title,\n onClose,\n visibleModal,\n SelectComponent,\n buttonAction,\n}: ModalMudancaEnntidadeProps) => {\n return (\n <Modal\n title={title}\n onClose={onClose}\n visibleModal={visibleModal}\n content={\n <>\n <DialogTitle className=\"cnc-DialogTitle cnc-mt-10 cnc-mb-4 \">\n Selecionar a entidade\n </DialogTitle>\n <div className=\"cnc-flex cnc-mb-5 \">\n <SelectComponent />\n <Button className=\"cnc-text-white cnc-ml-5\" onClick={buttonAction}>\n Trocar entidade\n </Button>\n </div>\n </>\n }\n ></Modal>\n );\n};\n","import * as Accordion from \"@radix-ui/react-accordion\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport React, {\n cloneElement,\n ComponentProps,\n isValidElement,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n SVGProps,\n} from \"react\";\nimport { LogotipoDefault } from \"../assets/logotipo-default\";\n/**\n * Propriedades para o componente SidebarContainer.\n *\n * @extends HTMLAttributes<HTMLDivElement>\n */\nexport interface SidebarContainerProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Indica se o sidebar está aberto ou fechado.\n * @default true\n */\n isOpen?: boolean;\n}\n\nexport function SidebarContainer({\n isOpen = true,\n ...rest\n}: SidebarContainerProps) {\n return (\n <div\n data-is-open={isOpen}\n style={{ width: isOpen ? '100%' : '0' }} \n className={`cnc-w-full cnc-max-w-full cnc-transition-all cnc-duration-300 cnc-ease-in-out cnc-sidebar-container cnc-bg-brand-blue-400 data-[is-open=true]:w-0`}\n {...rest}\n />\n );\n}\n\nexport interface SidebarImageBrandProps extends PropsWithChildren {\n /** @param {boolean} [props.asChild=false] - Se `true`, e `children` for um elemento React válido, este será usado como logotipo. Se `img` também for fornecido, `img` terá precedência. Se `children` não for um elemento React válido, o comportamento padrão de exibir a imagem de `img` ou `children` como conteúdo será usado. */\n asChild?: boolean;\n /** @param {{ src?: string; alt?: string }} [props.img] - Objeto com as propriedades `src` e `alt` da imagem, usado quando `asChild` é `false` ou quando `asChild` é `true` mas `children` não é um elemento React válido para ser usado como logotipo. */\n img?: {\n src?: string;\n alt?: string;\n };\n /** @param {ReactNode} [props.children] - Conteúdo personalizado ou elemento filho a ser exibido como logotipo quando `asChild` for `true` e `img` não for fornecido. Normalmente usado para o botão de toggle ou um logotipo customizado. */\n children?: ReactNode;\n onChangeToggle?: () => void;\n}\n/**\n * Componente para exibir a imagem da marca (logotipo) na barra lateral.\n *\n * Exibe uma imagem, um elemento filho como logotipo ou conteúdo personalizado na parte superior da barra lateral.\n * Permite a inclusão de um botão de alternância (toggle) para colapsar a barra lateral.\n * A prop `asChild` permite usar um elemento filho como logotipo, caso a prop `img` não seja fornecida.\n */\nexport function SidebarImageBrand({\n asChild = false,\n onChangeToggle,\n img,\n children,\n}: SidebarImageBrandProps) {\n return (\n <div className=\"cnc-flex cnc-items-center cnc-justify-between cnc-bg-primary-900 cnc-w-full cnc-h-full cnc-max-h-[70px] cnc-py-5 cnc-px-6 cnc-transition-all cnc-duration-300 cnc-ease-in-out cnc-sidebar-child-w-0\">\n <span className=\"cnc-sidebar-child-hidden\">\n {asChild && !img ? (\n children\n ) : img && img.src ? (\n <img\n src={img.src}\n alt={img?.alt}\n className=\"cnc-w-[159px] cnc-h-[28px] cnc-object-contain\"\n />\n ) : (\n <LogotipoDefault />\n )}\n </span>\n {onChangeToggle && (\n <button\n onClick={onChangeToggle}\n className=\"hover:cnc-brightness-75 cnc-sidebar-child-hidden\"\n >\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 512 512\"\n className=\"cnc-size-6 cnc-text-white\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeMiterlimit=\"10\"\n strokeWidth=\"48\"\n d=\"M88 152h336M88 256h336M88 360h336\"\n ></path>\n </svg>\n </button>\n )}\n </div>\n );\n}\n\ntype AccordionRootProps = ComponentProps<typeof Accordion.Root>;\n\nexport type SidebarProps = AccordionRootProps & {\n /** @param {ReactNode} props.children - Os elementos filhos a serem renderizados dentro do Sidebar. */\n children?: AccordionRootProps[\"children\"];\n /** @param {'single' | 'multiple'} [props.type='single'] - Determina se um ou vários itens podem ser abertos simultaneamente. */\n type: AccordionRootProps[\"type\"];\n};\n/**\n * Componente Sidebar, responsável por renderizar a estrutura principal do menu lateral\n * e gerenciar o comportamento de acordeão dos itens de navegação.\n *\n * Este componente utiliza o Radix UI Accordion para controlar a expansão e o colapso\n * dos itens do menu. O tipo de acordeão (único ou múltiplo) é determinado pela propriedade `type`.\n *\n * Estende as tipagens do componente `Accordion.Root` do Radix UI.\n */\nexport function Sidebar({ children, ...rest }: SidebarProps) {\n return (\n <Accordion.Root {...rest}>\n <div\n className=\"cnc-w-full cnc-h-screen-minus-70 cnc-flex cnc-flex-col cnc-py-8 cnc-bg-primary-800 cnc-px-5 \n cnc-scroll-smooth cnc-overflow-y-auto\n [&::-webkit-scrollbar]:cnc-w-1\n [&::-webkit-scrollbar-track]:cnc-bg-brand-blue-500\n [&::-webkit-scrollbar-thumb]:cnc-rounded\n [&::-webkit-scrollbar-thumb]:cnc-border\n [&::-webkit-scrollbar-thumb]:cnc-border-solid\n [&::-webkit-scrollbar-thumb]:cnc-border-brand-gray-400\n [&::-webkit-scrollbar-thumb]:cnc-bg-brand-gray-200\n cnc-sidebar-child-w-0\"\n >\n {children}\n </div>\n </Accordion.Root>\n );\n}\n/**\n * Componente de link de navegação para o Sidebar.\n *\n * Renderiza um link com ícone e título, permitindo navegação dentro do Sidebar.\n * Recomenda-se que o ícone fornecido tenha 20px de altura e largura para\n * consistência visual.\n *\n * @param {SidebarNavLinkProps} props - As propriedades do componente.\n * @param {ReactNode} props.children - O título do link e o icone que pode ser fornecido como componente ou svg (🚨recomendado 20px x 20px).\n * @param {string} props.href O caminho para redirecionamento.\n */\nexport interface SidebarNavLinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n asChild?: boolean;\n /**\n * Determina se é principal ou filho de um collapse nav, 'primary' link solto e 'secondary' é utilizado no collapse.\n * @default 'primary'\n */\n type?: \"primary\" | \"secondary\";\n}\n\nexport function SidebarNavLink({\n asChild = false,\n type = \"primary\",\n ...rest\n}: SidebarNavLinkProps) {\n const Component = asChild ? Slot : \"a\";\n\n return (\n <Component\n data-type={type}\n className=\"cnc-sidebar-item cnc-w-full cnc-py-4 cnc-text-white cnc-flex cnc-gap-2 cnc-items-center cnc-text-base hover:cnc-text-blue-600 data-[type=secondary]:cnc-pl-0 data-[type=secondary]:cnc-text-sm data-[type=secondary]:cnc-py-0 data-[type=secondary]:cnc-my-2 cnc-sidebar-child-hidden\"\n {...rest}\n />\n );\n}\n\ninterface IconProps extends SVGProps<SVGSVGElement> {}\n\nexport interface SidebarNavCollapseProps extends Accordion.AccordionItemProps {\n title: string;\n icon?: ReactElement<IconProps> | ReactNode;\n}\n\nexport function SidebarNavCollapse({\n children,\n title,\n icon,\n ...rest\n}: SidebarNavCollapseProps) {\n return (\n <Accordion.Item {...rest} className=\"cnc-sidebar-item\">\n <Accordion.Trigger className=\"group cnc-w-full cnc-py-4 cnc-text-base cnc-text-white cnc-flex cnc-gap-2 cnc-items-center cnc-justify-between hover:cnc-text-blue-600 cnc-sidebar-child-hidden\">\n <div className=\"cnc-flex cnc-items-center cnc-gap-2\">\n {icon && renderIconItem(icon)}\n {title}\n </div>\n <div className=\"cnc-w-4 cnc-h-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"cnc-w-full cnc-h-full cnc-text-violet10 cnc-transition-transform cnc-duration-300 cnc-ease-[cubic-bezier(0.87,_0,_0.13,_1)] group-data-[state=open]:cnc-rotate-90\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </div>\n </Accordion.Trigger>\n <Accordion.Content className=\"cnc-overflow-hidden data-[state=closed]:cnc-animate-slideUp data-[state=open]:cnc-animate-slideDown cnc-py-2\">\n <div className=\"cnc-bg-white/10 cnc-rounded-md cnc-font-normal cnc-px-5 cnc-py-3\">\n {children}\n </div>\n </Accordion.Content>\n </Accordion.Item>\n );\n}\nfunction renderIconItem(icon: SidebarNavCollapseProps[\"icon\"]) {\n if (!icon) return null;\n\n if (isValidElement(icon) && icon.type === \"svg\") {\n const svgIcon = icon as ReactElement<SVGProps<SVGSVGElement>>;\n\n return cloneElement(svgIcon, {\n height: 20,\n width: 20,\n });\n }\n\n if (isValidElement(icon)) {\n return <span className=\"cnc-w-5 cnc-h-5 cnc-overflow-hidden\">{icon}</span>;\n }\n\n return <span className=\"cnc-w-5 cnc-h-5 cnc-overflow-hidden\">{icon}</span>;\n}\n","export function LogotipoDefault() {\n return (\n <svg\n width=\"209\"\n height=\"20\"\n viewBox=\"0 0 209 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20.539 0H36.2809C36.2809 0 36.9745 4.48363 30.7294 6.63394C31.7327 5.31688 31.7006 3.41772 31.7006 3.41772H20.202C9.32 3.41772 1.29805 18.1019 0.207031 20.0001C0.207031 20.0001 4.07335 8.64018 11.9375 3.02348C13.5682 1.85731 17.0906 0 20.539 0Z\"\n fill=\"#C89633\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22.519 7.7601C22.4995 8.13682 22.4176 9.21051 21.9053 10.1606L21.8984 10.1616V10.1674C27.035 9.71961 29.5142 8.17673 30.687 6.64844C28.7232 7.32011 26.0843 7.7601 22.519 7.7601Z\"\n fill=\"#C89633\"\n />\n <path\n d=\"M15.6289 10.2526C17.6892 10.2994 18.8026 10.313 18.8026 10.313C19.9394 10.3344 20.9691 10.2497 21.9198 10.1621C21.1415 11.8189 19.2049 13.5127 13.9602 13.4134C7.19489 13.2859 3.46398 16.9946 1.55469 18.9863L1.56405 18.9719C3.47675 16.0444 7.38469 10.0631 15.6289 10.2526Z\"\n fill=\"white\"\n />\n <path\n d=\"M60.457 3.08307V4.09961H61.9417H63.4264V3.08307V2.06652H61.9417H60.457V3.08307Z\"\n fill=\"white\"\n />\n <path\n d=\"M53.2447 2.39671C51.2817 2.622 49.907 3.55062 49.4231 4.97928C49.2636 5.43535 49.2746 6.85851 49.4396 7.2926C49.885 8.49596 50.8803 9.12237 53.3052 9.7268C55.1198 10.1829 55.4222 10.2873 55.8456 10.6005C56.0601 10.7598 56.1866 11.117 56.1536 11.4906C56.0986 12.1665 55.5432 12.5017 54.372 12.5456C53.1732 12.6006 52.222 12.2929 50.9682 11.4467L50.4789 11.117L50.017 11.606C49.2581 12.4083 48.7248 13.0017 48.7467 13.0237C49.797 13.8699 51.0562 14.4853 52.2605 14.7436C53.1348 14.9304 54.6139 14.9799 55.4662 14.8425C57.3633 14.5513 58.617 13.5787 59.0019 12.1225C59.1174 11.6994 59.1284 10.6994 59.0294 10.2873C58.793 9.3092 57.9682 8.51794 56.621 7.97945C56.3405 7.86955 55.4552 7.6058 54.6524 7.397C52.8048 6.91345 52.4584 6.74861 52.2824 6.25957C51.9635 5.36391 52.6619 4.7375 53.9651 4.74849C54.4655 4.75399 54.7679 4.81443 56.0161 5.18258C56.1041 5.21006 56.1096 5.12764 56.1096 3.94625C56.1096 2.78684 56.1041 2.67694 56.0161 2.64947C55.9611 2.63299 55.6367 2.57254 55.2903 2.5066C54.5314 2.37473 53.8001 2.33626 53.2447 2.39671Z\"\n fill=\"white\"\n />\n <path\n d=\"M74.6953 7.57213C74.6953 11.2592 74.7173 11.7647 74.8933 12.3142C75.1297 13.056 75.872 13.8912 76.5924 14.2374C77.4667 14.655 78.198 14.8088 79.5507 14.8528L80.469 14.8857V13.8692V12.8582L79.8806 12.7867C78.8579 12.6713 78.1045 12.3252 77.8846 11.8746C77.6976 11.4844 77.6646 11.1108 77.6646 9.23157V7.3963H79.0668H80.469V6.4347V5.47311L79.0833 5.46212L77.6921 5.44563L77.6756 4.65987L77.6591 3.87961H76.18H74.6953V7.57213Z\"\n fill=\"white\"\n />\n <path\n d=\"M68.4882 5.25987C67.9383 5.3258 66.9375 5.6445 66.5031 5.89726C65.5024 6.47972 64.9305 7.50725 65.046 8.52379C65.0899 8.95239 65.2274 9.2546 65.5134 9.56231C65.9203 10.0019 66.6406 10.3151 67.8503 10.5789C68.1528 10.6448 68.6256 10.7492 68.9006 10.8096C69.5164 10.9415 70.1268 11.2272 70.2918 11.4525C70.5392 11.7987 70.3907 12.3042 69.9728 12.5515C69.7309 12.6944 69.6869 12.6999 69.0051 12.6999C68.0098 12.6944 66.6351 12.3812 65.8323 11.98C65.6288 11.8756 65.4474 11.7932 65.4309 11.7932C65.4144 11.7932 65.4034 12.3097 65.4034 12.9416V14.0955L65.6948 14.1999C66.8056 14.6121 67.6744 14.8044 68.7081 14.8538C70.1103 14.9253 71.353 14.5901 72.2658 13.9087C72.9037 13.4307 73.2831 12.8702 73.4646 12.1449C73.5855 11.6613 73.514 11.0734 73.2666 10.5624C72.8762 9.73815 71.7544 9.13372 69.8519 8.7216C69.0875 8.55676 68.4882 8.34796 68.3067 8.18311C68.1528 8.04574 68.1747 7.71605 68.3507 7.50725C68.6201 7.18855 68.7576 7.15008 69.5989 7.15008H70.3523V6.21047V5.27085L70.0168 5.23239C69.5879 5.18843 69.0106 5.19942 68.4882 5.25987Z\"\n fill=\"white\"\n />\n <path\n d=\"M97.0316 5.25947C96.8116 5.28695 96.3607 5.39684 96.0253 5.50674C94.8156 5.90786 93.9523 6.67714 93.5069 7.74863C93.166 8.57285 93.1605 8.6278 93.133 11.8038L93.1055 14.7051H94.6231H96.1408V12.0511C96.1408 10.4905 96.1628 9.25971 96.1958 9.0509C96.3002 8.44098 96.6467 7.90798 97.1086 7.6717C97.345 7.55082 97.4495 7.53433 97.9554 7.53433C98.4942 7.53433 98.5547 7.54532 98.8242 7.69368C99.2861 7.95194 99.5995 8.419 99.7095 9.01793C99.748 9.22124 99.77 10.3202 99.77 12.0236V14.7051H101.282H102.794V11.9412C102.794 10.2817 102.822 9.08937 102.855 8.94101C103.064 8.02337 103.685 7.50686 104.581 7.50686C105.571 7.50686 106.215 8.11129 106.363 9.17179C106.401 9.43005 106.423 10.6169 106.423 12.1555V14.7051H107.914H109.398L109.382 11.7489C109.36 8.92452 109.354 8.78166 109.239 8.36955C108.854 6.99034 107.897 5.9738 106.572 5.52872C105.786 5.27046 105.527 5.232 104.526 5.2375C103.702 5.2375 103.526 5.25947 103.047 5.38586C102.448 5.53971 101.942 5.7595 101.563 6.01776C101.425 6.11117 101.299 6.1881 101.271 6.1881C101.249 6.1881 101.057 6.07271 100.848 5.94083C99.9459 5.35289 98.4723 5.09463 97.0316 5.25947Z\"\n fill=\"white\"\n />\n <path\n d=\"M86.1337 5.30344C84.3081 5.57818 82.9884 6.49581 82.2296 8.02338C81.8887 8.71572 81.7732 9.35862 81.8062 10.3367C81.8447 11.2488 81.9327 11.65 82.2351 12.2489C82.785 13.3369 83.3898 13.9138 84.5171 14.4194C85.1274 14.6941 85.6938 14.815 86.4966 14.8534C87.085 14.8809 88.1462 14.8095 88.5532 14.7106C88.6576 14.6831 88.8116 14.6446 88.8996 14.6282L89.048 14.5952V13.5786C89.048 13.0182 89.0425 12.5621 89.037 12.5621C89.026 12.5621 88.8336 12.617 88.6081 12.6775C88.0253 12.8368 86.898 12.8808 86.3866 12.7599C85.6333 12.5841 85.0449 12.117 84.726 11.4412C84.616 11.2159 84.5446 11.0016 84.5666 10.9686C84.5885 10.9301 85.7433 10.9137 88.1682 10.9137H91.7369L91.7754 10.6609C91.8304 10.2872 91.7534 9.46851 91.605 8.80914C91.286 7.38598 90.3567 6.22657 89.1195 5.69357C88.3552 5.36938 86.9475 5.18255 86.1337 5.30344ZM87.5909 7.52884C87.7448 7.56731 87.9648 7.64973 88.0858 7.71567C88.5257 7.93546 89.0041 8.60033 89.081 9.09487L89.1195 9.32016H86.8265C84.9845 9.32016 84.5391 9.30367 84.5391 9.24872C84.5391 9.06739 84.99 8.26515 85.2099 8.05634C85.4738 7.80358 85.8588 7.58379 86.1722 7.51236C86.4911 7.43543 87.2829 7.44642 87.5909 7.52884Z\"\n fill=\"white\"\n />\n <path\n d=\"M114.892 5.30939C114.634 5.33686 114.315 5.38082 114.178 5.4028L113.93 5.45225L113.914 6.58419L113.903 7.71612L114.134 7.65568C114.266 7.62821 114.815 7.60073 115.36 7.59524C116.179 7.58974 116.405 7.60623 116.652 7.68865C117.125 7.8425 117.46 8.12274 117.631 8.4854C117.779 8.80959 117.862 9.37556 117.768 9.37556C117.735 9.37556 117.515 9.32611 117.279 9.27116C116.223 9.00741 114.639 8.98543 113.573 9.20522C111.956 9.5459 110.988 10.6009 110.988 12.0296C110.988 13.2879 111.879 14.3319 113.27 14.711C113.864 14.8759 115.316 14.8924 115.91 14.744C116.41 14.6176 117.152 14.244 117.477 13.9473C117.625 13.8209 117.757 13.7165 117.774 13.7165C117.79 13.7165 117.807 13.9363 117.807 14.211V14.7055H119.242H120.672L120.65 11.5295C120.628 7.97438 120.628 7.99636 120.226 7.24357C119.517 5.9303 118.318 5.34236 116.212 5.28741C115.745 5.27093 115.151 5.28191 114.892 5.30939ZM117.235 10.7712C117.851 10.9251 117.862 10.9306 117.862 11.3537C117.862 12.2329 117.251 12.7933 116.069 12.9912C115.64 13.0681 115.497 13.0681 115.156 13.0131C114.628 12.9252 114.211 12.7164 114.04 12.4637C113.864 12.1999 113.848 11.6394 114.007 11.3757C114.205 11.0515 114.656 10.7822 115.167 10.6888C115.525 10.6229 116.844 10.6778 117.235 10.7712Z\"\n fill=\"white\"\n />\n <path\n d=\"M60.457 10.1169V14.7051H61.9417H63.4264V10.1169V5.52872H61.9417H60.457V10.1169Z\"\n fill=\"white\"\n />\n <path\n d=\"M173.197 1.72126C172.114 3.40817 171.586 4.24338 171.586 4.28185C171.586 4.30383 172.02 4.32031 172.554 4.32031H173.527L173.752 4.117C174.324 3.61148 175.71 2.27074 175.71 2.22678C175.71 2.19931 175.655 2.14986 175.589 2.12238C175.518 2.09491 175.034 1.8861 174.511 1.65532C173.994 1.43003 173.554 1.24321 173.538 1.24321C173.521 1.24321 173.368 1.45751 173.197 1.72126Z\"\n fill=\"white\"\n />\n <path\n d=\"M194.074 2.97369V3.99023H195.559H197.044L197.033 2.98468L197.016 1.98462L195.548 1.96814L194.074 1.95715V2.97369Z\"\n fill=\"white\"\n />\n <path\n d=\"M135.845 2.43604C133.887 2.63386 132.37 3.21082 131.144 4.22736C130.346 4.88674 129.653 5.94724 129.4 6.89784C129.241 7.51326 129.197 8.99687 129.323 9.76614C129.664 11.8322 131.138 13.4861 133.398 14.3488C134.173 14.6455 135.872 14.9258 136.873 14.9258H137.275V13.7554V12.5905L136.543 12.585C135.702 12.574 135.257 12.4751 134.525 12.1344C132.997 11.4201 132.144 9.99692 132.238 8.30452C132.287 7.30446 132.59 6.63409 133.283 5.94174C134.091 5.14499 135.059 4.77684 136.494 4.72189L137.275 4.68892V3.546V2.39758L136.659 2.40857C136.318 2.40857 135.949 2.42506 135.845 2.43604Z\"\n fill=\"white\"\n />\n <path\n d=\"M142.609 5.13944C140.503 5.44715 138.831 6.8813 138.342 8.80449C137.797 10.964 138.847 13.1839 140.915 14.2224C141.652 14.5905 142.141 14.7114 143.104 14.7444C143.774 14.7664 143.983 14.7554 144.407 14.6565C145.424 14.4312 146.227 13.9971 146.953 13.2773C148.173 12.0519 148.635 10.4255 148.223 8.79899C148.08 8.24951 147.689 7.46375 147.349 7.04065C146.441 5.91421 144.973 5.1834 143.488 5.12296C143.17 5.10647 142.774 5.11746 142.609 5.13944ZM144.297 7.44727C144.682 7.61761 145.089 8.0517 145.237 8.45282C145.578 9.36496 145.545 10.8156 145.166 11.6014C144.83 12.2992 144.253 12.6179 143.312 12.6179C142.565 12.6179 142.174 12.497 141.778 12.1398C141.311 11.7167 141.107 11.0464 141.107 9.95291C141.107 8.48579 141.514 7.68904 142.411 7.39781C142.889 7.23846 143.884 7.26594 144.297 7.44727Z\"\n fill=\"white\"\n />\n <path\n d=\"M154.046 5.12263C153.667 5.16659 152.831 5.37539 152.501 5.50177C152.044 5.6831 151.302 6.18862 150.994 6.5293C150.675 6.88097 150.345 7.43595 150.197 7.85905C149.944 8.60635 149.922 8.89208 149.922 11.8263V14.5957H151.434H152.941L152.957 11.6944L152.974 8.79866L153.106 8.46897C153.386 7.78212 153.963 7.39748 154.733 7.39748C155.267 7.39748 155.597 7.52387 155.932 7.85355C156.52 8.42502 156.575 8.79317 156.575 12.1011V14.5957H158.088H159.594L159.611 11.667C159.633 8.35358 159.616 8.45799 160.078 7.94697C160.474 7.50738 160.672 7.42496 161.359 7.42496C161.849 7.42496 161.97 7.44694 162.157 7.54584C162.448 7.70519 162.767 8.0184 162.893 8.26567C163.168 8.80416 163.174 8.88658 163.174 11.8318V14.5957H164.692H166.204L166.187 11.6944L166.165 8.79866L165.995 8.2327C165.725 7.35902 165.439 6.86449 164.922 6.36995C164.345 5.83146 163.79 5.52924 162.943 5.30945C161.348 4.89184 159.512 5.13362 158.357 5.91388C158.219 6.0018 158.088 6.07873 158.06 6.07873C158.038 6.07873 157.835 5.96883 157.615 5.83146C157.23 5.59518 156.729 5.40286 156.042 5.22703C155.712 5.14461 154.425 5.07867 154.046 5.12263Z\"\n fill=\"white\"\n />\n <path\n d=\"M182.994 5.1446C181.399 5.38638 180.184 6.17763 179.579 7.36451C179.177 8.14478 179.172 8.20522 179.172 11.5845V14.5957H180.684H182.196V11.6395C182.202 8.969 182.207 8.66129 182.295 8.40853C182.526 7.74915 183.12 7.3755 184.192 7.23264C184.44 7.19967 184.726 7.15571 184.825 7.14472L185.001 7.11725L184.99 6.11719L184.973 5.11713L184.121 5.11164C183.653 5.10614 183.147 5.12263 182.994 5.1446Z\"\n fill=\"white\"\n />\n <path\n d=\"M190.311 5.1395C189.706 5.2384 188.705 5.54062 188.21 5.7769C187.248 6.23297 186.61 6.81542 186.126 7.6836C185.73 8.38694 185.609 8.93642 185.609 9.98044C185.615 11.3267 185.928 12.1729 186.737 13.0465C187.479 13.8433 188.425 14.3323 189.788 14.6236C190.514 14.7829 191.62 14.8379 192.169 14.7445L192.428 14.7005V13.7004V12.7004L191.993 12.7169C190.844 12.7718 189.832 12.3927 189.107 11.6289C188.617 11.1179 188.425 10.5299 188.485 9.71669C188.54 8.88147 188.881 8.33748 189.678 7.7935C190.305 7.3649 191.136 7.12313 191.988 7.12313H192.428V6.16703C192.428 5.4582 192.411 5.19444 192.362 5.16148C192.263 5.10653 190.646 5.09004 190.311 5.1395Z\"\n fill=\"white\"\n />\n <path\n d=\"M203.01 5.14533C201.784 5.32666 200.524 5.99703 199.776 6.86521C198.93 7.85428 198.473 9.26095 198.627 10.4259C198.842 12.0908 199.82 13.459 201.344 14.2228C202.168 14.6349 202.614 14.7338 203.725 14.7283C204.808 14.7283 205.22 14.6404 205.996 14.2667C208.487 13.0414 209.487 10.25 208.289 7.85977C207.491 6.27177 205.781 5.20028 203.917 5.12335C203.598 5.10686 203.191 5.11785 203.01 5.14533ZM204.72 7.44766C204.874 7.5136 205.116 7.68394 205.253 7.8268C205.666 8.24441 205.831 8.74993 205.88 9.73351C205.93 10.8105 205.71 11.6512 205.259 12.0908C204.901 12.437 204.533 12.5743 203.901 12.6073C202.592 12.6677 201.932 12.2282 201.624 11.0633C201.492 10.5742 201.498 9.24996 201.63 8.79939C201.861 8.03561 202.24 7.59602 202.839 7.39821C203.312 7.24435 204.313 7.26633 204.72 7.44766Z\"\n fill=\"white\"\n />\n <path\n d=\"M171.532 5.33081C170.025 5.68797 168.931 6.54517 168.26 7.8914C167.93 8.55627 167.793 9.1662 167.793 10.0344C167.793 11.9081 168.651 13.3752 170.212 14.1775C170.768 14.4632 171.059 14.5621 171.725 14.683C172.533 14.8314 174.199 14.7434 174.958 14.5072C175.04 14.4797 175.051 14.3808 175.051 13.4741V12.4686L174.49 12.6005C173.809 12.7543 172.83 12.7708 172.34 12.6444C171.637 12.4631 171.103 12.0565 170.806 11.4795C170.696 11.2762 170.592 11.0509 170.57 10.9795L170.537 10.8586H174.133H177.735L177.768 10.6883C177.916 9.95196 177.619 8.36395 177.179 7.52324C176.684 6.56165 175.711 5.74292 174.721 5.4462C173.77 5.16597 172.434 5.11651 171.532 5.33081ZM173.523 7.40236C173.93 7.49028 174.199 7.63864 174.512 7.95184C174.804 8.24307 175.046 8.69914 175.09 9.05081L175.123 9.2651L172.846 9.25411L170.57 9.23763L170.586 9.10026C170.592 9.02333 170.685 8.78705 170.79 8.56726C170.988 8.16614 171.373 7.75952 171.719 7.57819C172.148 7.35291 172.934 7.27598 173.523 7.40236Z\"\n fill=\"white\"\n />\n <path\n d=\"M194.074 10.0075V14.5957H195.559H197.044V10.0075V5.41934H195.559H194.074V10.0075Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n","\"use client\";\n\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"cnc-z-50 cnc-w-72 cnc-rounded-md cnc-border cnc-bg-popover cnc-p-4 cnc-text-popover-foreground cnc-shadow-md cnc-outline-none data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverContent, PopoverTrigger };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"../utils\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectPortal = SelectPrimitive.Portal;\n\nconst SelectViewport = SelectPrimitive.Viewport;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"cnc-flex cnc-h-10 cnc-w-full cnc-items-center cnc-justify-between cnc-rounded-md cnc-border cnc-border-input cnc-bg-background cnc-px-3 cnc-py-2 cnc-text-sm cnc-text-brand-gray-200 cnc-font-medium hover:cnc-text-accent-foreground hover:cnc-bg-brand-blue-50 placeholder:cnc-text-muted-foreground focus:cnc-outline-none focus:cnc-ring-ring focus:cnc-ring-offset-2 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50 [&>span]:cnc-line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"cnc-flex cnc-cursor-default cnc-items-center cnc-justify-center cnc-py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"cnc-h-4 cnc-w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"cnc-flex cnc-cursor-default cnc-items-center cnc-justify-center cnc-py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"cnc-h-4 cnc-w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"cnc-relative cnc-z-50 cnc-max-h-96 cnc-min-w-[8rem] cnc-overflow-hidden cnc-rounded-md cnc-border cnc-bg-popover cnc-text-popover-foreground cnc-shadow-md data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"cnc-p-1\",\n position === \"popper\" &&\n \"cnc-h-[var(--radix-select-trigger-height)] cnc-w-full cnc-min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"cnc-py-1.5 cnc-pl-8 cnc-pr-2 cnc-text-sm cnc-font-semibold\",\n className\n )}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-w-full cnc-cursor-default cnc-select-none cnc-items-center cnc-rounded-sm cnc-py-1.5 cnc-pl-8 cnc-pr-2 cnc-text-sm cnc-outline-none focus:cnc-text-accent-foreground data-[disabled]:cnc-pointer-events-none data-[disabled]:cnc-opacity-50 hover:cnc-bg-slate-50\",\n className\n )}\n {...props}\n >\n <span className=\"cnc-absolute cnc-left-2 cnc-flex cnc-h-3.5 cnc-w-3.5 cnc-cnc-items-center cnc-justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"cnc-h-4 cnc-w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-cnc-mx-1 cnc-my-1 cnc-h-px cnc-bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectViewport,\n SelectValue,\n SelectPortal,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => {\n return (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\"cnc-flex cnc-gap-[2px] cnc-border-b \", className)}\n {...props}\n />\n );\n});\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"cnc-data-[state=active]:bg-muted cnc-data-[state=active]:text-primary cnc-relative cnc-text-sm cnc-font-normal cnc-px-4 cnc-py-2 cnc-bg-[#00000005] data-[state=active]:cnc-bg-white data-[state=active]:cnc-text-[#04319bfd] data-[state=active]:cnc-font-bold cnc-border-l cnc-border-r cnc-border-t cnc-rounded-tl-sm cnc-rounded-tr-sm \",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n return (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"cnc-space-y-4 cnc-border-l cnc-border-r cnc-border-b cnc-p-5 cnc-h-full\",\n className\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Content>\n );\n});\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","\"use client\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface InputProps extends React.ComponentProps<\"input\"> {\n label?: string;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, id, label, required, ...props }, ref) => {\n const idGenerate = id\n ? id\n : label && `field-${Date.now()}-${Math.random() * 100000}`;\n\n return (\n <div className=\"cnc-w-full\">\n {label && (\n <label\n htmlFor={idGenerate}\n className=\"cnc-block cnc-text-sm cnc-mb-1 cnc-font-medium cnc-text-brand-gray-600\"\n >\n {label}\n {required && <span className=\"text-red-500\"> *</span>}\n </label>\n )}\n <input\n type={type}\n id={idGenerate}\n className={cn(\n \"cnc-flex cnc-h-10 cnc-w-full cnc-rounded-md cnc-border cnc-border-input cnc-bg-transparent cnc-px-3 cnc-py-1 cnc-text-base cnc-shadow-sm cnc-transition-colors\",\n \" file:cnc-border-0 file:cnc-bg-transparent file:cnc-text-sm file:cnc-font-medium file:cnc-text-foreground placeholder:cnc-text-muted-foreground focus-visible:cnc-outline-none\",\n \"focus-visible:cnc-ring-2 focus-visible:cnc-ring-brand-gray-500/50 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50 md:cnc-text-sm \",\n \"not-disabled:hover:cnc-border-brand-gray-500\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, id, label, required, ...props }, ref) => {\n const idGenerate = id\n ? id\n : label && `field-${Date.now()}-${Math.random() * 100000}`;\n\n return (\n <div className=\"cnc-w-full\">\n {label && (\n <label\n htmlFor={idGenerate}\n className=\"cnc-block cnc-text-sm cnc-mb-1 cnc-font-medium cnc-text-brand-gray-600\"\n >\n {label}\n {required && <span className=\"text-red-500\"> *</span>}\n </label>\n )}\n <textarea\n id={idGenerate}\n className={cn(\n \"cnc-flex cnc-min-h-[96px] cnc-w-full cnc-rounded-md cnc-border cnc-border-input cnc-bg-transparent cnc-px-3 cnc-py-2 cnc-text-base cnc-shadow-sm cnc-transition-colors\",\n \"placeholder:cnc-text-muted-foreground focus-visible:cnc-outline-none\",\n \"focus-visible:cnc-ring-2 focus-visible:cnc-ring-brand-gray-500/50 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50 md:cnc-text-sm\",\n \"not-disabled:hover:cnc-border-brand-gray-500\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };","\"use client\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface CheckboxProps extends React.ComponentProps<\"input\"> {\n label?: string;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, id, label, ...props }, ref) => {\n console.log();\n\n const idGenerate = id\n ? id\n : label && `field-${Date.now()}-${Math.random() * 100000}`;\n\n return (\n <div className=\"cnc-w-full cnc-flex cnc-flex-row\">\n <input\n type=\"checkbox\"\n id={idGenerate}\n className={cn(\"cnc-w-6 cnc-h-6\", className)}\n ref={ref}\n {...props}\n />\n {label && (\n <label\n htmlFor={idGenerate}\n className=\"cnc-block cnc-text-sm cnc-font-medium cnc-text-brand-gray-600 cnc-ml-2\"\n >\n {label}\n </label>\n )}\n </div>\n );\n }\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n","\"use client\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface SwitchProps {\n label?: string;\n id?: string;\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n onBlur?: () => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n className?: string;\n \"aria-label\"?: string;\n}\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n className,\n id,\n label,\n required,\n checked,\n defaultChecked,\n onChange,\n onBlur,\n disabled,\n name,\n \"aria-label\": ariaLabel,\n },\n ref\n ) => {\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n );\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? checked : internalChecked;\n\n const reactId = React.useId();\n const fieldId = id || reactId;\n\n const handleToggle = () => {\n if (disabled) return;\n const newValue = !isChecked;\n if (!isControlled) {\n setInternalChecked(newValue);\n }\n onChange?.(newValue);\n };\n\n return (\n <div className={cn(\"cnc-flex cnc-items-center cnc-gap-2\", className)}>\n <input\n type=\"checkbox\"\n name={name}\n checked={isChecked}\n readOnly\n className=\"cnc-sr-only\"\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n <button\n ref={ref}\n id={fieldId}\n type=\"button\"\n role=\"switch\"\n aria-checked={isChecked}\n aria-label={!label ? ariaLabel : undefined}\n onClick={handleToggle}\n onBlur={onBlur}\n disabled={disabled}\n className={cn(\n \"cnc-relative cnc-inline-flex cnc-h-6 cnc-w-11 cnc-shrink-0 cnc-cursor-pointer cnc-rounded-full cnc-border cnc-transition-colors\",\n \"focus-visible:cnc-outline-none focus-visible:cnc-ring-2 focus-visible:cnc-ring-brand-gray-500/50\",\n \"disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\",\n isChecked\n ? \"cnc-bg-brand-blue-400 cnc-border-brand-blue-500\"\n : \"cnc-bg-brand-gray-20 cnc-border-brand-gray-100\"\n )}\n >\n <span\n className={cn(\n \"cnc-pointer-events-none cnc-block cnc-h-5 cnc-w-5 cnc-rounded-full cnc-bg-white cnc-shadow-sm cnc-transition-transform\",\n isChecked ? \"cnc-translate-x-5\" : \"cnc-translate-x-0\"\n )}\n />\n </button>\n {label && (\n <label\n htmlFor={fieldId}\n className=\"cnc-text-sm cnc-font-medium cnc-text-brand-gray-600 cnc-cursor-pointer\"\n >\n {label}\n {required && <span className=\"cnc-text-red-500\"> *</span>}\n </label>\n )}\n </div>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n","import React from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type BadgeVariant =\n | \"default\"\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\n\ninterface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * Variação de cor do badge.\n */\n variant?: BadgeVariant;\n /**\n * Define se o badge deve ter bordas arredondadas.\n */\n rounded?: boolean;\n /**\n * Define o tamanho do badge.\n */\n size?: BadgeSize;\n}\n\n/**\n * Badge é um componente para exibir pequenas contagens, status ou rótulos informativos.\n */\nexport const Badge = ({\n variant = \"default\",\n rounded = true,\n size = \"md\",\n className,\n ...rest\n}: BadgeProps) => {\n const baseStyle =\n \"cnc-inline-flex cnc-items-center cnc-font-semibold cnc-transition-colors\";\n\n const variants: Record<BadgeVariant, string> = {\n default: \"cnc-bg-brand-gray-20 cnc-text-brand-gray-600\",\n primary: \"cnc-bg-brand-blue-100 cnc-text-white\",\n success: \"cnc-bg-brand-green-200 cnc-text-white\",\n warning: \"cnc-bg-brand-gold-400 cnc-text-white\",\n danger: \"cnc-bg-brand-red-500 cnc-text-white\",\n info: \"cnc-bg-brand-blue-60 cnc-text-brand-blue-900\",\n };\n\n const sizes: Record<BadgeSize, string> = {\n sm: \"cnc-text-xs cnc-px-2 cnc-py-0.5\",\n md: \"cnc-text-sm cnc-px-3 cnc-py-1\",\n lg: \"cnc-text-base cnc-px-4 cnc-py-2\",\n };\n\n return (\n <span\n className={cn(\n baseStyle,\n variants[variant],\n sizes[size],\n rounded ? \"cnc-rounded-full\" : \"\",\n className\n )}\n {...rest}\n />\n );\n};\n","\"use client\";\n\nimport { User } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** URL da imagem do usuário. Se ausente ou falhar, exibe o fallback. */\n src?: string | null;\n /** Texto alternativo da imagem. */\n alt?: string;\n /** Conteúdo de fallback quando não há imagem (ex.: iniciais do nome). */\n fallback?: React.ReactNode;\n /** Tamanho do avatar. Padrão: \"md\". */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Indica carregamento (esqueleto pulsante). */\n isLoading?: boolean;\n}\n\nconst avatarSizeClasses: Record<NonNullable<AvatarProps[\"size\"]>, string> = {\n sm: \"cnc-size-8 cnc-text-[10px]\",\n md: \"cnc-size-12 cnc-text-xs\",\n lg: \"cnc-size-16 cnc-text-sm\",\n xl: \"cnc-size-24 cnc-text-xl\",\n};\n\nconst avatarSizeIcon: Record<NonNullable<AvatarProps[\"size\"]>, number> = {\n sm: 16,\n md: 20,\n lg: 28,\n xl: 40,\n};\n\nexport function Avatar({\n src,\n alt,\n fallback,\n size = \"md\",\n isLoading = false,\n className,\n ...props\n}: AvatarProps) {\n const [hasError, setHasError] = React.useState(false);\n\n const baseClasses = cn(\n \"cnc-flex cnc-shrink-0 cnc-items-center cnc-justify-center cnc-overflow-hidden cnc-rounded-full cnc-border-2 cnc-border-brand-gray-50 cnc-bg-brand-gray-10 cnc-text-brand-gray-200\",\n avatarSizeClasses[size],\n className\n );\n\n if (isLoading) {\n return (\n <span\n className={cn(baseClasses, \"cnc-animate-pulse cnc-bg-brand-gray-50\")}\n role=\"status\"\n aria-label=\"Carregando avatar\"\n {...props}\n />\n );\n }\n\n const showImage = src && !hasError;\n\n return (\n <span className={baseClasses} {...props}>\n {showImage ? (\n <img\n src={src!}\n alt={alt ?? \"Avatar\"}\n className=\"cnc-h-full cnc-w-full cnc-object-cover\"\n onError={() => setHasError(true)}\n />\n ) : fallback ? (\n <span className=\"cnc-font-bold\">{fallback}</span>\n ) : (\n <User\n className=\"cnc-shrink-0\"\n size={avatarSizeIcon[size]}\n aria-hidden=\"true\"\n />\n )}\n </span>\n );\n}","import { cn } from \"../utils\";\nimport React from \"react\";\n\n/**\n * Componente principal do Card.\n * Utilizado para agrupar visualmente conteúdos relacionados.\n */\nexport function Card({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"cnc-w-full cnc-flex cnc-flex-col cnc-border-2 cnc-border-brand-gray-50 cnc-rounded-md cnc-shadow\",\n className\n )}\n {...rest}\n />\n );\n}\n\n/**\n * Cabeçalho do Card, geralmente utilizado para título ou ações superiores.\n */\nexport function CardHeader({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div className=\"cnc-px-6 cnc-pt-6\">\n <div\n className={cn(\n \"cnc-flex cnc-items-center cnc-justify-between cnc-w-full cnc-border-b-2 cnc-border-brand-gray-50 cnc-pb-4\",\n className\n )}\n {...rest}\n />\n </div>\n );\n}\n\n/**\n * Conteúdo principal do Card. Ideal para exibir informações ou formulários.\n */\nexport function CardContent({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"cnc-px-6 cnc-py-2\", className)} {...rest} />;\n}\n\n/**\n * Rodapé do Card. Usado normalmente para botões ou ações relacionadas.\n */\nexport function CardFooter({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"cnc-mt-4 cnc-flex cnc-border-t-2 cnc-border-brand-gray-50\",\n className\n )}\n {...rest}\n />\n );\n}\n\n/**\n * Item do Rodapé do Card. Cada item representa uma ação ou elemento visual.\n *\n * ✅ Comportamento:\n * - Quando dois ou mais `<CardFooterItem />` são renderizados dentro do `<CardFooter />`,\n * o segundo e os subsequentes recebem automaticamente uma **borda à esquerda** como separador visual,\n * aplicada pela classe `.cnc-molecule-card-item + .cnc-molecule-card-item`.\n */\nexport function CardFooterItem({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"cnc-molecule-card-item cnc-flex cnc-flex-1 cnc-items-center cnc-justify-center cnc-py-3\",\n className\n )}\n {...rest}\n />\n );\n}\n","\"use client\";\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nconst Collapsible = CollapsiblePrimitive.Root;\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\n/**\n * Componente que adiciona animação ao conteúdo do Collapsible.\n *\n * @param {React.HTMLAttributes<HTMLDivElement>} props - Propriedades do componente\n * @returns {JSX.Element} Elemento animado do conteúdo\n */\nconst AnimatedCollapsibleContent = ({\n className,\n ...rest\n}: React.HTMLAttributes<HTMLDivElement>) => {\n return <CollapsibleContent className=\"cnc-collapsible-content\" {...rest} />;\n};\n\nexport {\n Collapsible,\n CollapsibleTrigger,\n AnimatedCollapsibleContent as CollapsibleContent,\n};\n","\"use client\";\nimport { ElementType } from \"react\";\nimport { cn } from \"../../utils\";\n\n/**\n * Props base para componentes de layout do cabeçalho da página.\n * @property {React.ReactNode} [children] - Elementos filhos a serem renderizados.\n * @property {string} [className] - Classe adicional para estilização personalizada.\n */\ninterface PageHeaderBaseWithChildrenProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Componente principal de cabeçalho da página.\n * Responsável por layout responsivo entre colunas (mobile) e linha (desktop).\n *\n * @component\n * @param {PageHeaderBaseWithChildrenProps} props\n * @returns {JSX.Element}\n */\nexport function PageHeader({\n children,\n className,\n}: PageHeaderBaseWithChildrenProps) {\n return (\n <header\n className={cn(\n \"cnc-w-full cnc-flex cnc-flex-col cnc-items-center cnc-gap-4 cnc-p-4 cnc-bg-brand-blue-50 cnc-border-b-2 cnc-border-brand-blue-60 md:cnc-flex-row md:cnc-justify-between md:cnc-items-start md:cnc-p-8\",\n className\n )}\n >\n {children}\n </header>\n );\n}\n\n/**\n * Container para título e descrição no cabeçalho da página.\n * Responsável por alinhar o conteúdo de forma responsiva.\n *\n * @component\n * @param {PageHeaderBaseWithChildrenProps} props\n * @returns {JSX.Element}\n */\nexport function PageHeaderTitleContent({\n children,\n className,\n}: PageHeaderBaseWithChildrenProps) {\n return (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-items-center cnc-text-center md:cnc-flex-row md:cnc-items-start md:cnc-text-left\",\n className\n )}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Props para o componente de título do cabeçalho.\n * @property {string} title - Título principal da página.\n * @property {string} [description] - Descrição opcional abaixo do título.\n * @property {ElementType} [titleAs] - Elemento HTML para o título (ex: h1, h2).\n */\ninterface PageHeaderTitleProps {\n title: string;\n description?: string;\n titleAs?: ElementType;\n}\n\n/**\n * Exibe o título e a descrição da página.\n *\n * @component\n * @param {PageHeaderTitleProps} props\n * @returns {JSX.Element}\n */\nexport function PageHeaderTitle({\n title,\n description,\n titleAs = \"h1\",\n}: PageHeaderTitleProps) {\n const ComponentTitle: ElementType = titleAs;\n\n return (\n <div>\n <ComponentTitle className=\"cnc-text-2xl cnc-font-semibold cnc-text-brand-blue-600\">\n {title}\n </ComponentTitle>\n {description && (\n <p className=\"cnc-text-sm cnc-text-brand-gray-500\">{description}</p>\n )}\n </div>\n );\n}\n\n/**\n * Container para ações (botões, links) no cabeçalho da página.\n * Alinha verticalmente no mobile e horizontalmente no desktop.\n *\n * @component\n * @param {PageHeaderBaseWithChildrenProps} props\n * @returns {JSX.Element}\n */\nexport function PageHeaderActionsContainer({\n children,\n className,\n}: PageHeaderBaseWithChildrenProps) {\n return (\n <div\n className={cn(\n \"cnc-flex cnc-items-center cnc-gap-2 md:cnc-flex-row md:cnc-gap-4\",\n className\n )}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Props para o componente de título simples.\n * @property {string} title - Texto do título.\n * @property {ElementType} [as] - Elemento HTML a ser usado (default: h1).\n */\ninterface TitleProps {\n title: string;\n as?: ElementType;\n}\n\n/**\n * Componente reutilizável de título com estilos padrão.\n *\n * @component\n * @param {TitleProps} props\n * @returns {JSX.Element}\n */\nexport function Title({ title, as: Component = \"h1\" }: TitleProps) {\n return (\n <Component className=\"cnc-text-[24px] cnc-text-[#1F2C4D] cnc-font-bold cnc-mt-2 cnc-mb-4 text-center md:cnc-text-[28px] md:cnc-text-left\">\n {title}\n </Component>\n );\n}\n","\"use client\";\n\nimport { FolderOpen } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n title: string;\n description?: React.ReactNode;\n action?: React.ReactNode;\n minHeight?: string;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n minHeight = \"cnc-min-h-48\",\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-items-center cnc-justify-center cnc-rounded-md cnc-border cnc-border-dashed cnc-border-brand-gray-50 cnc-bg-brand-blue-50 cnc-px-4 cnc-py-8 cnc-text-center\",\n minHeight,\n className\n )}\n {...props}\n >\n <div className=\"cnc-mb-3 cnc-text-brand-gray-200\">\n {icon ?? <FolderOpen className=\"cnc-h-10 cnc-w-10\" />}\n </div>\n <p className=\"cnc-text-sm cnc-font-medium cnc-text-brand-blue-600\">{title}</p>\n {description ? (\n <p className=\"cnc-mt-1 cnc-max-w-md cnc-text-sm cnc-text-brand-gray-200\">\n {description}\n </p>\n ) : null}\n {action ? <div className=\"cnc-mt-4\">{action}</div> : null}\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../utils\";\n\n/**\n * Regra de gênero para o sufixo \"encontrad(o|a)s\".\n * Se omitido, usa heurística: última letra do `resourceName` é \"a\" → feminina.\n */\nexport type ResultMetadataGender = \"masc\" | \"fem\";\n\nexport interface ResultMetadataProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Nome do recurso a ser exibido (ex: \"Negociações\", \"Subgrupos\"). */\n resourceName: string;\n /** Total de registros retornados pela API. */\n total: number;\n /** Quantidade de registros exibidos na tela. */\n displayed: number;\n /** Indica se os dados ainda estão sendo carregados (opcional). */\n isLoading?: boolean;\n /**\n * Gênero forçado para \"encontrado(s)\" / \"encontrada(s)\".\n * Use quando a heurística da última letra falha (ex.: \"Sistema\").\n */\n forceWordGender?: ResultMetadataGender;\n /**\n * A partir de quantos registros exibidos o aviso\n * \"Exibindo os X primeiros registros...\" aparece. Padrão: 30.\n */\n truncationThreshold?: number;\n}\n\nfunction encontradosSuffix(\n resourceName: string,\n forceWordGender?: ResultMetadataGender\n): \"o\" | \"a\" {\n if (forceWordGender === \"masc\") return \"o\";\n if (forceWordGender === \"fem\") return \"a\";\n return resourceName.endsWith(\"a\") ? \"a\" : \"o\";\n}\n\nexport function ResultMetadata({\n resourceName,\n total,\n displayed,\n isLoading = false,\n forceWordGender,\n truncationThreshold = 30,\n className,\n ...props\n}: ResultMetadataProps) {\n const encontradVogal = encontradosSuffix(resourceName, forceWordGender);\n\n return (\n <div\n className={cn(\"cnc-mt-4 cnc-mb-4\", className)}\n role=\"status\"\n aria-live=\"polite\"\n {...props}\n >\n <div className=\"cnc-text-base cnc-font-bold cnc-text-brand-blue-100\">\n {`${resourceName} encontrad${encontradVogal}s | ${\n isLoading ? \"carregando ...\" : total?.toLocaleString(\"pt-BR\")\n }`}\n </div>\n {displayed >= truncationThreshold && (\n <div>\n Exibindo os <span className=\"cnc-font-bold\">{displayed}</span> primeiros\n registros. Utilize os filtros para refinar sua busca.\n </div>\n )}\n </div>\n );\n}","\"use client\";\n\nimport { ExternalLink } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface LabelValueProps {\n /** Rótulo exibido em destaque acima do valor. */\n label: string;\n /** Valor exibido. Vazio ou ausente mostra \"-\". */\n value?: React.ReactNode;\n /** Link externo opcional exibido ao lado do valor. */\n href?: string;\n className?: string;\n valueClassName?: string;\n}\n\nexport function LabelValue({\n label,\n value,\n href,\n className,\n valueClassName,\n}: LabelValueProps) {\n return (\n <div className={className}>\n <div className=\"cnc-mb-2 cnc-text-sm cnc-font-bold cnc-leading-4 cnc-text-primary\">\n {label}\n </div>\n <div\n className={cn(\n \"cnc-flex cnc-flex-row cnc-items-center cnc-justify-start cnc-gap-2 cnc-text-sm cnc-font-medium cnc-text-brand-gray-600\",\n valueClassName\n )}\n >\n {value ?? \"-\"}\n {href && (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"cnc-inline-flex cnc-items-center cnc-text-brand-blue-500 hover:cnc-opacity-80\"\n aria-label={`Abrir link externo de ${label}`}\n >\n <ExternalLink className=\"cnc-size-4\" />\n </a>\n )}\n </div>\n </div>\n );\n}","\"use client\";\n\nimport { Check, ChevronsUpDown } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport {\n ComboboxDropdownFooter,\n type ComboboxFooterAction,\n type ComboboxFooterRenderContext,\n} from \"./combobox-footer\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../overlay/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/popover\";\n\nexport type { ComboboxFooterAction, ComboboxFooterRenderContext };\n\n/**\n * Representa uma opção que pode ser selecionada no combobox.\n */\nexport interface ItemOption {\n value: any;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options?: ItemOption[];\n placeholder?: string;\n command?: {\n placeholder?: string;\n emptyMessage?: React.ReactNode;\n };\n onChange?: (value: string) => void;\n value?: string;\n onInput?: (value: string) => void;\n modal?: boolean;\n popoverClassName?: string;\n buttonClassName?: string;\n disabled?: boolean;\n /** Botão fixo no rodapé do dropdown (ex.: \"Cadastrar novo\") */\n footerAction?: ComboboxFooterAction;\n /** Slot customizado no rodapé; tem precedência sobre footerAction */\n renderFooter?: (ctx: ComboboxFooterRenderContext) => React.ReactNode;\n}\n\nexport function Combobox({\n options,\n placeholder = \"\",\n command,\n onChange,\n value = \"\",\n onInput,\n modal = false,\n popoverClassName,\n buttonClassName,\n disabled = false,\n footerAction,\n renderFooter,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n\n return (\n <Popover open={open} onOpenChange={setOpen} modal={modal}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n className={cn(\n \"cnc-w-full cnc-justify-between cnc-truncate \",\n buttonClassName\n )}\n disabled={disabled}\n >\n <div>\n {value\n ? options?.find((framework) => framework.value === value)?.label\n : placeholder}\n </div>\n <ChevronsUpDown className=\"cnc-ml-2 cnc-h-4 cnc-w-4 cnc-shrink-0 cnc-opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className={cn(\n \"cnc-w-[--radix-popover-trigger-width] cnc-p-0\",\n popoverClassName\n )}\n >\n <Command>\n <CommandInput\n placeholder={command?.placeholder}\n onInput={(e: any) => onInput && onInput(e.target?.value)}\n />\n <CommandList>\n <CommandEmpty>\n {command?.emptyMessage ?? \"Nenhum item encontrado\"}\n </CommandEmpty>\n <CommandGroup>\n {options?.map((option) => (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={(currentValue) => {\n if (onChange)\n onChange(currentValue === value ? \"\" : currentValue);\n setOpen(false);\n }}\n keywords={[option.value, option.label]}\n disabled={option.disabled}\n >\n <Check\n className={cn(\n \"cnc-mr-2 cnc-h-4 cnc-w-4\",\n value === option.value\n ? \"cnc-opacity-100\"\n : \"cnc-opacity-0\"\n )}\n />\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n <ComboboxDropdownFooter\n footerAction={footerAction}\n renderFooter={renderFooter}\n close={() => setOpen(false)}\n hidden={disabled}\n />\n </PopoverContent>\n </Popover>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\n\nexport interface ComboboxFooterAction {\n /** Texto do botão (ex.: \"Cadastrar Nova Temática\") */\n label: React.ReactNode;\n /** App abre modal, chama API, atualiza options */\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\n /** Variante visual (default: create) */\n variant?: \"create\" | \"confirm\" | \"outline\";\n disabled?: boolean;\n}\n\nexport interface ComboboxFooterRenderContext {\n close: () => void;\n}\n\ninterface ComboboxDropdownFooterProps {\n footerAction?: ComboboxFooterAction;\n renderFooter?: (ctx: ComboboxFooterRenderContext) => React.ReactNode;\n close: () => void;\n /** Quando o combobox está disabled, o footer não é exibido */\n hidden?: boolean;\n}\n\nexport function ComboboxDropdownFooter({\n footerAction,\n renderFooter,\n close,\n hidden = false,\n}: ComboboxDropdownFooterProps) {\n if (hidden) return null;\n\n if (renderFooter) {\n return (\n <div className=\"cnc-border-t cnc-border-brand-gray-50 cnc-p-2\">\n {renderFooter({ close })}\n </div>\n );\n }\n\n if (!footerAction) return null;\n\n return (\n <div className=\"cnc-border-t cnc-border-brand-gray-50 cnc-p-2\">\n <Button\n type=\"button\"\n variant={footerAction.variant ?? \"create\"}\n className=\"cnc-w-full\"\n disabled={footerAction.disabled}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n footerAction.onClick(event);\n }}\n >\n {footerAction.label}\n </Button>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { type DialogProps } from \"@radix-ui/react-dialog\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { Search } from \"lucide-react\";\n\nimport { cn } from \"../../utils\";\nimport { Dialog, DialogContent } from \"../../Dialog\";\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"cnc-flex cnc-h-full cnc-w-full cnc-flex-col cnc-overflow-hidden cnc-rounded-md cnc-bg-popover cnc-text-popover-foreground\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = CommandPrimitive.displayName;\n\nconst CommandDialog = ({ children, ...props }: DialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"cnc-overflow-hidden cnc-p-0\">\n <Command className=\"cnc-[&_cmdk-group-heading]:cnc-px-2 cnc-[&_cmdk-group-heading]:cnc-font-medium cnc-[&_cmdk-group-heading]:cnc-text-muted-foreground cnc-[&_cmdk-group]:not([hidden])~[cmdk-group]:cnc-pt-0 cnc-[&_cmdk-group]:cnc-px-2 cnc-[&_cmdk-input-wrapper]_svg:cnc-h-5 cnc-[&_cmdk-input-wrapper]_svg:cnc-w-5 cnc-[&_cmdk-input]:cnc-h-12 cnc-[&_cmdk-item]:cnc-px-2 cnc-[&_cmdk-item]:cnc-py-3 cnc-[&_cmdk-item]_svg:cnc-h-5 cnc-[&_cmdk-item]_svg:cnc-w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div\n className=\"cnc-flex cnc-items-center cnc-border-b cnc-px-3\"\n cmdk-input-wrapper=\"\"\n >\n <Search className=\"cnc-mr-2 cnc-h-4 cnc-w-4 cnc-shrink-0 cnc-opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"cnc-flex cnc-h-10 cnc-w-full cnc-rounded-md cnc-bg-transparent cnc-py-3 cnc-text-sm cnc-outline-none placeholder:cnc-text-muted-foreground disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n));\nCommandInput.displayName = CommandPrimitive.Input.displayName;\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\n \"cnc-max-h-[300px] cnc-overflow-y-auto cnc-overflow-x-hidden\",\n className\n )}\n {...props}\n />\n));\nCommandList.displayName = CommandPrimitive.List.displayName;\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"cnc-py-6 cnc-text-center cnc-text-sm\"\n {...props}\n />\n));\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"cnc-overflow-hidden cnc-p-1 cnc-text-foreground cnc-[&_cmdk-group-heading]:cnc-px-2 cnc-[&_cmdk-group-heading]:cnc-py-1.5 cnc-[&_cmdk-group-heading]:cnc-text-xs cnc-[&_cmdk-group-heading]:cnc-font-medium cnc-[&_cmdk-group-heading]:cnc-text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"cnc--mx-1 cnc-h-px cnc-bg-border\", className)}\n {...props}\n />\n));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"cnc-relative cnc-flex cnc-cursor-default cnc-gap-2 cnc-select-none cnc-items-center cnc-rounded-sm cnc-px-2 cnc-py-1.5 cnc-text-sm cnc-outline-none data-[disabled=true]:cnc-pointer-events-none data-[disabled=true]:cnc-opacity-50 data-[selected=true]:cnc-bg-accent data-[selected=true]:cnc-text-accent-foreground [&_svg]:cnc-pointer-events-none [&_svg]:cnc-size-4 [&_svg]:cnc-shrink-0\",\n className\n )}\n {...props}\n />\n));\nCommandItem.displayName = CommandPrimitive.Item.displayName;\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"cnc-ml-auto cnc-text-xs cnc-tracking-widest cnc-text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n};\nCommandShortcut.displayName = \"CommandShortcut\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"cnc-z-50 cnc-w-72 cnc-rounded-md cnc-border cnc-bg-popover cnc-p-4 cnc-text-popover-foreground cnc-shadow-md cnc-outline-none data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0 data-[state=closed]:cnc-zoom-out-95 data-[state=open]:cnc-zoom-in-95 data-[side=bottom]:cnc-slide-in-from-top-2 data-[side=left]:cnc-slide-in-from-right-2 data-[side=right]:cnc-slide-in-from-left-2 data-[side=top]:cnc-slide-in-from-bottom-2 cnc-origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","\"use client\";\n\nimport { Check, ChevronsUpDown } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport {\n ComboboxDropdownFooter,\n type ComboboxFooterAction,\n type ComboboxFooterRenderContext,\n} from \"./combobox-footer\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../overlay/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/popover\";\n\nexport type { ComboboxFooterAction, ComboboxFooterRenderContext };\n\n/**\n * Representa uma opção selecionável no MultiSelect.\n */\nexport interface MultiSelectOption<TValue extends string = string> {\n value: TValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps<TValue extends string = string> {\n options?: MultiSelectOption<TValue>[];\n value?: TValue[];\n onChange?: (value: TValue[]) => void;\n placeholder?: string;\n disabled?: boolean;\n modal?: boolean;\n className?: string;\n buttonClassName?: string;\n popoverClassName?: string;\n command?: {\n placeholder?: string;\n emptyMessage?: React.ReactNode;\n };\n selectedCountText?: (count: number) => string;\n footerAction?: ComboboxFooterAction;\n renderFooter?: (ctx: ComboboxFooterRenderContext) => React.ReactNode;\n}\n\nexport function MultiSelect<TValue extends string = string>({\n options,\n value = [],\n onChange,\n placeholder = \"Selecione...\",\n disabled = false,\n modal = false,\n className,\n buttonClassName,\n popoverClassName,\n command,\n selectedCountText = (count) => `${count} selecionados`,\n footerAction,\n renderFooter,\n}: MultiSelectProps<TValue>) {\n const [open, setOpen] = React.useState(false);\n\n const buttonText = (() => {\n if (value.length === 0) return placeholder;\n if (value.length === 1) {\n return (\n options?.find((option) => option.value === value[0])?.label ??\n selectedCountText(1)\n );\n }\n return selectedCountText(value.length);\n })();\n\n const toggleOption = (optionValue: TValue) => {\n if (!onChange) return;\n onChange(\n value.includes(optionValue)\n ? value.filter((item) => item !== optionValue)\n : [...value, optionValue]\n );\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen} modal={modal}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"cnc-w-full cnc-justify-between cnc-truncate\",\n buttonClassName,\n className\n )}\n >\n <span className=\"cnc-truncate\">{buttonText}</span>\n <ChevronsUpDown className=\"cnc-ml-2 cnc-h-4 cnc-w-4 cnc-shrink-0 cnc-opacity-50\" />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"cnc-w-[--radix-popover-trigger-width] cnc-p-0\",\n popoverClassName\n )}\n >\n <Command>\n <CommandInput placeholder={command?.placeholder} />\n <CommandList>\n <CommandEmpty>\n {command?.emptyMessage ?? \"Nenhum item encontrado\"}\n </CommandEmpty>\n <CommandGroup>\n {options?.map((option) => {\n const isSelected = value.includes(option.value);\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={() => toggleOption(option.value)}\n keywords={[option.value, option.label]}\n disabled={option.disabled}\n >\n <Check\n className={cn(\n \"cnc-mr-2 cnc-h-4 cnc-w-4\",\n isSelected ? \"cnc-opacity-100\" : \"cnc-opacity-0\"\n )}\n />\n {option.label}\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n <ComboboxDropdownFooter\n footerAction={footerAction}\n renderFooter={renderFooter}\n close={() => setOpen(false)}\n hidden={disabled}\n />\n </PopoverContent>\n </Popover>\n );\n}\n","\"use client\";\n\nimport { Trash2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../../Dialog\";\nimport { cn } from \"../../utils\";\n\nexport interface ConfirmDialogProps {\n /** Controla a abertura/fechamento do diálogo. */\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Título do diálogo (ex.: \"Excluir demanda\"). */\n title: string;\n /** Descrição/confirmação da ação (pode conter elementos em destaque). */\n description?: React.ReactNode;\n /** Rótulo da ação de confirmação. Padrão: \"Confirmar\". */\n confirmLabel?: string;\n /** Rótulo da ação de cancelamento. Padrão: \"Cancelar\". */\n cancelLabel?: string;\n /** Rótulo exibido no botão de confirmação durante o carregamento. */\n loadingLabel?: string;\n /**\n * Chamado ao confirmar. Se retornar uma Promise, o botão entra em estado\n * de carregamento até ela resolver. O fechamento fica a cargo do consumidor.\n */\n onConfirm?: () => void | Promise<void>;\n /** Ícone exibido no círculo do cabeçalho. Padrão: ícone de lixeira. */\n icon?: React.ReactNode;\n /** Exibe o círculo colorido atrás do ícone. Padrão: `true`. */\n showIconBackground?: boolean;\n /** Alinhamento dos botões no rodapé. Padrão: `\"center\"`. */\n footerAlign?: \"center\" | \"end\";\n /** Variante do botão de confirmação. Padrão: \"danger\". */\n confirmVariant?: \"danger\" | \"confirm\";\n /** Conteúdo extra entre a descrição e o rodapé (ex.: Checkbox de confirmação). */\n children?: React.ReactNode;\n /** Controla o estado de carregamento externamente, sobrescrevendo o interno. */\n isLoading?: boolean;\n className?: string;\n}\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = \"Confirmar\",\n cancelLabel = \"Cancelar\",\n loadingLabel = \"Aguarde...\",\n onConfirm,\n icon,\n showIconBackground = true,\n footerAlign = \"center\",\n confirmVariant = \"danger\",\n children,\n isLoading,\n className,\n}: ConfirmDialogProps) {\n const [localLoading, setLocalLoading] = React.useState(false);\n\n /** isLoading efetivo: prop externa tem precedência sobre o estado interno. */\n const isBusy = isLoading ?? localLoading;\n\n const handleConfirm = async () => {\n if (isLoading !== undefined) {\n await onConfirm?.();\n return;\n }\n\n setLocalLoading(true);\n try {\n await onConfirm?.();\n } finally {\n setLocalLoading(false);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className={cn(\"cnc-max-w-md cnc-text-center\", className)}>\n <DialogHeader>\n <div\n className={cn(\n \"cnc-mx-auto cnc-mb-2 cnc-flex cnc-items-center cnc-justify-center\",\n showIconBackground &&\n \"cnc-size-16 cnc-rounded-full cnc-bg-red-100\",\n showIconBackground &&\n confirmVariant === \"confirm\" &&\n \"cnc-bg-brand-green-100/20\"\n )}\n >\n {icon ?? (\n <Trash2 className={cn(\"cnc-size-8 cnc-text-red-600\", confirmVariant === \"confirm\" && \"cnc-text-brand-green-300\")} />\n )}\n </div>\n <DialogTitle className=\"cnc-text-center\">{title}</DialogTitle>\n {description && (\n <DialogDescription className=\"cnc-text-center\">\n {description}\n </DialogDescription>\n )}\n </DialogHeader>\n\n {children}\n\n <DialogFooter\n className={cn(\n \"cnc-flex cnc-gap-2\",\n footerAlign === \"end\"\n ? \"cnc-justify-end sm:cnc-justify-end\"\n : \"cnc-justify-center sm:cnc-justify-center\"\n )}\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={isBusy}\n >\n {cancelLabel}\n </Button>\n <Button\n type=\"button\"\n variant={confirmVariant}\n isLoading={isBusy}\n onClick={handleConfirm}\n >\n {isBusy ? loadingLabel : confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface TooltipProps {\n text: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n contentClassName?: string;\n}\n\nexport function Tooltip({\n text,\n children,\n className,\n contentClassName,\n}: TooltipProps) {\n return (\n <div className={cn(\"cnc-relative cnc-inline-flex cnc-group\", className)}>\n <div\n role=\"tooltip\"\n className={cn(\n \"cnc-pointer-events-none cnc-absolute cnc-bottom-full cnc-left-1/2 cnc-z-50 cnc-mb-2 cnc-w-max cnc-max-w-xs cnc--translate-x-1/2 cnc-rounded cnc-bg-black cnc-px-2 cnc-py-1 cnc-text-xs cnc-text-white cnc-opacity-0 cnc-shadow-md cnc-transition-opacity cnc-duration-200 group-hover:cnc-opacity-100 group-focus-within:cnc-opacity-100\",\n contentClassName\n )}\n >\n {text}\n </div>\n <span className=\"cnc-cursor-pointer\">{children}</span>\n </div>\n );\n}","\"use client\";\n\nimport { FilterX, ListFilter, Search } from \"lucide-react\";\nimport * as React from \"react\";\nimport {\n Controller,\n useForm,\n useWatch,\n type Control,\n type FieldErrors,\n type UseFormRegister,\n} from \"react-hook-form\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport { Switch } from \"../../atoms/forms/switch\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../../molecules/collapsible\";\nimport { Combobox, type ItemOption } from \"../../molecules/forms/combobox\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst INPUT_BASE_CLASSES = [\n \"cnc-flex cnc-h-10 cnc-w-full cnc-rounded-md cnc-border cnc-bg-transparent cnc-px-3 cnc-py-1 cnc-text-base cnc-shadow-sm cnc-transition-colors\",\n \"placeholder:cnc-text-muted-foreground focus-visible:cnc-outline-none\",\n \"focus-visible:cnc-ring-2 focus-visible:cnc-ring-brand-gray-500/50 md:cnc-text-sm\",\n \"not-disabled:hover:cnc-border-brand-gray-500\",\n \"disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\",\n].join(\" \");\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type FilterFieldType = \"text\" | \"combobox\" | \"switch\" | \"date\";\n\nexport type FilterValues = Record<string, string | boolean>;\n\nexport interface FilterField {\n type: FilterFieldType;\n name: string;\n label?: string;\n placeholder?: string;\n id?: string;\n required?: boolean;\n disabled?: boolean;\n data?: ItemOption[];\n errorMessage?: string;\n defaultValue?: string | boolean;\n width?: string;\n onInput?: (value: string) => void;\n}\n\nexport interface FilterProps {\n fields: FilterField[];\n collapsibleFields?: FilterField[];\n onSearch: (filters: FilterValues) => void;\n onClean?: () => void;\n hideCleanFilterButton?: boolean;\n isLoading?: boolean;\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction buildDefaultValues(fields: FilterField[]): FilterValues {\n const defaults: FilterValues = {};\n for (const field of fields) {\n defaults[field.name] =\n field.defaultValue ?? (field.type === \"switch\" ? false : \"\");\n }\n return defaults;\n}\n\nfunction buildValidationRules(field: FilterField) {\n if (!field.required) return undefined;\n return {\n required: field.errorMessage || \"Campo obrigatório\",\n validate: (value: string | boolean) => {\n if (field.type === \"switch\") return true;\n if (value === \"\" || value === null || value === undefined) {\n return field.errorMessage || \"Campo obrigatório\";\n }\n return true;\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// FilterFieldItem — memoised per-field renderer (avoids full-form re-render)\n// ---------------------------------------------------------------------------\n\ninterface FilterFieldItemProps {\n field: FilterField;\n register: UseFormRegister<FilterValues>;\n control: Control<FilterValues>;\n error?: FieldErrors<FilterValues>[string];\n}\n\nconst FilterFieldItem = React.memo(function FilterFieldItem({\n field,\n register,\n control,\n error,\n}: FilterFieldItemProps) {\n const fieldId = field.id || `filter-field-${field.name}`;\n\n return (\n <div\n className=\"cnc-filter-field cnc-px-2 cnc-mb-3\"\n style={\n { \"--cnc-filter-field-w\": field.width || \"25%\" } as React.CSSProperties\n }\n >\n {field.label && (\n <label\n htmlFor={fieldId}\n className=\"cnc-block cnc-text-sm cnc-mb-1 cnc-font-medium cnc-text-brand-gray-600\"\n >\n {field.label}\n {field.required && <span className=\"cnc-text-red-500\"> *</span>}\n </label>\n )}\n\n {(field.type === \"text\" || field.type === \"date\") && (\n <input\n id={fieldId}\n type={field.type === \"date\" ? \"date\" : \"text\"}\n placeholder={field.placeholder}\n disabled={field.disabled}\n {...register(field.name, buildValidationRules(field))}\n className={cn(\n INPUT_BASE_CLASSES,\n error ? \"cnc-border-red-500\" : \"cnc-border-input\"\n )}\n />\n )}\n\n {field.type === \"combobox\" && (\n <Controller\n name={field.name}\n control={control}\n rules={buildValidationRules(field)}\n render={({ field: rhfField }) => (\n <Combobox\n value={(rhfField.value as string) || \"\"}\n onChange={(value) => rhfField.onChange(value)}\n options={field.data}\n placeholder={field.placeholder || \"Selecione uma opção\"}\n disabled={field.disabled}\n onInput={field.onInput}\n buttonClassName={cn(error && \"cnc-border-red-500\")}\n />\n )}\n />\n )}\n\n {field.type === \"switch\" && (\n <Controller\n name={field.name}\n control={control}\n rules={buildValidationRules(field)}\n render={({ field: rhfField }) => (\n <Switch\n checked={!!rhfField.value}\n onChange={(checked) => rhfField.onChange(checked)}\n onBlur={rhfField.onBlur}\n disabled={field.disabled}\n />\n )}\n />\n )}\n\n {error && (\n <span className=\"cnc-block cnc-text-xs cnc-text-red-500 cnc-mt-1\">\n {error.message as string}\n </span>\n )}\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// CleanButton — isolates useWatch re-renders from the rest of the form\n// ---------------------------------------------------------------------------\n\ninterface CleanButtonProps {\n control: Control<FilterValues>;\n onClean: () => void;\n}\n\nfunction CleanButton({ control, onClean }: CleanButtonProps) {\n const values = useWatch({ control });\n\n const hasActiveFilters = React.useMemo(() => {\n const keys = Object.keys(values);\n return keys.some((key) => {\n const val = values[key];\n if (typeof val === \"boolean\") return val;\n if (typeof val === \"string\") return val.trim() !== \"\";\n return val !== null && val !== undefined && val !== \"\";\n });\n }, [values]);\n\n return (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClean}\n disabled={!hasActiveFilters}\n className=\"cnc-shrink-0 cnc-gap-2\"\n >\n <FilterX className=\"cnc-h-4 cnc-w-4\" />\n Limpar\n </Button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Filter (main)\n// ---------------------------------------------------------------------------\n\nexport const Filter = React.forwardRef<HTMLFormElement, FilterProps>(\n function Filter(\n {\n fields,\n collapsibleFields,\n onSearch,\n onClean,\n hideCleanFilterButton = false,\n isLoading = false,\n className,\n },\n ref\n ) {\n const [isCollapsibleOpen, setIsCollapsibleOpen] = React.useState(false);\n\n const allFields = React.useMemo(\n () => [...fields, ...(collapsibleFields || [])],\n [fields, collapsibleFields]\n );\n\n const defaultValues = React.useMemo(\n () => buildDefaultValues(allFields),\n [allFields]\n );\n\n const {\n register,\n handleSubmit,\n control,\n reset,\n formState: { errors },\n } = useForm<FilterValues>({ defaultValues });\n\n // Auto-open collapsible when a collapsible field has a validation error\n React.useEffect(() => {\n if (collapsibleFields?.some((f) => errors[f.name])) {\n setIsCollapsibleOpen(true);\n }\n }, [errors, collapsibleFields]);\n\n const onSubmit = (data: FilterValues) => {\n onSearch(data);\n };\n\n const handleClean = React.useCallback(() => {\n const emptyValues: FilterValues = {};\n for (const field of allFields) {\n emptyValues[field.name] = field.type === \"switch\" ? false : \"\";\n }\n reset(emptyValues);\n onClean?.();\n }, [allFields, reset, onClean]);\n\n return (\n <Collapsible\n open={isCollapsibleOpen}\n onOpenChange={setIsCollapsibleOpen}\n >\n <form\n ref={ref}\n onSubmit={handleSubmit(onSubmit)}\n className={cn(\n \"cnc-w-full cnc-rounded-md cnc-border cnc-border-brand-gray-50 cnc-p-4 cnc-shadow-sm\",\n className\n )}\n style={{ backgroundColor: \"#F8FAFC\" }}\n >\n <div className=\"cnc-flex cnc-flex-wrap cnc-items-end\">\n {fields.map((field) => (\n <FilterFieldItem\n key={field.name}\n field={field}\n register={register}\n control={control}\n error={errors[field.name]}\n />\n ))}\n\n <div className=\"cnc-filter-actions cnc-flex cnc-items-center cnc-gap-2 cnc-px-2 cnc-mb-3 cnc-ml-auto cnc-h-10\">\n {collapsibleFields && collapsibleFields.length > 0 && (\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"cnc-shrink-0\"\n >\n <ListFilter className=\"cnc-h-4 cnc-w-4\" />\n </Button>\n </CollapsibleTrigger>\n )}\n\n <Button\n type=\"submit\"\n variant=\"confirm\"\n isLoading={isLoading}\n className=\"cnc-shrink-0 cnc-gap-2\"\n >\n <Search className=\"cnc-h-4 cnc-w-4\" />\n Pesquisar\n </Button>\n\n {!hideCleanFilterButton && (\n <CleanButton control={control} onClean={handleClean} />\n )}\n </div>\n </div>\n\n {collapsibleFields && collapsibleFields.length > 0 && (\n <CollapsibleContent>\n <div className=\"cnc-flex cnc-flex-wrap cnc-items-end cnc-pt-2\">\n {collapsibleFields.map((field) => (\n <FilterFieldItem\n key={field.name}\n field={field}\n register={register}\n control={control}\n error={errors[field.name]}\n />\n ))}\n </div>\n </CollapsibleContent>\n )}\n </form>\n </Collapsible>\n );\n }\n);\n","\"use client\";\n\nimport { FolderOpen } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nexport interface CardListProps<T> {\n items: T[];\n renderCard: (item: T, index: number) => React.ReactNode;\n emptyMessage?: string;\n minItemWidth?: string;\n className?: string;\n gap?: string;\n getKey?: (item: T, index: number) => React.Key;\n isLoading?: boolean;\n skeletonCount?: number;\n}\n\nexport function CardList<T>({\n items,\n renderCard,\n emptyMessage = \"Nenhum item\",\n minItemWidth = \"260px\",\n className,\n gap = \"cnc-gap-4\",\n getKey,\n isLoading = false,\n skeletonCount = 6,\n}: CardListProps<T>) {\n const gridStyle: React.CSSProperties = {\n gridTemplateColumns: `repeat(auto-fill, minmax(min(100%, ${minItemWidth}), 1fr))`,\n };\n\n if (isLoading) {\n return (\n <div\n className={cn(\"cnc-grid cnc-w-full\", gap, className)}\n style={gridStyle}\n aria-busy=\"true\"\n >\n {Array.from({ length: skeletonCount }).map((_, i) => (\n <div\n key={i}\n className=\"cnc-animate-pulse cnc-rounded-md cnc-border-2 cnc-border-brand-gray-50 cnc-bg-white cnc-shadow cnc-p-6\"\n >\n <div className=\"cnc-h-4 cnc-w-1/2 cnc-bg-brand-gray-100 cnc-rounded cnc-mb-4\" />\n <div className=\"cnc-h-3 cnc-w-3/4 cnc-bg-brand-gray-100 cnc-rounded cnc-mb-2\" />\n <div className=\"cnc-h-3 cnc-w-2/3 cnc-bg-brand-gray-100 cnc-rounded cnc-mb-6\" />\n <div className=\"cnc-h-8 cnc-w-full cnc-bg-brand-gray-100 cnc-rounded\" />\n </div>\n ))}\n </div>\n );\n }\n\n if (!items || items.length === 0) {\n return (\n <div\n className={cn(\n \"cnc-w-full cnc-flex cnc-flex-col cnc-items-center cnc-justify-center cnc-rounded-md cnc-py-16 cnc-px-4\",\n className\n )}\n style={{ backgroundColor: \"#F8FAFC\", color: \"#64748B\" }}\n >\n <FolderOpen className=\"cnc-h-8 cnc-w-8 cnc-mb-2\" />\n <p className=\"cnc-text-sm\">{emptyMessage}</p>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\"cnc-grid cnc-w-full\", gap, className)}\n style={gridStyle}\n >\n {items.map((item, index) => (\n <React.Fragment key={getKey ? getKey(item, index) : index}>\n {renderCard(item, index)}\n </React.Fragment>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\n\nconst Drawer = DialogPrimitive.Root;\n\nconst DrawerTrigger = DialogPrimitive.Trigger;\n\nconst DrawerPortal = DialogPrimitive.Portal;\n\nconst DrawerClose = DialogPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"cnc-fixed cnc-inset-0 cnc-z-50 cnc-bg-black/80 data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDrawerOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\n/** Tamanhos pré-definidos para a largura do painel em telas >= sm. */\nconst drawerSizeToWidth: Record<\"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\", string> = {\n sm: \"24rem\",\n md: \"32rem\",\n lg: \"40rem\",\n xl: \"48rem\",\n full: \"100vw\",\n};\n\nexport interface DrawerContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Lado da tela em que o painel desliza. Padrão: \"right\". */\n side?: \"left\" | \"right\";\n /** Largura pré-definida do painel em telas >= sm. Padrão: \"md\". */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n /** Largura customizada (sobrescreve `size`). */\n width?: string;\n /** Exibe o botão de fechar padrão no canto superior. Padrão: true. */\n closeButton?: boolean;\n}\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n DrawerContentProps\n>(\n (\n {\n className,\n children,\n side = \"right\",\n size = \"md\",\n width,\n closeButton = true,\n style,\n ...props\n },\n ref\n ) => {\n const resolvedWidth = width ?? drawerSizeToWidth[size];\n\n return (\n <DrawerPortal>\n <DrawerOverlay />\n <DialogPrimitive.Content\n ref={ref}\n style={{ \"--drawer-width\": resolvedWidth, ...style } as React.CSSProperties}\n className={cn(\n \"cnc-fixed cnc-inset-y-0 cnc-z-50 cnc-flex cnc-w-full cnc-flex-col cnc-bg-background cnc-shadow-lg cnc-duration-200 data-[state=open]:cnc-animate-in data-[state=closed]:cnc-animate-out data-[state=closed]:cnc-fade-out-0 data-[state=open]:cnc-fade-in-0\",\n \"sm:cnc-w-[--drawer-width] sm:cnc-max-w-full\",\n side === \"right\" &&\n \"cnc-right-0 cnc-border-l data-[state=closed]:cnc-slide-out-to-right-full data-[state=open]:cnc-slide-in-from-right-full\",\n side === \"left\" &&\n \"cnc-left-0 cnc-border-r data-[state=closed]:cnc-slide-out-to-left-full data-[state=open]:cnc-slide-in-from-left-full\",\n className\n )}\n {...props}\n >\n {children}\n {closeButton && (\n <DialogPrimitive.Close className=\"cnc-absolute cnc-right-4 cnc-top-4 cnc-rounded-sm cnc-opacity-70 cnc-ring-offset-background cnc-transition-opacity hover:cnc-opacity-100 focus:cnc-outline-none focus:cnc-ring-2 focus:cnc-ring-ring focus:cnc-ring-offset-2 disabled:cnc-pointer-events-none data-[state=open]:cnc-bg-accent data-[state=open]:cnc-text-muted-foreground\">\n <X className=\"cnc-h-4 cnc-w-4\" />\n <span className=\"cnc-sr-only\">Fechar</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DrawerPortal>\n );\n }\n);\nDrawerContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DrawerHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"cnc-flex cnc-flex-col cnc-space-y-1.5 cnc-border-b cnc-p-6\",\n className\n )}\n {...props}\n />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerBody = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"cnc-flex-1 cnc-overflow-y-auto cnc-p-6\", className)} {...props} />\n);\nDrawerBody.displayName = \"DrawerBody\";\n\nconst DrawerFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"cnc-border-t cnc-p-6\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"cnc-text-lg cnc-font-semibold cnc-leading-none cnc-tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDrawerTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"cnc-text-sm cnc-text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Drawer,\n DrawerTrigger,\n DrawerPortal,\n DrawerClose,\n DrawerOverlay,\n DrawerContent,\n DrawerHeader,\n DrawerBody,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","\"use client\";\n\nimport * as React from \"react\";\n\n/**\n * Contexto opcional para orquestrar múltiplos `Drawer`s por id, no padrão\n * `activeDrawer`/`openDrawer(id)` já usado nos projetos consumidores.\n *\n * Uso típico:\n * ```tsx\n * <DrawerProvider>\n * <MinhaPagina />\n * </DrawerProvider>\n *\n * const { isOpen, openDrawer, closeDrawer } = useDrawer();\n * <Drawer open={isOpen(\"detalhes\")} onOpenChange={(open) => !open && closeDrawer()}>\n * ...\n * </Drawer>\n * ```\n */\nexport interface DrawerContextValue {\n activeDrawer: string | null;\n openDrawer: (drawerId: string) => void;\n closeDrawer: () => void;\n isOpen: (drawerId: string) => boolean;\n}\n\nexport interface DrawerProviderProps {\n children: React.ReactNode;\n}\n\nexport const DrawerContext = React.createContext<DrawerContextValue | undefined>(\n undefined\n);\n\nexport function DrawerProvider({ children }: DrawerProviderProps) {\n const [activeDrawer, setActiveDrawer] = React.useState<string | null>(null);\n\n const openDrawer = React.useCallback((drawerId: string) => {\n setActiveDrawer(drawerId);\n }, []);\n\n const closeDrawer = React.useCallback(() => {\n setActiveDrawer(null);\n }, []);\n\n const isOpen = React.useCallback(\n (drawerId: string) => activeDrawer === drawerId,\n [activeDrawer]\n );\n\n const value = React.useMemo(\n () => ({ activeDrawer, openDrawer, closeDrawer, isOpen }),\n [activeDrawer, openDrawer, closeDrawer, isOpen]\n );\n\n return (\n <DrawerContext.Provider value={value}>{children}</DrawerContext.Provider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { DrawerContext, DrawerContextValue } from \"./drawer-context\";\n\nexport function useDrawer(): DrawerContextValue {\n const context = React.useContext(DrawerContext);\n\n if (!context) {\n throw new Error(\"useDrawer deve ser usado dentro de um DrawerProvider\");\n }\n\n return context;\n}\n","\"use client\";\n\nimport { Paperclip } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport { FileList, type FileListItem } from \"./file-list\";\nimport { type FileRejection, validateFiles } from \"./utils\";\n\nexport interface FileUploadProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** Arquivos atualmente selecionados. */\n value?: File[];\n onChange?: (files: File[]) => void;\n /** Permite selecionar mais de um arquivo. Padrão: true. */\n multiple?: boolean;\n /** Valor repassado ao input nativo. */\n accept?: string;\n /** Lista de MIME types aceitos para validação em JavaScript. */\n allowedTypes?: string[];\n /** Tamanho máximo por arquivo, em bytes. */\n maxSize?: number;\n disabled?: boolean;\n /** Indica que uma operação externa está em andamento. */\n isLoading?: boolean;\n /** Rótulo exibido no botão de seleção. */\n buttonLabel?: string;\n /** Texto de apoio abaixo do botão. */\n hint?: React.ReactNode;\n /** Ícone exibido no botão. */\n icon?: React.ReactNode;\n /** Chamado quando um ou mais arquivos são rejeitados. */\n onReject?: (rejections: FileRejection[]) => void;\n /** Exibe a lista de arquivos selecionados abaixo do botão. */\n showList?: boolean;\n /** Personaliza o título da lista de pendentes. */\n listTitle?: (count: number) => React.ReactNode;\n buttonClassName?: string;\n listClassName?: string;\n}\n\nfunction fileToListItem(file: File, index: number): FileListItem {\n return {\n id: `${file.name}-${file.size}-${file.lastModified}-${index}`,\n name: file.name,\n size: file.size,\n status: \"pending\",\n };\n}\n\nexport const FileUpload = React.forwardRef<HTMLInputElement, FileUploadProps>(\n (\n {\n value = [],\n onChange,\n multiple = true,\n accept,\n allowedTypes,\n maxSize,\n disabled = false,\n isLoading = false,\n buttonLabel = \"Adicionar arquivos\",\n hint,\n icon,\n onReject,\n showList = true,\n listTitle = (count) => `Arquivos selecionados (${count})`,\n className,\n buttonClassName,\n listClassName,\n ...props\n },\n ref\n ) => {\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const hintId = React.useId();\n\n React.useImperativeHandle(ref, () => fileInputRef.current as HTMLInputElement, []);\n\n const isBusy = disabled || isLoading;\n\n const items = value.map(fileToListItem);\n\n const clearInput = () => {\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n\n const handleFileSelection = (event: React.ChangeEvent<HTMLInputElement>) => {\n const selectedFiles = Array.from(event.target.files ?? []);\n\n if (!selectedFiles.length) {\n clearInput();\n return;\n }\n\n const { acceptedFiles, rejectedFiles } = validateFiles({\n currentFiles: value,\n incomingFiles: selectedFiles,\n allowedTypes,\n maxSize,\n multiple,\n });\n\n if (acceptedFiles.length > 0) {\n onChange?.(multiple ? [...value, ...acceptedFiles] : acceptedFiles.slice(0, 1));\n }\n\n if (rejectedFiles.length > 0) {\n onReject?.(rejectedFiles);\n }\n\n clearInput();\n };\n\n const handleRemove = (_item: FileListItem, index: number) => {\n onChange?.(value.filter((_, currentIndex) => currentIndex !== index));\n };\n\n return (\n <div className={cn(\"cnc-flex cnc-min-w-0 cnc-flex-col cnc-gap-3\", className)} {...props}>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple={multiple}\n accept={accept}\n className=\"cnc-sr-only\"\n tabIndex={-1}\n disabled={isBusy}\n aria-describedby={hint ? hintId : undefined}\n onChange={handleFileSelection}\n />\n\n <div className=\"cnc-flex cnc-flex-col cnc-gap-2 sm:cnc-flex-row sm:cnc-flex-wrap sm:cnc-items-center\">\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={isBusy}\n className={buttonClassName}\n onClick={() => fileInputRef.current?.click()}\n >\n {icon ?? <Paperclip className=\"cnc-mr-2 cnc-size-4\" />}\n {buttonLabel}\n </Button>\n </div>\n\n {hint ? (\n <p id={hintId} className=\"cnc-text-sm cnc-text-slate-600\">\n {hint}\n </p>\n ) : null}\n\n {showList && items.length > 0 ? (\n <div className=\"cnc-flex cnc-flex-col cnc-gap-2\">\n <p role=\"status\" className=\"cnc-text-sm cnc-font-medium cnc-text-slate-700\">\n {listTitle(items.length)}\n </p>\n <FileList\n items={items}\n onRemove={handleRemove}\n disabled={isBusy}\n className={listClassName}\n />\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nFileUpload.displayName = \"FileUpload\";\n","export type FileRejectionReason = \"type\" | \"size\" | \"duplicate\";\n\nexport interface FileRejection {\n file: File;\n reason: FileRejectionReason;\n /** Mensagem pronta para ser exibida pelo consumidor. */\n message: string;\n}\n\nexport interface ValidateFilesOptions {\n currentFiles?: File[];\n incomingFiles: File[];\n allowedTypes?: string[];\n maxSize?: number;\n multiple?: boolean;\n}\n\nfunction formatSizeLimit(bytes: number) {\n if (bytes < 1024 * 1024) {\n return `${Math.max(1, Math.round(bytes / 1024))} KB`;\n }\n\n return `${(bytes / (1024 * 1024)).toLocaleString(\"pt-BR\", {\n maximumFractionDigits: 1,\n minimumFractionDigits: 0,\n })} MB`;\n}\n\n/** Formata bytes em KB ou MB usando localidade pt-BR. */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024 * 1024) {\n return `${Math.max(1, Math.round(bytes / 1024))} KB`;\n }\n\n return `${(bytes / (1024 * 1024)).toLocaleString(\"pt-BR\", {\n maximumFractionDigits: 1,\n minimumFractionDigits: 0,\n })} MB`;\n}\n\nfunction isDuplicateFile(file: File, files: File[]) {\n return files.some(\n (currentFile) =>\n currentFile.name === file.name && currentFile.size === file.size\n );\n}\n\n/**\n * Valida um lote de arquivos e separa itens aceitos de itens recusados.\n */\nexport function validateFiles({\n currentFiles = [],\n incomingFiles,\n allowedTypes,\n maxSize,\n multiple = true,\n}: ValidateFilesOptions) {\n const acceptedFiles: File[] = [];\n const rejectedFiles: FileRejection[] = [];\n const baseFiles = multiple ? currentFiles : [];\n\n for (const file of incomingFiles) {\n if (allowedTypes?.length && !allowedTypes.includes(file.type)) {\n rejectedFiles.push({\n file,\n reason: \"type\",\n message: `Tipo não permitido: ${file.name}`,\n });\n continue;\n }\n\n if (maxSize !== undefined && file.size > maxSize) {\n rejectedFiles.push({\n file,\n reason: \"size\",\n message: `Arquivo maior que ${formatSizeLimit(maxSize)}: ${file.name}`,\n });\n continue;\n }\n\n if (isDuplicateFile(file, [...baseFiles, ...acceptedFiles])) {\n rejectedFiles.push({\n file,\n reason: \"duplicate\",\n message: `Arquivo já adicionado: ${file.name}`,\n });\n continue;\n }\n\n if (!multiple) {\n acceptedFiles.splice(0, acceptedFiles.length, file);\n continue;\n }\n\n acceptedFiles.push(file);\n }\n\n return { acceptedFiles, rejectedFiles };\n}\n","\"use client\";\n\nimport { Download, FileText, Trash2, X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\nimport { formatFileSize } from \"./utils\";\n\nexport interface FileListItem {\n /** Chave estável do item. */\n id: string;\n /** Nome do arquivo exibido para o usuário. */\n name: string;\n /** Tamanho em bytes, quando disponível. */\n size?: number;\n /** Linha secundária de metadados. */\n meta?: React.ReactNode;\n /** Descrição opcional exibida abaixo dos metadados. */\n description?: React.ReactNode;\n /** Indica que o item representa um arquivo ainda não persistido. */\n status?: \"pending\" | \"persisted\";\n disabled?: boolean;\n}\n\nexport interface FileListProps extends React.HTMLAttributes<HTMLUListElement> {\n items: FileListItem[];\n onRemove?: (item: FileListItem, index: number) => void;\n onDownload?: (item: FileListItem, index: number) => void;\n disabled?: boolean;\n variant?: \"bordered\" | \"plain\";\n emptyState?: React.ReactNode;\n removeLabel?: string;\n}\n\nexport function FileList({\n items,\n onRemove,\n onDownload,\n disabled = false,\n variant = \"bordered\",\n emptyState,\n removeLabel = \"Remover\",\n className,\n ...props\n}: FileListProps) {\n if (items.length === 0) {\n return emptyState ? <>{emptyState}</> : null;\n }\n\n return (\n <ul\n className={cn(\n \"cnc-divide-y\",\n variant === \"bordered\"\n ? \"cnc-rounded-md cnc-border cnc-border-slate-200 cnc-bg-white cnc-divide-slate-200\"\n : \"cnc-bg-transparent cnc-divide-slate-100\",\n className\n )}\n {...props}\n >\n {items.map((item, index) => {\n const canRemove = !!onRemove;\n const canDownload = !!onDownload;\n const isDisabled = disabled || item.disabled;\n const isPending = item.status === \"pending\";\n\n return (\n <li\n key={item.id}\n className={cn(\n \"cnc-flex cnc-flex-col cnc-gap-2\",\n variant === \"bordered\"\n ? \"cnc-px-4 cnc-py-3 sm:cnc-flex-row sm:cnc-items-center sm:cnc-justify-between\"\n : \"cnc-px-0 cnc-py-4 first:cnc-pt-0 last:cnc-pb-0 sm:cnc-flex-row sm:cnc-items-center sm:cnc-justify-between\"\n )}\n >\n <div className=\"cnc-flex cnc-min-w-0 cnc-flex-1 cnc-items-start cnc-gap-2\">\n <FileText className=\"cnc-mt-0.5 cnc-size-4 cnc-shrink-0 cnc-text-slate-500\" />\n <div className=\"cnc-min-w-0\">\n {canDownload ? (\n <button\n type=\"button\"\n onClick={() => onDownload(item, index)}\n disabled={isDisabled}\n className=\"cnc-inline-flex cnc-items-center cnc-gap-1 cnc-text-left cnc-text-sm cnc-font-medium cnc-text-[#002f87] hover:cnc-underline disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\"\n >\n <span className=\"cnc-min-w-0 cnc-truncate\">{item.name}</span>\n <Download className=\"cnc-size-3.5 cnc-shrink-0\" />\n </button>\n ) : (\n <p className=\"cnc-text-sm cnc-font-medium cnc-text-slate-800\">\n <span className=\"cnc-break-all\">{item.name}</span>\n </p>\n )}\n\n {(item.meta || item.size !== undefined) && (\n <div className=\"cnc-mt-0.5 cnc-flex cnc-flex-wrap cnc-gap-x-2 cnc-gap-y-1 cnc-text-xs cnc-text-slate-500\">\n {item.meta}\n {item.meta && item.size !== undefined ? <span>·</span> : null}\n {item.size !== undefined ? <span>{formatFileSize(item.size)}</span> : null}\n </div>\n )}\n\n {item.description ? (\n <p className=\"cnc-mt-1 cnc-line-clamp-2 cnc-text-xs cnc-text-slate-600\">\n {item.description}\n </p>\n ) : null}\n </div>\n </div>\n\n {canRemove ? (\n isPending ? (\n <button\n type=\"button\"\n onClick={() => onRemove(item, index)}\n disabled={isDisabled}\n className=\"cnc-inline-flex cnc-shrink-0 cnc-items-center cnc-justify-center cnc-rounded-md cnc-p-1.5 cnc-text-slate-500 cnc-transition hover:cnc-bg-slate-100 hover:cnc-text-slate-800 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-50\"\n aria-label={`Remover ${item.name}`}\n >\n <X className=\"cnc-size-4\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => onRemove(item, index)}\n disabled={isDisabled}\n className=\"cnc-inline-flex cnc-h-9 cnc-w-full cnc-shrink-0 cnc-items-center cnc-justify-center cnc-gap-2 cnc-rounded-md cnc-border cnc-border-red-200 cnc-px-3 cnc-text-sm cnc-font-semibold cnc-text-red-700 cnc-transition hover:cnc-bg-red-50 disabled:cnc-cursor-not-allowed disabled:cnc-opacity-60 sm:cnc-w-auto\"\n aria-label={`Remover ${item.name}`}\n >\n <Trash2 className=\"cnc-size-4\" />\n {removeLabel}\n </button>\n )\n ) : null}\n </li>\n );\n })}\n </ul>\n );\n}\n","export const MESES_PT_BR = [\n \"Janeiro\",\n \"Fevereiro\",\n \"Março\",\n \"Abril\",\n \"Maio\",\n \"Junho\",\n \"Julho\",\n \"Agosto\",\n \"Setembro\",\n \"Outubro\",\n \"Novembro\",\n \"Dezembro\",\n] as const;\n\nexport const MESES_PT_BR_ABREV = [\n \"JAN\",\n \"FEV\",\n \"MAR\",\n \"ABR\",\n \"MAI\",\n \"JUN\",\n \"JUL\",\n \"AGO\",\n \"SET\",\n \"OUT\",\n \"NOV\",\n \"DEZ\",\n] as const;\n\nexport const DIAS_SEMANA_PT_BR = [\"DOM\", \"SEG\", \"TER\", \"QUA\", \"QUI\", \"SEX\", \"SÁB\"] as const;\n\n/** Formata uma Date como `yyyy-MM-dd` no horário local. */\nexport function toDateKey(date: Date): string {\n const ano = date.getFullYear();\n const mes = String(date.getMonth() + 1).padStart(2, \"0\");\n const dia = String(date.getDate()).padStart(2, \"0\");\n return `${ano}-${mes}-${dia}`;\n}\n\n/** Normaliza uma Date para o meio-dia do dia local (evita deslocamento de fuso). */\nexport function toLocalNoon(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 12, 0, 0, 0);\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isToday(date: Date): boolean {\n return isSameDay(date, new Date());\n}\n\nexport interface MonthDay {\n /** Dia ao meio-dia local. */\n date: Date;\n number: number;\n /** Chave `yyyy-MM-dd` do dia. */\n dateKey: string;\n isToday: boolean;\n isSelected: boolean;\n hasItems: boolean;\n}\n\n/**\n * Monta a grade de dias de um mês a partir de domingo.\n * Células `null` no início representam o deslocamento do primeiro dia da semana.\n */\nexport function buildMonthDays(\n month: Date,\n selectedDate?: Date | null,\n hasItems?: (date: Date) => boolean\n): (MonthDay | null)[] {\n const year = month.getFullYear();\n const monthIndex = month.getMonth();\n const totalDays = new Date(year, monthIndex + 1, 0).getDate();\n const startOffset = new Date(year, monthIndex, 1).getDay();\n\n const cells: (MonthDay | null)[] = [];\n for (let i = 0; i < startOffset; i++) {\n cells.push(null);\n }\n\n for (let day = 1; day <= totalDays; day++) {\n const date = new Date(year, monthIndex, day, 12, 0, 0, 0);\n cells.push({\n date,\n number: day,\n dateKey: toDateKey(date),\n isToday: isToday(date),\n isSelected: selectedDate ? isSameDay(date, selectedDate) : false,\n hasItems: hasItems?.(date) ?? false,\n });\n }\n\n return cells;\n}\n\n/** Formata um mês como \"Setembro 2026\". */\nexport function formatMonthYear(date: Date): string {\n return `${MESES_PT_BR[date.getMonth()]} ${date.getFullYear()}`;\n}\n\n/** Rótulo completo de um dia para leitores de tela, ex.: \"quinta-feira, 27 de agosto de 2026\". */\nexport function formatDayAriaLabel(date: Date): string {\n return date.toLocaleDateString(\"pt-BR\", {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n });\n}","\"use client\";\n\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../utils\";\nimport {\n DIAS_SEMANA_PT_BR,\n buildMonthDays,\n formatDayAriaLabel,\n formatMonthYear,\n toLocalNoon,\n type MonthDay,\n} from \"./calendar-utils\";\n\nexport interface MiniMonthCalendarDay extends MonthDay {}\n\nexport interface MiniMonthCalendarProps {\n /** Mês exibido (controlado). Ausente ou vazio usa o mês atual. */\n month?: Date;\n /** Chamado ao navegar para outro mês. */\n onMonthChange?: (month: Date) => void;\n /** Data selecionada (controlada). */\n selectedDate?: Date | null;\n /** Chamado ao clicar em um dia. */\n onSelectDate?: (date: Date) => void;\n /** Indica se o dia tem itens — mostra um ponto indicador abaixo do número. */\n hasItems?: (date: Date) => boolean;\n /** Substitui o conteúdo interno de cada célula de dia. */\n renderDay?: (day: MiniMonthCalendarDay) => React.ReactNode;\n /** Cabeçalho dos dias da semana. Padrão: DOM..SÁB. */\n weekDays?: readonly string[];\n /** Texto do título do mês. Padrão: formatMonthYear. */\n monthLabel?: (month: Date) => string;\n previousLabel?: string;\n nextLabel?: string;\n className?: string;\n}\n\nexport function MiniMonthCalendar({\n month: monthProp,\n onMonthChange,\n selectedDate,\n onSelectDate,\n hasItems,\n renderDay,\n weekDays = DIAS_SEMANA_PT_BR,\n monthLabel = formatMonthYear,\n previousLabel = \"Mês anterior\",\n nextLabel = \"Próximo mês\",\n className,\n}: MiniMonthCalendarProps) {\n const month = React.useMemo(() => toLocalNoon(monthProp ?? new Date()), [monthProp]);\n\n const cells = React.useMemo(\n () => buildMonthDays(month, selectedDate, hasItems),\n [month, selectedDate, hasItems]\n );\n\n const goToMonth = (offset: number) => {\n onMonthChange?.(\n new Date(month.getFullYear(), month.getMonth() + offset, 1, 12, 0, 0, 0)\n );\n };\n\n return (\n <div className={cn(\"cnc-w-full\", className)}>\n <div className=\"cnc-mb-4 cnc-flex cnc-items-center cnc-justify-between cnc-px-1\">\n <button\n type=\"button\"\n onClick={() => goToMonth(-1)}\n aria-label={previousLabel}\n className=\"cnc-rounded cnc-p-1 cnc-text-brand-gray-200 cnc-transition-colors hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n >\n <ChevronLeft className=\"cnc-size-4\" />\n </button>\n <span className=\"cnc-text-sm cnc-font-bold cnc-text-primary\">\n {monthLabel(month)}\n </span>\n <button\n type=\"button\"\n onClick={() => goToMonth(1)}\n aria-label={nextLabel}\n className=\"cnc-rounded cnc-p-1 cnc-text-brand-gray-200 cnc-transition-colors hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n >\n <ChevronRight className=\"cnc-size-4\" />\n </button>\n </div>\n\n <div className=\"cnc-grid cnc-grid-cols-7 cnc-gap-y-3 cnc-text-center cnc-text-xs\">\n {weekDays.map((dayName) => (\n <span\n key={dayName}\n className=\"cnc-text-[11px] cnc-font-medium cnc-text-brand-gray-200\"\n >\n {dayName}\n </span>\n ))}\n\n {cells.map((cell, index) => {\n if (!cell) {\n return <span key={`vazio-${index}`} />;\n }\n\n return (\n <button\n key={cell.dateKey}\n type=\"button\"\n onClick={() => onSelectDate?.(cell.date)}\n aria-label={formatDayAriaLabel(cell.date)}\n aria-pressed={cell.isSelected}\n className={cn(\n \"cnc-group cnc-relative cnc-flex cnc-h-8 cnc-flex-col cnc-items-center cnc-justify-center cnc-rounded-full cnc-transition-colors\",\n cell.isSelected\n ? \"cnc-bg-primary cnc-text-white\"\n : \"cnc-text-brand-gray-600 hover:cnc-bg-brand-blue-50 hover:cnc-text-primary\",\n cell.isToday &&\n !cell.isSelected &&\n \"cnc-underline cnc-decoration-primary cnc-decoration-2 cnc-underline-offset-4\"\n )}\n >\n {renderDay ? (\n renderDay(cell)\n ) : (\n <>\n <span className=\"cnc-text-xs cnc-font-semibold\">{cell.number}</span>\n {cell.hasItems && (\n <span className=\"cnc-absolute cnc-bottom-1 cnc-size-1 cnc-rounded-full cnc-bg-primary group-aria-pressed:cnc-bg-white\" />\n )}\n </>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}","\"use client\";\n\nimport { ChevronDown, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { cn } from \"../../utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../molecules/overlay/popover\";\nimport { MESES_PT_BR_ABREV, formatMonthYear } from \"./calendar-utils\";\n\nexport interface MonthYearPickerProps {\n /** Mês/ano atual (controlado). */\n value: Date;\n onChange: (date: Date) => void;\n disabled?: boolean;\n /** Texto do trigger. Padrão: formatMonthYear. */\n triggerLabel?: (value: Date) => string;\n previousYearLabel?: string;\n nextYearLabel?: string;\n className?: string;\n triggerClassName?: string;\n contentClassName?: string;\n}\n\nexport function MonthYearPicker({\n value,\n onChange,\n disabled = false,\n triggerLabel = formatMonthYear,\n previousYearLabel = \"Ano anterior\",\n nextYearLabel = \"Próximo ano\",\n className,\n triggerClassName,\n contentClassName,\n}: MonthYearPickerProps) {\n const [open, setOpen] = React.useState(false);\n const [viewYear, setViewYear] = React.useState(() => value.getFullYear());\n\n // Ao abrir, sincroniza a navegação de anos com o valor controlado.\n React.useEffect(() => {\n if (open) setViewYear(value.getFullYear());\n }, [open, value]);\n\n const isSelectedMonth = (monthIndex: number) =>\n value.getFullYear() === viewYear && value.getMonth() === monthIndex;\n\n const handleMonthSelect = (monthIndex: number) => {\n // Clampa o dia para o último dia existente no mês (ex.: 31 → 30, fev → 28/29).\n const lastDay = new Date(viewYear, monthIndex + 1, 0).getDate();\n const day = Math.min(value.getDate(), lastDay);\n onChange(new Date(viewYear, monthIndex, day));\n setOpen(false);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={disabled}\n aria-expanded={open}\n className={cn(\n \"cnc-justify-between cnc-gap-2 cnc-font-bold\",\n triggerClassName\n )}\n >\n <span className=\"cnc-text-sm\">{triggerLabel(value)}</span>\n <ChevronDown\n className={cn(\n \"cnc-size-4 cnc-transition-transform\",\n open && \"cnc-rotate-180\"\n )}\n />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\"cnc-w-72 cnc-p-4\", className, contentClassName)}\n >\n <div className=\"cnc-mb-4 cnc-flex cnc-items-center cnc-justify-between\">\n <button\n type=\"button\"\n onClick={() => setViewYear((prev) => prev - 1)}\n aria-label={previousYearLabel}\n className=\"cnc-rounded-full cnc-p-1 cnc-text-brand-gray-200 cnc-transition-colors hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n >\n <ChevronLeft className=\"cnc-size-5\" />\n </button>\n <span className=\"cnc-text-base cnc-font-bold cnc-text-primary\">\n {viewYear}\n </span>\n <button\n type=\"button\"\n onClick={() => setViewYear((prev) => prev + 1)}\n aria-label={nextYearLabel}\n className=\"cnc-rounded-full cnc-p-1 cnc-text-brand-gray-200 cnc-transition-colors hover:cnc-bg-brand-blue-50 hover:cnc-text-brand-blue-600\"\n >\n <ChevronRight className=\"cnc-size-5\" />\n </button>\n </div>\n\n <div className=\"cnc-grid cnc-grid-cols-3 cnc-gap-x-2 cnc-gap-y-1\">\n {MESES_PT_BR_ABREV.map((month, monthIndex) => (\n <button\n key={month}\n type=\"button\"\n onClick={() => handleMonthSelect(monthIndex)}\n aria-pressed={isSelectedMonth(monthIndex)}\n className={cn(\n \"cnc-rounded-lg cnc-py-2 cnc-text-[10px] cnc-font-bold cnc-uppercase cnc-transition-colors\",\n isSelectedMonth(monthIndex)\n ? \"cnc-bg-primary-800 cnc-text-white cnc-shadow-md\"\n : \"cnc-text-brand-gray-200 hover:cnc-bg-brand-blue-50 hover:cnc-text-primary\"\n )}\n >\n {month}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n );\n}","\"use client\";\n\nimport { Plus, Trash2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { Input } from \"../../atoms/forms/input\";\nimport { cn } from \"../../utils\";\n\nexport interface PeriodRange {\n /** Identificador estável para React (gerado se ausente) */\n id?: string;\n start: string;\n end: string;\n}\n\nexport type PeriodRangeInputType = \"datetime-local\" | \"date\";\n\nexport interface PeriodRangeListLabels {\n start?: string;\n end?: string;\n add?: string;\n empty?: string;\n startColumn?: string;\n endColumn?: string;\n actionsColumn?: string;\n}\n\nexport interface PeriodRangeListValidateOptions {\n endAfterStart?: boolean;\n noDuplicates?: boolean;\n minItems?: number;\n}\n\nexport interface PeriodRangeListProps {\n value?: PeriodRange[];\n onChange?: (periods: PeriodRange[]) => void;\n inputType?: PeriodRangeInputType;\n labels?: PeriodRangeListLabels;\n readOnly?: boolean;\n disabled?: boolean;\n required?: boolean;\n error?: string;\n validate?: PeriodRangeListValidateOptions;\n className?: string;\n}\n\nconst DEFAULT_LABELS: Required<PeriodRangeListLabels> = {\n start: \"Início\",\n end: \"Fim\",\n add: \"Adicionar\",\n empty: \"Nenhum período adicionado.\",\n startColumn: \"Início\",\n endColumn: \"Fim\",\n actionsColumn: \"Ações\",\n};\n\nfunction createPeriodId() {\n return `period-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction normalizePeriods(periods: PeriodRange[]): PeriodRange[] {\n return periods.map((period) => ({\n ...period,\n id: period.id ?? createPeriodId(),\n }));\n}\n\nfunction formatForDisplay(value: string, inputType: PeriodRangeInputType): string {\n if (!value) return \"\";\n\n if (inputType === \"date\") {\n const [year, month, day] = value.split(\"-\");\n if (year && month && day) return `${day}/${month}/${year}`;\n return value;\n }\n\n const normalized = value.slice(0, 16);\n const [datePart, timePart] = normalized.split(\"T\");\n if (!datePart) return value;\n\n const [year, month, day] = datePart.split(\"-\");\n const dateText =\n year && month && day ? `${day}/${month}/${year}` : datePart;\n return timePart ? `${dateText} ${timePart}` : dateText;\n}\n\nfunction splitDisplay(value: string, inputType: PeriodRangeInputType) {\n const formatted = formatForDisplay(value, inputType);\n if (inputType === \"date\") {\n return { date: formatted, time: \"\" };\n }\n\n const parts = formatted.split(\" \");\n if (parts.length <= 1) {\n return { date: formatted, time: \"\" };\n }\n\n const time = parts.pop() ?? \"\";\n return { date: parts.join(\" \"), time };\n}\n\nexport function PeriodRangeList({\n value = [],\n onChange,\n inputType = \"datetime-local\",\n labels: labelsProp,\n readOnly = false,\n disabled = false,\n required = false,\n error,\n validate,\n className,\n}: PeriodRangeListProps) {\n const labels = { ...DEFAULT_LABELS, ...labelsProp };\n const endAfterStart = validate?.endAfterStart ?? true;\n const noDuplicates = validate?.noDuplicates ?? true;\n\n const [startDraft, setStartDraft] = React.useState(\"\");\n const [endDraft, setEndDraft] = React.useState(\"\");\n\n const periods = React.useMemo(() => normalizePeriods(value), [value]);\n\n const isInvalidRange =\n Boolean(startDraft && endDraft) &&\n endAfterStart &&\n startDraft >= endDraft;\n\n const isDuplicate =\n Boolean(startDraft && endDraft) &&\n noDuplicates &&\n periods.some(\n (period) => period.start === startDraft && period.end === endDraft\n );\n\n const canAdd =\n Boolean(startDraft && endDraft) && !isInvalidRange && !isDuplicate;\n\n const addTitle = isDuplicate\n ? \"Este período já foi adicionado\"\n : isInvalidRange\n ? \"A data final deve ser posterior à data inicial\"\n : undefined;\n\n function emitChange(next: PeriodRange[]) {\n onChange?.(normalizePeriods(next));\n }\n\n function handleAdd() {\n if (!canAdd || disabled || readOnly) return;\n\n emitChange([\n ...periods,\n {\n id: createPeriodId(),\n start: startDraft,\n end: endDraft,\n },\n ]);\n setStartDraft(\"\");\n setEndDraft(\"\");\n }\n\n function handleRemove(id: string) {\n if (disabled || readOnly) return;\n emitChange(periods.filter((period) => period.id !== id));\n }\n\n const showRequiredOnInputs = required && periods.length === 0;\n\n return (\n <div className={cn(\"cnc-w-full cnc-space-y-4\", className)}>\n {!readOnly && (\n <div className=\"cnc-grid cnc-grid-cols-1 md:cnc-grid-cols-12 cnc-gap-4 cnc-items-end\">\n <div className=\"md:cnc-col-span-5\">\n <Input\n type={inputType}\n label={labels.start}\n required={showRequiredOnInputs}\n value={startDraft}\n disabled={disabled}\n onChange={(event) => setStartDraft(event.target.value)}\n />\n </div>\n <div className=\"md:cnc-col-span-5\">\n <Input\n type={inputType}\n label={labels.end}\n required={showRequiredOnInputs}\n value={endDraft}\n min={startDraft || undefined}\n disabled={disabled}\n onChange={(event) => setEndDraft(event.target.value)}\n />\n </div>\n <div className=\"md:cnc-col-span-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"cnc-w-full cnc-gap-2\"\n disabled={!canAdd || disabled}\n title={addTitle}\n onClick={handleAdd}\n >\n <Plus className=\"cnc-h-4 cnc-w-4\" />\n {labels.add}\n </Button>\n </div>\n </div>\n )}\n\n <div className=\"cnc-overflow-hidden cnc-rounded-lg cnc-border cnc-border-brand-gray-50 cnc-shadow-sm\">\n <table className=\"cnc-min-w-full cnc-divide-y cnc-divide-brand-gray-50\">\n <thead className=\"cnc-bg-brand-gray-10\">\n <tr>\n <th className=\"cnc-px-6 cnc-py-3 cnc-text-left cnc-text-xs cnc-font-semibold cnc-uppercase cnc-tracking-wider cnc-text-brand-gray-600\">\n {labels.startColumn}\n </th>\n <th className=\"cnc-px-6 cnc-py-3 cnc-text-left cnc-text-xs cnc-font-semibold cnc-uppercase cnc-tracking-wider cnc-text-brand-gray-600\">\n {labels.endColumn}\n </th>\n {!readOnly && (\n <th className=\"cnc-px-6 cnc-py-3 cnc-text-right cnc-text-xs cnc-font-semibold cnc-uppercase cnc-tracking-wider cnc-text-brand-gray-600\">\n {labels.actionsColumn}\n </th>\n )}\n </tr>\n </thead>\n <tbody className=\"cnc-divide-y cnc-divide-brand-gray-50 cnc-bg-white cnc-text-sm\">\n {periods.map((period) => {\n const startDisplay = splitDisplay(period.start, inputType);\n const endDisplay = splitDisplay(period.end, inputType);\n\n return (\n <tr key={period.id} className=\"hover:cnc-bg-brand-gray-10/50\">\n <td className=\"cnc-px-6 cnc-py-4 cnc-text-brand-gray-600\">\n <span className=\"cnc-font-medium cnc-text-brand-gray-600\">\n {startDisplay.date}\n </span>\n {startDisplay.time ? (\n <span className=\"cnc-ml-2 cnc-text-brand-gray-200\">\n {startDisplay.time}\n </span>\n ) : null}\n </td>\n <td className=\"cnc-px-6 cnc-py-4 cnc-text-brand-gray-600\">\n <span className=\"cnc-font-medium cnc-text-brand-gray-600\">\n {endDisplay.date}\n </span>\n {endDisplay.time ? (\n <span className=\"cnc-ml-2 cnc-text-brand-gray-200\">\n {endDisplay.time}\n </span>\n ) : null}\n </td>\n {!readOnly && (\n <td className=\"cnc-px-6 cnc-py-4 cnc-text-right\">\n <button\n type=\"button\"\n className=\"cnc-text-brand-gray-200 hover:cnc-text-brand-red-500 cnc-transition-colors disabled:cnc-opacity-50\"\n disabled={disabled}\n aria-label=\"Remover período\"\n onClick={() => handleRemove(period.id!)}\n >\n <Trash2 className=\"cnc-h-5 cnc-w-5\" />\n </button>\n </td>\n )}\n </tr>\n );\n })}\n {periods.length === 0 && (\n <tr>\n <td\n colSpan={readOnly ? 2 : 3}\n className=\"cnc-px-6 cnc-py-8 cnc-text-center cnc-text-brand-gray-200 cnc-italic\"\n >\n {labels.empty}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n {error ? (\n <p className=\"cnc-text-xs cnc-font-medium cnc-text-brand-red-500\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/** Alias explícito para formulários só com data */\nexport const DateTimeRangeList = PeriodRangeList;\n","\"use client\";\n\nimport { Bell, BellOff, Mail, MailOpen, Trash2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../Popover\";\nimport { cn } from \"../../utils\";\nimport { URL_PADRAO_NOTIFICACOES } from \"./cliente\";\nimport {\n contarNaoLidas,\n mapearParaItem,\n selecionarLembretesVencidos,\n selecionarVisiveis,\n} from \"./mapear\";\nimport { ModalLembretes } from \"./modal-lembretes\";\nimport type {\n HeaderNotificationItem,\n HeaderNotificationsBaseProps,\n HeaderNotificationsProps,\n Notificacao,\n} from \"./tipos\";\nimport { usarNotificacoes } from \"./usar-notificacoes\";\n\nexport { ErroNotificacoes, URL_PADRAO_NOTIFICACOES } from \"./cliente\";\nexport type {\n HeaderNotificationItem,\n HeaderNotificationsBaseProps,\n HeaderNotificationsConectadoProps,\n HeaderNotificationsControladoProps,\n HeaderNotificationsProps,\n Notificacao,\n StatusLeitura,\n StatusNotificacao,\n} from \"./tipos\";\n\ntype PropsInternas = HeaderNotificationsBaseProps & {\n items?: HeaderNotificationItem[];\n isLoading?: boolean;\n unreadCount?: number;\n email?: string;\n sistema?: string;\n baseUrl?: string;\n getHref?: (notificacao: Notificacao) => string | undefined;\n filtros?: Record<string, string>;\n intervaloAtualizacao?: number;\n limite?: number;\n onErro?: (erro: Error) => void;\n alertarLembretes?: boolean;\n tituloLembretes?: string;\n rotuloDispensarLembretes?: string;\n};\n\n/**\n * Sino de notificações do cabeçalho: badge de não lidas, painel com a lista,\n * estados de loading e vazio, marcar todas como lidas e atalho para a tela\n * completa.\n *\n * Opera em dois modos, mutuamente exclusivos pelo tipo:\n *\n * **Conectado** — recebe `email` e `sistema` e cuida sozinho de buscar,\n * formatar a data, filtrar o que já aconteceu e marcar como lida. `baseUrl` é\n * opcional e cai em `URL_PADRAO_NOTIFICACOES`, que aponta para o ambiente de\n * desenvolvimento — em produção passe a prop.\n *\n * **Controlado** — recebe `items` já prontos e devolve as interações por\n * callback, sem fazer nenhuma requisição.\n *\n * @example\n * <HeaderContainer\n * onOpenMenu={toggleSidebar}\n * isOpen={collapsed}\n * notifications={\n * <HeaderNotifications\n * email={sessao.user.email}\n * sistema=\"gestao-demandas\"\n * getHref={(n) => `/demandas/${n.metadados?.demandaId}`}\n * onViewAll={() => router.push(\"/notificacoes\")}\n * />\n * }\n * >\n * <HeaderProfileHeader user={usuario}>...</HeaderProfileHeader>\n * </HeaderContainer>\n */\nexport function HeaderNotifications(props: HeaderNotificationsProps) {\n const {\n items = [],\n isLoading = false,\n skeletonCount = 3,\n title = \"Notificações\",\n emptyMessage = \"Nenhuma notificação\",\n unreadCount,\n maxCount = 9,\n onSelect,\n onMarkAsRead,\n onMarkAsUnread,\n onDelete,\n onMarkAllAsRead,\n onOpenChange,\n footer,\n align = \"end\",\n className,\n contentClassName,\n email,\n sistema,\n baseUrl = URL_PADRAO_NOTIFICACOES,\n getHref,\n filtros,\n intervaloAtualizacao,\n limite = 20,\n onErro,\n alertarLembretes = false,\n tituloLembretes,\n rotuloDispensarLembretes,\n } = props as PropsInternas;\n\n const [aberto, setAberto] = React.useState(false);\n const [lembretesEmAlerta, setLembretesEmAlerta] = React.useState<Notificacao[]>(\n []\n );\n const avaliouLembretesRef = React.useRef(false);\n\n const conectado = Boolean(email && sistema);\n\n const remoto = usarNotificacoes({\n email: email ?? \"\",\n sistema: sistema ?? \"\",\n baseUrl,\n filtros,\n intervaloAtualizacao,\n habilitado: conectado,\n onErro,\n });\n\n const elegiveis = React.useMemo(\n () => (conectado ? selecionarVisiveis(remoto.notificacoes) : []),\n [conectado, remoto.notificacoes]\n );\n\n const itensRemotos = React.useMemo(\n () =>\n elegiveis\n .slice(0, limite)\n .map((notificacao) => mapearParaItem(notificacao, getHref)),\n [elegiveis, limite, getHref]\n );\n\n const itens = conectado ? itensRemotos : items;\n const carregandoLista = conectado ? remoto.carregando : isLoading;\n\n React.useEffect(() => {\n if (!conectado || !alertarLembretes) return;\n if (remoto.carregando || avaliouLembretesRef.current) return;\n\n avaliouLembretesRef.current = true;\n setLembretesEmAlerta(selecionarLembretesVencidos(remoto.notificacoes));\n }, [conectado, alertarLembretes, remoto.carregando, remoto.notificacoes]);\n\n const dispensarLembretes = () => {\n remoto.marcarComoLidas(lembretesEmAlerta.map((lembrete) => lembrete.id));\n setLembretesEmAlerta([]);\n };\n\n const naoLidas = conectado\n ? contarNaoLidas(elegiveis)\n : unreadCount ?? items.filter((item) => !item.read).length;\n\n const rotuloContagem = naoLidas > maxCount ? `${maxCount}+` : `${naoLidas}`;\n\n const alterarAbertura = (proximoEstado: boolean) => {\n setAberto(proximoEstado);\n if (proximoEstado && conectado) remoto.atualizar();\n onOpenChange?.(proximoEstado);\n };\n\n const selecionar = (item: HeaderNotificationItem) => {\n if (!item.read) {\n if (conectado) remoto.marcarUmaComoLida(item.id);\n onMarkAsRead?.(item);\n }\n\n if (!onSelect) return;\n\n onSelect(item);\n alterarAbertura(false);\n };\n\n const marcarTodas = () => {\n if (conectado) remoto.marcarTodasComoLidas();\n onMarkAllAsRead?.();\n };\n\n const alternarLeitura = (item: HeaderNotificationItem) => {\n if (item.read) {\n if (conectado) remoto.marcarUmaComoNaoLida(item.id);\n onMarkAsUnread?.(item);\n return;\n }\n\n if (conectado) remoto.marcarUmaComoLida(item.id);\n onMarkAsRead?.(item);\n };\n\n const excluirItem = (item: HeaderNotificationItem) => {\n if (conectado) remoto.excluir(item.id);\n onDelete?.(item);\n };\n\n const podeMarcarTodas = conectado || Boolean(onMarkAllAsRead);\n const podeAlternarLeitura = conectado || Boolean(onMarkAsUnread);\n const podeExcluir = conectado || Boolean(onDelete);\n const alvoClicavel = conectado || Boolean(onSelect) || Boolean(onMarkAsRead);\n\n const anelDeFoco =\n \"focus-visible:cnc-ring-2 focus-visible:cnc-ring-inset focus-visible:cnc-ring-brand-gray-500/50\";\n\n const renderarConteudo = () => {\n if (carregandoLista) {\n return (\n <div aria-busy=\"true\">\n {Array.from({ length: skeletonCount }).map((_, indice) => (\n <div\n key={indice}\n className=\"cnc-flex cnc-border-b cnc-border-l-[3px] cnc-border-brand-gray-50 cnc-border-l-transparent cnc-py-3 cnc-pl-3 cnc-pr-4 last:cnc-border-b-0\"\n >\n <div className=\"cnc-flex cnc-w-full cnc-flex-col cnc-gap-2\">\n <div className=\"cnc-h-3 cnc-w-1/2 cnc-animate-pulse cnc-rounded cnc-bg-brand-gray-20\" />\n <div className=\"cnc-h-3 cnc-w-3/4 cnc-animate-pulse cnc-rounded cnc-bg-brand-gray-20\" />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (itens.length === 0) {\n return (\n <div className=\"cnc-flex cnc-flex-col cnc-items-center cnc-justify-center cnc-px-4 cnc-py-12 cnc-text-brand-gray-200\">\n <BellOff className=\"cnc-mb-2 cnc-h-7 cnc-w-7\" aria-hidden=\"true\" />\n <p className=\"cnc-text-sm\">{emptyMessage}</p>\n </div>\n );\n }\n\n return (\n <ul className=\"cnc-m-0 cnc-list-none cnc-p-0\">\n {itens.map((item) => {\n const conteudo = (\n <span className=\"cnc-flex cnc-min-w-0 cnc-flex-1 cnc-flex-col cnc-gap-0.5\">\n <span className=\"cnc-flex cnc-items-baseline cnc-justify-between cnc-gap-2\">\n <span\n className={cn(\n \"cnc-truncate cnc-text-sm cnc-text-brand-blue-900\",\n item.read ? \"cnc-font-medium\" : \"cnc-font-bold\"\n )}\n >\n {item.title}\n </span>\n {item.date && (\n <span className=\"cnc-shrink-0 cnc-text-[11px] cnc-text-brand-gray-600\">\n {item.date}\n </span>\n )}\n </span>\n {item.message && (\n <span className=\"cnc-line-clamp-2 cnc-text-xs cnc-text-brand-gray-600\">\n {item.message}\n </span>\n )}\n {!item.read && <span className=\"cnc-sr-only\">Não lida</span>}\n </span>\n );\n\n const classesLinha = cn(\n \"cnc-flex cnc-w-full cnc-items-start cnc-border-l-[3px] cnc-transition cnc-duration-200\",\n item.read\n ? \"cnc-border-l-transparent hover:cnc-bg-brand-blue-50\"\n : \"cnc-border-l-brand-blue-400 cnc-bg-brand-blue-50 hover:cnc-bg-brand-blue-60\"\n );\n\n const classesAlvo = cn(\n \"cnc-flex cnc-min-w-0 cnc-flex-1 cnc-bg-transparent cnc-py-3 cnc-pl-3 cnc-pr-2 cnc-text-left cnc-no-underline cnc-outline-none\",\n alvoClicavel && \"cnc-cursor-pointer\",\n anelDeFoco\n );\n\n const classesAcao = cn(\n \"cnc-flex cnc-h-7 cnc-w-7 cnc-shrink-0 cnc-cursor-pointer cnc-items-center cnc-justify-center cnc-rounded cnc-border-0 cnc-bg-transparent cnc-p-0 cnc-text-brand-gray-200 cnc-outline-none cnc-transition cnc-duration-200 hover:cnc-bg-white\",\n anelDeFoco\n );\n\n const renderarAlvo = () =>\n alvoClicavel ? (\n <button\n type=\"button\"\n onClick={() => selecionar(item)}\n className={classesAlvo}\n >\n {conteudo}\n </button>\n ) : (\n <div className={classesAlvo}>{conteudo}</div>\n );\n\n const rotuloLeitura = item.read\n ? \"Marcar como não lida\"\n : \"Marcar como lida\";\n\n return (\n <li\n key={item.id}\n className=\"cnc-border-b cnc-border-brand-gray-50 last:cnc-border-b-0\"\n >\n <div className={classesLinha}>\n {renderarAlvo()}\n\n {(podeAlternarLeitura || podeExcluir) && (\n <div className=\"cnc-flex cnc-shrink-0 cnc-items-center cnc-gap-1 cnc-py-3 cnc-pr-2\">\n {podeAlternarLeitura && (\n <button\n type=\"button\"\n aria-label={rotuloLeitura}\n title={rotuloLeitura}\n onClick={() => alternarLeitura(item)}\n className={cn(\n classesAcao,\n \"hover:cnc-text-brand-blue-400\"\n )}\n >\n {item.read ? (\n <Mail className=\"cnc-h-4 cnc-w-4\" aria-hidden=\"true\" />\n ) : (\n <MailOpen\n className=\"cnc-h-4 cnc-w-4\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n )}\n\n {podeExcluir && (\n <button\n type=\"button\"\n aria-label=\"Excluir notificação\"\n title=\"Excluir notificação\"\n onClick={() => excluirItem(item)}\n className={cn(classesAcao, \"hover:cnc-text-brand-red-600\")}\n >\n <Trash2 className=\"cnc-h-4 cnc-w-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n )}\n </div>\n </li>\n );\n })}\n </ul>\n );\n };\n\n const temRodapePadrao = podeMarcarTodas && naoLidas > 0;\n\n return (\n <>\n {alertarLembretes && (\n <ModalLembretes\n lembretes={lembretesEmAlerta}\n aberto={lembretesEmAlerta.length > 0}\n onDispensar={dispensarLembretes}\n titulo={tituloLembretes}\n rotuloDispensar={rotuloDispensarLembretes}\n />\n )}\n <Popover open={aberto} onOpenChange={alterarAbertura}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-label={\n naoLidas > 0\n ? `${title}, ${naoLidas} não ${naoLidas === 1 ? \"lida\" : \"lidas\"}`\n : title\n }\n className={cn(\n \"cnc-relative cnc-flex cnc-h-10 cnc-w-10 cnc-items-center cnc-justify-center cnc-rounded-full cnc-transition cnc-duration-300 cnc-ease-in-out hover:cnc-bg-brand-blue-60 data-[state=open]:cnc-bg-brand-blue-60 cnc-cursor-pointer cnc-outline-none cnc-header-item\",\n anelDeFoco,\n className\n )}\n >\n <Bell\n className=\"cnc-h-5 cnc-w-5 cnc-text-brand-blue-900 cnc-header-item\"\n aria-hidden=\"true\"\n />\n {naoLidas > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"cnc-absolute -cnc-right-0.5 -cnc-top-0.5 cnc-flex cnc-h-[18px] cnc-min-w-[18px] cnc-items-center cnc-justify-center cnc-rounded-full cnc-border-2 cnc-border-white cnc-bg-brand-red-500 cnc-px-1 cnc-text-[10px] cnc-font-bold cnc-leading-none cnc-text-white\"\n >\n {rotuloContagem}\n </span>\n )}\n </button>\n </PopoverTrigger>\n\n <PopoverContent\n align={align}\n sideOffset={20}\n aria-label={title}\n style={{ width: \"min(380px, calc(100vw - 2rem))\", padding: 0 }}\n className={cn(\n \"cnc-overflow-hidden cnc-rounded-lg cnc-border cnc-border-brand-gray-50 cnc-bg-white cnc-shadow-custom\",\n contentClassName\n )}\n >\n <div className=\"cnc-flex cnc-items-center cnc-justify-between cnc-gap-2 cnc-border-b cnc-border-brand-gray-50 cnc-px-4 cnc-py-3\">\n <h2 className=\"cnc-m-0 cnc-text-base cnc-font-extrabold cnc-text-brand-blue-900\">\n {title}\n </h2>\n {naoLidas > 0 && (\n <span className=\"cnc-rounded-md cnc-bg-brand-blue-60 cnc-px-2 cnc-py-1 cnc-text-xs cnc-font-semibold cnc-text-brand-blue-400\">\n {naoLidas === 1 ? \"1 nova\" : `${naoLidas} novas`}\n </span>\n )}\n </div>\n\n <div className=\"cnc-max-h-[360px] cnc-overflow-y-auto\">\n {renderarConteudo()}\n </div>\n\n {footer ? (\n <div className=\"cnc-border-t cnc-border-brand-gray-50 cnc-px-4 cnc-py-3\">\n {footer}\n </div>\n ) : (\n temRodapePadrao && (\n <div className=\"cnc-flex cnc-justify-end cnc-border-t cnc-border-brand-gray-50 cnc-px-4 cnc-py-3\">\n <button\n type=\"button\"\n onClick={marcarTodas}\n className={cn(\n \"cnc-cursor-pointer cnc-rounded cnc-bg-transparent cnc-p-0 cnc-text-xs cnc-font-semibold cnc-text-brand-blue-100 cnc-outline-none hover:cnc-underline\",\n anelDeFoco\n )}\n >\n Marcar todas como lidas\n </button>\n </div>\n )\n )}\n </PopoverContent>\n </Popover>\n </>\n );\n}\n","import type { Notificacao, StatusLeitura } from \"./tipos\";\n\n/**\n * Usada quando `baseUrl` não é informada. Aponta para o ambiente de\n * desenvolvimento — em produção passe a prop explicitamente, senão a aplicação\n * lê e grava no dev.\n */\nexport const URL_PADRAO_NOTIFICACOES =\n \"https://dev-apinotificacoes-b5feekb4bdfyb7c2.eastus2-01.azurewebsites.net/v1\";\n\nexport class ErroNotificacoes extends Error {\n readonly status?: number;\n\n constructor(mensagem: string, status?: number) {\n super(mensagem);\n this.name = \"ErroNotificacoes\";\n this.status = status;\n Object.setPrototypeOf(this, ErroNotificacoes.prototype);\n }\n}\n\nexport function normalizarBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, \"\");\n}\n\nexport function extrairLista(payload: unknown): Notificacao[] {\n if (Array.isArray(payload)) return payload as Notificacao[];\n\n if (payload && typeof payload === \"object\") {\n const registro = payload as Record<string, unknown>;\n const chaves = [\"dados\", \"data\", \"notificacoes\", \"items\", \"content\"];\n\n for (const chave of chaves) {\n if (Array.isArray(registro[chave])) return registro[chave] as Notificacao[];\n }\n }\n\n return [];\n}\n\nexport interface ParametrosBusca {\n baseUrl: string;\n email: string;\n sistema: string;\n filtros?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport async function buscarNotificacoes({\n baseUrl,\n email,\n sistema,\n filtros,\n signal,\n}: ParametrosBusca): Promise<Notificacao[]> {\n const parametros = new URLSearchParams({ email, sistema });\n\n for (const [chave, valor] of Object.entries(filtros ?? {})) {\n if (valor !== undefined && valor !== null) parametros.set(chave, String(valor));\n }\n\n const resposta = await fetch(\n `${normalizarBaseUrl(baseUrl)}/notificacoes?${parametros.toString()}`,\n { method: \"GET\", headers: { Accept: \"application/json\" }, signal }\n );\n\n if (!resposta.ok) {\n throw new ErroNotificacoes(\n `Falha ao buscar notificações de ${sistema}`,\n resposta.status\n );\n }\n\n return extrairLista(await resposta.json());\n}\n\nexport interface ParametrosMarcarUma {\n baseUrl: string;\n id: Notificacao[\"id\"];\n signal?: AbortSignal;\n}\n\nasync function definirStatusLeitura(\n { baseUrl, id, signal }: ParametrosMarcarUma,\n statusLeitura: StatusLeitura\n): Promise<void> {\n const resposta = await fetch(\n `${normalizarBaseUrl(baseUrl)}/notificacoes/${encodeURIComponent(String(id))}`,\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ statusLeitura }),\n signal,\n }\n );\n\n if (!resposta.ok) {\n throw new ErroNotificacoes(\n `Falha ao definir a notificação ${id} como ${statusLeitura}`,\n resposta.status\n );\n }\n}\n\nexport function marcarComoLida(parametros: ParametrosMarcarUma): Promise<void> {\n return definirStatusLeitura(parametros, \"LIDO\");\n}\n\nexport function marcarComoNaoLida(\n parametros: ParametrosMarcarUma\n): Promise<void> {\n return definirStatusLeitura(parametros, \"NAO_LIDO\");\n}\n\n/** Exclusão definitiva — a API não tem lixeira nem desfazer. */\nexport async function excluirNotificacao({\n baseUrl,\n id,\n signal,\n}: ParametrosMarcarUma): Promise<void> {\n const resposta = await fetch(\n `${normalizarBaseUrl(baseUrl)}/notificacoes/${encodeURIComponent(String(id))}`,\n { method: \"DELETE\", signal }\n );\n\n if (!resposta.ok) {\n throw new ErroNotificacoes(\n `Falha ao excluir a notificação ${id}`,\n resposta.status\n );\n }\n}\n\n/**\n * O `GET` devolve `id` como string, mas `PUT /notificacoes/lote` valida o campo\n * como inteiro e responde 400 se receber string. No `PUT /notificacoes/:id` não\n * há problema, porque o id vai na URL.\n */\nexport function normalizarId(id: Notificacao[\"id\"]): string | number {\n if (typeof id === \"number\") return id;\n return /^\\d+$/.test(id) ? Number(id) : id;\n}\n\nexport interface ParametrosMarcarVarias {\n baseUrl: string;\n ids: Array<Notificacao[\"id\"]>;\n signal?: AbortSignal;\n}\n\nexport async function marcarVariasComoLidas({\n baseUrl,\n ids,\n signal,\n}: ParametrosMarcarVarias): Promise<void> {\n if (ids.length === 0) return;\n\n const resposta = await fetch(`${normalizarBaseUrl(baseUrl)}/notificacoes/lote`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n notificacoes: ids.map((id) => ({\n id: normalizarId(id),\n statusLeitura: \"LIDO\",\n })),\n }),\n signal,\n });\n\n if (!resposta.ok) {\n throw new ErroNotificacoes(\n `Falha ao marcar ${ids.length} notificações como lidas`,\n resposta.status\n );\n }\n}\n","import type {\n HeaderNotificationItem,\n Notificacao,\n StatusNotificacao,\n} from \"./tipos\";\n\nconst UM_MINUTO = 60_000;\nconst UMA_HORA = 60 * UM_MINUTO;\nconst UM_DIA = 24 * UMA_HORA;\nconst SETE_DIAS = 7 * UM_DIA;\n\nexport function formatarDataRelativa(\n valor?: string | null,\n agora: number = Date.now()\n): string | undefined {\n if (!valor) return undefined;\n\n const data = new Date(valor);\n const instante = data.getTime();\n if (Number.isNaN(instante)) return undefined;\n\n const diferenca = agora - instante;\n const modulo = Math.abs(diferenca);\n\n if (diferenca >= SETE_DIAS) {\n return new Intl.DateTimeFormat(\"pt-BR\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"2-digit\",\n }).format(data);\n }\n\n if (modulo < UM_MINUTO) return \"agora\";\n\n const formatador = new Intl.RelativeTimeFormat(\"pt-BR\", { numeric: \"auto\" });\n const sinal = diferenca < 0 ? 1 : -1;\n\n if (modulo < UMA_HORA) {\n return formatador.format(sinal * Math.trunc(modulo / UM_MINUTO), \"minute\");\n }\n\n if (modulo < UM_DIA) {\n return formatador.format(sinal * Math.trunc(modulo / UMA_HORA), \"hour\");\n }\n\n return formatador.format(sinal * Math.trunc(modulo / UM_DIA), \"day\");\n}\n\nfunction instanteDe(notificacao: Notificacao): number {\n const bruto = notificacao.disparadoEm ?? notificacao.dataReferencia;\n const instante = bruto ? new Date(bruto).getTime() : Number.NaN;\n return Number.isNaN(instante) ? 0 : instante;\n}\n\nconst STATUS_OCULTOS: StatusNotificacao[] = [\"CANCELADO\", \"FALHOU\"];\n\n/**\n * `disparadoEm` é o sinal preferido, porque alerta com `alertasDiasAntes`\n * dispara antes da `dataReferencia`. Quando ele não vem preenchido — registro\n * que o serviço ainda não processou — a data de referência vencida serve de\n * segundo sinal, para o painel não esconder o que o usuário já deveria ver.\n */\nfunction jaAconteceu(notificacao: Notificacao, agora: number): boolean {\n if (notificacao.disparadoEm) return true;\n\n const referencia = notificacao.dataReferencia\n ? new Date(notificacao.dataReferencia).getTime()\n : Number.NaN;\n\n return !Number.isNaN(referencia) && referencia <= agora;\n}\n\n/**\n * Mantém apenas o que já aconteceu e não foi cancelado nem falhou, da mais\n * recente para a mais antiga.\n */\nexport function selecionarVisiveis(\n notificacoes: Notificacao[],\n limite: number = Number.POSITIVE_INFINITY,\n agora: number = Date.now()\n): Notificacao[] {\n return notificacoes\n .filter(\n (notificacao) =>\n Boolean(notificacao) &&\n jaAconteceu(notificacao, agora) &&\n !STATUS_OCULTOS.includes(notificacao.status)\n )\n .sort((a, b) => instanteDe(b) - instanteDe(a))\n .slice(0, limite);\n}\n\n/**\n * Lembretes que já venceram e ainda não foram vistos. É o que separa alerta de\n * notificação: só entra quem tem `lembrarNoDia` ligado e `dataLembrete`\n * preenchido. Notificação instantânea nunca vira alerta.\n */\nexport function selecionarLembretesVencidos(\n notificacoes: Notificacao[],\n agora: number = Date.now()\n): Notificacao[] {\n return notificacoes\n .filter((notificacao) => {\n if (!notificacao?.lembrarNoDia) return false;\n if (notificacao.statusLeitura === \"LIDO\") return false;\n if (STATUS_OCULTOS.includes(notificacao.status)) return false;\n\n const lembrete = notificacao.dataLembrete\n ? new Date(notificacao.dataLembrete).getTime()\n : Number.NaN;\n\n return !Number.isNaN(lembrete) && lembrete <= agora;\n })\n .sort(\n (a, b) =>\n new Date(b.dataLembrete ?? 0).getTime() -\n new Date(a.dataLembrete ?? 0).getTime()\n );\n}\n\nexport function contarNaoLidas(notificacoes: Notificacao[]): number {\n return notificacoes.filter(\n (notificacao) => notificacao.statusLeitura !== \"LIDO\"\n ).length;\n}\n\nexport function mapearParaItem(\n notificacao: Notificacao,\n getHref?: (notificacao: Notificacao) => string | undefined,\n agora?: number\n): HeaderNotificationItem {\n return {\n id: notificacao.id,\n title: notificacao.titulo,\n message: notificacao.mensagem ?? undefined,\n date: formatarDataRelativa(\n notificacao.disparadoEm ?? notificacao.dataReferencia,\n agora\n ),\n read: notificacao.statusLeitura === \"LIDO\",\n href: getHref?.(notificacao),\n };\n}\n","\"use client\";\n\nimport { BellRing } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"../../Button\";\nimport { Dialog, DialogContent, DialogTitle } from \"../../Dialog\";\nimport { formatarDataRelativa } from \"./mapear\";\nimport type { Notificacao } from \"./tipos\";\n\nexport interface ModalLembretesProps {\n lembretes: Notificacao[];\n aberto: boolean;\n onDispensar: () => void;\n titulo?: string;\n rotuloDispensar?: string;\n}\n\nexport function ModalLembretes({\n lembretes,\n aberto,\n onDispensar,\n titulo,\n rotuloDispensar = \"Entendi\",\n}: ModalLembretesProps) {\n const visivel = aberto && lembretes.length > 0;\n\n const tituloExibido =\n titulo ??\n (lembretes.length === 1 ? \"Você tem um lembrete\" : \"Você tem lembretes\");\n\n return (\n <Dialog\n open={visivel}\n onOpenChange={(proximoEstado) => {\n if (!proximoEstado) onDispensar();\n }}\n >\n <DialogContent\n className=\"cnc-max-w-[440px] cnc-rounded-lg cnc-bg-white cnc-p-0\"\n onOpenAutoFocus={(evento) => evento.preventDefault()}\n >\n <div className=\"cnc-flex cnc-items-center cnc-gap-3 cnc-border-b cnc-border-brand-gray-50 cnc-px-5 cnc-py-4\">\n <span className=\"cnc-flex cnc-h-9 cnc-w-9 cnc-shrink-0 cnc-items-center cnc-justify-center cnc-rounded-full cnc-bg-brand-blue-60\">\n <BellRing\n className=\"cnc-h-[18px] cnc-w-[18px] cnc-text-brand-blue-400\"\n aria-hidden=\"true\"\n />\n </span>\n <DialogTitle className=\"cnc-m-0 cnc-text-base cnc-font-extrabold cnc-text-brand-blue-900\">\n {tituloExibido}\n </DialogTitle>\n </div>\n\n <ul className=\"cnc-m-0 cnc-max-h-[320px] cnc-list-none cnc-overflow-y-auto cnc-p-0\">\n {lembretes.map((lembrete) => (\n <li\n key={lembrete.id}\n className=\"cnc-flex cnc-flex-col cnc-gap-1 cnc-border-b cnc-border-brand-gray-50 cnc-px-5 cnc-py-4 last:cnc-border-b-0\"\n >\n <div className=\"cnc-flex cnc-items-baseline cnc-justify-between cnc-gap-3\">\n <span className=\"cnc-text-sm cnc-font-bold cnc-text-brand-blue-900\">\n {lembrete.titulo}\n </span>\n <span className=\"cnc-shrink-0 cnc-text-[11px] cnc-text-brand-gray-600\">\n {formatarDataRelativa(lembrete.dataLembrete)}\n </span>\n </div>\n {lembrete.mensagem && (\n <span className=\"cnc-text-xs cnc-leading-relaxed cnc-text-brand-gray-600\">\n {lembrete.mensagem}\n </span>\n )}\n </li>\n ))}\n </ul>\n\n <div className=\"cnc-flex cnc-flex-col cnc-gap-2 cnc-border-t cnc-border-brand-gray-50 cnc-px-5 cnc-py-4\">\n <Button variant=\"confirm\" className=\"cnc-w-full\" onClick={onDispensar}>\n {rotuloDispensar}\n </Button>\n <p className=\"cnc-m-0 cnc-text-center cnc-text-[11px] cnc-text-brand-gray-600\">\n {lembretes.length === 1\n ? \"Ao fechar, este lembrete é marcado como lido.\"\n : `Ao fechar, os ${lembretes.length} lembretes são marcados como lidos.`}\n </p>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport {\n buscarNotificacoes,\n excluirNotificacao,\n marcarComoLida,\n marcarComoNaoLida,\n marcarVariasComoLidas,\n} from \"./cliente\";\nimport type { Notificacao } from \"./tipos\";\n\nexport interface OpcoesUsarNotificacoes {\n email: string;\n sistema: string;\n baseUrl: string;\n filtros?: Record<string, string>;\n intervaloAtualizacao?: number;\n habilitado?: boolean;\n onErro?: (erro: Error) => void;\n}\n\nexport interface RetornoUsarNotificacoes {\n notificacoes: Notificacao[];\n carregando: boolean;\n atualizar: () => void;\n marcarUmaComoLida: (id: Notificacao[\"id\"]) => void;\n marcarUmaComoNaoLida: (id: Notificacao[\"id\"]) => void;\n marcarComoLidas: (ids: Array<Notificacao[\"id\"]>) => void;\n marcarTodasComoLidas: () => void;\n excluir: (id: Notificacao[\"id\"]) => void;\n}\n\nfunction foiAbortado(erro: unknown): boolean {\n return (erro as { name?: string } | null)?.name === \"AbortError\";\n}\n\nexport function usarNotificacoes({\n email,\n sistema,\n baseUrl,\n filtros,\n intervaloAtualizacao = 60_000,\n habilitado = true,\n onErro,\n}: OpcoesUsarNotificacoes): RetornoUsarNotificacoes {\n const [notificacoes, setNotificacoes] = React.useState<Notificacao[]>([]);\n const [carregando, setCarregando] = React.useState(habilitado);\n\n const notificacoesRef = React.useRef<Notificacao[]>(notificacoes);\n const controladorRef = React.useRef<AbortController | null>(null);\n const jaCarregouRef = React.useRef(false);\n const onErroRef = React.useRef(onErro);\n\n React.useEffect(() => {\n notificacoesRef.current = notificacoes;\n }, [notificacoes]);\n\n React.useEffect(() => {\n onErroRef.current = onErro;\n }, [onErro]);\n\n const chaveFiltros = JSON.stringify(filtros ?? {});\n\n const atualizar = React.useCallback(() => {\n if (!habilitado) return;\n\n controladorRef.current?.abort();\n const controlador = new AbortController();\n controladorRef.current = controlador;\n\n void (async () => {\n try {\n const lista = await buscarNotificacoes({\n baseUrl,\n email,\n sistema,\n filtros: JSON.parse(chaveFiltros) as Record<string, string>,\n signal: controlador.signal,\n });\n\n if (controlador.signal.aborted) return;\n setNotificacoes(lista);\n } catch (erro) {\n if (controlador.signal.aborted || foiAbortado(erro)) return;\n onErroRef.current?.(erro as Error);\n } finally {\n if (!controlador.signal.aborted) {\n jaCarregouRef.current = true;\n setCarregando(false);\n }\n }\n })();\n }, [baseUrl, email, sistema, chaveFiltros, habilitado]);\n\n React.useEffect(() => {\n if (!habilitado) {\n setCarregando(false);\n return;\n }\n\n if (!jaCarregouRef.current) setCarregando(true);\n atualizar();\n\n return () => controladorRef.current?.abort();\n }, [atualizar, habilitado]);\n\n React.useEffect(() => {\n if (!habilitado || !intervaloAtualizacao) return;\n\n const temporizador = window.setInterval(() => {\n if (typeof document !== \"undefined\" && document.hidden) return;\n atualizar();\n }, intervaloAtualizacao);\n\n return () => window.clearInterval(temporizador);\n }, [atualizar, habilitado, intervaloAtualizacao]);\n\n const aplicarLeitura = React.useCallback((ids: Array<Notificacao[\"id\"]>) => {\n const alvos = new Set(ids.map(String));\n\n setNotificacoes((atuais) =>\n atuais.map((notificacao) =>\n alvos.has(String(notificacao.id))\n ? { ...notificacao, statusLeitura: \"LIDO\" as const }\n : notificacao\n )\n );\n }, []);\n\n const reverterLeitura = React.useCallback((anteriores: Notificacao[]) => {\n const original = new Map(\n anteriores.map((notificacao) => [String(notificacao.id), notificacao])\n );\n\n setNotificacoes((atuais) =>\n atuais.map((notificacao) => {\n const anterior = original.get(String(notificacao.id));\n return anterior\n ? {\n ...notificacao,\n statusLeitura: anterior.statusLeitura,\n lidoEm: anterior.lidoEm,\n }\n : notificacao;\n })\n );\n }, []);\n\n const marcarUmaComoLida = React.useCallback(\n (id: Notificacao[\"id\"]) => {\n const alvo = notificacoesRef.current.find(\n (notificacao) => String(notificacao.id) === String(id)\n );\n\n if (!alvo || alvo.statusLeitura === \"LIDO\") return;\n\n aplicarLeitura([id]);\n\n void marcarComoLida({ baseUrl, id }).catch((erro) => {\n reverterLeitura([alvo]);\n onErroRef.current?.(erro as Error);\n });\n },\n [baseUrl, aplicarLeitura, reverterLeitura]\n );\n\n const marcarComoLidas = React.useCallback(\n (ids: Array<Notificacao[\"id\"]>) => {\n const alvos = new Set(ids.map(String));\n\n const naoLidas = notificacoesRef.current.filter(\n (notificacao) =>\n alvos.has(String(notificacao.id)) &&\n notificacao.statusLeitura !== \"LIDO\"\n );\n\n if (naoLidas.length === 0) return;\n\n aplicarLeitura(naoLidas.map((notificacao) => notificacao.id));\n\n void marcarVariasComoLidas({\n baseUrl,\n ids: naoLidas.map((notificacao) => notificacao.id),\n }).catch((erro) => {\n reverterLeitura(naoLidas);\n onErroRef.current?.(erro as Error);\n });\n },\n [baseUrl, aplicarLeitura, reverterLeitura]\n );\n\n const marcarTodasComoLidas = React.useCallback(() => {\n marcarComoLidas(notificacoesRef.current.map((notificacao) => notificacao.id));\n }, [marcarComoLidas]);\n\n const marcarUmaComoNaoLida = React.useCallback(\n (id: Notificacao[\"id\"]) => {\n const alvo = notificacoesRef.current.find(\n (notificacao) => String(notificacao.id) === String(id)\n );\n\n if (!alvo || alvo.statusLeitura === \"NAO_LIDO\") return;\n\n setNotificacoes((atuais) =>\n atuais.map((notificacao) =>\n String(notificacao.id) === String(id)\n ? { ...notificacao, statusLeitura: \"NAO_LIDO\" as const }\n : notificacao\n )\n );\n\n void marcarComoNaoLida({ baseUrl, id }).catch((erro) => {\n reverterLeitura([alvo]);\n onErroRef.current?.(erro as Error);\n });\n },\n [baseUrl, reverterLeitura]\n );\n\n const excluir = React.useCallback(\n (id: Notificacao[\"id\"]) => {\n const alvo = notificacoesRef.current.find(\n (notificacao) => String(notificacao.id) === String(id)\n );\n\n if (!alvo) return;\n\n setNotificacoes((atuais) =>\n atuais.filter((notificacao) => String(notificacao.id) !== String(id))\n );\n\n void excluirNotificacao({ baseUrl, id }).catch((erro) => {\n onErroRef.current?.(erro as Error);\n atualizar();\n });\n },\n [baseUrl, atualizar]\n );\n\n return {\n notificacoes,\n carregando,\n atualizar,\n marcarUmaComoLida,\n marcarUmaComoNaoLida,\n marcarComoLidas,\n marcarTodasComoLidas,\n excluir,\n };\n}\n","import * as React from 'react';\nimport { Bell, Plus } from 'lucide-react';\nimport { FormularioAlerta } from './formulario-alerta';\nimport { AlertaItem } from './alerta-item';\nimport type { Alerta, AtualizarAlertaInput, CriarAlertaInput } from './types';\nimport { usarAlertas } from './usar-alertas';\nimport { URL_PADRAO_NOTIFICACOES } from './cliente';\n\nexport interface AlertasProps {\n alertas?: Alerta[];\n isLoading?: boolean;\n isSaving?: boolean;\n isRemovendo?: boolean;\n podeCriar?: boolean;\n /**\n * Criar/editar/concluir/excluir são sempre responsabilidade do projeto que usa\n * a lib — ela nunca faz essas requisições sozinha. Implemente aqui a chamada\n * ao backend do próprio projeto (que por sua vez fala com a API de\n * notificações). Pode ser assíncrono: a lib aguarda antes de fechar o\n * formulário e atualizar a lista.\n */\n onCriar?: (payload: CriarAlertaInput) => void | Promise<void>;\n onAtualizar?: (alertaId: string, payload: AtualizarAlertaInput) => void | Promise<void>;\n onConcluir?: (alertaId: string) => void | Promise<void>;\n onExcluir?: (alerta: Alerta) => void | Promise<void>;\n\n /** E-mail do destinatário. Vira `?email=` no GET da lista de alertas. */\n email?: string;\n /** Identificador do sistema chamador, ex.: \"gestao-eventos\". */\n sistema?: string;\n /**\n * Raiz da API já versionada, ex.: `https://.../v1`. Quando omitida, usa\n * `URL_PADRAO_NOTIFICACOES`, que aponta para o **ambiente de\n * desenvolvimento** — em produção passe explicitamente.\n */\n baseUrl?: string;\n fetchFn?: typeof fetch;\n /** Atalho pra `filtros: { eventoId }` — mantido pro gestao-eventos. */\n eventoId?: number | string;\n /**\n * Filtro livre por metadado, ex.: `{ demandaId: \"123\" }`. Use quando a\n * entidade que vincula o alerta não se chama \"evento\" — a chave precisa\n * bater com o que foi salvo em `metadados` na criação do alerta.\n */\n filtros?: Record<string, string>;\n /** Falha ao buscar a lista (GET) ou ao salvar/concluir/excluir (erro relançado por onCriar/onAtualizar/onConcluir/onExcluir). */\n onErro?: (erro: Error) => void;\n}\n\nexport function Alertas({\n alertas: alertasProps = [],\n isLoading = false,\n isSaving = false,\n isRemovendo = false,\n podeCriar = true,\n onCriar,\n onAtualizar,\n onConcluir,\n onExcluir,\n baseUrl = URL_PADRAO_NOTIFICACOES,\n sistema,\n email,\n fetchFn,\n eventoId,\n filtros,\n onErro,\n}: AlertasProps) {\n const [formAberto, setFormAberto] = React.useState(false);\n const [alertaEmEdicao, setAlertaEmEdicao] = React.useState<Alerta | null>(null);\n const [salvandoLocal, setSalvandoLocal] = React.useState(false);\n const [removendoLocal, setRemovendoLocal] = React.useState(false);\n\n /** Só governa a listagem (GET), que a lib continua buscando sozinha. */\n const conectado = Boolean(sistema && email);\n\n const remoto = usarAlertas({\n baseUrl,\n sistema,\n email,\n fetchFn,\n eventoId,\n filtros,\n habilitado: conectado,\n onErro,\n });\n\n const alertas = conectado ? remoto.alertas : alertasProps;\n const carregando = conectado ? remoto.carregando : isLoading;\n const salvando = salvandoLocal || isSaving;\n const removendo = removendoLocal || isRemovendo;\n\n const resetForm = () => {\n setFormAberto(false);\n setAlertaEmEdicao(null);\n };\n\n const abrirNovoAlerta = () => {\n setAlertaEmEdicao(null);\n setFormAberto(true);\n };\n\n const abrirEdicao = (alerta: Alerta) => {\n setAlertaEmEdicao(alerta);\n setFormAberto(true);\n };\n\n const handleSalvar = async (payload: CriarAlertaInput | AtualizarAlertaInput) => {\n setSalvandoLocal(true);\n try {\n if (alertaEmEdicao) {\n await onAtualizar?.(alertaEmEdicao.id, payload as AtualizarAlertaInput);\n } else {\n await onCriar?.(payload as CriarAlertaInput);\n }\n if (conectado) remoto.atualizar();\n resetForm();\n } catch (err) {\n // Evitamos fechar o form pro usuário poder tentar de novo, mas o erro\n // precisa chegar em algum lugar visível — onCriar/onAtualizar são do\n // projeto que usa a lib, então não passam por onErro sozinhos.\n console.error(\"Erro ao salvar alerta:\", err);\n onErro?.(err as Error);\n } finally {\n setSalvandoLocal(false);\n }\n };\n\n const handleConcluir = async (alertaId: string) => {\n setRemovendoLocal(true);\n try {\n await onConcluir?.(alertaId);\n if (conectado) remoto.atualizar();\n } catch (err) {\n console.error(\"Erro ao concluir alerta:\", err);\n onErro?.(err as Error);\n } finally {\n setRemovendoLocal(false);\n }\n };\n\n const handleExcluir = (alerta: Alerta) => {\n if (!window.confirm(`Tem certeza que deseja excluir o alerta \"${alerta.titulo}\"?`)) return;\n\n void (async () => {\n setRemovendoLocal(true);\n try {\n await onExcluir?.(alerta);\n if (conectado) remoto.atualizar();\n } catch (err) {\n console.error(\"Erro ao excluir alerta:\", err);\n onErro?.(err as Error);\n } finally {\n setRemovendoLocal(false);\n }\n })();\n };\n\n return (\n <div className=\"alertas-container\">\n {!formAberto && podeCriar && (\n <div className=\"alertas-nova-acao\">\n <button\n type=\"button\"\n onClick={abrirNovoAlerta}\n className=\"alerta-btn alerta-btn--primario\"\n >\n <Plus size={16} />\n Novo alerta\n </button>\n </div>\n )}\n\n {formAberto && (\n <FormularioAlerta\n alertaEmEdicao={alertaEmEdicao}\n isSaving={salvando}\n onSalvar={handleSalvar}\n onCancelar={resetForm}\n />\n )}\n\n <section className=\"alertas-lista-section\">\n <div className=\"alertas-lista-header\">\n <h2 className=\"alertas-lista-titulo\">\n Alertas cadastrados ({alertas.length})\n </h2>\n </div>\n\n {carregando ? (\n <div className=\"alertas-estado\">Carregando alertas...</div>\n ) : alertas.length === 0 ? (\n <div className=\"alertas-vazio\">\n <Bell size={32} className=\"alertas-vazio-icone\" />\n <p className=\"alertas-vazio-texto\">Nenhum alerta cadastrado.</p>\n </div>\n ) : (\n <div className=\"alertas-lista\">\n {alertas.map((alerta) => (\n <AlertaItem\n key={alerta.id}\n alerta={alerta}\n disabled={removendo}\n selecionado={alertaEmEdicao?.id === alerta.id}\n onEditar={() => abrirEdicao(alerta)}\n onConcluir={() => handleConcluir(alerta.id)}\n onExcluir={() => handleExcluir(alerta)}\n />\n ))}\n </div>\n )}\n </section>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Plus, X } from 'lucide-react';\nimport {\n datetimeLocalParaIsoComOffset,\n obterHojeDataHoraIsoLocal,\n} from './date-utils';\nimport type {\n Alerta,\n AlertaFormValues,\n AtualizarAlertaInput,\n CriarAlertaInput,\n} from './types';\n\nconst FORM_VAZIO: AlertaFormValues = {\n titulo: '',\n dataReferencia: '',\n lembrarNoDia: true,\n diasAntes: '',\n alertasDiasAntes: [],\n novoAlertaDiasAntes: '',\n mensagem: '',\n enviarEmail: false,\n};\n\nfunction normalizarAlertasDiasAntes(values: AlertaFormValues): number[] {\n const alertas = [...values.alertasDiasAntes];\n if (values.novoAlertaDiasAntes.trim()) {\n alertas.push(values.novoAlertaDiasAntes.trim());\n }\n return Array.from(new Set(alertas.map(Number))).sort((a, b) => a - b);\n}\n\nfunction construirPayload(values: AlertaFormValues): CriarAlertaInput {\n const alertasNumericos = normalizarAlertasDiasAntes(values);\n const diasAntes = alertasNumericos.length\n ? Math.max(...alertasNumericos)\n : values.diasAntes.trim()\n ? Number(values.diasAntes)\n : 0;\n\n return {\n titulo: values.titulo.trim(),\n dataReferencia: datetimeLocalParaIsoComOffset(values.dataReferencia),\n lembrarNoDia: values.lembrarNoDia,\n diasAntes,\n alertasDiasAntes: alertasNumericos,\n mensagem: values.mensagem.trim() || undefined,\n enviarEmail: values.enviarEmail,\n };\n}\n\nfunction preencherFormDoAlerta(alerta: Alerta): AlertaFormValues {\n const alertasDiasAntes =\n alerta.alertasDiasAntes && alerta.alertasDiasAntes.length > 0\n ? alerta.alertasDiasAntes.map(String)\n : alerta.diasAntes > 0\n ? [String(alerta.diasAntes)]\n : [];\n\n const dataObj = new Date(alerta.dataReferencia);\n const formatada = isNaN(dataObj.getTime())\n ? ''\n : (() => {\n const ano = dataObj.getFullYear();\n const mes = String(dataObj.getMonth() + 1).padStart(2, '0');\n const dia = String(dataObj.getDate()).padStart(2, '0');\n const horas = String(dataObj.getHours()).padStart(2, '0');\n const minutos = String(dataObj.getMinutes()).padStart(2, '0');\n return `${ano}-${mes}-${dia}T${horas}:${minutos}`;\n })();\n\n return {\n titulo: alerta.titulo,\n dataReferencia: formatada,\n lembrarNoDia: alerta.lembrarNoDia ?? alerta.diasAntes === 0,\n diasAntes: alerta.diasAntes ? String(alerta.diasAntes) : '',\n alertasDiasAntes,\n novoAlertaDiasAntes: '',\n mensagem: alerta.mensagem ?? '',\n enviarEmail: alerta.enviarEmail ?? false,\n };\n}\n\nfunction validarForm(values: AlertaFormValues): string {\n if (!values.titulo.trim()) return 'Informe o titulo do alerta';\n if (!values.dataReferencia) return 'Informe a data do alerta';\n if (new Date(values.dataReferencia) < new Date()) {\n return 'Informe uma data e hora igual ou posterior ao momento atual';\n }\n if (values.diasAntes.trim() && values.diasAntes !== '0') {\n const diasAntes = Number(values.diasAntes);\n if (!Number.isInteger(diasAntes) || diasAntes < 0) {\n return 'Informe uma quantidade de dias maior ou igual a zero';\n }\n }\n if (values.novoAlertaDiasAntes.trim()) {\n const novoAlerta = Number(values.novoAlertaDiasAntes);\n if (!Number.isInteger(novoAlerta) || novoAlerta <= 0) {\n return 'Informe uma quantidade de dias maior que zero';\n }\n }\n return '';\n}\n\ninterface OpcaoAlertaProps {\n checked: boolean;\n label: string;\n onChange: (checked: boolean) => void;\n}\n\nfunction OpcaoAlerta({ checked, label, onChange }: OpcaoAlertaProps) {\n return (\n <label className=\"alerta-opcao\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => onChange(e.target.checked)}\n className=\"alerta-checkbox\"\n />\n {label}\n </label>\n );\n}\n\nexport interface FormularioAlertaProps {\n alertaEmEdicao?: Alerta | null;\n isSaving?: boolean;\n onSalvar: (payload: CriarAlertaInput | AtualizarAlertaInput) => void;\n onCancelar: () => void;\n}\n\nexport function FormularioAlerta({\n alertaEmEdicao,\n isSaving = false,\n onSalvar,\n onCancelar,\n}: FormularioAlertaProps) {\n const [values, setValues] = React.useState<AlertaFormValues>(() =>\n alertaEmEdicao ? preencherFormDoAlerta(alertaEmEdicao) : FORM_VAZIO,\n );\n const [erro, setErro] = React.useState('');\n\n // \"Agora\" depende do relógio/timezone do cliente — calcular no primeiro\n // render divergiria do HTML gerado no servidor. Começa vazio (sem `min`) e\n // só ganha valor depois de montado, só no client.\n const [hojeDataHoraIso, setHojeDataHoraIso] = React.useState('');\n\n React.useEffect(() => {\n setHojeDataHoraIso(obterHojeDataHoraIsoLocal());\n }, []);\n\n React.useEffect(() => {\n setValues(alertaEmEdicao ? preencherFormDoAlerta(alertaEmEdicao) : FORM_VAZIO);\n setErro('');\n }, [alertaEmEdicao]);\n\n const setField = <K extends keyof AlertaFormValues>(\n campo: K,\n valor: AlertaFormValues[K],\n ) => {\n setErro('');\n setValues((prev) => ({ ...prev, [campo]: valor }));\n };\n\n const toggleLembrarNoDia = (checked: boolean) => {\n setErro('');\n setValues((prev) => ({ ...prev, lembrarNoDia: checked }));\n };\n\n const toggleAlertaDiasAntes = (dias: number, checked: boolean) => {\n setErro('');\n setValues((prev) => {\n const valor = String(dias);\n const alertas = new Set(prev.alertasDiasAntes);\n if (checked) alertas.add(valor);\n else alertas.delete(valor);\n const alertasDiasAntes = Array.from(alertas).sort(\n (a, b) => Number(a) - Number(b),\n );\n return {\n ...prev,\n alertasDiasAntes,\n diasAntes:\n alertasDiasAntes.length > 0\n ? String(Math.max(...alertasDiasAntes.map(Number)))\n : '',\n };\n });\n };\n\n const adicionarAlertaDiasAntes = () => {\n const valor = values.novoAlertaDiasAntes.trim();\n const dias = Number(valor);\n if (!Number.isInteger(dias) || dias <= 0) {\n setErro('Informe uma quantidade de dias maior que zero');\n return;\n }\n setErro('');\n setValues((prev) => {\n const alertas = new Set(prev.alertasDiasAntes);\n alertas.add(String(dias));\n const alertasDiasAntes = Array.from(alertas).sort(\n (a, b) => Number(a) - Number(b),\n );\n return {\n ...prev,\n diasAntes: String(Math.max(...alertasDiasAntes.map(Number))),\n novoAlertaDiasAntes: '',\n alertasDiasAntes,\n };\n });\n };\n\n const removerAlertaDiasAntes = (valor: string) => {\n setValues((prev) => {\n const alertasDiasAntes = prev.alertasDiasAntes.filter((item) => item !== valor);\n return {\n ...prev,\n alertasDiasAntes,\n diasAntes:\n alertasDiasAntes.length > 0\n ? String(Math.max(...alertasDiasAntes.map(Number)))\n : '',\n };\n });\n };\n\n const handleSalvar = () => {\n const mensagemErro = validarForm(values);\n if (mensagemErro) {\n setErro(mensagemErro);\n return;\n }\n onSalvar(construirPayload(values));\n };\n\n const alertasPersonalizados = values.alertasDiasAntes.filter(\n (d) => !['2', '7', '15', '30'].includes(d),\n );\n\n return (\n <section className=\"alerta-form-section\">\n <div className=\"alerta-form-header\">\n <h2 className=\"alerta-form-titulo\">\n {alertaEmEdicao ? 'Editar alerta' : 'Novo alerta'}\n </h2>\n </div>\n\n <div className=\"alerta-form-grid\">\n <div className=\"alerta-campo\">\n <label htmlFor=\"alerta-titulo\" className=\"alerta-label\">\n Titulo <span className=\"alerta-obrigatorio\">*</span>\n </label>\n <input\n id=\"alerta-titulo\"\n type=\"text\"\n value={values.titulo}\n onChange={(e) => setField('titulo', e.target.value)}\n placeholder=\"Informe o titulo do alerta\"\n className=\"alerta-input\"\n />\n </div>\n\n <div className=\"alerta-campo alerta-campo--data\">\n <label htmlFor=\"alerta-data\" className=\"alerta-label\">\n Data e Hora <span className=\"alerta-obrigatorio\">*</span>\n </label>\n <input\n id=\"alerta-data\"\n type=\"datetime-local\"\n min={hojeDataHoraIso}\n value={values.dataReferencia}\n onChange={(e) => setField('dataReferencia', e.target.value)}\n className=\"alerta-input alerta-input--sm\"\n />\n </div>\n\n <div className=\"alerta-campo\">\n <span className=\"alerta-label\">Notificações</span>\n <div className=\"alerta-notif-container\">\n <div className=\"alerta-notif-col\">\n <OpcaoAlerta\n checked={values.lembrarNoDia}\n label=\"Alertar no dia\"\n onChange={toggleLembrarNoDia}\n />\n <OpcaoAlerta\n checked={values.alertasDiasAntes.includes('2')}\n label=\"2 dias antes\"\n onChange={(c) => toggleAlertaDiasAntes(2, c)}\n />\n <OpcaoAlerta\n checked={values.alertasDiasAntes.includes('7')}\n label=\"1 semana antes\"\n onChange={(c) => toggleAlertaDiasAntes(7, c)}\n />\n </div>\n <div className=\"alerta-notif-col\">\n <OpcaoAlerta\n checked={values.alertasDiasAntes.includes('15')}\n label=\"15 dias antes\"\n onChange={(c) => toggleAlertaDiasAntes(15, c)}\n />\n <OpcaoAlerta\n checked={values.alertasDiasAntes.includes('30')}\n label=\"1 mês antes\"\n onChange={(c) => toggleAlertaDiasAntes(30, c)}\n />\n <div className=\"alerta-notif-personalizado\">\n <input\n id=\"alerta-dias\"\n type=\"number\"\n min={1}\n step={1}\n value={values.novoAlertaDiasAntes}\n onChange={(e) => setField('novoAlertaDiasAntes', e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n adicionarAlertaDiasAntes();\n }\n }}\n placeholder=\"Dias\"\n className=\"alerta-input alerta-input--dias\"\n />\n <button\n type=\"button\"\n onClick={adicionarAlertaDiasAntes}\n className=\"alerta-btn alerta-btn--outline\"\n >\n <Plus size={16} />\n Adicionar\n </button>\n </div>\n </div>\n\n {alertasPersonalizados.length > 0 && (\n <div className=\"alerta-tags\">\n {alertasPersonalizados.map((dias) => (\n <span key={dias} className=\"alerta-tag\">\n {dias} dia{Number(dias) > 1 ? 's' : ''} antes\n <button\n type=\"button\"\n onClick={() => removerAlertaDiasAntes(dias)}\n aria-label={`Remover alerta de ${dias} dias antes`}\n className=\"alerta-tag-remover\"\n >\n <X size={14} />\n </button>\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"alerta-campo\">\n <label htmlFor=\"alerta-mensagem\" className=\"alerta-label\">\n Mensagem\n </label>\n <textarea\n id=\"alerta-mensagem\"\n value={values.mensagem}\n onChange={(e) => setField('mensagem', e.target.value)}\n placeholder=\"Informe a mensagem do alerta\"\n rows={3}\n className=\"alerta-textarea\"\n />\n </div>\n\n <div className=\"alerta-campo\">\n <OpcaoAlerta\n checked={values.enviarEmail}\n label=\"Enviar também por e-mail\"\n onChange={(checked) => setField('enviarEmail', checked)}\n />\n </div>\n\n {erro && <div className=\"alerta-erro\">{erro}</div>}\n\n <div className=\"alerta-form-acoes\">\n <button\n type=\"button\"\n onClick={onCancelar}\n className=\"alerta-btn alerta-btn--secundario\"\n >\n Cancelar\n </button>\n <button\n type=\"button\"\n onClick={handleSalvar}\n disabled={isSaving}\n className=\"alerta-btn alerta-btn--primario\"\n >\n <Plus size={16} />\n {isSaving\n ? 'Salvando...'\n : alertaEmEdicao\n ? 'Atualizar alerta'\n : 'Adicionar alerta'}\n </button>\n </div>\n </div>\n </section>\n );\n}\n","export function obterHojeDataHoraIsoLocal(): string {\n const hoje = new Date();\n const ano = hoje.getFullYear();\n const mes = String(hoje.getMonth() + 1).padStart(2, '0');\n const dia = String(hoje.getDate()).padStart(2, '0');\n const horas = String(hoje.getHours()).padStart(2, '0');\n const minutos = String(hoje.getMinutes()).padStart(2, '0');\n return `${ano}-${mes}-${dia}T${horas}:${minutos}`;\n}\n\nexport function datetimeLocalParaIsoComOffset(valorInput: string): string {\n if (!valorInput) return valorInput;\n const data = new Date(valorInput);\n if (isNaN(data.getTime())) return valorInput;\n const offsetMinutos = data.getTimezoneOffset();\n const sinal = offsetMinutos <= 0 ? '+' : '-';\n const absOffset = Math.abs(offsetMinutos);\n const offsetHoras = String(Math.floor(absOffset / 60)).padStart(2, '0');\n const offsetMins = String(absOffset % 60).padStart(2, '0');\n const ano = data.getFullYear();\n const mes = String(data.getMonth() + 1).padStart(2, '0');\n const dia = String(data.getDate()).padStart(2, '0');\n const horas = String(data.getHours()).padStart(2, '0');\n const minutos = String(data.getMinutes()).padStart(2, '0');\n return `${ano}-${mes}-${dia}T${horas}:${minutos}:00${sinal}${offsetHoras}:${offsetMins}`;\n}\n\nexport function formatarDataParaExibicao(iso: string): string {\n if (!iso) return '';\n const dataObj = new Date(iso);\n if (isNaN(dataObj.getTime())) return '';\n const dia = String(dataObj.getDate()).padStart(2, '0');\n const mes = String(dataObj.getMonth() + 1).padStart(2, '0');\n const ano = dataObj.getFullYear();\n const horas = String(dataObj.getHours()).padStart(2, '0');\n const minutos = String(dataObj.getMinutes()).padStart(2, '0');\n return `${dia}/${mes}/${ano} às ${horas}:${minutos}`;\n}\n","import * as React from 'react';\nimport { Bell, CalendarDays, Check, Pencil, Trash2, X } from 'lucide-react';\nimport { formatarDataParaExibicao } from './date-utils';\nimport type { Alerta } from './types';\n\nexport interface AlertaItemProps {\n alerta: Alerta;\n disabled?: boolean;\n selecionado?: boolean;\n onEditar: () => void;\n onConcluir: () => void;\n onExcluir: () => void;\n}\n\nexport function AlertaItem({\n alerta,\n disabled = false,\n selecionado = false,\n onEditar,\n onConcluir,\n onExcluir,\n}: AlertaItemProps) {\n const concluido = alerta.status === 'CONCLUIDO';\n const cancelado = alerta.status === 'CANCELADO';\n const podeAlterar = !concluido && !cancelado;\n const statusLabel = concluido ? 'Concluido' : cancelado ? 'Cancelado' : 'Pendente';\n\n const descricaoAlertas = [\n (alerta.lembrarNoDia ?? alerta.diasAntes === 0) ? 'no dia' : null,\n ...(alerta.alertasDiasAntes && alerta.alertasDiasAntes.length > 0\n ? alerta.alertasDiasAntes.map(\n (dias) => `${dias} dia${dias > 1 ? 's' : ''} antes`,\n )\n : alerta.diasAntes > 0\n ? [`${alerta.diasAntes} dia${alerta.diasAntes > 1 ? 's' : ''} antes`]\n : []),\n ]\n .filter(Boolean)\n .join(', ');\n\n return (\n <article\n className={[\n 'alerta-item',\n selecionado ? 'alerta-item--selecionado' : '',\n concluido ? 'alerta-item--concluido' : '',\n cancelado ? 'alerta-item--cancelado' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"alerta-item-corpo\">\n <div className=\"alerta-item-info\">\n <div className=\"alerta-item-topo\">\n <h3 className=\"alerta-item-titulo\">{alerta.titulo}</h3>\n <span className={`alerta-status alerta-status--${statusLabel.toLowerCase()}`}>\n {statusLabel}\n </span>\n </div>\n\n {alerta.mensagem && (\n <p className=\"alerta-item-mensagem\">{alerta.mensagem}</p>\n )}\n\n <div className=\"alerta-item-meta\">\n <span className=\"alerta-item-meta-linha\">\n <CalendarDays size={14} />\n Data {formatarDataParaExibicao(alerta.dataReferencia)}\n </span>\n <span className=\"alerta-item-meta-linha\">\n <Bell size={14} />\n Notificações: {descricaoAlertas || '—'}\n </span>\n {alerta.enviarEmail && (\n <span className=\"alerta-item-meta-linha alerta-item-email-ativo\">\n <span className=\"alerta-dot\" />\n Notificação por e-mail ativa\n </span>\n )}\n {cancelado && alerta.motivoCancelamento && (\n <span className=\"alerta-item-meta-linha\">\n <X size={14} />\n Cancelado automaticamente: {alerta.motivoCancelamento}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"alerta-item-acoes\">\n <button\n type=\"button\"\n onClick={onEditar}\n disabled={disabled || !podeAlterar}\n title=\"Editar alerta\"\n className=\"alerta-btn-icone\"\n >\n <Pencil size={16} />\n </button>\n {podeAlterar && (\n <button\n type=\"button\"\n onClick={onConcluir}\n disabled={disabled}\n title=\"Concluir alerta\"\n className=\"alerta-btn-icone alerta-btn-icone--sucesso\"\n >\n <Check size={16} />\n </button>\n )}\n <button\n type=\"button\"\n onClick={onExcluir}\n disabled={disabled}\n title=\"Excluir alerta\"\n className=\"alerta-btn-icone alerta-btn-icone--perigo\"\n >\n <Trash2 size={16} />\n </button>\n </div>\n </div>\n </article>\n );\n}\n","import * as React from \"react\";\nimport { buscarAlertas } from \"./cliente\";\nimport type { Alerta } from \"./types\";\n\n/**\n * Só busca a lista de alertas (GET), direto na API de notificações. Criar,\n * editar, concluir e excluir são sempre responsabilidade do projeto que usa a\n * lib — ver `onCriar`/`onAtualizar`/`onConcluir`/`onExcluir` em `Alertas`.\n */\nexport interface OpcoesUsarAlertas {\n baseUrl?: string;\n sistema?: string;\n email?: string;\n fetchFn?: typeof fetch;\n eventoId?: number | string;\n /** Filtro livre por metadado, ex.: `{ demandaId: \"123\" }`. Ver `buscarAlertas`. */\n filtros?: Record<string, string | number>;\n habilitado?: boolean;\n onErro?: (erro: Error) => void;\n}\n\nexport interface RetornoUsarAlertas {\n alertas: Alerta[];\n carregando: boolean;\n atualizar: () => void;\n}\n\nfunction foiAbortado(erro: unknown): boolean {\n return (erro as { name?: string } | null)?.name === \"AbortError\";\n}\n\nexport function usarAlertas({\n baseUrl,\n sistema,\n email,\n fetchFn,\n eventoId,\n filtros,\n habilitado = true,\n onErro,\n}: OpcoesUsarAlertas): RetornoUsarAlertas {\n const [alertas, setAlertas] = React.useState<Alerta[]>([]);\n const [carregando, setCarregando] = React.useState(habilitado);\n\n const controladorRef = React.useRef<AbortController | null>(null);\n const jaCarregouRef = React.useRef(false);\n\n const onErroRef = React.useRef(onErro);\n const fetchFnRef = React.useRef(fetchFn);\n const filtrosRef = React.useRef(filtros);\n\n React.useEffect(() => {\n onErroRef.current = onErro;\n }, [onErro]);\n\n React.useEffect(() => {\n fetchFnRef.current = fetchFn;\n }, [fetchFn]);\n\n React.useEffect(() => {\n filtrosRef.current = filtros;\n }, [filtros]);\n\n const pronto = baseUrl !== undefined && sistema !== undefined && email !== undefined;\n // Chave estável pro useCallback: um `filtros={{ demandaId }}` inline cria um\n // objeto novo a cada render, então comparamos o conteúdo serializado em vez\n // da referência — senão vira o mesmo loop que o fetchFn tinha.\n const filtrosChave = filtros ? JSON.stringify(filtros) : \"\";\n\n const atualizar = React.useCallback(() => {\n if (!habilitado || !pronto) return;\n\n controladorRef.current?.abort();\n const controlador = new AbortController();\n controladorRef.current = controlador;\n\n void (async () => {\n try {\n const lista = await buscarAlertas({\n baseUrl: baseUrl as string,\n sistema: sistema as string,\n email: email as string,\n fetchFn: fetchFnRef.current,\n eventoId,\n filtros: filtrosRef.current,\n signal: controlador.signal,\n });\n\n if (controlador.signal.aborted) return;\n setAlertas(lista);\n } catch (erro) {\n if (controlador.signal.aborted || foiAbortado(erro)) return;\n onErroRef.current?.(erro as Error);\n } finally {\n if (!controlador.signal.aborted) {\n jaCarregouRef.current = true;\n setCarregando(false);\n }\n }\n })();\n // fetchFn e filtros são lidos via ref de propósito — recriados a cada\n // render (comum: `fetchFn={(...a) => fetch(...a)}`, `filtros={{ x }}`),\n // não devem reiniciar a busca sozinhos.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [baseUrl, sistema, email, eventoId, filtrosChave, habilitado, pronto]);\n\n React.useEffect(() => {\n if (!habilitado || !pronto) {\n setCarregando(false);\n return;\n }\n\n if (!jaCarregouRef.current) setCarregando(true);\n atualizar();\n\n return () => controladorRef.current?.abort();\n }, [atualizar, habilitado, pronto]);\n\n return {\n alertas,\n carregando,\n atualizar,\n };\n}\n","import type { Alerta } from \"./types\";\nimport {\n URL_PADRAO_NOTIFICACOES,\n normalizarBaseUrl,\n} from \"../components/organisms/header-notifications/cliente\";\n\nexport { URL_PADRAO_NOTIFICACOES, normalizarBaseUrl };\n\n/**\n * Só a leitura (listagem) fala com a API de notificações direto do browser.\n * Criar, editar, concluir e excluir são sempre responsabilidade do backend do\n * projeto que usa a lib — não existe função de mutação aqui de propósito.\n */\nexport class ErroAlertas extends Error {\n readonly status?: number;\n\n constructor(mensagem: string, status?: number) {\n super(mensagem);\n this.name = \"ErroAlertas\";\n this.status = status;\n Object.setPrototypeOf(this, ErroAlertas.prototype);\n }\n}\n\nexport interface ParametrosBuscaAlertas {\n baseUrl: string;\n sistema: string;\n email: string;\n /** Atalho pra `filtros: { eventoId }` — existe pelo nome, mantido pro gestao-eventos. */\n eventoId?: number | string;\n /**\n * Filtro livre por metadado, ex.: `{ demandaId: \"123\" }`. Vira query string\n * direto (a API trata qualquer chave solta fora de sistema/email/status/\n * statusLeitura como filtro de `metadados`). Use quando a entidade que\n * vincula o alerta não se chama \"evento\".\n */\n filtros?: Record<string, string | number>;\n fetchFn?: typeof fetch;\n signal?: AbortSignal;\n}\n\nexport async function buscarAlertas({\n baseUrl,\n sistema,\n email,\n fetchFn = fetch,\n signal,\n eventoId,\n filtros,\n}: ParametrosBuscaAlertas): Promise<Alerta[]> {\n const params = new URLSearchParams({ sistema, email });\n if (eventoId !== undefined) params.set(\"eventoId\", String(eventoId));\n for (const [chave, valor] of Object.entries(filtros ?? {})) {\n if (valor !== undefined && valor !== null && valor !== \"\") params.set(chave, String(valor));\n }\n\n const url = `${normalizarBaseUrl(baseUrl)}/notificacoes?${params.toString()}`;\n\n const resposta = await fetchFn(url, {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n signal,\n });\n\n if (!resposta.ok) {\n throw new ErroAlertas(`Falha ao buscar alertas`, resposta.status);\n }\n\n return await resposta.json();\n}\n"],"mappings":"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","names":["CollapsibleTrigger","Title","param","import_react","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","classParts","split","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","nextPart","get","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","prefix","Map","prefixedClassGroupEntries","getPrefixedClassGroupEntries","Object","entries","classGroups","forEach","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","key","path","currentClassPartObject","pathPart","has","set","func","classGroupEntries","map","prefixedClassGroup","fromEntries","value","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","startsWith","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","isArbitraryVariant","sort","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","result","originalClassName","Boolean","variantModifier","modifierId","classId","includes","conflictGroups","i","group","twJoin","argument","resolvedValue","string","arguments","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","callTailwindMerge","apply","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","Set","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","Number","isNaN","isArbitraryNumber","isInteger","isPercent","endsWith","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","fromTheme","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","isArbitraryValue","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","isLength","isArbitraryLength","getNumberWithAutoAndArbitrary","isNumber","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","cacheSize","separator","theme","isAny","isTshirtSize","isPercent","classGroups","aspect","container","columns","box","display","float","clear","isolation","object","overflow","overscroll","position","start","end","top","right","bottom","left","visibility","z","isInteger","basis","flex","grow","shrink","order","col","span","row","justify","content","items","self","p","px","py","ps","pe","pt","pr","pb","pl","m","mx","my","ms","me","mt","mr","mb","ml","w","screen","h","size","text","font","isArbitraryNumber","tracking","leading","list","placeholder","decoration","indent","align","whitespace","break","hyphens","bg","isArbitraryPosition","repeat","isArbitrarySize","isArbitraryImage","from","via","to","rounded","border","divide","outline","ring","shadow","isArbitraryShadow","filter","table","caption","transition","duration","ease","delay","animate","transform","rotate","origin","accent","appearance","cursor","caret","resize","scroll","snap","touch","select","fill","stroke","sr","conflictingClassGroups","conflictingClassGroupModifiers","twMerge","createTailwindMerge","getDefaultConfig","React","React","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_slot","import_react","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","CollapsibleTrigger","CollapsibleContent","import_jsx_runtime","Title","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","CommandPrimitive","React","PopoverPrimitive","import_jsx_runtime","Popover","PopoverTrigger","PopoverContent","import_jsx_runtime","Popover","PopoverTrigger","PopoverContent","React","import_jsx_runtime","Popover","PopoverTrigger","PopoverContent","React","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","FilterFieldItem","Filter","CollapsibleTrigger","React","import_jsx_runtime","DialogPrimitive","React","import_jsx_runtime","React","import_jsx_runtime","React","React","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","Popover","PopoverTrigger","PopoverContent","React","import_jsx_runtime","year","month","day","React","import_jsx_runtime","React","import_jsx_runtime","React","React","import_jsx_runtime","import_jsx_runtime","React","foiAbortado","import_jsx_runtime"]}