diff --git a/web/src/beta/components/TabButton/index.stories.tsx b/web/src/beta/components/TabButton/index.stories.tsx new file mode 100644 index 0000000000..87b79dafb5 --- /dev/null +++ b/web/src/beta/components/TabButton/index.stories.tsx @@ -0,0 +1,25 @@ +import { Meta, StoryObj } from "@storybook/react"; + +import TabButton from "."; + +const meta: Meta = { + component: TabButton, +}; + +export default meta; + +type Story = StoryObj; + +export const Close: Story = { + args: { + label: "Editor", + selected: false, + }, +}; + +export const Open: Story = { + args: { + label: "Editor", + selected: true, + }, +}; diff --git a/web/src/beta/components/TabButton/index.test.tsx b/web/src/beta/components/TabButton/index.test.tsx new file mode 100644 index 0000000000..68176ae7b5 --- /dev/null +++ b/web/src/beta/components/TabButton/index.test.tsx @@ -0,0 +1,28 @@ +import { expect, test } from "vitest"; + +import { render, screen } from "@reearth/test/utils"; + +import TabButton from "."; + +const handleClick = () => { +}; + +test("1. should be rendered", () => { + render(); +}); + +test("2. should display button label", () => { + render(); + expect(screen.getByRole("button")).toBeInTheDocument(); + expect(screen.getByText(/test2/)).toBeInTheDocument(); +}); + +test("3. should disabled true button", () => { + render(); + expect(screen.getByRole("button")).toBeDisabled(); +}); + +test("4. should disabled false button", () => { + render(); + expect(screen.getByRole("button")).not.toBeDisabled(); +}); diff --git a/web/src/beta/components/TabButton/index.tsx b/web/src/beta/components/TabButton/index.tsx new file mode 100644 index 0000000000..f21fc9ed9c --- /dev/null +++ b/web/src/beta/components/TabButton/index.tsx @@ -0,0 +1,38 @@ +import type { FC } from "react"; + +import { styled } from "@reearth/services/theme"; + +export type Props = { + label: string; + onClick?: () => void; + selected?: boolean; +}; + +const TabButton: FC = ({ label, onClick, selected }) => { + return ( + + ); +}; + +type ButtonProps = { + disabled?: boolean; +}; + +const Button = styled.button` + background: ${({ disabled }) => (disabled ? "#232226" : "inherit")}; + padding: 8px 12px; + height: 35px; + border-radius: 4px; + :hover { + background: #232226; + transition: all 0.5s ease; + } + color: ${({ disabled }) => (disabled ? "#C7C5C5" : "#4A4A4A")}; + font-size: 14px; + line-height: 19px; + text-align: center; +`; + +export default TabButton;