UNPKG

@rdsaude/pulso-react-components

Version:

Biblioteca de componentes React do Pulso Design System da RD Saúde oferece componentes consistentes e de alto desempenho, alinhados com os padrões da RDSaúde. Ideal para desenvolver aplicações modernas e acessíveis.

1 lines 13.1 kB
{"version":3,"sources":["../../../src/components/accordion/index.ts","../../../src/components/accordion/accordion.tsx","../../../src/components/icon/index.tsx","../../../src/hooks/use-theme.ts","../../../src/components/theme-provider/index.tsx","../../../src/utils/tv.ts","../../../src/components/accordion/accordion.styles.ts"],"sourcesContent":["export { Accordion } from './accordion'\nexport type {\n AccordionProps,\n AccordionContentProps,\n} from './accordion.types'\n","import * as AccordionPrimitive from '@radix-ui/react-accordion'\nimport { useState } from 'react'\nimport { Icon } from '~/components/icon'\nimport {\n AccordionContentVariants,\n AccordionIconVariants,\n AccordionRootVariants,\n AccordionTitleVariants,\n AccordionVariants,\n} from './accordion.styles'\nimport type { AccordionContentProps, AccordionProps } from './accordion.types'\n\nconst DISPLAY_NAME = 'Accordion'\n\nconst AccordionRoot = ({\n title,\n disabled,\n children,\n ...otherProps\n}: AccordionProps) => {\n const [isOpen, setIsOpen] = useState(false)\n\n return (\n <AccordionPrimitive.Root\n type=\"single\"\n collapsible\n {...otherProps}\n className={AccordionRootVariants({ disabled })}\n >\n <AccordionPrimitive.Item value=\"item-1\">\n <AccordionPrimitive.Header>\n <AccordionPrimitive.Trigger\n disabled={disabled}\n className={AccordionVariants({ open: isOpen, disabled })}\n onClick={() => setIsOpen(prevIsOpen => !prevIsOpen)}\n data-testid=\"accordion-main\"\n >\n <span className={AccordionTitleVariants()}>{title}</span>\n <div className={AccordionIconVariants({ open: isOpen })}>\n <Icon\n symbol=\"rdicon-chevron-down\"\n data-testid=\"input-select-icon\"\n aria-hidden\n color={\n disabled\n ? 'colorTextNeutralDisabled'\n : 'colorTextNeutralDefault'\n }\n size=\"small\"\n />\n </div>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n <AccordionPrimitive.Content>\n <div\n className={`accordion-content ${AccordionContentVariants({})}`}\n data-testid=\"accordion-content\"\n style={{ display: isOpen ? 'block' : 'none' }}\n >\n {children}\n </div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n </AccordionPrimitive.Root>\n )\n}\n\nAccordionRoot.displayName = `${DISPLAY_NAME}Root`\n\nconst AccordionContent = (props: AccordionContentProps) => {\n const { children } = props\n\n return (\n <AccordionPrimitive.Content>\n <div className={`accordion-content ${AccordionContentVariants({})}`}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n )\n}\n\nAccordionContent.displayName = `${DISPLAY_NAME}Content`\n\n/*\n----------------------------------------------------------------\nComposition Export\n----------------------------------------------------------------\n*/\n\nexport const Accordion = {\n Root: AccordionRoot,\n Content: AccordionContent,\n}\n","import * as React from 'react'\n\nimport type { RDSAUDESISTEMAS_TOKENS } from '@raiadrogasil/pulso-design-tokens'\nimport type { IconName } from '@raiadrogasil/pulso-icons'\n\nimport { useTheme } from '~/hooks/use-theme'\n\ntype IconVisualSize = 'tiny' | 'extra-small' | 'small' | 'medium'\ntype DesignTokens = typeof RDSAUDESISTEMAS_TOKENS\n\ntype TokenColorKeys = {\n [K in keyof DesignTokens as K extends `color${string}`\n ? K\n : never]: DesignTokens[K]\n}\n\n/**\n * Propriedades do componente Icon.\n */\nexport type IconProps = React.ComponentProps<'i'> & {\n /**\n * Define o ícone a ser exibido, com base na lista de nomes disponíveis em `@raiadrogasil/pulso-icons`.\n *\n * @default 'rdicon-default'\n */\n symbol?: IconName\n\n /**\n * Define o tamanho visual do ícone, controlando o `font-size` com base nos tokens de espaçamento.\n *\n * Valores possíveis: 'tiny', 'extra-small', 'small', 'medium'.\n *\n * @default 'small'\n */\n size?: IconVisualSize\n\n /**\n * Define a cor do ícone usando uma chave de token de cor do design system.\n * A cor é aplicada via `style.color`.\n *\n * @default 'colorActionFillBrandPrimaryEnabled'\n */\n color?: keyof TokenColorKeys\n}\n\nexport function Icon({\n symbol = 'rdicon-default',\n size = 'small',\n color = 'colorActionFillBrandPrimaryEnabled',\n ...props\n}: IconProps) {\n const theme = useTheme()\n\n const resolvedFontSizes = React.useMemo(() => {\n return {\n tiny: theme.sizingTiny,\n 'extra-small': theme.sizingExtrasmall,\n small: theme.sizingSmall,\n medium: theme.sizingMedium,\n }\n }, [])\n\n return (\n <i\n {...props}\n className={symbol}\n style={{\n fontSize: resolvedFontSizes[size],\n color: theme[color],\n display: 'inline-flex',\n }}\n />\n )\n}\n\nIcon.displayName = 'Icon'\n\nexport * from './deprecated'\n","import * as React from 'react'\n\nimport {\n DROGASIL_TOKENS,\n GLOBALS_TOKENS,\n PRIME_TOKENS,\n RAIA_TOKENS,\n RDSAUDESISTEMAS_TOKENS,\n SUBSCRIPTION_TOKENS,\n} from '@raiadrogasil/pulso-design-tokens'\n\nimport { ThemeContext } from '~/components/theme-provider'\n\ntype ThemeTokens = typeof RDSAUDESISTEMAS_TOKENS & typeof GLOBALS_TOKENS\n\nexport function useTheme(): ThemeTokens {\n const mappedTheme = React.useMemo(() => {\n return {\n rdsaudesistemas: RDSAUDESISTEMAS_TOKENS,\n drogasil: DROGASIL_TOKENS,\n raia: RAIA_TOKENS,\n subscription: SUBSCRIPTION_TOKENS,\n prime: PRIME_TOKENS,\n }\n }, [])\n\n const context = React.useContext(ThemeContext)\n\n if (!context) {\n throw new Error(\n '[Pulso] useTheme precisa estar dentro de um <ThemeProvider>. Verifique se o provedor está corretamente configurado na raiz da aplicação.'\n )\n }\n\n const { currentTheme } = context\n\n const result = {\n ...GLOBALS_TOKENS,\n ...mappedTheme[currentTheme],\n } as ThemeTokens\n\n return result\n}\n","import * as React from 'react'\n\nimport type { Themes } from '@raiadrogasil/pulso-design-tokens'\n\nexport const ThemeContext = React.createContext({\n currentTheme: 'rdsaudesistemas',\n} as {\n currentTheme: Themes\n})\n\ntype ThemeProviderProps = {\n children: React.ReactNode\n theme?: Themes\n}\n\nexport function ThemeProvider({\n children,\n theme = 'rdsaudesistemas',\n}: ThemeProviderProps) {\n if (typeof window !== 'undefined') {\n document.documentElement.setAttribute('class', theme)\n }\n\n return (\n <ThemeContext.Provider\n value={{\n currentTheme: theme,\n }}\n >\n {children}\n </ThemeContext.Provider>\n )\n}\n","import { type VariantProps, createTV } from 'tailwind-variants'\n\nexport const tv = createTV({\n twMerge: true,\n twMergeConfig: {\n extend: {\n classGroups: {\n 'font-size': [\n {\n text: ['threepulse', 'threeandhalfpulse'],\n },\n ],\n 'border-width': [\n {\n border: ['quarterpulse', 'halfpulse'],\n },\n ],\n '--tw-ring-inset': [\n {\n ring: ['none', 'quarterpulse', 'halfpulse'],\n },\n ],\n },\n },\n },\n})\n\nexport type { VariantProps }\n","import { tv } from '~/utils/tv'\n\nexport const AccordionRootVariants = tv({\n base: `block w-full flex-row rounded-mediumcontainer border-quarterpulse\n hover:border-[var(--color-container-border-hovered)] mb-fourpulse\n focus:border-halfpulse focus:border-[var(--color-container-border-focused)]\n `,\n variants: {\n disabled: {\n true: `cursor-not-allowed border-[var(--color-container-border-disabled)] border-quarterpulse\n hover:border-[var(--color-container-border-disabled)]`,\n false: 'border-[var(--color-container-border-default)]',\n },\n },\n})\n\nexport const AccordionVariants = tv({\n base: `flex w-full min-w-[184px] items-center justify-between bg-[var(--color-container-fill-default)] p-fourpulse font-bold font-family-modern text-fourpulse text-text-neutral gap-twopulse leading-small tracking-tiny\n hover:bg-[var(--color-container-fill-hovered)]\n outline-none\n focus-visible:border-[var(--color-container-border-focused)] focus-visible:border-halfpulse`,\n variants: {\n open: {\n true: 'rounded-t-mediumcontainer',\n false: 'rounded-mediumcontainer',\n },\n disabled: {\n true: `cursor-not-allowed border-[var(--color-container-border-disabled)] bg-[var(--color-container-fill-disabled)] text-text-neutral-disabled\n hover:border-[var(--color-container-border-disabled)] hover:bg-[var(--color-container-fill-disabled)]`,\n },\n },\n})\n\nexport const AccordionIconVariants = tv({\n base: 'flex items-center justify-center transition-transform',\n variants: {\n open: {\n true: 'rotate-180',\n false: 'rotate-0',\n },\n },\n})\n\nexport const AccordionContentVariants = tv({\n base: `\n whitespace-pre-wrap break-words w-full max-w-full px-fourpulse py-sixpulse\n `,\n})\n\nexport const AccordionTitleVariants = tv({\n base: 'line-clamp-4',\n})\n"],"mappings":"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","names":["accordion_exports","__export","Accordion","__toCommonJS","AccordionPrimitive","import_react","React","React","import_pulso_design_tokens","React","import_jsx_runtime","ThemeContext","useTheme","mappedTheme","context","ThemeContext","currentTheme","__spreadValues","import_jsx_runtime","Icon","_a","_b","symbol","size","color","props","__objRest","theme","useTheme","resolvedFontSizes","__spreadProps","__spreadValues","import_tailwind_variants","tv","AccordionRootVariants","tv","AccordionVariants","AccordionIconVariants","AccordionContentVariants","AccordionTitleVariants","import_jsx_runtime","DISPLAY_NAME","AccordionRoot","_a","_b","title","disabled","children","otherProps","__objRest","isOpen","setIsOpen","__spreadProps","__spreadValues","AccordionRootVariants","AccordionVariants","prevIsOpen","AccordionTitleVariants","AccordionIconVariants","Icon","AccordionContentVariants","AccordionContent","props","Accordion"]}