@twreporter/react-typescript-components 0.1.0-beta.5 → 0.1.0-beta.7

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.
Files changed (174) hide show
  1. package/README.md +11 -1
  2. package/lib/button/components/text-button/index.d.mts +24 -0
  3. package/lib/button/components/text-button/index.d.ts +24 -0
  4. package/lib/button/components/text-button/index.js +202 -0
  5. package/lib/button/components/text-button/index.js.map +1 -0
  6. package/lib/button/components/text-button/index.mjs +8 -0
  7. package/lib/button/components/text-button/index.mjs.map +1 -0
  8. package/lib/button/components/text-button/theme.d.mts +11 -0
  9. package/lib/button/components/text-button/theme.d.ts +11 -0
  10. package/lib/button/components/text-button/theme.js +65 -0
  11. package/lib/button/components/text-button/theme.js.map +1 -0
  12. package/lib/button/components/text-button/theme.mjs +5 -0
  13. package/lib/button/components/text-button/theme.mjs.map +1 -0
  14. package/lib/button/constant.d.mts +11 -0
  15. package/lib/button/constant.d.ts +11 -0
  16. package/lib/button/constant.js +13 -0
  17. package/lib/button/constant.js.map +1 -0
  18. package/lib/button/constant.mjs +3 -0
  19. package/lib/button/constant.mjs.map +1 -0
  20. package/lib/button/enum.d.mts +11 -0
  21. package/lib/button/enum.d.ts +11 -0
  22. package/lib/button/enum.js +19 -0
  23. package/lib/button/enum.js.map +1 -0
  24. package/lib/button/enum.mjs +3 -0
  25. package/lib/button/enum.mjs.map +1 -0
  26. package/lib/button/index.d.mts +26 -0
  27. package/lib/button/index.d.ts +26 -0
  28. package/lib/button/index.js +208 -0
  29. package/lib/button/index.js.map +1 -0
  30. package/lib/button/index.mjs +9 -0
  31. package/lib/button/index.mjs.map +1 -0
  32. package/lib/button/stories/text-button.stories.d.mts +55 -0
  33. package/lib/button/stories/text-button.stories.d.ts +55 -0
  34. package/lib/button/stories/text-button.stories.js +252 -0
  35. package/lib/button/stories/text-button.stories.js.map +1 -0
  36. package/lib/button/stories/text-button.stories.mjs +35 -0
  37. package/lib/button/stories/text-button.stories.mjs.map +1 -0
  38. package/lib/{chunk-3B7LTZRJ.mjs → chunk-6DXA3EX7.mjs} +8 -6
  39. package/lib/chunk-6DXA3EX7.mjs.map +1 -0
  40. package/lib/chunk-7NJDHQ2X.mjs +56 -0
  41. package/lib/chunk-7NJDHQ2X.mjs.map +1 -0
  42. package/lib/chunk-ELECTE3D.mjs +8 -0
  43. package/lib/chunk-ELECTE3D.mjs.map +1 -0
  44. package/lib/chunk-FF422IYY.mjs +38 -0
  45. package/lib/chunk-FF422IYY.mjs.map +1 -0
  46. package/lib/chunk-FVKIUNIP.mjs +58 -0
  47. package/lib/chunk-FVKIUNIP.mjs.map +1 -0
  48. package/lib/chunk-GQWO45DN.mjs +32 -0
  49. package/lib/chunk-GQWO45DN.mjs.map +1 -0
  50. package/lib/chunk-JB4TYHDE.mjs +11 -0
  51. package/lib/chunk-JB4TYHDE.mjs.map +1 -0
  52. package/lib/chunk-JFT6JILC.mjs +12 -0
  53. package/lib/chunk-JFT6JILC.mjs.map +1 -0
  54. package/lib/chunk-QOLETTSG.mjs +28 -0
  55. package/lib/chunk-QOLETTSG.mjs.map +1 -0
  56. package/lib/chunk-U22UKMAJ.mjs +84 -0
  57. package/lib/chunk-U22UKMAJ.mjs.map +1 -0
  58. package/lib/chunk-URJXIWFX.mjs +16 -0
  59. package/lib/chunk-URJXIWFX.mjs.map +1 -0
  60. package/lib/chunk-X2UWIBNH.mjs +16 -0
  61. package/lib/chunk-X2UWIBNH.mjs.map +1 -0
  62. package/lib/chunk-XO7SDD7W.mjs +17 -0
  63. package/lib/chunk-XO7SDD7W.mjs.map +1 -0
  64. package/lib/chunk-ZALXWB2J.mjs +27 -0
  65. package/lib/chunk-ZALXWB2J.mjs.map +1 -0
  66. package/lib/customized-link/external-link.d.mts +7 -0
  67. package/lib/customized-link/external-link.d.ts +7 -0
  68. package/lib/customized-link/external-link.js +18 -0
  69. package/lib/customized-link/external-link.js.map +1 -0
  70. package/lib/customized-link/external-link.mjs +3 -0
  71. package/lib/customized-link/external-link.mjs.map +1 -0
  72. package/lib/customized-link/index.d.mts +11 -0
  73. package/lib/customized-link/index.d.ts +11 -0
  74. package/lib/customized-link/index.js +42 -0
  75. package/lib/customized-link/index.js.map +1 -0
  76. package/lib/customized-link/index.mjs +5 -0
  77. package/lib/customized-link/index.mjs.map +1 -0
  78. package/lib/customized-link/internal-link.d.mts +7 -0
  79. package/lib/customized-link/internal-link.d.ts +7 -0
  80. package/lib/customized-link/internal-link.js +22 -0
  81. package/lib/customized-link/internal-link.js.map +1 -0
  82. package/lib/customized-link/internal-link.mjs +3 -0
  83. package/lib/customized-link/internal-link.mjs.map +1 -0
  84. package/lib/customized-link/type.d.mts +9 -0
  85. package/lib/customized-link/type.d.ts +9 -0
  86. package/lib/customized-link/type.js +4 -0
  87. package/lib/customized-link/type.js.map +1 -0
  88. package/lib/customized-link/type.mjs +3 -0
  89. package/lib/customized-link/type.mjs.map +1 -0
  90. package/lib/storybook/utils/get-enum-arg.d.mts +19 -0
  91. package/lib/storybook/utils/get-enum-arg.d.ts +19 -0
  92. package/lib/storybook/utils/get-enum-arg.js +31 -0
  93. package/lib/storybook/utils/get-enum-arg.js.map +1 -0
  94. package/lib/storybook/utils/get-enum-arg.mjs +3 -0
  95. package/lib/storybook/utils/get-enum-arg.mjs.map +1 -0
  96. package/lib/styles.css +199 -2
  97. package/lib/styles.css.map +1 -1
  98. package/lib/text/heading.d.mts +8 -8
  99. package/lib/text/heading.d.ts +8 -8
  100. package/lib/text/paragraph.d.mts +6 -6
  101. package/lib/text/paragraph.d.ts +6 -6
  102. package/lib/text/stories/heading.stories.d.mts +35 -0
  103. package/lib/text/stories/heading.stories.d.ts +35 -0
  104. package/lib/text/stories/heading.stories.js +131 -0
  105. package/lib/text/stories/heading.stories.js.map +1 -0
  106. package/lib/text/stories/heading.stories.mjs +50 -0
  107. package/lib/text/stories/heading.stories.mjs.map +1 -0
  108. package/lib/text/stories/paragraph.stories.d.mts +33 -0
  109. package/lib/text/stories/paragraph.stories.d.ts +33 -0
  110. package/lib/text/stories/paragraph.stories.js +108 -0
  111. package/lib/text/stories/paragraph.stories.js.map +1 -0
  112. package/lib/text/stories/paragraph.stories.mjs +40 -0
  113. package/lib/text/stories/paragraph.stories.mjs.map +1 -0
  114. package/lib/title-bar/components/title-tab/hook.d.mts +5 -0
  115. package/lib/title-bar/components/title-tab/hook.d.ts +5 -0
  116. package/lib/title-bar/components/title-tab/hook.js +34 -0
  117. package/lib/title-bar/components/title-tab/hook.js.map +1 -0
  118. package/lib/title-bar/components/title-tab/hook.mjs +3 -0
  119. package/lib/title-bar/components/title-tab/hook.mjs.map +1 -0
  120. package/lib/title-bar/components/title-tab/index.d.mts +11 -0
  121. package/lib/title-bar/components/title-tab/index.d.ts +11 -0
  122. package/lib/title-bar/components/title-tab/index.js +367 -0
  123. package/lib/title-bar/components/title-tab/index.js.map +1 -0
  124. package/lib/title-bar/components/title-tab/index.mjs +16 -0
  125. package/lib/title-bar/components/title-tab/index.mjs.map +1 -0
  126. package/lib/title-bar/components/title-tab/tab-item.d.mts +10 -0
  127. package/lib/title-bar/components/title-tab/tab-item.d.ts +10 -0
  128. package/lib/title-bar/components/title-tab/tab-item.js +250 -0
  129. package/lib/title-bar/components/title-tab/tab-item.js.map +1 -0
  130. package/lib/title-bar/components/title-tab/tab-item.mjs +13 -0
  131. package/lib/title-bar/components/title-tab/tab-item.mjs.map +1 -0
  132. package/lib/title-bar/components/title-tab/type.d.mts +8 -0
  133. package/lib/title-bar/components/title-tab/type.d.ts +8 -0
  134. package/lib/title-bar/components/title-tab/type.js +4 -0
  135. package/lib/title-bar/components/title-tab/type.js.map +1 -0
  136. package/lib/title-bar/components/title-tab/type.mjs +3 -0
  137. package/lib/title-bar/components/title-tab/type.mjs.map +1 -0
  138. package/lib/title-bar/components/title1.d.mts +10 -0
  139. package/lib/title-bar/components/title1.d.ts +10 -0
  140. package/lib/title-bar/components/title1.js +123 -0
  141. package/lib/title-bar/components/title1.js.map +1 -0
  142. package/lib/title-bar/components/title1.mjs +6 -0
  143. package/lib/title-bar/components/title1.mjs.map +1 -0
  144. package/lib/title-bar/components/title2.d.mts +3 -3
  145. package/lib/title-bar/components/title2.d.ts +3 -3
  146. package/lib/title-bar/components/title2.js +6 -4
  147. package/lib/title-bar/components/title2.js.map +1 -1
  148. package/lib/title-bar/components/title2.mjs +1 -1
  149. package/lib/title-bar/index.d.mts +15 -2
  150. package/lib/title-bar/index.d.ts +15 -2
  151. package/lib/title-bar/index.js +296 -8
  152. package/lib/title-bar/index.js.map +1 -1
  153. package/lib/title-bar/index.mjs +19 -3
  154. package/lib/title-bar/index.mjs.map +1 -1
  155. package/lib/title-bar/stories/title-tab.stories.d.mts +17 -0
  156. package/lib/title-bar/stories/title-tab.stories.d.ts +17 -0
  157. package/lib/title-bar/stories/title-tab.stories.js +391 -0
  158. package/lib/title-bar/stories/title-tab.stories.js.map +1 -0
  159. package/lib/title-bar/stories/title-tab.stories.mjs +39 -0
  160. package/lib/title-bar/stories/title-tab.stories.mjs.map +1 -0
  161. package/lib/title-bar/stories/title1.stories.d.mts +18 -0
  162. package/lib/title-bar/stories/title1.stories.d.ts +18 -0
  163. package/lib/title-bar/stories/title1.stories.js +155 -0
  164. package/lib/title-bar/stories/title1.stories.js.map +1 -0
  165. package/lib/title-bar/stories/title1.stories.mjs +35 -0
  166. package/lib/title-bar/stories/title1.stories.mjs.map +1 -0
  167. package/lib/title-bar/stories/title2.stories.d.mts +18 -0
  168. package/lib/title-bar/stories/title2.stories.d.ts +18 -0
  169. package/lib/title-bar/stories/title2.stories.js +304 -0
  170. package/lib/title-bar/stories/title2.stories.js.map +1 -0
  171. package/lib/title-bar/stories/title2.stories.mjs +38 -0
  172. package/lib/title-bar/stories/title2.stories.mjs.map +1 -0
  173. package/package.json +12 -5
  174. package/lib/chunk-3B7LTZRJ.mjs.map +0 -1
@@ -0,0 +1,208 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var clsx2 = require('clsx');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var clsx2__default = /*#__PURE__*/_interopDefault(clsx2);
12
+
13
+ // src/button/components/text-button/index.tsx
14
+
15
+ // src/text/enum/index.ts
16
+ var WEIGHT = {
17
+ extraLight: "extra-light",
18
+ normal: "normal",
19
+ bold: "bold"
20
+ };
21
+ var baseClass = "font-default leading-[150%] flex items-center m-0";
22
+ var variantClass = {
23
+ P1: "text-[16px]",
24
+ P2: "text-[14px]",
25
+ P3: "text-[12px]",
26
+ P4: "text-[10px]"
27
+ };
28
+ var ParagraphVariant = (variant) => {
29
+ const Component = ({
30
+ text = "",
31
+ weight = WEIGHT.normal,
32
+ className = "",
33
+ ...props
34
+ }) => /* @__PURE__ */ jsxRuntime.jsx(
35
+ "p",
36
+ {
37
+ className: clsx2__default.default(
38
+ baseClass,
39
+ variantClass[variant],
40
+ `font-${weight}`,
41
+ className
42
+ ),
43
+ ...props,
44
+ children: text
45
+ }
46
+ );
47
+ Component.displayName = variant;
48
+ Component.Weight = WEIGHT;
49
+ return Component;
50
+ };
51
+ var P1 = ParagraphVariant("P1");
52
+ var P2 = ParagraphVariant("P2");
53
+ ParagraphVariant("P3");
54
+ ParagraphVariant("P4");
55
+
56
+ // src/button/enum.ts
57
+ var Size = /* @__PURE__ */ ((Size2) => {
58
+ Size2[Size2["S"] = 0] = "S";
59
+ Size2[Size2["L"] = 1] = "L";
60
+ return Size2;
61
+ })(Size || {});
62
+ var Style = /* @__PURE__ */ ((Style2) => {
63
+ Style2[Style2["BRAND"] = 0] = "BRAND";
64
+ Style2[Style2["DARK"] = 1] = "DARK";
65
+ Style2[Style2["LIGHT"] = 2] = "LIGHT";
66
+ return Style2;
67
+ })(Style || {});
68
+
69
+ // src/button/constant.ts
70
+ var THEME = {
71
+ normal: "normal",
72
+ photography: "photography",
73
+ transparent: "transparent",
74
+ index: "index"
75
+ };
76
+
77
+ // src/button/components/text-button/theme.ts
78
+ var getDisabledContainerTheme = (theme) => {
79
+ return [
80
+ // default theme
81
+ "text-gray-400 hover:text-gray-400",
82
+ // photography & transparent theme
83
+ {
84
+ "text-gray-500 hover:text-gray-500": theme === THEME.photography || theme === THEME.transparent
85
+ }
86
+ ];
87
+ };
88
+ var getActiveContainerTheme = (theme, style) => {
89
+ return [
90
+ // default theme
91
+ {
92
+ "text-gray-800 hover:text-gray-800": style === 2 /* LIGHT */,
93
+ "text-brand-heavy hover:text-brand-heavy": style === 1 /* DARK */,
94
+ "text-brand-dark hover:text-brand-dark": style === 0 /* BRAND */
95
+ },
96
+ // photography theme
97
+ {
98
+ "text-gray-400 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */,
99
+ "text-supportive-pastel hover:text-supportive-pastel": theme === THEME.photography && style !== 2 /* LIGHT */
100
+ },
101
+ // transparent theme
102
+ {
103
+ "text-gray-black hover:text-gray-black": theme === THEME.transparent && style === 2 /* LIGHT */,
104
+ "text-gray-200 hover:text-gray-200": theme === THEME.transparent && style !== 2 /* LIGHT */
105
+ }
106
+ ];
107
+ };
108
+ var getContainerTheme = (theme, style) => {
109
+ return [
110
+ // default theme
111
+ {
112
+ "text-gray-600 hover:text-gray-800": style === 2 /* LIGHT */,
113
+ "text-gray-800 hover:text-brand-heavy": style === 1 /* DARK */,
114
+ "text-brand-heavy hover:text-brand-dark": style === 0 /* BRAND */
115
+ },
116
+ // photography
117
+ {
118
+ "text-gray-300 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */,
119
+ "text-gray-white hover:text-supportive-pastel": theme === THEME.photography && style === 1 /* DARK */,
120
+ "text-supportive-faded hover:text-supportive-pastel": theme === THEME.photography && style === 0 /* BRAND */
121
+ },
122
+ // transparent theme
123
+ {
124
+ "text-gray-800 hover:text-gray-black": theme === THEME.transparent && style === 2 /* LIGHT */,
125
+ "text-gray-white hover:text-gray-200": theme === THEME.transparent && style !== 2 /* LIGHT */
126
+ }
127
+ ];
128
+ };
129
+ var TextButton = ({
130
+ text,
131
+ leftIconComponent,
132
+ rightIconComponent,
133
+ size = 0 /* S */,
134
+ theme = THEME.normal,
135
+ style = 1 /* DARK */,
136
+ active = false,
137
+ disabled = false,
138
+ loading = false,
139
+ className = ""
140
+ }) => {
141
+ const TextJSX = react.useMemo(
142
+ () => size === 0 /* S */ ? /* @__PURE__ */ jsxRuntime.jsx(P2, { text, weight: P2.Weight.bold }) : /* @__PURE__ */ jsxRuntime.jsx(P1, { text, weight: P1.Weight.bold }),
143
+ [size, text]
144
+ );
145
+ const themeClass = react.useMemo(() => {
146
+ const themeFunc = disabled ? getDisabledContainerTheme : active ? getActiveContainerTheme : getContainerTheme;
147
+ return themeFunc(theme, style);
148
+ }, [disabled, active, theme, style]);
149
+ return /* @__PURE__ */ jsxRuntime.jsx(
150
+ "div",
151
+ {
152
+ className: clsx2__default.default(
153
+ "flex items-center",
154
+ {
155
+ "cursor-default": disabled,
156
+ "cursor-pointer": !disabled
157
+ },
158
+ themeClass,
159
+ className
160
+ ),
161
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex justify-center items-center", children: [
162
+ /* @__PURE__ */ jsxRuntime.jsxs(
163
+ "div",
164
+ {
165
+ className: clsx2__default.default("flex justify-center items-center", {
166
+ "opacity-0": loading,
167
+ "opacity-100": !loading
168
+ }),
169
+ children: [
170
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center mr-[4px]", children: leftIconComponent }),
171
+ TextJSX,
172
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center ml-[4px]", children: rightIconComponent })
173
+ ]
174
+ }
175
+ ),
176
+ /* @__PURE__ */ jsxRuntime.jsx(
177
+ "span",
178
+ {
179
+ className: clsx2__default.default(
180
+ "inline-block absolute box-border animation-spin",
181
+ "border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]",
182
+ {
183
+ "size-[18px]": size === 0 /* S */,
184
+ "size-[24px]": size === 1 /* L */
185
+ },
186
+ {
187
+ "opacity-0": !loading,
188
+ "opacity-100": loading
189
+ }
190
+ )
191
+ }
192
+ )
193
+ ] })
194
+ }
195
+ );
196
+ };
197
+ TextButton.Size = Size;
198
+ TextButton.Style = Style;
199
+ TextButton.THEME = THEME;
200
+ var text_button_default = TextButton;
201
+
202
+ // src/button/index.ts
203
+ var button_default = { TextButton: text_button_default };
204
+
205
+ exports.TextButton = text_button_default;
206
+ exports.default = button_default;
207
+ //# sourceMappingURL=index.js.map
208
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/text/enum/index.ts","../../src/text/paragraph.tsx","../../src/button/enum.ts","../../src/button/constant.ts","../../src/button/components/text-button/theme.ts","../../src/button/components/text-button/index.tsx","../../src/button/index.ts"],"names":["jsx","clsx","Size","Style","useMemo","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import type { ValuesOf } from '../../types'\n\nexport const TYPE = {\n default: 'default',\n article: 'article',\n} as const\n\nexport type Type = ValuesOf<typeof TYPE>\n\nexport const WEIGHT = {\n extraLight: 'extra-light',\n normal: 'normal',\n bold: 'bold',\n} as const\n\nexport type Weight = ValuesOf<typeof WEIGHT>\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { WEIGHT, type Weight } from './enum'\n\ntype ParagraphProps = React.HTMLAttributes<HTMLParagraphElement> & {\n text?: string\n weight?: Weight\n className?: string\n}\n\nconst baseClass = 'font-default leading-[150%] flex items-center m-0'\n\nconst variantClass = {\n P1: 'text-[16px]',\n P2: 'text-[14px]',\n P3: 'text-[12px]',\n P4: 'text-[10px]',\n}\n\nconst ParagraphVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<ParagraphProps> & { Weight: typeof WEIGHT } = ({\n text = '',\n weight = WEIGHT.normal,\n className = '',\n ...props\n }) => (\n <p\n className={clsx(\n baseClass,\n variantClass[variant],\n `font-${weight}`,\n className\n )}\n {...props}\n >\n {text}\n </p>\n )\n Component.displayName = variant\n Component.Weight = WEIGHT\n return Component\n}\n\nconst P1 = ParagraphVariant('P1')\nconst P2 = ParagraphVariant('P2')\nconst P3 = ParagraphVariant('P3')\nconst P4 = ParagraphVariant('P4')\n\nexport { P1, P2, P3, P4 }\n","export enum Size {\n S,\n L,\n}\n\nexport enum Style {\n BRAND,\n DARK,\n LIGHT,\n}\n","import type { ValuesOf } from '../types'\n\nexport const THEME = {\n normal: 'normal',\n photography: 'photography',\n transparent: 'transparent',\n index: 'index',\n} as const\n\nexport type Theme = ValuesOf<typeof THEME>\n","// constants\nimport { THEME } from '../../constant'\n// type\nimport type { Theme } from '../../constant'\nimport type { ClassArray } from 'clsx'\n// enum\nimport { Style } from '../../enum'\n\ntype ThemeFunc = (theme: Theme, style?: Style) => ClassArray\n\nexport const getDisabledContainerTheme: ThemeFunc = (theme) => {\n return [\n // default theme\n 'text-gray-400 hover:text-gray-400',\n // photography & transparent theme\n {\n 'text-gray-500 hover:text-gray-500': theme === THEME.photography || theme === THEME.transparent,\n }\n ]\n}\n\nexport const getActiveContainerTheme: ThemeFunc = (theme, style) => {\n return [\n // default theme\n {\n 'text-gray-800 hover:text-gray-800': style === Style.LIGHT,\n 'text-brand-heavy hover:text-brand-heavy': style === Style.DARK,\n 'text-brand-dark hover:text-brand-dark': style === Style.BRAND,\n },\n // photography theme\n {\n 'text-gray-400 hover:text-gray-400': theme === THEME.photography && style === Style.LIGHT,\n 'text-supportive-pastel hover:text-supportive-pastel': theme === THEME.photography && style !== Style.LIGHT,\n },\n // transparent theme\n {\n 'text-gray-black hover:text-gray-black': theme === THEME.transparent && style === Style.LIGHT,\n 'text-gray-200 hover:text-gray-200': theme === THEME.transparent && style !== Style.LIGHT,\n },\n ]\n}\n\nexport const getContainerTheme: ThemeFunc = (theme, style) => {\n return [\n // default theme\n {\n 'text-gray-600 hover:text-gray-800': style === Style.LIGHT,\n 'text-gray-800 hover:text-brand-heavy': style === Style.DARK,\n 'text-brand-heavy hover:text-brand-dark': style === Style.BRAND,\n },\n // photography\n {\n 'text-gray-300 hover:text-gray-400': theme === THEME.photography && style === Style.LIGHT,\n 'text-gray-white hover:text-supportive-pastel': theme === THEME.photography && style === Style.DARK,\n 'text-supportive-faded hover:text-supportive-pastel': theme === THEME.photography && style === Style.BRAND,\n },\n // transparent theme\n {\n 'text-gray-800 hover:text-gray-black': theme === THEME.transparent && style === Style.LIGHT,\n 'text-gray-white hover:text-gray-200': theme === THEME.transparent && style !== Style.LIGHT,\n },\n ]\n}","import { type FC, type ReactElement, useMemo } from 'react'\nimport clsx from 'clsx'\n// components\nimport { P1, P2 } from '../../../text/paragraph'\n// enums\nimport { Size, Style } from '../../enum'\n// type\nimport type { Theme } from '../../constant'\n// constants\nimport { THEME } from '../../constant'\n// utils\nimport { getContainerTheme, getActiveContainerTheme, getDisabledContainerTheme } from './theme'\n\ntype TextButtonProps = {\n text: string\n leftIconComponent?: ReactElement\n rightIconComponent?: ReactElement\n size?: Size\n style?: Style\n theme?: Theme\n active?: boolean\n disabled?: boolean\n loading?: boolean\n className?: string\n}\nconst TextButton: FC<TextButtonProps> & {\n Size: typeof Size\n Style: typeof Style\n THEME: typeof THEME\n} = ({\n text,\n leftIconComponent,\n rightIconComponent,\n size = Size.S,\n theme = THEME.normal,\n style = Style.DARK,\n active = false,\n disabled = false,\n loading = false,\n className = '',\n}) => {\n const TextJSX = useMemo(\n () => (size === Size.S ? <P2 text={text} weight={P2.Weight.bold} /> : <P1 text={text} weight={P1.Weight.bold} />),\n [size, text]\n )\n const themeClass = useMemo(() => {\n const themeFunc = disabled ? getDisabledContainerTheme : (active ? getActiveContainerTheme : getContainerTheme)\n return themeFunc(theme, style)\n }, [disabled, active, theme, style])\n\n return (\n <div\n className={clsx(\n 'flex items-center',\n {\n 'cursor-default': disabled,\n 'cursor-pointer': !disabled,\n },\n themeClass,\n className\n )}\n >\n <div className=\"relative flex justify-center items-center\">\n <div\n className={clsx('flex justify-center items-center', {\n 'opacity-0': loading,\n 'opacity-100': !loading,\n })}\n >\n <div className=\"flex items-center mr-[4px]\">{leftIconComponent}</div>\n {TextJSX}\n <div className=\"flex items-center ml-[4px]\">{rightIconComponent}</div>\n </div>\n <span\n className={clsx(\n 'inline-block absolute box-border animation-spin',\n 'border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]',\n {\n 'size-[18px]': size === Size.S,\n 'size-[24px]': size === Size.L,\n },\n {\n 'opacity-0': !loading,\n 'opacity-100': loading,\n }\n )}\n />\n </div>\n </div>\n )\n}\nTextButton.Size = Size\nTextButton.Style = Style\nTextButton.THEME = THEME\n\nexport default TextButton\n","import TextButton from './components/text-button'\n\nexport { TextButton }\n\nexport default { TextButton }\n"]}
@@ -0,0 +1,9 @@
1
+ export { button_default as default } from '../chunk-ELECTE3D.mjs';
2
+ export { text_button_default as TextButton } from '../chunk-U22UKMAJ.mjs';
3
+ import '../chunk-FVKIUNIP.mjs';
4
+ import '../chunk-HQG6Q2EY.mjs';
5
+ import '../chunk-UM7RNC2Y.mjs';
6
+ import '../chunk-JB4TYHDE.mjs';
7
+ import '../chunk-URJXIWFX.mjs';
8
+ //# sourceMappingURL=index.mjs.map
9
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -0,0 +1,55 @@
1
+ import { Theme, THEME } from '../constant.mjs';
2
+ import { Size, Style } from '../enum.mjs';
3
+ import * as react from 'react';
4
+ import { StoryObj } from '@storybook/react-vite';
5
+ import '../../types/index.mjs';
6
+
7
+ declare const meta: {
8
+ title: string;
9
+ component: react.FC<{
10
+ text: string;
11
+ leftIconComponent?: react.ReactElement;
12
+ rightIconComponent?: react.ReactElement;
13
+ size?: Size;
14
+ style?: Style;
15
+ theme?: Theme;
16
+ active?: boolean;
17
+ disabled?: boolean;
18
+ loading?: boolean;
19
+ className?: string;
20
+ }> & {
21
+ Size: typeof Size;
22
+ Style: typeof Style;
23
+ THEME: typeof THEME;
24
+ };
25
+ argTypes: {
26
+ size: {
27
+ defaultValue: Size;
28
+ options: string[];
29
+ mapping: Record<string, Size>;
30
+ control: {
31
+ type: "radio";
32
+ };
33
+ };
34
+ theme: {
35
+ defaultValue: "normal" | "photography" | "transparent" | "index";
36
+ options: ("normal" | "photography" | "transparent" | "index")[];
37
+ control: {
38
+ type: "radio";
39
+ };
40
+ };
41
+ style: {
42
+ defaultValue: Style;
43
+ options: string[];
44
+ mapping: Record<string, Style>;
45
+ control: {
46
+ type: "radio";
47
+ };
48
+ };
49
+ };
50
+ };
51
+
52
+ type Story = StoryObj<typeof meta>;
53
+ declare const Basic: Story;
54
+
55
+ export { Basic, meta as default };
@@ -0,0 +1,55 @@
1
+ import { Theme, THEME } from '../constant.js';
2
+ import { Size, Style } from '../enum.js';
3
+ import * as react from 'react';
4
+ import { StoryObj } from '@storybook/react-vite';
5
+ import '../../types/index.js';
6
+
7
+ declare const meta: {
8
+ title: string;
9
+ component: react.FC<{
10
+ text: string;
11
+ leftIconComponent?: react.ReactElement;
12
+ rightIconComponent?: react.ReactElement;
13
+ size?: Size;
14
+ style?: Style;
15
+ theme?: Theme;
16
+ active?: boolean;
17
+ disabled?: boolean;
18
+ loading?: boolean;
19
+ className?: string;
20
+ }> & {
21
+ Size: typeof Size;
22
+ Style: typeof Style;
23
+ THEME: typeof THEME;
24
+ };
25
+ argTypes: {
26
+ size: {
27
+ defaultValue: Size;
28
+ options: string[];
29
+ mapping: Record<string, Size>;
30
+ control: {
31
+ type: "radio";
32
+ };
33
+ };
34
+ theme: {
35
+ defaultValue: "normal" | "photography" | "transparent" | "index";
36
+ options: ("normal" | "photography" | "transparent" | "index")[];
37
+ control: {
38
+ type: "radio";
39
+ };
40
+ };
41
+ style: {
42
+ defaultValue: Style;
43
+ options: string[];
44
+ mapping: Record<string, Style>;
45
+ control: {
46
+ type: "radio";
47
+ };
48
+ };
49
+ };
50
+ };
51
+
52
+ type Story = StoryObj<typeof meta>;
53
+ declare const Basic: Story;
54
+
55
+ export { Basic, meta as default };
@@ -0,0 +1,252 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var clsx2 = require('clsx');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var clsx2__default = /*#__PURE__*/_interopDefault(clsx2);
12
+
13
+ // src/storybook/utils/get-enum-arg.ts
14
+ function getRadioArgFromObject(object, defaultValue) {
15
+ return {
16
+ defaultValue,
17
+ options: Object.values(object),
18
+ control: { type: "radio" }
19
+ };
20
+ }
21
+ function getRadioArgFromEnum(enumObject, defaultValue) {
22
+ const keys = Object.keys(enumObject).filter(
23
+ (key) => Number.isNaN(Number(key))
24
+ );
25
+ const mapping = {};
26
+ keys.forEach((key) => {
27
+ mapping[key] = enumObject[key];
28
+ });
29
+ const defaultKey = keys.find((key) => enumObject[key] === defaultValue) || keys[0];
30
+ return {
31
+ defaultValue: enumObject[defaultKey],
32
+ options: keys,
33
+ mapping,
34
+ control: { type: "radio" }
35
+ };
36
+ }
37
+
38
+ // src/text/enum/index.ts
39
+ var WEIGHT = {
40
+ extraLight: "extra-light",
41
+ normal: "normal",
42
+ bold: "bold"
43
+ };
44
+ var baseClass = "font-default leading-[150%] flex items-center m-0";
45
+ var variantClass = {
46
+ P1: "text-[16px]",
47
+ P2: "text-[14px]",
48
+ P3: "text-[12px]",
49
+ P4: "text-[10px]"
50
+ };
51
+ var ParagraphVariant = (variant) => {
52
+ const Component = ({
53
+ text = "",
54
+ weight = WEIGHT.normal,
55
+ className = "",
56
+ ...props
57
+ }) => /* @__PURE__ */ jsxRuntime.jsx(
58
+ "p",
59
+ {
60
+ className: clsx2__default.default(
61
+ baseClass,
62
+ variantClass[variant],
63
+ `font-${weight}`,
64
+ className
65
+ ),
66
+ ...props,
67
+ children: text
68
+ }
69
+ );
70
+ Component.displayName = variant;
71
+ Component.Weight = WEIGHT;
72
+ return Component;
73
+ };
74
+ var P1 = ParagraphVariant("P1");
75
+ var P2 = ParagraphVariant("P2");
76
+ ParagraphVariant("P3");
77
+ ParagraphVariant("P4");
78
+
79
+ // src/button/enum.ts
80
+ var Size = /* @__PURE__ */ ((Size2) => {
81
+ Size2[Size2["S"] = 0] = "S";
82
+ Size2[Size2["L"] = 1] = "L";
83
+ return Size2;
84
+ })(Size || {});
85
+ var Style = /* @__PURE__ */ ((Style2) => {
86
+ Style2[Style2["BRAND"] = 0] = "BRAND";
87
+ Style2[Style2["DARK"] = 1] = "DARK";
88
+ Style2[Style2["LIGHT"] = 2] = "LIGHT";
89
+ return Style2;
90
+ })(Style || {});
91
+
92
+ // src/button/constant.ts
93
+ var THEME = {
94
+ normal: "normal",
95
+ photography: "photography",
96
+ transparent: "transparent",
97
+ index: "index"
98
+ };
99
+
100
+ // src/button/components/text-button/theme.ts
101
+ var getDisabledContainerTheme = (theme) => {
102
+ return [
103
+ // default theme
104
+ "text-gray-400 hover:text-gray-400",
105
+ // photography & transparent theme
106
+ {
107
+ "text-gray-500 hover:text-gray-500": theme === THEME.photography || theme === THEME.transparent
108
+ }
109
+ ];
110
+ };
111
+ var getActiveContainerTheme = (theme, style) => {
112
+ return [
113
+ // default theme
114
+ {
115
+ "text-gray-800 hover:text-gray-800": style === 2 /* LIGHT */,
116
+ "text-brand-heavy hover:text-brand-heavy": style === 1 /* DARK */,
117
+ "text-brand-dark hover:text-brand-dark": style === 0 /* BRAND */
118
+ },
119
+ // photography theme
120
+ {
121
+ "text-gray-400 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */,
122
+ "text-supportive-pastel hover:text-supportive-pastel": theme === THEME.photography && style !== 2 /* LIGHT */
123
+ },
124
+ // transparent theme
125
+ {
126
+ "text-gray-black hover:text-gray-black": theme === THEME.transparent && style === 2 /* LIGHT */,
127
+ "text-gray-200 hover:text-gray-200": theme === THEME.transparent && style !== 2 /* LIGHT */
128
+ }
129
+ ];
130
+ };
131
+ var getContainerTheme = (theme, style) => {
132
+ return [
133
+ // default theme
134
+ {
135
+ "text-gray-600 hover:text-gray-800": style === 2 /* LIGHT */,
136
+ "text-gray-800 hover:text-brand-heavy": style === 1 /* DARK */,
137
+ "text-brand-heavy hover:text-brand-dark": style === 0 /* BRAND */
138
+ },
139
+ // photography
140
+ {
141
+ "text-gray-300 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */,
142
+ "text-gray-white hover:text-supportive-pastel": theme === THEME.photography && style === 1 /* DARK */,
143
+ "text-supportive-faded hover:text-supportive-pastel": theme === THEME.photography && style === 0 /* BRAND */
144
+ },
145
+ // transparent theme
146
+ {
147
+ "text-gray-800 hover:text-gray-black": theme === THEME.transparent && style === 2 /* LIGHT */,
148
+ "text-gray-white hover:text-gray-200": theme === THEME.transparent && style !== 2 /* LIGHT */
149
+ }
150
+ ];
151
+ };
152
+ var TextButton = ({
153
+ text,
154
+ leftIconComponent,
155
+ rightIconComponent,
156
+ size = 0 /* S */,
157
+ theme = THEME.normal,
158
+ style = 1 /* DARK */,
159
+ active = false,
160
+ disabled = false,
161
+ loading = false,
162
+ className = ""
163
+ }) => {
164
+ const TextJSX = react.useMemo(
165
+ () => size === 0 /* S */ ? /* @__PURE__ */ jsxRuntime.jsx(P2, { text, weight: P2.Weight.bold }) : /* @__PURE__ */ jsxRuntime.jsx(P1, { text, weight: P1.Weight.bold }),
166
+ [size, text]
167
+ );
168
+ const themeClass = react.useMemo(() => {
169
+ const themeFunc = disabled ? getDisabledContainerTheme : active ? getActiveContainerTheme : getContainerTheme;
170
+ return themeFunc(theme, style);
171
+ }, [disabled, active, theme, style]);
172
+ return /* @__PURE__ */ jsxRuntime.jsx(
173
+ "div",
174
+ {
175
+ className: clsx2__default.default(
176
+ "flex items-center",
177
+ {
178
+ "cursor-default": disabled,
179
+ "cursor-pointer": !disabled
180
+ },
181
+ themeClass,
182
+ className
183
+ ),
184
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex justify-center items-center", children: [
185
+ /* @__PURE__ */ jsxRuntime.jsxs(
186
+ "div",
187
+ {
188
+ className: clsx2__default.default("flex justify-center items-center", {
189
+ "opacity-0": loading,
190
+ "opacity-100": !loading
191
+ }),
192
+ children: [
193
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center mr-[4px]", children: leftIconComponent }),
194
+ TextJSX,
195
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center ml-[4px]", children: rightIconComponent })
196
+ ]
197
+ }
198
+ ),
199
+ /* @__PURE__ */ jsxRuntime.jsx(
200
+ "span",
201
+ {
202
+ className: clsx2__default.default(
203
+ "inline-block absolute box-border animation-spin",
204
+ "border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]",
205
+ {
206
+ "size-[18px]": size === 0 /* S */,
207
+ "size-[24px]": size === 1 /* L */
208
+ },
209
+ {
210
+ "opacity-0": !loading,
211
+ "opacity-100": loading
212
+ }
213
+ )
214
+ }
215
+ )
216
+ ] })
217
+ }
218
+ );
219
+ };
220
+ TextButton.Size = Size;
221
+ TextButton.Style = Style;
222
+ TextButton.THEME = THEME;
223
+ var text_button_default = TextButton;
224
+
225
+ // src/button/stories/text-button.stories.ts
226
+ var meta = {
227
+ title: "Button/TextButton",
228
+ component: text_button_default,
229
+ argTypes: {
230
+ size: getRadioArgFromEnum(text_button_default.Size, text_button_default.Size.S),
231
+ theme: getRadioArgFromObject(text_button_default.THEME, text_button_default.THEME.normal),
232
+ style: getRadioArgFromEnum(text_button_default.Style, text_button_default.Style.DARK)
233
+ }
234
+ };
235
+ var text_button_stories_default = meta;
236
+ var Basic = {
237
+ args: {
238
+ text: "\u6587\u5B57",
239
+ size: text_button_default.Size.S,
240
+ theme: text_button_default.THEME.normal,
241
+ style: text_button_default.Style.DARK,
242
+ active: false,
243
+ disabled: false,
244
+ loading: false
245
+ },
246
+ parameters: { controls: { exclude: ["className"] } }
247
+ };
248
+
249
+ exports.Basic = Basic;
250
+ exports.default = text_button_stories_default;
251
+ //# sourceMappingURL=text-button.stories.js.map
252
+ //# sourceMappingURL=text-button.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/storybook/utils/get-enum-arg.ts","../../../src/text/enum/index.ts","../../../src/text/paragraph.tsx","../../../src/button/enum.ts","../../../src/button/constant.ts","../../../src/button/components/text-button/theme.ts","../../../src/button/components/text-button/index.tsx","../../../src/button/stories/text-button.stories.ts"],"names":["jsx","clsx","Size","Style","useMemo","jsxs"],"mappings":"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","file":"text-button.stories.js","sourcesContent":["type RadioArgObject<T> = {\n defaultValue: T\n options: T[]\n control: { type: 'radio' }\n}\n\nexport function getRadioArgFromObject<T extends string | number>(\n object: Record<string, T>,\n defaultValue: T\n): RadioArgObject<T> {\n return {\n defaultValue,\n options: Object.values(object),\n control: { type: 'radio' },\n }\n}\n\ntype RadioArgEnum<E> = {\n defaultValue: E\n options: string[]\n mapping: Record<string, E>\n control: { type: 'radio' }\n}\n\nexport function getRadioArgFromEnum<E extends Record<string, string | number>>(\n enumObject: E,\n defaultValue: E[keyof E]\n): RadioArgEnum<E[keyof E]> {\n // Only keep \"real\" keys (filter numeric reverse mapping)\n const keys = Object.keys(enumObject).filter((key) =>\n Number.isNaN(Number(key))\n )\n\n const mapping: Record<string, E[keyof E]> = {}\n keys.forEach((key) => {\n mapping[key] = enumObject[key as keyof E]\n })\n\n // Find the key corresponding to the default value\n const defaultKey =\n keys.find((key) => enumObject[key as keyof E] === defaultValue) || keys[0]\n\n return {\n defaultValue: enumObject[defaultKey as keyof E],\n options: keys,\n mapping,\n control: { type: 'radio' },\n }\n}\n","import type { ValuesOf } from '../../types'\n\nexport const TYPE = {\n default: 'default',\n article: 'article',\n} as const\n\nexport type Type = ValuesOf<typeof TYPE>\n\nexport const WEIGHT = {\n extraLight: 'extra-light',\n normal: 'normal',\n bold: 'bold',\n} as const\n\nexport type Weight = ValuesOf<typeof WEIGHT>\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { WEIGHT, type Weight } from './enum'\n\ntype ParagraphProps = React.HTMLAttributes<HTMLParagraphElement> & {\n text?: string\n weight?: Weight\n className?: string\n}\n\nconst baseClass = 'font-default leading-[150%] flex items-center m-0'\n\nconst variantClass = {\n P1: 'text-[16px]',\n P2: 'text-[14px]',\n P3: 'text-[12px]',\n P4: 'text-[10px]',\n}\n\nconst ParagraphVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<ParagraphProps> & { Weight: typeof WEIGHT } = ({\n text = '',\n weight = WEIGHT.normal,\n className = '',\n ...props\n }) => (\n <p\n className={clsx(\n baseClass,\n variantClass[variant],\n `font-${weight}`,\n className\n )}\n {...props}\n >\n {text}\n </p>\n )\n Component.displayName = variant\n Component.Weight = WEIGHT\n return Component\n}\n\nconst P1 = ParagraphVariant('P1')\nconst P2 = ParagraphVariant('P2')\nconst P3 = ParagraphVariant('P3')\nconst P4 = ParagraphVariant('P4')\n\nexport { P1, P2, P3, P4 }\n","export enum Size {\n S,\n L,\n}\n\nexport enum Style {\n BRAND,\n DARK,\n LIGHT,\n}\n","import type { ValuesOf } from '../types'\n\nexport const THEME = {\n normal: 'normal',\n photography: 'photography',\n transparent: 'transparent',\n index: 'index',\n} as const\n\nexport type Theme = ValuesOf<typeof THEME>\n","// constants\nimport { THEME } from '../../constant'\n// type\nimport type { Theme } from '../../constant'\nimport type { ClassArray } from 'clsx'\n// enum\nimport { Style } from '../../enum'\n\ntype ThemeFunc = (theme: Theme, style?: Style) => ClassArray\n\nexport const getDisabledContainerTheme: ThemeFunc = (theme) => {\n return [\n // default theme\n 'text-gray-400 hover:text-gray-400',\n // photography & transparent theme\n {\n 'text-gray-500 hover:text-gray-500': theme === THEME.photography || theme === THEME.transparent,\n }\n ]\n}\n\nexport const getActiveContainerTheme: ThemeFunc = (theme, style) => {\n return [\n // default theme\n {\n 'text-gray-800 hover:text-gray-800': style === Style.LIGHT,\n 'text-brand-heavy hover:text-brand-heavy': style === Style.DARK,\n 'text-brand-dark hover:text-brand-dark': style === Style.BRAND,\n },\n // photography theme\n {\n 'text-gray-400 hover:text-gray-400': theme === THEME.photography && style === Style.LIGHT,\n 'text-supportive-pastel hover:text-supportive-pastel': theme === THEME.photography && style !== Style.LIGHT,\n },\n // transparent theme\n {\n 'text-gray-black hover:text-gray-black': theme === THEME.transparent && style === Style.LIGHT,\n 'text-gray-200 hover:text-gray-200': theme === THEME.transparent && style !== Style.LIGHT,\n },\n ]\n}\n\nexport const getContainerTheme: ThemeFunc = (theme, style) => {\n return [\n // default theme\n {\n 'text-gray-600 hover:text-gray-800': style === Style.LIGHT,\n 'text-gray-800 hover:text-brand-heavy': style === Style.DARK,\n 'text-brand-heavy hover:text-brand-dark': style === Style.BRAND,\n },\n // photography\n {\n 'text-gray-300 hover:text-gray-400': theme === THEME.photography && style === Style.LIGHT,\n 'text-gray-white hover:text-supportive-pastel': theme === THEME.photography && style === Style.DARK,\n 'text-supportive-faded hover:text-supportive-pastel': theme === THEME.photography && style === Style.BRAND,\n },\n // transparent theme\n {\n 'text-gray-800 hover:text-gray-black': theme === THEME.transparent && style === Style.LIGHT,\n 'text-gray-white hover:text-gray-200': theme === THEME.transparent && style !== Style.LIGHT,\n },\n ]\n}","import { type FC, type ReactElement, useMemo } from 'react'\nimport clsx from 'clsx'\n// components\nimport { P1, P2 } from '../../../text/paragraph'\n// enums\nimport { Size, Style } from '../../enum'\n// type\nimport type { Theme } from '../../constant'\n// constants\nimport { THEME } from '../../constant'\n// utils\nimport { getContainerTheme, getActiveContainerTheme, getDisabledContainerTheme } from './theme'\n\ntype TextButtonProps = {\n text: string\n leftIconComponent?: ReactElement\n rightIconComponent?: ReactElement\n size?: Size\n style?: Style\n theme?: Theme\n active?: boolean\n disabled?: boolean\n loading?: boolean\n className?: string\n}\nconst TextButton: FC<TextButtonProps> & {\n Size: typeof Size\n Style: typeof Style\n THEME: typeof THEME\n} = ({\n text,\n leftIconComponent,\n rightIconComponent,\n size = Size.S,\n theme = THEME.normal,\n style = Style.DARK,\n active = false,\n disabled = false,\n loading = false,\n className = '',\n}) => {\n const TextJSX = useMemo(\n () => (size === Size.S ? <P2 text={text} weight={P2.Weight.bold} /> : <P1 text={text} weight={P1.Weight.bold} />),\n [size, text]\n )\n const themeClass = useMemo(() => {\n const themeFunc = disabled ? getDisabledContainerTheme : (active ? getActiveContainerTheme : getContainerTheme)\n return themeFunc(theme, style)\n }, [disabled, active, theme, style])\n\n return (\n <div\n className={clsx(\n 'flex items-center',\n {\n 'cursor-default': disabled,\n 'cursor-pointer': !disabled,\n },\n themeClass,\n className\n )}\n >\n <div className=\"relative flex justify-center items-center\">\n <div\n className={clsx('flex justify-center items-center', {\n 'opacity-0': loading,\n 'opacity-100': !loading,\n })}\n >\n <div className=\"flex items-center mr-[4px]\">{leftIconComponent}</div>\n {TextJSX}\n <div className=\"flex items-center ml-[4px]\">{rightIconComponent}</div>\n </div>\n <span\n className={clsx(\n 'inline-block absolute box-border animation-spin',\n 'border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]',\n {\n 'size-[18px]': size === Size.S,\n 'size-[24px]': size === Size.L,\n },\n {\n 'opacity-0': !loading,\n 'opacity-100': loading,\n }\n )}\n />\n </div>\n </div>\n )\n}\nTextButton.Size = Size\nTextButton.Style = Style\nTextButton.THEME = THEME\n\nexport default TextButton\n","import type { Meta, StoryObj } from '@storybook/react-vite'\n// utils\nimport {\n getRadioArgFromObject,\n getRadioArgFromEnum,\n} from '../../storybook/utils/get-enum-arg'\n// components\nimport TextButton from '../components/text-button'\n\nconst meta = {\n title: 'Button/TextButton',\n component: TextButton,\n argTypes: {\n size: getRadioArgFromEnum(TextButton.Size, TextButton.Size.S),\n theme: getRadioArgFromObject(TextButton.THEME, TextButton.THEME.normal),\n style: getRadioArgFromEnum(TextButton.Style, TextButton.Style.DARK),\n },\n} satisfies Meta<typeof TextButton>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n text: '文字',\n size: TextButton.Size.S,\n theme: TextButton.THEME.normal,\n style: TextButton.Style.DARK,\n active: false,\n disabled: false,\n loading: false,\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n"]}