UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

1 lines 7.17 kB
{"version":3,"file":"ActionIcon.cjs","names":["createVarsResolver","getSize","getRadius","polymorphicFactory","useProps","useStyles","UnstyledButton","Transition","Box","Loader","classes","ActionIconGroup","ActionIconGroupSection"],"sources":["../../../src/components/ActionIcon/ActionIcon.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n createVarsResolver,\n getRadius,\n getSize,\n MantineColor,\n MantineGradient,\n MantineRadius,\n MantineSize,\n polymorphicFactory,\n PolymorphicFactory,\n StylesApiProps,\n useProps,\n useStyles,\n} from '../../core';\nimport { Loader, LoaderProps } from '../Loader';\nimport { Transition } from '../Transition';\nimport { UnstyledButton } from '../UnstyledButton';\nimport { ActionIconGroup } from './ActionIconGroup/ActionIconGroup';\nimport { ActionIconGroupSection } from './ActionIconGroupSection/ActionIconGroupSection';\nimport classes from './ActionIcon.module.css';\n\nexport type ActionIconVariant =\n | 'filled'\n | 'light'\n | 'outline'\n | 'transparent'\n | 'white'\n | 'subtle'\n | 'default'\n | 'gradient';\n\nexport type ActionIconStylesNames = 'root' | 'loader' | 'icon';\nexport type ActionIconCssVariables = {\n root:\n | '--ai-radius'\n | '--ai-size'\n | '--ai-bg'\n | '--ai-hover'\n | '--ai-hover-color'\n | '--ai-color'\n | '--ai-bd';\n};\n\nexport interface ActionIconProps extends BoxProps, StylesApiProps<ActionIconFactory> {\n 'data-disabled'?: boolean;\n __staticSelector?: string;\n\n /** If set, `Loader` component is displayed instead of the `children` */\n loading?: boolean;\n\n /** Props passed down to the `Loader` component. Ignored when `loading` prop is not set. */\n loaderProps?: LoaderProps;\n\n /** Controls width and height of the button. Numbers are converted to rem. @default 'md'. */\n size?: MantineSize | `input-${MantineSize}` | (string & {}) | number;\n\n /** Key of `theme.colors` or any valid CSS color. @default theme.primaryColor. */\n color?: MantineColor;\n\n /** Key of `theme.radius` or any valid CSS value to set border-radius. Numbers are converted to rem. @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Gradient values used with `variant=\"gradient\"`. @default theme.defaultGradient. */\n gradient?: MantineGradient;\n\n /** Sets `disabled` attribute, prevents interactions */\n disabled?: boolean;\n\n /** Icon element */\n children?: React.ReactNode;\n\n /** If set, adjusts text color based on background color for `filled` variant */\n autoContrast?: boolean;\n}\n\nexport type ActionIconFactory = PolymorphicFactory<{\n props: ActionIconProps;\n defaultComponent: 'button';\n defaultRef: HTMLButtonElement;\n stylesNames: ActionIconStylesNames;\n variant: ActionIconVariant;\n vars: ActionIconCssVariables;\n staticComponents: {\n Group: typeof ActionIconGroup;\n GroupSection: typeof ActionIconGroupSection;\n };\n}>;\n\nconst varsResolver = createVarsResolver<ActionIconFactory>(\n (theme, { size, radius, variant, gradient, color, autoContrast }) => {\n const colors = theme.variantColorResolver({\n color: color || theme.primaryColor,\n theme,\n gradient,\n variant: variant || 'filled',\n autoContrast,\n });\n\n return {\n root: {\n '--ai-size': getSize(size, 'ai-size'),\n '--ai-radius': radius === undefined ? undefined : getRadius(radius),\n '--ai-bg': color || variant ? colors.background : undefined,\n '--ai-hover': color || variant ? colors.hover : undefined,\n '--ai-hover-color': color || variant ? colors.hoverColor : undefined,\n '--ai-color': colors.color,\n '--ai-bd': color || variant ? colors.border : undefined,\n },\n };\n }\n);\n\nexport const ActionIcon = polymorphicFactory<ActionIconFactory>((_props) => {\n const props = useProps('ActionIcon', null, _props);\n const {\n className,\n unstyled,\n variant,\n classNames,\n styles,\n style,\n loading,\n loaderProps,\n size,\n color,\n radius,\n __staticSelector,\n gradient,\n vars,\n children,\n disabled,\n 'data-disabled': dataDisabled,\n autoContrast,\n mod,\n attributes,\n ...others\n } = props;\n\n const getStyles = useStyles<ActionIconFactory>({\n name: ['ActionIcon', __staticSelector],\n props,\n className,\n style,\n classes,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n });\n\n return (\n <UnstyledButton\n {...getStyles('root', { active: !disabled && !loading && !dataDisabled })}\n {...others}\n unstyled={unstyled}\n variant={variant}\n size={size}\n disabled={disabled || loading}\n mod={[{ loading, disabled: disabled || dataDisabled }, mod]}\n >\n {typeof loading === 'boolean' && (\n <Transition mounted={loading} transition=\"slide-down\" duration={150}>\n {(transitionStyles) => (\n <Box component=\"span\" {...getStyles('loader', { style: transitionStyles })} aria-hidden>\n <Loader color=\"var(--ai-color)\" size=\"calc(var(--ai-size) * 0.55)\" {...loaderProps} />\n </Box>\n )}\n </Transition>\n )}\n\n <Box component=\"span\" mod={{ loading }} {...getStyles('icon')}>\n {children}\n </Box>\n </UnstyledButton>\n );\n});\n\nActionIcon.classes = classes;\nActionIcon.varsResolver = varsResolver;\nActionIcon.displayName = '@mantine/core/ActionIcon';\nActionIcon.Group = ActionIconGroup;\nActionIcon.GroupSection = ActionIconGroupSection;\n"],"mappings":";;;;;;;;;;;;;;;;AA0FA,MAAM,eAAeA,6BAAAA,oBAClB,OAAO,EAAE,MAAM,QAAQ,SAAS,UAAU,OAAO,mBAAmB;CACnE,MAAM,SAAS,MAAM,qBAAqB;EACxC,OAAO,SAAS,MAAM;EACtB;EACA;EACA,SAAS,WAAW;EACpB;EACD,CAAC;AAEF,QAAO,EACL,MAAM;EACJ,aAAaC,iBAAAA,QAAQ,MAAM,UAAU;EACrC,eAAe,WAAW,KAAA,IAAY,KAAA,IAAYC,iBAAAA,UAAU,OAAO;EACnE,WAAW,SAAS,UAAU,OAAO,aAAa,KAAA;EAClD,cAAc,SAAS,UAAU,OAAO,QAAQ,KAAA;EAChD,oBAAoB,SAAS,UAAU,OAAO,aAAa,KAAA;EAC3D,cAAc,OAAO;EACrB,WAAW,SAAS,UAAU,OAAO,SAAS,KAAA;EAC/C,EACF;EAEJ;AAED,MAAa,aAAaC,4BAAAA,oBAAuC,WAAW;CAC1E,MAAM,QAAQC,kBAAAA,SAAS,cAAc,MAAM,OAAO;CAClD,MAAM,EACJ,WACA,UACA,SACA,YACA,QACA,OACA,SACA,aACA,MACA,OACA,QACA,kBACA,UACA,MACA,UACA,UACA,iBAAiB,cACjB,cACA,KACA,YACA,GAAG,WACD;CAEJ,MAAM,YAAYC,mBAAAA,UAA6B;EAC7C,MAAM,CAAC,cAAc,iBAAiB;EACtC;EACA;EACA;EACA,SAAA,0BAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,MAACC,uBAAAA,gBAAD;EACE,GAAI,UAAU,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC;EACzE,GAAI;EACM;EACD;EACH;EACN,UAAU,YAAY;EACtB,KAAK,CAAC;GAAE;GAAS,UAAU,YAAY;GAAc,EAAE,IAAI;YAP7D,CASG,OAAO,YAAY,aAClB,iBAAA,GAAA,kBAAA,KAACC,mBAAAA,YAAD;GAAY,SAAS;GAAS,YAAW;GAAa,UAAU;cAC5D,qBACA,iBAAA,GAAA,kBAAA,KAACC,YAAAA,KAAD;IAAK,WAAU;IAAO,GAAI,UAAU,UAAU,EAAE,OAAO,kBAAkB,CAAC;IAAE,eAAA;cAC1E,iBAAA,GAAA,kBAAA,KAACC,eAAAA,QAAD;KAAQ,OAAM;KAAkB,MAAK;KAA8B,GAAI;KAAe,CAAA;IAClF,CAAA;GAEG,CAAA,EAGf,iBAAA,GAAA,kBAAA,KAACD,YAAAA,KAAD;GAAK,WAAU;GAAO,KAAK,EAAE,SAAS;GAAE,GAAI,UAAU,OAAO;GAC1D;GACG,CAAA,CACS;;EAEnB;AAEF,WAAW,UAAUE,0BAAAA;AACrB,WAAW,eAAe;AAC1B,WAAW,cAAc;AACzB,WAAW,QAAQC,wBAAAA;AACnB,WAAW,eAAeC,+BAAAA"}