@yamada-ui/tag
Version:
Yamada UI tag component
1 lines • 5.75 kB
Source Map (JSON)
{"version":3,"sources":["../src/tag.tsx"],"sourcesContent":["import type { CSSUIObject, FC, HTMLUIProps, ThemeProps } from \"@yamada-ui/core\"\nimport type { MouseEventHandler, ReactElement } from \"react\"\nimport {\n forwardRef,\n omitThemeProps,\n ui,\n useComponentMultiStyle,\n} from \"@yamada-ui/core\"\nimport { Icon } from \"@yamada-ui/icon\"\nimport { useClickable } from \"@yamada-ui/use-clickable\"\nimport { ariaAttr, cx, dataAttr } from \"@yamada-ui/utils\"\nimport { useRef } from \"react\"\n\ninterface TagOptions {\n /**\n * If `true`, the tag is disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Icon to be displayed to the end of the tag.\n */\n endIcon?: ReactElement\n /**\n * If `true`, the tag is disabled.\n *\n * @default false\n *\n * @deprecated Use `disabled` instead.\n */\n isDisabled?: boolean\n /**\n * Icon to be displayed to the left of the tag.\n *\n * @deprecated Use `startIcon` instead.\n */\n leftIcon?: ReactElement\n /**\n * Icon to be displayed to the right of the tag.\n *\n * @deprecated Use `endIcon` instead.\n */\n rightIcon?: ReactElement\n /**\n * Icon to be displayed to the start of the tag.\n */\n startIcon?: ReactElement\n /**\n * Props for tag close button element.\n */\n closeButtonProps?: TagCloseButtonProps\n /**\n * Function to be executed when the close button is clicked.\n */\n onClose?: MouseEventHandler<HTMLElement>\n}\n\nexport interface TagProps\n extends HTMLUIProps<\"span\">,\n ThemeProps<\"Tag\">,\n TagOptions {}\n\n/**\n * `Tag` is a component used to categorize or organize items using keywords that describe them.\n *\n * @see Docs https://yamada-ui.com/components/data-display/tag\n */\nexport const Tag = forwardRef<TagProps, \"span\">((props, ref) => {\n const [styles, mergedProps] = useComponentMultiStyle(\"Tag\", props)\n const {\n className,\n children,\n isDisabled,\n disabled = isDisabled,\n rightIcon,\n endIcon = rightIcon,\n leftIcon,\n startIcon = leftIcon,\n closeButtonProps,\n onClose,\n ...rest\n } = omitThemeProps(mergedProps)\n\n const css: CSSUIObject = {\n alignItems: \"center\",\n display: \"inline-flex\",\n gap: \"fallback(1, 0.25rem)\",\n maxW: \"100%\",\n verticalAlign: \"top\",\n ...styles.container,\n }\n\n return (\n <ui.span\n ref={ref}\n className={cx(\"ui-tag\", className)}\n aria-disabled={ariaAttr(disabled)}\n data-disabled={dataAttr(disabled)}\n __css={css}\n {...rest}\n >\n {startIcon}\n\n <ui.span lineClamp={1} __css={styles.label}>\n {children}\n </ui.span>\n\n {endIcon}\n\n {onClose ? (\n <TagCloseButton\n disabled={disabled}\n onClick={onClose}\n {...closeButtonProps}\n >\n <TagCloseIcon />\n </TagCloseButton>\n ) : null}\n </ui.span>\n )\n})\n\nTag.displayName = \"Tag\"\nTag.__ui__ = \"Tag\"\n\nconst TagCloseIcon: FC = () => {\n return (\n <Icon fontSize=\"1.125rem\" verticalAlign=\"inherit\" viewBox=\"0 0 512 512\">\n <path\n d=\"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z\"\n fill=\"currentColor\"\n />\n </Icon>\n )\n}\n\nTagCloseIcon.displayName = \"TagCloseIcon\"\nTagCloseIcon.__ui__ = \"TagCloseIcon\"\n\ninterface TagCloseButtonProps extends HTMLUIProps<\"span\"> {\n disabled?: boolean\n}\n\nconst TagCloseButton: FC<TagCloseButtonProps> = ({ children, ...props }) => {\n const [styles] = useComponentMultiStyle(\"Tag\", props)\n const ref = useRef<HTMLSpanElement>(null)\n\n const css: CSSUIObject = {\n alignItems: \"center\",\n cursor: \"pointer\",\n display: \"inline-flex\",\n justifyContent: \"center\",\n outline: \"0\",\n ...styles.closeButton,\n }\n\n const rest = useClickable<HTMLSpanElement>({ ref, ...props })\n\n return (\n <ui.span aria-label=\"Close tag\" __css={css} {...rest}>\n {children}\n </ui.span>\n )\n}\n\nTagCloseButton.displayName = \"TagCloseButton\"\nTagCloseButton.__ui__ = \"TagCloseButton\"\n"],"mappings":";;;AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,UAAU,IAAI,gBAAgB;AACvC,SAAS,cAAc;AAmFnB,SAUE,KAVF;AA1BG,IAAM,MAAM,WAA6B,CAAC,OAAO,QAAQ;AAC9D,QAAM,CAAC,QAAQ,WAAW,IAAI,uBAAuB,OAAO,KAAK;AACjE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI,eAAe,WAAW;AAE9B,QAAM,MAAmB;AAAA,IACvB,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,KAAK;AAAA,IACL,MAAM;AAAA,IACN,eAAe;AAAA,IACf,GAAG,OAAO;AAAA,EACZ;AAEA,SACE;AAAA,IAAC,GAAG;AAAA,IAAH;AAAA,MACC;AAAA,MACA,WAAW,GAAG,UAAU,SAAS;AAAA,MACjC,iBAAe,SAAS,QAAQ;AAAA,MAChC,iBAAe,SAAS,QAAQ;AAAA,MAChC,OAAO;AAAA,MACN,GAAG;AAAA,MAEH;AAAA;AAAA,QAED,oBAAC,GAAG,MAAH,EAAQ,WAAW,GAAG,OAAO,OAAO,OAClC,UACH;AAAA,QAEC;AAAA,QAEA,UACC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,SAAS;AAAA,YACR,GAAG;AAAA,YAEJ,8BAAC,gBAAa;AAAA;AAAA,QAChB,IACE;AAAA;AAAA;AAAA,EACN;AAEJ,CAAC;AAED,IAAI,cAAc;AAClB,IAAI,SAAS;AAEb,IAAM,eAAmB,MAAM;AAC7B,SACE,oBAAC,QAAK,UAAS,YAAW,eAAc,WAAU,SAAQ,eACxD;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAK;AAAA;AAAA,EACP,GACF;AAEJ;AAEA,aAAa,cAAc;AAC3B,aAAa,SAAS;AAMtB,IAAM,iBAA0C,CAAC,EAAE,UAAU,GAAG,MAAM,MAAM;AAC1E,QAAM,CAAC,MAAM,IAAI,uBAAuB,OAAO,KAAK;AACpD,QAAM,MAAM,OAAwB,IAAI;AAExC,QAAM,MAAmB;AAAA,IACvB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,GAAG,OAAO;AAAA,EACZ;AAEA,QAAM,OAAO,aAA8B,EAAE,KAAK,GAAG,MAAM,CAAC;AAE5D,SACE,oBAAC,GAAG,MAAH,EAAQ,cAAW,aAAY,OAAO,KAAM,GAAG,MAC7C,UACH;AAEJ;AAEA,eAAe,cAAc;AAC7B,eAAe,SAAS;","names":[]}