- ),
- onClose: () => {
- alert('onClose();');
- },
- isUploading: false,
- },
-};
+import type { Meta, StoryObj } from '@storybook/react';
+import ImageUploadDrawer from '~/components/feed/ImageUploadDrawer/ImageUploadDrawer';
+
+/**
+ * `ImageUploadDrawer`는 이미지 업로드 메뉴를 담고 있는 서랍장 컴포넌트입니다. 사용자의 의사에 따라 열고 닫을 수 있습니다.
+ * 이 컴포넌트는 `position: absolute` 속성을 가지며, 기본적으로 최하단에 위치할 것입니다. 컴포넌트를 사용하기 위해서는 부모 요소에 `display: relative` 속성을 적용해 주셔야 합니다.
+ * 스토리에 표시되는 검은 윤곽선의 컨테이너는 단지 이해를 돕기 위한 것으로, 컴포넌트에 포함되지 않습니다.
+ */
+const meta = {
+ title: 'feed/ImageUploadDrawer',
+ component: ImageUploadDrawer,
+ tags: ['autodocs'],
+ decorators: [
+ (Story) => (
+
+
+
+ ),
+ ],
+ argTypes: {
+ isOpen: {
+ description:
+ '서랍장이 열려 있는지의 여부입니다. 이 prop을 조작하여 서랍장을 열고 닫을 수 있습니다.',
+ },
+ children: {
+ description:
+ '랜더링할 자식 요소를 의미합니다. `ThumbnailList` 컴포넌트가 여기에 오면 됩니다.',
+ },
+ slideDistance: {
+ description:
+ '서랍장이 열리게 될 경우 얼마나 많은 거리를 위로 움직여야 할 지를 의미합니다. 입력값은 숫자이며 단위는 `px`입니다.',
+ },
+ onClose: {
+ description:
+ '서랍장이 닫히게 될 때 실행시킬 함수를 의미합니다. 서랍장을 실질적으로 닫는 함수를 여기에 넣어 주시면 됩니다.',
+ },
+ },
+} satisfies Meta;
+
+export default meta;
+
+type Story = StoryObj;
+
+export const Default: Story = {
+ args: {
+ isOpen: false,
+ slideDistance: 163,
+ children: (
+
- );
- },
- ],
-} satisfies Meta;
-
-export default meta;
-type Story = StoryObj;
-
-/**
- * 하늘색의 컨테이너는 본 컴포넌트에 포함되지 않습니다.
- */
-export const Default: Story = {
- args: {},
-};
+import type { Meta, StoryObj } from '@storybook/react';
+import FeedDecoration from './FeedDecoration';
+
+/**
+ * `FeedDecoration` 컴포넌트는 랜딩 페이지의 장식 컴포넌트인 `IntroCardPile` 의 두 번째 장면 해당하는 컴포넌트입니다.
+ * **팀 피드**에 대한 모형을 애니메이션과 함께 보여줍니다.
+ */
+const meta = {
+ title: 'landing/FeedDecoration',
+ component: FeedDecoration,
+ tags: ['autodocs'],
+ decorators: [
+ (Story) => {
+ return (
+
+
+
+ );
+ },
+ ],
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+/**
+ * 하늘색의 컨테이너는 본 컴포넌트에 포함되지 않습니다.
+ */
+export const Default: Story = {
+ args: {},
+};
diff --git a/frontend/src/components/landing/FileDriveDecoration/FileDriveDecoration.stories.tsx b/frontend/src/components/landing/FileDriveDecoration/FileDriveDecoration.stories.tsx
index b45edf3ae..0d6a99e97 100644
--- a/frontend/src/components/landing/FileDriveDecoration/FileDriveDecoration.stories.tsx
+++ b/frontend/src/components/landing/FileDriveDecoration/FileDriveDecoration.stories.tsx
@@ -1,41 +1,41 @@
-import type { Meta, StoryObj } from '@storybook/react';
-import FileDriveDecoration from './FileDriveDecoration';
-
-/**
- * `FileDriveDecoration` 컴포넌트는 랜딩 페이지의 장식 컴포넌트인 `IntroCardPile` 의 세 번째 장면 해당하는 컴포넌트입니다.
- * **팀 드라이브**에 대한 모형을 애니메이션과 함께 보여줍니다.
- * 이 컴포넌트를 작성하는 시점에서, 팀 드라이브의 UI는 구상이 되어 있지 않았기에, 추후 구상이 완료될 경우 이 UI는 바뀔 수도 있습니다.
- */
-const meta = {
- title: 'landing/FileDriveDecoration',
- component: FileDriveDecoration,
- tags: ['autodocs'],
- decorators: [
- (Story) => {
- return (
-
-
-
- );
- },
- ],
-} satisfies Meta;
-
-export default meta;
-type Story = StoryObj;
-
-/**
- * 하늘색의 컨테이너는 본 컴포넌트에 포함되지 않습니다.
- */
-export const Default: Story = {
- args: {},
-};
+import type { Meta, StoryObj } from '@storybook/react';
+import FileDriveDecoration from './FileDriveDecoration';
+
+/**
+ * `FileDriveDecoration` 컴포넌트는 랜딩 페이지의 장식 컴포넌트인 `IntroCardPile` 의 세 번째 장면 해당하는 컴포넌트입니다.
+ * **팀 드라이브**에 대한 모형을 애니메이션과 함께 보여줍니다.
+ * 이 컴포넌트를 작성하는 시점에서, 팀 드라이브의 UI는 구상이 되어 있지 않았기에, 추후 구상이 완료될 경우 이 UI는 바뀔 수도 있습니다.
+ */
+const meta = {
+ title: 'landing/FileDriveDecoration',
+ component: FileDriveDecoration,
+ tags: ['autodocs'],
+ decorators: [
+ (Story) => {
+ return (
+
+
+
+ );
+ },
+ ],
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+/**
+ * 하늘색의 컨테이너는 본 컴포넌트에 포함되지 않습니다.
+ */
+export const Default: Story = {
+ args: {},
+};
diff --git a/frontend/src/components/landing/IntroCardPile/IntroCardPile.stories.tsx b/frontend/src/components/landing/IntroCardPile/IntroCardPile.stories.tsx
index c14e36a26..b72afd1af 100644
--- a/frontend/src/components/landing/IntroCardPile/IntroCardPile.stories.tsx
+++ b/frontend/src/components/landing/IntroCardPile/IntroCardPile.stories.tsx
@@ -1,31 +1,31 @@
-import type { Meta, StoryObj } from '@storybook/react';
-import IntroCardPile from './IntroCardPile';
-
-/**
- * `IntroCardPile` 컴포넌트는 랜딩 페이지의 부속품에 해당하는 컴포넌트로,
- * 여러 장의 카드를 이용하여 팀바팀 서비스의 간략화된 UI를 미리 보여줍니다.
- * 랜딩 페이지의 왼쪽에 배치하여 메인 디자인 요소로 사용될 것입니다.
- */
-const meta = {
- title: 'landing/IntroCardPile',
- component: IntroCardPile,
- tags: ['autodocs'],
-} satisfies Meta;
-
-export default meta;
-type Story = StoryObj;
-
-export const Default: Story = {
- args: {},
-};
-
-/**
- * 이 옵션은 랜딩 페이지와 동일한 배경을 보여주어야 하지만 애니메이션을 이용하여 사용자의 시선을 끌기에는 적합하지 않은 페이지에 적합합니다.
- *
- * 예를 들면, 팀 초대 링크를 입력하는 페이지가 있습니다.
- */
-export const NoAnimation: Story = {
- args: {
- animation: false,
- },
-};
+import type { Meta, StoryObj } from '@storybook/react';
+import IntroCardPile from './IntroCardPile';
+
+/**
+ * `IntroCardPile` 컴포넌트는 랜딩 페이지의 부속품에 해당하는 컴포넌트로,
+ * 여러 장의 카드를 이용하여 팀바팀 서비스의 간략화된 UI를 미리 보여줍니다.
+ * 랜딩 페이지의 왼쪽에 배치하여 메인 디자인 요소로 사용될 것입니다.
+ */
+const meta = {
+ title: 'landing/IntroCardPile',
+ component: IntroCardPile,
+ tags: ['autodocs'],
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const Default: Story = {
+ args: {},
+};
+
+/**
+ * 이 옵션은 랜딩 페이지와 동일한 배경을 보여주어야 하지만 애니메이션을 이용하여 사용자의 시선을 끌기에는 적합하지 않은 페이지에 적합합니다.
+ *
+ * 예를 들면, 팀 초대 링크를 입력하는 페이지가 있습니다.
+ */
+export const NoAnimation: Story = {
+ args: {
+ animation: false,
+ },
+};
diff --git a/frontend/src/components/landing/TeamCalendarDecoration/TeamCalendarDecoration.stories.tsx b/frontend/src/components/landing/TeamCalendarDecoration/TeamCalendarDecoration.stories.tsx
index 4e32191ef..7f554135f 100644
--- a/frontend/src/components/landing/TeamCalendarDecoration/TeamCalendarDecoration.stories.tsx
+++ b/frontend/src/components/landing/TeamCalendarDecoration/TeamCalendarDecoration.stories.tsx
@@ -1,53 +1,53 @@
-import type { Meta, StoryObj } from '@storybook/react';
-import TeamCalendarDecoration from './TeamCalendarDecoration';
-
-/**
- * `TeamCalendarDecoration` 컴포넌트는 랜딩 페이지의 장식 컴포넌트인 `IntroCardPile` 의 첫 번째 장면 해당하는 컴포넌트입니다.
- * **팀 캘린더**에 대한 모형을 애니메이션과 함께 보여줍니다.
- */
-const meta = {
- title: 'landing/TeamCalendarDecoration',
- component: TeamCalendarDecoration,
- tags: ['autodocs'],
- decorators: [
- (Story) => {
- return (
-
-
-
- );
- },
- ],
-} satisfies Meta;
-
-export default meta;
-type Story = StoryObj;
-
-/**
- * 하늘색의 컨테이너는 본 컴포넌트에 포함되지 않습니다.
- */
-export const Default: Story = {
- args: {},
-};
-
-/**
- * 이 옵션은 이 컴포넌트가 주목을 끌어서는 안 되는 페이지에 사용하기에 적합합니다.
- * 랜딩 페이지를 제외한 페이지에서는 이 옵션이 사용될 것입니다.
- *
- * 참고로, 다른 `IntroCardPile` 의 장면들의 경우 이 옵션이 없는데,
- * 이는 `IntroCardPile` 에서 애니메이션을 보여주지 않는 옵션이 켜졌을 경우 다른 장면들은 랜더링될 일이 없기 때문입니다.
- */
-export const NoAnimation: Story = {
- args: {
- animation: false,
- },
-};
+import type { Meta, StoryObj } from '@storybook/react';
+import TeamCalendarDecoration from './TeamCalendarDecoration';
+
+/**
+ * `TeamCalendarDecoration` 컴포넌트는 랜딩 페이지의 장식 컴포넌트인 `IntroCardPile` 의 첫 번째 장면 해당하는 컴포넌트입니다.
+ * **팀 캘린더**에 대한 모형을 애니메이션과 함께 보여줍니다.
+ */
+const meta = {
+ title: 'landing/TeamCalendarDecoration',
+ component: TeamCalendarDecoration,
+ tags: ['autodocs'],
+ decorators: [
+ (Story) => {
+ return (
+
+
+
+ );
+ },
+ ],
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+/**
+ * 하늘색의 컨테이너는 본 컴포넌트에 포함되지 않습니다.
+ */
+export const Default: Story = {
+ args: {},
+};
+
+/**
+ * 이 옵션은 이 컴포넌트가 주목을 끌어서는 안 되는 페이지에 사용하기에 적합합니다.
+ * 랜딩 페이지를 제외한 페이지에서는 이 옵션이 사용될 것입니다.
+ *
+ * 참고로, 다른 `IntroCardPile` 의 장면들의 경우 이 옵션이 없는데,
+ * 이는 `IntroCardPile` 에서 애니메이션을 보여주지 않는 옵션이 켜졌을 경우 다른 장면들은 랜더링될 일이 없기 때문입니다.
+ */
+export const NoAnimation: Story = {
+ args: {
+ animation: false,
+ },
+};
diff --git a/frontend/src/components/link/EmptyLinkPlaceholder/EmptyLinkPlaceholder.stories.tsx b/frontend/src/components/link/EmptyLinkPlaceholder/EmptyLinkPlaceholder.stories.tsx
index f8fbafe17..797c8fec6 100644
--- a/frontend/src/components/link/EmptyLinkPlaceholder/EmptyLinkPlaceholder.stories.tsx
+++ b/frontend/src/components/link/EmptyLinkPlaceholder/EmptyLinkPlaceholder.stories.tsx
@@ -1,19 +1,19 @@
-import type { Meta, StoryObj } from '@storybook/react';
-import EmptyLinkPlaceholder from './EmptyLinkPlaceholder';
-
-/**
- * `EmptyLinkPlaceholder` 는 `LinkTable` 컴포넌트에 있는 링크가 하나도 없을 경우, 대신 보여줄 화면을 구성하는 컴포넌트입니다.
- */
-const meta = {
- title: 'Link/EmptyLinkPlaceholder',
- component: EmptyLinkPlaceholder,
- tags: ['autodocs'],
-} satisfies Meta;
-
-export default meta;
-
-type Story = StoryObj;
-
-export const Default: Story = {
- args: {},
-};
+import type { Meta, StoryObj } from '@storybook/react';
+import EmptyLinkPlaceholder from './EmptyLinkPlaceholder';
+
+/**
+ * `EmptyLinkPlaceholder` 는 `LinkTable` 컴포넌트에 있는 링크가 하나도 없을 경우, 대신 보여줄 화면을 구성하는 컴포넌트입니다.
+ */
+const meta = {
+ title: 'Link/EmptyLinkPlaceholder',
+ component: EmptyLinkPlaceholder,
+ tags: ['autodocs'],
+} satisfies Meta;
+
+export default meta;
+
+type Story = StoryObj;
+
+export const Default: Story = {
+ args: {},
+};
diff --git a/frontend/src/components/link/LinkTable/LinkTable.stories.tsx b/frontend/src/components/link/LinkTable/LinkTable.stories.tsx
index 7f28402f4..c26fc59a9 100644
--- a/frontend/src/components/link/LinkTable/LinkTable.stories.tsx
+++ b/frontend/src/components/link/LinkTable/LinkTable.stories.tsx
@@ -1,36 +1,36 @@
-import type { Meta, StoryObj } from '@storybook/react';
-import TeamLinkTable from './LinkTable';
-
-/**
- * `LinkTable` 는 팀 링크 목록을 표시할 메뉴 컴포넌트입니다.
- */
-const meta = {
- title: 'Link/TeamLinkTable',
- component: TeamLinkTable,
- tags: ['autodocs'],
- decorators: [
- (Story) => (
-
-
-
- ),
- ],
-} satisfies Meta;
-
-export default meta;
-
-type Story = StoryObj;
-
-/**
- * 회색 배경은 컴포넌트를 고정시키고 크기를 조절하기 위해 사용한 것으로, 컴포넌트에는 포함되지 않습니다.
- */
-export const Default: Story = {
- args: {},
-};
+import type { Meta, StoryObj } from '@storybook/react';
+import TeamLinkTable from './LinkTable';
+
+/**
+ * `LinkTable` 는 팀 링크 목록을 표시할 메뉴 컴포넌트입니다.
+ */
+const meta = {
+ title: 'Link/TeamLinkTable',
+ component: TeamLinkTable,
+ tags: ['autodocs'],
+ decorators: [
+ (Story) => (
+
+
+
+ ),
+ ],
+} satisfies Meta;
+
+export default meta;
+
+type Story = StoryObj;
+
+/**
+ * 회색 배경은 컴포넌트를 고정시키고 크기를 조절하기 위해 사용한 것으로, 컴포넌트에는 포함되지 않습니다.
+ */
+export const Default: Story = {
+ args: {},
+};
diff --git a/frontend/src/components/team_calendar/FakeScheduleBarsScreen/FakeScheduleBarsScreen.stories.tsx b/frontend/src/components/team_calendar/FakeScheduleBarsScreen/FakeScheduleBarsScreen.stories.tsx
index 66a9c0bc4..daa46eea2 100644
--- a/frontend/src/components/team_calendar/FakeScheduleBarsScreen/FakeScheduleBarsScreen.stories.tsx
+++ b/frontend/src/components/team_calendar/FakeScheduleBarsScreen/FakeScheduleBarsScreen.stories.tsx
@@ -1,127 +1,127 @@
-import type { Meta, StoryObj } from '@storybook/react';
-import type { ComponentType } from 'react';
-import FakeScheduleBarsScreen from '~/components/team_calendar/FakeScheduleBarsScreen/FakeScheduleBarsScreen';
-import type { GeneratedScheduleBar } from '~/types/schedule';
-
-/**
- * `FakeScheduleBarsScreen` 는 캘린더 바의 드래그 기능을 구현하기 위해 사용자에게 보여주는 가짜 캘린더 바로 구성된, 시각적인 컴포넌트입니다.
- *
- * `mode = schedule`일 경우, 마우스 조작을 통해 x, y 값을 계속해서 업데이트하면 마우스를 따라다니듯이 작동하도록 만들 수 있습니다. x, y 값을 변경하면서 컴포넌트의 변화를 테스트하세요.
- */
-const meta = {
- title: 'Schedule/FakeScheduleBarsScreen',
- component: FakeScheduleBarsScreen,
- tags: ['autodocs'],
- decorators: [
- (Story: ComponentType) => (
-
-
-
- ),
- ],
- argTypes: {
- mode: {
- description:
- '이 컴포넌트의 모드를 의미합니다. 사용 목적에 따라 `schedule`과 `indicator` 중 하나를 명시해 주세요.',
- },
- scheduleBars: {
- description: '렌더링할 스케줄 바들의 정보를 의미합니다.',
- },
- relativeX: {
- description:
- '기존 좌표에서 좌우로 얼마나 이동한 위치에 렌더링 시킬 것인지를 의미합니다. 이 값이 양수이면 기존 좌표에서 수치만큼 오른쪽으로 이동하여 렌더링되고, 음수일 경우 왼쪽으로 이동하여 렌더링됩니다. 단위는 픽셀(px)입니다. **이 프로퍼티는 `mode = schedule`일 때만 사용할 수 있습니다.**',
- },
- relativeY: {
- description:
- '기존 좌표에서 상하로 얼마나 이동한 위치에 렌더링 시킬 것인지를 의미합니다. 이 값이 양수이면 기존 좌표에서 수치만큼 아래쪽으로 이동하여 렌더링되고, 음수일 경우 위쪽으로 이동하여 렌더링됩니다. 단위는 픽셀(px)입니다. **이 프로퍼티는 `mode = schedule`일 때만 사용할 수 있습니다.**',
- },
- },
-} satisfies Meta;
-
-export default meta;
-
-type Story = StoryObj;
-
-const scheduleBars: GeneratedScheduleBar[] = [
- {
- id: '1',
- scheduleId: 1105,
- title: '바쁜 필립의 3주짜리 일정',
- row: 0,
- column: 1,
- duration: 6,
- level: 0,
- roundedStart: true,
- roundedEnd: false,
- schedule: {
- id: 1105,
- title: '바쁜 필립의 3주짜리 일정',
- startDateTime: '2023-06-26 00:00',
- endDateTime: '2023-07-12 23:59',
- },
- },
- {
- id: '2',
- scheduleId: 1105,
- title: '바쁜 필립의 3주짜리 일정',
- row: 1,
- column: 0,
- duration: 7,
- level: 0,
- roundedStart: false,
- roundedEnd: false,
- schedule: {
- id: 1105,
- title: '바쁜 필립의 3주짜리 일정',
- startDateTime: '2023-06-26 00:00',
- endDateTime: '2023-07-12 23:59',
- },
- },
- {
- id: '3',
- scheduleId: 1105,
- title: '바쁜 필립의 3주짜리 일정',
- row: 2,
- column: 0,
- duration: 4,
- level: 0,
- roundedStart: false,
- roundedEnd: true,
- schedule: {
- id: 1105,
- title: '바쁜 필립의 3주짜리 일정',
- startDateTime: '2023-06-26 00:00',
- endDateTime: '2023-07-12 23:59',
- },
- },
-];
-
-/**
- * 이 모드는 가짜 스케줄 바를 보여줘야 할 경우에 사용합니다.
- */
-export const ScheduleMode: Story = {
- args: {
- mode: 'schedule',
- scheduleBars,
- relativeX: 0,
- relativeY: 0,
- },
-};
-
-/**
- * 이 모드는 스케줄 바가 놓일 위치를 시각적으로 보여줘야 할 경우에 사용합니다.
- */
-export const IndicatorMode: Story = {
- args: {
- mode: 'indicator',
- scheduleBars,
- },
-};
+import type { Meta, StoryObj } from '@storybook/react';
+import type { ComponentType } from 'react';
+import FakeScheduleBarsScreen from '~/components/team_calendar/FakeScheduleBarsScreen/FakeScheduleBarsScreen';
+import type { GeneratedScheduleBar } from '~/types/schedule';
+
+/**
+ * `FakeScheduleBarsScreen` 는 캘린더 바의 드래그 기능을 구현하기 위해 사용자에게 보여주는 가짜 캘린더 바로 구성된, 시각적인 컴포넌트입니다.
+ *
+ * `mode = schedule`일 경우, 마우스 조작을 통해 x, y 값을 계속해서 업데이트하면 마우스를 따라다니듯이 작동하도록 만들 수 있습니다. x, y 값을 변경하면서 컴포넌트의 변화를 테스트하세요.
+ */
+const meta = {
+ title: 'Schedule/FakeScheduleBarsScreen',
+ component: FakeScheduleBarsScreen,
+ tags: ['autodocs'],
+ decorators: [
+ (Story: ComponentType) => (
+