@team-frieeren/components 1.0.18 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Button.js CHANGED
@@ -72,7 +72,8 @@ var Button = /*#__PURE__*/forwardRef(function (_a, ref) {
72
72
  color = _a.color,
73
73
  backgroundColor = _a.backgroundColor,
74
74
  borderColor = _a.borderColor,
75
- rest = __rest(_a, ["type", "display", "disabled", "loading", "size", "className", "children", "color", "backgroundColor", "borderColor"]);
75
+ borderRadius = _a.borderRadius,
76
+ rest = __rest(_a, ["type", "display", "disabled", "loading", "size", "className", "children", "color", "backgroundColor", "borderColor", "borderRadius"]);
76
77
  return jsxs("button", _assign({
77
78
  ref: ref,
78
79
  "data-frieeren-component": "Button",
@@ -83,7 +84,8 @@ var Button = /*#__PURE__*/forwardRef(function (_a, ref) {
83
84
  style: {
84
85
  color: color,
85
86
  backgroundColor: backgroundColor,
86
- borderColor: borderColor
87
+ borderColor: borderColor,
88
+ borderRadius: borderRadius
87
89
  }
88
90
  }, rest, {
89
91
  children: [jsx("span", {
@@ -0,0 +1,85 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
3
+ import cx from 'classnames';
4
+
5
+ function FloatingActionButton(_a) {
6
+ var _b = _a.disabled,
7
+ disabled = _b === void 0 ? false : _b,
8
+ className = _a.className,
9
+ _c = _a.position,
10
+ position = _c === void 0 ? "fixed" : _c,
11
+ top = _a.top,
12
+ left = _a.left,
13
+ _d = _a.bottom,
14
+ bottom = _d === void 0 ? 16 : _d,
15
+ _e = _a.right,
16
+ right = _e === void 0 ? 16 : _e,
17
+ _f = _a.actions,
18
+ actions = _f === void 0 ? [] : _f,
19
+ icon = _a.icon,
20
+ openIcon = _a.openIcon,
21
+ closeIcon = _a.closeIcon,
22
+ _onClick = _a.onClick;
23
+ var _g = useState(false),
24
+ isOpen = _g[0],
25
+ setIsOpen = _g[1];
26
+ var style = {
27
+ position: position
28
+ };
29
+ if (top !== undefined) style.top = top;
30
+ if (left !== undefined) style.left = left;
31
+ if (bottom !== undefined) style.bottom = bottom;
32
+ if (right !== undefined) style.right = right;
33
+ return jsxs("div", {
34
+ className: cx("floating-action-button", className),
35
+ "data-frieeren-component": "floating-action-button",
36
+ style: style,
37
+ children: [jsx("button", {
38
+ className: cx("floating-action-button--button"),
39
+ style: {
40
+ backgroundColor: "#3A8DFF"
41
+ },
42
+ disabled: disabled,
43
+ type: "button",
44
+ onClick: function onClick() {
45
+ setIsOpen(!isOpen);
46
+ _onClick === null || _onClick === void 0 ? void 0 : _onClick();
47
+ },
48
+ children: isOpen ? closeIcon !== null && closeIcon !== void 0 ? closeIcon : icon : openIcon !== null && openIcon !== void 0 ? openIcon : icon
49
+ }), jsx("div", {
50
+ style: {
51
+ position: "absolute",
52
+ display: "flex",
53
+ flexDirection: "column",
54
+ gap: "20px",
55
+ bottom: "76px",
56
+ right: "0",
57
+ opacity: isOpen ? 1 : 0,
58
+ visibility: isOpen ? "visible" : "hidden",
59
+ transition: "all 0.3s ease-in-out"
60
+ },
61
+ children: actions === null || actions === void 0 ? void 0 : actions.map(function (action, index) {
62
+ return jsx("div", {
63
+ style: {
64
+ transform: isOpen ? "translateY(0)" : "translateY(".concat(40 - index * 20, "px)"),
65
+ transition: "transform 0.3s ease-in-out",
66
+ transitionDelay: isOpen ? "".concat((index + 1) * 0.1, "s") : "0s"
67
+ },
68
+ children: jsx("button", {
69
+ className: cx("floating-action-button--button", "floating-action-button--action-button"),
70
+ disabled: action.disabled,
71
+ type: "button",
72
+ onClick: function onClick() {
73
+ var _a;
74
+ (_a = action.onClick) === null || _a === void 0 ? void 0 : _a.call(action);
75
+ setIsOpen(false);
76
+ },
77
+ children: action.icon
78
+ })
79
+ }, index);
80
+ })
81
+ })]
82
+ });
83
+ }
84
+
85
+ export { FloatingActionButton };
package/dist/Switch.js ADDED
@@ -0,0 +1,30 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
3
+ import { Switch as Switch$1 } from 'radix-ui';
4
+ import cx from 'classnames';
5
+
6
+ var Switch = /*#__PURE__*/forwardRef(function (_a, ref) {
7
+ var className = _a.className,
8
+ _b = _a.defaultValue,
9
+ defaultValue = _b === void 0 ? false : _b,
10
+ onChange = _a.onChange,
11
+ _c = _a.disabled,
12
+ disabled = _c === void 0 ? false : _c,
13
+ value = _a.value;
14
+ return jsx(Switch$1.Root, {
15
+ ref: ref,
16
+ defaultChecked: defaultValue,
17
+ onCheckedChange: onChange,
18
+ checked: value,
19
+ className: cx("switch", className),
20
+ "data-frieeren-component": "Switch",
21
+ disabled: disabled,
22
+ "aria-disabled": disabled,
23
+ children: jsx(Switch$1.Thumb, {
24
+ className: "switch-thumb"
25
+ })
26
+ });
27
+ });
28
+ Switch.displayName = "Switch";
29
+
30
+ export { Switch };
package/dist/Tabs.js CHANGED
@@ -1,4 +1,4 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { useState, useCallback, useEffect, useRef } from 'react';
3
3
  import * as TabsBase from '@radix-ui/react-tabs';
4
4
 
@@ -25,35 +25,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
25
25
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
26
26
  };
27
27
 
28
- var Root = function Root(_a) {
29
- var props = __rest(_a, []);
30
- return jsx(TabsBase.Root, _assign({
31
- "data-frieeren-component": "Tabs",
32
- className: "tabs"
33
- }, props));
34
- };
35
- var List = function List(_a) {
36
- var props = __rest(_a, []);
37
- return jsx(TabsBase.List, _assign({
38
- "data-frieeren-component": "TabsList",
39
- className: "tabs--list"
40
- }, props));
41
- };
42
- var Trigger = function Trigger(_a) {
43
- var props = __rest(_a, []);
44
- return jsx(TabsBase.Trigger, _assign({
45
- "data-frieeren-component": "TabsTrigger",
46
- className: "tabs--trigger"
47
- }, props));
48
- };
49
- var Content = function Content(_a) {
50
- var props = __rest(_a, []);
51
- return jsx(TabsBase.Content, _assign({
52
- "data-frieeren-component": "TabsContent",
53
- className: "tabs--content"
54
- }, props));
55
- };
56
-
57
28
  /**
58
29
  * 탭 인디케이터의 위치를 계산하고 관리하는 커스텀 훅
59
30
  * @param {UseTabsIndicatorProps} props - 탭 인디케이터 설정
@@ -124,36 +95,29 @@ var Tabs = function Tabs(props) {
124
95
  value = props.value,
125
96
  rest = __rest(props, ["width", "tabItems", "value"]);
126
97
  var listRef = useRef(null);
127
- var indicatorStyle = useTabsIndicator({
98
+ useTabsIndicator({
128
99
  listRef: listRef
129
100
  }).indicatorStyle;
130
- return jsxs(Root, _assign({
101
+ return jsx(TabsBase.Root, _assign({
102
+ "data-frieeren-component": "Tabs",
103
+ className: "tabs",
131
104
  value: value
132
105
  }, rest, {
133
106
  style: {
134
107
  width: width
135
108
  },
136
- children: [jsxs("div", {
109
+ children: jsx(TabsBase.List, {
137
110
  ref: listRef,
138
- className: "tabs--list-wrapper",
139
- children: [jsx(List, {
140
- "data-orientation": "horizontal",
141
- children: tabItems.map(function (item) {
142
- return jsx(Trigger, {
143
- value: item.value,
144
- children: item.text
145
- }, "tabTrigger_".concat(item.value));
146
- })
147
- }), jsx("div", {
148
- className: "tabs--indicator",
149
- style: indicatorStyle
150
- })]
151
- }), tabItems.map(function (item) {
152
- return jsx(Content, {
153
- value: item.value,
154
- children: item.content
155
- }, "tabContent_".concat(item.value));
156
- })]
111
+ "data-orientation": "horizontal",
112
+ className: "tabs--list",
113
+ children: tabItems.map(function (item) {
114
+ return jsx(TabsBase.Trigger, {
115
+ value: item.value,
116
+ className: "tabs--trigger",
117
+ children: item.label
118
+ }, "tabTrigger_".concat(item.value));
119
+ })
120
+ })
157
121
  }));
158
122
  };
159
123
 
@@ -10,6 +10,7 @@ export declare const Button: React.ForwardRefExoticComponent<{
10
10
  color?: string;
11
11
  backgroundColor?: string;
12
12
  borderColor?: string;
13
+ borderRadius?: React.CSSProperties["borderRadius"];
13
14
  } & {
14
15
  children?: React.ReactNode | undefined;
15
16
  } & React.RefAttributes<HTMLButtonElement>>;
@@ -24,6 +25,7 @@ declare const LogButton: React.ForwardRefExoticComponent<{
24
25
  color?: string;
25
26
  backgroundColor?: string;
26
27
  borderColor?: string;
28
+ borderRadius?: React.CSSProperties["borderRadius"];
27
29
  } & {
28
30
  children?: React.ReactNode | undefined;
29
31
  } & {
@@ -12,6 +12,7 @@ declare const meta: {
12
12
  color?: string;
13
13
  backgroundColor?: string;
14
14
  borderColor?: string;
15
+ borderRadius?: React.CSSProperties["borderRadius"];
15
16
  } & {
16
17
  children?: import("react").ReactNode | undefined;
17
18
  } & {
@@ -37,6 +38,9 @@ declare const meta: {
37
38
  disabled: {
38
39
  description: string;
39
40
  };
41
+ borderRadius: {
42
+ description: string;
43
+ };
40
44
  };
41
45
  };
42
46
  export default meta;
@@ -14,6 +14,7 @@ export type ButtonProps = PropsWithChildren<{
14
14
  color?: string;
15
15
  backgroundColor?: string;
16
16
  borderColor?: string;
17
+ borderRadius?: React.CSSProperties["borderRadius"];
17
18
  }>;
18
19
  export type LogButtonProps = ButtonProps & {
19
20
  logParams?: Record<string, string>;
@@ -0,0 +1,2 @@
1
+ import { FloatingActionButtonProps } from "./FloatingActionButton.type";
2
+ export declare function FloatingActionButton({ disabled, className, position, top, left, bottom, right, actions, icon, openIcon, closeIcon, onClick }: FloatingActionButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,56 @@
1
+ import { StoryObj } from "@storybook/react";
2
+ import { FloatingActionButton } from "./FloatingActionButton";
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof FloatingActionButton;
6
+ parameters: {
7
+ layout: string;
8
+ };
9
+ tags: string[];
10
+ argTypes: {
11
+ disabled: {
12
+ control: "boolean";
13
+ description: string;
14
+ };
15
+ position: {
16
+ control: "select";
17
+ options: string[];
18
+ description: string;
19
+ };
20
+ top: {
21
+ control: "number";
22
+ description: string;
23
+ };
24
+ left: {
25
+ control: "number";
26
+ description: string;
27
+ };
28
+ bottom: {
29
+ control: "number";
30
+ description: string;
31
+ };
32
+ right: {
33
+ control: "number";
34
+ description: string;
35
+ };
36
+ actions: {
37
+ control: "object";
38
+ description: string;
39
+ };
40
+ icon: {
41
+ control: "object";
42
+ description: string;
43
+ };
44
+ openIcon: {
45
+ control: "object";
46
+ description: string;
47
+ };
48
+ closeIcon: {
49
+ control: "object";
50
+ description: string;
51
+ };
52
+ };
53
+ };
54
+ export default meta;
55
+ type Story = StoryObj<typeof meta>;
56
+ export declare const Base: Story;
@@ -0,0 +1,19 @@
1
+ export type FloatingActionButtonAction = {
2
+ icon: React.ReactNode;
3
+ onClick?: () => void;
4
+ disabled?: boolean;
5
+ };
6
+ export type FloatingActionButtonProps = {
7
+ className?: string;
8
+ disabled?: boolean;
9
+ position?: "fixed" | "absolute";
10
+ top?: React.CSSProperties["top"];
11
+ left?: React.CSSProperties["left"];
12
+ bottom?: React.CSSProperties["bottom"];
13
+ right?: React.CSSProperties["right"];
14
+ actions?: FloatingActionButtonAction[];
15
+ icon?: React.ReactNode;
16
+ openIcon?: React.ReactNode;
17
+ closeIcon?: React.ReactNode;
18
+ onClick?: () => void;
19
+ };
@@ -0,0 +1 @@
1
+ export { FloatingActionButton } from "./FloatingActionButton";
@@ -0,0 +1,2 @@
1
+ import { SwitchProps } from "./Switch.type";
2
+ export declare const Switch: import("react").ForwardRefExoticComponent<SwitchProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -1,22 +1,32 @@
1
1
  import type { StoryObj } from "@storybook/react";
2
2
  declare const meta: {
3
3
  title: string;
4
- component: import("react").ForwardRefExoticComponent<import("./Toggle.type").ToggleProps & import("react").RefAttributes<HTMLButtonElement>>;
4
+ component: import("react").ForwardRefExoticComponent<import("./Switch.type").SwitchProps & import("react").RefAttributes<HTMLButtonElement>>;
5
5
  parameters: {
6
6
  layout: string;
7
7
  };
8
8
  tags: string[];
9
9
  argTypes: {
10
- states: {
11
- control: string[];
10
+ defaultValue: {
11
+ control: "boolean";
12
12
  description: string;
13
13
  };
14
14
  onChange: {
15
15
  action: string;
16
16
  description: string;
17
17
  };
18
+ disabled: {
19
+ control: "boolean";
20
+ description: string;
21
+ };
22
+ value: {
23
+ control: "boolean";
24
+ description: string;
25
+ };
18
26
  };
19
27
  };
20
28
  export default meta;
21
29
  type Story = StoryObj<typeof meta>;
22
- export declare const Toggles: Story;
30
+ export declare const Base: Story;
31
+ export declare const Disabled: Story;
32
+ export declare const SwitchGroup: Story;
@@ -0,0 +1,7 @@
1
+ export interface SwitchProps {
2
+ className?: string;
3
+ onChange?: (checked: boolean) => void;
4
+ disabled?: boolean;
5
+ defaultValue?: boolean;
6
+ value?: boolean;
7
+ }
@@ -0,0 +1,2 @@
1
+ export { Switch } from "./Switch";
2
+ export type { SwitchProps } from "./Switch.type";
@@ -1,3 +1,2 @@
1
1
  import { TabsProps } from "./Tabs.type";
2
- declare const Tabs: React.FC<TabsProps>;
3
- export { Tabs };
2
+ export declare const Tabs: (props: TabsProps) => import("react/jsx-runtime").JSX.Element;
@@ -5,7 +5,7 @@ import type { StoryObj } from "@storybook/react";
5
5
  */
6
6
  declare const meta: {
7
7
  title: string;
8
- component: import("react").FC<import("./Tabs.type").TabsProps>;
8
+ component: (props: import("./Tabs.type").TabsProps) => import("react/jsx-runtime").JSX.Element;
9
9
  parameters: {
10
10
  layout: string;
11
11
  };
@@ -16,13 +16,12 @@ declare const meta: {
16
16
  options: string[];
17
17
  description: string;
18
18
  };
19
- onValueChange: {
20
- control: "object";
21
- description: string;
22
- };
23
- dir: {
19
+ tabItems: {
24
20
  control: "select";
25
- options: string[];
21
+ options: {
22
+ value: string;
23
+ label: import("react/jsx-runtime").JSX.Element;
24
+ }[];
26
25
  description: string;
27
26
  };
28
27
  defaultValue: {
@@ -34,5 +33,4 @@ declare const meta: {
34
33
  };
35
34
  export default meta;
36
35
  type Story = StoryObj<typeof meta>;
37
- export declare const Default: Story;
38
- export declare function ControlledTabs(): import("react/jsx-runtime").JSX.Element;
36
+ export declare const Base: Story;
@@ -2,14 +2,13 @@ import * as TabsBase from "@radix-ui/react-tabs";
2
2
  import { ReactNode, RefObject } from "react";
3
3
  interface TabItem {
4
4
  value: string;
5
- text: string;
6
- content: ReactNode;
5
+ label: ReactNode;
7
6
  }
8
- interface TabsProps extends Omit<TabsBase.TabsProps, "children"> {
7
+ export interface UseTabsIndicatorProps {
8
+ listRef: RefObject<HTMLDivElement>;
9
+ }
10
+ export interface TabsProps extends Omit<TabsBase.TabsProps, "children" | "dir"> {
9
11
  width?: string;
10
12
  tabItems: TabItem[];
11
13
  }
12
- interface UseTabsIndicatorProps {
13
- listRef: RefObject<HTMLDivElement>;
14
- }
15
- export { TabsProps, TabItem, UseTabsIndicatorProps };
14
+ export {};
@@ -1 +1,2 @@
1
1
  export { Tabs } from "./Tabs";
2
+ export type { TabsProps } from "./Tabs.type";
package/dist/index.css CHANGED
@@ -1,2 +1,2 @@
1
- @charset "UTF-8";
2
- /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--seed-color-brand-primary:#3a8dff;--seed-color-brand-secondary:#637a99;--seed-color-brand-caution:#f3b132;--seed-color-brand-error:#ff6b6b;--seed-color-brand-success:#00c896;--seed-color-brand-warning:#ffb03a;--seed-color-neatural-neutral100:#f7f9fc;--seed-color-neatural-neutral200:#e3e8ef;--seed-color-neatural-neutral300:#cdd5df;--seed-color-neatural-neutral400:#a8b2bf;--seed-color-neatural-neutral500:#7c8899;--seed-color-neatural-neutral600:#5a6777;--seed-color-neatural-neutral700:#414c59;--seed-color-neatural-neutral800:#2a3038;--seed-font-weight-title1:700;--seed-font-weight-subtitle1:700;--seed-font-weight-body1:700;--seed-font-line-height-title1:140%;--seed-font-line-height-subtitle1:140%;--seed-font-line-height-body1:140%;--seed-font-letter-spacing-title1:-2%;--seed-font-letter-spacing-subtitle1:-2%;--seed-font-letter-spacing-body1:-2%;--seed-font-size-title1:24px;--seed-font-size-subtitle1:20px;--seed-font-size-body1:16px}.box{box-sizing:border-box}:root{--button-loading-dot-delay:0.2s;--button-loading-dot-duration:1.4s}.button{border:none;border-radius:var(--seed-spacing-300);box-sizing:border-box;cursor:pointer;font-weight:500;position:relative;transition:all .2s ease-in-out}.button:disabled{cursor:not-allowed}.button.button--loading{cursor:wait}.button--size-lg{font-size:16px;gap:var(--seed-spacing-300);height:52px;padding:var(--seed-spacing-500) var(--seed-spacing-700)}.button--size-lg>.button--content span{height:20px}.button--size-md{font-size:14px;gap:var(--seed-spacing-300);height:48px;padding:var(--seed-spacing-300) var(--seed-spacing-400)}.button--size-md>.button--content span{height:20px}.button--type-solid-green{background-color:var(--seed-brand-color-primary);color:var(--seed-ui-color-line-white)}.button--type-solid-green:active:not(:disabled),.button--type-solid-green:hover:not(:disabled){background-color:var(--seed-palette-color-green-700)}.button--type-solid-green.disabled{background-color:var(--seed-ui-color-background-guide);border-color:var(--seed-ui-color-background-guide);color:var(--seed-ui-color-text-disabled)}.button--type-solid-red{background-color:var(--seed-brand-color-point2);color:var(--seed-ui-color-line-white)}.button--type-solid-red:active:not(:disabled),.button--type-solid-red:hover:not(:disabled){background-color:var(--seed-palette-color-red-600)}.button--type-solid-red.disabled{background-color:var(--seed-ui-color-background-guide);border-color:var(--seed-ui-color-background-guide);color:var(--seed-ui-color-text-disabled)}.button--type-outline-green{background-color:var(--seed-ui-color-background-container);border:1px solid var(--seed-brand-color-primary);color:var(--seed-brand-color-primary)}.button--type-outline-green:active:not(:disabled),.button--type-outline-green:hover:not(:disabled){background-color:var(--seed-brand-color-secondary2)}.button--type-outline-green.disabled{background-color:var(--seed-ui-color-background-white);border-color:var(---seed-ui-color-line-lite);color:var(--seed-ui-color-text-disabled)}.button--type-outline-gray{background-color:var(--seed-ui-color-background-white);border:1px solid var(--seed-ui-color-line-dark);color:var(--seed-ui-color-text-black)}.button--type-outline-gray:active:not(:disabled),.button--type-outline-gray:hover:not(:disabled){background-color:var(--seed-ui-color-background-gray)}.button--type-outline-gray.disabled{background-color:var(--seed-ui-color-background-white);border-color:var(---seed-ui-color-line-lite);color:var(--seed-ui-color-text-disabled)}.button--type-text-none{background-color:transparent;color:var(--seed-ui-color-text-black)}.button--type-text-none:active:not(:disabled),.button--type-text-none:hover:not(:disabled){color:var(--seed-ui-color-text-lite)}.button--type-text-none.disabled{color:var(--seed-ui-color-text-disabled)}.button--display-inline{display:inline-flex}.button--display-block{display:flex}.button--content,.button--display-full{display:flex;width:100%}.button--content{align-items:center;flex-direction:row;justify-content:center;opacity:1;transition:opacity .2s}.button--content.button--content--hidden{opacity:0}.button--loading{align-items:center;display:flex;gap:12px;justify-content:center;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.button--loading-dot{animation:loadingDot var(--button-loading-dot-duration) infinite;background-color:currentColor;border-radius:50%;height:8px;opacity:0;width:8px}.button--loading-dot:nth-child(2){animation-delay:var(--button-loading-dot-delay)}.button--loading-dot:nth-child(3){animation-delay:calc(var(--button-loading-dot-delay)*2)}@keyframes loadingDot{0%,20%{opacity:0;transform:translateY(0)}50%{opacity:1;transform:translateY(-2px)}80%,to{opacity:0;transform:translateY(0)}}:root{--font-weight-regular:400;--font-weight-medium:500;--font-weight-bold:700;--font-size-heading:24px;--font-size-body:16px;--font-size-text:14px;--line-height-default:1.4;--font-display-block:block;--font-display-inline-block:inline-block;--font-display-inline:inline;--font-display-flex:flex;--font-display-inline-flex:inline-flex;--font-display-none:none}.text{box-sizing:border-box}.text--font-weight-regular{font-weight:var(--font-weight-regular)}.text--font-weight-medium{font-weight:var(--font-weight-medium)}.text--font-weight-bold{font-weight:var(--font-weight-bold)}.text--typography-heading{font-size:var(--font-size-heading);line-height:var(--line-height-default)}.text--typography-body{font-size:var(--font-size-body);line-height:var(--line-height-default)}.text--typography-text{font-size:var(--font-size-text);line-height:var(--line-height-default)}.text--single-line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--multi-line{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.text--display-block{display:var(--font-display-block)}.text--display-inline-block{display:var(--font-display-inline-block)}.text--display-inline{display:var(--font-display-inline)}.text--display-flex{display:var(--font-display-flex)}.text--display-inline-flex{display:var(--font-display-inline-flex)}.text--display-none{display:var(--font-display-none)}:root{--seed-palette-color-base-900:#25292c}.overlay{animation:overlayShow .25s cubic-bezier(.3,0,0,1)}.dialog-content{animation:contentShow .3s cubic-bezier(.3,0,0,1);background-color:#fff;border-radius:6px;box-shadow:0 10px 38px -10px rgba(14,18,22,.35),0 10px 20px -15px rgba(14,18,22,.2);left:50%;max-height:85vh;max-width:450px;padding:25px;position:fixed;top:50%;transform:translate(-50%,-50%);width:90vw}.dialog-handle{margin-top:10px;width:45px}@keyframes overlayShow{0%{opacity:0}to{opacity:1}}@keyframes contentShow{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.dialog-content--theme-light{background-color:var(--seed-palette-color-base-100)}.dialog-content--theme-dark{background-color:var(--seed-palette-color-base-900)}.dialog-content--radius-none{border-radius:var(--seed-spacing-100)}.dialog-content--radius-small{border-radius:var(--seed-spacing-300)}.dialog-content--radius-medium{border-radius:var(--seed-spacing-600)}.dialog-content--radius-large{border-radius:var(--seed-spacing-900)}.popover-content{animation-duration:.4s;animation-timing-function:cubic-bezier(.16,1,.3,1);background-color:#fff;border-radius:4px;box-shadow:0 10px 38px -10px rgba(14,18,22,.35),0 10px 20px -15px rgba(14,18,22,.2);padding:20px;width:260px;will-change:transform,opacity}:root{--seed-palette-color-base-500:#c6ccd1;--seed-palette-color-base-1000:#191b1c;--seed-palette-color-blue-200:#e0f2fe;--seed-palette-color-blue-800:#0369a1;--seed-palette-color-blue-1000:#0c4a6e}.SelectTrigger{align-items:center;background-color:#fff;border-radius:4px;box-shadow:0 2px 10px var(--seed-palette-color-base-1000);color:var(--seed-palette-color-base-1000);display:inline-flex;font-size:13px;gap:5px;height:35px;justify-content:center;line-height:1;padding:0 15px}.SelectTrigger:hover{background-color:var(--seed-palette-color-blue-200)}.SelectTrigger:focus{box-shadow:0 0 0 2px #000}.SelectTrigger[data-placeholder]{color:var(--seed-palette-color-base-800)}.SelectIcon{color:var(--seed-palette-color-base-1000)}.SelectContent{background-color:#fff;border-radius:6px;box-shadow:0 10px 38px -10px rgba(22,23,24,.35),0 10px 20px -15px rgba(22,23,24,.2);overflow:hidden}.SelectViewport{padding:5px}.SelectItem{align-items:center;border-radius:3px;color:var(--seed-palette-color-base-1000);display:flex;font-size:13px;height:25px;line-height:1;padding:0 35px 0 25px;position:relative;user-select:none}.SelectItem[data-disabled]{color:var(--seed-palette-color-blue-800);pointer-events:none}.SelectItem[data-highlighted]{background-color:var(--seed-palette-color-base-800);color:var(--seed-color-violet-1);outline:none}.SelectLabel{color:var(--seed-palette-color-blue-1000);font-size:12px;line-height:25px;padding:0 25px}.SelectSeparator{background-color:var(--seed-palette-color-base-500);height:1px;margin:5px}.SelectItemIndicator{display:inline-flex;left:0;position:absolute;width:25px}.SelectItemIndicator,.SelectScrollButton{align-items:center;justify-content:center}.SelectScrollButton{background-color:#fff;color:var(--seed-palette-color-base-1000);cursor:default;display:flex;height:25px}.toggle{background-color:var(--seed-palette-color-base-400);border-radius:var(--seed-rounding-500);height:28px;position:relative;width:52px}.toggle[data-state=checked]{background-color:var(--seed-brand-color-primary)}.toggle-thumb{background-color:var(--seed-ui-color-icon-white);border-radius:var(--seed-rounding-400);box-shadow:0 4px 4px 0 rgba(0,0,0,.15);display:block;height:22px;transform:translateX(4px);transition:transform .1s;width:22px;will-change:transform}.toggle-thumb[data-state=checked]{transform:translateX(26px)}:root{--input-transition:0.2s ease-in-out}.input-wrapper{align-items:center;display:flex;position:relative;width:100%}.input-wrapper.input--display-line .input{border:1px solid var(--seed-ui-color-line-medium);border-radius:0}.input-wrapper.input--display-line .input:focus,.input-wrapper.input--display-line .input:hover:not(:disabled){border-bottom-color:var(--seed-brand-color-primary)}.input-wrapper.input--display-box .input{border:1px solid var(--seed-ui-color-line-medium);border-radius:var(--seed-spacing-300)}.input-wrapper.input--display-box .input:focus,.input-wrapper.input--display-box .input:hover:not(:disabled){border-color:var(--seed-brand-color-primary)}.input-wrapper.input--error .input,.input-wrapper.input--error .input:focus{border-color:var(--seed-brand-color-point2)}.input-wrapper.input--disabled{cursor:not-allowed;opacity:.5}.input-wrapper.input--disabled .input{border:1px solid var(--seed-ui-color-line-medium);color:var(--seed-ui-color-text-disabled)}.input{background:var(--seed-ui-color-background-white);color:var(--seed-ui-color-text-black);font-size:var(--seed-font-size-sm);height:var(--seed-font-line-height-lg);line-height:var(--seed-font-size-sm);padding:17px var(--seed-spacing-500);transition:all var(--input-transition);width:100%}.input:focus{outline:none}.input[type=file]{color:transparent;cursor:pointer}.input[type=file]::-webkit-file-upload-button{visibility:hidden;width:0}.input[type=file]:before{color:var(--seed-ui-color-text-lite);content:"파일 선택"}.input[type=file].has-file:before{color:var(--seed-ui-color-text-black);content:"파일 선택 완료"}.input[type=file]:disabled:before{background:var(--seed-ui-color-background-guide);color:var(--seed-ui-color-text-disabled);cursor:not-allowed}.input--action{background:none;border:none;color:var(--seed-ui-color-text-lite);cursor:pointer;position:absolute;right:var(--seed-spacing-500);top:50%;transform:translateY(-50%)}.input--action:hover:not(:disabled){color:var(--seed-ui-color-text-dark)}.input--action.input--action-link{height:24px}.input--action.input--close{height:16px}.tabs{display:flex;flex-direction:column;position:relative}.tabs--indicator,.tabs--list,.tabs--trigger{box-sizing:border-box}.tabs--list-wrapper{position:relative}.tabs--list{background-color:var(--seed-ui-color-background-chips);display:flex;gap:var(--seed-spacing-200);height:48px;padding:var(--seed-spacing-200)}.tabs--indicator,.tabs--list{border-radius:var(--seed-rounding-500)}.tabs--indicator{background-color:var(--seed-ui-color-background-white);box-shadow:4px 4px 20px 0 rgba(0,0,0,.08);height:calc(48px - var(--seed-spacing-200)*2);left:0;position:absolute;top:var(--seed-spacing-200);transition:all .2s ease-in-out;z-index:0}.tabs--trigger{align-items:center;border-radius:var(--seed-rounding-400);display:flex;flex:1;font-size:var(--seed-font-size-s);justify-content:center;position:relative;transition:all .2s ease-in-out;z-index:1}.tabs--trigger[data-state=inactive]{color:var(--seed-ui-color-text-lite);font-weight:var(--seed-font-weight-400)}.tabs--trigger[data-state=active]{color:var(--seed-ui-color-text-black);font-weight:var(--seed-font-weight-700)}:root{--seed-palette-color-base-100:#fff;--seed-palette-color-base-800:#494f54;--seed-spacing-100:0px;--seed-spacing-300:8px;--seed-spacing-600:20px;--seed-spacing-900:32px}.overlay{background-color:rgba(0,0,0,.4);inset:0;position:fixed}.drawer-content{background-color:#fff;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important;bottom:0;height:fit-content;left:0;max-height:calc(100dvh - 32px);outline:none;overflow-y:hidden;position:fixed;right:0}.drawer-content-inner{-webkit-overflow-scrolling:touch;max-height:calc(100dvh - 68px);overflow-y:auto}.bottomsheet-container--radius-none{border-top:var(--seed-spacing-100)}.bottomsheet-container--radius-small{border-radius:var(--seed-spacing-300)}.bottomsheet-container--radius-medium{border-radius:var(--seed-spacing-700)}.bottomsheet-container--radius-large{border-radius:var(--seed-spacing-900)}.bottomsheet-container--theme-light{background-color:var(--seed-palette-color-base-100)}.bottomsheet-container--theme-dark{background-color:var(--seed-palette-color-base-800)}.drawer-handle{height:36px;width:100%}@keyframes toast-enter-top{0%{opacity:.5;transform:translate3d(0,-200%,0) scale(.6)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes toast-exit-top{0%{opacity:1;transform:translateZ(-1px) scale(1)}to{opacity:0;transform:translate3d(0,-150%,-1px) scale(.6)}}@keyframes toast-enter-bottom{0%{opacity:.5;transform:translate3d(0,200%,0) scale(.6)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes toast-exit-bottom{0%{opacity:1;transform:translateZ(-1px) scale(1)}to{opacity:0;transform:translate3d(0,150%,-1px) scale(.6)}}@keyframes toast-fade-in{0%{opacity:0}to{opacity:1}}@keyframes toast-fade-out{0%{opacity:1}to{opacity:0}}.toast--content{align-items:center;background:var(--seed-ui-color-misc-black-70);border-radius:var(--seed-rounding-300);box-shadow:0 3px 10px rgba(0,0,0,.1),0 3px 3px rgba(0,0,0,.05);box-sizing:border-box;color:#363636;display:flex;gap:var(--seed-spacing-600);justify-content:space-between;min-height:56px;opacity:0;padding:var(--seed-spacing-500);pointer-events:auto;position:relative;transition:transform .23s cubic-bezier(.21,1.02,.73,1);will-change:transform}.toast--content.top.visible{animation:toast-enter-top .35s cubic-bezier(.21,1.02,.73,1) forwards}.toast--content.top.hidden{animation:toast-exit-top .4s cubic-bezier(.06,.71,.55,1) forwards}.toast--content.bottom.visible{animation:toast-enter-bottom .35s cubic-bezier(.21,1.02,.73,1) forwards}.toast--content.bottom.hidden{animation:toast-exit-bottom .4s cubic-bezier(.06,.71,.55,1) forwards}@media (prefers-reduced-motion:reduce){.toast--content.visible{animation:toast-fade-in .35s ease-in forwards}.toast--content.hidden{animation:toast-fade-out .4s ease-out forwards}}.toast--type-message{gap:var(--seed-spacing-300)}.toast--type-icon,.toast--type-message{align-items:center;display:flex}.toast--type-icon[data-toast-type=default]{display:none}.toast--message{color:var(--seed-ui-color-text-white);font-size:var(--seed-font-size-s);font-weight:var(--seed-font-weight-400);line-height:var(--seed-font-line-height-sm)}.toast--action-link{text-decoration:underline;text-underline-offset:2px}.toast--action-button,.toast--action-link{color:var(--seed-ui-color-text-white);cursor:pointer;flex-shrink:0;font-size:var(--seed-font-size-xs);font-weight:var(--seed-font-weight-400)}.toast--action-button{align-items:center;background-color:var(--seed-brand-color-primary);border-radius:var(--seed-rounding-400);display:flex;justify-content:center;padding:var(--seed-spacing-200) var(--seed-spacing-300)}.toaster-content{bottom:0;left:0;pointer-events:none;position:fixed;right:0;top:0;z-index:9999}.toast-wrapper{position:absolute}.toast-wrapper>*{transition:all .23s cubic-bezier(.21,1.02,.73,1)}.toast-wrapper.toast-wrapper--top-right{right:0}.toast-wrapper.toast-wrapper--top-left{left:0}.toast-wrapper.toast-wrapper--top-center{left:50%}.toast-wrapper.toast-wrapper--bottom-right{bottom:0;right:0}.toast-wrapper.toast-wrapper--bottom-left{bottom:0;left:0}.toast-wrapper.toast-wrapper--bottom-center{bottom:0;left:50%}.popup{animation:popup-content-show .15s cubic-bezier(.16,1,.3,1);background-color:var(--seed-ui-color-background-white);border-radius:16px;box-shadow:0 4px 16px 0 hsla(0,0%,43%,.07);left:50%;max-height:85vh;max-width:450px;overflow-y:auto;padding:24px 16px;position:fixed;top:50%;transform:translate(-50%,-50%);width:100%}.popup:focus{outline:none}.popup--actions{display:flex;gap:8px;justify-content:flex-end;margin-top:24px}.popup--actions>*{flex:1}.popup--actions-typeB{display:flex;gap:8px;justify-content:space-between}.popup--actions-left{flex:0 0 auto;min-width:76px}.popup--actions-right{flex:1 1 auto}@keyframes popup-overlay-show{0%{opacity:0}to{opacity:1}}@keyframes popup-content-show{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.visually-hidden{clip:rect(0 0 0 0);word-wrap:normal;border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}
1
+ @charset "UTF-8";@import url("https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css");
2
+ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--seed-palette-color-base-200:#f6f7f9;--seed-palette-color-base-300:#edf0f3;--seed-palette-color-base-400:#e0e5ea;--seed-palette-color-base-600:#a6abaf;--seed-palette-color-base-700:#7b8287;--seed-palette-color-blue-100:#f0f9ff;--seed-palette-color-blue-300:#bae6fd;--seed-palette-color-blue-400:#7dd3fc;--seed-palette-color-blue-500:#38bdf8;--seed-palette-color-blue-600:#0ea5e9;--seed-palette-color-blue-700:#0284c7;--seed-palette-color-blue-900:#075985;--seed-palette-color-purple-100:#f9fafe;--seed-palette-color-purple-200:#ecedfc;--seed-palette-color-purple-300:#d0d2f7;--seed-palette-color-purple-400:#b5b8f2;--seed-palette-color-purple-500:#9a9eec;--seed-palette-color-purple-600:#7a82e4;--seed-palette-color-purple-700:#6167c9;--seed-palette-color-purple-800:#5756a6;--seed-palette-color-purple-900:#494582;--seed-palette-color-purple-1000:#38325d;--seed-palette-color-red-100:#fef2f2;--seed-palette-color-red-200:#fee2e2;--seed-palette-color-red-300:#fecaca;--seed-palette-color-red-400:#fca5a5;--seed-palette-color-red-500:#f87171;--seed-palette-color-red-600:#ef4444;--seed-palette-color-red-700:#dc2626;--seed-palette-color-red-800:#b91c1c;--seed-palette-color-red-900:#991b1b;--seed-palette-color-red-1000:#7f1d1d;--seed-palette-color-orange-100:#fff7ed;--seed-palette-color-orange-200:#ffedd5;--seed-palette-color-orange-300:#fed7aa;--seed-palette-color-orange-400:#fdba74;--seed-palette-color-orange-500:#fb923c;--seed-palette-color-orange-600:#f97316;--seed-palette-color-orange-700:#ea580c;--seed-palette-color-orange-800:#c2410c;--seed-palette-color-orange-900:#9a3412;--seed-palette-color-orange-1000:#7c2d12;--seed-palette-color-yellow-100:#fefce8;--seed-palette-color-yellow-200:#fef9c3;--seed-palette-color-yellow-300:#fef08a;--seed-palette-color-yellow-400:#fde047;--seed-palette-color-yellow-500:#facc15;--seed-palette-color-yellow-600:#eab308;--seed-palette-color-yellow-700:#ca8a04;--seed-palette-color-yellow-800:#a16207;--seed-palette-color-yellow-900:#854d0e;--seed-palette-color-yellow-1000:#713f12;--seed-palette-color-green-100:#e9ffe9;--seed-palette-color-green-200:#d5ffd5;--seed-palette-color-green-300:#bdffbd;--seed-palette-color-green-400:#89ee89;--seed-palette-color-green-500:#60e060;--seed-palette-color-green-600:#50bf50;--seed-palette-color-green-700:#2fa32f;--seed-palette-color-green-800:#1e861e;--seed-palette-color-green-900:#156015;--seed-palette-color-green-1000:#063f06;--seed-ui-color-text-white:#fff;--seed-ui-color-text-disabled:#c6ccd1;--seed-ui-color-text-lite:#a6abaf;--seed-ui-color-text-dark:#494f54;--seed-ui-color-text-black:#191b1c;--seed-ui-color-background-white:#fff;--seed-ui-color-background-container:#fff;--seed-ui-color-background-gray:#f6f7f9;--seed-ui-color-background-chips:#f6f7f9;--seed-ui-color-background-placeholder:#e0e5ea;--seed-ui-color-background-guide:#e0e5ea;--seed-ui-color-background-focus:#191b1c;--seed-ui-color-icon-white:#fff;--seed-ui-color-icon-lite:#a6abaf;--seed-ui-color-icon-dark:#494f54;--seed-ui-color-icon-black:#191b1c;--seed-ui-color-line-white:#fff;--seed-ui-color-line-lite:#edf0f3;--seed-ui-color-line-medium:#c6ccd1;--seed-ui-color-line-dark:#494f54;--seed-ui-color-line-focus:#25292c;--seed-ui-color-toast-complete:#50bf50;--seed-ui-color-toast-error:#ef4444;--seed-ui-color-toast-caution:#fef08a;--seed-ui-color-misc-black-70:rgba(0,0,0,.7);--seed-ui-color-misc-black-40:rgba(0,0,0,.4);--seed-brand-color-primary:#50bf50;--seed-brand-color-secondary1:#bdffbd;--seed-brand-color-secondary2:#e9ffe9;--seed-brand-color-point1:#ef4444;--seed-brand-color-point2:#f87171;--seed-brand-color-point3:#fb923c;--seed-brand-color-point4:#fef08a;--seed-font-family-head:pretendard;--seed-font-family-title:pretendard;--seed-font-family-body:pretendard;--seed-font-family-paragraph:pretendard;--seed-font-family-caption:pretendard;--seed-font-weight-400:regular;--seed-font-weight-500:medium;--seed-font-weight-700:bold;--seed-font-size-xs:12px;--seed-font-size-s:14px;--seed-font-size-sm:16px;--seed-font-size-md:18px;--seed-font-size-lg:20px;--seed-font-size-xl:22px;--seed-font-size-2xl:24px;--seed-font-size-4xl:32px;--seed-font-size-5xl:40px;--seed-font-size-6xl:48px;--seed-font-size-3xl:28px;--seed-font-line-height-sm:16px;--seed-font-line-height-2xl:24px;--seed-font-line-height-4xl:32px;--seed-font-line-height-5xl:40px;--seed-font-line-height-6xl:48px;--seed-font-line-height-lg:20px;--seed-font-line-height-3xl:28px;--seed-font-line-height-s:14px;--seed-spacing-200:4px;--seed-spacing-400:12px;--seed-spacing-500:16px;--seed-spacing-700:24px;--seed-spacing-800:28px;--seed-spacing-1000:40px;--seed-spacing-1100:48px;--seed-spacing-1200:56px;--seed-spacing-1300:64px;--seed-spacing-1400:72px;--seed-rounding-100:0px;--seed-rounding-200:4px;--seed-rounding-300:8px;--seed-rounding-400:12px;--seed-rounding-500:16px;--seed-rounding-600:20px;--seed-rounding-700:24px;--seed-rounding-800:28px;--seed-rounding-900:32px;--seed-rounding-1000:40px;--seed-rounding-1100:48px;--seed-rounding-1200:56px;--seed-rounding-1300:64px;--seed-rounding-1400:72px;--seed-color-brand-primary:#3a8dff;--seed-color-brand-secondary:#637a99;--seed-color-brand-caution:#f3b132;--seed-color-brand-error:#ff6b6b;--seed-color-brand-success:#00c896;--seed-color-brand-warning:#ffb03a;--seed-color-neatural-neutral100:#f7f9fc;--seed-color-neatural-neutral200:#e3e8ef;--seed-color-neatural-neutral300:#cdd5df;--seed-color-neatural-neutral400:#a8b2bf;--seed-color-neatural-neutral500:#7c8899;--seed-color-neatural-neutral600:#5a6777;--seed-color-neatural-neutral700:#414c59;--seed-color-neatural-neutral800:#2a3038;--seed-font-weight-title1:700;--seed-font-weight-subtitle1:700;--seed-font-weight-body1:700;--seed-font-line-height-title1:140%;--seed-font-line-height-subtitle1:140%;--seed-font-line-height-body1:140%;--seed-font-letter-spacing-title1:-2%;--seed-font-letter-spacing-subtitle1:-2%;--seed-font-letter-spacing-body1:-2%;--seed-font-size-title1:24px;--seed-font-size-subtitle1:20px;--seed-font-size-body1:16px}.box{box-sizing:border-box}:root{--button-loading-dot-delay:0.2s;--button-loading-dot-duration:1.4s}.button{border:none;border-radius:var(--seed-spacing-300);box-sizing:border-box;cursor:pointer;font-weight:500;position:relative;transition:all .2s ease-in-out}.button:disabled{cursor:not-allowed}.button.button--loading{cursor:wait}.button--size-lg{font-size:16px;gap:var(--seed-spacing-300);height:52px;padding:var(--seed-spacing-500) var(--seed-spacing-700)}.button--size-lg>.button--content span{height:20px}.button--size-md{font-size:14px;gap:var(--seed-spacing-300);height:48px;padding:var(--seed-spacing-300) var(--seed-spacing-400)}.button--size-md>.button--content span{height:20px}.button--type-solid-green{background-color:var(--seed-brand-color-primary);color:var(--seed-ui-color-line-white)}.button--type-solid-green:active:not(:disabled),.button--type-solid-green:hover:not(:disabled){background-color:var(--seed-palette-color-green-700)}.button--type-solid-green.disabled{background-color:var(--seed-ui-color-background-guide);border-color:var(--seed-ui-color-background-guide);color:var(--seed-ui-color-text-disabled)}.button--type-solid-red{background-color:var(--seed-brand-color-point2);color:var(--seed-ui-color-line-white)}.button--type-solid-red:active:not(:disabled),.button--type-solid-red:hover:not(:disabled){background-color:var(--seed-palette-color-red-600)}.button--type-solid-red.disabled{background-color:var(--seed-ui-color-background-guide);border-color:var(--seed-ui-color-background-guide);color:var(--seed-ui-color-text-disabled)}.button--type-outline-green{background-color:var(--seed-ui-color-background-container);border:1px solid var(--seed-brand-color-primary);color:var(--seed-brand-color-primary)}.button--type-outline-green:active:not(:disabled),.button--type-outline-green:hover:not(:disabled){background-color:var(--seed-brand-color-secondary2)}.button--type-outline-green.disabled{background-color:var(--seed-ui-color-background-white);border-color:var(---seed-ui-color-line-lite);color:var(--seed-ui-color-text-disabled)}.button--type-outline-gray{background-color:var(--seed-ui-color-background-white);border:1px solid var(--seed-ui-color-line-dark);color:var(--seed-ui-color-text-black)}.button--type-outline-gray:active:not(:disabled),.button--type-outline-gray:hover:not(:disabled){background-color:var(--seed-ui-color-background-gray)}.button--type-outline-gray.disabled{background-color:var(--seed-ui-color-background-white);border-color:var(---seed-ui-color-line-lite);color:var(--seed-ui-color-text-disabled)}.button--type-text-none{background-color:transparent;color:var(--seed-ui-color-text-black)}.button--type-text-none:active:not(:disabled),.button--type-text-none:hover:not(:disabled){color:var(--seed-ui-color-text-lite)}.button--type-text-none.disabled{color:var(--seed-ui-color-text-disabled)}.button--display-inline{display:inline-flex}.button--display-block{display:flex}.button--content,.button--display-full{display:flex;width:100%}.button--content{align-items:center;flex-direction:row;justify-content:center;opacity:1;transition:opacity .2s}.button--content.button--content--hidden{opacity:0}.button--loading{align-items:center;display:flex;gap:12px;justify-content:center;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.button--loading-dot{animation:loadingDot var(--button-loading-dot-duration) infinite;background-color:currentColor;border-radius:50%;height:8px;opacity:0;width:8px}.button--loading-dot:nth-child(2){animation-delay:var(--button-loading-dot-delay)}.button--loading-dot:nth-child(3){animation-delay:calc(var(--button-loading-dot-delay)*2)}@keyframes loadingDot{0%,20%{opacity:0;transform:translateY(0)}50%{opacity:1;transform:translateY(-2px)}80%,to{opacity:0;transform:translateY(0)}}:root{--font-weight-regular:400;--font-weight-medium:500;--font-weight-bold:700;--font-size-heading:24px;--font-size-body:16px;--font-size-text:14px;--line-height-default:1.4;--font-display-block:block;--font-display-inline-block:inline-block;--font-display-inline:inline;--font-display-flex:flex;--font-display-inline-flex:inline-flex;--font-display-none:none}.text{box-sizing:border-box}.text--font-weight-regular{font-weight:var(--font-weight-regular)}.text--font-weight-medium{font-weight:var(--font-weight-medium)}.text--font-weight-bold{font-weight:var(--font-weight-bold)}.text--typography-heading{font-size:var(--font-size-heading);line-height:var(--line-height-default)}.text--typography-body{font-size:var(--font-size-body);line-height:var(--line-height-default)}.text--typography-text{font-size:var(--font-size-text);line-height:var(--line-height-default)}.text--single-line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--multi-line{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.text--display-block{display:var(--font-display-block)}.text--display-inline-block{display:var(--font-display-inline-block)}.text--display-inline{display:var(--font-display-inline)}.text--display-flex{display:var(--font-display-flex)}.text--display-inline-flex{display:var(--font-display-inline-flex)}.text--display-none{display:var(--font-display-none)}:root{--seed-palette-color-base-900:#25292c}.overlay{animation:overlayShow .25s cubic-bezier(.3,0,0,1)}.dialog-content{animation:contentShow .3s cubic-bezier(.3,0,0,1);background-color:#fff;border-radius:6px;box-shadow:0 10px 38px -10px rgba(14,18,22,.35),0 10px 20px -15px rgba(14,18,22,.2);left:50%;max-height:85vh;max-width:450px;padding:25px;position:fixed;top:50%;transform:translate(-50%,-50%);width:90vw}.dialog-handle{margin-top:10px;width:45px}@keyframes overlayShow{0%{opacity:0}to{opacity:1}}@keyframes contentShow{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.dialog-content--theme-light{background-color:var(--seed-palette-color-base-100)}.dialog-content--theme-dark{background-color:var(--seed-palette-color-base-900)}.dialog-content--radius-none{border-radius:var(--seed-spacing-100)}.dialog-content--radius-small{border-radius:var(--seed-spacing-300)}.dialog-content--radius-medium{border-radius:var(--seed-spacing-600)}.dialog-content--radius-large{border-radius:var(--seed-spacing-900)}.popover-content{animation-duration:.4s;animation-timing-function:cubic-bezier(.16,1,.3,1);background-color:#fff;border-radius:4px;box-shadow:0 10px 38px -10px rgba(14,18,22,.35),0 10px 20px -15px rgba(14,18,22,.2);padding:20px;width:260px;will-change:transform,opacity}:root{--seed-palette-color-base-500:#c6ccd1;--seed-palette-color-base-1000:#191b1c;--seed-palette-color-blue-200:#e0f2fe;--seed-palette-color-blue-800:#0369a1;--seed-palette-color-blue-1000:#0c4a6e}.SelectTrigger{align-items:center;background-color:#fff;border-radius:4px;box-shadow:0 2px 10px var(--seed-palette-color-base-1000);color:var(--seed-palette-color-base-1000);display:inline-flex;font-size:13px;gap:5px;height:35px;justify-content:center;line-height:1;padding:0 15px}.SelectTrigger:hover{background-color:var(--seed-palette-color-blue-200)}.SelectTrigger:focus{box-shadow:0 0 0 2px #000}.SelectTrigger[data-placeholder]{color:var(--seed-palette-color-base-800)}.SelectIcon{color:var(--seed-palette-color-base-1000)}.SelectContent{background-color:#fff;border-radius:6px;box-shadow:0 10px 38px -10px rgba(22,23,24,.35),0 10px 20px -15px rgba(22,23,24,.2);overflow:hidden}.SelectViewport{padding:5px}.SelectItem{align-items:center;border-radius:3px;color:var(--seed-palette-color-base-1000);display:flex;font-size:13px;height:25px;line-height:1;padding:0 35px 0 25px;position:relative;user-select:none}.SelectItem[data-disabled]{color:var(--seed-palette-color-blue-800);pointer-events:none}.SelectItem[data-highlighted]{background-color:var(--seed-palette-color-base-800);color:var(--seed-color-violet-1);outline:none}.SelectLabel{color:var(--seed-palette-color-blue-1000);font-size:12px;line-height:25px;padding:0 25px}.SelectSeparator{background-color:var(--seed-palette-color-base-500);height:1px;margin:5px}.SelectItemIndicator{display:inline-flex;left:0;position:absolute;width:25px}.SelectItemIndicator,.SelectScrollButton{align-items:center;justify-content:center}.SelectScrollButton{background-color:#fff;color:var(--seed-palette-color-base-1000);cursor:default;display:flex;height:25px}:root{--switch-width:52px;--switch-height:32px;--switch-thumb-width:28px;--switch-thumb-height:28px;--switch-background-color:#b7c2d0;--switch-checked-background-color:#3a8dff;--switch-thumb-background-color:#fff}.switch{background-color:var(--switch-background-color);border-radius:16px;height:var(--switch-height);position:relative;width:var(--switch-width)}.switch[data-state=checked]{background-color:var(--switch-checked-background-color)}.switch-thumb{background-color:var(--switch-thumb-background-color);border-radius:14px;display:block;height:var(--switch-thumb-height);transform:translateX(2px);transition:transform .1s;width:var(--switch-thumb-width);will-change:transform}.switch-thumb[data-state=checked]{transform:translateX(calc(var(--switch-width) - var(--switch-thumb-width) - 2px))}:root{--input-transition:0.2s ease-in-out}.input-wrapper{align-items:center;display:flex;position:relative;width:100%}.input-wrapper.input--display-line .input{border:1px solid var(--seed-ui-color-line-medium);border-radius:0}.input-wrapper.input--display-line .input:focus,.input-wrapper.input--display-line .input:hover:not(:disabled){border-bottom-color:var(--seed-brand-color-primary)}.input-wrapper.input--display-box .input{border:1px solid var(--seed-ui-color-line-medium);border-radius:var(--seed-spacing-300)}.input-wrapper.input--display-box .input:focus,.input-wrapper.input--display-box .input:hover:not(:disabled){border-color:var(--seed-brand-color-primary)}.input-wrapper.input--error .input,.input-wrapper.input--error .input:focus{border-color:var(--seed-brand-color-point2)}.input-wrapper.input--disabled{cursor:not-allowed;opacity:.5}.input-wrapper.input--disabled .input{border:1px solid var(--seed-ui-color-line-medium);color:var(--seed-ui-color-text-disabled)}.input{background:var(--seed-ui-color-background-white);color:var(--seed-ui-color-text-black);font-size:var(--seed-font-size-sm);height:var(--seed-font-line-height-lg);line-height:var(--seed-font-size-sm);padding:17px var(--seed-spacing-500);transition:all var(--input-transition);width:100%}.input:focus{outline:none}.input[type=file]{color:transparent;cursor:pointer}.input[type=file]::-webkit-file-upload-button{visibility:hidden;width:0}.input[type=file]:before{color:var(--seed-ui-color-text-lite);content:"파일 선택"}.input[type=file].has-file:before{color:var(--seed-ui-color-text-black);content:"파일 선택 완료"}.input[type=file]:disabled:before{background:var(--seed-ui-color-background-guide);color:var(--seed-ui-color-text-disabled);cursor:not-allowed}.input--action{background:none;border:none;color:var(--seed-ui-color-text-lite);cursor:pointer;position:absolute;right:var(--seed-spacing-500);top:50%;transform:translateY(-50%)}.input--action:hover:not(:disabled){color:var(--seed-ui-color-text-dark)}.input--action.input--action-link{height:24px}.input--action.input--close{height:16px}.tabs{display:flex;flex-direction:column;position:relative}.tabs--indicator,.tabs--list,.tabs--trigger{box-sizing:border-box}.tabs--list{background-color:#fff;height:35px;padding:0 20px}.tabs--list,.tabs--trigger{display:flex;position:relative}.tabs--trigger{align-items:center;flex:1;justify-content:center;padding:8px;z-index:1}.tabs--trigger div{font-size:14px;font-style:normal;font-weight:400;letter-spacing:-.28px;line-height:140%}.tabs--trigger[data-state=inactive]{color:#b7c2d0}.tabs--trigger[data-state=active]{color:#3a8dff}.floating-action-button{align-items:center;display:flex;justify-content:center;position:relative}.floating-action-button--button{align-items:center;border:none;border-radius:50%;cursor:pointer;display:flex;height:56px;justify-content:center;width:56px}.floating-action-button--action-button{background-color:#fff;box-shadow:0 0 5.6px 0 rgba(0,0,0,.04)}.floating-action-button--action-button:hover{background-color:#ebf4ff;transition:background-color .2s ease-in-out}:root{--seed-palette-color-base-100:#fff;--seed-palette-color-base-800:#494f54;--seed-spacing-100:0px;--seed-spacing-300:8px;--seed-spacing-600:20px;--seed-spacing-900:32px}.overlay{background-color:rgba(0,0,0,.4);inset:0;position:fixed}.drawer-content{background-color:#fff;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important;bottom:0;height:fit-content;left:0;max-height:calc(100dvh - 32px);outline:none;overflow-y:hidden;position:fixed;right:0}.drawer-content-inner{-webkit-overflow-scrolling:touch;max-height:calc(100dvh - 68px);overflow-y:auto}.bottomsheet-container--radius-none{border-top:var(--seed-spacing-100)}.bottomsheet-container--radius-small{border-radius:var(--seed-spacing-300)}.bottomsheet-container--radius-medium{border-radius:var(--seed-spacing-700)}.bottomsheet-container--radius-large{border-radius:var(--seed-spacing-900)}.bottomsheet-container--theme-light{background-color:var(--seed-palette-color-base-100)}.bottomsheet-container--theme-dark{background-color:var(--seed-palette-color-base-800)}.drawer-handle{height:36px;width:100%}@keyframes toast-enter-top{0%{opacity:.5;transform:translate3d(0,-200%,0) scale(.6)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes toast-exit-top{0%{opacity:1;transform:translateZ(-1px) scale(1)}to{opacity:0;transform:translate3d(0,-150%,-1px) scale(.6)}}@keyframes toast-enter-bottom{0%{opacity:.5;transform:translate3d(0,200%,0) scale(.6)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes toast-exit-bottom{0%{opacity:1;transform:translateZ(-1px) scale(1)}to{opacity:0;transform:translate3d(0,150%,-1px) scale(.6)}}@keyframes toast-fade-in{0%{opacity:0}to{opacity:1}}@keyframes toast-fade-out{0%{opacity:1}to{opacity:0}}.toast--content{align-items:center;background:var(--seed-ui-color-misc-black-70);border-radius:var(--seed-rounding-300);box-shadow:0 3px 10px rgba(0,0,0,.1),0 3px 3px rgba(0,0,0,.05);box-sizing:border-box;color:#363636;display:flex;gap:var(--seed-spacing-600);justify-content:space-between;min-height:56px;opacity:0;padding:var(--seed-spacing-500);pointer-events:auto;position:relative;transition:transform .23s cubic-bezier(.21,1.02,.73,1);will-change:transform}.toast--content.top.visible{animation:toast-enter-top .35s cubic-bezier(.21,1.02,.73,1) forwards}.toast--content.top.hidden{animation:toast-exit-top .4s cubic-bezier(.06,.71,.55,1) forwards}.toast--content.bottom.visible{animation:toast-enter-bottom .35s cubic-bezier(.21,1.02,.73,1) forwards}.toast--content.bottom.hidden{animation:toast-exit-bottom .4s cubic-bezier(.06,.71,.55,1) forwards}@media (prefers-reduced-motion:reduce){.toast--content.visible{animation:toast-fade-in .35s ease-in forwards}.toast--content.hidden{animation:toast-fade-out .4s ease-out forwards}}.toast--type-message{gap:var(--seed-spacing-300)}.toast--type-icon,.toast--type-message{align-items:center;display:flex}.toast--type-icon[data-toast-type=default]{display:none}.toast--message{color:var(--seed-ui-color-text-white);font-size:var(--seed-font-size-s);font-weight:var(--seed-font-weight-400);line-height:var(--seed-font-line-height-sm)}.toast--action-link{text-decoration:underline;text-underline-offset:2px}.toast--action-button,.toast--action-link{color:var(--seed-ui-color-text-white);cursor:pointer;flex-shrink:0;font-size:var(--seed-font-size-xs);font-weight:var(--seed-font-weight-400)}.toast--action-button{align-items:center;background-color:var(--seed-brand-color-primary);border-radius:var(--seed-rounding-400);display:flex;justify-content:center;padding:var(--seed-spacing-200) var(--seed-spacing-300)}.toaster-content{bottom:0;left:0;pointer-events:none;position:fixed;right:0;top:0;z-index:9999}.toast-wrapper{position:absolute}.toast-wrapper>*{transition:all .23s cubic-bezier(.21,1.02,.73,1)}.toast-wrapper.toast-wrapper--top-right{right:0}.toast-wrapper.toast-wrapper--top-left{left:0}.toast-wrapper.toast-wrapper--top-center{left:50%}.toast-wrapper.toast-wrapper--bottom-right{bottom:0;right:0}.toast-wrapper.toast-wrapper--bottom-left{bottom:0;left:0}.toast-wrapper.toast-wrapper--bottom-center{bottom:0;left:50%}.popup{animation:popup-content-show .15s cubic-bezier(.16,1,.3,1);background-color:var(--seed-ui-color-background-white);border-radius:16px;box-shadow:0 4px 16px 0 hsla(0,0%,43%,.07);left:50%;max-height:85vh;max-width:450px;overflow-y:auto;padding:24px 16px;position:fixed;top:50%;transform:translate(-50%,-50%);width:100%}.popup:focus{outline:none}.popup--actions{display:flex;gap:8px;justify-content:flex-end;margin-top:24px}.popup--actions>*{flex:1}.popup--actions-typeB{display:flex;gap:8px;justify-content:space-between}.popup--actions-left{flex:0 0 auto;min-width:76px}.popup--actions-right{flex:1 1 auto}@keyframes popup-overlay-show{0%{opacity:0}to{opacity:1}}@keyframes popup-content-show{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.visually-hidden{clip:rect(0 0 0 0);word-wrap:normal;border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}
package/dist/index.d.ts CHANGED
@@ -10,8 +10,9 @@ export { Button } from "./components/Button";
10
10
  export { Text } from "./components/Text";
11
11
  export { RadioGroup } from "./components/RadioGroup";
12
12
  export { Checkbox } from "./components/Checkbox";
13
- export { Toggle } from "./components/Toggle";
13
+ export { Switch } from "./components/Switch";
14
14
  export { Select } from "./components/Select";
15
15
  export { Input } from "./components/Input";
16
16
  export { Tabs } from "./components/Tabs";
17
17
  export { LogProvider, LogScreen } from "./components/Log";
18
+ export { FloatingActionButton } from "./components/FloatingActionButton";
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import cx from 'classnames';
5
5
  import * as React from 'react';
6
6
  import { useState, useEffect, useCallback, useMemo, Fragment, createContext, useContext, forwardRef, useRef } from 'react';
7
7
  import { createPortal } from 'react-dom';
8
- import { Dialog, Switch } from 'radix-ui';
8
+ import { Dialog, Switch as Switch$1 } from 'radix-ui';
9
9
  import { Drawer } from 'vaul';
10
10
  import * as RadioGroupBase from '@radix-ui/react-radio-group';
11
11
  import * as CheckboxBase from '@radix-ui/react-checkbox';
@@ -743,7 +743,8 @@ var Button = /*#__PURE__*/forwardRef(function (_a, ref) {
743
743
  color = _a.color,
744
744
  backgroundColor = _a.backgroundColor,
745
745
  borderColor = _a.borderColor,
746
- rest = __rest(_a, ["type", "display", "disabled", "loading", "size", "className", "children", "color", "backgroundColor", "borderColor"]);
746
+ borderRadius = _a.borderRadius,
747
+ rest = __rest(_a, ["type", "display", "disabled", "loading", "size", "className", "children", "color", "backgroundColor", "borderColor", "borderRadius"]);
747
748
  return jsxs("button", _assign({
748
749
  ref: ref,
749
750
  "data-frieeren-component": "Button",
@@ -754,7 +755,8 @@ var Button = /*#__PURE__*/forwardRef(function (_a, ref) {
754
755
  style: {
755
756
  color: color,
756
757
  backgroundColor: backgroundColor,
757
- borderColor: borderColor
758
+ borderColor: borderColor,
759
+ borderRadius: borderRadius
758
760
  }
759
761
  }, rest, {
760
762
  children: [jsx("span", {
@@ -852,7 +854,7 @@ function Text(_a) {
852
854
  }));
853
855
  }
854
856
 
855
- function Root$3(_a) {
857
+ function Root$2(_a) {
856
858
  var className = _a.className,
857
859
  props = __rest(_a, ["className"]);
858
860
  return jsx(RadioGroupBase.Root, _assign({
@@ -876,12 +878,12 @@ var Indicator$1 = function Indicator(_a) {
876
878
  }, props));
877
879
  };
878
880
  var RadioGroup = {
879
- Root: Root$3,
881
+ Root: Root$2,
880
882
  Item: Item$1,
881
883
  Indicator: Indicator$1
882
884
  };
883
885
 
884
- var Root$2 = function Root(_a) {
886
+ var Root$1 = function Root(_a) {
885
887
  var className = _a.className,
886
888
  props = __rest(_a, ["className"]);
887
889
  return jsx(CheckboxBase.Root, _assign({
@@ -896,29 +898,35 @@ var Indicator = function Indicator(_a) {
896
898
  }, props));
897
899
  };
898
900
  var Checkbox = {
899
- Root: Root$2,
901
+ Root: Root$1,
900
902
  Indicator: Indicator
901
903
  };
902
904
 
903
- var Toggle = /*#__PURE__*/forwardRef(function (_a, ref) {
905
+ var Switch = /*#__PURE__*/forwardRef(function (_a, ref) {
904
906
  var className = _a.className,
905
- _b = _a.states,
906
- states = _b === void 0 ? "active" : _b,
907
- onChange = _a.onChange;
908
- return jsx(Switch.Root, {
907
+ _b = _a.defaultValue,
908
+ defaultValue = _b === void 0 ? false : _b,
909
+ onChange = _a.onChange,
910
+ _c = _a.disabled,
911
+ disabled = _c === void 0 ? false : _c,
912
+ value = _a.value;
913
+ return jsx(Switch$1.Root, {
909
914
  ref: ref,
915
+ defaultChecked: defaultValue,
910
916
  onCheckedChange: onChange,
911
- checked: states === "active",
912
- className: cx("toggle", className),
913
- "data-frieeren-component": "Toggle",
914
- children: jsx(Switch.Thumb, {
915
- className: "toggle-thumb"
917
+ checked: value,
918
+ className: cx("switch", className),
919
+ "data-frieeren-component": "Switch",
920
+ disabled: disabled,
921
+ "aria-disabled": disabled,
922
+ children: jsx(Switch$1.Thumb, {
923
+ className: "switch-thumb"
916
924
  })
917
925
  });
918
926
  });
919
- Toggle.displayName = "Toggle";
927
+ Switch.displayName = "Switch";
920
928
 
921
- var Root$1 = function Root(_a) {
929
+ var Root = function Root(_a) {
922
930
  var className = _a.className,
923
931
  props = __rest(_a, ["className"]);
924
932
  return jsx("div", {
@@ -928,7 +936,7 @@ var Root$1 = function Root(_a) {
928
936
  }, props))
929
937
  });
930
938
  };
931
- var Trigger$1 = function Trigger(_a) {
939
+ var Trigger = function Trigger(_a) {
932
940
  var props = __rest(_a, []);
933
941
  return jsx(SelectBase.Trigger, _assign({
934
942
  "data-frieeren-component": "SelectTrigger"
@@ -940,7 +948,7 @@ var Portal = function Portal(_a) {
940
948
  "data-frieeren-component": "SelectPortal"
941
949
  }, props));
942
950
  };
943
- var Content$1 = function Content(_a) {
951
+ var Content = function Content(_a) {
944
952
  var props = __rest(_a, []);
945
953
  return jsx(SelectBase.Content, _assign({
946
954
  "data-frieeren-component": "SelectContent"
@@ -983,10 +991,10 @@ var Value = function Value(_a) {
983
991
  }, props));
984
992
  };
985
993
  var Select = {
986
- Root: Root$1,
987
- Trigger: Trigger$1,
994
+ Root: Root,
995
+ Trigger: Trigger,
988
996
  Portal: Portal,
989
- Content: Content$1,
997
+ Content: Content,
990
998
  Viewport: Viewport,
991
999
  Group: Group,
992
1000
  Item: Item,
@@ -1095,35 +1103,6 @@ var Input = /*#__PURE__*/forwardRef(function (_a, ref) {
1095
1103
  });
1096
1104
  Input.displayName = "Input";
1097
1105
 
1098
- var Root = function Root(_a) {
1099
- var props = __rest(_a, []);
1100
- return jsx(TabsBase.Root, _assign({
1101
- "data-frieeren-component": "Tabs",
1102
- className: "tabs"
1103
- }, props));
1104
- };
1105
- var List = function List(_a) {
1106
- var props = __rest(_a, []);
1107
- return jsx(TabsBase.List, _assign({
1108
- "data-frieeren-component": "TabsList",
1109
- className: "tabs--list"
1110
- }, props));
1111
- };
1112
- var Trigger = function Trigger(_a) {
1113
- var props = __rest(_a, []);
1114
- return jsx(TabsBase.Trigger, _assign({
1115
- "data-frieeren-component": "TabsTrigger",
1116
- className: "tabs--trigger"
1117
- }, props));
1118
- };
1119
- var Content = function Content(_a) {
1120
- var props = __rest(_a, []);
1121
- return jsx(TabsBase.Content, _assign({
1122
- "data-frieeren-component": "TabsContent",
1123
- className: "tabs--content"
1124
- }, props));
1125
- };
1126
-
1127
1106
  /**
1128
1107
  * 탭 인디케이터의 위치를 계산하고 관리하는 커스텀 훅
1129
1108
  * @param {UseTabsIndicatorProps} props - 탭 인디케이터 설정
@@ -1194,36 +1173,29 @@ var Tabs = function Tabs(props) {
1194
1173
  value = props.value,
1195
1174
  rest = __rest(props, ["width", "tabItems", "value"]);
1196
1175
  var listRef = useRef(null);
1197
- var indicatorStyle = useTabsIndicator({
1176
+ useTabsIndicator({
1198
1177
  listRef: listRef
1199
1178
  }).indicatorStyle;
1200
- return jsxs(Root, _assign({
1179
+ return jsx(TabsBase.Root, _assign({
1180
+ "data-frieeren-component": "Tabs",
1181
+ className: "tabs",
1201
1182
  value: value
1202
1183
  }, rest, {
1203
1184
  style: {
1204
1185
  width: width
1205
1186
  },
1206
- children: [jsxs("div", {
1187
+ children: jsx(TabsBase.List, {
1207
1188
  ref: listRef,
1208
- className: "tabs--list-wrapper",
1209
- children: [jsx(List, {
1210
- "data-orientation": "horizontal",
1211
- children: tabItems.map(function (item) {
1212
- return jsx(Trigger, {
1213
- value: item.value,
1214
- children: item.text
1215
- }, "tabTrigger_".concat(item.value));
1216
- })
1217
- }), jsx("div", {
1218
- className: "tabs--indicator",
1219
- style: indicatorStyle
1220
- })]
1221
- }), tabItems.map(function (item) {
1222
- return jsx(Content, {
1223
- value: item.value,
1224
- children: item.content
1225
- }, "tabContent_".concat(item.value));
1226
- })]
1189
+ "data-orientation": "horizontal",
1190
+ className: "tabs--list",
1191
+ children: tabItems.map(function (item) {
1192
+ return jsx(TabsBase.Trigger, {
1193
+ value: item.value,
1194
+ className: "tabs--trigger",
1195
+ children: item.label
1196
+ }, "tabTrigger_".concat(item.value));
1197
+ })
1198
+ })
1227
1199
  }));
1228
1200
  };
1229
1201
 
@@ -1250,4 +1222,84 @@ function LogScreen(_a) {
1250
1222
  return children;
1251
1223
  }
1252
1224
 
1253
- export { BottomSheet, Box, LogButton as Button, Checkbox, Container, Flex, Grid, Input, LogProvider, LogScreen, LogPopup as Popup, RadioGroup, Select, Tabs, Text, ToastProvider, Toggle, useToast };
1225
+ function FloatingActionButton(_a) {
1226
+ var _b = _a.disabled,
1227
+ disabled = _b === void 0 ? false : _b,
1228
+ className = _a.className,
1229
+ _c = _a.position,
1230
+ position = _c === void 0 ? "fixed" : _c,
1231
+ top = _a.top,
1232
+ left = _a.left,
1233
+ _d = _a.bottom,
1234
+ bottom = _d === void 0 ? 16 : _d,
1235
+ _e = _a.right,
1236
+ right = _e === void 0 ? 16 : _e,
1237
+ _f = _a.actions,
1238
+ actions = _f === void 0 ? [] : _f,
1239
+ icon = _a.icon,
1240
+ openIcon = _a.openIcon,
1241
+ closeIcon = _a.closeIcon,
1242
+ _onClick = _a.onClick;
1243
+ var _g = useState(false),
1244
+ isOpen = _g[0],
1245
+ setIsOpen = _g[1];
1246
+ var style = {
1247
+ position: position
1248
+ };
1249
+ if (top !== undefined) style.top = top;
1250
+ if (left !== undefined) style.left = left;
1251
+ if (bottom !== undefined) style.bottom = bottom;
1252
+ if (right !== undefined) style.right = right;
1253
+ return jsxs("div", {
1254
+ className: cx("floating-action-button", className),
1255
+ "data-frieeren-component": "floating-action-button",
1256
+ style: style,
1257
+ children: [jsx("button", {
1258
+ className: cx("floating-action-button--button"),
1259
+ style: {
1260
+ backgroundColor: "#3A8DFF"
1261
+ },
1262
+ disabled: disabled,
1263
+ type: "button",
1264
+ onClick: function onClick() {
1265
+ setIsOpen(!isOpen);
1266
+ _onClick === null || _onClick === void 0 ? void 0 : _onClick();
1267
+ },
1268
+ children: isOpen ? closeIcon !== null && closeIcon !== void 0 ? closeIcon : icon : openIcon !== null && openIcon !== void 0 ? openIcon : icon
1269
+ }), jsx("div", {
1270
+ style: {
1271
+ position: "absolute",
1272
+ display: "flex",
1273
+ flexDirection: "column",
1274
+ gap: "20px",
1275
+ bottom: "76px",
1276
+ right: "0",
1277
+ opacity: isOpen ? 1 : 0,
1278
+ visibility: isOpen ? "visible" : "hidden",
1279
+ transition: "all 0.3s ease-in-out"
1280
+ },
1281
+ children: actions === null || actions === void 0 ? void 0 : actions.map(function (action, index) {
1282
+ return jsx("div", {
1283
+ style: {
1284
+ transform: isOpen ? "translateY(0)" : "translateY(".concat(40 - index * 20, "px)"),
1285
+ transition: "transform 0.3s ease-in-out",
1286
+ transitionDelay: isOpen ? "".concat((index + 1) * 0.1, "s") : "0s"
1287
+ },
1288
+ children: jsx("button", {
1289
+ className: cx("floating-action-button--button", "floating-action-button--action-button"),
1290
+ disabled: action.disabled,
1291
+ type: "button",
1292
+ onClick: function onClick() {
1293
+ var _a;
1294
+ (_a = action.onClick) === null || _a === void 0 ? void 0 : _a.call(action);
1295
+ setIsOpen(false);
1296
+ },
1297
+ children: action.icon
1298
+ })
1299
+ }, index);
1300
+ })
1301
+ })]
1302
+ });
1303
+ }
1304
+
1305
+ export { BottomSheet, Box, LogButton as Button, Checkbox, Container, Flex, FloatingActionButton, Grid, Input, LogProvider, LogScreen, LogPopup as Popup, RadioGroup, Select, Switch, Tabs, Text, ToastProvider, useToast };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@team-frieeren/components",
3
- "version": "1.0.18",
3
+ "version": "1.0.19",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -69,7 +69,8 @@
69
69
  "classnames": "^2.5.1",
70
70
  "radix-ui": "^1.1.3",
71
71
  "sass": "^1.80.4",
72
- "vaul": "^1.1.1"
72
+ "vaul": "^1.1.1",
73
+ "@team-frieeren/icons": "1.0.2"
73
74
  },
74
75
  "exports": {
75
76
  ".": {
@@ -108,9 +109,9 @@
108
109
  "import": "./dist/Checkbox.js",
109
110
  "types": "./dist/components/Checkbox/index.d.ts"
110
111
  },
111
- "./toggle": {
112
- "import": "./dist/Toggle.js",
113
- "types": "./dist/components/Toggle/index.d.ts"
112
+ "./switch": {
113
+ "import": "./dist/Switch.js",
114
+ "types": "./dist/components/Switch/index.d.ts"
114
115
  },
115
116
  "./select": {
116
117
  "import": "./dist/Select.js",
@@ -128,6 +129,10 @@
128
129
  "import": "./dist/Log.js",
129
130
  "types": "./dist/components/Log/index.d.ts"
130
131
  },
132
+ "./floatingActionButton": {
133
+ "import": "./dist/FloatingActionButton.js",
134
+ "types": "./dist/components/FloatingActionButton/index.d.ts"
135
+ },
131
136
  "./styles.css": "./dist/index.css"
132
137
  },
133
138
  "scripts": {
package/dist/Toggle.js DELETED
@@ -1,24 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { forwardRef } from 'react';
3
- import { Switch } from 'radix-ui';
4
- import cx from 'classnames';
5
-
6
- var Toggle = /*#__PURE__*/forwardRef(function (_a, ref) {
7
- var className = _a.className,
8
- _b = _a.states,
9
- states = _b === void 0 ? "active" : _b,
10
- onChange = _a.onChange;
11
- return jsx(Switch.Root, {
12
- ref: ref,
13
- onCheckedChange: onChange,
14
- checked: states === "active",
15
- className: cx("toggle", className),
16
- "data-frieeren-component": "Toggle",
17
- children: jsx(Switch.Thumb, {
18
- className: "toggle-thumb"
19
- })
20
- });
21
- });
22
- Toggle.displayName = "Toggle";
23
-
24
- export { Toggle };
@@ -1,6 +0,0 @@
1
- import * as TabsBase from "@radix-ui/react-tabs";
2
- declare const Root: ({ ...props }: TabsBase.TabsProps) => import("react/jsx-runtime").JSX.Element;
3
- declare const List: ({ ...props }: TabsBase.TabsListProps) => import("react/jsx-runtime").JSX.Element;
4
- declare const Trigger: ({ ...props }: TabsBase.TabsTriggerProps) => import("react/jsx-runtime").JSX.Element;
5
- declare const Content: ({ ...props }: TabsBase.TabsContentProps) => import("react/jsx-runtime").JSX.Element;
6
- export { Root, List, Trigger, Content };
@@ -1,2 +0,0 @@
1
- import { ToggleProps } from "./Toggle.type";
2
- export declare const Toggle: import("react").ForwardRefExoticComponent<ToggleProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -1,6 +0,0 @@
1
- export type ToggleStates = "active" | "inactive";
2
- export interface ToggleProps {
3
- className?: string;
4
- states?: ToggleStates;
5
- onChange?: (checked: boolean) => void;
6
- }
@@ -1 +0,0 @@
1
- export { Toggle } from "./Toggle";