@hivcd-printshop/design-system 1.1.1 → 1.2.0
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/index.d.mts +227 -11
- package/dist/index.d.ts +227 -11
- package/dist/index.js +887 -110
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +846 -97
- package/dist/index.mjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -54,6 +54,20 @@ var IconChevronDownXS = ({
|
|
|
54
54
|
}
|
|
55
55
|
);
|
|
56
56
|
};
|
|
57
|
+
var IconCheck = ({ className, stroke }) => {
|
|
58
|
+
return /* @__PURE__ */ jsx(
|
|
59
|
+
"svg",
|
|
60
|
+
{
|
|
61
|
+
className,
|
|
62
|
+
width: "13",
|
|
63
|
+
height: "13",
|
|
64
|
+
viewBox: "0 0 13 13",
|
|
65
|
+
fill: "none",
|
|
66
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
67
|
+
children: /* @__PURE__ */ jsx("path", { d: "M2.05566 7.0555L4.83344 9.8333L10.9446 3.72217", stroke: stroke || "#121212" })
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
};
|
|
57
71
|
var IconSearch = ({ className, stroke }) => {
|
|
58
72
|
return /* @__PURE__ */ jsxs(
|
|
59
73
|
"svg",
|
|
@@ -88,6 +102,32 @@ var IconSearch = ({ className, stroke }) => {
|
|
|
88
102
|
}
|
|
89
103
|
);
|
|
90
104
|
};
|
|
105
|
+
var IconInfo = ({ className, stroke }) => {
|
|
106
|
+
return /* @__PURE__ */ jsxs(
|
|
107
|
+
"svg",
|
|
108
|
+
{
|
|
109
|
+
className,
|
|
110
|
+
width: "16",
|
|
111
|
+
height: "16",
|
|
112
|
+
viewBox: "0 0 16 16",
|
|
113
|
+
fill: "none",
|
|
114
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ jsx("circle", { cx: "8", cy: "8", r: "6.25", stroke: stroke || "#8b94a1", strokeWidth: "1.5" }),
|
|
117
|
+
/* @__PURE__ */ jsx(
|
|
118
|
+
"path",
|
|
119
|
+
{
|
|
120
|
+
d: "M8 7.25V11.25",
|
|
121
|
+
stroke: stroke || "#8b94a1",
|
|
122
|
+
strokeWidth: "1.5",
|
|
123
|
+
strokeLinecap: "round"
|
|
124
|
+
}
|
|
125
|
+
),
|
|
126
|
+
/* @__PURE__ */ jsx("circle", { cx: "8", cy: "5", r: "0.9", fill: stroke || "#8b94a1" })
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
};
|
|
91
131
|
var IconGoBack = ({ className, stroke }) => {
|
|
92
132
|
return /* @__PURE__ */ jsxs(
|
|
93
133
|
"svg",
|
|
@@ -174,15 +214,696 @@ var CTA = ({
|
|
|
174
214
|
);
|
|
175
215
|
};
|
|
176
216
|
|
|
177
|
-
// src/components/
|
|
217
|
+
// src/components/Column/MultiColumn.tsx
|
|
178
218
|
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
219
|
+
var MultiColumnMain = ({ children, className }) => {
|
|
220
|
+
return /* @__PURE__ */ jsx4("div", { className: cn("flex flex-col w-full h-full", className), children });
|
|
221
|
+
};
|
|
222
|
+
var Columns = ({ children, className }) => {
|
|
223
|
+
return (
|
|
224
|
+
// flex 래퍼를 사용하고 하위 Column들이 flex-1을 가지게 하거나,
|
|
225
|
+
// grid를 사용하여 열을 나눌 수 있어. 여기서는 flex를 활용한 균등 분할 예시야.
|
|
226
|
+
/* @__PURE__ */ jsx4("div", { className: cn("flex w-full h-full divide-x divide-gray02", className), children })
|
|
227
|
+
);
|
|
228
|
+
};
|
|
229
|
+
var CTAs = ({ children, className }) => {
|
|
230
|
+
if (!children) return null;
|
|
231
|
+
return (
|
|
232
|
+
// CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
|
|
233
|
+
/* @__PURE__ */ jsx4("div", { className: cn("flex flex-col w-full h-fit", className), children })
|
|
234
|
+
);
|
|
235
|
+
};
|
|
236
|
+
var MultiColumn = Object.assign(MultiColumnMain, {
|
|
237
|
+
Columns,
|
|
238
|
+
CTAs
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
// src/components/Column/Column.tsx
|
|
242
|
+
import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
243
|
+
var Column = ({ className, children, header }) => {
|
|
244
|
+
return /* @__PURE__ */ jsxs2("div", { className: cn("flex flex-col gap-5", "h-full w-full px-5 pt-3 pb-8", className), children: [
|
|
245
|
+
header && /* @__PURE__ */ jsx5("h1", { className: cn("text-head3-medium text-primary font-bold"), children: header }),
|
|
246
|
+
children
|
|
247
|
+
] });
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
// src/components/Column/ColumnContentContainer.tsx
|
|
251
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
252
|
+
var ColumnContentContainer = ({ className, children }) => {
|
|
253
|
+
return /* @__PURE__ */ jsx6("div", { className: cn("flex flex-col gap-1.5 w-full h-fit", className), children });
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
// src/components/Column/ColumnLabel.tsx
|
|
257
|
+
import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
258
|
+
var ColumnLabel = ({ className, children, subLabel, htmlFor }) => {
|
|
259
|
+
return /* @__PURE__ */ jsxs3("label", { htmlFor, className: cn("flex gap-1.5 items-end", className), children: [
|
|
260
|
+
/* @__PURE__ */ jsx7("span", { className: cn("text-body2-regular text-tertiary"), children }),
|
|
261
|
+
subLabel && /* @__PURE__ */ jsx7("span", { className: cn("text-caption-book text-quaternary"), children: subLabel })
|
|
262
|
+
] });
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
// src/components/Column/ColumnText.tsx
|
|
266
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
267
|
+
var ColumnTextStyle = "text-body3-book text-strong";
|
|
268
|
+
var ModalTextStyle = "text-body1-regular text-primary";
|
|
269
|
+
var ColumnText = ({ className, alert = false, children, onClick }) => {
|
|
270
|
+
return /* @__PURE__ */ jsx8("div", { className: cn(ColumnTextStyle, alert && "text-danger", className), onClick, children: children ? children : "-" });
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
// src/components/Column/ColumnSubTitle.tsx
|
|
274
|
+
import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
275
|
+
var ColumnSubTitle = ({
|
|
276
|
+
className,
|
|
277
|
+
children,
|
|
278
|
+
action,
|
|
279
|
+
as: Tag2 = "h2"
|
|
280
|
+
}) => {
|
|
281
|
+
return /* @__PURE__ */ jsxs4(Tag2, { className: cn("flex items-center justify-between gap-1.5", "w-full", className), children: [
|
|
282
|
+
/* @__PURE__ */ jsx9("span", { className: cn("text-head3-medium text-strong"), children }),
|
|
283
|
+
action && /* @__PURE__ */ jsx9("span", { className: "flex shrink-0 items-center", children: action })
|
|
284
|
+
] });
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
// src/components/Form/BasicFormField.tsx
|
|
288
|
+
import { jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
289
|
+
var BasicFormField = ({
|
|
290
|
+
children,
|
|
291
|
+
isDanger,
|
|
292
|
+
dangerText,
|
|
293
|
+
className
|
|
294
|
+
}) => {
|
|
295
|
+
return /* @__PURE__ */ jsxs5("div", { className: cn("flex flex-col gap-1.5", className), children: [
|
|
296
|
+
children,
|
|
297
|
+
isDanger && dangerText && /* @__PURE__ */ jsx10("span", { className: "text-caption-book text-danger", children: dangerText })
|
|
298
|
+
] });
|
|
299
|
+
};
|
|
300
|
+
var getInputStyles = (isDanger, additionalClass) => {
|
|
301
|
+
return cn(
|
|
302
|
+
"w-full h-10 px-3",
|
|
303
|
+
"box-border border border-gray02 focus:outline-none focus:border-black",
|
|
304
|
+
"bg-white hover:bg-gray00 transition-colors focus:hover:bg-white",
|
|
305
|
+
ColumnTextStyle,
|
|
306
|
+
"text-primary placeholder:text-quaternary",
|
|
307
|
+
isDanger && "border-danger",
|
|
308
|
+
// 에러 시 빨간 테두리
|
|
309
|
+
additionalClass
|
|
310
|
+
// 각 인풋별 추가 스타일 (예: textarea의 h-30)
|
|
311
|
+
);
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
// src/components/Form/FormText.tsx
|
|
315
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
316
|
+
var FormText = ({ className, isDanger, dangerText, ...props }) => {
|
|
317
|
+
return /* @__PURE__ */ jsx11(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx11("input", { type: "text", className: getInputStyles(isDanger, className), ...props }) });
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
// src/components/Form/FormTextArea.tsx
|
|
321
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
322
|
+
var FormTextArea = ({ className, isDanger, dangerText, ...props }) => {
|
|
323
|
+
return /* @__PURE__ */ jsx12(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx12(
|
|
324
|
+
"textarea",
|
|
325
|
+
{
|
|
326
|
+
className: getInputStyles(isDanger, "resize-none h-30 py-2.5 " + (className || "")),
|
|
327
|
+
...props
|
|
328
|
+
}
|
|
329
|
+
) });
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
// src/components/Form/FormNumber.tsx
|
|
333
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
334
|
+
var FormNumber = ({ className, isDanger, dangerText, ...props }) => {
|
|
335
|
+
return /* @__PURE__ */ jsx13(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx13("input", { type: "number", className: getInputStyles(isDanger, className), ...props }) });
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
// src/components/Form/FormPassword.tsx
|
|
339
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
340
|
+
var FormPassword = ({ className, isDanger, dangerText, ...props }) => {
|
|
341
|
+
return /* @__PURE__ */ jsx14(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx14("input", { type: "password", className: getInputStyles(isDanger, className), ...props }) });
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
// src/components/Form/FormTel.tsx
|
|
345
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
346
|
+
var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
|
|
347
|
+
const handlePhoneChange = (e) => {
|
|
348
|
+
const rawValue = e.target.value.replace(/[^0-9]/g, "");
|
|
349
|
+
let formattedValue = "";
|
|
350
|
+
if (rawValue.length < 4) formattedValue = rawValue;
|
|
351
|
+
else if (rawValue.length < 8) formattedValue = `${rawValue.slice(0, 3)}-${rawValue.slice(3)}`;
|
|
352
|
+
else
|
|
353
|
+
formattedValue = `${rawValue.slice(0, 3)}-${rawValue.slice(3, 7)}-${rawValue.slice(7, 11)}`;
|
|
354
|
+
e.target.value = formattedValue;
|
|
355
|
+
if (onChange) onChange(e);
|
|
356
|
+
};
|
|
357
|
+
return /* @__PURE__ */ jsx15(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx15(
|
|
358
|
+
"input",
|
|
359
|
+
{
|
|
360
|
+
type: "tel",
|
|
361
|
+
className: getInputStyles(isDanger, className),
|
|
362
|
+
onChange: handlePhoneChange,
|
|
363
|
+
maxLength: 13,
|
|
364
|
+
...props
|
|
365
|
+
}
|
|
366
|
+
) });
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
// src/components/Form/FormColor.tsx
|
|
370
|
+
import { useState } from "react";
|
|
371
|
+
import { jsx as jsx16, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
372
|
+
var FormColor = ({
|
|
373
|
+
className,
|
|
374
|
+
isDanger,
|
|
375
|
+
dangerText,
|
|
376
|
+
value,
|
|
377
|
+
defaultValue = "#000000",
|
|
378
|
+
onChange,
|
|
379
|
+
...props
|
|
380
|
+
}) => {
|
|
381
|
+
const [internalColor, setInternalColor] = useState(
|
|
382
|
+
value || defaultValue || "#000000"
|
|
383
|
+
);
|
|
384
|
+
const color = value !== void 0 ? value : internalColor;
|
|
385
|
+
const handleColorChange = (e) => {
|
|
386
|
+
setInternalColor(e.target.value);
|
|
387
|
+
onChange?.(e);
|
|
388
|
+
};
|
|
389
|
+
return /* @__PURE__ */ jsx16(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsxs6(
|
|
390
|
+
"label",
|
|
391
|
+
{
|
|
392
|
+
className: getInputStyles(
|
|
393
|
+
isDanger,
|
|
394
|
+
// 💡 focus-within을 통해 내부 <input>이 포커스될 때 부모(label)의 테두리와 배경 변경!
|
|
395
|
+
"flex items-center gap-2 relative focus-within:border-black focus-within:hover:bg-white" + (className || "")
|
|
396
|
+
),
|
|
397
|
+
children: [
|
|
398
|
+
/* @__PURE__ */ jsx16("div", { className: "w-6 h-6 shrink-0 overflow-hidden", style: { backgroundColor: color }, children: /* @__PURE__ */ jsx16(
|
|
399
|
+
"input",
|
|
400
|
+
{
|
|
401
|
+
type: "color",
|
|
402
|
+
value: color,
|
|
403
|
+
onChange: handleColorChange,
|
|
404
|
+
className: "absolute inset-0 w-full h-full opacity-0",
|
|
405
|
+
...props
|
|
406
|
+
}
|
|
407
|
+
) }),
|
|
408
|
+
/* @__PURE__ */ jsx16("span", { className: "text-primary text-body3-regular uppercase flex-1 select-none", children: color })
|
|
409
|
+
]
|
|
410
|
+
}
|
|
411
|
+
) });
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
// src/components/Form/FormFile.tsx
|
|
415
|
+
import { useState as useState2 } from "react";
|
|
416
|
+
import { jsx as jsx17, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
417
|
+
var FormFile = ({
|
|
418
|
+
className,
|
|
419
|
+
isDanger,
|
|
420
|
+
dangerText,
|
|
421
|
+
placeholder = "\uD30C\uC77C\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",
|
|
422
|
+
fileUrl,
|
|
423
|
+
filename,
|
|
424
|
+
onChange,
|
|
425
|
+
...props
|
|
426
|
+
}) => {
|
|
427
|
+
const [selectedFile, setSelectedFile] = useState2(null);
|
|
428
|
+
const handleFileChange = (e) => {
|
|
429
|
+
const originalFile = e.target.files?.[0];
|
|
430
|
+
if (!originalFile) {
|
|
431
|
+
setSelectedFile(null);
|
|
432
|
+
onChange?.(e);
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
let finalFile = originalFile;
|
|
436
|
+
if (filename) {
|
|
437
|
+
const lastDotIndex = originalFile.name.lastIndexOf(".");
|
|
438
|
+
const extension = lastDotIndex !== -1 ? originalFile.name.slice(lastDotIndex) : "";
|
|
439
|
+
const newFileName = filename.endsWith(extension) ? filename : `${filename}${extension}`;
|
|
440
|
+
finalFile = new File([originalFile], newFileName, {
|
|
441
|
+
type: originalFile.type,
|
|
442
|
+
lastModified: originalFile.lastModified
|
|
443
|
+
});
|
|
444
|
+
try {
|
|
445
|
+
const dataTransfer = new DataTransfer();
|
|
446
|
+
dataTransfer.items.add(finalFile);
|
|
447
|
+
e.target.files = dataTransfer.files;
|
|
448
|
+
} catch (err) {
|
|
449
|
+
console.warn("DataTransfer\uB97C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uBE0C\uB77C\uC6B0\uC800\uC785\uB2C8\uB2E4.", err);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
setSelectedFile(finalFile);
|
|
453
|
+
onChange?.(e);
|
|
454
|
+
};
|
|
455
|
+
const handleDownload = (e) => {
|
|
456
|
+
e.preventDefault();
|
|
457
|
+
e.stopPropagation();
|
|
458
|
+
if (selectedFile) {
|
|
459
|
+
const url = URL.createObjectURL(selectedFile);
|
|
460
|
+
const a = document.createElement("a");
|
|
461
|
+
a.href = url;
|
|
462
|
+
a.download = selectedFile.name;
|
|
463
|
+
document.body.appendChild(a);
|
|
464
|
+
a.click();
|
|
465
|
+
document.body.removeChild(a);
|
|
466
|
+
URL.revokeObjectURL(url);
|
|
467
|
+
} else if (fileUrl) {
|
|
468
|
+
const a = document.createElement("a");
|
|
469
|
+
a.href = fileUrl;
|
|
470
|
+
a.download = fileUrl.split("/").pop() || "download";
|
|
471
|
+
a.target = "_blank";
|
|
472
|
+
document.body.appendChild(a);
|
|
473
|
+
a.click();
|
|
474
|
+
document.body.removeChild(a);
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
const displayFileName = selectedFile?.name || (fileUrl ? fileUrl.split("/").pop() : null);
|
|
478
|
+
return /* @__PURE__ */ jsx17(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsxs7(
|
|
479
|
+
"div",
|
|
480
|
+
{
|
|
481
|
+
className: getInputStyles(
|
|
482
|
+
isDanger,
|
|
483
|
+
"active:bg-gray00 flex items-center gap-2 justify-between " + (className || "")
|
|
484
|
+
),
|
|
485
|
+
children: [
|
|
486
|
+
/* @__PURE__ */ jsx17(
|
|
487
|
+
"div",
|
|
488
|
+
{
|
|
489
|
+
className: `truncate flex-1 max-w-50 w-full ${displayFileName ? "text-primary" : "text-quaternary"}`,
|
|
490
|
+
children: displayFileName ? /* @__PURE__ */ jsx17(
|
|
491
|
+
"span",
|
|
492
|
+
{
|
|
493
|
+
onClick: handleDownload,
|
|
494
|
+
className: "w-full underline text-primary cursor-pointer hover:text-black transition-colors",
|
|
495
|
+
title: `${displayFileName} \uB2E4\uC6B4\uB85C\uB4DC`,
|
|
496
|
+
children: displayFileName
|
|
497
|
+
}
|
|
498
|
+
) : /* @__PURE__ */ jsx17("span", { className: "w-full", children: placeholder })
|
|
499
|
+
}
|
|
500
|
+
),
|
|
501
|
+
/* @__PURE__ */ jsxs7("label", { className: "px-1 -mx-1 cursor-pointer", children: [
|
|
502
|
+
/* @__PURE__ */ jsx17("div", { className: "text-primary text-caption-regular underline", children: "\uD30C\uC77C \uCCA8\uBD80" }),
|
|
503
|
+
/* @__PURE__ */ jsx17("input", { type: "file", className: "hidden", onChange: handleFileChange, ...props })
|
|
504
|
+
] })
|
|
505
|
+
]
|
|
506
|
+
}
|
|
507
|
+
) });
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
// src/components/Form/FormCheckBox.tsx
|
|
511
|
+
import { jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
512
|
+
var FormCheckBox = ({
|
|
513
|
+
isChecked,
|
|
514
|
+
setIsChecked,
|
|
515
|
+
children,
|
|
516
|
+
className,
|
|
517
|
+
textStyle,
|
|
518
|
+
...props
|
|
519
|
+
}) => {
|
|
520
|
+
return /* @__PURE__ */ jsxs8(
|
|
521
|
+
"label",
|
|
522
|
+
{
|
|
523
|
+
className: cn(
|
|
524
|
+
"w-fit h-fit pr-1",
|
|
525
|
+
"flex items-center gap-1",
|
|
526
|
+
"hover:bg-gray00 active:bg-gray01 transition-colors",
|
|
527
|
+
"cursor-pointer select-none",
|
|
528
|
+
// 💡 1. 텍스트 드래그 방지 추가
|
|
529
|
+
className
|
|
530
|
+
),
|
|
531
|
+
children: [
|
|
532
|
+
/* @__PURE__ */ jsx18(
|
|
533
|
+
"input",
|
|
534
|
+
{
|
|
535
|
+
type: "checkbox",
|
|
536
|
+
checked: isChecked,
|
|
537
|
+
onChange: (e) => setIsChecked(e.target.checked),
|
|
538
|
+
className: "sr-only peer",
|
|
539
|
+
...props
|
|
540
|
+
}
|
|
541
|
+
),
|
|
542
|
+
/* @__PURE__ */ jsx18("div", { className: "flex items-center justify-center w-5 h-5 shrink-0", children: /* @__PURE__ */ jsx18(
|
|
543
|
+
"div",
|
|
544
|
+
{
|
|
545
|
+
className: cn(
|
|
546
|
+
"w-[15px] h-[15px]",
|
|
547
|
+
"box-border border",
|
|
548
|
+
"flex items-center justify-center transition-colors duration-200",
|
|
549
|
+
// 💡 3. 키보드 Tab 이동 시 접근성 향상 (포커스 링 표시)
|
|
550
|
+
"peer-focus-visible:ring-2 peer-focus-visible:ring-black peer-focus-visible:ring-offset-1"
|
|
551
|
+
),
|
|
552
|
+
children: isChecked && /* @__PURE__ */ jsx18(IconCheck, {})
|
|
553
|
+
}
|
|
554
|
+
) }),
|
|
555
|
+
children && /* @__PURE__ */ jsx18("span", { className: cn(ColumnTextStyle, textStyle), children })
|
|
556
|
+
]
|
|
557
|
+
}
|
|
558
|
+
);
|
|
559
|
+
};
|
|
560
|
+
|
|
561
|
+
// src/components/Form/FormSelectBox.tsx
|
|
562
|
+
import { useEffect, useRef, useState as useState3 } from "react";
|
|
563
|
+
|
|
564
|
+
// src/components/Form/SelectBoxOption.tsx
|
|
565
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
566
|
+
var SelectBoxOption = ({
|
|
567
|
+
label,
|
|
568
|
+
onClick,
|
|
569
|
+
// selectedLabel,
|
|
570
|
+
className
|
|
571
|
+
}) => {
|
|
572
|
+
return /* @__PURE__ */ jsx19(
|
|
573
|
+
"li",
|
|
574
|
+
{
|
|
575
|
+
onClick,
|
|
576
|
+
className: cn(
|
|
577
|
+
"w-full h-11 px-3 shrink-0",
|
|
578
|
+
"flex items-center justify-start",
|
|
579
|
+
// "box-border border-b border-gray02",
|
|
580
|
+
"text-body3-book text-primary",
|
|
581
|
+
"bg-white hover:bg-gray00 active:bg-gray01",
|
|
582
|
+
// isSelected
|
|
583
|
+
// ? "bg-black text-white"
|
|
584
|
+
// : "",
|
|
585
|
+
className
|
|
586
|
+
),
|
|
587
|
+
children: label
|
|
588
|
+
}
|
|
589
|
+
);
|
|
590
|
+
};
|
|
591
|
+
|
|
592
|
+
// src/components/Form/FormSelectBox.tsx
|
|
593
|
+
import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
594
|
+
var FormSelectBox = ({
|
|
595
|
+
options,
|
|
596
|
+
value,
|
|
597
|
+
onChange,
|
|
598
|
+
placeholder = "\uC120\uD0DD\uD574\uC8FC\uC138\uC694",
|
|
599
|
+
isDanger,
|
|
600
|
+
dangerText,
|
|
601
|
+
className
|
|
602
|
+
}) => {
|
|
603
|
+
const [isOpen, setIsOpen] = useState3(false);
|
|
604
|
+
const containerRef = useRef(null);
|
|
605
|
+
useEffect(() => {
|
|
606
|
+
const handleClickOutside = (event) => {
|
|
607
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
608
|
+
setIsOpen(false);
|
|
609
|
+
}
|
|
610
|
+
};
|
|
611
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
612
|
+
return () => {
|
|
613
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
614
|
+
};
|
|
615
|
+
}, []);
|
|
616
|
+
return /* @__PURE__ */ jsx20(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsxs9("div", { ref: containerRef, className: "relative w-full", children: [
|
|
617
|
+
/* @__PURE__ */ jsxs9(
|
|
618
|
+
"div",
|
|
619
|
+
{
|
|
620
|
+
tabIndex: 0,
|
|
621
|
+
className: getInputStyles(
|
|
622
|
+
isDanger,
|
|
623
|
+
cn(
|
|
624
|
+
"flex items-center justify-between cursor-pointer select-none",
|
|
625
|
+
isOpen && "border-black",
|
|
626
|
+
// 💡 열려있을 때는 테두리를 검은색으로 고정 (포커스 효과)
|
|
627
|
+
className
|
|
628
|
+
)
|
|
629
|
+
),
|
|
630
|
+
onClick: (e) => {
|
|
631
|
+
if (isOpen) {
|
|
632
|
+
e.currentTarget.blur();
|
|
633
|
+
}
|
|
634
|
+
setIsOpen((prev) => !prev);
|
|
635
|
+
},
|
|
636
|
+
children: [
|
|
637
|
+
/* @__PURE__ */ jsx20("span", { className: value ? "text-primary" : "text-quaternary", children: value || placeholder }),
|
|
638
|
+
/* @__PURE__ */ jsx20(
|
|
639
|
+
IconChevronDownXS,
|
|
640
|
+
{
|
|
641
|
+
className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
|
|
642
|
+
stroke: "currentColor"
|
|
643
|
+
}
|
|
644
|
+
)
|
|
645
|
+
]
|
|
646
|
+
}
|
|
647
|
+
),
|
|
648
|
+
isOpen && /* @__PURE__ */ jsx20(
|
|
649
|
+
"ul",
|
|
650
|
+
{
|
|
651
|
+
className: cn(
|
|
652
|
+
"absolute top-full left-0 right-0 z-10",
|
|
653
|
+
// 💡 Input 바로 아래에 띄움
|
|
654
|
+
"box-border border border-gray02 bg-white flex flex-col",
|
|
655
|
+
"max-h-50 overflow-y-auto shadow-sm"
|
|
656
|
+
// 💡 항목이 너무 많으면 스크롤 생성
|
|
657
|
+
),
|
|
658
|
+
children: options.map((option) => /* @__PURE__ */ jsx20(
|
|
659
|
+
SelectBoxOption,
|
|
660
|
+
{
|
|
661
|
+
label: option,
|
|
662
|
+
onClick: () => {
|
|
663
|
+
onChange(option);
|
|
664
|
+
setIsOpen(false);
|
|
665
|
+
}
|
|
666
|
+
},
|
|
667
|
+
option
|
|
668
|
+
))
|
|
669
|
+
}
|
|
670
|
+
)
|
|
671
|
+
] }) });
|
|
672
|
+
};
|
|
673
|
+
|
|
674
|
+
// src/components/TextButton/TextButton.tsx
|
|
675
|
+
import { Fragment, jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
676
|
+
var TextButton = ({
|
|
677
|
+
children,
|
|
678
|
+
icon,
|
|
679
|
+
iconPosition = "left",
|
|
680
|
+
alert = false,
|
|
681
|
+
underline = true,
|
|
682
|
+
className,
|
|
683
|
+
...props
|
|
684
|
+
}) => {
|
|
685
|
+
const content = /* @__PURE__ */ jsxs10(Fragment, { children: [
|
|
686
|
+
icon && iconPosition === "left" && /* @__PURE__ */ jsx21("span", { className: "flex shrink-0 items-center", children: icon }),
|
|
687
|
+
/* @__PURE__ */ jsx21("span", { className: cn(underline && "underline underline-offset-2"), children }),
|
|
688
|
+
icon && iconPosition === "right" && /* @__PURE__ */ jsx21("span", { className: "flex shrink-0 items-center", children: icon })
|
|
689
|
+
] });
|
|
690
|
+
const classes = cn(
|
|
691
|
+
"inline-flex w-fit items-center gap-1 px-1 -mx-1",
|
|
692
|
+
"text-caption-book",
|
|
693
|
+
alert ? "text-danger" : "text-tertiary",
|
|
694
|
+
"hover:bg-gray00 active:bg-gray01 transition-colors",
|
|
695
|
+
alert ? "hover:text-danger" : "hover:text-primary",
|
|
696
|
+
"cursor-pointer select-none",
|
|
697
|
+
"disabled:cursor-default disabled:text-quaternary disabled:hover:bg-transparent",
|
|
698
|
+
"aria-disabled:cursor-default aria-disabled:text-quaternary aria-disabled:hover:bg-transparent",
|
|
699
|
+
className
|
|
700
|
+
);
|
|
701
|
+
if (props.href !== void 0) {
|
|
702
|
+
const { href, ...rest } = props;
|
|
703
|
+
return /* @__PURE__ */ jsx21("a", { href, className: classes, ...rest, children: content });
|
|
704
|
+
}
|
|
705
|
+
const buttonProps = props;
|
|
706
|
+
return /* @__PURE__ */ jsx21("button", { type: "button", className: classes, ...buttonProps, children: content });
|
|
707
|
+
};
|
|
708
|
+
|
|
709
|
+
// src/components/Dropdown/Dropdown.tsx
|
|
710
|
+
import { useEffect as useEffect2, useRef as useRef2, useState as useState4 } from "react";
|
|
711
|
+
import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
712
|
+
var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
|
|
713
|
+
const [isOpen, setIsOpen] = useState4(false);
|
|
714
|
+
const containerRef = useRef2(null);
|
|
715
|
+
useEffect2(() => {
|
|
716
|
+
const handleClickOutside = (event) => {
|
|
717
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
718
|
+
setIsOpen(false);
|
|
719
|
+
}
|
|
720
|
+
};
|
|
721
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
722
|
+
return () => {
|
|
723
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
724
|
+
};
|
|
725
|
+
}, []);
|
|
726
|
+
return /* @__PURE__ */ jsxs11("div", { ref: containerRef, className: "relative", children: [
|
|
727
|
+
/* @__PURE__ */ jsxs11(
|
|
728
|
+
"div",
|
|
729
|
+
{
|
|
730
|
+
className: cn(
|
|
731
|
+
"w-fit h-fit px-2 py-1",
|
|
732
|
+
"flex items-center justify-center gap-1.5",
|
|
733
|
+
"text-body3-book text-strong",
|
|
734
|
+
"bg-white hover:bg-gray00 active:bg-gray01",
|
|
735
|
+
"cursor-pointer",
|
|
736
|
+
className
|
|
737
|
+
),
|
|
738
|
+
onClick: () => setIsOpen((prev) => !prev),
|
|
739
|
+
children: [
|
|
740
|
+
/* @__PURE__ */ jsx22("p", { children: selectedLabel }),
|
|
741
|
+
/* @__PURE__ */ jsx22(
|
|
742
|
+
IconChevronDownXS,
|
|
743
|
+
{
|
|
744
|
+
className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
|
|
745
|
+
stroke: "currentColor"
|
|
746
|
+
}
|
|
747
|
+
)
|
|
748
|
+
]
|
|
749
|
+
}
|
|
750
|
+
),
|
|
751
|
+
isOpen && /* @__PURE__ */ jsx22("div", { className: cn("absolute top-full right-0 z-10", "box-border border border-gray02"), children: labels.map((label) => /* @__PURE__ */ jsx22(
|
|
752
|
+
SelectBoxOption,
|
|
753
|
+
{
|
|
754
|
+
label,
|
|
755
|
+
onClick: () => {
|
|
756
|
+
setSelectedLabel(label);
|
|
757
|
+
setIsOpen(false);
|
|
758
|
+
},
|
|
759
|
+
className: "w-44 h-11 justify-center"
|
|
760
|
+
},
|
|
761
|
+
label
|
|
762
|
+
)) })
|
|
763
|
+
] });
|
|
764
|
+
};
|
|
765
|
+
|
|
766
|
+
// src/components/ListView/List.tsx
|
|
767
|
+
import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
768
|
+
function List({
|
|
769
|
+
className,
|
|
770
|
+
label1,
|
|
771
|
+
label2,
|
|
772
|
+
label2OnClick,
|
|
773
|
+
label3,
|
|
774
|
+
disabled = false,
|
|
775
|
+
selected = false,
|
|
776
|
+
onClick,
|
|
777
|
+
children,
|
|
778
|
+
...props
|
|
779
|
+
}) {
|
|
780
|
+
return /* @__PURE__ */ jsxs12(
|
|
781
|
+
"li",
|
|
782
|
+
{
|
|
783
|
+
className: cn(
|
|
784
|
+
"w-full min-w-fit h-13 pl-4 pr-6",
|
|
785
|
+
"grid grid-cols-[4fr_1fr_1fr] items-center gap-4",
|
|
786
|
+
"bg-white hover:bg-gray00 hover:has-[.has-clickable:hover]:bg-white active:bg-gray01",
|
|
787
|
+
"text-primary select-none [&_*]:cursor-pointer cursor-pointer",
|
|
788
|
+
disabled && "opacity-40 [&_*]:cursor-pointer cursor-pointer",
|
|
789
|
+
selected && "bg-black text-white hover:bg-black active:bg-black hover:has-[.has-clickable:hover]:bg-black",
|
|
790
|
+
className
|
|
791
|
+
),
|
|
792
|
+
...props,
|
|
793
|
+
onClick,
|
|
794
|
+
children: [
|
|
795
|
+
/* @__PURE__ */ jsxs12("section", { className: cn("flex items-center gap-4"), children: [
|
|
796
|
+
/* @__PURE__ */ jsx23("label", { className: cn("text-body2-regular"), children: label1 ? label1 : "-" }),
|
|
797
|
+
/* @__PURE__ */ jsx23("div", { className: cn("flex items-center gap-2"), children })
|
|
798
|
+
] }),
|
|
799
|
+
/* @__PURE__ */ jsx23(
|
|
800
|
+
"label",
|
|
801
|
+
{
|
|
802
|
+
className: cn(
|
|
803
|
+
"text-body3-book truncate p-1 w-fit",
|
|
804
|
+
label2OnClick && "underline has-clickable",
|
|
805
|
+
label2OnClick && !selected && "hover:bg-gray00"
|
|
806
|
+
),
|
|
807
|
+
onClick: label2OnClick,
|
|
808
|
+
children: label2 ? label2 : "-"
|
|
809
|
+
}
|
|
810
|
+
),
|
|
811
|
+
/* @__PURE__ */ jsx23("label", { className: cn("text-body3-regular text-right"), children: label3 ? label3 : "-" })
|
|
812
|
+
]
|
|
813
|
+
}
|
|
814
|
+
);
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
// src/components/Modal/Modal.tsx
|
|
818
|
+
import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
819
|
+
var ModalBase = ({ isVisible, header, children, className }) => {
|
|
820
|
+
if (!isVisible) return null;
|
|
821
|
+
return /* @__PURE__ */ jsx24("div", { className: cn("fixed inset-0 z-50 pointer-events-auto"), children: /* @__PURE__ */ jsx24(
|
|
822
|
+
"div",
|
|
823
|
+
{
|
|
824
|
+
className: cn("fixed inset-0 z-1001 flex items-center justify-center pointer-events-auto"),
|
|
825
|
+
children: /* @__PURE__ */ jsxs13(
|
|
826
|
+
"main",
|
|
827
|
+
{
|
|
828
|
+
className: cn(
|
|
829
|
+
"w-110 pt-8 h-fit",
|
|
830
|
+
"flex flex-col items-center",
|
|
831
|
+
"border border-gray02",
|
|
832
|
+
"bg-white shadow-[0 0 30px 0 rgba(0, 0, 0, 0.08);]",
|
|
833
|
+
className
|
|
834
|
+
),
|
|
835
|
+
children: [
|
|
836
|
+
/* @__PURE__ */ jsx24("h1", { className: cn("text-strong font-[500] text-[24px] leading-[32px]"), children: header }),
|
|
837
|
+
children
|
|
838
|
+
]
|
|
839
|
+
}
|
|
840
|
+
)
|
|
841
|
+
}
|
|
842
|
+
) });
|
|
843
|
+
};
|
|
844
|
+
var Contents = ({ children, className }) => {
|
|
845
|
+
return /* @__PURE__ */ jsx24(
|
|
846
|
+
"div",
|
|
847
|
+
{
|
|
848
|
+
className: cn(
|
|
849
|
+
"flex flex-col items-center gap-8",
|
|
850
|
+
"w-full h-fit",
|
|
851
|
+
"px-14 pt-8 pb-9",
|
|
852
|
+
className
|
|
853
|
+
),
|
|
854
|
+
children
|
|
855
|
+
}
|
|
856
|
+
);
|
|
857
|
+
};
|
|
858
|
+
var CTAs2 = ({ children, className, row = false }) => {
|
|
859
|
+
if (!children) return null;
|
|
860
|
+
return (
|
|
861
|
+
// CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
|
|
862
|
+
/* @__PURE__ */ jsx24(
|
|
863
|
+
"div",
|
|
864
|
+
{
|
|
865
|
+
className: cn(
|
|
866
|
+
"flex flex-col w-full h-fit",
|
|
867
|
+
row && "flex-row divide-x divide-gray02",
|
|
868
|
+
className
|
|
869
|
+
),
|
|
870
|
+
children
|
|
871
|
+
}
|
|
872
|
+
)
|
|
873
|
+
);
|
|
874
|
+
};
|
|
875
|
+
var Modal = Object.assign(ModalBase, {
|
|
876
|
+
Contents,
|
|
877
|
+
CTAs: CTAs2
|
|
878
|
+
});
|
|
879
|
+
|
|
880
|
+
// src/components/Modal/ModalText.tsx
|
|
881
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
882
|
+
var ModalText = ({ children, className }) => {
|
|
883
|
+
return /* @__PURE__ */ jsx25(
|
|
884
|
+
"div",
|
|
885
|
+
{
|
|
886
|
+
className: cn(
|
|
887
|
+
"flex flex-col items-center",
|
|
888
|
+
"mt-[-20px] mb-[-4px]",
|
|
889
|
+
ModalTextStyle,
|
|
890
|
+
"text-tertiary text-center",
|
|
891
|
+
className
|
|
892
|
+
),
|
|
893
|
+
children
|
|
894
|
+
}
|
|
895
|
+
);
|
|
896
|
+
};
|
|
897
|
+
|
|
898
|
+
// src/components/createPost/CategorySegment.tsx
|
|
899
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
179
900
|
var CategorySegment = ({
|
|
180
901
|
selected = false,
|
|
181
902
|
label,
|
|
182
903
|
className,
|
|
183
904
|
onClick
|
|
184
905
|
}) => {
|
|
185
|
-
return /* @__PURE__ */
|
|
906
|
+
return /* @__PURE__ */ jsx26(
|
|
186
907
|
"div",
|
|
187
908
|
{
|
|
188
909
|
className: cn(
|
|
@@ -202,7 +923,7 @@ var CategorySegment = ({
|
|
|
202
923
|
};
|
|
203
924
|
|
|
204
925
|
// src/components/createPost/CategorySegmentedControl.tsx
|
|
205
|
-
import { jsx as
|
|
926
|
+
import { jsx as jsx27, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
206
927
|
var categorySegments = {
|
|
207
928
|
info: ["\uACF5\uC6A9 \uBB3C\uD488", "\uC77C\uBC18 \uAE30\uC790\uC7AC", "\uD2B9\uC218 \uAE30\uC790\uC7AC"],
|
|
208
929
|
archive: ["\uD504\uB9B0\uD2B8\uC2E4", "\uD64D\uC775\uC2DC\uB514"],
|
|
@@ -216,8 +937,8 @@ var CategorySegmentedControl = ({
|
|
|
216
937
|
className
|
|
217
938
|
}) => {
|
|
218
939
|
const segments = categorySegments[variable];
|
|
219
|
-
return /* @__PURE__ */
|
|
220
|
-
/* @__PURE__ */
|
|
940
|
+
return /* @__PURE__ */ jsxs14("div", { className: cn("w-full h-fit flex items-center justify-start", className), children: [
|
|
941
|
+
/* @__PURE__ */ jsx27(
|
|
221
942
|
"div",
|
|
222
943
|
{
|
|
223
944
|
className: cn(
|
|
@@ -230,7 +951,7 @@ var CategorySegmentedControl = ({
|
|
|
230
951
|
children: variable === "infoTag" ? "\uD0DC\uADF8 \uC120\uD0DD" : "\uCE74\uD14C\uACE0\uB9AC \uC120\uD0DD"
|
|
231
952
|
}
|
|
232
953
|
),
|
|
233
|
-
segments.map((label) => /* @__PURE__ */
|
|
954
|
+
segments.map((label) => /* @__PURE__ */ jsx27(
|
|
234
955
|
CategorySegment,
|
|
235
956
|
{
|
|
236
957
|
label,
|
|
@@ -243,9 +964,9 @@ var CategorySegmentedControl = ({
|
|
|
243
964
|
};
|
|
244
965
|
|
|
245
966
|
// src/components/createPost/TitleInput.tsx
|
|
246
|
-
import { jsx as
|
|
967
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
247
968
|
var TitleInput = ({ title, onChange, className }) => {
|
|
248
|
-
return /* @__PURE__ */
|
|
969
|
+
return /* @__PURE__ */ jsx28(
|
|
249
970
|
"input",
|
|
250
971
|
{
|
|
251
972
|
type: "text",
|
|
@@ -265,9 +986,9 @@ var TitleInput = ({ title, onChange, className }) => {
|
|
|
265
986
|
};
|
|
266
987
|
|
|
267
988
|
// src/components/notice/NoticeBadge.tsx
|
|
268
|
-
import { jsx as
|
|
989
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
269
990
|
var NoticeBadge = ({ variable, className, onClick }) => {
|
|
270
|
-
return /* @__PURE__ */
|
|
991
|
+
return /* @__PURE__ */ jsx29(
|
|
271
992
|
"button",
|
|
272
993
|
{
|
|
273
994
|
type: "button",
|
|
@@ -288,7 +1009,7 @@ var NoticeBadge = ({ variable, className, onClick }) => {
|
|
|
288
1009
|
};
|
|
289
1010
|
|
|
290
1011
|
// src/components/notice/NoticeBar.tsx
|
|
291
|
-
import { jsx as
|
|
1012
|
+
import { jsx as jsx30, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
292
1013
|
var NoticeBar = ({
|
|
293
1014
|
variable = "default",
|
|
294
1015
|
badgeVariable,
|
|
@@ -297,7 +1018,7 @@ var NoticeBar = ({
|
|
|
297
1018
|
className,
|
|
298
1019
|
onClick
|
|
299
1020
|
}) => {
|
|
300
|
-
return /* @__PURE__ */
|
|
1021
|
+
return /* @__PURE__ */ jsxs15(
|
|
301
1022
|
"div",
|
|
302
1023
|
{
|
|
303
1024
|
className: cn(
|
|
@@ -309,20 +1030,20 @@ var NoticeBar = ({
|
|
|
309
1030
|
),
|
|
310
1031
|
onClick,
|
|
311
1032
|
children: [
|
|
312
|
-
/* @__PURE__ */
|
|
313
|
-
/* @__PURE__ */
|
|
314
|
-
/* @__PURE__ */
|
|
1033
|
+
/* @__PURE__ */ jsxs15("section", { className: "flex items-center gap-3", children: [
|
|
1034
|
+
/* @__PURE__ */ jsx30(NoticeBadge, { variable: badgeVariable }),
|
|
1035
|
+
/* @__PURE__ */ jsx30("h1", { className: "text-head1-medium text-strong", children: title })
|
|
315
1036
|
] }),
|
|
316
|
-
/* @__PURE__ */
|
|
1037
|
+
/* @__PURE__ */ jsx30("p", { className: "text-body3-book text-tertiary", children: date })
|
|
317
1038
|
]
|
|
318
1039
|
}
|
|
319
1040
|
);
|
|
320
1041
|
};
|
|
321
1042
|
|
|
322
1043
|
// src/components/SearchBar/SearchBar.tsx
|
|
323
|
-
import { jsx as
|
|
1044
|
+
import { jsx as jsx31, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
324
1045
|
var SearchBar = ({ value, onChange, className }) => {
|
|
325
|
-
return /* @__PURE__ */
|
|
1046
|
+
return /* @__PURE__ */ jsxs16(
|
|
326
1047
|
"label",
|
|
327
1048
|
{
|
|
328
1049
|
className: cn(
|
|
@@ -333,8 +1054,8 @@ var SearchBar = ({ value, onChange, className }) => {
|
|
|
333
1054
|
className
|
|
334
1055
|
),
|
|
335
1056
|
children: [
|
|
336
|
-
/* @__PURE__ */
|
|
337
|
-
/* @__PURE__ */
|
|
1057
|
+
/* @__PURE__ */ jsx31(IconSearch, {}),
|
|
1058
|
+
/* @__PURE__ */ jsx31(
|
|
338
1059
|
"input",
|
|
339
1060
|
{
|
|
340
1061
|
type: "text",
|
|
@@ -356,10 +1077,10 @@ var SearchBar = ({ value, onChange, className }) => {
|
|
|
356
1077
|
import { forwardRef } from "react";
|
|
357
1078
|
|
|
358
1079
|
// src/lib/useControllableState.ts
|
|
359
|
-
import { useCallback, useState } from "react";
|
|
1080
|
+
import { useCallback, useState as useState5 } from "react";
|
|
360
1081
|
function useControllableState(controlled, defaultValue) {
|
|
361
1082
|
const isControlled = controlled !== void 0;
|
|
362
|
-
const [uncontrolled, setUncontrolled] =
|
|
1083
|
+
const [uncontrolled, setUncontrolled] = useState5(defaultValue);
|
|
363
1084
|
const value = isControlled ? controlled : uncontrolled;
|
|
364
1085
|
const setValue = useCallback(
|
|
365
1086
|
(next) => {
|
|
@@ -383,7 +1104,7 @@ var RadioSelected_default = "./RadioSelected-DOLVV7ZM.svg";
|
|
|
383
1104
|
var RadioUnselected_default = "./RadioUnselected-QN74EU46.svg";
|
|
384
1105
|
|
|
385
1106
|
// src/components/SideRadioAccordion/SideRadioAccordion.tsx
|
|
386
|
-
import { jsx as
|
|
1107
|
+
import { jsx as jsx32, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
387
1108
|
var printColorBgClass = {
|
|
388
1109
|
Plotter: "bg-print-plotter",
|
|
389
1110
|
Printer: "bg-print-printer",
|
|
@@ -427,8 +1148,8 @@ var SideRadioAccordion = forwardRef(
|
|
|
427
1148
|
setIsOpen(next);
|
|
428
1149
|
onOpenChange?.(next);
|
|
429
1150
|
};
|
|
430
|
-
return /* @__PURE__ */
|
|
431
|
-
/* @__PURE__ */
|
|
1151
|
+
return /* @__PURE__ */ jsxs17("div", { ref, className: cn("w-full", className), children: [
|
|
1152
|
+
/* @__PURE__ */ jsx32(
|
|
432
1153
|
Stepper,
|
|
433
1154
|
{
|
|
434
1155
|
step,
|
|
@@ -439,8 +1160,8 @@ var SideRadioAccordion = forwardRef(
|
|
|
439
1160
|
className: cn(stickyHeader && "sticky top-0 z-10")
|
|
440
1161
|
}
|
|
441
1162
|
),
|
|
442
|
-
expanded && /* @__PURE__ */
|
|
443
|
-
radioToggleList.map((item) => /* @__PURE__ */
|
|
1163
|
+
expanded && /* @__PURE__ */ jsxs17("div", { className: "flex flex-col", children: [
|
|
1164
|
+
radioToggleList.map((item) => /* @__PURE__ */ jsx32(
|
|
444
1165
|
RadioToggleItem,
|
|
445
1166
|
{
|
|
446
1167
|
...item,
|
|
@@ -449,8 +1170,8 @@ var SideRadioAccordion = forwardRef(
|
|
|
449
1170
|
},
|
|
450
1171
|
itemKey(item)
|
|
451
1172
|
)),
|
|
452
|
-
quantityLimitLabel && /* @__PURE__ */
|
|
453
|
-
|
|
1173
|
+
quantityLimitLabel && /* @__PURE__ */ jsx32(
|
|
1174
|
+
TextButton2,
|
|
454
1175
|
{
|
|
455
1176
|
label: quantityLimitLabel,
|
|
456
1177
|
onClick: onClickQuantityLimit,
|
|
@@ -462,16 +1183,16 @@ var SideRadioAccordion = forwardRef(
|
|
|
462
1183
|
}
|
|
463
1184
|
);
|
|
464
1185
|
var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
|
|
465
|
-
const label = /* @__PURE__ */
|
|
1186
|
+
const label = /* @__PURE__ */ jsxs17("span", { children: [
|
|
466
1187
|
step,
|
|
467
1188
|
" | ",
|
|
468
1189
|
title
|
|
469
1190
|
] });
|
|
470
1191
|
const base = "w-full flex items-center justify-between px-3 py-2.5 text-body1-medium text-strong text-left bg-white";
|
|
471
1192
|
if (!collapsible) {
|
|
472
|
-
return /* @__PURE__ */
|
|
1193
|
+
return /* @__PURE__ */ jsx32("div", { className: cn(base, className), children: label });
|
|
473
1194
|
}
|
|
474
|
-
return /* @__PURE__ */
|
|
1195
|
+
return /* @__PURE__ */ jsxs17(
|
|
475
1196
|
"button",
|
|
476
1197
|
{
|
|
477
1198
|
type: "button",
|
|
@@ -479,7 +1200,7 @@ var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
|
|
|
479
1200
|
className: cn(base, "cursor-pointer hover:bg-gray00 active:bg-gray01", className),
|
|
480
1201
|
children: [
|
|
481
1202
|
label,
|
|
482
|
-
/* @__PURE__ */
|
|
1203
|
+
/* @__PURE__ */ jsx32(
|
|
483
1204
|
"img",
|
|
484
1205
|
{
|
|
485
1206
|
src: ChevronDown_default,
|
|
@@ -505,8 +1226,8 @@ var RadioToggleItem = ({
|
|
|
505
1226
|
}) => {
|
|
506
1227
|
const rowBg = !open ? "bg-white hover:bg-gray00" : color ? void 0 : printColor ? printColorBgClass[printColor] : "bg-gray00";
|
|
507
1228
|
const style = open && color ? { backgroundColor: color } : void 0;
|
|
508
|
-
return /* @__PURE__ */
|
|
509
|
-
/* @__PURE__ */
|
|
1229
|
+
return /* @__PURE__ */ jsxs17("div", { className: "w-full", children: [
|
|
1230
|
+
/* @__PURE__ */ jsxs17(
|
|
510
1231
|
"button",
|
|
511
1232
|
{
|
|
512
1233
|
type: "button",
|
|
@@ -519,16 +1240,16 @@ var RadioToggleItem = ({
|
|
|
519
1240
|
className
|
|
520
1241
|
),
|
|
521
1242
|
children: [
|
|
522
|
-
/* @__PURE__ */
|
|
523
|
-
/* @__PURE__ */
|
|
1243
|
+
/* @__PURE__ */ jsx32(Radio, { selected: open }),
|
|
1244
|
+
/* @__PURE__ */ jsx32("span", { children: title })
|
|
524
1245
|
]
|
|
525
1246
|
}
|
|
526
1247
|
),
|
|
527
|
-
open && /* @__PURE__ */
|
|
528
|
-
/* @__PURE__ */
|
|
529
|
-
badges && badges.length > 0 && /* @__PURE__ */
|
|
530
|
-
labelTextButton && /* @__PURE__ */
|
|
531
|
-
|
|
1248
|
+
open && /* @__PURE__ */ jsxs17("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
|
|
1249
|
+
/* @__PURE__ */ jsx32("p", { className: "text-caption-regular text-secondary", children: content }),
|
|
1250
|
+
badges && badges.length > 0 && /* @__PURE__ */ jsx32("div", { className: "flex gap-1", children: badges.map((badge) => /* @__PURE__ */ jsx32(Badge, { label: badge }, badge)) }),
|
|
1251
|
+
labelTextButton && /* @__PURE__ */ jsx32(
|
|
1252
|
+
TextButton2,
|
|
532
1253
|
{
|
|
533
1254
|
label: labelTextButton,
|
|
534
1255
|
onClick: onClickTextButton,
|
|
@@ -540,7 +1261,7 @@ var RadioToggleItem = ({
|
|
|
540
1261
|
] });
|
|
541
1262
|
};
|
|
542
1263
|
var Radio = ({ selected = false, className }) => {
|
|
543
|
-
return /* @__PURE__ */
|
|
1264
|
+
return /* @__PURE__ */ jsx32(
|
|
544
1265
|
"img",
|
|
545
1266
|
{
|
|
546
1267
|
src: selected ? RadioSelected_default : RadioUnselected_default,
|
|
@@ -549,8 +1270,8 @@ var Radio = ({ selected = false, className }) => {
|
|
|
549
1270
|
}
|
|
550
1271
|
);
|
|
551
1272
|
};
|
|
552
|
-
var
|
|
553
|
-
return /* @__PURE__ */
|
|
1273
|
+
var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
|
|
1274
|
+
return /* @__PURE__ */ jsxs17(
|
|
554
1275
|
"button",
|
|
555
1276
|
{
|
|
556
1277
|
type: "button",
|
|
@@ -563,14 +1284,14 @@ var TextButton = ({ label, onClick, showIcon = false, className }) => {
|
|
|
563
1284
|
className
|
|
564
1285
|
),
|
|
565
1286
|
children: [
|
|
566
|
-
showIcon && /* @__PURE__ */
|
|
1287
|
+
showIcon && /* @__PURE__ */ jsx32("img", { src: Exclamation_default, alt: "" }),
|
|
567
1288
|
label
|
|
568
1289
|
]
|
|
569
1290
|
}
|
|
570
1291
|
);
|
|
571
1292
|
};
|
|
572
1293
|
var Badge = ({ label, className }) => {
|
|
573
|
-
return /* @__PURE__ */
|
|
1294
|
+
return /* @__PURE__ */ jsx32(
|
|
574
1295
|
"div",
|
|
575
1296
|
{
|
|
576
1297
|
className: cn(
|
|
@@ -584,7 +1305,7 @@ var Badge = ({ label, className }) => {
|
|
|
584
1305
|
};
|
|
585
1306
|
|
|
586
1307
|
// src/components/Tag/Tag.tsx
|
|
587
|
-
import { jsx as
|
|
1308
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
588
1309
|
var Tag = ({
|
|
589
1310
|
className,
|
|
590
1311
|
children,
|
|
@@ -594,7 +1315,7 @@ var Tag = ({
|
|
|
594
1315
|
onClick,
|
|
595
1316
|
...props
|
|
596
1317
|
}) => {
|
|
597
|
-
return /* @__PURE__ */
|
|
1318
|
+
return /* @__PURE__ */ jsx33(
|
|
598
1319
|
"button",
|
|
599
1320
|
{
|
|
600
1321
|
className: cn(
|
|
@@ -613,7 +1334,7 @@ var Tag = ({
|
|
|
613
1334
|
disabled,
|
|
614
1335
|
style: bgColor ? { backgroundColor: bgColor, border: "none" } : void 0,
|
|
615
1336
|
...props,
|
|
616
|
-
children: /* @__PURE__ */
|
|
1337
|
+
children: /* @__PURE__ */ jsx33("span", { children })
|
|
617
1338
|
}
|
|
618
1339
|
);
|
|
619
1340
|
};
|
|
@@ -655,7 +1376,7 @@ var formatWeekRange = (weekStart) => {
|
|
|
655
1376
|
};
|
|
656
1377
|
|
|
657
1378
|
// src/components/Timetable/WeekNavigation.tsx
|
|
658
|
-
import { jsx as
|
|
1379
|
+
import { jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
659
1380
|
var weekLabel = {
|
|
660
1381
|
thisWeek: "\uC774\uBC88 \uC8FC",
|
|
661
1382
|
nextWeek: "\uB2E4\uC74C \uC8FC",
|
|
@@ -666,7 +1387,7 @@ var WeekNavigation = forwardRef2(
|
|
|
666
1387
|
const showPrev = canPrev ?? (week ? week !== "thisWeek" : true);
|
|
667
1388
|
const showNext = canNext ?? (week ? week !== "twoWeeksLater" : true);
|
|
668
1389
|
const text = label ?? (week ? `${weekLabel[week]} (${formatWeekRange(date)})` : formatWeekRange(date));
|
|
669
|
-
return /* @__PURE__ */
|
|
1390
|
+
return /* @__PURE__ */ jsxs18(
|
|
670
1391
|
"div",
|
|
671
1392
|
{
|
|
672
1393
|
ref,
|
|
@@ -678,9 +1399,9 @@ var WeekNavigation = forwardRef2(
|
|
|
678
1399
|
className
|
|
679
1400
|
),
|
|
680
1401
|
children: [
|
|
681
|
-
/* @__PURE__ */
|
|
682
|
-
/* @__PURE__ */
|
|
683
|
-
/* @__PURE__ */
|
|
1402
|
+
/* @__PURE__ */ jsx34(ArrowButton, { direction: "left", visible: showPrev, onClick: onPrevWeek }),
|
|
1403
|
+
/* @__PURE__ */ jsx34("span", { children: text }),
|
|
1404
|
+
/* @__PURE__ */ jsx34(ArrowButton, { direction: "right", visible: showNext, onClick: onNextWeek })
|
|
684
1405
|
]
|
|
685
1406
|
}
|
|
686
1407
|
);
|
|
@@ -688,9 +1409,9 @@ var WeekNavigation = forwardRef2(
|
|
|
688
1409
|
);
|
|
689
1410
|
var ArrowButton = ({ direction, visible, onClick }) => {
|
|
690
1411
|
if (!visible) {
|
|
691
|
-
return /* @__PURE__ */
|
|
1412
|
+
return /* @__PURE__ */ jsx34("span", { className: "w-6 h-6" });
|
|
692
1413
|
}
|
|
693
|
-
return /* @__PURE__ */
|
|
1414
|
+
return /* @__PURE__ */ jsx34(
|
|
694
1415
|
"button",
|
|
695
1416
|
{
|
|
696
1417
|
type: "button",
|
|
@@ -700,7 +1421,7 @@ var ArrowButton = ({ direction, visible, onClick }) => {
|
|
|
700
1421
|
"text-gray06 cursor-pointer",
|
|
701
1422
|
"hover:bg-gray00 active:bg-gray01"
|
|
702
1423
|
),
|
|
703
|
-
children: /* @__PURE__ */
|
|
1424
|
+
children: /* @__PURE__ */ jsx34(
|
|
704
1425
|
IconChevronDownXS,
|
|
705
1426
|
{
|
|
706
1427
|
className: direction === "left" ? "rotate-90" : "-rotate-90",
|
|
@@ -712,7 +1433,7 @@ var ArrowButton = ({ direction, visible, onClick }) => {
|
|
|
712
1433
|
};
|
|
713
1434
|
|
|
714
1435
|
// src/components/Timetable/Timetable.tsx
|
|
715
|
-
import { jsx as
|
|
1436
|
+
import { jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
716
1437
|
var printColorHoverClass = {
|
|
717
1438
|
Plotter: "hover:bg-print-plotter",
|
|
718
1439
|
Printer: "hover:bg-print-printer",
|
|
@@ -735,8 +1456,8 @@ var Timetable = forwardRef3(function Timetable2({
|
|
|
735
1456
|
canNextWeek,
|
|
736
1457
|
className
|
|
737
1458
|
}, ref) {
|
|
738
|
-
return /* @__PURE__ */
|
|
739
|
-
!hideWeekNavigation && /* @__PURE__ */
|
|
1459
|
+
return /* @__PURE__ */ jsxs19("div", { ref, className: cn(fluid && "w-full", className), children: [
|
|
1460
|
+
!hideWeekNavigation && /* @__PURE__ */ jsx35(
|
|
740
1461
|
WeekNavigation,
|
|
741
1462
|
{
|
|
742
1463
|
date: weekStart,
|
|
@@ -747,7 +1468,7 @@ var Timetable = forwardRef3(function Timetable2({
|
|
|
747
1468
|
onNextWeek
|
|
748
1469
|
}
|
|
749
1470
|
),
|
|
750
|
-
/* @__PURE__ */
|
|
1471
|
+
/* @__PURE__ */ jsx35("div", { className: cn("flex", fluid && "w-full"), children: days.map((day) => /* @__PURE__ */ jsx35(
|
|
751
1472
|
DailyTimetable,
|
|
752
1473
|
{
|
|
753
1474
|
date: day.date,
|
|
@@ -760,9 +1481,9 @@ var Timetable = forwardRef3(function Timetable2({
|
|
|
760
1481
|
] });
|
|
761
1482
|
});
|
|
762
1483
|
var DailyTimetable = ({ date, slots, fluid, onSelectTime, className }) => {
|
|
763
|
-
return /* @__PURE__ */
|
|
764
|
-
/* @__PURE__ */
|
|
765
|
-
slots.map((slot) => /* @__PURE__ */
|
|
1484
|
+
return /* @__PURE__ */ jsxs19("div", { className: cn("flex flex-col", fluid ? "flex-1 min-w-0" : "w-18", className), children: [
|
|
1485
|
+
/* @__PURE__ */ jsx35("div", { className: "h-13 flex items-center justify-center text-body3-medium text-secondary", children: formatDayLabel(date) }),
|
|
1486
|
+
slots.map((slot) => /* @__PURE__ */ jsx35(
|
|
766
1487
|
TimeItem,
|
|
767
1488
|
{
|
|
768
1489
|
state: slot.state,
|
|
@@ -788,7 +1509,7 @@ var TimeItem = ({
|
|
|
788
1509
|
}) => {
|
|
789
1510
|
const clickable = (state === "default" || state === "selected") && !!onClick;
|
|
790
1511
|
const style = state === "default" && color ? { "--tt-hover": color } : void 0;
|
|
791
|
-
return /* @__PURE__ */
|
|
1512
|
+
return /* @__PURE__ */ jsx35(
|
|
792
1513
|
"div",
|
|
793
1514
|
{
|
|
794
1515
|
onClick: clickable ? onClick : void 0,
|
|
@@ -815,12 +1536,12 @@ var TimeItem = ({
|
|
|
815
1536
|
import {
|
|
816
1537
|
forwardRef as forwardRef4,
|
|
817
1538
|
useCallback as useCallback2,
|
|
818
|
-
useState as
|
|
1539
|
+
useState as useState6
|
|
819
1540
|
} from "react";
|
|
820
|
-
import { jsx as
|
|
1541
|
+
import { jsx as jsx36, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
821
1542
|
function useControllableState2(controlled, defaultValue) {
|
|
822
1543
|
const isControlled = controlled !== void 0;
|
|
823
|
-
const [uncontrolled, setUncontrolled] =
|
|
1544
|
+
const [uncontrolled, setUncontrolled] = useState6(defaultValue);
|
|
824
1545
|
const value = isControlled ? controlled : uncontrolled;
|
|
825
1546
|
const setValue = useCallback2(
|
|
826
1547
|
(next) => {
|
|
@@ -869,8 +1590,8 @@ var TNB = forwardRef4(function TNB2({
|
|
|
869
1590
|
setLowerValue(label);
|
|
870
1591
|
onSelectedLowerChange?.(label);
|
|
871
1592
|
};
|
|
872
|
-
return /* @__PURE__ */
|
|
873
|
-
/* @__PURE__ */
|
|
1593
|
+
return /* @__PURE__ */ jsxs20("nav", { ref, "aria-label": ariaLabel, className: cn("w-full bg-white", className), children: [
|
|
1594
|
+
/* @__PURE__ */ jsx36(
|
|
874
1595
|
UpperPart,
|
|
875
1596
|
{
|
|
876
1597
|
logo,
|
|
@@ -881,7 +1602,7 @@ var TNB = forwardRef4(function TNB2({
|
|
|
881
1602
|
linkComponent
|
|
882
1603
|
}
|
|
883
1604
|
),
|
|
884
|
-
/* @__PURE__ */
|
|
1605
|
+
/* @__PURE__ */ jsx36(
|
|
885
1606
|
LowerPart,
|
|
886
1607
|
{
|
|
887
1608
|
lowerPartItemList: currentLowerItemList,
|
|
@@ -896,7 +1617,7 @@ var NavClickable = forwardRef4(function NavClickable2({ href, onClick, linkCompo
|
|
|
896
1617
|
const ariaCurrent = current ? "page" : void 0;
|
|
897
1618
|
if (href && !disabled) {
|
|
898
1619
|
if (Link) {
|
|
899
|
-
return /* @__PURE__ */
|
|
1620
|
+
return /* @__PURE__ */ jsx36(
|
|
900
1621
|
Link,
|
|
901
1622
|
{
|
|
902
1623
|
href,
|
|
@@ -908,7 +1629,7 @@ var NavClickable = forwardRef4(function NavClickable2({ href, onClick, linkCompo
|
|
|
908
1629
|
}
|
|
909
1630
|
);
|
|
910
1631
|
}
|
|
911
|
-
return /* @__PURE__ */
|
|
1632
|
+
return /* @__PURE__ */ jsx36(
|
|
912
1633
|
"a",
|
|
913
1634
|
{
|
|
914
1635
|
href,
|
|
@@ -920,7 +1641,7 @@ var NavClickable = forwardRef4(function NavClickable2({ href, onClick, linkCompo
|
|
|
920
1641
|
}
|
|
921
1642
|
);
|
|
922
1643
|
}
|
|
923
|
-
return /* @__PURE__ */
|
|
1644
|
+
return /* @__PURE__ */ jsx36(
|
|
924
1645
|
"button",
|
|
925
1646
|
{
|
|
926
1647
|
type: "button",
|
|
@@ -942,10 +1663,10 @@ var UpperPart = ({
|
|
|
942
1663
|
linkComponent,
|
|
943
1664
|
className
|
|
944
1665
|
}) => {
|
|
945
|
-
return /* @__PURE__ */
|
|
946
|
-
/* @__PURE__ */
|
|
947
|
-
/* @__PURE__ */
|
|
948
|
-
/* @__PURE__ */
|
|
1666
|
+
return /* @__PURE__ */ jsxs20("div", { className: cn("w-full h-13 px-4 flex items-center justify-between", className), children: [
|
|
1667
|
+
/* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-6", children: [
|
|
1668
|
+
/* @__PURE__ */ jsx36(NavIconButton, { ...logo, linkComponent }),
|
|
1669
|
+
/* @__PURE__ */ jsx36("div", { className: "flex items-center gap-4", children: upperPartItemList.map((item) => /* @__PURE__ */ jsx36(
|
|
949
1670
|
UpperPartTab,
|
|
950
1671
|
{
|
|
951
1672
|
label: item.label,
|
|
@@ -960,7 +1681,7 @@ var UpperPart = ({
|
|
|
960
1681
|
item.id ?? item.label
|
|
961
1682
|
)) })
|
|
962
1683
|
] }),
|
|
963
|
-
/* @__PURE__ */
|
|
1684
|
+
/* @__PURE__ */ jsx36("div", { className: "flex items-center gap-2", children: upperPartIconList.map((icon, index) => /* @__PURE__ */ jsx36(
|
|
964
1685
|
NavIconButton,
|
|
965
1686
|
{
|
|
966
1687
|
...icon,
|
|
@@ -978,7 +1699,7 @@ var UpperPartTab = ({
|
|
|
978
1699
|
linkComponent,
|
|
979
1700
|
className
|
|
980
1701
|
}) => {
|
|
981
|
-
return /* @__PURE__ */
|
|
1702
|
+
return /* @__PURE__ */ jsx36(
|
|
982
1703
|
NavClickable,
|
|
983
1704
|
{
|
|
984
1705
|
href,
|
|
@@ -998,7 +1719,7 @@ var NavIconButton = forwardRef4(
|
|
|
998
1719
|
function NavIconButton2({ src, icon, alt, label, href, onClick, selected, badge, className, linkComponent }, forwardedRef) {
|
|
999
1720
|
const interactive = Boolean(onClick || href);
|
|
1000
1721
|
const showBadge = badge !== void 0 && badge !== null && badge !== false;
|
|
1001
|
-
return /* @__PURE__ */
|
|
1722
|
+
return /* @__PURE__ */ jsxs20(
|
|
1002
1723
|
NavClickable,
|
|
1003
1724
|
{
|
|
1004
1725
|
ref: forwardedRef,
|
|
@@ -1014,9 +1735,9 @@ var NavIconButton = forwardRef4(
|
|
|
1014
1735
|
className
|
|
1015
1736
|
),
|
|
1016
1737
|
children: [
|
|
1017
|
-
icon ? /* @__PURE__ */
|
|
1018
|
-
label ? /* @__PURE__ */
|
|
1019
|
-
showBadge ? /* @__PURE__ */
|
|
1738
|
+
icon ? /* @__PURE__ */ jsx36("span", { className: "inline-flex h-5 w-5 items-center justify-center", children: icon }) : src ? /* @__PURE__ */ jsx36("img", { src, alt: alt ?? label ?? "", className: "h-5 w-5" }) : null,
|
|
1739
|
+
label ? /* @__PURE__ */ jsx36("span", { className: cn("text-body2-regular", selected ? "text-white" : "text-secondary"), children: label }) : null,
|
|
1740
|
+
showBadge ? /* @__PURE__ */ jsx36(
|
|
1020
1741
|
"span",
|
|
1021
1742
|
{
|
|
1022
1743
|
"aria-hidden": badge === true,
|
|
@@ -1042,11 +1763,11 @@ var LowerPart = ({
|
|
|
1042
1763
|
if (lowerPartItemList.length === 0) {
|
|
1043
1764
|
return null;
|
|
1044
1765
|
}
|
|
1045
|
-
return /* @__PURE__ */
|
|
1766
|
+
return /* @__PURE__ */ jsx36(
|
|
1046
1767
|
"div",
|
|
1047
1768
|
{
|
|
1048
1769
|
className: cn("w-full h-9 px-4 flex items-center gap-4 border-t border-gray02", className),
|
|
1049
|
-
children: lowerPartItemList.map((item) => /* @__PURE__ */
|
|
1770
|
+
children: lowerPartItemList.map((item) => /* @__PURE__ */ jsx36(
|
|
1050
1771
|
LowerPartItemButton,
|
|
1051
1772
|
{
|
|
1052
1773
|
label: item.label,
|
|
@@ -1071,7 +1792,7 @@ var LowerPartItemButton = ({
|
|
|
1071
1792
|
linkComponent,
|
|
1072
1793
|
className
|
|
1073
1794
|
}) => {
|
|
1074
|
-
return /* @__PURE__ */
|
|
1795
|
+
return /* @__PURE__ */ jsx36(
|
|
1075
1796
|
NavClickable,
|
|
1076
1797
|
{
|
|
1077
1798
|
href,
|
|
@@ -1090,14 +1811,14 @@ var LowerPartItemButton = ({
|
|
|
1090
1811
|
};
|
|
1091
1812
|
|
|
1092
1813
|
// src/components/Toast/Toast.tsx
|
|
1093
|
-
import { forwardRef as forwardRef5, useEffect, useState as
|
|
1094
|
-
import { jsx as
|
|
1814
|
+
import { forwardRef as forwardRef5, useEffect as useEffect3, useState as useState7 } from "react";
|
|
1815
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
1095
1816
|
var EXIT_MS = 300;
|
|
1096
1817
|
var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose, position = "none", className }, ref) {
|
|
1097
1818
|
const controlled = open !== void 0;
|
|
1098
|
-
const [mounted, setMounted] =
|
|
1099
|
-
const [visible, setVisible] =
|
|
1100
|
-
|
|
1819
|
+
const [mounted, setMounted] = useState7(!controlled || open);
|
|
1820
|
+
const [visible, setVisible] = useState7(!controlled || open);
|
|
1821
|
+
useEffect3(() => {
|
|
1101
1822
|
if (!controlled) return;
|
|
1102
1823
|
if (open) {
|
|
1103
1824
|
setMounted(true);
|
|
@@ -1108,13 +1829,13 @@ var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose
|
|
|
1108
1829
|
const timer = setTimeout(() => setMounted(false), EXIT_MS);
|
|
1109
1830
|
return () => clearTimeout(timer);
|
|
1110
1831
|
}, [controlled, open]);
|
|
1111
|
-
|
|
1832
|
+
useEffect3(() => {
|
|
1112
1833
|
if (!controlled || !open || !duration) return;
|
|
1113
1834
|
const timer = setTimeout(() => onClose?.(), duration);
|
|
1114
1835
|
return () => clearTimeout(timer);
|
|
1115
1836
|
}, [controlled, open, duration, onClose]);
|
|
1116
1837
|
if (!mounted) return null;
|
|
1117
|
-
const banner = /* @__PURE__ */
|
|
1838
|
+
const banner = /* @__PURE__ */ jsx37(
|
|
1118
1839
|
"div",
|
|
1119
1840
|
{
|
|
1120
1841
|
ref,
|
|
@@ -1132,7 +1853,7 @@ var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose
|
|
|
1132
1853
|
}
|
|
1133
1854
|
);
|
|
1134
1855
|
if (position === "none") return banner;
|
|
1135
|
-
return /* @__PURE__ */
|
|
1856
|
+
return /* @__PURE__ */ jsx37(
|
|
1136
1857
|
"div",
|
|
1137
1858
|
{
|
|
1138
1859
|
className: cn(
|
|
@@ -1145,18 +1866,46 @@ var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose
|
|
|
1145
1866
|
});
|
|
1146
1867
|
export {
|
|
1147
1868
|
BackButton,
|
|
1869
|
+
BasicFormField,
|
|
1148
1870
|
CTA,
|
|
1149
1871
|
CategorySegment,
|
|
1150
1872
|
CategorySegmentedControl,
|
|
1873
|
+
Column,
|
|
1874
|
+
ColumnContentContainer,
|
|
1875
|
+
ColumnLabel,
|
|
1876
|
+
ColumnSubTitle,
|
|
1877
|
+
ColumnText,
|
|
1878
|
+
ColumnTextStyle,
|
|
1879
|
+
Dropdown,
|
|
1880
|
+
FormCheckBox,
|
|
1881
|
+
FormColor,
|
|
1882
|
+
FormFile,
|
|
1883
|
+
FormNumber,
|
|
1884
|
+
FormPassword,
|
|
1885
|
+
FormSelectBox,
|
|
1886
|
+
FormTel,
|
|
1887
|
+
FormText,
|
|
1888
|
+
FormTextArea,
|
|
1889
|
+
IconCheck,
|
|
1890
|
+
IconChevronDownXS,
|
|
1891
|
+
IconInfo,
|
|
1892
|
+
List,
|
|
1893
|
+
Modal,
|
|
1894
|
+
ModalText,
|
|
1895
|
+
ModalTextStyle,
|
|
1896
|
+
MultiColumn,
|
|
1151
1897
|
NoticeBadge,
|
|
1152
1898
|
NoticeBar,
|
|
1153
1899
|
SearchBar,
|
|
1900
|
+
SelectBoxOption,
|
|
1154
1901
|
SideRadioAccordion,
|
|
1155
1902
|
TNB,
|
|
1156
1903
|
Tag,
|
|
1904
|
+
TextButton,
|
|
1157
1905
|
Timetable,
|
|
1158
1906
|
TitleInput,
|
|
1159
1907
|
Toast,
|
|
1160
|
-
WeekNavigation
|
|
1908
|
+
WeekNavigation,
|
|
1909
|
+
getInputStyles
|
|
1161
1910
|
};
|
|
1162
1911
|
//# sourceMappingURL=index.mjs.map
|