@x-plat/design-system 0.1.1

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 (165) hide show
  1. package/README.md +123 -0
  2. package/dist/attributes-DJIWir_0.d.cts +7 -0
  3. package/dist/attributes-DJIWir_0.d.ts +7 -0
  4. package/dist/breakpoints-DsXkJgdl.d.cts +35 -0
  5. package/dist/breakpoints-DsXkJgdl.d.ts +35 -0
  6. package/dist/colors-BG91q_uV.d.cts +133 -0
  7. package/dist/colors-BG91q_uV.d.ts +133 -0
  8. package/dist/components/Button/index.cjs +203 -0
  9. package/dist/components/Button/index.css +1231 -0
  10. package/dist/components/Button/index.d.cts +132 -0
  11. package/dist/components/Button/index.d.ts +132 -0
  12. package/dist/components/Button/index.js +176 -0
  13. package/dist/components/Card/index.cjs +56 -0
  14. package/dist/components/Card/index.css +27 -0
  15. package/dist/components/Card/index.d.cts +13 -0
  16. package/dist/components/Card/index.d.ts +13 -0
  17. package/dist/components/Card/index.js +29 -0
  18. package/dist/components/Chart/index.cjs +393 -0
  19. package/dist/components/Chart/index.css +4 -0
  20. package/dist/components/Chart/index.d.cts +10 -0
  21. package/dist/components/Chart/index.d.ts +10 -0
  22. package/dist/components/Chart/index.js +367 -0
  23. package/dist/components/CheckBox/index.cjs +1116 -0
  24. package/dist/components/CheckBox/index.css +598 -0
  25. package/dist/components/CheckBox/index.d.cts +132 -0
  26. package/dist/components/CheckBox/index.d.ts +132 -0
  27. package/dist/components/CheckBox/index.js +1089 -0
  28. package/dist/components/Chip/index.cjs +193 -0
  29. package/dist/components/Chip/index.css +1227 -0
  30. package/dist/components/Chip/index.d.cts +132 -0
  31. package/dist/components/Chip/index.d.ts +132 -0
  32. package/dist/components/Chip/index.js +166 -0
  33. package/dist/components/DatePicker/index.cjs +1653 -0
  34. package/dist/components/DatePicker/index.css +1417 -0
  35. package/dist/components/DatePicker/index.d.cts +56 -0
  36. package/dist/components/DatePicker/index.d.ts +56 -0
  37. package/dist/components/DatePicker/index.js +1613 -0
  38. package/dist/components/HtmlTypeWriter/index.cjs +172 -0
  39. package/dist/components/HtmlTypeWriter/index.css +23 -0
  40. package/dist/components/HtmlTypeWriter/index.d.cts +14 -0
  41. package/dist/components/HtmlTypeWriter/index.d.ts +14 -0
  42. package/dist/components/HtmlTypeWriter/index.js +135 -0
  43. package/dist/components/ImageSelector/index.cjs +1063 -0
  44. package/dist/components/ImageSelector/index.css +85 -0
  45. package/dist/components/ImageSelector/index.d.cts +10 -0
  46. package/dist/components/ImageSelector/index.d.ts +10 -0
  47. package/dist/components/ImageSelector/index.js +1026 -0
  48. package/dist/components/Input/index.cjs +410 -0
  49. package/dist/components/Input/index.css +74 -0
  50. package/dist/components/Input/index.d.cts +23 -0
  51. package/dist/components/Input/index.d.ts +23 -0
  52. package/dist/components/Input/index.js +372 -0
  53. package/dist/components/Modal/index.cjs +101 -0
  54. package/dist/components/Modal/index.css +39 -0
  55. package/dist/components/Modal/index.d.cts +16 -0
  56. package/dist/components/Modal/index.d.ts +16 -0
  57. package/dist/components/Modal/index.js +64 -0
  58. package/dist/components/PopOver/index.cjs +176 -0
  59. package/dist/components/PopOver/index.css +27 -0
  60. package/dist/components/PopOver/index.d.cts +15 -0
  61. package/dist/components/PopOver/index.d.ts +15 -0
  62. package/dist/components/PopOver/index.js +139 -0
  63. package/dist/components/Radio/index.cjs +257 -0
  64. package/dist/components/Radio/index.css +777 -0
  65. package/dist/components/Radio/index.d.cts +154 -0
  66. package/dist/components/Radio/index.d.ts +154 -0
  67. package/dist/components/Radio/index.js +219 -0
  68. package/dist/components/Select/index.cjs +1203 -0
  69. package/dist/components/Select/index.css +136 -0
  70. package/dist/components/Select/index.d.cts +44 -0
  71. package/dist/components/Select/index.d.ts +44 -0
  72. package/dist/components/Select/index.js +1165 -0
  73. package/dist/components/Swiper/index.cjs +144 -0
  74. package/dist/components/Swiper/index.d.cts +24 -0
  75. package/dist/components/Swiper/index.d.ts +24 -0
  76. package/dist/components/Swiper/index.js +128 -0
  77. package/dist/components/Switch/index.cjs +240 -0
  78. package/dist/components/Switch/index.css +780 -0
  79. package/dist/components/Switch/index.d.cts +131 -0
  80. package/dist/components/Switch/index.d.ts +131 -0
  81. package/dist/components/Switch/index.js +203 -0
  82. package/dist/components/Tab/index.cjs +122 -0
  83. package/dist/components/Tab/index.css +59 -0
  84. package/dist/components/Tab/index.d.cts +18 -0
  85. package/dist/components/Tab/index.d.ts +18 -0
  86. package/dist/components/Tab/index.js +85 -0
  87. package/dist/components/Table/index.cjs +384 -0
  88. package/dist/components/Table/index.css +4093 -0
  89. package/dist/components/Table/index.d.cts +174 -0
  90. package/dist/components/Table/index.d.ts +174 -0
  91. package/dist/components/Table/index.js +343 -0
  92. package/dist/components/TextArea/index.cjs +114 -0
  93. package/dist/components/TextArea/index.css +34 -0
  94. package/dist/components/TextArea/index.d.cts +6 -0
  95. package/dist/components/TextArea/index.d.ts +6 -0
  96. package/dist/components/TextArea/index.js +77 -0
  97. package/dist/components/Tooltip/index.cjs +210 -0
  98. package/dist/components/Tooltip/index.css +599 -0
  99. package/dist/components/Tooltip/index.d.cts +134 -0
  100. package/dist/components/Tooltip/index.d.ts +134 -0
  101. package/dist/components/Tooltip/index.js +173 -0
  102. package/dist/components/Video/index.cjs +269 -0
  103. package/dist/components/Video/index.css +71 -0
  104. package/dist/components/Video/index.d.cts +15 -0
  105. package/dist/components/Video/index.d.ts +15 -0
  106. package/dist/components/Video/index.js +232 -0
  107. package/dist/components/index.cjs +3221 -0
  108. package/dist/components/index.css +9972 -0
  109. package/dist/components/index.d.cts +23 -0
  110. package/dist/components/index.d.ts +23 -0
  111. package/dist/components/index.js +3167 -0
  112. package/dist/index.cjs +8216 -0
  113. package/dist/index.css +10087 -0
  114. package/dist/index.d.cts +31 -0
  115. package/dist/index.d.ts +31 -0
  116. package/dist/index.js +7855 -0
  117. package/dist/layout/Grid/FullGrid/index.cjs +54 -0
  118. package/dist/layout/Grid/FullGrid/index.css +21 -0
  119. package/dist/layout/Grid/FullGrid/index.d.cts +9 -0
  120. package/dist/layout/Grid/FullGrid/index.d.ts +9 -0
  121. package/dist/layout/Grid/FullGrid/index.js +27 -0
  122. package/dist/layout/Grid/FullScreen/index.cjs +54 -0
  123. package/dist/layout/Grid/FullScreen/index.css +23 -0
  124. package/dist/layout/Grid/FullScreen/index.d.cts +9 -0
  125. package/dist/layout/Grid/FullScreen/index.d.ts +9 -0
  126. package/dist/layout/Grid/FullScreen/index.js +27 -0
  127. package/dist/layout/Grid/GapGrid/index.cjs +32 -0
  128. package/dist/layout/Grid/GapGrid/index.d.cts +12 -0
  129. package/dist/layout/Grid/GapGrid/index.d.ts +12 -0
  130. package/dist/layout/Grid/GapGrid/index.js +11 -0
  131. package/dist/layout/Grid/Item/index.cjs +71 -0
  132. package/dist/layout/Grid/Item/index.css +19 -0
  133. package/dist/layout/Grid/Item/index.d.cts +20 -0
  134. package/dist/layout/Grid/Item/index.d.ts +20 -0
  135. package/dist/layout/Grid/Item/index.js +44 -0
  136. package/dist/layout/Grid/index.cjs +95 -0
  137. package/dist/layout/Grid/index.css +65 -0
  138. package/dist/layout/Grid/index.d.cts +5 -0
  139. package/dist/layout/Grid/index.d.ts +5 -0
  140. package/dist/layout/Grid/index.js +65 -0
  141. package/dist/layout/Header/index.cjs +45 -0
  142. package/dist/layout/Header/index.css +11 -0
  143. package/dist/layout/Header/index.d.cts +10 -0
  144. package/dist/layout/Header/index.d.ts +10 -0
  145. package/dist/layout/Header/index.js +18 -0
  146. package/dist/layout/Layout/index.cjs +44 -0
  147. package/dist/layout/Layout/index.css +23 -0
  148. package/dist/layout/Layout/index.d.cts +15 -0
  149. package/dist/layout/Layout/index.d.ts +15 -0
  150. package/dist/layout/Layout/index.js +17 -0
  151. package/dist/layout/SideBar/index.cjs +101 -0
  152. package/dist/layout/SideBar/index.css +10 -0
  153. package/dist/layout/SideBar/index.d.cts +16 -0
  154. package/dist/layout/SideBar/index.d.ts +16 -0
  155. package/dist/layout/SideBar/index.js +62 -0
  156. package/dist/layout/index.cjs +188 -0
  157. package/dist/layout/index.css +112 -0
  158. package/dist/layout/index.d.cts +8 -0
  159. package/dist/layout/index.d.ts +8 -0
  160. package/dist/layout/index.js +143 -0
  161. package/dist/tokens/index.cjs +6225 -0
  162. package/dist/tokens/index.d.cts +593 -0
  163. package/dist/tokens/index.d.ts +593 -0
  164. package/dist/tokens/index.js +5900 -0
  165. package/package.json +86 -0
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/components/Video/index.ts
31
+ var Video_exports = {};
32
+ __export(Video_exports, {
33
+ Video: () => Video_default
34
+ });
35
+ module.exports = __toCommonJS(Video_exports);
36
+
37
+ // src/components/Video/Video.tsx
38
+ var import_react = __toESM(require("react"), 1);
39
+
40
+ // src/tokens/svg/media/AirplayIcon.tsx
41
+ var import_jsx_runtime = require("react/jsx-runtime");
42
+
43
+ // src/tokens/svg/media/CameraIcon.tsx
44
+ var import_jsx_runtime2 = require("react/jsx-runtime");
45
+
46
+ // src/tokens/svg/media/CameraOffIcon.tsx
47
+ var import_jsx_runtime3 = require("react/jsx-runtime");
48
+
49
+ // src/tokens/svg/media/CastIcon.tsx
50
+ var import_jsx_runtime4 = require("react/jsx-runtime");
51
+
52
+ // src/tokens/svg/media/DiscIcon.tsx
53
+ var import_jsx_runtime5 = require("react/jsx-runtime");
54
+
55
+ // src/tokens/svg/media/FastForwardIcon.tsx
56
+ var import_jsx_runtime6 = require("react/jsx-runtime");
57
+
58
+ // src/tokens/svg/media/FilmIcon.tsx
59
+ var import_jsx_runtime7 = require("react/jsx-runtime");
60
+
61
+ // src/tokens/svg/media/HeadphonesIcon.tsx
62
+ var import_jsx_runtime8 = require("react/jsx-runtime");
63
+
64
+ // src/tokens/svg/media/ImageIcon.tsx
65
+ var import_jsx_runtime9 = require("react/jsx-runtime");
66
+
67
+ // src/tokens/svg/media/MicIcon.tsx
68
+ var import_jsx_runtime10 = require("react/jsx-runtime");
69
+
70
+ // src/tokens/svg/media/MicOffIcon.tsx
71
+ var import_jsx_runtime11 = require("react/jsx-runtime");
72
+
73
+ // src/tokens/svg/media/MusicIcon.tsx
74
+ var import_jsx_runtime12 = require("react/jsx-runtime");
75
+
76
+ // src/tokens/svg/media/PauseCircleIcon.tsx
77
+ var import_jsx_runtime13 = require("react/jsx-runtime");
78
+
79
+ // src/tokens/svg/media/PauseIcon.tsx
80
+ var import_jsx_runtime14 = require("react/jsx-runtime");
81
+ var PauseIcon = () => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
82
+ "svg",
83
+ {
84
+ xmlns: "http://www.w3.org/2000/svg",
85
+ width: "1em",
86
+ height: "1em",
87
+ viewBox: "0 0 20 20",
88
+ fill: "none",
89
+ children: [
90
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M8.33301 2.58301C8.74714 2.58301 9.08288 2.91891 9.08301 3.33301V16.666C9.08301 17.0802 8.74722 17.416 8.33301 17.416H5C4.58579 17.416 4.25 17.0802 4.25 16.666V3.33301C4.25013 2.91891 4.58587 2.58301 5 2.58301H8.33301ZM5.75 15.916H7.58301V4.08301H5.75V15.916Z", fill: "currentColor" }),
91
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M15 2.58301C15.4139 2.58327 15.7499 2.91907 15.75 3.33301V16.666C15.75 17.0801 15.414 17.4158 15 17.416H11.667C11.2528 17.416 10.917 17.0802 10.917 16.666V3.33301C10.9171 2.91891 11.2529 2.58301 11.667 2.58301H15ZM12.417 15.916H14.25V4.08301H12.417V15.916Z", fill: "currentColor" })
92
+ ]
93
+ }
94
+ );
95
+ var PauseIcon_default = PauseIcon;
96
+
97
+ // src/tokens/svg/media/PlayCircleIcon.tsx
98
+ var import_jsx_runtime15 = require("react/jsx-runtime");
99
+ var PlayCircleIcon = () => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
100
+ "svg",
101
+ {
102
+ xmlns: "http://www.w3.org/2000/svg",
103
+ width: "1em",
104
+ height: "1em",
105
+ viewBox: "0 0 20 20",
106
+ fill: "none",
107
+ children: [
108
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("g", { clipPath: "url(#playcircle-clip)", children: [
109
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M7.98047 6.00586C8.22424 5.87564 8.52002 5.88965 8.75 6.04297L13.75 9.37598C13.9583 9.51505 14.0839 9.74954 14.084 10C14.0839 10.2505 13.9584 10.4849 13.75 10.624L8.75 13.958C8.52015 14.1112 8.22412 14.1251 7.98047 13.9951C7.73677 13.8647 7.58419 13.6104 7.58398 13.334V6.66699L7.59082 6.56445C7.6233 6.32874 7.7671 6.12005 7.98047 6.00586ZM9.08398 11.9316L11.9814 10L9.08398 8.06738V11.9316Z", fill: "currentColor" }),
110
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M10 0.916992C15.0163 0.917256 19.0838 4.98373 19.084 10C19.0839 15.0163 15.0163 19.0837 10 19.084C4.98364 19.0838 0.916148 15.0164 0.916016 10C0.916191 4.98367 4.98367 0.917168 10 0.916992ZM10 2.41699C5.8121 2.41717 2.41717 5.8121 2.41699 10C2.41712 14.1879 5.81207 17.5838 10 17.584C14.1879 17.5837 17.5839 14.1879 17.584 10C17.5838 5.81215 14.1878 2.41726 10 2.41699Z", fill: "currentColor" })
111
+ ] }),
112
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("clipPath", { id: "playcircle-clip", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("rect", { width: "20", height: "20", fill: "currentColor" }) }) })
113
+ ]
114
+ }
115
+ );
116
+ var PlayCircleIcon_default = PlayCircleIcon;
117
+
118
+ // src/tokens/svg/media/PlayIcon.tsx
119
+ var import_jsx_runtime16 = require("react/jsx-runtime");
120
+
121
+ // src/tokens/svg/media/RepeatIcon.tsx
122
+ var import_jsx_runtime17 = require("react/jsx-runtime");
123
+
124
+ // src/tokens/svg/media/RewindIcon.tsx
125
+ var import_jsx_runtime18 = require("react/jsx-runtime");
126
+
127
+ // src/tokens/svg/media/SkipBackIcon.tsx
128
+ var import_jsx_runtime19 = require("react/jsx-runtime");
129
+
130
+ // src/tokens/svg/media/SkipForwardIcon.tsx
131
+ var import_jsx_runtime20 = require("react/jsx-runtime");
132
+
133
+ // src/tokens/svg/media/SpeakerIcon.tsx
134
+ var import_jsx_runtime21 = require("react/jsx-runtime");
135
+
136
+ // src/tokens/svg/media/StopCircleIcon.tsx
137
+ var import_jsx_runtime22 = require("react/jsx-runtime");
138
+
139
+ // src/tokens/svg/media/VideoIcon.tsx
140
+ var import_jsx_runtime23 = require("react/jsx-runtime");
141
+
142
+ // src/tokens/svg/media/VideoOffIcon.tsx
143
+ var import_jsx_runtime24 = require("react/jsx-runtime");
144
+
145
+ // src/tokens/svg/media/Volume1Icon.tsx
146
+ var import_jsx_runtime25 = require("react/jsx-runtime");
147
+
148
+ // src/tokens/svg/media/Volume2Icon.tsx
149
+ var import_jsx_runtime26 = require("react/jsx-runtime");
150
+
151
+ // src/tokens/svg/media/VolumeIcon.tsx
152
+ var import_jsx_runtime27 = require("react/jsx-runtime");
153
+
154
+ // src/tokens/svg/media/VolumeXIcon.tsx
155
+ var import_jsx_runtime28 = require("react/jsx-runtime");
156
+
157
+ // node_modules/clsx/dist/clsx.mjs
158
+ function r(e) {
159
+ var t, f, n = "";
160
+ if ("string" == typeof e || "number" == typeof e) n += e;
161
+ else if ("object" == typeof e) if (Array.isArray(e)) {
162
+ var o = e.length;
163
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
164
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
165
+ return n;
166
+ }
167
+ function clsx() {
168
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
169
+ return n;
170
+ }
171
+ var clsx_default = clsx;
172
+
173
+ // src/components/Video/Video.tsx
174
+ var import_jsx_runtime29 = require("react/jsx-runtime");
175
+ var Video = import_react.default.forwardRef((props, ref) => {
176
+ const {
177
+ src,
178
+ poster,
179
+ controls = true,
180
+ autoPlay,
181
+ muted,
182
+ loop,
183
+ playsInline,
184
+ className,
185
+ onPlay,
186
+ onPause,
187
+ ...rest
188
+ } = props;
189
+ const videoRef = import_react.default.useRef(null);
190
+ const [isPlaying, setIsPlaying] = import_react.default.useState(Boolean(autoPlay));
191
+ const [isLoaded, setIsLoaded] = import_react.default.useState(false);
192
+ const setRefs = import_react.default.useCallback(
193
+ (el) => {
194
+ videoRef.current = el;
195
+ if (typeof ref === "function") ref(el);
196
+ else if (ref) ref.current = el;
197
+ },
198
+ [ref]
199
+ );
200
+ const handlePlay = (e) => {
201
+ setIsPlaying(true);
202
+ onPlay?.(e);
203
+ };
204
+ const handlePause = (e) => {
205
+ setIsPlaying(false);
206
+ onPause?.(e);
207
+ };
208
+ const handleLoadedData = () => {
209
+ setIsLoaded(true);
210
+ };
211
+ const togglePlay = () => {
212
+ if (!videoRef.current) return;
213
+ if (isPlaying) {
214
+ videoRef.current.pause();
215
+ } else {
216
+ videoRef.current.play();
217
+ }
218
+ };
219
+ const showCustomOverlay = !controls;
220
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
221
+ "div",
222
+ {
223
+ className: clsx_default(
224
+ "lib-xplat-video",
225
+ showCustomOverlay && "custom-overlay",
226
+ className
227
+ ),
228
+ children: [
229
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
230
+ "video",
231
+ {
232
+ ref: setRefs,
233
+ src,
234
+ poster,
235
+ controls,
236
+ autoPlay,
237
+ muted,
238
+ loop,
239
+ playsInline: playsInline ?? true,
240
+ onPlay: handlePlay,
241
+ onPause: handlePause,
242
+ onLoadedData: handleLoadedData,
243
+ ...rest
244
+ }
245
+ ),
246
+ showCustomOverlay && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
247
+ "button",
248
+ {
249
+ type: "button",
250
+ className: clsx_default(
251
+ "play-overlay",
252
+ isPlaying && "is-playing",
253
+ !isLoaded && "is-loading"
254
+ ),
255
+ onClick: togglePlay,
256
+ "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
257
+ children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(PlayCircleIcon_default, {}) })
258
+ }
259
+ )
260
+ ]
261
+ }
262
+ );
263
+ });
264
+ Video.displayName = "Video";
265
+ var Video_default = Video;
266
+ // Annotate the CommonJS export names for ESM import in node:
267
+ 0 && (module.exports = {
268
+ Video
269
+ });
@@ -0,0 +1,71 @@
1
+ /* src/components/Video/video.scss */
2
+ .lib-xplat-video {
3
+ position: relative;
4
+ width: 100%;
5
+ border-radius: 0.25rem;
6
+ overflow: hidden;
7
+ background-color: #171717;
8
+ }
9
+ .lib-xplat-video > video {
10
+ display: block;
11
+ width: 100%;
12
+ height: 100%;
13
+ max-height: 100%;
14
+ object-fit: contain;
15
+ vertical-align: middle;
16
+ }
17
+ .lib-xplat-video.custom-overlay > video {
18
+ cursor: pointer;
19
+ }
20
+ .lib-xplat-video.custom-overlay > .play-overlay {
21
+ position: absolute;
22
+ top: 0;
23
+ left: 0;
24
+ right: 0;
25
+ bottom: 0;
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ border: none;
30
+ background: transparent;
31
+ cursor: pointer;
32
+ padding: 0;
33
+ color: #FFFFFF;
34
+ transition: opacity 0.2s ease, background-color 0.2s ease;
35
+ }
36
+ .lib-xplat-video.custom-overlay > .play-overlay::before {
37
+ content: "";
38
+ position: absolute;
39
+ inset: 0;
40
+ background-color: rgba(0, 0, 0, 0.2);
41
+ opacity: 0;
42
+ transition: opacity 0.2s ease;
43
+ }
44
+ .lib-xplat-video.custom-overlay > .play-overlay:hover::before,
45
+ .lib-xplat-video.custom-overlay > .play-overlay:focus-visible::before {
46
+ opacity: 1;
47
+ }
48
+ .lib-xplat-video.custom-overlay > .play-overlay:focus-visible {
49
+ outline: 2px solid #4D6DE3;
50
+ outline-offset: 2px;
51
+ }
52
+ .lib-xplat-video.custom-overlay > .play-overlay > .play-icon {
53
+ position: relative;
54
+ z-index: 1;
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ font-size: 4rem;
59
+ filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.4));
60
+ }
61
+ .lib-xplat-video.custom-overlay > .play-overlay.is-playing {
62
+ opacity: 0;
63
+ pointer-events: none;
64
+ }
65
+ .lib-xplat-video.custom-overlay > .play-overlay.is-playing:hover {
66
+ opacity: 1;
67
+ pointer-events: auto;
68
+ }
69
+ .lib-xplat-video.custom-overlay > .play-overlay.is-loading .play-icon {
70
+ opacity: 0.6;
71
+ }
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+
3
+ interface VideoProps extends Omit<React.VideoHTMLAttributes<HTMLVideoElement>, "children" | "className"> {
4
+ /** 비디오 소스 URL */
5
+ src: string;
6
+ /** 재생 전 썸네일 이미지 URL */
7
+ poster?: string;
8
+ /** 네이티브 컨트롤 표시 여부. false면 커스텀 재생/일시정지 오버레이만 표시 */
9
+ controls?: boolean;
10
+ /** 추가 스타일링용 클래스 */
11
+ className?: string;
12
+ }
13
+ declare const Video: React.ForwardRefExoticComponent<VideoProps & React.RefAttributes<HTMLVideoElement>>;
14
+
15
+ export { Video, type VideoProps };
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+
3
+ interface VideoProps extends Omit<React.VideoHTMLAttributes<HTMLVideoElement>, "children" | "className"> {
4
+ /** 비디오 소스 URL */
5
+ src: string;
6
+ /** 재생 전 썸네일 이미지 URL */
7
+ poster?: string;
8
+ /** 네이티브 컨트롤 표시 여부. false면 커스텀 재생/일시정지 오버레이만 표시 */
9
+ controls?: boolean;
10
+ /** 추가 스타일링용 클래스 */
11
+ className?: string;
12
+ }
13
+ declare const Video: React.ForwardRefExoticComponent<VideoProps & React.RefAttributes<HTMLVideoElement>>;
14
+
15
+ export { Video, type VideoProps };
@@ -0,0 +1,232 @@
1
+ // src/components/Video/Video.tsx
2
+ import React from "react";
3
+
4
+ // src/tokens/svg/media/AirplayIcon.tsx
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+
7
+ // src/tokens/svg/media/CameraIcon.tsx
8
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
9
+
10
+ // src/tokens/svg/media/CameraOffIcon.tsx
11
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
12
+
13
+ // src/tokens/svg/media/CastIcon.tsx
14
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
15
+
16
+ // src/tokens/svg/media/DiscIcon.tsx
17
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
18
+
19
+ // src/tokens/svg/media/FastForwardIcon.tsx
20
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
21
+
22
+ // src/tokens/svg/media/FilmIcon.tsx
23
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
24
+
25
+ // src/tokens/svg/media/HeadphonesIcon.tsx
26
+ import { jsx as jsx8 } from "react/jsx-runtime";
27
+
28
+ // src/tokens/svg/media/ImageIcon.tsx
29
+ import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
30
+
31
+ // src/tokens/svg/media/MicIcon.tsx
32
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
33
+
34
+ // src/tokens/svg/media/MicOffIcon.tsx
35
+ import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
36
+
37
+ // src/tokens/svg/media/MusicIcon.tsx
38
+ import { jsx as jsx12 } from "react/jsx-runtime";
39
+
40
+ // src/tokens/svg/media/PauseCircleIcon.tsx
41
+ import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
42
+
43
+ // src/tokens/svg/media/PauseIcon.tsx
44
+ import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
45
+ var PauseIcon = () => /* @__PURE__ */ jsxs12(
46
+ "svg",
47
+ {
48
+ xmlns: "http://www.w3.org/2000/svg",
49
+ width: "1em",
50
+ height: "1em",
51
+ viewBox: "0 0 20 20",
52
+ fill: "none",
53
+ children: [
54
+ /* @__PURE__ */ jsx14("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M8.33301 2.58301C8.74714 2.58301 9.08288 2.91891 9.08301 3.33301V16.666C9.08301 17.0802 8.74722 17.416 8.33301 17.416H5C4.58579 17.416 4.25 17.0802 4.25 16.666V3.33301C4.25013 2.91891 4.58587 2.58301 5 2.58301H8.33301ZM5.75 15.916H7.58301V4.08301H5.75V15.916Z", fill: "currentColor" }),
55
+ /* @__PURE__ */ jsx14("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M15 2.58301C15.4139 2.58327 15.7499 2.91907 15.75 3.33301V16.666C15.75 17.0801 15.414 17.4158 15 17.416H11.667C11.2528 17.416 10.917 17.0802 10.917 16.666V3.33301C10.9171 2.91891 11.2529 2.58301 11.667 2.58301H15ZM12.417 15.916H14.25V4.08301H12.417V15.916Z", fill: "currentColor" })
56
+ ]
57
+ }
58
+ );
59
+ var PauseIcon_default = PauseIcon;
60
+
61
+ // src/tokens/svg/media/PlayCircleIcon.tsx
62
+ import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
63
+ var PlayCircleIcon = () => /* @__PURE__ */ jsxs13(
64
+ "svg",
65
+ {
66
+ xmlns: "http://www.w3.org/2000/svg",
67
+ width: "1em",
68
+ height: "1em",
69
+ viewBox: "0 0 20 20",
70
+ fill: "none",
71
+ children: [
72
+ /* @__PURE__ */ jsxs13("g", { clipPath: "url(#playcircle-clip)", children: [
73
+ /* @__PURE__ */ jsx15("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M7.98047 6.00586C8.22424 5.87564 8.52002 5.88965 8.75 6.04297L13.75 9.37598C13.9583 9.51505 14.0839 9.74954 14.084 10C14.0839 10.2505 13.9584 10.4849 13.75 10.624L8.75 13.958C8.52015 14.1112 8.22412 14.1251 7.98047 13.9951C7.73677 13.8647 7.58419 13.6104 7.58398 13.334V6.66699L7.59082 6.56445C7.6233 6.32874 7.7671 6.12005 7.98047 6.00586ZM9.08398 11.9316L11.9814 10L9.08398 8.06738V11.9316Z", fill: "currentColor" }),
74
+ /* @__PURE__ */ jsx15("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M10 0.916992C15.0163 0.917256 19.0838 4.98373 19.084 10C19.0839 15.0163 15.0163 19.0837 10 19.084C4.98364 19.0838 0.916148 15.0164 0.916016 10C0.916191 4.98367 4.98367 0.917168 10 0.916992ZM10 2.41699C5.8121 2.41717 2.41717 5.8121 2.41699 10C2.41712 14.1879 5.81207 17.5838 10 17.584C14.1879 17.5837 17.5839 14.1879 17.584 10C17.5838 5.81215 14.1878 2.41726 10 2.41699Z", fill: "currentColor" })
75
+ ] }),
76
+ /* @__PURE__ */ jsx15("defs", { children: /* @__PURE__ */ jsx15("clipPath", { id: "playcircle-clip", children: /* @__PURE__ */ jsx15("rect", { width: "20", height: "20", fill: "currentColor" }) }) })
77
+ ]
78
+ }
79
+ );
80
+ var PlayCircleIcon_default = PlayCircleIcon;
81
+
82
+ // src/tokens/svg/media/PlayIcon.tsx
83
+ import { jsx as jsx16 } from "react/jsx-runtime";
84
+
85
+ // src/tokens/svg/media/RepeatIcon.tsx
86
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
87
+
88
+ // src/tokens/svg/media/RewindIcon.tsx
89
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
90
+
91
+ // src/tokens/svg/media/SkipBackIcon.tsx
92
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
93
+
94
+ // src/tokens/svg/media/SkipForwardIcon.tsx
95
+ import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
96
+
97
+ // src/tokens/svg/media/SpeakerIcon.tsx
98
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
99
+
100
+ // src/tokens/svg/media/StopCircleIcon.tsx
101
+ import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
102
+
103
+ // src/tokens/svg/media/VideoIcon.tsx
104
+ import { jsx as jsx23 } from "react/jsx-runtime";
105
+
106
+ // src/tokens/svg/media/VideoOffIcon.tsx
107
+ import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
108
+
109
+ // src/tokens/svg/media/Volume1Icon.tsx
110
+ import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
111
+
112
+ // src/tokens/svg/media/Volume2Icon.tsx
113
+ import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
114
+
115
+ // src/tokens/svg/media/VolumeIcon.tsx
116
+ import { jsx as jsx27 } from "react/jsx-runtime";
117
+
118
+ // src/tokens/svg/media/VolumeXIcon.tsx
119
+ import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
120
+
121
+ // node_modules/clsx/dist/clsx.mjs
122
+ function r(e) {
123
+ var t, f, n = "";
124
+ if ("string" == typeof e || "number" == typeof e) n += e;
125
+ else if ("object" == typeof e) if (Array.isArray(e)) {
126
+ var o = e.length;
127
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
128
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
129
+ return n;
130
+ }
131
+ function clsx() {
132
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
133
+ return n;
134
+ }
135
+ var clsx_default = clsx;
136
+
137
+ // src/components/Video/Video.tsx
138
+ import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
139
+ var Video = React.forwardRef((props, ref) => {
140
+ const {
141
+ src,
142
+ poster,
143
+ controls = true,
144
+ autoPlay,
145
+ muted,
146
+ loop,
147
+ playsInline,
148
+ className,
149
+ onPlay,
150
+ onPause,
151
+ ...rest
152
+ } = props;
153
+ const videoRef = React.useRef(null);
154
+ const [isPlaying, setIsPlaying] = React.useState(Boolean(autoPlay));
155
+ const [isLoaded, setIsLoaded] = React.useState(false);
156
+ const setRefs = React.useCallback(
157
+ (el) => {
158
+ videoRef.current = el;
159
+ if (typeof ref === "function") ref(el);
160
+ else if (ref) ref.current = el;
161
+ },
162
+ [ref]
163
+ );
164
+ const handlePlay = (e) => {
165
+ setIsPlaying(true);
166
+ onPlay?.(e);
167
+ };
168
+ const handlePause = (e) => {
169
+ setIsPlaying(false);
170
+ onPause?.(e);
171
+ };
172
+ const handleLoadedData = () => {
173
+ setIsLoaded(true);
174
+ };
175
+ const togglePlay = () => {
176
+ if (!videoRef.current) return;
177
+ if (isPlaying) {
178
+ videoRef.current.pause();
179
+ } else {
180
+ videoRef.current.play();
181
+ }
182
+ };
183
+ const showCustomOverlay = !controls;
184
+ return /* @__PURE__ */ jsxs24(
185
+ "div",
186
+ {
187
+ className: clsx_default(
188
+ "lib-xplat-video",
189
+ showCustomOverlay && "custom-overlay",
190
+ className
191
+ ),
192
+ children: [
193
+ /* @__PURE__ */ jsx29(
194
+ "video",
195
+ {
196
+ ref: setRefs,
197
+ src,
198
+ poster,
199
+ controls,
200
+ autoPlay,
201
+ muted,
202
+ loop,
203
+ playsInline: playsInline ?? true,
204
+ onPlay: handlePlay,
205
+ onPause: handlePause,
206
+ onLoadedData: handleLoadedData,
207
+ ...rest
208
+ }
209
+ ),
210
+ showCustomOverlay && /* @__PURE__ */ jsx29(
211
+ "button",
212
+ {
213
+ type: "button",
214
+ className: clsx_default(
215
+ "play-overlay",
216
+ isPlaying && "is-playing",
217
+ !isLoaded && "is-loading"
218
+ ),
219
+ onClick: togglePlay,
220
+ "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
221
+ children: isPlaying ? /* @__PURE__ */ jsx29(PauseIcon_default, {}) : /* @__PURE__ */ jsx29("span", { className: "play-icon", children: /* @__PURE__ */ jsx29(PlayCircleIcon_default, {}) })
222
+ }
223
+ )
224
+ ]
225
+ }
226
+ );
227
+ });
228
+ Video.displayName = "Video";
229
+ var Video_default = Video;
230
+ export {
231
+ Video_default as Video
232
+ };