Files
medusa-store/www/packages/docs-ui/src/components/Button/index.tsx
Shahed Nasser b3f75d8f21 docs: add AI Assistant (#5249)
* added components

* added ai assistant button

* change styling

* improve AI assistant

* change to a drawer

* added command support into search

* add AiAssistant to all projects

* remove usage of Text component

* added error handling

* use recaptcha

* fix new configurations

* fix background color

* change suggested questions
2023-10-05 11:10:44 +03:00

80 lines
3.0 KiB
TypeScript

import clsx from "clsx"
import React from "react"
export type ButtonVariants = "primary" | "secondary" | "clear"
export type ButtonType = "default" | "icon"
export type ButtonProps = {
isSelected?: boolean
disabled?: boolean
variant?: ButtonVariants
className?: string
buttonType?: ButtonType
buttonRef?: React.LegacyRef<HTMLButtonElement>
} & React.HTMLAttributes<HTMLButtonElement>
export const Button = ({
className,
children,
variant = "primary",
buttonType = "default",
buttonRef,
...props
}: ButtonProps) => {
const variantClasses = {
primary: [
"py-[5px] px-docs_0.75 rounded-docs_sm cursor-pointer",
"bg-button-inverted bg-medusa-button-inverted dark:bg-button-inverted-dark",
"hover:bg-medusa-button-inverted-hover hover:bg-no-image hover:no-underline",
"active:bg-medusa-button-inverted-pressed active:bg-no-image",
"focus:bg-medusa-button-inverted-pressed focus:bg-no-image",
"shadow-button-colored active:shadow-button-colored-focused focus:shadow-button-colored-focused transition-shadow",
"dark:shadow-button-colored-dark dark:active:shadow-button-colored-focused-dark dark:focus:shadow-button-colored-focused-dark",
"disabled:!bg-no-image disabled:bg-medusa-bg-disabled",
"disabled:cursor-not-allowed disabled:border-medusa-border-base",
"text-compact-small-plus text-medusa-fg-on-inverted",
"[&_a]:text-medusa-fg-on-inverted",
"disabled:text-medusa-fg-disabled",
"[&_a]:disabled:text-medusa-fg-disabled",
"border border-medusa-border-loud",
"select-none",
],
secondary: [
"py-[5px] px-docs_0.75 rounded-docs_sm cursor-pointer",
"bg-button-neutral bg-medusa-button-neutral dark:bg-button-neutral-dark",
"hover:bg-medusa-button-neutral-hover hover:bg-no-image hover:no-underline",
"active:bg-medusa-button-neutral-pressed active:bg-no-image",
"focus:bg-medusa-button-neutral-pressed focus:bg-no-image",
"disabled:!bg-no-image disabled:bg-medusa-bg-disabled",
"disabled:cursor-not-allowed",
"border border-solid border-medusa-border-base",
"text-compact-small-plus text-medusa-fg-base",
"[&_a]:text-medusa-fg-base",
"shadow-button-neutral focus:shadow-button-neutral-focused active:shadow-button-neutral-focused transition-shadow",
"dark:shadow-button-neutral dark:focus:shadow-button-neutral-focused dark:active:shadow-button-neutral-focused",
"select-none",
],
clear: [
"bg-transparent shadow-none border-0 outline-none cursor-pointer text-fg-medusa-subtle",
],
}
return (
<button
className={clsx(
"inline-flex flex-row justify-center items-center gap-[6px]",
variant === "primary" && variantClasses.primary,
variant === "secondary" && variantClasses.secondary,
variant === "clear" && variantClasses.clear,
buttonType === "icon" && "!px-docs_0.25",
className
)}
ref={buttonRef}
{...props}
>
{children}
</button>
)
}