@bestow-ui/react 0.10.0 → 0.12.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/README.md +30 -12
- package/dist/index.cjs +2097 -731
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1092 -754
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +480 -39
- package/dist/index.d.ts +480 -39
- package/dist/index.js +2066 -721
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -121,9 +121,12 @@ function createIntentColors(intent, color) {
|
|
|
121
121
|
subtleHover: rgba(darkSolid, 0.26),
|
|
122
122
|
text: findReadable(darkBase, Math.max(darkBase.l, 0.75), 0.02, [darkBg, darkSubtleOnBg, darkSubtleHoverOnBg])
|
|
123
123
|
};
|
|
124
|
+
const focusOn = (candidate, fallback2, bg) => contrastRatio(candidate, bg) >= 3 ? candidate : fallback2;
|
|
124
125
|
const focus = intent === "primary" ? {
|
|
125
|
-
light: { border: { focus: light.solid } },
|
|
126
|
-
dark: {
|
|
126
|
+
light: { border: { focus: focusOn(light.solid, light.text, lightColors.bg.default) } },
|
|
127
|
+
dark: {
|
|
128
|
+
border: { focus: focusOn(withL(darkBase, Math.min(1, darkBase.l + 0.06)), dark.text, darkBg) }
|
|
129
|
+
}
|
|
127
130
|
} : void 0;
|
|
128
131
|
return {
|
|
129
132
|
light: { color: { [intent]: light, ...focus?.light } },
|
|
@@ -146,9 +149,9 @@ function deepMerge(target, source) {
|
|
|
146
149
|
function createTheme(...inputs) {
|
|
147
150
|
let light = {};
|
|
148
151
|
let dark = {};
|
|
149
|
-
for (const
|
|
150
|
-
light = deepMerge(deepMerge(light,
|
|
151
|
-
dark = deepMerge(deepMerge(dark,
|
|
152
|
+
for (const input5 of inputs) {
|
|
153
|
+
light = deepMerge(deepMerge(light, input5.common), input5.light);
|
|
154
|
+
dark = deepMerge(deepMerge(dark, input5.common), input5.dark);
|
|
152
155
|
}
|
|
153
156
|
return Object.freeze({ light, dark });
|
|
154
157
|
}
|
|
@@ -218,6 +221,90 @@ function usePortalClassName() {
|
|
|
218
221
|
return usePortalProps().className;
|
|
219
222
|
}
|
|
220
223
|
|
|
224
|
+
// src/i18n/LocaleProvider.tsx
|
|
225
|
+
import { createContext as createContext2, useContext as useContext2, useMemo as useMemo2 } from "react";
|
|
226
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
227
|
+
var MessagesContext = /* @__PURE__ */ createContext2({});
|
|
228
|
+
function LocaleProvider({ messages, children }) {
|
|
229
|
+
const parent = useContext2(MessagesContext);
|
|
230
|
+
const value4 = useMemo2(() => ({ ...parent, ...messages }), [parent, messages]);
|
|
231
|
+
return /* @__PURE__ */ jsx2(MessagesContext.Provider, { value: value4, children });
|
|
232
|
+
}
|
|
233
|
+
function useMessages() {
|
|
234
|
+
return useContext2(MessagesContext);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// src/i18n/en.ts
|
|
238
|
+
var WEEKDAYS_LONG = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
|
239
|
+
var MONTHS = [
|
|
240
|
+
"January",
|
|
241
|
+
"February",
|
|
242
|
+
"March",
|
|
243
|
+
"April",
|
|
244
|
+
"May",
|
|
245
|
+
"June",
|
|
246
|
+
"July",
|
|
247
|
+
"August",
|
|
248
|
+
"September",
|
|
249
|
+
"October",
|
|
250
|
+
"November",
|
|
251
|
+
"December"
|
|
252
|
+
];
|
|
253
|
+
var en = {
|
|
254
|
+
close: "Close",
|
|
255
|
+
loading: "Loading",
|
|
256
|
+
notifications: "Notifications",
|
|
257
|
+
breadcrumb: "Breadcrumb",
|
|
258
|
+
pagination: "Pagination",
|
|
259
|
+
paginationPrevious: "Previous page",
|
|
260
|
+
paginationNext: "Next page",
|
|
261
|
+
paginationPage: (page) => `Page ${page}`,
|
|
262
|
+
newWindow: "(opens in a new window)",
|
|
263
|
+
noResults: "No results",
|
|
264
|
+
openList: "Show options",
|
|
265
|
+
rangeStart: "minimum",
|
|
266
|
+
rangeEnd: "maximum",
|
|
267
|
+
agreeAll: "Agree to all",
|
|
268
|
+
required: "Required",
|
|
269
|
+
optional: "Optional",
|
|
270
|
+
show: "View",
|
|
271
|
+
hide: "Hide",
|
|
272
|
+
verificationCode: "Verification code",
|
|
273
|
+
verificationCodeHint: (length, type) => `Enter the ${length}-${type === "numeric" ? "digit" : "character"} code.`,
|
|
274
|
+
resend: "Resend",
|
|
275
|
+
verificationExpired: "The code has expired. Please request a new one.",
|
|
276
|
+
phoneNumber: "Phone number",
|
|
277
|
+
businessNumber: "Business registration number",
|
|
278
|
+
businessNumberInvalid: "This business registration number is not valid. Please check it again.",
|
|
279
|
+
businessNumberIncomplete: "Enter all 10 digits.",
|
|
280
|
+
amount: "Amount",
|
|
281
|
+
currencyUnit: "KRW",
|
|
282
|
+
address: "Address",
|
|
283
|
+
addressSearch: "Find address",
|
|
284
|
+
addressSearchDescription: "Search by road name, building name, or lot number.",
|
|
285
|
+
postalCode: "Postal code",
|
|
286
|
+
baseAddress: "Address",
|
|
287
|
+
baseAddressPlaceholder: 'Select "Find address" to choose an address',
|
|
288
|
+
detailAddress: "Address line 2",
|
|
289
|
+
detailAddressPlaceholder: "Apartment, suite, unit, etc.",
|
|
290
|
+
addressLoading: "Loading address search",
|
|
291
|
+
addressLoadError: "Could not load address search. Please try again later.",
|
|
292
|
+
previousMonth: "Previous month",
|
|
293
|
+
nextMonth: "Next month",
|
|
294
|
+
monthTitle: (year, month) => `${MONTHS[month - 1]} ${year}`,
|
|
295
|
+
weekdaysShort: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
|
|
296
|
+
weekdaysLong: WEEKDAYS_LONG,
|
|
297
|
+
dayLabel: (date, weekdayLong) => `${date.getDate()}, ${weekdayLong}, ${MONTHS[date.getMonth()]} ${date.getFullYear()}`,
|
|
298
|
+
holiday: "holiday",
|
|
299
|
+
today: "today",
|
|
300
|
+
date: "Date",
|
|
301
|
+
openCalendar: "Choose date",
|
|
302
|
+
calendar: "Calendar",
|
|
303
|
+
dateInvalid: "This date does not exist.",
|
|
304
|
+
dateUnavailable: "This date is not available.",
|
|
305
|
+
dateIncomplete: "Enter the date as YYYY-MM-DD."
|
|
306
|
+
};
|
|
307
|
+
|
|
221
308
|
// src/components/Accordion/Accordion.tsx
|
|
222
309
|
import * as RadixAccordion from "@radix-ui/react-accordion";
|
|
223
310
|
import { ChevronDownIcon } from "@bestow-ui/icons";
|
|
@@ -233,40 +320,696 @@ var root2 = "v58j0l0";
|
|
|
233
320
|
var trigger = "v58j0l3";
|
|
234
321
|
|
|
235
322
|
// src/components/Accordion/Accordion.tsx
|
|
236
|
-
import { jsx as
|
|
323
|
+
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
237
324
|
var Accordion = /* @__PURE__ */ forwardRef2(function Accordion2({ className, ...props }, ref) {
|
|
238
325
|
const { collapsible, ...multipleProps } = props;
|
|
239
326
|
const typedProps = props.type === "multiple" ? multipleProps : { ...multipleProps, collapsible };
|
|
240
327
|
const rootProps = "value" in props ? { ...typedProps, value: props.value ?? (props.type === "multiple" ? [] : "") } : typedProps;
|
|
241
|
-
return /* @__PURE__ */
|
|
328
|
+
return /* @__PURE__ */ jsx3(RadixAccordion.Root, { ref, className: cx(root2, className), ...rootProps });
|
|
242
329
|
});
|
|
243
330
|
var AccordionItem = /* @__PURE__ */ forwardRef2(function AccordionItem2({ title: title6, headingLevel = 3, className, children, ...rest }, ref) {
|
|
244
331
|
const Heading = `h${headingLevel}`;
|
|
245
332
|
return /* @__PURE__ */ jsxs(RadixAccordion.Item, { ref, className: cx(item, className), ...rest, children: [
|
|
246
|
-
/* @__PURE__ */
|
|
333
|
+
/* @__PURE__ */ jsx3(RadixAccordion.Header, { asChild: true, children: /* @__PURE__ */ jsx3(Heading, { className: header, children: /* @__PURE__ */ jsxs(RadixAccordion.Trigger, { className: trigger, children: [
|
|
247
334
|
title6,
|
|
248
|
-
/* @__PURE__ */
|
|
335
|
+
/* @__PURE__ */ jsx3(ChevronDownIcon, { size: 18, className: chevron })
|
|
249
336
|
] }) }) }),
|
|
250
|
-
/* @__PURE__ */
|
|
337
|
+
/* @__PURE__ */ jsx3(RadixAccordion.Content, { className: content, children: /* @__PURE__ */ jsx3("div", { className: contentInner, children }) })
|
|
251
338
|
] });
|
|
252
339
|
});
|
|
253
340
|
|
|
254
|
-
// src/components/
|
|
341
|
+
// src/components/AddressInput/AddressInput.tsx
|
|
342
|
+
import { forwardRef as forwardRef7, useEffect, useId as useId2, useRef as useRef2, useState } from "react";
|
|
343
|
+
|
|
344
|
+
// src/components/Button/Button.tsx
|
|
345
|
+
import { forwardRef as forwardRef4 } from "react";
|
|
346
|
+
|
|
347
|
+
// src/components/Spinner/Spinner.tsx
|
|
348
|
+
import { LoaderIcon } from "@bestow-ui/icons";
|
|
255
349
|
import { forwardRef as forwardRef3 } from "react";
|
|
256
|
-
import { CircleAlertIcon, CircleCheckIcon, InfoIcon, TriangleAlertIcon, XIcon } from "@bestow-ui/icons";
|
|
257
350
|
|
|
258
|
-
// src/
|
|
351
|
+
// src/styles/visuallyHidden.css.ts
|
|
352
|
+
var visuallyHidden = "_1kdtbw10";
|
|
353
|
+
|
|
354
|
+
// src/components/Spinner/Spinner.css.ts
|
|
259
355
|
import { createRuntimeFn as _7a468 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
356
|
+
var spinner = /* @__PURE__ */ _7a468({ defaultClassName: "_4b5tg40", variantClassNames: { color: { inherit: "_4b5tg41", primary: "_4b5tg42", neutral: "_4b5tg43", danger: "_4b5tg44" }, size: { sm: "_4b5tg45", md: "_4b5tg46", lg: "_4b5tg47" } }, defaultVariants: { color: "inherit", size: "md" }, compoundVariants: [] });
|
|
357
|
+
|
|
358
|
+
// src/utils/warnOnce.ts
|
|
359
|
+
var warned = /* @__PURE__ */ new Set();
|
|
360
|
+
function warnOnce(message) {
|
|
361
|
+
if (typeof process !== "undefined" && process.env.NODE_ENV === "production") return;
|
|
362
|
+
if (warned.has(message)) return;
|
|
363
|
+
warned.add(message);
|
|
364
|
+
console.warn(`[BestOW UI] ${message}`);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// src/components/Spinner/Spinner.tsx
|
|
368
|
+
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
369
|
+
var Spinner = /* @__PURE__ */ forwardRef3(function Spinner2({ size, color, label: labelProp, className, ...rest }, ref) {
|
|
370
|
+
const m = useMessages();
|
|
371
|
+
if (color === "current") {
|
|
372
|
+
warnOnce('Spinner \uC758 color="current" \uB294 deprecated \uC608\uC694. color="inherit" \uB97C \uC4F0\uC138\uC694 (1.0 \uC5D0\uC11C \uC81C\uAC70).');
|
|
373
|
+
color = "inherit";
|
|
374
|
+
}
|
|
375
|
+
const label6 = labelProp ?? m.loading ?? "\uB85C\uB529 \uC911";
|
|
376
|
+
const a11y = label6 ? { role: "status" } : { "aria-hidden": true };
|
|
377
|
+
return /* @__PURE__ */ jsxs2("span", { ref, className: cx(spinner({ size, color }), className), ...a11y, ...rest, children: [
|
|
378
|
+
/* @__PURE__ */ jsx4(LoaderIcon, { size: "100%" }),
|
|
379
|
+
label6 && /* @__PURE__ */ jsx4("span", { className: visuallyHidden, children: label6 })
|
|
380
|
+
] });
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
// src/components/Button/Button.css.ts
|
|
384
|
+
import { createRuntimeFn as _7a4682 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
385
|
+
var button = /* @__PURE__ */ _7a4682({ defaultClassName: "xcekda6", variantClassNames: { variant: { solid: "xcekda7", soft: "xcekda8", outline: "xcekda9", ghost: "xcekdaa" }, color: { primary: "xcekdab", neutral: "xcekdac", danger: "xcekdad" }, size: { sm: "xcekdae", md: "xcekdaf", lg: "xcekdag" }, fullWidth: { true: "xcekdah" } }, defaultVariants: { variant: "solid", color: "primary", size: "md" }, compoundVariants: [] });
|
|
386
|
+
var icon = "xcekdai";
|
|
387
|
+
|
|
388
|
+
// src/components/Button/Button.tsx
|
|
389
|
+
import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
390
|
+
var Button = /* @__PURE__ */ forwardRef4(function Button2({
|
|
391
|
+
variant,
|
|
392
|
+
color,
|
|
393
|
+
size,
|
|
394
|
+
fullWidth,
|
|
395
|
+
startIcon,
|
|
396
|
+
endIcon,
|
|
397
|
+
loading: loading2,
|
|
398
|
+
className,
|
|
399
|
+
type = "button",
|
|
400
|
+
onClick,
|
|
401
|
+
children,
|
|
402
|
+
...rest
|
|
403
|
+
}, ref) {
|
|
404
|
+
const handleClick = (event) => {
|
|
405
|
+
if (loading2) {
|
|
406
|
+
event.preventDefault();
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
onClick?.(event);
|
|
410
|
+
};
|
|
411
|
+
const leading = loading2 ? /* @__PURE__ */ jsx5(Spinner, { size: "sm", label: "" }) : startIcon;
|
|
412
|
+
return /* @__PURE__ */ jsxs3(
|
|
413
|
+
"button",
|
|
414
|
+
{
|
|
415
|
+
ref,
|
|
416
|
+
type,
|
|
417
|
+
className: cx(button({ variant, color, size, fullWidth }), className),
|
|
418
|
+
"aria-busy": loading2 || void 0,
|
|
419
|
+
"aria-disabled": loading2 || void 0,
|
|
420
|
+
onClick: handleClick,
|
|
421
|
+
...rest,
|
|
422
|
+
children: [
|
|
423
|
+
leading && /* @__PURE__ */ jsx5("span", { className: icon, children: leading }),
|
|
424
|
+
children,
|
|
425
|
+
endIcon && /* @__PURE__ */ jsx5("span", { className: icon, children: endIcon })
|
|
426
|
+
]
|
|
427
|
+
}
|
|
428
|
+
);
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
// src/components/Input/Input.css.ts
|
|
432
|
+
import { createRuntimeFn as _7a4683 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
433
|
+
var adornment = "_19p5zvh6";
|
|
434
|
+
var field = "_19p5zvh7";
|
|
435
|
+
var fieldFullWidth = "_19p5zvh8";
|
|
436
|
+
var helperText = /* @__PURE__ */ _7a4683({ defaultClassName: "_19p5zvhb", variantClassNames: { error: { true: "_19p5zvhc" } }, defaultVariants: {}, compoundVariants: [] });
|
|
437
|
+
var input = "_19p5zvh5";
|
|
438
|
+
var label = "_19p5zvh9";
|
|
439
|
+
var requiredMark = "_19p5zvha";
|
|
440
|
+
var root3 = /* @__PURE__ */ _7a4683({ defaultClassName: "_19p5zvh0", variantClassNames: { size: { sm: "_19p5zvh1", md: "_19p5zvh2", lg: "_19p5zvh3" }, fullWidth: { true: "_19p5zvh4" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
441
|
+
|
|
442
|
+
// src/components/Input/Input.tsx
|
|
443
|
+
import { forwardRef as forwardRef5 } from "react";
|
|
444
|
+
import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
445
|
+
var Input = /* @__PURE__ */ forwardRef5(function Input2({ size, invalid, fullWidth, startAdornment, endAdornment, rootClassName, className, disabled, ...rest }, ref) {
|
|
446
|
+
return /* @__PURE__ */ jsxs4(
|
|
447
|
+
"div",
|
|
448
|
+
{
|
|
449
|
+
className: cx(root3({ size, fullWidth }), rootClassName),
|
|
450
|
+
"data-invalid": invalid || void 0,
|
|
451
|
+
"data-disabled": disabled || void 0,
|
|
452
|
+
children: [
|
|
453
|
+
startAdornment && /* @__PURE__ */ jsx6("span", { className: adornment, children: startAdornment }),
|
|
454
|
+
/* @__PURE__ */ jsx6(
|
|
455
|
+
"input",
|
|
456
|
+
{
|
|
457
|
+
ref,
|
|
458
|
+
className: cx(input, className),
|
|
459
|
+
disabled,
|
|
460
|
+
"aria-invalid": invalid || void 0,
|
|
461
|
+
...rest
|
|
462
|
+
}
|
|
463
|
+
),
|
|
464
|
+
endAdornment && /* @__PURE__ */ jsx6("span", { className: adornment, children: endAdornment })
|
|
465
|
+
]
|
|
466
|
+
}
|
|
467
|
+
);
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
// src/components/Input/TextField.tsx
|
|
471
|
+
import { forwardRef as forwardRef6, useId } from "react";
|
|
472
|
+
import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
473
|
+
var TextField = /* @__PURE__ */ forwardRef6(function TextField2({ label: label6, helperText: helperText3, error, required, fullWidth, id, "aria-describedby": ariaDescribedBy, ...rest }, ref) {
|
|
474
|
+
const generatedId = useId();
|
|
475
|
+
const inputId = id ?? generatedId;
|
|
476
|
+
const helperId = helperText3 ? `${inputId}-helper` : void 0;
|
|
477
|
+
return /* @__PURE__ */ jsxs5("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
|
|
478
|
+
label6 && /* @__PURE__ */ jsxs5("label", { htmlFor: inputId, className: label, children: [
|
|
479
|
+
label6,
|
|
480
|
+
required && /* @__PURE__ */ jsx7("span", { className: requiredMark, "aria-hidden": true, children: "*" })
|
|
481
|
+
] }),
|
|
482
|
+
/* @__PURE__ */ jsx7(
|
|
483
|
+
Input,
|
|
484
|
+
{
|
|
485
|
+
ref,
|
|
486
|
+
id: inputId,
|
|
487
|
+
invalid: error,
|
|
488
|
+
required,
|
|
489
|
+
fullWidth,
|
|
490
|
+
"aria-describedby": cx(helperId, ariaDescribedBy) || void 0,
|
|
491
|
+
...rest
|
|
492
|
+
}
|
|
493
|
+
),
|
|
494
|
+
helperText3 && /* @__PURE__ */ jsx7("p", { id: helperId, className: helperText({ error }), children: helperText3 })
|
|
495
|
+
] });
|
|
496
|
+
});
|
|
497
|
+
|
|
498
|
+
// src/components/Modal/Modal.tsx
|
|
499
|
+
import * as Dialog from "@radix-ui/react-dialog";
|
|
500
|
+
import { XIcon } from "@bestow-ui/icons";
|
|
501
|
+
|
|
502
|
+
// src/utils/useReturnFocus.ts
|
|
503
|
+
import { useRef } from "react";
|
|
504
|
+
function useReturnFocus(hasTrigger, onCloseAutoFocus) {
|
|
505
|
+
const returnTo = useRef(null);
|
|
506
|
+
return {
|
|
507
|
+
onOpenAutoFocus: () => {
|
|
508
|
+
returnTo.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
509
|
+
},
|
|
510
|
+
onCloseAutoFocus: (event) => {
|
|
511
|
+
onCloseAutoFocus?.(event);
|
|
512
|
+
if (event.defaultPrevented || hasTrigger) return;
|
|
513
|
+
const target = returnTo.current;
|
|
514
|
+
if (target && target.isConnected && target !== document.body) {
|
|
515
|
+
event.preventDefault();
|
|
516
|
+
target.focus();
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
// src/components/Modal/Modal.css.ts
|
|
523
|
+
import { createRuntimeFn as _7a4684 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
524
|
+
var body = "_1pdsmv0a";
|
|
525
|
+
var closeButton = "_1pdsmv09";
|
|
526
|
+
var content2 = /* @__PURE__ */ _7a4684({ defaultClassName: "_1pdsmv01", variantClassNames: { size: { sm: "_1pdsmv02", md: "_1pdsmv03", lg: "_1pdsmv04" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
527
|
+
var description = "_1pdsmv08";
|
|
528
|
+
var footer = "_1pdsmv0b";
|
|
529
|
+
var header2 = "_1pdsmv05";
|
|
530
|
+
var headings = "_1pdsmv06";
|
|
531
|
+
var overlay = "_1pdsmv00";
|
|
532
|
+
var title = "_1pdsmv07";
|
|
533
|
+
|
|
534
|
+
// src/components/Modal/Modal.tsx
|
|
535
|
+
import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
536
|
+
function Modal({
|
|
537
|
+
open,
|
|
538
|
+
defaultOpen,
|
|
539
|
+
onOpenChange,
|
|
540
|
+
trigger: trigger4,
|
|
541
|
+
title: title6,
|
|
542
|
+
description: description6,
|
|
543
|
+
children,
|
|
544
|
+
footer: footer6,
|
|
545
|
+
size,
|
|
546
|
+
hideCloseButton = false,
|
|
547
|
+
closeOnOverlayClick = true,
|
|
548
|
+
className,
|
|
549
|
+
onCloseAutoFocus
|
|
550
|
+
}) {
|
|
551
|
+
const portal2 = usePortalProps();
|
|
552
|
+
const m = useMessages();
|
|
553
|
+
const focus = useReturnFocus(Boolean(trigger4), onCloseAutoFocus);
|
|
554
|
+
return /* @__PURE__ */ jsxs6(Dialog.Root, { open, defaultOpen, onOpenChange, children: [
|
|
555
|
+
trigger4 && /* @__PURE__ */ jsx8(Dialog.Trigger, { asChild: true, children: trigger4 }),
|
|
556
|
+
/* @__PURE__ */ jsxs6(Dialog.Portal, { children: [
|
|
557
|
+
/* @__PURE__ */ jsx8(Dialog.Overlay, { className: cx(portal2.className, overlay), style: portal2.style }),
|
|
558
|
+
/* @__PURE__ */ jsxs6(
|
|
559
|
+
Dialog.Content,
|
|
560
|
+
{
|
|
561
|
+
className: cx(portal2.className, content2({ size }), className),
|
|
562
|
+
style: portal2.style,
|
|
563
|
+
onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
|
|
564
|
+
onOpenAutoFocus: focus.onOpenAutoFocus,
|
|
565
|
+
onCloseAutoFocus: focus.onCloseAutoFocus,
|
|
566
|
+
...description6 ? {} : { "aria-describedby": void 0 },
|
|
567
|
+
children: [
|
|
568
|
+
/* @__PURE__ */ jsxs6("div", { className: header2, children: [
|
|
569
|
+
/* @__PURE__ */ jsxs6("div", { className: headings, children: [
|
|
570
|
+
/* @__PURE__ */ jsx8(Dialog.Title, { className: title, children: title6 }),
|
|
571
|
+
description6 && /* @__PURE__ */ jsx8(Dialog.Description, { className: description, children: description6 })
|
|
572
|
+
] }),
|
|
573
|
+
!hideCloseButton && /* @__PURE__ */ jsx8(Dialog.Close, { className: closeButton, "aria-label": m.close ?? "\uB2EB\uAE30", children: /* @__PURE__ */ jsx8(XIcon, { size: 16 }) })
|
|
574
|
+
] }),
|
|
575
|
+
children && /* @__PURE__ */ jsx8("div", { className: body, children }),
|
|
576
|
+
footer6 && /* @__PURE__ */ jsx8("div", { className: footer, children: footer6 })
|
|
577
|
+
]
|
|
578
|
+
}
|
|
579
|
+
)
|
|
580
|
+
] })
|
|
581
|
+
] });
|
|
582
|
+
}
|
|
583
|
+
var ModalClose = Dialog.Close;
|
|
584
|
+
|
|
585
|
+
// src/components/AddressInput/addressProviders.ts
|
|
586
|
+
var KAKAO_POSTCODE_SRC = "https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js";
|
|
587
|
+
var loading = null;
|
|
588
|
+
function loadKakaoPostcode() {
|
|
589
|
+
const w = window;
|
|
590
|
+
const existing = w.kakao?.Postcode ?? w.daum?.Postcode;
|
|
591
|
+
if (existing) return Promise.resolve(existing);
|
|
592
|
+
loading ?? (loading = new Promise((resolve, reject) => {
|
|
593
|
+
const script = document.createElement("script");
|
|
594
|
+
script.src = KAKAO_POSTCODE_SRC;
|
|
595
|
+
script.async = true;
|
|
596
|
+
script.onload = () => {
|
|
597
|
+
const ctor = w.kakao?.Postcode ?? w.daum?.Postcode;
|
|
598
|
+
if (ctor) resolve(ctor);
|
|
599
|
+
else reject(new Error("\uC6B0\uD3B8\uBC88\uD638 \uC11C\uBE44\uC2A4\uB97C \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694"));
|
|
600
|
+
};
|
|
601
|
+
script.onerror = () => {
|
|
602
|
+
loading = null;
|
|
603
|
+
reject(new Error("\uC6B0\uD3B8\uBC88\uD638 \uC11C\uBE44\uC2A4\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694"));
|
|
604
|
+
};
|
|
605
|
+
document.head.appendChild(script);
|
|
606
|
+
}));
|
|
607
|
+
return loading;
|
|
608
|
+
}
|
|
609
|
+
function composeExtraAddress(data) {
|
|
610
|
+
if (data.userSelectedType !== "R") return "";
|
|
611
|
+
const parts = [];
|
|
612
|
+
if (data.bname && /[동로가]$/.test(data.bname)) parts.push(data.bname);
|
|
613
|
+
if (data.buildingName && data.apartment === "Y") parts.push(data.buildingName);
|
|
614
|
+
return parts.length ? ` (${parts.join(", ")})` : "";
|
|
615
|
+
}
|
|
616
|
+
var kakaoPostcodeProvider = async (container2, onSelect) => {
|
|
617
|
+
const Postcode = await loadKakaoPostcode();
|
|
618
|
+
new Postcode({
|
|
619
|
+
width: "100%",
|
|
620
|
+
height: "100%",
|
|
621
|
+
oncomplete: (data) => {
|
|
622
|
+
const address = data.userSelectedType === "R" ? data.roadAddress : data.jibunAddress || data.autoJibunAddress || "";
|
|
623
|
+
onSelect({ zonecode: data.zonecode, address, extraAddress: composeExtraAddress(data) });
|
|
624
|
+
}
|
|
625
|
+
}).embed(container2);
|
|
626
|
+
};
|
|
627
|
+
|
|
628
|
+
// src/components/AddressInput/AddressInput.css.ts
|
|
629
|
+
var fieldset = "_16fi7uy0";
|
|
630
|
+
var legend = "_16fi7uy1";
|
|
631
|
+
var row = "_16fi7uy2";
|
|
632
|
+
var searchArea = "_16fi7uy4";
|
|
633
|
+
var searchStatus = "_16fi7uy5";
|
|
634
|
+
var zonecode = "_16fi7uy3";
|
|
635
|
+
|
|
636
|
+
// src/components/AddressInput/AddressInput.tsx
|
|
637
|
+
import { Fragment, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
638
|
+
var EMPTY = { zonecode: "", address: "", extraAddress: "", detail: "" };
|
|
639
|
+
function SearchArea({
|
|
640
|
+
provider,
|
|
641
|
+
onSelect,
|
|
642
|
+
loadErrorText,
|
|
643
|
+
loadingText
|
|
644
|
+
}) {
|
|
645
|
+
const containerRef = useRef2(null);
|
|
646
|
+
const [status, setStatus] = useState("loading");
|
|
647
|
+
const onSelectRef = useRef2(onSelect);
|
|
648
|
+
useEffect(() => {
|
|
649
|
+
onSelectRef.current = onSelect;
|
|
650
|
+
});
|
|
651
|
+
useEffect(() => {
|
|
652
|
+
const container2 = containerRef.current;
|
|
653
|
+
if (!container2) return;
|
|
654
|
+
let cleanup;
|
|
655
|
+
let cancelled = false;
|
|
656
|
+
Promise.resolve().then(() => provider(container2, (result) => onSelectRef.current(result))).then((fn) => {
|
|
657
|
+
if (cancelled) fn?.();
|
|
658
|
+
else {
|
|
659
|
+
cleanup = fn;
|
|
660
|
+
setStatus("ready");
|
|
661
|
+
}
|
|
662
|
+
}).catch(() => !cancelled && setStatus("error"));
|
|
663
|
+
return () => {
|
|
664
|
+
cancelled = true;
|
|
665
|
+
cleanup?.();
|
|
666
|
+
};
|
|
667
|
+
}, [provider]);
|
|
668
|
+
return /* @__PURE__ */ jsxs7("div", { className: searchArea, children: [
|
|
669
|
+
/* @__PURE__ */ jsx9("div", { ref: containerRef, style: { width: "100%", height: "100%" } }),
|
|
670
|
+
status !== "ready" && /* @__PURE__ */ jsx9("div", { className: searchStatus, role: "status", children: status === "loading" ? /* @__PURE__ */ jsx9(Spinner, { label: loadingText }) : loadErrorText })
|
|
671
|
+
] });
|
|
672
|
+
}
|
|
673
|
+
var AddressInput = /* @__PURE__ */ forwardRef7(
|
|
674
|
+
function AddressInput2(props, ref) {
|
|
675
|
+
const {
|
|
676
|
+
value: value4,
|
|
677
|
+
defaultValue,
|
|
678
|
+
onValueChange,
|
|
679
|
+
label: labelProp,
|
|
680
|
+
required,
|
|
681
|
+
helperText: helperText3,
|
|
682
|
+
error,
|
|
683
|
+
disabled,
|
|
684
|
+
provider = kakaoPostcodeProvider,
|
|
685
|
+
searchLabel: searchLabelProp,
|
|
686
|
+
detailPlaceholder: detailPlaceholderProp,
|
|
687
|
+
loadErrorText: loadErrorTextProp,
|
|
688
|
+
name,
|
|
689
|
+
className
|
|
690
|
+
} = props;
|
|
691
|
+
const m = useMessages();
|
|
692
|
+
const label6 = labelProp ?? m.address ?? "\uC8FC\uC18C";
|
|
693
|
+
const searchLabel = searchLabelProp ?? m.addressSearch ?? "\uC8FC\uC18C \uAC80\uC0C9";
|
|
694
|
+
const detailPlaceholder = detailPlaceholderProp ?? m.detailAddressPlaceholder ?? "\uC0C1\uC138 \uC8FC\uC18C (\uB3D9\xB7\uD638\uC218 \uB4F1)";
|
|
695
|
+
const loadErrorText = loadErrorTextProp ?? m.addressLoadError ?? "\uC8FC\uC18C \uAC80\uC0C9\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694. \uC7A0\uC2DC \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.";
|
|
696
|
+
const baseId = useId2();
|
|
697
|
+
const helperId = helperText3 ? `${baseId}-helper` : void 0;
|
|
698
|
+
const detailRef = useRef2(null);
|
|
699
|
+
const selectedRef = useRef2(false);
|
|
700
|
+
const [open, setOpen] = useState(false);
|
|
701
|
+
const isControlled = "value" in props;
|
|
702
|
+
const [innerValue, setInnerValue] = useState(defaultValue ?? EMPTY);
|
|
703
|
+
const current2 = isControlled ? value4 ?? EMPTY : innerValue;
|
|
704
|
+
const update = (next) => {
|
|
705
|
+
if (!isControlled) setInnerValue(next);
|
|
706
|
+
onValueChange?.(next);
|
|
707
|
+
};
|
|
708
|
+
const openSearch = () => {
|
|
709
|
+
if (disabled) return;
|
|
710
|
+
selectedRef.current = false;
|
|
711
|
+
setOpen(true);
|
|
712
|
+
};
|
|
713
|
+
const handleSelect = (result) => {
|
|
714
|
+
selectedRef.current = true;
|
|
715
|
+
update({
|
|
716
|
+
...current2,
|
|
717
|
+
zonecode: result.zonecode,
|
|
718
|
+
address: result.address,
|
|
719
|
+
extraAddress: result.extraAddress ?? ""
|
|
720
|
+
});
|
|
721
|
+
setOpen(false);
|
|
722
|
+
};
|
|
723
|
+
const fullAddress = `${current2.address}${current2.extraAddress ?? ""}`;
|
|
724
|
+
return /* @__PURE__ */ jsxs7("fieldset", { ref, className: cx(fieldset, className), disabled, "aria-describedby": helperId, children: [
|
|
725
|
+
/* @__PURE__ */ jsxs7("legend", { className: legend, children: [
|
|
726
|
+
label6,
|
|
727
|
+
required && /* @__PURE__ */ jsx9("span", { className: requiredMark, "aria-hidden": true, children: "*" })
|
|
728
|
+
] }),
|
|
729
|
+
/* @__PURE__ */ jsxs7("div", { className: row, children: [
|
|
730
|
+
/* @__PURE__ */ jsx9(
|
|
731
|
+
TextField,
|
|
732
|
+
{
|
|
733
|
+
"aria-label": m.postalCode ?? "\uC6B0\uD3B8\uBC88\uD638",
|
|
734
|
+
readOnly: true,
|
|
735
|
+
value: current2.zonecode,
|
|
736
|
+
placeholder: m.postalCode ?? "\uC6B0\uD3B8\uBC88\uD638",
|
|
737
|
+
error: error && !current2.zonecode,
|
|
738
|
+
"aria-required": required || void 0,
|
|
739
|
+
rootClassName: zonecode,
|
|
740
|
+
onClick: openSearch
|
|
741
|
+
}
|
|
742
|
+
),
|
|
743
|
+
/* @__PURE__ */ jsx9(Button, { variant: "outline", color: "neutral", onClick: openSearch, disabled, children: searchLabel })
|
|
744
|
+
] }),
|
|
745
|
+
/* @__PURE__ */ jsx9(
|
|
746
|
+
TextField,
|
|
747
|
+
{
|
|
748
|
+
"aria-label": m.baseAddress ?? "\uAE30\uBCF8 \uC8FC\uC18C",
|
|
749
|
+
readOnly: true,
|
|
750
|
+
value: fullAddress,
|
|
751
|
+
placeholder: m.baseAddressPlaceholder ?? `${searchLabel}\uC744 \uB20C\uB7EC \uC8FC\uC18C\uB97C \uACE0\uB974\uC138\uC694`,
|
|
752
|
+
error: error && !current2.address,
|
|
753
|
+
"aria-required": required || void 0,
|
|
754
|
+
fullWidth: true,
|
|
755
|
+
onClick: openSearch
|
|
756
|
+
}
|
|
757
|
+
),
|
|
758
|
+
/* @__PURE__ */ jsx9(
|
|
759
|
+
TextField,
|
|
760
|
+
{
|
|
761
|
+
ref: detailRef,
|
|
762
|
+
"aria-label": m.detailAddress ?? "\uC0C1\uC138 \uC8FC\uC18C",
|
|
763
|
+
value: current2.detail,
|
|
764
|
+
placeholder: detailPlaceholder,
|
|
765
|
+
onChange: (event) => update({ ...current2, detail: event.target.value }),
|
|
766
|
+
autoComplete: "address-line2",
|
|
767
|
+
fullWidth: true
|
|
768
|
+
}
|
|
769
|
+
),
|
|
770
|
+
helperText3 && /* @__PURE__ */ jsx9("p", { id: helperId, className: helperText({ error }), children: helperText3 }),
|
|
771
|
+
name && /* @__PURE__ */ jsxs7(Fragment, { children: [
|
|
772
|
+
/* @__PURE__ */ jsx9("input", { type: "hidden", name: `${name}[zonecode]`, value: current2.zonecode }),
|
|
773
|
+
/* @__PURE__ */ jsx9("input", { type: "hidden", name: `${name}[address]`, value: fullAddress }),
|
|
774
|
+
/* @__PURE__ */ jsx9("input", { type: "hidden", name: `${name}[detail]`, value: current2.detail })
|
|
775
|
+
] }),
|
|
776
|
+
/* @__PURE__ */ jsx9(
|
|
777
|
+
Modal,
|
|
778
|
+
{
|
|
779
|
+
open,
|
|
780
|
+
onOpenChange: setOpen,
|
|
781
|
+
title: searchLabel,
|
|
782
|
+
description: m.addressSearchDescription ?? "\uB3C4\uB85C\uBA85, \uAC74\uBB3C\uBA85, \uC9C0\uBC88\uC73C\uB85C \uAC80\uC0C9\uD560 \uC218 \uC788\uC5B4\uC694.",
|
|
783
|
+
onCloseAutoFocus: (event) => {
|
|
784
|
+
if (selectedRef.current) {
|
|
785
|
+
event.preventDefault();
|
|
786
|
+
detailRef.current?.focus();
|
|
787
|
+
}
|
|
788
|
+
},
|
|
789
|
+
children: /* @__PURE__ */ jsx9(
|
|
790
|
+
SearchArea,
|
|
791
|
+
{
|
|
792
|
+
provider,
|
|
793
|
+
onSelect: handleSelect,
|
|
794
|
+
loadErrorText,
|
|
795
|
+
loadingText: m.addressLoading ?? "\uC8FC\uC18C \uAC80\uC0C9\uC744 \uBD88\uB7EC\uC624\uB294 \uC911"
|
|
796
|
+
}
|
|
797
|
+
)
|
|
798
|
+
}
|
|
799
|
+
)
|
|
800
|
+
] });
|
|
801
|
+
}
|
|
802
|
+
);
|
|
803
|
+
|
|
804
|
+
// src/components/AgreementGroup/AgreementGroup.tsx
|
|
805
|
+
import { forwardRef as forwardRef9, useId as useId3, useState as useState2 } from "react";
|
|
806
|
+
import { ChevronDownIcon as ChevronDownIcon2 } from "@bestow-ui/icons";
|
|
807
|
+
|
|
808
|
+
// src/components/Checkbox/Checkbox.tsx
|
|
809
|
+
import { forwardRef as forwardRef8, useEffect as useEffect2, useRef as useRef3 } from "react";
|
|
810
|
+
|
|
811
|
+
// src/utils/mergeRefs.ts
|
|
812
|
+
function mergeRefs(...refs) {
|
|
813
|
+
return (value4) => {
|
|
814
|
+
for (const ref of refs) {
|
|
815
|
+
if (typeof ref === "function") ref(value4);
|
|
816
|
+
else if (ref) ref.current = value4;
|
|
817
|
+
}
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
// src/components/Checkbox/Checkbox.css.ts
|
|
822
|
+
import { createRuntimeFn as _7a4685 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
823
|
+
var checkIcon = "_1y7mzsn8 _1y7mzsn7";
|
|
824
|
+
var control = /* @__PURE__ */ _7a4685({ defaultClassName: "_1y7mzsn3", variantClassNames: { size: { sm: "_1y7mzsn4", md: "_1y7mzsn5" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
825
|
+
var indeterminateIcon = "_1y7mzsn9 _1y7mzsn7";
|
|
826
|
+
var input2 = "_1y7mzsn6";
|
|
827
|
+
var root4 = /* @__PURE__ */ _7a4685({ defaultClassName: "_1y7mzsn0", variantClassNames: { size: { sm: "_1y7mzsn1", md: "_1y7mzsn2" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
828
|
+
|
|
829
|
+
// src/components/Checkbox/Checkbox.tsx
|
|
830
|
+
import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
831
|
+
var Checkbox = /* @__PURE__ */ forwardRef8(function Checkbox2({ label: label6, size, indeterminate = false, invalid, disabled, onChange, onCheckedChange, className, ...rest }, ref) {
|
|
832
|
+
const innerRef = useRef3(null);
|
|
833
|
+
useEffect2(() => {
|
|
834
|
+
if (innerRef.current) innerRef.current.indeterminate = indeterminate;
|
|
835
|
+
}, [indeterminate]);
|
|
836
|
+
return /* @__PURE__ */ jsxs8("label", { className: cx(root4({ size }), className), "data-disabled": disabled || void 0, children: [
|
|
837
|
+
/* @__PURE__ */ jsxs8("span", { className: control({ size }), children: [
|
|
838
|
+
/* @__PURE__ */ jsx10(
|
|
839
|
+
"input",
|
|
840
|
+
{
|
|
841
|
+
ref: mergeRefs(innerRef, ref),
|
|
842
|
+
type: "checkbox",
|
|
843
|
+
className: input2,
|
|
844
|
+
disabled,
|
|
845
|
+
"aria-invalid": invalid || void 0,
|
|
846
|
+
onChange: (event) => {
|
|
847
|
+
onChange?.(event);
|
|
848
|
+
onCheckedChange?.(event.target.checked);
|
|
849
|
+
},
|
|
850
|
+
...rest
|
|
851
|
+
}
|
|
852
|
+
),
|
|
853
|
+
/* @__PURE__ */ jsx10("svg", { className: checkIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx10(
|
|
854
|
+
"path",
|
|
855
|
+
{
|
|
856
|
+
d: "M5 10.5l3.2 3L15 7",
|
|
857
|
+
stroke: "currentColor",
|
|
858
|
+
strokeWidth: "2",
|
|
859
|
+
strokeLinecap: "round",
|
|
860
|
+
strokeLinejoin: "round"
|
|
861
|
+
}
|
|
862
|
+
) }),
|
|
863
|
+
/* @__PURE__ */ jsx10("svg", { className: indeterminateIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx10("path", { d: "M6 10h8", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) })
|
|
864
|
+
] }),
|
|
865
|
+
label6
|
|
866
|
+
] });
|
|
867
|
+
});
|
|
868
|
+
|
|
869
|
+
// src/components/AgreementGroup/AgreementGroup.css.ts
|
|
870
|
+
var all = "j3uxdc3";
|
|
871
|
+
var box = "j3uxdc2";
|
|
872
|
+
var chevron2 = "j3uxdc9";
|
|
873
|
+
var content3 = "j3uxdca";
|
|
874
|
+
var fieldset2 = "j3uxdc0";
|
|
875
|
+
var item2 = "j3uxdc5";
|
|
876
|
+
var legend2 = "j3uxdc1";
|
|
877
|
+
var list = "j3uxdc4";
|
|
878
|
+
var row2 = "j3uxdc6";
|
|
879
|
+
var tag = "j3uxdc7";
|
|
880
|
+
var toggle = "j3uxdc8";
|
|
881
|
+
|
|
882
|
+
// src/components/AgreementGroup/AgreementGroup.tsx
|
|
883
|
+
import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
884
|
+
function hasAllRequiredAgreements(items2, value4) {
|
|
885
|
+
return items2.every((item7) => !item7.required || value4.includes(item7.value));
|
|
886
|
+
}
|
|
887
|
+
var AgreementGroup = /* @__PURE__ */ forwardRef9(
|
|
888
|
+
function AgreementGroup2(props, ref) {
|
|
889
|
+
const {
|
|
890
|
+
items: items2,
|
|
891
|
+
value: value4,
|
|
892
|
+
defaultValue,
|
|
893
|
+
onValueChange,
|
|
894
|
+
label: label6,
|
|
895
|
+
allLabel: allLabelProp,
|
|
896
|
+
helperText: helperText3,
|
|
897
|
+
error,
|
|
898
|
+
disabled,
|
|
899
|
+
requiredText: requiredTextProp,
|
|
900
|
+
optionalText: optionalTextProp,
|
|
901
|
+
showText: showTextProp,
|
|
902
|
+
hideText: hideTextProp,
|
|
903
|
+
name,
|
|
904
|
+
className
|
|
905
|
+
} = props;
|
|
906
|
+
const m = useMessages();
|
|
907
|
+
const allLabel = allLabelProp ?? m.agreeAll ?? "\uC804\uCCB4 \uB3D9\uC758";
|
|
908
|
+
const requiredText = requiredTextProp ?? m.required ?? "\uD544\uC218";
|
|
909
|
+
const optionalText = optionalTextProp ?? m.optional ?? "\uC120\uD0DD";
|
|
910
|
+
const showText = showTextProp ?? m.show ?? "\uBCF4\uAE30";
|
|
911
|
+
const hideText = hideTextProp ?? m.hide ?? "\uC811\uAE30";
|
|
912
|
+
const baseId = useId3();
|
|
913
|
+
const helperId = helperText3 ? `${baseId}-helper` : void 0;
|
|
914
|
+
const isControlled = "value" in props;
|
|
915
|
+
const [innerValue, setInnerValue] = useState2(defaultValue ?? []);
|
|
916
|
+
const agreed = isControlled ? value4 ?? [] : innerValue;
|
|
917
|
+
const [expanded, setExpanded] = useState2([]);
|
|
918
|
+
const update = (next) => {
|
|
919
|
+
if (!isControlled) setInnerValue(next);
|
|
920
|
+
onValueChange?.(next);
|
|
921
|
+
};
|
|
922
|
+
const allValues = items2.map((item7) => item7.value);
|
|
923
|
+
const agreedCount = allValues.filter((v) => agreed.includes(v)).length;
|
|
924
|
+
const allChecked = items2.length > 0 && agreedCount === items2.length;
|
|
925
|
+
const toggleItem = (itemValue, checked) => update(checked ? [...agreed.filter((v) => v !== itemValue), itemValue] : agreed.filter((v) => v !== itemValue));
|
|
926
|
+
return /* @__PURE__ */ jsxs9(
|
|
927
|
+
"fieldset",
|
|
928
|
+
{
|
|
929
|
+
ref,
|
|
930
|
+
className: cx(fieldset2, className),
|
|
931
|
+
disabled,
|
|
932
|
+
"aria-describedby": helperId,
|
|
933
|
+
"data-invalid": error || void 0,
|
|
934
|
+
children: [
|
|
935
|
+
label6 && /* @__PURE__ */ jsx11("legend", { className: legend2, children: label6 }),
|
|
936
|
+
/* @__PURE__ */ jsxs9("div", { className: box, children: [
|
|
937
|
+
/* @__PURE__ */ jsx11("div", { className: all, children: /* @__PURE__ */ jsx11(
|
|
938
|
+
Checkbox,
|
|
939
|
+
{
|
|
940
|
+
label: allLabel,
|
|
941
|
+
checked: allChecked,
|
|
942
|
+
indeterminate: agreedCount > 0 && !allChecked,
|
|
943
|
+
onChange: (event) => update(event.target.checked ? allValues : [])
|
|
944
|
+
}
|
|
945
|
+
) }),
|
|
946
|
+
/* @__PURE__ */ jsx11("ul", { className: list, children: items2.map((item7) => {
|
|
947
|
+
const labelId = `${baseId}-${item7.value}-label`;
|
|
948
|
+
const toggleTextId = `${baseId}-${item7.value}-toggle`;
|
|
949
|
+
const contentId = `${baseId}-${item7.value}-content`;
|
|
950
|
+
const isOpen = expanded.includes(item7.value);
|
|
951
|
+
return /* @__PURE__ */ jsxs9("li", { className: item2, children: [
|
|
952
|
+
/* @__PURE__ */ jsxs9("div", { className: row2, children: [
|
|
953
|
+
/* @__PURE__ */ jsx11(
|
|
954
|
+
Checkbox,
|
|
955
|
+
{
|
|
956
|
+
size: "sm",
|
|
957
|
+
checked: agreed.includes(item7.value),
|
|
958
|
+
invalid: error && item7.required && !agreed.includes(item7.value),
|
|
959
|
+
onChange: (event) => toggleItem(item7.value, event.target.checked),
|
|
960
|
+
label: /* @__PURE__ */ jsxs9("span", { id: labelId, children: [
|
|
961
|
+
/* @__PURE__ */ jsx11("span", { className: tag, "data-required": item7.required || void 0, children: item7.required ? requiredText : optionalText }),
|
|
962
|
+
" ",
|
|
963
|
+
item7.label
|
|
964
|
+
] })
|
|
965
|
+
}
|
|
966
|
+
),
|
|
967
|
+
item7.content && /* @__PURE__ */ jsxs9(
|
|
968
|
+
"button",
|
|
969
|
+
{
|
|
970
|
+
type: "button",
|
|
971
|
+
className: toggle,
|
|
972
|
+
"aria-expanded": isOpen,
|
|
973
|
+
"aria-controls": contentId,
|
|
974
|
+
"aria-labelledby": `${labelId} ${toggleTextId}`,
|
|
975
|
+
onClick: () => setExpanded((prev) => isOpen ? prev.filter((v) => v !== item7.value) : [...prev, item7.value]),
|
|
976
|
+
children: [
|
|
977
|
+
/* @__PURE__ */ jsx11("span", { id: toggleTextId, children: isOpen ? hideText : showText }),
|
|
978
|
+
/* @__PURE__ */ jsx11(ChevronDownIcon2, { size: 14, className: chevron2 })
|
|
979
|
+
]
|
|
980
|
+
}
|
|
981
|
+
)
|
|
982
|
+
] }),
|
|
983
|
+
item7.content && isOpen && // 내용이 길면 스크롤된다 — 키보드로도 스크롤할 수 있게 포커스를 받는 이름 있는 영역으로 둔다
|
|
984
|
+
// eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
|
|
985
|
+
/* @__PURE__ */ jsx11("div", { id: contentId, role: "region", "aria-labelledby": labelId, tabIndex: 0, className: content3, children: item7.content })
|
|
986
|
+
] }, item7.value);
|
|
987
|
+
}) })
|
|
988
|
+
] }),
|
|
989
|
+
name && agreed.map((v) => /* @__PURE__ */ jsx11("input", { type: "hidden", name, value: v }, v)),
|
|
990
|
+
helperText3 && /* @__PURE__ */ jsx11("p", { id: helperId, className: helperText({ error }), children: helperText3 })
|
|
991
|
+
]
|
|
992
|
+
}
|
|
993
|
+
);
|
|
994
|
+
}
|
|
995
|
+
);
|
|
996
|
+
|
|
997
|
+
// src/components/Alert/Alert.tsx
|
|
998
|
+
import { forwardRef as forwardRef10 } from "react";
|
|
999
|
+
import { CircleAlertIcon, CircleCheckIcon, InfoIcon, TriangleAlertIcon, XIcon as XIcon2 } from "@bestow-ui/icons";
|
|
1000
|
+
|
|
1001
|
+
// src/components/Alert/Alert.css.ts
|
|
1002
|
+
import { createRuntimeFn as _7a4686 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
260
1003
|
var action = "bsmpc0j";
|
|
261
|
-
var alert = /* @__PURE__ */
|
|
262
|
-
var
|
|
263
|
-
var
|
|
264
|
-
var
|
|
265
|
-
var
|
|
266
|
-
var
|
|
1004
|
+
var alert = /* @__PURE__ */ _7a4686({ defaultClassName: "bsmpc06", variantClassNames: { variant: { soft: "bsmpc07", outline: "bsmpc08", solid: "bsmpc09" }, color: { primary: "bsmpc0a", neutral: "bsmpc0b", danger: "bsmpc0c", success: "bsmpc0d", warning: "bsmpc0e" } }, defaultVariants: { variant: "soft", color: "primary" }, compoundVariants: [] });
|
|
1005
|
+
var closeButton2 = "bsmpc0k";
|
|
1006
|
+
var content4 = "bsmpc0g";
|
|
1007
|
+
var description2 = "bsmpc0i";
|
|
1008
|
+
var icon2 = "bsmpc0f";
|
|
1009
|
+
var title2 = "bsmpc0h";
|
|
267
1010
|
|
|
268
1011
|
// src/components/Alert/Alert.tsx
|
|
269
|
-
import { jsx as
|
|
1012
|
+
import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
270
1013
|
var defaultIcons = {
|
|
271
1014
|
primary: InfoIcon,
|
|
272
1015
|
neutral: InfoIcon,
|
|
@@ -274,105 +1017,311 @@ var defaultIcons = {
|
|
|
274
1017
|
warning: TriangleAlertIcon,
|
|
275
1018
|
danger: CircleAlertIcon
|
|
276
1019
|
};
|
|
277
|
-
var Alert = /* @__PURE__ */
|
|
1020
|
+
var Alert = /* @__PURE__ */ forwardRef10(function Alert2({
|
|
1021
|
+
variant,
|
|
1022
|
+
color = "primary",
|
|
1023
|
+
title: title6,
|
|
1024
|
+
icon: icon6,
|
|
1025
|
+
action: action3,
|
|
1026
|
+
onClose,
|
|
1027
|
+
closeLabel: closeLabelProp,
|
|
1028
|
+
className,
|
|
1029
|
+
children,
|
|
1030
|
+
...rest
|
|
1031
|
+
}, ref) {
|
|
1032
|
+
const m = useMessages();
|
|
1033
|
+
const closeLabel = closeLabelProp ?? m.close ?? "\uB2EB\uAE30";
|
|
278
1034
|
const DefaultIcon = defaultIcons[color];
|
|
279
|
-
const iconNode = icon6 === void 0 ? /* @__PURE__ */
|
|
280
|
-
return /* @__PURE__ */
|
|
281
|
-
iconNode !== false && iconNode !== null && /* @__PURE__ */
|
|
282
|
-
/* @__PURE__ */
|
|
283
|
-
title6 && /* @__PURE__ */
|
|
284
|
-
children && /* @__PURE__ */
|
|
1035
|
+
const iconNode = icon6 === void 0 ? /* @__PURE__ */ jsx12(DefaultIcon, { size: 18 }) : icon6;
|
|
1036
|
+
return /* @__PURE__ */ jsxs10("div", { ref, className: cx(alert({ variant, color }), className), ...rest, children: [
|
|
1037
|
+
iconNode !== false && iconNode !== null && /* @__PURE__ */ jsx12("span", { className: icon2, "aria-hidden": true, children: iconNode }),
|
|
1038
|
+
/* @__PURE__ */ jsxs10("div", { className: content4, children: [
|
|
1039
|
+
title6 && /* @__PURE__ */ jsx12("div", { className: title2, children: title6 }),
|
|
1040
|
+
children && /* @__PURE__ */ jsx12("div", { className: description2, children })
|
|
285
1041
|
] }),
|
|
286
|
-
action3 && /* @__PURE__ */
|
|
287
|
-
onClose && /* @__PURE__ */
|
|
1042
|
+
action3 && /* @__PURE__ */ jsx12("div", { className: action, children: action3 }),
|
|
1043
|
+
onClose && /* @__PURE__ */ jsx12("button", { type: "button", className: closeButton2, "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx12(XIcon2, { size: 16 }) })
|
|
288
1044
|
] });
|
|
289
1045
|
});
|
|
290
1046
|
|
|
1047
|
+
// src/components/AmountInput/AmountInput.tsx
|
|
1048
|
+
import { forwardRef as forwardRef11, useRef as useRef5 } from "react";
|
|
1049
|
+
|
|
1050
|
+
// src/utils/koreanFormat.ts
|
|
1051
|
+
var onlyDigits = (input5) => input5.replace(/\D/g, "");
|
|
1052
|
+
function phoneNumberMaxDigits(digits) {
|
|
1053
|
+
if (digits.startsWith("02")) return 10;
|
|
1054
|
+
if (/^1[568]/.test(digits)) return 8;
|
|
1055
|
+
return 11;
|
|
1056
|
+
}
|
|
1057
|
+
function formatPhoneNumber(input5) {
|
|
1058
|
+
const d = onlyDigits(input5).slice(0, phoneNumberMaxDigits(onlyDigits(input5)));
|
|
1059
|
+
if (d.startsWith("02")) {
|
|
1060
|
+
if (d.length <= 2) return d;
|
|
1061
|
+
if (d.length <= 5) return `${d.slice(0, 2)}-${d.slice(2)}`;
|
|
1062
|
+
if (d.length <= 9) return `${d.slice(0, 2)}-${d.slice(2, 5)}-${d.slice(5)}`;
|
|
1063
|
+
return `${d.slice(0, 2)}-${d.slice(2, 6)}-${d.slice(6)}`;
|
|
1064
|
+
}
|
|
1065
|
+
if (/^1[568]/.test(d)) {
|
|
1066
|
+
return d.length <= 4 ? d : `${d.slice(0, 4)}-${d.slice(4)}`;
|
|
1067
|
+
}
|
|
1068
|
+
if (d.length <= 3) return d;
|
|
1069
|
+
if (d.length <= 6) return `${d.slice(0, 3)}-${d.slice(3)}`;
|
|
1070
|
+
if (d.length <= 10) return `${d.slice(0, 3)}-${d.slice(3, 6)}-${d.slice(6)}`;
|
|
1071
|
+
return `${d.slice(0, 3)}-${d.slice(3, 7)}-${d.slice(7)}`;
|
|
1072
|
+
}
|
|
1073
|
+
function formatBusinessNumber(input5) {
|
|
1074
|
+
const d = onlyDigits(input5).slice(0, 10);
|
|
1075
|
+
if (d.length <= 3) return d;
|
|
1076
|
+
if (d.length <= 5) return `${d.slice(0, 3)}-${d.slice(3)}`;
|
|
1077
|
+
return `${d.slice(0, 3)}-${d.slice(3, 5)}-${d.slice(5)}`;
|
|
1078
|
+
}
|
|
1079
|
+
function isValidBusinessNumber(input5) {
|
|
1080
|
+
const d = onlyDigits(input5);
|
|
1081
|
+
if (d.length !== 10) return false;
|
|
1082
|
+
const weights = [1, 3, 7, 1, 3, 7, 1, 3, 5];
|
|
1083
|
+
const digits = [...d].map(Number);
|
|
1084
|
+
let sum = weights.reduce((acc, w, i) => acc + w * digits[i], 0);
|
|
1085
|
+
sum += Math.floor(digits[8] * 5 / 10);
|
|
1086
|
+
return (10 - sum % 10) % 10 === digits[9];
|
|
1087
|
+
}
|
|
1088
|
+
function formatKoreanAmount(amount, unit = "\uC6D0") {
|
|
1089
|
+
const n = Math.floor(Math.abs(amount));
|
|
1090
|
+
if (n === 0) return `0${unit}`;
|
|
1091
|
+
const units = [
|
|
1092
|
+
{ value: 1e12, label: "\uC870" },
|
|
1093
|
+
{ value: 1e8, label: "\uC5B5" },
|
|
1094
|
+
{ value: 1e4, label: "\uB9CC" },
|
|
1095
|
+
{ value: 1, label: "" }
|
|
1096
|
+
];
|
|
1097
|
+
let rest = n;
|
|
1098
|
+
const parts = [];
|
|
1099
|
+
for (const u of units) {
|
|
1100
|
+
const q = Math.floor(rest / u.value);
|
|
1101
|
+
rest %= u.value;
|
|
1102
|
+
if (q > 0) parts.push(`${q.toLocaleString("ko-KR")}${u.label}`);
|
|
1103
|
+
}
|
|
1104
|
+
return `${amount < 0 ? "-" : ""}${parts.join(" ")}${unit}`;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
// src/utils/useFormattedInput.ts
|
|
1108
|
+
import { useLayoutEffect, useRef as useRef4, useState as useState3 } from "react";
|
|
1109
|
+
function caretAfter(display, count2, isMeaningful) {
|
|
1110
|
+
if (count2 <= 0) return 0;
|
|
1111
|
+
let seen = 0;
|
|
1112
|
+
for (let i = 0; i < display.length; i++) {
|
|
1113
|
+
if (isMeaningful(display[i])) seen++;
|
|
1114
|
+
if (seen === count2) return i + 1;
|
|
1115
|
+
}
|
|
1116
|
+
return display.length;
|
|
1117
|
+
}
|
|
1118
|
+
function useFormattedInput({
|
|
1119
|
+
isControlled,
|
|
1120
|
+
value: value4,
|
|
1121
|
+
defaultValue,
|
|
1122
|
+
onValueChange,
|
|
1123
|
+
sanitize: sanitize4,
|
|
1124
|
+
format: format2,
|
|
1125
|
+
isMeaningful,
|
|
1126
|
+
inputRef
|
|
1127
|
+
}) {
|
|
1128
|
+
const [innerValue, setInnerValue] = useState3(() => sanitize4(defaultValue ?? ""));
|
|
1129
|
+
const raw = isControlled ? sanitize4(value4 ?? "") : innerValue;
|
|
1130
|
+
const display = format2(raw);
|
|
1131
|
+
const pendingCaret = useRef4(null);
|
|
1132
|
+
useLayoutEffect(() => {
|
|
1133
|
+
const input5 = inputRef.current;
|
|
1134
|
+
if (pendingCaret.current === null || !input5 || document.activeElement !== input5) return;
|
|
1135
|
+
const position = caretAfter(input5.value, pendingCaret.current, isMeaningful);
|
|
1136
|
+
input5.setSelectionRange(position, position);
|
|
1137
|
+
pendingCaret.current = null;
|
|
1138
|
+
});
|
|
1139
|
+
const commit = (next, caretCount) => {
|
|
1140
|
+
pendingCaret.current = caretCount;
|
|
1141
|
+
if (!isControlled) setInnerValue(next);
|
|
1142
|
+
if (next !== raw) onValueChange?.(next);
|
|
1143
|
+
};
|
|
1144
|
+
const onChange = (event) => {
|
|
1145
|
+
const { value: typed, selectionStart } = event.target;
|
|
1146
|
+
const next = sanitize4(typed);
|
|
1147
|
+
const before = sanitize4(typed.slice(0, selectionStart ?? typed.length));
|
|
1148
|
+
commit(next, Math.min(before.length, next.length));
|
|
1149
|
+
};
|
|
1150
|
+
const onKeyDown = (event) => {
|
|
1151
|
+
const input5 = event.currentTarget;
|
|
1152
|
+
const { selectionStart: start, selectionEnd: end } = input5;
|
|
1153
|
+
if (start === null || start !== end) return;
|
|
1154
|
+
const countBefore = (text2) => [...text2].filter(isMeaningful).length;
|
|
1155
|
+
if (event.key === "Backspace" && start > 0 && !isMeaningful(input5.value[start - 1])) {
|
|
1156
|
+
const index = countBefore(input5.value.slice(0, start)) - 1;
|
|
1157
|
+
if (index < 0) return;
|
|
1158
|
+
event.preventDefault();
|
|
1159
|
+
commit(raw.slice(0, index) + raw.slice(index + 1), index);
|
|
1160
|
+
} else if (event.key === "Delete" && start < input5.value.length && !isMeaningful(input5.value[start])) {
|
|
1161
|
+
const index = countBefore(input5.value.slice(0, start));
|
|
1162
|
+
if (index >= raw.length) return;
|
|
1163
|
+
event.preventDefault();
|
|
1164
|
+
commit(raw.slice(0, index) + raw.slice(index + 1), index);
|
|
1165
|
+
}
|
|
1166
|
+
};
|
|
1167
|
+
const setRaw = (next) => setInnerValue(sanitize4(next));
|
|
1168
|
+
return { raw, display, onChange, onKeyDown, setRaw };
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
// src/components/AmountInput/AmountInput.css.ts
|
|
1172
|
+
var input3 = "_70qkav0";
|
|
1173
|
+
|
|
1174
|
+
// src/components/AmountInput/AmountInput.tsx
|
|
1175
|
+
import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1176
|
+
var MAX_DIGITS = 15;
|
|
1177
|
+
var isDigit = (char) => /\d/.test(char);
|
|
1178
|
+
var AmountInput = /* @__PURE__ */ forwardRef11(
|
|
1179
|
+
function AmountInput2(props, ref) {
|
|
1180
|
+
const {
|
|
1181
|
+
value: value4,
|
|
1182
|
+
defaultValue,
|
|
1183
|
+
onValueChange,
|
|
1184
|
+
max,
|
|
1185
|
+
unit: unitProp,
|
|
1186
|
+
showKoreanAmount = true,
|
|
1187
|
+
label: labelProp,
|
|
1188
|
+
placeholder = "0",
|
|
1189
|
+
helperText: helperText3,
|
|
1190
|
+
onKeyDown,
|
|
1191
|
+
className,
|
|
1192
|
+
...rest
|
|
1193
|
+
} = props;
|
|
1194
|
+
const inputRef = useRef5(null);
|
|
1195
|
+
const m = useMessages();
|
|
1196
|
+
const unit = unitProp ?? m.currencyUnit ?? "\uC6D0";
|
|
1197
|
+
const label6 = labelProp ?? m.amount ?? "\uAE08\uC561";
|
|
1198
|
+
const sanitize4 = (input5) => {
|
|
1199
|
+
let digits = input5.replace(/\D/g, "").replace(/^0+(?=\d)/, "").slice(0, MAX_DIGITS);
|
|
1200
|
+
if (max !== void 0 && digits && Number(digits) > max) digits = String(Math.floor(max));
|
|
1201
|
+
return digits;
|
|
1202
|
+
};
|
|
1203
|
+
const toRaw = (amount) => amount === null || amount === void 0 ? "" : String(Math.floor(Math.abs(amount)));
|
|
1204
|
+
const field3 = useFormattedInput({
|
|
1205
|
+
isControlled: "value" in props,
|
|
1206
|
+
value: toRaw(value4),
|
|
1207
|
+
defaultValue: toRaw(defaultValue),
|
|
1208
|
+
onValueChange: (digits) => onValueChange?.(digits === "" ? null : Number(digits)),
|
|
1209
|
+
sanitize: sanitize4,
|
|
1210
|
+
format: (digits) => digits === "" ? "" : Number(digits).toLocaleString("ko-KR"),
|
|
1211
|
+
isMeaningful: isDigit,
|
|
1212
|
+
inputRef
|
|
1213
|
+
});
|
|
1214
|
+
const reading = showKoreanAmount && field3.raw !== "" ? formatKoreanAmount(Number(field3.raw), unit) : null;
|
|
1215
|
+
return /* @__PURE__ */ jsx13(
|
|
1216
|
+
TextField,
|
|
1217
|
+
{
|
|
1218
|
+
ref: mergeRefs(ref, inputRef),
|
|
1219
|
+
label: label6,
|
|
1220
|
+
placeholder,
|
|
1221
|
+
inputMode: "numeric",
|
|
1222
|
+
value: field3.display,
|
|
1223
|
+
onChange: field3.onChange,
|
|
1224
|
+
onKeyDown: (event) => {
|
|
1225
|
+
field3.onKeyDown(event);
|
|
1226
|
+
onKeyDown?.(event);
|
|
1227
|
+
},
|
|
1228
|
+
endAdornment: unit,
|
|
1229
|
+
helperText: reading && helperText3 ? /* @__PURE__ */ jsxs11(Fragment2, { children: [
|
|
1230
|
+
reading,
|
|
1231
|
+
/* @__PURE__ */ jsx13("br", {}),
|
|
1232
|
+
helperText3
|
|
1233
|
+
] }) : reading ?? helperText3,
|
|
1234
|
+
className: cx(input3, className),
|
|
1235
|
+
...rest
|
|
1236
|
+
}
|
|
1237
|
+
);
|
|
1238
|
+
}
|
|
1239
|
+
);
|
|
1240
|
+
|
|
291
1241
|
// src/components/Avatar/Avatar.tsx
|
|
292
1242
|
import * as RadixAvatar from "@radix-ui/react-avatar";
|
|
293
1243
|
import { UserIcon } from "@bestow-ui/icons";
|
|
294
|
-
import { forwardRef as
|
|
1244
|
+
import { forwardRef as forwardRef12 } from "react";
|
|
295
1245
|
|
|
296
1246
|
// src/components/Avatar/Avatar.css.ts
|
|
297
|
-
import { createRuntimeFn as
|
|
1247
|
+
import { createRuntimeFn as _7a4687 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
298
1248
|
var fallback = "_1fd2kp27";
|
|
299
1249
|
var image = "_1fd2kp26";
|
|
300
|
-
var
|
|
1250
|
+
var root5 = /* @__PURE__ */ _7a4687({ defaultClassName: "_1fd2kp20", variantClassNames: { size: { sm: "_1fd2kp21", md: "_1fd2kp22", lg: "_1fd2kp23" }, shape: { circle: "_1fd2kp24", square: "_1fd2kp25" } }, defaultVariants: { size: "md", shape: "circle" }, compoundVariants: [] });
|
|
301
1251
|
|
|
302
1252
|
// src/components/Avatar/Avatar.tsx
|
|
303
|
-
import { jsx as
|
|
1253
|
+
import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
304
1254
|
function getInitials(name) {
|
|
305
1255
|
const [a = "", b = ""] = name.trim().split(/\s+/);
|
|
306
1256
|
const first = (word) => Array.from(word)[0] ?? "";
|
|
307
1257
|
return (first(a) + first(b)).toUpperCase();
|
|
308
1258
|
}
|
|
309
|
-
var Avatar = /* @__PURE__ */
|
|
1259
|
+
var Avatar = /* @__PURE__ */ forwardRef12(function Avatar2({ src, alt, name, fallback: fallback2, size, shape, className, ...rest }, ref) {
|
|
310
1260
|
const label6 = alt ?? name;
|
|
311
1261
|
const a11y = label6 ? { role: "img", "aria-label": label6 } : { "aria-hidden": true };
|
|
312
1262
|
const initials = name ? getInitials(name) : "";
|
|
313
|
-
return /* @__PURE__ */
|
|
314
|
-
src && /* @__PURE__ */
|
|
315
|
-
/* @__PURE__ */
|
|
1263
|
+
return /* @__PURE__ */ jsxs12(RadixAvatar.Root, { ref, className: cx(root5({ size, shape }), className), ...a11y, ...rest, children: [
|
|
1264
|
+
src && /* @__PURE__ */ jsx14(RadixAvatar.Image, { src, alt: "", className: image }),
|
|
1265
|
+
/* @__PURE__ */ jsx14(RadixAvatar.Fallback, { className: fallback, children: fallback2 ?? (initials || /* @__PURE__ */ jsx14(UserIcon, { size: "60%" })) })
|
|
316
1266
|
] });
|
|
317
1267
|
});
|
|
318
1268
|
|
|
319
1269
|
// src/components/Badge/Badge.tsx
|
|
320
|
-
import { forwardRef as
|
|
1270
|
+
import { forwardRef as forwardRef13 } from "react";
|
|
321
1271
|
|
|
322
1272
|
// src/components/Badge/Badge.css.ts
|
|
323
|
-
import { createRuntimeFn as
|
|
324
|
-
var badge = /* @__PURE__ */
|
|
325
|
-
var
|
|
1273
|
+
import { createRuntimeFn as _7a4688 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1274
|
+
var badge = /* @__PURE__ */ _7a4688({ defaultClassName: "_1295cfn4", variantClassNames: { variant: { solid: "_1295cfn5", soft: "_1295cfn6", outline: "_1295cfn7" }, color: { primary: "_1295cfn8", neutral: "_1295cfn9", danger: "_1295cfna", success: "_1295cfnb", warning: "_1295cfnc" }, size: { sm: "_1295cfnd", md: "_1295cfne", lg: "_1295cfnf" } }, defaultVariants: { variant: "soft", color: "neutral", size: "md" }, compoundVariants: [] });
|
|
1275
|
+
var icon3 = "_1295cfng";
|
|
326
1276
|
|
|
327
1277
|
// src/components/Badge/Badge.tsx
|
|
328
|
-
import { jsx as
|
|
329
|
-
var Badge = /* @__PURE__ */
|
|
330
|
-
return /* @__PURE__ */
|
|
331
|
-
startIcon && /* @__PURE__ */
|
|
1278
|
+
import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1279
|
+
var Badge = /* @__PURE__ */ forwardRef13(function Badge2({ variant, color, size, startIcon, className, children, ...rest }, ref) {
|
|
1280
|
+
return /* @__PURE__ */ jsxs13("span", { ref, className: cx(badge({ variant, color, size }), className), ...rest, children: [
|
|
1281
|
+
startIcon && /* @__PURE__ */ jsx15("span", { className: icon3, children: startIcon }),
|
|
332
1282
|
children
|
|
333
1283
|
] });
|
|
334
1284
|
});
|
|
335
1285
|
|
|
336
1286
|
// src/components/Breadcrumb/Breadcrumb.tsx
|
|
337
|
-
import { forwardRef as
|
|
1287
|
+
import { forwardRef as forwardRef15 } from "react";
|
|
338
1288
|
import { ChevronRightIcon } from "@bestow-ui/icons";
|
|
339
1289
|
|
|
340
1290
|
// src/components/Link/Link.tsx
|
|
341
1291
|
import { Slot } from "@radix-ui/react-slot";
|
|
342
|
-
import { forwardRef as
|
|
1292
|
+
import { forwardRef as forwardRef14 } from "react";
|
|
343
1293
|
import { ExternalLinkIcon } from "@bestow-ui/icons";
|
|
344
1294
|
|
|
345
|
-
// src/styles/visuallyHidden.css.ts
|
|
346
|
-
var visuallyHidden = "_1kdtbw10";
|
|
347
|
-
|
|
348
1295
|
// src/components/Link/Link.css.ts
|
|
349
|
-
import { createRuntimeFn as
|
|
1296
|
+
import { createRuntimeFn as _7a4689 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
350
1297
|
var externalIcon = "_1t4hlp6";
|
|
351
|
-
var link = /* @__PURE__ */
|
|
1298
|
+
var link = /* @__PURE__ */ _7a4689({ defaultClassName: "_1t4hlp0", variantClassNames: { color: { primary: "_1t4hlp1", neutral: "_1t4hlp2", inherit: "_1t4hlp3" }, underline: { always: "_1t4hlp4", hover: "_1t4hlp5" } }, defaultVariants: { color: "primary", underline: "always" }, compoundVariants: [] });
|
|
352
1299
|
|
|
353
1300
|
// src/components/Link/Link.tsx
|
|
354
|
-
import { Fragment, jsx as
|
|
355
|
-
var Link = /* @__PURE__ */
|
|
1301
|
+
import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1302
|
+
var Link = /* @__PURE__ */ forwardRef14(function Link2({
|
|
356
1303
|
as: Component = "a",
|
|
357
1304
|
asChild,
|
|
358
1305
|
color,
|
|
359
1306
|
underline,
|
|
360
1307
|
external,
|
|
361
|
-
externalLabel
|
|
1308
|
+
externalLabel: externalLabelProp,
|
|
362
1309
|
target,
|
|
363
1310
|
rel,
|
|
364
1311
|
className,
|
|
365
1312
|
children,
|
|
366
1313
|
...rest
|
|
367
1314
|
}, ref) {
|
|
1315
|
+
const m = useMessages();
|
|
1316
|
+
const externalLabel = externalLabelProp ?? m.newWindow ?? "(\uC0C8 \uCC3D)";
|
|
368
1317
|
const linkClassName = cx(link({ color, underline }), className);
|
|
369
1318
|
if (asChild) {
|
|
370
1319
|
return (
|
|
371
1320
|
// Slot 의 props 타입은 HTMLElement 기준이라 <a> 전용 속성(target·rel 등)은 그대로 넘기도록 단언한다
|
|
372
|
-
/* @__PURE__ */
|
|
1321
|
+
/* @__PURE__ */ jsx16(Slot, { ref, className: linkClassName, ...{ target, rel, ...rest }, children })
|
|
373
1322
|
);
|
|
374
1323
|
}
|
|
375
|
-
return /* @__PURE__ */
|
|
1324
|
+
return /* @__PURE__ */ jsxs14(
|
|
376
1325
|
Component,
|
|
377
1326
|
{
|
|
378
1327
|
ref,
|
|
@@ -382,10 +1331,10 @@ var Link = /* @__PURE__ */ forwardRef6(function Link2({
|
|
|
382
1331
|
...rest,
|
|
383
1332
|
children: [
|
|
384
1333
|
children,
|
|
385
|
-
external && /* @__PURE__ */
|
|
1334
|
+
external && /* @__PURE__ */ jsxs14(Fragment3, { children: [
|
|
386
1335
|
" ",
|
|
387
|
-
/* @__PURE__ */
|
|
388
|
-
/* @__PURE__ */
|
|
1336
|
+
/* @__PURE__ */ jsx16(ExternalLinkIcon, { className: externalIcon }),
|
|
1337
|
+
/* @__PURE__ */ jsx16("span", { className: visuallyHidden, children: externalLabel })
|
|
389
1338
|
] })
|
|
390
1339
|
]
|
|
391
1340
|
}
|
|
@@ -394,223 +1343,378 @@ var Link = /* @__PURE__ */ forwardRef6(function Link2({
|
|
|
394
1343
|
|
|
395
1344
|
// src/components/Breadcrumb/Breadcrumb.css.ts
|
|
396
1345
|
var current = "_18t8ztt3";
|
|
397
|
-
var
|
|
1346
|
+
var item3 = "_18t8ztt1";
|
|
398
1347
|
var link2 = "_18t8ztt2";
|
|
399
|
-
var
|
|
1348
|
+
var list2 = "_18t8ztt0";
|
|
400
1349
|
var separator = "_18t8ztt4";
|
|
401
1350
|
|
|
402
1351
|
// src/components/Breadcrumb/Breadcrumb.tsx
|
|
403
|
-
import { jsx as
|
|
404
|
-
var Breadcrumb = /* @__PURE__ */
|
|
405
|
-
const
|
|
406
|
-
|
|
1352
|
+
import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1353
|
+
var Breadcrumb = /* @__PURE__ */ forwardRef15(function Breadcrumb2({ items: items2, linkAs, separator: separator3, "aria-label": ariaLabelProp, className, ...rest }, ref) {
|
|
1354
|
+
const m = useMessages();
|
|
1355
|
+
const ariaLabel = ariaLabelProp ?? m.breadcrumb ?? "\uC774\uB3D9 \uACBD\uB85C";
|
|
1356
|
+
const sep = separator3 ?? /* @__PURE__ */ jsx17(ChevronRightIcon, { size: 14 });
|
|
1357
|
+
return /* @__PURE__ */ jsx17("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ jsx17("ol", { className: list2, children: items2.map((item7, index) => {
|
|
407
1358
|
const isCurrent = index === items2.length - 1;
|
|
408
|
-
return /* @__PURE__ */
|
|
409
|
-
index > 0 && /* @__PURE__ */
|
|
410
|
-
isCurrent ||
|
|
1359
|
+
return /* @__PURE__ */ jsxs15("li", { className: item3, children: [
|
|
1360
|
+
index > 0 && /* @__PURE__ */ jsx17("span", { className: separator, "aria-hidden": true, children: sep }),
|
|
1361
|
+
isCurrent || item7.href === void 0 ? /* @__PURE__ */ jsx17("span", { className: isCurrent ? current : void 0, "aria-current": isCurrent ? "page" : void 0, children: item7.label }) : /* @__PURE__ */ jsx17(Link, { as: linkAs, href: item7.href, color: "neutral", underline: "hover", className: link2, children: item7.label })
|
|
411
1362
|
] }, index);
|
|
412
1363
|
}) }) });
|
|
413
1364
|
});
|
|
414
1365
|
|
|
415
|
-
// src/components/
|
|
416
|
-
import { forwardRef as
|
|
1366
|
+
// src/components/BusinessNumberInput/BusinessNumberInput.tsx
|
|
1367
|
+
import { forwardRef as forwardRef16, useRef as useRef6, useState as useState4 } from "react";
|
|
1368
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
1369
|
+
var sanitize = (input5) => input5.replace(/\D/g, "").slice(0, 10);
|
|
1370
|
+
var isDigit2 = (char) => /\d/.test(char);
|
|
1371
|
+
var BusinessNumberInput = /* @__PURE__ */ forwardRef16(
|
|
1372
|
+
function BusinessNumberInput2(props, ref) {
|
|
1373
|
+
const {
|
|
1374
|
+
value: value4,
|
|
1375
|
+
defaultValue,
|
|
1376
|
+
onValueChange,
|
|
1377
|
+
validate = true,
|
|
1378
|
+
invalidText: invalidTextProp,
|
|
1379
|
+
label: labelProp,
|
|
1380
|
+
placeholder = "000-00-00000",
|
|
1381
|
+
error,
|
|
1382
|
+
helperText: helperText3,
|
|
1383
|
+
onBlur,
|
|
1384
|
+
onKeyDown,
|
|
1385
|
+
...rest
|
|
1386
|
+
} = props;
|
|
1387
|
+
const inputRef = useRef6(null);
|
|
1388
|
+
const m = useMessages();
|
|
1389
|
+
const invalidText = invalidTextProp ?? m.businessNumberInvalid ?? "\uC62C\uBC14\uB978 \uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638\uAC00 \uC544\uB2C8\uC5D0\uC694. \uBC88\uD638\uB97C \uB2E4\uC2DC \uD655\uC778\uD574 \uC8FC\uC138\uC694.";
|
|
1390
|
+
const label6 = labelProp ?? m.businessNumber ?? "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638";
|
|
1391
|
+
const incompleteText = m.businessNumberIncomplete ?? "10\uC790\uB9AC\uB97C \uBAA8\uB450 \uC785\uB825\uD574 \uC8FC\uC138\uC694.";
|
|
1392
|
+
const [touched, setTouched] = useState4(false);
|
|
1393
|
+
const field3 = useFormattedInput({
|
|
1394
|
+
isControlled: "value" in props,
|
|
1395
|
+
value: value4,
|
|
1396
|
+
defaultValue,
|
|
1397
|
+
onValueChange: (digits) => onValueChange?.(digits, digits.length === 10 ? isValidBusinessNumber(digits) : null),
|
|
1398
|
+
sanitize,
|
|
1399
|
+
format: formatBusinessNumber,
|
|
1400
|
+
isMeaningful: isDigit2,
|
|
1401
|
+
inputRef
|
|
1402
|
+
});
|
|
1403
|
+
const complete = field3.raw.length === 10;
|
|
1404
|
+
const autoInvalid = validate && field3.raw.length > 0 && (complete ? !isValidBusinessNumber(field3.raw) : touched);
|
|
1405
|
+
const showAuto = autoInvalid && error === void 0;
|
|
1406
|
+
return /* @__PURE__ */ jsx18(
|
|
1407
|
+
TextField,
|
|
1408
|
+
{
|
|
1409
|
+
ref: mergeRefs(ref, inputRef),
|
|
1410
|
+
label: label6,
|
|
1411
|
+
placeholder,
|
|
1412
|
+
inputMode: "numeric",
|
|
1413
|
+
value: field3.display,
|
|
1414
|
+
onChange: field3.onChange,
|
|
1415
|
+
onKeyDown: (event) => {
|
|
1416
|
+
field3.onKeyDown(event);
|
|
1417
|
+
onKeyDown?.(event);
|
|
1418
|
+
},
|
|
1419
|
+
onBlur: (event) => {
|
|
1420
|
+
setTouched(true);
|
|
1421
|
+
onBlur?.(event);
|
|
1422
|
+
},
|
|
1423
|
+
error: error ?? autoInvalid,
|
|
1424
|
+
helperText: showAuto ? complete ? invalidText : incompleteText : helperText3,
|
|
1425
|
+
...rest
|
|
1426
|
+
}
|
|
1427
|
+
);
|
|
1428
|
+
}
|
|
1429
|
+
);
|
|
417
1430
|
|
|
418
|
-
// src/components/
|
|
419
|
-
import {
|
|
420
|
-
import {
|
|
1431
|
+
// src/components/Calendar/Calendar.tsx
|
|
1432
|
+
import { forwardRef as forwardRef18, useEffect as useEffect3, useId as useId4, useRef as useRef7, useState as useState5 } from "react";
|
|
1433
|
+
import { ChevronLeftIcon, ChevronRightIcon as ChevronRightIcon2 } from "@bestow-ui/icons";
|
|
421
1434
|
|
|
422
|
-
// src/
|
|
423
|
-
|
|
424
|
-
|
|
1435
|
+
// src/utils/date.ts
|
|
1436
|
+
var pad = (n) => String(n).padStart(2, "0");
|
|
1437
|
+
function toISODate(date) {
|
|
1438
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
|
|
1439
|
+
}
|
|
1440
|
+
function parseISODate(value4) {
|
|
1441
|
+
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value4 ?? "");
|
|
1442
|
+
if (!m) return null;
|
|
1443
|
+
const [y, mo, d] = [Number(m[1]), Number(m[2]), Number(m[3])];
|
|
1444
|
+
const date = new Date(y, mo - 1, d);
|
|
1445
|
+
return date.getFullYear() === y && date.getMonth() === mo - 1 && date.getDate() === d ? date : null;
|
|
1446
|
+
}
|
|
1447
|
+
function addDays(date, days) {
|
|
1448
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);
|
|
1449
|
+
}
|
|
1450
|
+
function addMonths(date, months) {
|
|
1451
|
+
const target = new Date(date.getFullYear(), date.getMonth() + months, 1);
|
|
1452
|
+
const lastDay = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();
|
|
1453
|
+
return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), lastDay));
|
|
1454
|
+
}
|
|
1455
|
+
function isSameDay(a, b) {
|
|
1456
|
+
return !!a && !!b && toISODate(a) === toISODate(b);
|
|
1457
|
+
}
|
|
1458
|
+
function isSameMonth(a, b) {
|
|
1459
|
+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
|
|
1460
|
+
}
|
|
1461
|
+
function compareDays(a, b) {
|
|
1462
|
+
const x = toISODate(a);
|
|
1463
|
+
const y = toISODate(b);
|
|
1464
|
+
return x < y ? -1 : x > y ? 1 : 0;
|
|
1465
|
+
}
|
|
1466
|
+
function getCalendarWeeks(year, month) {
|
|
1467
|
+
const first = new Date(year, month, 1);
|
|
1468
|
+
const start = addDays(first, -first.getDay());
|
|
1469
|
+
return Array.from({ length: 6 }, (_, week) => Array.from({ length: 7 }, (_2, day2) => addDays(start, week * 7 + day2)));
|
|
1470
|
+
}
|
|
1471
|
+
var KOREAN_WEEKDAYS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
|
|
1472
|
+
function formatKoreanDate(date, withWeekday = true) {
|
|
1473
|
+
const base = `${date.getFullYear()}\uB144 ${date.getMonth() + 1}\uC6D4 ${date.getDate()}\uC77C`;
|
|
1474
|
+
return withWeekday ? `${base} ${KOREAN_WEEKDAYS[date.getDay()]}\uC694\uC77C` : base;
|
|
1475
|
+
}
|
|
425
1476
|
|
|
426
|
-
// src/components/
|
|
427
|
-
import {
|
|
428
|
-
var Spinner = /* @__PURE__ */ forwardRef8(function Spinner2({ size, color, label: label6 = "\uB85C\uB529 \uC911", className, ...rest }, ref) {
|
|
429
|
-
const a11y = label6 ? { role: "status" } : { "aria-hidden": true };
|
|
430
|
-
return /* @__PURE__ */ jsxs7("span", { ref, className: cx(spinner({ size, color }), className), ...a11y, ...rest, children: [
|
|
431
|
-
/* @__PURE__ */ jsx8(LoaderIcon, { size: "100%" }),
|
|
432
|
-
label6 && /* @__PURE__ */ jsx8("span", { className: visuallyHidden, children: label6 })
|
|
433
|
-
] });
|
|
434
|
-
});
|
|
1477
|
+
// src/components/IconButton/IconButton.tsx
|
|
1478
|
+
import { forwardRef as forwardRef17 } from "react";
|
|
435
1479
|
|
|
436
|
-
// src/components/
|
|
437
|
-
import { createRuntimeFn as
|
|
438
|
-
var
|
|
439
|
-
var icon3 = "xcekdai";
|
|
1480
|
+
// src/components/IconButton/IconButton.css.ts
|
|
1481
|
+
import { createRuntimeFn as _7a46810 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1482
|
+
var iconButton = /* @__PURE__ */ _7a46810({ defaultClassName: "ip9et20", variantClassNames: { size: { sm: "ip9et21", md: "ip9et22", lg: "ip9et23" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
440
1483
|
|
|
441
|
-
// src/components/
|
|
442
|
-
import { jsx as
|
|
443
|
-
var
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
size,
|
|
447
|
-
fullWidth,
|
|
448
|
-
startIcon,
|
|
449
|
-
endIcon,
|
|
450
|
-
loading,
|
|
451
|
-
className,
|
|
452
|
-
type = "button",
|
|
453
|
-
onClick,
|
|
454
|
-
children,
|
|
455
|
-
...rest
|
|
456
|
-
}, ref) {
|
|
457
|
-
const handleClick = (event) => {
|
|
458
|
-
if (loading) {
|
|
459
|
-
event.preventDefault();
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
onClick?.(event);
|
|
463
|
-
};
|
|
464
|
-
const leading = loading ? /* @__PURE__ */ jsx9(Spinner, { size: "sm", label: "" }) : startIcon;
|
|
465
|
-
return /* @__PURE__ */ jsxs8(
|
|
466
|
-
"button",
|
|
1484
|
+
// src/components/IconButton/IconButton.tsx
|
|
1485
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1486
|
+
var IconButton = /* @__PURE__ */ forwardRef17(function IconButton2({ variant = "ghost", color = "neutral", size, loading: loading2, className, children, ...rest }, ref) {
|
|
1487
|
+
return /* @__PURE__ */ jsx19(
|
|
1488
|
+
Button,
|
|
467
1489
|
{
|
|
468
1490
|
ref,
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
1491
|
+
variant,
|
|
1492
|
+
color,
|
|
1493
|
+
size,
|
|
1494
|
+
loading: loading2,
|
|
1495
|
+
className: cx(iconButton({ size }), className),
|
|
474
1496
|
...rest,
|
|
475
|
-
children:
|
|
476
|
-
leading && /* @__PURE__ */ jsx9("span", { className: icon3, children: leading }),
|
|
477
|
-
children,
|
|
478
|
-
endIcon && /* @__PURE__ */ jsx9("span", { className: icon3, children: endIcon })
|
|
479
|
-
]
|
|
1497
|
+
children: !loading2 && children
|
|
480
1498
|
}
|
|
481
1499
|
);
|
|
482
1500
|
});
|
|
483
1501
|
|
|
484
|
-
// src/components/
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
var
|
|
490
|
-
var
|
|
491
|
-
var
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
1502
|
+
// src/components/Calendar/Calendar.css.ts
|
|
1503
|
+
var cell = "_1qyq67b5";
|
|
1504
|
+
var day = "_1qyq67b6";
|
|
1505
|
+
var grid = "_1qyq67b3";
|
|
1506
|
+
var header3 = "_1qyq67b1";
|
|
1507
|
+
var heading = "_1qyq67b2";
|
|
1508
|
+
var root6 = "_1qyq67b0";
|
|
1509
|
+
var weekday = "_1qyq67b4";
|
|
1510
|
+
|
|
1511
|
+
// src/components/Calendar/Calendar.tsx
|
|
1512
|
+
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1513
|
+
var Calendar = /* @__PURE__ */ forwardRef18(function Calendar2(props, ref) {
|
|
1514
|
+
const {
|
|
1515
|
+
value: value4,
|
|
1516
|
+
defaultValue,
|
|
1517
|
+
onValueChange,
|
|
1518
|
+
min,
|
|
1519
|
+
max,
|
|
1520
|
+
isDateDisabled,
|
|
1521
|
+
isHoliday,
|
|
1522
|
+
today: todayProp,
|
|
1523
|
+
initialFocus,
|
|
1524
|
+
prevMonthLabel: prevMonthLabelProp,
|
|
1525
|
+
nextMonthLabel: nextMonthLabelProp,
|
|
1526
|
+
className
|
|
1527
|
+
} = props;
|
|
1528
|
+
const m = useMessages();
|
|
1529
|
+
const prevMonthLabel = prevMonthLabelProp ?? m.previousMonth ?? "\uC774\uC804 \uB2EC";
|
|
1530
|
+
const nextMonthLabel = nextMonthLabelProp ?? m.nextMonth ?? "\uB2E4\uC74C \uB2EC";
|
|
1531
|
+
const weekdaysShort = m.weekdaysShort ?? KOREAN_WEEKDAYS;
|
|
1532
|
+
const weekdaysLong = m.weekdaysLong ?? KOREAN_WEEKDAYS.map((name) => `${name}\uC694\uC77C`);
|
|
1533
|
+
const headingId = useId4();
|
|
1534
|
+
const gridRef = useRef7(null);
|
|
1535
|
+
const isControlled = "value" in props;
|
|
1536
|
+
const [innerValue, setInnerValue] = useState5(defaultValue ?? "");
|
|
1537
|
+
const selected = parseISODate(isControlled ? value4 : innerValue);
|
|
1538
|
+
const today = parseISODate(todayProp) ?? /* @__PURE__ */ new Date();
|
|
1539
|
+
const minDate = parseISODate(min);
|
|
1540
|
+
const maxDate = parseISODate(max);
|
|
1541
|
+
const clamp = (date) => {
|
|
1542
|
+
if (minDate && compareDays(date, minDate) < 0) return minDate;
|
|
1543
|
+
if (maxDate && compareDays(date, maxDate) > 0) return maxDate;
|
|
1544
|
+
return date;
|
|
1545
|
+
};
|
|
1546
|
+
const isDisabled = (date) => minDate !== null && compareDays(date, minDate) < 0 || maxDate !== null && compareDays(date, maxDate) > 0 || !!isDateDisabled?.(date);
|
|
1547
|
+
const [focused, setFocused] = useState5(() => clamp(selected ?? today));
|
|
1548
|
+
const moveFocus = useRef7(initialFocus ?? false);
|
|
1549
|
+
const selectedIso = selected ? toISODate(selected) : "";
|
|
1550
|
+
useEffect3(() => {
|
|
1551
|
+
const date = parseISODate(selectedIso);
|
|
1552
|
+
if (date) setFocused((prev) => isSameDay(prev, date) ? prev : date);
|
|
1553
|
+
}, [selectedIso]);
|
|
1554
|
+
useEffect3(() => {
|
|
1555
|
+
if (!moveFocus.current) return;
|
|
1556
|
+
moveFocus.current = false;
|
|
1557
|
+
gridRef.current?.querySelector(`[data-date="${toISODate(focused)}"]`)?.focus();
|
|
1558
|
+
}, [focused]);
|
|
1559
|
+
const focusDate = (date) => {
|
|
1560
|
+
moveFocus.current = true;
|
|
1561
|
+
setFocused(clamp(date));
|
|
1562
|
+
};
|
|
1563
|
+
const select = (date) => {
|
|
1564
|
+
if (isDisabled(date)) return;
|
|
1565
|
+
const iso = toISODate(date);
|
|
1566
|
+
if (!isControlled) setInnerValue(iso);
|
|
1567
|
+
onValueChange?.(iso);
|
|
1568
|
+
setFocused(date);
|
|
1569
|
+
};
|
|
1570
|
+
const handleKeyDown = (event) => {
|
|
1571
|
+
const moves = {
|
|
1572
|
+
ArrowLeft: () => addDays(focused, -1),
|
|
1573
|
+
ArrowRight: () => addDays(focused, 1),
|
|
1574
|
+
ArrowUp: () => addDays(focused, -7),
|
|
1575
|
+
ArrowDown: () => addDays(focused, 7),
|
|
1576
|
+
Home: () => addDays(focused, -focused.getDay()),
|
|
1577
|
+
End: () => addDays(focused, 6 - focused.getDay()),
|
|
1578
|
+
PageUp: () => addMonths(focused, event.shiftKey ? -12 : -1),
|
|
1579
|
+
PageDown: () => addMonths(focused, event.shiftKey ? 12 : 1)
|
|
1580
|
+
};
|
|
1581
|
+
const move = moves[event.key];
|
|
1582
|
+
if (move) {
|
|
1583
|
+
event.preventDefault();
|
|
1584
|
+
focusDate(move());
|
|
518
1585
|
}
|
|
519
1586
|
};
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
var Checkbox = /* @__PURE__ */ forwardRef11(function Checkbox2({ label: label6, size, indeterminate = false, invalid, disabled, className, ...rest }, ref) {
|
|
533
|
-
const innerRef = useRef(null);
|
|
534
|
-
useEffect(() => {
|
|
535
|
-
if (innerRef.current) innerRef.current.indeterminate = indeterminate;
|
|
536
|
-
}, [indeterminate]);
|
|
537
|
-
return /* @__PURE__ */ jsxs9("label", { className: cx(root4({ size }), className), "data-disabled": disabled || void 0, children: [
|
|
538
|
-
/* @__PURE__ */ jsxs9("span", { className: control({ size }), children: [
|
|
539
|
-
/* @__PURE__ */ jsx11(
|
|
540
|
-
"input",
|
|
1587
|
+
const visible = focused;
|
|
1588
|
+
const weeks = getCalendarWeeks(visible.getFullYear(), visible.getMonth()).filter(
|
|
1589
|
+
(week) => week.some((date) => isSameMonth(date, visible))
|
|
1590
|
+
);
|
|
1591
|
+
const prevMonth = addMonths(visible, -1);
|
|
1592
|
+
const nextMonth = addMonths(visible, 1);
|
|
1593
|
+
const canPrev = !minDate || compareDays(new Date(visible.getFullYear(), visible.getMonth(), 0), minDate) >= 0;
|
|
1594
|
+
const canNext = !maxDate || compareDays(new Date(visible.getFullYear(), visible.getMonth() + 1, 1), maxDate) <= 0;
|
|
1595
|
+
return /* @__PURE__ */ jsxs16("div", { ref, className: cx(root6, className), children: [
|
|
1596
|
+
/* @__PURE__ */ jsxs16("div", { className: header3, children: [
|
|
1597
|
+
/* @__PURE__ */ jsx20(
|
|
1598
|
+
IconButton,
|
|
541
1599
|
{
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
...rest
|
|
1600
|
+
"aria-label": prevMonthLabel,
|
|
1601
|
+
size: "sm",
|
|
1602
|
+
disabled: !canPrev,
|
|
1603
|
+
onClick: () => setFocused(clamp(prevMonth)),
|
|
1604
|
+
children: /* @__PURE__ */ jsx20(ChevronLeftIcon, {})
|
|
548
1605
|
}
|
|
549
1606
|
),
|
|
550
|
-
/* @__PURE__ */
|
|
551
|
-
|
|
1607
|
+
/* @__PURE__ */ jsx20("div", { id: headingId, className: heading, "aria-live": "polite", children: m.monthTitle?.(visible.getFullYear(), visible.getMonth() + 1) ?? `${visible.getFullYear()}\uB144 ${visible.getMonth() + 1}\uC6D4` }),
|
|
1608
|
+
/* @__PURE__ */ jsx20(
|
|
1609
|
+
IconButton,
|
|
552
1610
|
{
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
1611
|
+
"aria-label": nextMonthLabel,
|
|
1612
|
+
size: "sm",
|
|
1613
|
+
disabled: !canNext,
|
|
1614
|
+
onClick: () => setFocused(clamp(nextMonth)),
|
|
1615
|
+
children: /* @__PURE__ */ jsx20(ChevronRightIcon2, {})
|
|
558
1616
|
}
|
|
559
|
-
)
|
|
560
|
-
/* @__PURE__ */ jsx11("svg", { className: indeterminateIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx11("path", { d: "M6 10h8", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) })
|
|
1617
|
+
)
|
|
561
1618
|
] }),
|
|
562
|
-
|
|
1619
|
+
/* @__PURE__ */ jsxs16("table", { ref: gridRef, role: "grid", "aria-labelledby": headingId, className: grid, onKeyDown: handleKeyDown, children: [
|
|
1620
|
+
/* @__PURE__ */ jsx20("thead", { children: /* @__PURE__ */ jsx20("tr", { children: weekdaysShort.map((name, index) => /* @__PURE__ */ jsx20("th", { scope: "col", abbr: weekdaysLong[index], className: weekday, "data-weekday": index, children: name }, index)) }) }),
|
|
1621
|
+
/* @__PURE__ */ jsx20("tbody", { children: weeks.map((week) => /* @__PURE__ */ jsx20("tr", { children: week.map((date) => {
|
|
1622
|
+
const iso = toISODate(date);
|
|
1623
|
+
if (!isSameMonth(date, visible)) return /* @__PURE__ */ jsx20("td", { role: "gridcell", className: cell }, iso);
|
|
1624
|
+
const isSelected = isSameDay(date, selected);
|
|
1625
|
+
const isToday = isSameDay(date, today);
|
|
1626
|
+
const holiday = !!isHoliday?.(date);
|
|
1627
|
+
const disabled = isDisabled(date);
|
|
1628
|
+
const label6 = [
|
|
1629
|
+
m.dayLabel?.(date, weekdaysLong[date.getDay()]) ?? `${date.getDate()}, ${date.getFullYear()}\uB144 ${date.getMonth() + 1}\uC6D4 ${weekdaysLong[date.getDay()]}`,
|
|
1630
|
+
holiday && (m.holiday ?? "\uACF5\uD734\uC77C"),
|
|
1631
|
+
isToday && (m.today ?? "\uC624\uB298")
|
|
1632
|
+
].filter(Boolean).join(", ");
|
|
1633
|
+
return /* @__PURE__ */ jsx20("td", { role: "gridcell", "aria-selected": isSelected, className: cell, children: /* @__PURE__ */ jsx20(
|
|
1634
|
+
"button",
|
|
1635
|
+
{
|
|
1636
|
+
type: "button",
|
|
1637
|
+
className: day,
|
|
1638
|
+
"data-date": iso,
|
|
1639
|
+
"data-weekday": date.getDay(),
|
|
1640
|
+
"data-holiday": holiday || void 0,
|
|
1641
|
+
"data-selected": isSelected || void 0,
|
|
1642
|
+
tabIndex: isSameDay(date, focused) ? 0 : -1,
|
|
1643
|
+
"aria-label": label6,
|
|
1644
|
+
"aria-current": isToday ? "date" : void 0,
|
|
1645
|
+
"aria-disabled": disabled || void 0,
|
|
1646
|
+
onClick: () => select(date),
|
|
1647
|
+
onFocus: () => !isSameDay(date, focused) && setFocused(date),
|
|
1648
|
+
children: date.getDate()
|
|
1649
|
+
}
|
|
1650
|
+
) }, iso);
|
|
1651
|
+
}) }, toISODate(week[0]))) })
|
|
1652
|
+
] })
|
|
563
1653
|
] });
|
|
564
1654
|
});
|
|
565
1655
|
|
|
1656
|
+
// src/components/Card/Card.tsx
|
|
1657
|
+
import { forwardRef as forwardRef19 } from "react";
|
|
1658
|
+
|
|
1659
|
+
// src/components/Card/Card.css.ts
|
|
1660
|
+
import { createRuntimeFn as _7a46811 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1661
|
+
var body2 = "dnuf1u9";
|
|
1662
|
+
var card = /* @__PURE__ */ _7a46811({ defaultClassName: "dnuf1u0", variantClassNames: { variant: { outline: "dnuf1u1", elevated: "dnuf1u2", soft: "dnuf1u3" }, padding: { none: "dnuf1u4", sm: "dnuf1u5", md: "dnuf1u6", lg: "dnuf1u7" } }, defaultVariants: { variant: "outline", padding: "md" }, compoundVariants: [] });
|
|
1663
|
+
var footer2 = "dnuf1ua";
|
|
1664
|
+
var header4 = "dnuf1u8";
|
|
1665
|
+
|
|
1666
|
+
// src/components/Card/Card.tsx
|
|
1667
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1668
|
+
var Card = /* @__PURE__ */ forwardRef19(function Card2({ variant, padding, as: Component = "div", className, ...rest }, ref) {
|
|
1669
|
+
return /* @__PURE__ */ jsx21(Component, { ref, className: cx(card({ variant, padding }), className), ...rest });
|
|
1670
|
+
});
|
|
1671
|
+
var CardHeader = /* @__PURE__ */ forwardRef19(function CardHeader2({ className, ...rest }, ref) {
|
|
1672
|
+
return /* @__PURE__ */ jsx21("div", { ref, className: cx(header4, className), ...rest });
|
|
1673
|
+
});
|
|
1674
|
+
var CardBody = /* @__PURE__ */ forwardRef19(function CardBody2({ className, ...rest }, ref) {
|
|
1675
|
+
return /* @__PURE__ */ jsx21("div", { ref, className: cx(body2, className), ...rest });
|
|
1676
|
+
});
|
|
1677
|
+
var CardFooter = /* @__PURE__ */ forwardRef19(function CardFooter2({ className, ...rest }, ref) {
|
|
1678
|
+
return /* @__PURE__ */ jsx21("div", { ref, className: cx(footer2, className), ...rest });
|
|
1679
|
+
});
|
|
1680
|
+
|
|
566
1681
|
// src/components/Combobox/Combobox.tsx
|
|
567
1682
|
import * as Popover from "@radix-ui/react-popover";
|
|
568
1683
|
import {
|
|
569
|
-
forwardRef as
|
|
570
|
-
useEffect as
|
|
571
|
-
useId,
|
|
572
|
-
useMemo as
|
|
573
|
-
useRef as
|
|
574
|
-
useState
|
|
1684
|
+
forwardRef as forwardRef20,
|
|
1685
|
+
useEffect as useEffect4,
|
|
1686
|
+
useId as useId5,
|
|
1687
|
+
useMemo as useMemo3,
|
|
1688
|
+
useRef as useRef8,
|
|
1689
|
+
useState as useState6
|
|
575
1690
|
} from "react";
|
|
576
|
-
import { CheckIcon, ChevronDownIcon as
|
|
577
|
-
|
|
578
|
-
// src/components/Input/Input.css.ts
|
|
579
|
-
import { createRuntimeFn as _7a4689 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
580
|
-
var adornment = "_19p5zvh6";
|
|
581
|
-
var field = "_19p5zvh7";
|
|
582
|
-
var fieldFullWidth = "_19p5zvh8";
|
|
583
|
-
var helperText = /* @__PURE__ */ _7a4689({ defaultClassName: "_19p5zvhb", variantClassNames: { error: { true: "_19p5zvhc" } }, defaultVariants: {}, compoundVariants: [] });
|
|
584
|
-
var input2 = "_19p5zvh5";
|
|
585
|
-
var label = "_19p5zvh9";
|
|
586
|
-
var requiredMark = "_19p5zvha";
|
|
587
|
-
var root5 = /* @__PURE__ */ _7a4689({ defaultClassName: "_19p5zvh0", variantClassNames: { size: { sm: "_19p5zvh1", md: "_19p5zvh2", lg: "_19p5zvh3" }, fullWidth: { true: "_19p5zvh4" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1691
|
+
import { CheckIcon, ChevronDownIcon as ChevronDownIcon3 } from "@bestow-ui/icons";
|
|
588
1692
|
|
|
589
1693
|
// src/components/Select/Select.css.ts
|
|
590
|
-
var
|
|
1694
|
+
var content5 = "_1kx81e83";
|
|
591
1695
|
var icon4 = "_1kx81e82";
|
|
592
|
-
var
|
|
1696
|
+
var item4 = "_1kx81e85";
|
|
593
1697
|
var itemIndicator = "_1kx81e86";
|
|
594
1698
|
var trigger2 = "_1kx81e80";
|
|
595
1699
|
var value = "_1kx81e81";
|
|
596
1700
|
var viewport = "_1kx81e84";
|
|
597
1701
|
|
|
598
1702
|
// src/components/Combobox/Combobox.css.ts
|
|
599
|
-
var
|
|
1703
|
+
var content6 = "c2pbq71";
|
|
600
1704
|
var empty = "c2pbq72";
|
|
601
|
-
var
|
|
1705
|
+
var toggle2 = "c2pbq70";
|
|
602
1706
|
|
|
603
1707
|
// src/components/Combobox/Combobox.tsx
|
|
604
|
-
import { jsx as
|
|
1708
|
+
import { jsx as jsx22, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
605
1709
|
var defaultFilter = (option2, query) => option2.label.toLowerCase().includes(query.trim().toLowerCase());
|
|
606
|
-
var Combobox = /* @__PURE__ */
|
|
1710
|
+
var Combobox = /* @__PURE__ */ forwardRef20(function Combobox2(props, ref) {
|
|
607
1711
|
const {
|
|
608
1712
|
options,
|
|
609
1713
|
value: value4,
|
|
610
1714
|
defaultValue,
|
|
611
1715
|
onValueChange,
|
|
612
1716
|
filter = defaultFilter,
|
|
613
|
-
emptyMessage
|
|
1717
|
+
emptyMessage: emptyMessageProp,
|
|
614
1718
|
placeholder,
|
|
615
1719
|
label: label6,
|
|
616
1720
|
helperText: helperText3,
|
|
@@ -622,36 +1726,39 @@ var Combobox = /* @__PURE__ */ forwardRef12(function Combobox2(props, ref) {
|
|
|
622
1726
|
name,
|
|
623
1727
|
id,
|
|
624
1728
|
"aria-label": ariaLabel,
|
|
625
|
-
toggleLabel
|
|
1729
|
+
toggleLabel: toggleLabelProp,
|
|
626
1730
|
className
|
|
627
1731
|
} = props;
|
|
628
|
-
const
|
|
1732
|
+
const m = useMessages();
|
|
1733
|
+
const emptyMessage = emptyMessageProp ?? m.noResults ?? "\uACB0\uACFC\uAC00 \uC5C6\uC5B4\uC694";
|
|
1734
|
+
const toggleLabel = toggleLabelProp ?? m.openList ?? "\uBAA9\uB85D \uC5F4\uAE30";
|
|
1735
|
+
const generatedId = useId5();
|
|
629
1736
|
const inputId = id ?? generatedId;
|
|
630
1737
|
const labelId = `${inputId}-label`;
|
|
631
1738
|
const listId = `${inputId}-listbox`;
|
|
632
1739
|
const helperId = helperText3 ? `${inputId}-helper` : void 0;
|
|
633
1740
|
const optionId = (index) => `${inputId}-option-${index}`;
|
|
634
1741
|
const portal2 = usePortalProps();
|
|
635
|
-
const inputRef =
|
|
636
|
-
const anchorRef =
|
|
1742
|
+
const inputRef = useRef8(null);
|
|
1743
|
+
const anchorRef = useRef8(null);
|
|
637
1744
|
const isControlled = "value" in props;
|
|
638
|
-
const [innerValue, setInnerValue] =
|
|
1745
|
+
const [innerValue, setInnerValue] = useState6(defaultValue);
|
|
639
1746
|
const selectedValue = isControlled ? value4 : innerValue;
|
|
640
1747
|
const selectedOption = options.find((o) => o.value === selectedValue);
|
|
641
|
-
const [open, setOpen] =
|
|
642
|
-
const [query, setQuery] =
|
|
643
|
-
const [activeIndex, setActiveIndex] =
|
|
644
|
-
const filtered =
|
|
1748
|
+
const [open, setOpen] = useState6(false);
|
|
1749
|
+
const [query, setQuery] = useState6(null);
|
|
1750
|
+
const [activeIndex, setActiveIndex] = useState6(-1);
|
|
1751
|
+
const filtered = useMemo3(() => query ? options.filter((o) => filter(o, query)) : options, [options, filter, query]);
|
|
645
1752
|
const inputText = query ?? selectedOption?.label ?? "";
|
|
646
|
-
const firstEnabled = (
|
|
647
|
-
for (let i = from; i >= 0 && i <
|
|
1753
|
+
const firstEnabled = (list5, from = 0, step = 1) => {
|
|
1754
|
+
for (let i = from; i >= 0 && i < list5.length; i += step) if (!list5[i].disabled) return i;
|
|
648
1755
|
return -1;
|
|
649
1756
|
};
|
|
650
|
-
const openList = (
|
|
1757
|
+
const openList = (list5 = filtered, preferLast = false) => {
|
|
651
1758
|
setOpen(true);
|
|
652
|
-
const selectedIndex =
|
|
1759
|
+
const selectedIndex = list5.findIndex((o) => o.value === selectedValue);
|
|
653
1760
|
setActiveIndex(
|
|
654
|
-
selectedIndex >= 0 && !
|
|
1761
|
+
selectedIndex >= 0 && !list5[selectedIndex].disabled ? selectedIndex : preferLast ? firstEnabled(list5, list5.length - 1, -1) : firstEnabled(list5)
|
|
655
1762
|
);
|
|
656
1763
|
};
|
|
657
1764
|
const close2 = () => {
|
|
@@ -707,26 +1814,26 @@ var Combobox = /* @__PURE__ */ forwardRef12(function Combobox2(props, ref) {
|
|
|
707
1814
|
break;
|
|
708
1815
|
}
|
|
709
1816
|
};
|
|
710
|
-
|
|
1817
|
+
useEffect4(() => {
|
|
711
1818
|
if (!open || activeIndex < 0) return;
|
|
712
1819
|
document.getElementById(optionId(activeIndex))?.scrollIntoView?.({ block: "nearest" });
|
|
713
1820
|
}, [open, activeIndex]);
|
|
714
1821
|
const hasOptions = filtered.length > 0;
|
|
715
|
-
return /* @__PURE__ */
|
|
716
|
-
label6 && /* @__PURE__ */
|
|
1822
|
+
return /* @__PURE__ */ jsxs17("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
|
|
1823
|
+
label6 && /* @__PURE__ */ jsxs17("label", { id: labelId, htmlFor: inputId, className: label, children: [
|
|
717
1824
|
label6,
|
|
718
|
-
required && /* @__PURE__ */
|
|
1825
|
+
required && /* @__PURE__ */ jsx22("span", { className: requiredMark, "aria-hidden": true, children: "*" })
|
|
719
1826
|
] }),
|
|
720
|
-
/* @__PURE__ */
|
|
721
|
-
/* @__PURE__ */
|
|
1827
|
+
/* @__PURE__ */ jsxs17(Popover.Root, { open: open && !disabled, onOpenChange: (next) => next ? openList() : close2(), children: [
|
|
1828
|
+
/* @__PURE__ */ jsx22(Popover.Anchor, { asChild: true, children: /* @__PURE__ */ jsxs17(
|
|
722
1829
|
"div",
|
|
723
1830
|
{
|
|
724
1831
|
ref: anchorRef,
|
|
725
|
-
className: cx(
|
|
1832
|
+
className: cx(root3({ size, fullWidth }), className),
|
|
726
1833
|
"data-invalid": error || void 0,
|
|
727
1834
|
"data-disabled": disabled || void 0,
|
|
728
1835
|
children: [
|
|
729
|
-
/* @__PURE__ */
|
|
1836
|
+
/* @__PURE__ */ jsx22(
|
|
730
1837
|
"input",
|
|
731
1838
|
{
|
|
732
1839
|
ref: mergeRefs(ref, inputRef),
|
|
@@ -750,10 +1857,10 @@ var Combobox = /* @__PURE__ */ forwardRef12(function Combobox2(props, ref) {
|
|
|
750
1857
|
onBlur: () => {
|
|
751
1858
|
if (open) close2();
|
|
752
1859
|
},
|
|
753
|
-
className:
|
|
1860
|
+
className: input
|
|
754
1861
|
}
|
|
755
1862
|
),
|
|
756
|
-
/* @__PURE__ */
|
|
1863
|
+
/* @__PURE__ */ jsx22(
|
|
757
1864
|
"button",
|
|
758
1865
|
{
|
|
759
1866
|
type: "button",
|
|
@@ -761,27 +1868,27 @@ var Combobox = /* @__PURE__ */ forwardRef12(function Combobox2(props, ref) {
|
|
|
761
1868
|
"aria-label": toggleLabel,
|
|
762
1869
|
"aria-expanded": open,
|
|
763
1870
|
disabled,
|
|
764
|
-
className:
|
|
1871
|
+
className: toggle2,
|
|
765
1872
|
onMouseDown: (event) => event.preventDefault(),
|
|
766
1873
|
onClick: () => {
|
|
767
1874
|
if (open) close2();
|
|
768
1875
|
else openList(options);
|
|
769
1876
|
inputRef.current?.focus();
|
|
770
1877
|
},
|
|
771
|
-
children: /* @__PURE__ */
|
|
1878
|
+
children: /* @__PURE__ */ jsx22(ChevronDownIcon3, { size: 16 })
|
|
772
1879
|
}
|
|
773
1880
|
)
|
|
774
1881
|
]
|
|
775
1882
|
}
|
|
776
1883
|
) }),
|
|
777
|
-
/* @__PURE__ */
|
|
1884
|
+
/* @__PURE__ */ jsx22(Popover.Portal, { children: /* @__PURE__ */ jsx22(
|
|
778
1885
|
Popover.Content,
|
|
779
1886
|
{
|
|
780
1887
|
role: "presentation",
|
|
781
1888
|
align: "start",
|
|
782
1889
|
sideOffset: 4,
|
|
783
1890
|
collisionPadding: 8,
|
|
784
|
-
className: cx(portal2.className,
|
|
1891
|
+
className: cx(portal2.className, content6),
|
|
785
1892
|
style: portal2.style,
|
|
786
1893
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
787
1894
|
onCloseAutoFocus: (event) => event.preventDefault(),
|
|
@@ -789,7 +1896,7 @@ var Combobox = /* @__PURE__ */ forwardRef12(function Combobox2(props, ref) {
|
|
|
789
1896
|
onInteractOutside: (event) => {
|
|
790
1897
|
if (anchorRef.current?.contains(event.target)) event.preventDefault();
|
|
791
1898
|
},
|
|
792
|
-
children: hasOptions ? /* @__PURE__ */
|
|
1899
|
+
children: hasOptions ? /* @__PURE__ */ jsx22(
|
|
793
1900
|
"div",
|
|
794
1901
|
{
|
|
795
1902
|
id: listId,
|
|
@@ -801,7 +1908,7 @@ var Combobox = /* @__PURE__ */ forwardRef12(function Combobox2(props, ref) {
|
|
|
801
1908
|
return (
|
|
802
1909
|
// aria-activedescendant 패턴: 포커스·키보드는 입력창이 맡고 항목은 포커스를 받지 않는다 (WAI-ARIA combobox)
|
|
803
1910
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/interactive-supports-focus
|
|
804
|
-
/* @__PURE__ */
|
|
1911
|
+
/* @__PURE__ */ jsxs17(
|
|
805
1912
|
"div",
|
|
806
1913
|
{
|
|
807
1914
|
id: optionId(index),
|
|
@@ -811,13 +1918,13 @@ var Combobox = /* @__PURE__ */ forwardRef12(function Combobox2(props, ref) {
|
|
|
811
1918
|
"data-highlighted": index === activeIndex ? "" : void 0,
|
|
812
1919
|
"data-state": isSelected ? "checked" : "unchecked",
|
|
813
1920
|
"data-disabled": option2.disabled ? "" : void 0,
|
|
814
|
-
className:
|
|
1921
|
+
className: item4,
|
|
815
1922
|
onMouseDown: (event) => event.preventDefault(),
|
|
816
1923
|
onMouseMove: () => !option2.disabled && setActiveIndex(index),
|
|
817
1924
|
onClick: () => select(option2),
|
|
818
1925
|
children: [
|
|
819
1926
|
option2.label,
|
|
820
|
-
isSelected && /* @__PURE__ */
|
|
1927
|
+
isSelected && /* @__PURE__ */ jsx22("span", { className: itemIndicator, "aria-hidden": true, children: /* @__PURE__ */ jsx22(CheckIcon, { size: 16 }) })
|
|
821
1928
|
]
|
|
822
1929
|
},
|
|
823
1930
|
option2.value
|
|
@@ -825,81 +1932,259 @@ var Combobox = /* @__PURE__ */ forwardRef12(function Combobox2(props, ref) {
|
|
|
825
1932
|
);
|
|
826
1933
|
})
|
|
827
1934
|
}
|
|
828
|
-
) : /* @__PURE__ */
|
|
1935
|
+
) : /* @__PURE__ */ jsx22("div", { className: empty, role: "status", children: emptyMessage })
|
|
829
1936
|
}
|
|
830
1937
|
) })
|
|
831
1938
|
] }),
|
|
832
|
-
name && /* @__PURE__ */
|
|
833
|
-
helperText3 && /* @__PURE__ */
|
|
1939
|
+
name && /* @__PURE__ */ jsx22("input", { type: "hidden", name, value: selectedValue ?? "" }),
|
|
1940
|
+
helperText3 && /* @__PURE__ */ jsx22("p", { id: helperId, className: helperText({ error }), children: helperText3 })
|
|
834
1941
|
] });
|
|
835
1942
|
});
|
|
836
1943
|
|
|
1944
|
+
// src/components/DatePicker/DatePicker.tsx
|
|
1945
|
+
import { forwardRef as forwardRef21, useEffect as useEffect5, useRef as useRef9, useState as useState7 } from "react";
|
|
1946
|
+
import { CalendarIcon } from "@bestow-ui/icons";
|
|
1947
|
+
|
|
1948
|
+
// src/components/Popover/Popover.tsx
|
|
1949
|
+
import * as RadixPopover from "@radix-ui/react-popover";
|
|
1950
|
+
import { XIcon as XIcon3 } from "@bestow-ui/icons";
|
|
1951
|
+
import { useId as useId6 } from "react";
|
|
1952
|
+
|
|
1953
|
+
// src/components/Popover/Popover.css.ts
|
|
1954
|
+
var arrow = "_1j99p8x4";
|
|
1955
|
+
var closeButton3 = "_1j99p8x3";
|
|
1956
|
+
var content7 = "_1j99p8x0";
|
|
1957
|
+
var header5 = "_1j99p8x1";
|
|
1958
|
+
var title3 = "_1j99p8x2";
|
|
1959
|
+
|
|
1960
|
+
// src/components/Popover/Popover.tsx
|
|
1961
|
+
import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1962
|
+
function Popover2({
|
|
1963
|
+
content: content12,
|
|
1964
|
+
children,
|
|
1965
|
+
title: title6,
|
|
1966
|
+
"aria-label": ariaLabel,
|
|
1967
|
+
showClose = false,
|
|
1968
|
+
showArrow = false,
|
|
1969
|
+
side = "bottom",
|
|
1970
|
+
align = "center",
|
|
1971
|
+
open,
|
|
1972
|
+
defaultOpen,
|
|
1973
|
+
onOpenChange,
|
|
1974
|
+
modal,
|
|
1975
|
+
className,
|
|
1976
|
+
style,
|
|
1977
|
+
onOpenAutoFocus
|
|
1978
|
+
}) {
|
|
1979
|
+
const portal2 = usePortalProps();
|
|
1980
|
+
const m = useMessages();
|
|
1981
|
+
const titleId = useId6();
|
|
1982
|
+
return /* @__PURE__ */ jsxs18(RadixPopover.Root, { open, defaultOpen, onOpenChange, modal, children: [
|
|
1983
|
+
/* @__PURE__ */ jsx23(RadixPopover.Trigger, { asChild: true, children }),
|
|
1984
|
+
/* @__PURE__ */ jsx23(RadixPopover.Portal, { children: /* @__PURE__ */ jsxs18(
|
|
1985
|
+
RadixPopover.Content,
|
|
1986
|
+
{
|
|
1987
|
+
side,
|
|
1988
|
+
align,
|
|
1989
|
+
sideOffset: 6,
|
|
1990
|
+
onOpenAutoFocus,
|
|
1991
|
+
collisionPadding: 8,
|
|
1992
|
+
"aria-labelledby": title6 ? titleId : void 0,
|
|
1993
|
+
"aria-label": title6 ? void 0 : ariaLabel,
|
|
1994
|
+
className: cx(portal2.className, content7, className),
|
|
1995
|
+
style: { ...portal2.style, ...style },
|
|
1996
|
+
children: [
|
|
1997
|
+
(title6 || showClose) && /* @__PURE__ */ jsxs18("div", { className: header5, children: [
|
|
1998
|
+
title6 && /* @__PURE__ */ jsx23("h2", { id: titleId, className: title3, children: title6 }),
|
|
1999
|
+
showClose && /* @__PURE__ */ jsx23(RadixPopover.Close, { className: closeButton3, "aria-label": m.close ?? "\uB2EB\uAE30", children: /* @__PURE__ */ jsx23(XIcon3, { size: 16 }) })
|
|
2000
|
+
] }),
|
|
2001
|
+
content12,
|
|
2002
|
+
showArrow && /* @__PURE__ */ jsx23(RadixPopover.Arrow, { className: arrow, width: 12, height: 6 })
|
|
2003
|
+
]
|
|
2004
|
+
}
|
|
2005
|
+
) })
|
|
2006
|
+
] });
|
|
2007
|
+
}
|
|
2008
|
+
var PopoverClose = RadixPopover.Close;
|
|
2009
|
+
|
|
2010
|
+
// src/components/DatePicker/DatePicker.tsx
|
|
2011
|
+
import { Fragment as Fragment4, jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2012
|
+
var sanitize2 = (input5) => input5.replace(/\D/g, "").slice(0, 8);
|
|
2013
|
+
var format = (digits) => digits.length <= 4 ? digits : digits.length <= 6 ? `${digits.slice(0, 4)}-${digits.slice(4)}` : `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}`;
|
|
2014
|
+
var isDigit3 = (char) => /\d/.test(char);
|
|
2015
|
+
var DatePicker = /* @__PURE__ */ forwardRef21(
|
|
2016
|
+
function DatePicker2(props, ref) {
|
|
2017
|
+
const {
|
|
2018
|
+
value: value4,
|
|
2019
|
+
defaultValue,
|
|
2020
|
+
onValueChange,
|
|
2021
|
+
min,
|
|
2022
|
+
max,
|
|
2023
|
+
isDateDisabled,
|
|
2024
|
+
isHoliday,
|
|
2025
|
+
today,
|
|
2026
|
+
label: labelProp,
|
|
2027
|
+
helperText: helperText3,
|
|
2028
|
+
error,
|
|
2029
|
+
required,
|
|
2030
|
+
disabled,
|
|
2031
|
+
fullWidth,
|
|
2032
|
+
placeholder = "YYYY-MM-DD",
|
|
2033
|
+
calendarLabel: calendarLabelProp,
|
|
2034
|
+
invalidText: invalidTextProp,
|
|
2035
|
+
unavailableText: unavailableTextProp,
|
|
2036
|
+
incompleteText: incompleteTextProp,
|
|
2037
|
+
name,
|
|
2038
|
+
id,
|
|
2039
|
+
className
|
|
2040
|
+
} = props;
|
|
2041
|
+
const inputRef = useRef9(null);
|
|
2042
|
+
const m = useMessages();
|
|
2043
|
+
const label6 = labelProp ?? m.date ?? "\uB0A0\uC9DC";
|
|
2044
|
+
const calendarLabel = calendarLabelProp ?? m.openCalendar ?? "\uB2EC\uB825 \uC5F4\uAE30";
|
|
2045
|
+
const invalidText = invalidTextProp ?? m.dateInvalid ?? "\uC62C\uBC14\uB978 \uB0A0\uC9DC\uAC00 \uC544\uB2C8\uC5D0\uC694.";
|
|
2046
|
+
const unavailableText = unavailableTextProp ?? m.dateUnavailable ?? "\uACE0\uB97C \uC218 \uC5C6\uB294 \uB0A0\uC9DC\uC608\uC694.";
|
|
2047
|
+
const incompleteText = incompleteTextProp ?? m.dateIncomplete ?? "\uB0A0\uC9DC\uB97C YYYY-MM-DD \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.";
|
|
2048
|
+
const [open, setOpen] = useState7(false);
|
|
2049
|
+
const [touched, setTouched] = useState7(false);
|
|
2050
|
+
const isControlled = "value" in props;
|
|
2051
|
+
const lastEmitted = useRef9(isControlled ? value4 ?? "" : defaultValue ?? "");
|
|
2052
|
+
const minDate = parseISODate(min);
|
|
2053
|
+
const maxDate = parseISODate(max);
|
|
2054
|
+
const toIso = (digits) => digits.length === 8 ? `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}` : "";
|
|
2055
|
+
const isUnavailable = (date2) => minDate !== null && compareDays(date2, minDate) < 0 || maxDate !== null && compareDays(date2, maxDate) > 0 || !!isDateDisabled?.(date2);
|
|
2056
|
+
const emit = (iso) => {
|
|
2057
|
+
if (iso === lastEmitted.current) return;
|
|
2058
|
+
lastEmitted.current = iso;
|
|
2059
|
+
onValueChange?.(iso);
|
|
2060
|
+
};
|
|
2061
|
+
const field3 = useFormattedInput({
|
|
2062
|
+
isControlled: false,
|
|
2063
|
+
value: void 0,
|
|
2064
|
+
defaultValue: (isControlled ? value4 : defaultValue)?.replace(/\D/g, ""),
|
|
2065
|
+
onValueChange: (digits) => {
|
|
2066
|
+
const date2 = parseISODate(toIso(digits));
|
|
2067
|
+
emit(date2 && !isUnavailable(date2) ? toIso(digits) : "");
|
|
2068
|
+
},
|
|
2069
|
+
sanitize: sanitize2,
|
|
2070
|
+
format,
|
|
2071
|
+
isMeaningful: isDigit3,
|
|
2072
|
+
inputRef
|
|
2073
|
+
});
|
|
2074
|
+
const textIso = toIso(field3.raw);
|
|
2075
|
+
const { setRaw } = field3;
|
|
2076
|
+
useEffect5(() => {
|
|
2077
|
+
if (!isControlled) return;
|
|
2078
|
+
const next = value4 ?? "";
|
|
2079
|
+
lastEmitted.current = next;
|
|
2080
|
+
if (next === textIso) return;
|
|
2081
|
+
const textDate = parseISODate(textIso);
|
|
2082
|
+
const textIsValid = textDate !== null && !isUnavailable(textDate);
|
|
2083
|
+
if (next === "" && !textIsValid) return;
|
|
2084
|
+
setRaw(next.replace(/\D/g, ""));
|
|
2085
|
+
}, [value4]);
|
|
2086
|
+
const date = parseISODate(textIso);
|
|
2087
|
+
const complete = field3.raw.length === 8;
|
|
2088
|
+
const autoError = complete ? !date ? invalidText : isUnavailable(date) ? unavailableText : null : touched && field3.raw.length > 0 ? incompleteText : null;
|
|
2089
|
+
const showAuto = autoError !== null && error === void 0;
|
|
2090
|
+
const selectedIso = date && !isUnavailable(date) ? textIso : "";
|
|
2091
|
+
return /* @__PURE__ */ jsxs19(Fragment4, { children: [
|
|
2092
|
+
/* @__PURE__ */ jsx24(
|
|
2093
|
+
TextField,
|
|
2094
|
+
{
|
|
2095
|
+
ref: mergeRefs(ref, inputRef),
|
|
2096
|
+
id,
|
|
2097
|
+
label: label6,
|
|
2098
|
+
placeholder,
|
|
2099
|
+
inputMode: "numeric",
|
|
2100
|
+
autoComplete: "off",
|
|
2101
|
+
value: field3.display,
|
|
2102
|
+
onChange: field3.onChange,
|
|
2103
|
+
onKeyDown: field3.onKeyDown,
|
|
2104
|
+
onBlur: () => setTouched(true),
|
|
2105
|
+
error: error ?? autoError !== null,
|
|
2106
|
+
helperText: showAuto ? autoError : helperText3,
|
|
2107
|
+
required,
|
|
2108
|
+
disabled,
|
|
2109
|
+
fullWidth,
|
|
2110
|
+
rootClassName: className,
|
|
2111
|
+
endAdornment: /* @__PURE__ */ jsx24(
|
|
2112
|
+
Popover2,
|
|
2113
|
+
{
|
|
2114
|
+
open,
|
|
2115
|
+
onOpenChange: setOpen,
|
|
2116
|
+
modal: true,
|
|
2117
|
+
align: "end",
|
|
2118
|
+
"aria-label": m.calendar ?? "\uB2EC\uB825",
|
|
2119
|
+
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
2120
|
+
content: /* @__PURE__ */ jsx24(
|
|
2121
|
+
Calendar,
|
|
2122
|
+
{
|
|
2123
|
+
value: selectedIso,
|
|
2124
|
+
onValueChange: (iso) => {
|
|
2125
|
+
setRaw(iso.replace(/\D/g, ""));
|
|
2126
|
+
emit(iso);
|
|
2127
|
+
setOpen(false);
|
|
2128
|
+
},
|
|
2129
|
+
min,
|
|
2130
|
+
max,
|
|
2131
|
+
isDateDisabled,
|
|
2132
|
+
isHoliday,
|
|
2133
|
+
today,
|
|
2134
|
+
initialFocus: true
|
|
2135
|
+
}
|
|
2136
|
+
),
|
|
2137
|
+
children: /* @__PURE__ */ jsx24(IconButton, { "aria-label": calendarLabel, size: "sm", disabled, children: /* @__PURE__ */ jsx24(CalendarIcon, {}) })
|
|
2138
|
+
}
|
|
2139
|
+
)
|
|
2140
|
+
}
|
|
2141
|
+
),
|
|
2142
|
+
name && /* @__PURE__ */ jsx24("input", { type: "hidden", name, value: selectedIso })
|
|
2143
|
+
] });
|
|
2144
|
+
}
|
|
2145
|
+
);
|
|
2146
|
+
|
|
837
2147
|
// src/components/Divider/Divider.tsx
|
|
838
|
-
import { forwardRef as
|
|
2148
|
+
import { forwardRef as forwardRef22 } from "react";
|
|
839
2149
|
|
|
840
2150
|
// src/components/Divider/Divider.css.ts
|
|
841
|
-
import { createRuntimeFn as
|
|
842
|
-
var divider = /* @__PURE__ */
|
|
2151
|
+
import { createRuntimeFn as _7a46812 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
2152
|
+
var divider = /* @__PURE__ */ _7a46812({ defaultClassName: "_1t3gq8v0", variantClassNames: { orientation: { horizontal: "_1t3gq8v1", vertical: "_1t3gq8v2" } }, defaultVariants: { orientation: "horizontal" }, compoundVariants: [] });
|
|
843
2153
|
var labeled = "_1t3gq8v3";
|
|
844
2154
|
var line = "_1t3gq8v4";
|
|
845
2155
|
|
|
846
2156
|
// src/components/Divider/Divider.tsx
|
|
847
|
-
import { jsx as
|
|
848
|
-
var Divider = /* @__PURE__ */
|
|
2157
|
+
import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2158
|
+
var Divider = /* @__PURE__ */ forwardRef22(function Divider2({ orientation = "horizontal", decorative, className, children, ...rest }, ref) {
|
|
849
2159
|
if (children && orientation === "horizontal") {
|
|
850
|
-
return /* @__PURE__ */
|
|
851
|
-
/* @__PURE__ */
|
|
2160
|
+
return /* @__PURE__ */ jsxs20("div", { ref, className: cx(labeled, className), ...rest, children: [
|
|
2161
|
+
/* @__PURE__ */ jsx25("span", { className: line, "aria-hidden": true }),
|
|
852
2162
|
children,
|
|
853
|
-
/* @__PURE__ */
|
|
2163
|
+
/* @__PURE__ */ jsx25("span", { className: line, "aria-hidden": true })
|
|
854
2164
|
] });
|
|
855
2165
|
}
|
|
856
2166
|
const a11y = decorative ? { role: "none" } : { role: "separator", "aria-orientation": orientation === "vertical" ? "vertical" : void 0 };
|
|
857
|
-
return /* @__PURE__ */
|
|
2167
|
+
return /* @__PURE__ */ jsx25("div", { ref, className: cx(divider({ orientation }), className), ...a11y, ...rest });
|
|
858
2168
|
});
|
|
859
2169
|
|
|
860
2170
|
// src/components/Drawer/Drawer.tsx
|
|
861
|
-
import * as
|
|
862
|
-
import { XIcon as
|
|
863
|
-
|
|
864
|
-
// src/components/IconButton/IconButton.tsx
|
|
865
|
-
import { forwardRef as forwardRef14 } from "react";
|
|
866
|
-
|
|
867
|
-
// src/components/IconButton/IconButton.css.ts
|
|
868
|
-
import { createRuntimeFn as _7a46811 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
869
|
-
var iconButton = /* @__PURE__ */ _7a46811({ defaultClassName: "ip9et20", variantClassNames: { size: { sm: "ip9et21", md: "ip9et22", lg: "ip9et23" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
870
|
-
|
|
871
|
-
// src/components/IconButton/IconButton.tsx
|
|
872
|
-
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
873
|
-
var IconButton = /* @__PURE__ */ forwardRef14(function IconButton2({ variant = "ghost", color = "neutral", size, loading, className, children, ...rest }, ref) {
|
|
874
|
-
return /* @__PURE__ */ jsx14(
|
|
875
|
-
Button,
|
|
876
|
-
{
|
|
877
|
-
ref,
|
|
878
|
-
variant,
|
|
879
|
-
color,
|
|
880
|
-
size,
|
|
881
|
-
loading,
|
|
882
|
-
className: cx(iconButton({ size }), className),
|
|
883
|
-
...rest,
|
|
884
|
-
children: !loading && children
|
|
885
|
-
}
|
|
886
|
-
);
|
|
887
|
-
});
|
|
2171
|
+
import * as Dialog2 from "@radix-ui/react-dialog";
|
|
2172
|
+
import { XIcon as XIcon4 } from "@bestow-ui/icons";
|
|
888
2173
|
|
|
889
2174
|
// src/components/Drawer/Drawer.css.ts
|
|
890
|
-
import { createRuntimeFn as
|
|
891
|
-
var
|
|
892
|
-
var
|
|
893
|
-
var
|
|
894
|
-
var
|
|
895
|
-
var
|
|
896
|
-
var
|
|
897
|
-
var
|
|
898
|
-
var
|
|
899
|
-
var
|
|
2175
|
+
import { createRuntimeFn as _7a46813 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
2176
|
+
var body3 = "nmobyvy";
|
|
2177
|
+
var closeButton4 = "nmobyvx";
|
|
2178
|
+
var content8 = /* @__PURE__ */ _7a46813({ defaultClassName: "nmobyv9", variantClassNames: { side: { right: "nmobyva", left: "nmobyvb", top: "nmobyvc", bottom: "nmobyvd" }, size: { sm: "nmobyve", md: "nmobyvf", lg: "nmobyvg" } }, defaultVariants: { side: "right", size: "md" }, compoundVariants: [[{ side: "right", size: "sm" }, "nmobyvh"], [{ side: "right", size: "md" }, "nmobyvi"], [{ side: "right", size: "lg" }, "nmobyvj"], [{ side: "left", size: "sm" }, "nmobyvk"], [{ side: "left", size: "md" }, "nmobyvl"], [{ side: "left", size: "lg" }, "nmobyvm"], [{ side: "top", size: "sm" }, "nmobyvn"], [{ side: "top", size: "md" }, "nmobyvo"], [{ side: "top", size: "lg" }, "nmobyvp"], [{ side: "bottom", size: "sm" }, "nmobyvq"], [{ side: "bottom", size: "md" }, "nmobyvr"], [{ side: "bottom", size: "lg" }, "nmobyvs"]] });
|
|
2179
|
+
var description3 = "nmobyvw";
|
|
2180
|
+
var footer3 = "nmobyvz";
|
|
2181
|
+
var header6 = "nmobyvt";
|
|
2182
|
+
var headings2 = "nmobyvu";
|
|
2183
|
+
var overlay2 = "nmobyv0";
|
|
2184
|
+
var title4 = "nmobyvv";
|
|
900
2185
|
|
|
901
2186
|
// src/components/Drawer/Drawer.tsx
|
|
902
|
-
import { jsx as
|
|
2187
|
+
import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
903
2188
|
function Drawer({
|
|
904
2189
|
open,
|
|
905
2190
|
defaultOpen,
|
|
@@ -916,58 +2201,62 @@ function Drawer({
|
|
|
916
2201
|
className
|
|
917
2202
|
}) {
|
|
918
2203
|
const portal2 = usePortalProps();
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
2204
|
+
const m = useMessages();
|
|
2205
|
+
const focus = useReturnFocus(Boolean(trigger4));
|
|
2206
|
+
return /* @__PURE__ */ jsxs21(Dialog2.Root, { open, defaultOpen, onOpenChange, children: [
|
|
2207
|
+
trigger4 && /* @__PURE__ */ jsx26(Dialog2.Trigger, { asChild: true, children: trigger4 }),
|
|
2208
|
+
/* @__PURE__ */ jsxs21(Dialog2.Portal, { children: [
|
|
2209
|
+
/* @__PURE__ */ jsx26(Dialog2.Overlay, { className: cx(portal2.className, overlay2), style: portal2.style }),
|
|
2210
|
+
/* @__PURE__ */ jsxs21(
|
|
2211
|
+
Dialog2.Content,
|
|
925
2212
|
{
|
|
926
|
-
className: cx(portal2.className,
|
|
2213
|
+
className: cx(portal2.className, content8({ side, size }), className),
|
|
927
2214
|
style: portal2.style,
|
|
928
2215
|
"data-side": side ?? "right",
|
|
929
2216
|
onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
|
|
2217
|
+
onOpenAutoFocus: focus.onOpenAutoFocus,
|
|
2218
|
+
onCloseAutoFocus: focus.onCloseAutoFocus,
|
|
930
2219
|
...description6 ? {} : { "aria-describedby": void 0 },
|
|
931
2220
|
children: [
|
|
932
|
-
/* @__PURE__ */
|
|
933
|
-
/* @__PURE__ */
|
|
934
|
-
/* @__PURE__ */
|
|
935
|
-
description6 && /* @__PURE__ */
|
|
2221
|
+
/* @__PURE__ */ jsxs21("div", { className: header6, children: [
|
|
2222
|
+
/* @__PURE__ */ jsxs21("div", { className: headings2, children: [
|
|
2223
|
+
/* @__PURE__ */ jsx26(Dialog2.Title, { className: title4, children: title6 }),
|
|
2224
|
+
description6 && /* @__PURE__ */ jsx26(Dialog2.Description, { className: description3, children: description6 })
|
|
936
2225
|
] }),
|
|
937
|
-
!hideCloseButton && /* @__PURE__ */
|
|
2226
|
+
!hideCloseButton && /* @__PURE__ */ jsx26(Dialog2.Close, { asChild: true, children: /* @__PURE__ */ jsx26(IconButton, { "aria-label": m.close ?? "\uB2EB\uAE30", size: "sm", className: closeButton4, children: /* @__PURE__ */ jsx26(XIcon4, {}) }) })
|
|
938
2227
|
] }),
|
|
939
|
-
children && /* @__PURE__ */
|
|
940
|
-
footer6 && /* @__PURE__ */
|
|
2228
|
+
children && /* @__PURE__ */ jsx26("div", { className: body3, children }),
|
|
2229
|
+
footer6 && /* @__PURE__ */ jsx26("div", { className: footer3, children: footer6 })
|
|
941
2230
|
]
|
|
942
2231
|
}
|
|
943
2232
|
)
|
|
944
2233
|
] })
|
|
945
2234
|
] });
|
|
946
2235
|
}
|
|
947
|
-
var DrawerClose =
|
|
2236
|
+
var DrawerClose = Dialog2.Close;
|
|
948
2237
|
|
|
949
2238
|
// src/components/DropdownMenu/DropdownMenu.tsx
|
|
950
2239
|
import * as RadixMenu from "@radix-ui/react-dropdown-menu";
|
|
951
|
-
import { forwardRef as
|
|
2240
|
+
import { forwardRef as forwardRef23 } from "react";
|
|
952
2241
|
|
|
953
2242
|
// src/components/DropdownMenu/DropdownMenu.css.ts
|
|
954
|
-
var
|
|
2243
|
+
var content9 = "_1d7ahux0";
|
|
955
2244
|
var danger = "_1d7ahux2";
|
|
956
2245
|
var icon5 = "_1d7ahux3";
|
|
957
|
-
var
|
|
2246
|
+
var item5 = "_1d7ahux1";
|
|
958
2247
|
var label2 = "_1d7ahux5";
|
|
959
2248
|
var separator2 = "_1d7ahux6";
|
|
960
2249
|
var shortcut = "_1d7ahux4";
|
|
961
2250
|
|
|
962
2251
|
// src/components/DropdownMenu/DropdownMenu.tsx
|
|
963
|
-
import { jsx as
|
|
2252
|
+
import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
964
2253
|
var DropdownMenu = RadixMenu.Root;
|
|
965
2254
|
var DropdownMenuTrigger = RadixMenu.Trigger;
|
|
966
2255
|
var DropdownMenuGroup = RadixMenu.Group;
|
|
967
|
-
var DropdownMenuContent = /* @__PURE__ */
|
|
2256
|
+
var DropdownMenuContent = /* @__PURE__ */ forwardRef23(
|
|
968
2257
|
function DropdownMenuContent2({ className, style, side = "bottom", align = "start", sideOffset = 4, collisionPadding = 8, ...rest }, ref) {
|
|
969
2258
|
const portal2 = usePortalProps();
|
|
970
|
-
return /* @__PURE__ */
|
|
2259
|
+
return /* @__PURE__ */ jsx27(RadixMenu.Portal, { children: /* @__PURE__ */ jsx27(
|
|
971
2260
|
RadixMenu.Content,
|
|
972
2261
|
{
|
|
973
2262
|
ref,
|
|
@@ -975,154 +2264,39 @@ var DropdownMenuContent = /* @__PURE__ */ forwardRef15(
|
|
|
975
2264
|
align,
|
|
976
2265
|
sideOffset,
|
|
977
2266
|
collisionPadding,
|
|
978
|
-
className: cx(portal2.className,
|
|
2267
|
+
className: cx(portal2.className, content9, className),
|
|
979
2268
|
style: { ...portal2.style, ...style },
|
|
980
2269
|
...rest
|
|
981
2270
|
}
|
|
982
2271
|
) });
|
|
983
2272
|
}
|
|
984
2273
|
);
|
|
985
|
-
var DropdownMenuItem = /* @__PURE__ */
|
|
986
|
-
function DropdownMenuItem2({ icon: icon6, shortcut: shortcut2, color = "
|
|
987
|
-
|
|
988
|
-
|
|
2274
|
+
var DropdownMenuItem = /* @__PURE__ */ forwardRef23(
|
|
2275
|
+
function DropdownMenuItem2({ icon: icon6, shortcut: shortcut2, color = "neutral", className, children, ...rest }, ref) {
|
|
2276
|
+
if (color === "default") {
|
|
2277
|
+
warnOnce('DropdownMenuItem \uC758 color="default" \uB294 deprecated \uC608\uC694. color="neutral" \uC744 \uC4F0\uC138\uC694 (1.0 \uC5D0\uC11C \uC81C\uAC70).');
|
|
2278
|
+
}
|
|
2279
|
+
return /* @__PURE__ */ jsxs22(RadixMenu.Item, { ref, className: cx(item5, color === "danger" && danger, className), ...rest, children: [
|
|
2280
|
+
icon6 && /* @__PURE__ */ jsx27("span", { className: icon5, "aria-hidden": true, children: icon6 }),
|
|
989
2281
|
children,
|
|
990
|
-
shortcut2 && /* @__PURE__ */
|
|
2282
|
+
shortcut2 && /* @__PURE__ */ jsx27("span", { className: shortcut, "aria-hidden": true, children: shortcut2 })
|
|
991
2283
|
] });
|
|
992
2284
|
}
|
|
993
2285
|
);
|
|
994
|
-
var DropdownMenuLabel = /* @__PURE__ */
|
|
2286
|
+
var DropdownMenuLabel = /* @__PURE__ */ forwardRef23(
|
|
995
2287
|
function DropdownMenuLabel2({ className, ...rest }, ref) {
|
|
996
|
-
return /* @__PURE__ */
|
|
2288
|
+
return /* @__PURE__ */ jsx27(RadixMenu.Label, { ref, className: cx(label2, className), ...rest });
|
|
997
2289
|
}
|
|
998
2290
|
);
|
|
999
|
-
var DropdownMenuSeparator = /* @__PURE__ */
|
|
2291
|
+
var DropdownMenuSeparator = /* @__PURE__ */ forwardRef23(
|
|
1000
2292
|
function DropdownMenuSeparator2({ className, ...rest }, ref) {
|
|
1001
|
-
return /* @__PURE__ */
|
|
2293
|
+
return /* @__PURE__ */ jsx27(RadixMenu.Separator, { ref, className: cx(separator2, className), ...rest });
|
|
1002
2294
|
}
|
|
1003
2295
|
);
|
|
1004
2296
|
|
|
1005
|
-
// src/components/Input/Input.tsx
|
|
1006
|
-
import { forwardRef as forwardRef16 } from "react";
|
|
1007
|
-
import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1008
|
-
var Input = /* @__PURE__ */ forwardRef16(function Input2({ size, invalid, fullWidth, startAdornment, endAdornment, rootClassName, className, disabled, ...rest }, ref) {
|
|
1009
|
-
return /* @__PURE__ */ jsxs14(
|
|
1010
|
-
"div",
|
|
1011
|
-
{
|
|
1012
|
-
className: cx(root5({ size, fullWidth }), rootClassName),
|
|
1013
|
-
"data-invalid": invalid || void 0,
|
|
1014
|
-
"data-disabled": disabled || void 0,
|
|
1015
|
-
children: [
|
|
1016
|
-
startAdornment && /* @__PURE__ */ jsx17("span", { className: adornment, children: startAdornment }),
|
|
1017
|
-
/* @__PURE__ */ jsx17(
|
|
1018
|
-
"input",
|
|
1019
|
-
{
|
|
1020
|
-
ref,
|
|
1021
|
-
className: cx(input2, className),
|
|
1022
|
-
disabled,
|
|
1023
|
-
"aria-invalid": invalid || void 0,
|
|
1024
|
-
...rest
|
|
1025
|
-
}
|
|
1026
|
-
),
|
|
1027
|
-
endAdornment && /* @__PURE__ */ jsx17("span", { className: adornment, children: endAdornment })
|
|
1028
|
-
]
|
|
1029
|
-
}
|
|
1030
|
-
);
|
|
1031
|
-
});
|
|
1032
|
-
|
|
1033
|
-
// src/components/Input/TextField.tsx
|
|
1034
|
-
import { forwardRef as forwardRef17, useId as useId2 } from "react";
|
|
1035
|
-
import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1036
|
-
var TextField = /* @__PURE__ */ forwardRef17(function TextField2({ label: label6, helperText: helperText3, error, required, fullWidth, id, "aria-describedby": ariaDescribedBy, ...rest }, ref) {
|
|
1037
|
-
const generatedId = useId2();
|
|
1038
|
-
const inputId = id ?? generatedId;
|
|
1039
|
-
const helperId = helperText3 ? `${inputId}-helper` : void 0;
|
|
1040
|
-
return /* @__PURE__ */ jsxs15("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
|
|
1041
|
-
label6 && /* @__PURE__ */ jsxs15("label", { htmlFor: inputId, className: label, children: [
|
|
1042
|
-
label6,
|
|
1043
|
-
required && /* @__PURE__ */ jsx18("span", { className: requiredMark, "aria-hidden": true, children: "*" })
|
|
1044
|
-
] }),
|
|
1045
|
-
/* @__PURE__ */ jsx18(
|
|
1046
|
-
Input,
|
|
1047
|
-
{
|
|
1048
|
-
ref,
|
|
1049
|
-
id: inputId,
|
|
1050
|
-
invalid: error,
|
|
1051
|
-
required,
|
|
1052
|
-
fullWidth,
|
|
1053
|
-
"aria-describedby": cx(helperId, ariaDescribedBy) || void 0,
|
|
1054
|
-
...rest
|
|
1055
|
-
}
|
|
1056
|
-
),
|
|
1057
|
-
helperText3 && /* @__PURE__ */ jsx18("p", { id: helperId, className: helperText({ error }), children: helperText3 })
|
|
1058
|
-
] });
|
|
1059
|
-
});
|
|
1060
|
-
|
|
1061
|
-
// src/components/Modal/Modal.tsx
|
|
1062
|
-
import * as Dialog2 from "@radix-ui/react-dialog";
|
|
1063
|
-
import { XIcon as XIcon3 } from "@bestow-ui/icons";
|
|
1064
|
-
|
|
1065
|
-
// src/components/Modal/Modal.css.ts
|
|
1066
|
-
import { createRuntimeFn as _7a46813 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1067
|
-
var body3 = "_1pdsmv0a";
|
|
1068
|
-
var closeButton3 = "_1pdsmv09";
|
|
1069
|
-
var content7 = /* @__PURE__ */ _7a46813({ defaultClassName: "_1pdsmv01", variantClassNames: { size: { sm: "_1pdsmv02", md: "_1pdsmv03", lg: "_1pdsmv04" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1070
|
-
var description3 = "_1pdsmv08";
|
|
1071
|
-
var footer3 = "_1pdsmv0b";
|
|
1072
|
-
var header4 = "_1pdsmv05";
|
|
1073
|
-
var headings2 = "_1pdsmv06";
|
|
1074
|
-
var overlay2 = "_1pdsmv00";
|
|
1075
|
-
var title3 = "_1pdsmv07";
|
|
1076
|
-
|
|
1077
|
-
// src/components/Modal/Modal.tsx
|
|
1078
|
-
import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1079
|
-
function Modal({
|
|
1080
|
-
open,
|
|
1081
|
-
defaultOpen,
|
|
1082
|
-
onOpenChange,
|
|
1083
|
-
trigger: trigger4,
|
|
1084
|
-
title: title6,
|
|
1085
|
-
description: description6,
|
|
1086
|
-
children,
|
|
1087
|
-
footer: footer6,
|
|
1088
|
-
size,
|
|
1089
|
-
hideCloseButton = false,
|
|
1090
|
-
closeOnOverlayClick = true,
|
|
1091
|
-
className
|
|
1092
|
-
}) {
|
|
1093
|
-
const portal2 = usePortalProps();
|
|
1094
|
-
return /* @__PURE__ */ jsxs16(Dialog2.Root, { open, defaultOpen, onOpenChange, children: [
|
|
1095
|
-
trigger4 && /* @__PURE__ */ jsx19(Dialog2.Trigger, { asChild: true, children: trigger4 }),
|
|
1096
|
-
/* @__PURE__ */ jsxs16(Dialog2.Portal, { children: [
|
|
1097
|
-
/* @__PURE__ */ jsx19(Dialog2.Overlay, { className: cx(portal2.className, overlay2), style: portal2.style }),
|
|
1098
|
-
/* @__PURE__ */ jsxs16(
|
|
1099
|
-
Dialog2.Content,
|
|
1100
|
-
{
|
|
1101
|
-
className: cx(portal2.className, content7({ size }), className),
|
|
1102
|
-
style: portal2.style,
|
|
1103
|
-
onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
|
|
1104
|
-
...description6 ? {} : { "aria-describedby": void 0 },
|
|
1105
|
-
children: [
|
|
1106
|
-
/* @__PURE__ */ jsxs16("div", { className: header4, children: [
|
|
1107
|
-
/* @__PURE__ */ jsxs16("div", { className: headings2, children: [
|
|
1108
|
-
/* @__PURE__ */ jsx19(Dialog2.Title, { className: title3, children: title6 }),
|
|
1109
|
-
description6 && /* @__PURE__ */ jsx19(Dialog2.Description, { className: description3, children: description6 })
|
|
1110
|
-
] }),
|
|
1111
|
-
!hideCloseButton && /* @__PURE__ */ jsx19(Dialog2.Close, { className: closeButton3, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ jsx19(XIcon3, { size: 16 }) })
|
|
1112
|
-
] }),
|
|
1113
|
-
children && /* @__PURE__ */ jsx19("div", { className: body3, children }),
|
|
1114
|
-
footer6 && /* @__PURE__ */ jsx19("div", { className: footer3, children: footer6 })
|
|
1115
|
-
]
|
|
1116
|
-
}
|
|
1117
|
-
)
|
|
1118
|
-
] })
|
|
1119
|
-
] });
|
|
1120
|
-
}
|
|
1121
|
-
var ModalClose = Dialog2.Close;
|
|
1122
|
-
|
|
1123
2297
|
// src/components/Pagination/Pagination.tsx
|
|
1124
|
-
import { ChevronLeftIcon, ChevronRightIcon as
|
|
1125
|
-
import { forwardRef as
|
|
2298
|
+
import { ChevronLeftIcon as ChevronLeftIcon2, ChevronRightIcon as ChevronRightIcon3 } from "@bestow-ui/icons";
|
|
2299
|
+
import { forwardRef as forwardRef24, useState as useState8 } from "react";
|
|
1126
2300
|
|
|
1127
2301
|
// src/components/Pagination/getPaginationItems.ts
|
|
1128
2302
|
var range = (start, end) => end < start ? [] : Array.from({ length: end - start + 1 }, (_, i) => start + i);
|
|
@@ -1151,13 +2325,12 @@ function getPaginationItems(page, totalPages, siblingCount = 1, boundaryCount =
|
|
|
1151
2325
|
// src/components/Pagination/Pagination.css.ts
|
|
1152
2326
|
import { createRuntimeFn as _7a46814 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1153
2327
|
var ellipsis = "_1iraoak4";
|
|
1154
|
-
var
|
|
1155
|
-
var
|
|
2328
|
+
var item6 = /* @__PURE__ */ _7a46814({ defaultClassName: "_1iraoak1", variantClassNames: { size: { sm: "_1iraoak2", md: "_1iraoak3" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
2329
|
+
var list3 = "_1iraoak0";
|
|
1156
2330
|
|
|
1157
2331
|
// src/components/Pagination/Pagination.tsx
|
|
1158
|
-
import { jsx as
|
|
1159
|
-
var
|
|
1160
|
-
var Pagination = /* @__PURE__ */ forwardRef18(function Pagination2({
|
|
2332
|
+
import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2333
|
+
var Pagination = /* @__PURE__ */ forwardRef24(function Pagination2({
|
|
1161
2334
|
totalPages,
|
|
1162
2335
|
page: pageProp,
|
|
1163
2336
|
defaultPage = 1,
|
|
@@ -1165,12 +2338,15 @@ var Pagination = /* @__PURE__ */ forwardRef18(function Pagination2({
|
|
|
1165
2338
|
siblingCount = 1,
|
|
1166
2339
|
boundaryCount = 1,
|
|
1167
2340
|
size,
|
|
1168
|
-
getItemLabel
|
|
2341
|
+
getItemLabel: getItemLabelProp,
|
|
1169
2342
|
className,
|
|
1170
|
-
"aria-label":
|
|
2343
|
+
"aria-label": ariaLabelProp,
|
|
1171
2344
|
...rest
|
|
1172
2345
|
}, ref) {
|
|
1173
|
-
const [uncontrolledPage, setUncontrolledPage] =
|
|
2346
|
+
const [uncontrolledPage, setUncontrolledPage] = useState8(defaultPage);
|
|
2347
|
+
const m = useMessages();
|
|
2348
|
+
const ariaLabel = ariaLabelProp ?? m.pagination ?? "\uD398\uC774\uC9C0 \uD0D0\uC0C9";
|
|
2349
|
+
const getItemLabel = getItemLabelProp ?? ((type, n) => type === "previous" ? m.paginationPrevious ?? "\uC774\uC804 \uD398\uC774\uC9C0" : type === "next" ? m.paginationNext ?? "\uB2E4\uC74C \uD398\uC774\uC9C0" : m.paginationPage?.(n) ?? `${n} \uD398\uC774\uC9C0`);
|
|
1174
2350
|
if (totalPages < 1) return null;
|
|
1175
2351
|
const page = Math.min(Math.max(pageProp ?? uncontrolledPage, 1), totalPages);
|
|
1176
2352
|
const goTo = (next) => {
|
|
@@ -1178,9 +2354,9 @@ var Pagination = /* @__PURE__ */ forwardRef18(function Pagination2({
|
|
|
1178
2354
|
if (pageProp === void 0) setUncontrolledPage(next);
|
|
1179
2355
|
onPageChange?.(next);
|
|
1180
2356
|
};
|
|
1181
|
-
const itemClass =
|
|
1182
|
-
return /* @__PURE__ */
|
|
1183
|
-
/* @__PURE__ */
|
|
2357
|
+
const itemClass = item6({ size });
|
|
2358
|
+
return /* @__PURE__ */ jsx28("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ jsxs23("ul", { className: list3, children: [
|
|
2359
|
+
/* @__PURE__ */ jsx28("li", { children: /* @__PURE__ */ jsx28(
|
|
1184
2360
|
"button",
|
|
1185
2361
|
{
|
|
1186
2362
|
type: "button",
|
|
@@ -1188,23 +2364,23 @@ var Pagination = /* @__PURE__ */ forwardRef18(function Pagination2({
|
|
|
1188
2364
|
"aria-label": getItemLabel("previous", page - 1),
|
|
1189
2365
|
disabled: page <= 1,
|
|
1190
2366
|
onClick: () => goTo(page - 1),
|
|
1191
|
-
children: /* @__PURE__ */
|
|
2367
|
+
children: /* @__PURE__ */ jsx28(ChevronLeftIcon2, { size: 16 })
|
|
1192
2368
|
}
|
|
1193
2369
|
) }),
|
|
1194
2370
|
getPaginationItems(page, totalPages, siblingCount, boundaryCount).map(
|
|
1195
|
-
(
|
|
2371
|
+
(item7) => typeof item7 === "number" ? /* @__PURE__ */ jsx28("li", { children: /* @__PURE__ */ jsx28(
|
|
1196
2372
|
"button",
|
|
1197
2373
|
{
|
|
1198
2374
|
type: "button",
|
|
1199
2375
|
className: itemClass,
|
|
1200
|
-
"aria-label": getItemLabel("page",
|
|
1201
|
-
"aria-current":
|
|
1202
|
-
onClick: () => goTo(
|
|
1203
|
-
children:
|
|
2376
|
+
"aria-label": getItemLabel("page", item7),
|
|
2377
|
+
"aria-current": item7 === page ? "page" : void 0,
|
|
2378
|
+
onClick: () => goTo(item7),
|
|
2379
|
+
children: item7
|
|
1204
2380
|
}
|
|
1205
|
-
) },
|
|
2381
|
+
) }, item7) : /* @__PURE__ */ jsx28("li", { "aria-hidden": true, className: cx(itemClass, ellipsis), children: "\u2026" }, item7)
|
|
1206
2382
|
),
|
|
1207
|
-
/* @__PURE__ */
|
|
2383
|
+
/* @__PURE__ */ jsx28("li", { children: /* @__PURE__ */ jsx28(
|
|
1208
2384
|
"button",
|
|
1209
2385
|
{
|
|
1210
2386
|
type: "button",
|
|
@@ -1212,87 +2388,81 @@ var Pagination = /* @__PURE__ */ forwardRef18(function Pagination2({
|
|
|
1212
2388
|
"aria-label": getItemLabel("next", page + 1),
|
|
1213
2389
|
disabled: page >= totalPages,
|
|
1214
2390
|
onClick: () => goTo(page + 1),
|
|
1215
|
-
children: /* @__PURE__ */
|
|
2391
|
+
children: /* @__PURE__ */ jsx28(ChevronRightIcon3, { size: 16 })
|
|
1216
2392
|
}
|
|
1217
2393
|
) })
|
|
1218
2394
|
] }) });
|
|
1219
2395
|
});
|
|
1220
2396
|
|
|
1221
|
-
// src/components/
|
|
1222
|
-
import
|
|
1223
|
-
import {
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
var
|
|
1229
|
-
var
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
/* @__PURE__ */ jsx21(RadixPopover.Portal, { children: /* @__PURE__ */ jsxs18(
|
|
1256
|
-
RadixPopover.Content,
|
|
2397
|
+
// src/components/PhoneNumberInput/PhoneNumberInput.tsx
|
|
2398
|
+
import { forwardRef as forwardRef25, useRef as useRef10 } from "react";
|
|
2399
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
2400
|
+
var sanitize3 = (input5) => {
|
|
2401
|
+
const digits = input5.replace(/\D/g, "");
|
|
2402
|
+
return digits.slice(0, phoneNumberMaxDigits(digits));
|
|
2403
|
+
};
|
|
2404
|
+
var isDigit4 = (char) => /\d/.test(char);
|
|
2405
|
+
var PhoneNumberInput = /* @__PURE__ */ forwardRef25(
|
|
2406
|
+
function PhoneNumberInput2(props, ref) {
|
|
2407
|
+
const {
|
|
2408
|
+
value: value4,
|
|
2409
|
+
defaultValue,
|
|
2410
|
+
onValueChange,
|
|
2411
|
+
label: labelProp,
|
|
2412
|
+
placeholder = "010-0000-0000",
|
|
2413
|
+
onKeyDown,
|
|
2414
|
+
...rest
|
|
2415
|
+
} = props;
|
|
2416
|
+
const inputRef = useRef10(null);
|
|
2417
|
+
const m = useMessages();
|
|
2418
|
+
const label6 = labelProp ?? m.phoneNumber ?? "\uD734\uB300\uD3F0 \uBC88\uD638";
|
|
2419
|
+
const field3 = useFormattedInput({
|
|
2420
|
+
isControlled: "value" in props,
|
|
2421
|
+
value: value4,
|
|
2422
|
+
defaultValue,
|
|
2423
|
+
onValueChange,
|
|
2424
|
+
sanitize: sanitize3,
|
|
2425
|
+
format: formatPhoneNumber,
|
|
2426
|
+
isMeaningful: isDigit4,
|
|
2427
|
+
inputRef
|
|
2428
|
+
});
|
|
2429
|
+
return /* @__PURE__ */ jsx29(
|
|
2430
|
+
TextField,
|
|
1257
2431
|
{
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
"
|
|
1263
|
-
"
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
(
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
content11,
|
|
1272
|
-
showArrow && /* @__PURE__ */ jsx21(RadixPopover.Arrow, { className: arrow, width: 12, height: 6 })
|
|
1273
|
-
]
|
|
2432
|
+
ref: mergeRefs(ref, inputRef),
|
|
2433
|
+
label: label6,
|
|
2434
|
+
placeholder,
|
|
2435
|
+
type: "tel",
|
|
2436
|
+
inputMode: "tel",
|
|
2437
|
+
autoComplete: "tel-national",
|
|
2438
|
+
value: field3.display,
|
|
2439
|
+
onChange: field3.onChange,
|
|
2440
|
+
onKeyDown: (event) => {
|
|
2441
|
+
field3.onKeyDown(event);
|
|
2442
|
+
onKeyDown?.(event);
|
|
2443
|
+
},
|
|
2444
|
+
...rest
|
|
1274
2445
|
}
|
|
1275
|
-
)
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
var PopoverClose = RadixPopover.Close;
|
|
2446
|
+
);
|
|
2447
|
+
}
|
|
2448
|
+
);
|
|
1279
2449
|
|
|
1280
2450
|
// src/components/Progress/Progress.tsx
|
|
1281
|
-
import { forwardRef as
|
|
2451
|
+
import { forwardRef as forwardRef26, useId as useId7 } from "react";
|
|
1282
2452
|
|
|
1283
2453
|
// src/components/Progress/Progress.css.ts
|
|
1284
2454
|
import { createRuntimeFn as _7a46815 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1285
|
-
var
|
|
2455
|
+
var header7 = "_1tvkq001";
|
|
1286
2456
|
var indicator = /* @__PURE__ */ _7a46815({ defaultClassName: "_1tvkq008", variantClassNames: { color: { primary: "_1tvkq009", neutral: "_1tvkq00a", success: "_1tvkq00b", warning: "_1tvkq00c", danger: "_1tvkq00d" } }, defaultVariants: { color: "primary" }, compoundVariants: [] });
|
|
1287
2457
|
var label3 = "_1tvkq002";
|
|
1288
|
-
var
|
|
2458
|
+
var root7 = "_1tvkq000";
|
|
1289
2459
|
var track = /* @__PURE__ */ _7a46815({ defaultClassName: "_1tvkq004", variantClassNames: { size: { sm: "_1tvkq005", md: "_1tvkq006", lg: "_1tvkq007" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1290
2460
|
var value2 = "_1tvkq003";
|
|
1291
2461
|
|
|
1292
2462
|
// src/components/Progress/Progress.tsx
|
|
1293
|
-
import { jsx as
|
|
2463
|
+
import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
1294
2464
|
var defaultFormat = (value4, max) => `${Math.round(value4 / max * 100)}%`;
|
|
1295
|
-
var Progress = /* @__PURE__ */
|
|
2465
|
+
var Progress = /* @__PURE__ */ forwardRef26(function Progress2({
|
|
1296
2466
|
value: value4,
|
|
1297
2467
|
max = 100,
|
|
1298
2468
|
label: label6,
|
|
@@ -1304,17 +2474,17 @@ var Progress = /* @__PURE__ */ forwardRef19(function Progress2({
|
|
|
1304
2474
|
className,
|
|
1305
2475
|
...rest
|
|
1306
2476
|
}, ref) {
|
|
1307
|
-
const labelId =
|
|
2477
|
+
const labelId = useId7();
|
|
1308
2478
|
const isIndeterminate = value4 === void 0 || value4 === null;
|
|
1309
2479
|
const safeMax = max > 0 ? max : 100;
|
|
1310
2480
|
const clamped = isIndeterminate ? 0 : Math.min(safeMax, Math.max(0, value4));
|
|
1311
2481
|
const valueText = isIndeterminate ? void 0 : formatValue(clamped, safeMax);
|
|
1312
|
-
return /* @__PURE__ */
|
|
1313
|
-
(label6 || showValue && valueText) && /* @__PURE__ */
|
|
1314
|
-
label6 && /* @__PURE__ */
|
|
1315
|
-
showValue && valueText && /* @__PURE__ */
|
|
2482
|
+
return /* @__PURE__ */ jsxs24("div", { ref, className: cx(root7, className), ...rest, children: [
|
|
2483
|
+
(label6 || showValue && valueText) && /* @__PURE__ */ jsxs24("div", { className: header7, children: [
|
|
2484
|
+
label6 && /* @__PURE__ */ jsx30("span", { id: labelId, className: label3, children: label6 }),
|
|
2485
|
+
showValue && valueText && /* @__PURE__ */ jsx30("span", { className: value2, "aria-hidden": true, children: valueText })
|
|
1316
2486
|
] }),
|
|
1317
|
-
/* @__PURE__ */
|
|
2487
|
+
/* @__PURE__ */ jsx30(
|
|
1318
2488
|
"div",
|
|
1319
2489
|
{
|
|
1320
2490
|
role: "progressbar",
|
|
@@ -1325,7 +2495,7 @@ var Progress = /* @__PURE__ */ forwardRef19(function Progress2({
|
|
|
1325
2495
|
"aria-valuenow": isIndeterminate ? void 0 : clamped,
|
|
1326
2496
|
"aria-valuetext": valueText,
|
|
1327
2497
|
className: track({ size }),
|
|
1328
|
-
children: /* @__PURE__ */
|
|
2498
|
+
children: /* @__PURE__ */ jsx30(
|
|
1329
2499
|
"div",
|
|
1330
2500
|
{
|
|
1331
2501
|
className: indicator({ color }),
|
|
@@ -1340,7 +2510,7 @@ var Progress = /* @__PURE__ */ forwardRef19(function Progress2({
|
|
|
1340
2510
|
|
|
1341
2511
|
// src/components/RadioGroup/RadioGroup.tsx
|
|
1342
2512
|
import * as RadixRadioGroup from "@radix-ui/react-radio-group";
|
|
1343
|
-
import { forwardRef as
|
|
2513
|
+
import { forwardRef as forwardRef27, useId as useId8 } from "react";
|
|
1344
2514
|
|
|
1345
2515
|
// src/components/RadioGroup/RadioGroup.css.ts
|
|
1346
2516
|
import { createRuntimeFn as _7a46816 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
@@ -1354,8 +2524,8 @@ var radio = /* @__PURE__ */ _7a46816({ defaultClassName: "_1w9iwjm7", variantCla
|
|
|
1354
2524
|
var text = "_1w9iwjmb";
|
|
1355
2525
|
|
|
1356
2526
|
// src/components/RadioGroup/RadioGroup.tsx
|
|
1357
|
-
import { jsx as
|
|
1358
|
-
var RadioGroup = /* @__PURE__ */
|
|
2527
|
+
import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2528
|
+
var RadioGroup = /* @__PURE__ */ forwardRef27(function RadioGroup2(props, ref) {
|
|
1359
2529
|
const {
|
|
1360
2530
|
options,
|
|
1361
2531
|
value: value4,
|
|
@@ -1374,16 +2544,16 @@ var RadioGroup = /* @__PURE__ */ forwardRef20(function RadioGroup2(props, ref) {
|
|
|
1374
2544
|
className
|
|
1375
2545
|
} = props;
|
|
1376
2546
|
const isControlled = "value" in props;
|
|
1377
|
-
const generatedId =
|
|
2547
|
+
const generatedId = useId8();
|
|
1378
2548
|
const baseId = id ?? generatedId;
|
|
1379
2549
|
const labelId = label6 ? `${baseId}-label` : void 0;
|
|
1380
2550
|
const helperId = helperText3 ? `${baseId}-helper` : void 0;
|
|
1381
|
-
return /* @__PURE__ */
|
|
1382
|
-
label6 && /* @__PURE__ */
|
|
2551
|
+
return /* @__PURE__ */ jsxs25("div", { className: cx(field, className), children: [
|
|
2552
|
+
label6 && /* @__PURE__ */ jsxs25("span", { id: labelId, className: cx(label, groupLabel), children: [
|
|
1383
2553
|
label6,
|
|
1384
|
-
required && /* @__PURE__ */
|
|
2554
|
+
required && /* @__PURE__ */ jsx31("span", { className: requiredMark, "aria-hidden": true, children: "*" })
|
|
1385
2555
|
] }),
|
|
1386
|
-
/* @__PURE__ */
|
|
2556
|
+
/* @__PURE__ */ jsx31(
|
|
1387
2557
|
RadixRadioGroup.Root,
|
|
1388
2558
|
{
|
|
1389
2559
|
ref,
|
|
@@ -1404,8 +2574,8 @@ var RadioGroup = /* @__PURE__ */ forwardRef20(function RadioGroup2(props, ref) {
|
|
|
1404
2574
|
const itemId = `${baseId}-${option2.value}`;
|
|
1405
2575
|
const descriptionId = option2.description ? `${itemId}-description` : void 0;
|
|
1406
2576
|
const itemDisabled = disabled || option2.disabled;
|
|
1407
|
-
return /* @__PURE__ */
|
|
1408
|
-
/* @__PURE__ */
|
|
2577
|
+
return /* @__PURE__ */ jsxs25("div", { className: option({ size }), "data-disabled": itemDisabled || void 0, children: [
|
|
2578
|
+
/* @__PURE__ */ jsx31(
|
|
1409
2579
|
RadixRadioGroup.Item,
|
|
1410
2580
|
{
|
|
1411
2581
|
id: itemId,
|
|
@@ -1413,27 +2583,27 @@ var RadioGroup = /* @__PURE__ */ forwardRef20(function RadioGroup2(props, ref) {
|
|
|
1413
2583
|
disabled: option2.disabled,
|
|
1414
2584
|
"aria-describedby": descriptionId,
|
|
1415
2585
|
className: radio({ size }),
|
|
1416
|
-
children: /* @__PURE__ */
|
|
2586
|
+
children: /* @__PURE__ */ jsx31(RadixRadioGroup.Indicator, { className: indicator2 })
|
|
1417
2587
|
}
|
|
1418
2588
|
),
|
|
1419
|
-
/* @__PURE__ */
|
|
1420
|
-
/* @__PURE__ */
|
|
1421
|
-
option2.description && /* @__PURE__ */
|
|
2589
|
+
/* @__PURE__ */ jsxs25("span", { className: text, children: [
|
|
2590
|
+
/* @__PURE__ */ jsx31("label", { htmlFor: itemId, className: labelText, children: option2.label }),
|
|
2591
|
+
option2.description && /* @__PURE__ */ jsx31("span", { id: descriptionId, className: description4, children: option2.description })
|
|
1422
2592
|
] })
|
|
1423
2593
|
] }, option2.value);
|
|
1424
2594
|
})
|
|
1425
2595
|
}
|
|
1426
2596
|
),
|
|
1427
|
-
helperText3 && /* @__PURE__ */
|
|
2597
|
+
helperText3 && /* @__PURE__ */ jsx31("p", { id: helperId, className: helperText({ error }), children: helperText3 })
|
|
1428
2598
|
] });
|
|
1429
2599
|
});
|
|
1430
2600
|
|
|
1431
2601
|
// src/components/Select/Select.tsx
|
|
1432
2602
|
import * as RadixSelect from "@radix-ui/react-select";
|
|
1433
|
-
import { forwardRef as
|
|
1434
|
-
import { CheckIcon as CheckIcon2, ChevronDownIcon as
|
|
1435
|
-
import { jsx as
|
|
1436
|
-
var Select = /* @__PURE__ */
|
|
2603
|
+
import { forwardRef as forwardRef28, useId as useId9 } from "react";
|
|
2604
|
+
import { CheckIcon as CheckIcon2, ChevronDownIcon as ChevronDownIcon4 } from "@bestow-ui/icons";
|
|
2605
|
+
import { jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2606
|
+
var Select = /* @__PURE__ */ forwardRef28(function Select2(props, ref) {
|
|
1437
2607
|
const {
|
|
1438
2608
|
options,
|
|
1439
2609
|
value: value4,
|
|
@@ -1453,16 +2623,16 @@ var Select = /* @__PURE__ */ forwardRef21(function Select2(props, ref) {
|
|
|
1453
2623
|
className
|
|
1454
2624
|
} = props;
|
|
1455
2625
|
const isControlled = "value" in props;
|
|
1456
|
-
const generatedId =
|
|
2626
|
+
const generatedId = useId9();
|
|
1457
2627
|
const triggerId = id ?? generatedId;
|
|
1458
2628
|
const helperId = helperText3 ? `${triggerId}-helper` : void 0;
|
|
1459
2629
|
const portal2 = usePortalProps();
|
|
1460
|
-
return /* @__PURE__ */
|
|
1461
|
-
label6 && /* @__PURE__ */
|
|
2630
|
+
return /* @__PURE__ */ jsxs26("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
|
|
2631
|
+
label6 && /* @__PURE__ */ jsxs26("label", { htmlFor: triggerId, className: label, children: [
|
|
1462
2632
|
label6,
|
|
1463
|
-
required && /* @__PURE__ */
|
|
2633
|
+
required && /* @__PURE__ */ jsx32("span", { className: requiredMark, "aria-hidden": true, children: "*" })
|
|
1464
2634
|
] }),
|
|
1465
|
-
/* @__PURE__ */
|
|
2635
|
+
/* @__PURE__ */ jsxs26(
|
|
1466
2636
|
RadixSelect.Root,
|
|
1467
2637
|
{
|
|
1468
2638
|
value: isControlled ? value4 ?? "" : void 0,
|
|
@@ -1472,7 +2642,7 @@ var Select = /* @__PURE__ */ forwardRef21(function Select2(props, ref) {
|
|
|
1472
2642
|
required,
|
|
1473
2643
|
name,
|
|
1474
2644
|
children: [
|
|
1475
|
-
/* @__PURE__ */
|
|
2645
|
+
/* @__PURE__ */ jsxs26(
|
|
1476
2646
|
RadixSelect.Trigger,
|
|
1477
2647
|
{
|
|
1478
2648
|
ref,
|
|
@@ -1481,30 +2651,30 @@ var Select = /* @__PURE__ */ forwardRef21(function Select2(props, ref) {
|
|
|
1481
2651
|
"aria-invalid": error || void 0,
|
|
1482
2652
|
"aria-describedby": helperId,
|
|
1483
2653
|
"data-invalid": error || void 0,
|
|
1484
|
-
className: cx(
|
|
2654
|
+
className: cx(root3({ size, fullWidth }), trigger2, className),
|
|
1485
2655
|
children: [
|
|
1486
|
-
/* @__PURE__ */
|
|
1487
|
-
/* @__PURE__ */
|
|
2656
|
+
/* @__PURE__ */ jsx32("span", { className: value, children: /* @__PURE__ */ jsx32(RadixSelect.Value, { placeholder }) }),
|
|
2657
|
+
/* @__PURE__ */ jsx32(RadixSelect.Icon, { className: icon4, children: /* @__PURE__ */ jsx32(ChevronDownIcon4, { size: 16 }) })
|
|
1488
2658
|
]
|
|
1489
2659
|
}
|
|
1490
2660
|
),
|
|
1491
|
-
/* @__PURE__ */
|
|
2661
|
+
/* @__PURE__ */ jsx32(RadixSelect.Portal, { children: /* @__PURE__ */ jsx32(
|
|
1492
2662
|
RadixSelect.Content,
|
|
1493
2663
|
{
|
|
1494
2664
|
position: "popper",
|
|
1495
2665
|
sideOffset: 4,
|
|
1496
2666
|
collisionPadding: 8,
|
|
1497
|
-
className: cx(portal2.className,
|
|
2667
|
+
className: cx(portal2.className, content5),
|
|
1498
2668
|
style: portal2.style,
|
|
1499
|
-
children: /* @__PURE__ */
|
|
2669
|
+
children: /* @__PURE__ */ jsx32(RadixSelect.Viewport, { className: viewport, children: options.map((option2) => /* @__PURE__ */ jsxs26(
|
|
1500
2670
|
RadixSelect.Item,
|
|
1501
2671
|
{
|
|
1502
2672
|
value: option2.value,
|
|
1503
2673
|
disabled: option2.disabled,
|
|
1504
|
-
className:
|
|
2674
|
+
className: item4,
|
|
1505
2675
|
children: [
|
|
1506
|
-
/* @__PURE__ */
|
|
1507
|
-
/* @__PURE__ */
|
|
2676
|
+
/* @__PURE__ */ jsx32(RadixSelect.ItemText, { children: option2.label }),
|
|
2677
|
+
/* @__PURE__ */ jsx32(RadixSelect.ItemIndicator, { className: itemIndicator, children: /* @__PURE__ */ jsx32(CheckIcon2, { size: 16 }) })
|
|
1508
2678
|
]
|
|
1509
2679
|
},
|
|
1510
2680
|
option2.value
|
|
@@ -1514,13 +2684,13 @@ var Select = /* @__PURE__ */ forwardRef21(function Select2(props, ref) {
|
|
|
1514
2684
|
]
|
|
1515
2685
|
}
|
|
1516
2686
|
),
|
|
1517
|
-
helperText3 && /* @__PURE__ */
|
|
2687
|
+
helperText3 && /* @__PURE__ */ jsx32("p", { id: helperId, className: helperText({ error }), children: helperText3 })
|
|
1518
2688
|
] });
|
|
1519
2689
|
});
|
|
1520
2690
|
|
|
1521
2691
|
// src/components/Skeleton/Skeleton.tsx
|
|
1522
2692
|
import { assignInlineVars as assignInlineVars2 } from "@vanilla-extract/dynamic";
|
|
1523
|
-
import { forwardRef as
|
|
2693
|
+
import { forwardRef as forwardRef29 } from "react";
|
|
1524
2694
|
|
|
1525
2695
|
// src/components/Skeleton/Skeleton.css.ts
|
|
1526
2696
|
import { createRuntimeFn as _7a46817 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
@@ -1530,13 +2700,13 @@ var skeleton = /* @__PURE__ */ _7a46817({ defaultClassName: "_1s8datd2", variant
|
|
|
1530
2700
|
var width = "var(--_1s8datd0)";
|
|
1531
2701
|
|
|
1532
2702
|
// src/components/Skeleton/Skeleton.tsx
|
|
1533
|
-
import { jsx as
|
|
2703
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
1534
2704
|
var toCss = (value4) => typeof value4 === "number" ? `${value4}px` : value4;
|
|
1535
|
-
var Skeleton = /* @__PURE__ */
|
|
2705
|
+
var Skeleton = /* @__PURE__ */ forwardRef29(function Skeleton2({ variant = "text", width: width2, height: height2, lines: lines2 = 1, className, style, ...rest }, ref) {
|
|
1536
2706
|
const w = toCss(width2 ?? (variant === "circle" ? 40 : "100%"));
|
|
1537
2707
|
const h = toCss(height2 ?? (variant === "circle" ? w : variant === "rect" ? 100 : "1em"));
|
|
1538
2708
|
if (variant === "text" && lines2 > 1) {
|
|
1539
|
-
return /* @__PURE__ */
|
|
2709
|
+
return /* @__PURE__ */ jsx33(
|
|
1540
2710
|
"span",
|
|
1541
2711
|
{
|
|
1542
2712
|
ref,
|
|
@@ -1544,7 +2714,7 @@ var Skeleton = /* @__PURE__ */ forwardRef22(function Skeleton2({ variant = "text
|
|
|
1544
2714
|
className: cx(lines, className),
|
|
1545
2715
|
style: { ...assignInlineVars2({ [width]: w }), ...style },
|
|
1546
2716
|
...rest,
|
|
1547
|
-
children: Array.from({ length: lines2 }, (_, i) => /* @__PURE__ */
|
|
2717
|
+
children: Array.from({ length: lines2 }, (_, i) => /* @__PURE__ */ jsx33(
|
|
1548
2718
|
"span",
|
|
1549
2719
|
{
|
|
1550
2720
|
className: skeleton({ variant }),
|
|
@@ -1555,7 +2725,7 @@ var Skeleton = /* @__PURE__ */ forwardRef22(function Skeleton2({ variant = "text
|
|
|
1555
2725
|
}
|
|
1556
2726
|
);
|
|
1557
2727
|
}
|
|
1558
|
-
return /* @__PURE__ */
|
|
2728
|
+
return /* @__PURE__ */ jsx33(
|
|
1559
2729
|
"span",
|
|
1560
2730
|
{
|
|
1561
2731
|
ref,
|
|
@@ -1569,23 +2739,23 @@ var Skeleton = /* @__PURE__ */ forwardRef22(function Skeleton2({ variant = "text
|
|
|
1569
2739
|
|
|
1570
2740
|
// src/components/Slider/Slider.tsx
|
|
1571
2741
|
import * as RadixSlider from "@radix-ui/react-slider";
|
|
1572
|
-
import { forwardRef as
|
|
2742
|
+
import { forwardRef as forwardRef30, useId as useId10, useState as useState9 } from "react";
|
|
1573
2743
|
|
|
1574
2744
|
// src/components/Slider/Slider.css.ts
|
|
1575
2745
|
import { createRuntimeFn as _7a46818 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1576
2746
|
var field2 = "_126mzjm0";
|
|
1577
|
-
var
|
|
2747
|
+
var header8 = "_126mzjm1";
|
|
1578
2748
|
var helperText2 = "_126mzjm4";
|
|
1579
2749
|
var label4 = "_126mzjm2";
|
|
1580
2750
|
var range2 = "_126mzjmb";
|
|
1581
|
-
var
|
|
2751
|
+
var root8 = /* @__PURE__ */ _7a46818({ defaultClassName: "_126mzjm5", variantClassNames: { size: { sm: "_126mzjm6", md: "_126mzjm7" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1582
2752
|
var thumb = /* @__PURE__ */ _7a46818({ defaultClassName: "_126mzjmc", variantClassNames: { size: { sm: "_126mzjmd", md: "_126mzjme" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1583
2753
|
var track2 = /* @__PURE__ */ _7a46818({ defaultClassName: "_126mzjm8", variantClassNames: { size: { sm: "_126mzjm9", md: "_126mzjma" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1584
2754
|
var value3 = "_126mzjm3";
|
|
1585
2755
|
|
|
1586
2756
|
// src/components/Slider/Slider.tsx
|
|
1587
|
-
import { jsx as
|
|
1588
|
-
var Slider = /* @__PURE__ */
|
|
2757
|
+
import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2758
|
+
var Slider = /* @__PURE__ */ forwardRef30(function Slider2(props, ref) {
|
|
1589
2759
|
const {
|
|
1590
2760
|
value: value4,
|
|
1591
2761
|
defaultValue,
|
|
@@ -1597,19 +2767,21 @@ var Slider = /* @__PURE__ */ forwardRef23(function Slider2(props, ref) {
|
|
|
1597
2767
|
helperText: helperText3,
|
|
1598
2768
|
showValue,
|
|
1599
2769
|
formatValue = String,
|
|
1600
|
-
thumbLabels
|
|
2770
|
+
thumbLabels: thumbLabelsProp,
|
|
1601
2771
|
size,
|
|
1602
2772
|
id,
|
|
1603
2773
|
className,
|
|
1604
2774
|
disabled,
|
|
1605
2775
|
...rest
|
|
1606
2776
|
} = props;
|
|
1607
|
-
const
|
|
2777
|
+
const m = useMessages();
|
|
2778
|
+
const thumbLabels = thumbLabelsProp ?? [m.rangeStart ?? "\uCD5C\uC18C", m.rangeEnd ?? "\uCD5C\uB300"];
|
|
2779
|
+
const generatedId = useId10();
|
|
1608
2780
|
const baseId = id ?? generatedId;
|
|
1609
2781
|
const labelId = `${baseId}-label`;
|
|
1610
2782
|
const helperId = `${baseId}-helper`;
|
|
1611
2783
|
const isControlled = "value" in props;
|
|
1612
|
-
const [innerValue, setInnerValue] =
|
|
2784
|
+
const [innerValue, setInnerValue] = useState9(defaultValue ?? [min]);
|
|
1613
2785
|
const current2 = isControlled ? value4 ?? [min] : innerValue;
|
|
1614
2786
|
const isRange = current2.length > 1;
|
|
1615
2787
|
const handleChange = (next) => {
|
|
@@ -1617,12 +2789,12 @@ var Slider = /* @__PURE__ */ forwardRef23(function Slider2(props, ref) {
|
|
|
1617
2789
|
onValueChange?.(next);
|
|
1618
2790
|
};
|
|
1619
2791
|
const valueText = current2.map(formatValue).join(" \u2013 ");
|
|
1620
|
-
return /* @__PURE__ */
|
|
1621
|
-
(label6 || showValue) && /* @__PURE__ */
|
|
1622
|
-
label6 && /* @__PURE__ */
|
|
1623
|
-
showValue && /* @__PURE__ */
|
|
2792
|
+
return /* @__PURE__ */ jsxs27("div", { className: cx(field2, className), children: [
|
|
2793
|
+
(label6 || showValue) && /* @__PURE__ */ jsxs27("div", { className: header8, children: [
|
|
2794
|
+
label6 && /* @__PURE__ */ jsx34("span", { id: labelId, className: label4, children: label6 }),
|
|
2795
|
+
showValue && /* @__PURE__ */ jsx34("span", { className: value3, "aria-hidden": true, children: valueText })
|
|
1624
2796
|
] }),
|
|
1625
|
-
/* @__PURE__ */
|
|
2797
|
+
/* @__PURE__ */ jsxs27(
|
|
1626
2798
|
RadixSlider.Root,
|
|
1627
2799
|
{
|
|
1628
2800
|
ref,
|
|
@@ -1632,13 +2804,13 @@ var Slider = /* @__PURE__ */ forwardRef23(function Slider2(props, ref) {
|
|
|
1632
2804
|
disabled,
|
|
1633
2805
|
value: current2,
|
|
1634
2806
|
onValueChange: handleChange,
|
|
1635
|
-
className:
|
|
2807
|
+
className: root8({ size }),
|
|
1636
2808
|
...rest,
|
|
1637
2809
|
children: [
|
|
1638
|
-
/* @__PURE__ */
|
|
2810
|
+
/* @__PURE__ */ jsx34(RadixSlider.Track, { className: track2({ size }), children: /* @__PURE__ */ jsx34(RadixSlider.Range, { className: range2 }) }),
|
|
1639
2811
|
current2.map((thumbValue, index) => {
|
|
1640
2812
|
const thumbLabelId = `${baseId}-thumb-${index}`;
|
|
1641
|
-
return /* @__PURE__ */
|
|
2813
|
+
return /* @__PURE__ */ jsx34(
|
|
1642
2814
|
RadixSlider.Thumb,
|
|
1643
2815
|
{
|
|
1644
2816
|
className: thumb({ size }),
|
|
@@ -1653,45 +2825,45 @@ var Slider = /* @__PURE__ */ forwardRef23(function Slider2(props, ref) {
|
|
|
1653
2825
|
]
|
|
1654
2826
|
}
|
|
1655
2827
|
),
|
|
1656
|
-
isRange && current2.map((_, index) => /* @__PURE__ */
|
|
2828
|
+
isRange && current2.map((_, index) => /* @__PURE__ */ jsxs27("span", { id: `${baseId}-thumb-${index}`, hidden: true, children: [
|
|
1657
2829
|
label6 ? "" : ariaLabel ? `${ariaLabel} ` : "",
|
|
1658
2830
|
thumbLabels[index] ?? `${index + 1}`
|
|
1659
2831
|
] }, index)),
|
|
1660
|
-
helperText3 && /* @__PURE__ */
|
|
2832
|
+
helperText3 && /* @__PURE__ */ jsx34("span", { id: helperId, className: helperText2, children: helperText3 })
|
|
1661
2833
|
] });
|
|
1662
2834
|
});
|
|
1663
2835
|
|
|
1664
2836
|
// src/components/Stack/Stack.tsx
|
|
1665
|
-
import { forwardRef as
|
|
2837
|
+
import { forwardRef as forwardRef31 } from "react";
|
|
1666
2838
|
|
|
1667
2839
|
// src/components/Stack/Stack.css.ts
|
|
1668
2840
|
import { createRuntimeFn as _7a46819 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1669
2841
|
var stack = /* @__PURE__ */ _7a46819({ defaultClassName: "_1jz9hj90", variantClassNames: { direction: { row: "_1jz9hj91", column: "_1jz9hj92", "row-reverse": "_1jz9hj93", "column-reverse": "_1jz9hj94" }, gap: { "0": "_1jz9hj95", "1": "_1jz9hj96", "2": "_1jz9hj97", "3": "_1jz9hj98", "4": "_1jz9hj99", "5": "_1jz9hj9a", "6": "_1jz9hj9b", "8": "_1jz9hj9c", "10": "_1jz9hj9d", "12": "_1jz9hj9e", "16": "_1jz9hj9f" }, align: { start: "_1jz9hj9g", center: "_1jz9hj9h", end: "_1jz9hj9i", stretch: "_1jz9hj9j", baseline: "_1jz9hj9k" }, justify: { start: "_1jz9hj9l", center: "_1jz9hj9m", end: "_1jz9hj9n", between: "_1jz9hj9o", around: "_1jz9hj9p", evenly: "_1jz9hj9q" }, wrap: { true: "_1jz9hj9r" } }, defaultVariants: { direction: "column" }, compoundVariants: [] });
|
|
1670
2842
|
|
|
1671
2843
|
// src/components/Stack/Stack.tsx
|
|
1672
|
-
import { jsx as
|
|
1673
|
-
var Stack = /* @__PURE__ */
|
|
1674
|
-
return /* @__PURE__ */
|
|
2844
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
2845
|
+
var Stack = /* @__PURE__ */ forwardRef31(function Stack2({ as: Component = "div", direction, gap, align, justify, wrap, className, ...rest }, ref) {
|
|
2846
|
+
return /* @__PURE__ */ jsx35(Component, { ref, className: cx(stack({ direction, gap, align, justify, wrap }), className), ...rest });
|
|
1675
2847
|
});
|
|
1676
2848
|
|
|
1677
2849
|
// src/components/Switch/Switch.tsx
|
|
1678
2850
|
import * as RadixSwitch from "@radix-ui/react-switch";
|
|
1679
|
-
import { forwardRef as
|
|
2851
|
+
import { forwardRef as forwardRef32, useId as useId11 } from "react";
|
|
1680
2852
|
|
|
1681
2853
|
// src/components/Switch/Switch.css.ts
|
|
1682
2854
|
import { createRuntimeFn as _7a46820 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1683
2855
|
var label5 = "o33ul29";
|
|
1684
|
-
var
|
|
2856
|
+
var root9 = /* @__PURE__ */ _7a46820({ defaultClassName: "o33ul20", variantClassNames: { size: { sm: "o33ul21", md: "o33ul22" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1685
2857
|
var thumb2 = /* @__PURE__ */ _7a46820({ defaultClassName: "o33ul26", variantClassNames: { size: { sm: "o33ul27", md: "o33ul28" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1686
2858
|
var track3 = /* @__PURE__ */ _7a46820({ defaultClassName: "o33ul23", variantClassNames: { size: { sm: "o33ul24", md: "o33ul25" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
|
|
1687
2859
|
|
|
1688
2860
|
// src/components/Switch/Switch.tsx
|
|
1689
|
-
import { jsx as
|
|
1690
|
-
var Switch = /* @__PURE__ */
|
|
1691
|
-
const generatedId =
|
|
2861
|
+
import { jsx as jsx36, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2862
|
+
var Switch = /* @__PURE__ */ forwardRef32(function Switch2({ label: label6, size, id, className, disabled, "aria-label": ariaLabel, ...rest }, ref) {
|
|
2863
|
+
const generatedId = useId11();
|
|
1692
2864
|
const switchId = id ?? generatedId;
|
|
1693
|
-
return /* @__PURE__ */
|
|
1694
|
-
/* @__PURE__ */
|
|
2865
|
+
return /* @__PURE__ */ jsxs28("span", { className: cx(root9({ size }), className), "data-disabled": disabled || void 0, children: [
|
|
2866
|
+
/* @__PURE__ */ jsx36(
|
|
1695
2867
|
RadixSwitch.Root,
|
|
1696
2868
|
{
|
|
1697
2869
|
ref,
|
|
@@ -1700,19 +2872,19 @@ var Switch = /* @__PURE__ */ forwardRef25(function Switch2({ label: label6, size
|
|
|
1700
2872
|
"aria-label": ariaLabel,
|
|
1701
2873
|
className: track3({ size }),
|
|
1702
2874
|
...rest,
|
|
1703
|
-
children: /* @__PURE__ */
|
|
2875
|
+
children: /* @__PURE__ */ jsx36(RadixSwitch.Thumb, { className: thumb2({ size }) })
|
|
1704
2876
|
}
|
|
1705
2877
|
),
|
|
1706
|
-
label6 && /* @__PURE__ */
|
|
2878
|
+
label6 && /* @__PURE__ */ jsx36("label", { htmlFor: switchId, className: label5, children: label6 })
|
|
1707
2879
|
] });
|
|
1708
2880
|
});
|
|
1709
2881
|
|
|
1710
2882
|
// src/components/Table/Table.tsx
|
|
1711
2883
|
import {
|
|
1712
|
-
createContext as
|
|
1713
|
-
forwardRef as
|
|
1714
|
-
useContext as
|
|
1715
|
-
useId as
|
|
2884
|
+
createContext as createContext3,
|
|
2885
|
+
forwardRef as forwardRef33,
|
|
2886
|
+
useContext as useContext3,
|
|
2887
|
+
useId as useId12
|
|
1716
2888
|
} from "react";
|
|
1717
2889
|
import { ArrowDownIcon, ArrowUpIcon } from "@bestow-ui/icons";
|
|
1718
2890
|
|
|
@@ -1720,13 +2892,13 @@ import { ArrowDownIcon, ArrowUpIcon } from "@bestow-ui/icons";
|
|
|
1720
2892
|
import { createRuntimeFn as _7a46821 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1721
2893
|
var body4 = "l3ploy5";
|
|
1722
2894
|
var caption = "l3ploy2";
|
|
1723
|
-
var
|
|
2895
|
+
var cell2 = /* @__PURE__ */ _7a46821({ defaultClassName: "l3ploy9", variantClassNames: { size: { sm: "l3ploya", md: "l3ployb" }, align: { left: "l3ployc", center: "l3ployd", right: "l3ploye" } }, defaultVariants: { size: "md", align: "left" }, compoundVariants: [] });
|
|
1724
2896
|
var container = "l3ploy0";
|
|
1725
2897
|
var footer4 = "l3ploy7";
|
|
1726
2898
|
var footerCell = "l3ployg";
|
|
1727
2899
|
var head = "l3ployf";
|
|
1728
|
-
var
|
|
1729
|
-
var
|
|
2900
|
+
var header9 = "l3ploy3";
|
|
2901
|
+
var row3 = "l3ploy8";
|
|
1730
2902
|
var sortButton = "l3ployh";
|
|
1731
2903
|
var sortIcon = "l3ployi";
|
|
1732
2904
|
var stickyHeader = "l3ploy4";
|
|
@@ -1734,10 +2906,10 @@ var striped = "l3ploy6";
|
|
|
1734
2906
|
var table = "l3ploy1";
|
|
1735
2907
|
|
|
1736
2908
|
// src/components/Table/Table.tsx
|
|
1737
|
-
import { jsx as
|
|
1738
|
-
var TableSizeContext = /* @__PURE__ */
|
|
1739
|
-
var TableSectionContext = /* @__PURE__ */
|
|
1740
|
-
var Table = /* @__PURE__ */
|
|
2909
|
+
import { jsx as jsx37, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2910
|
+
var TableSizeContext = /* @__PURE__ */ createContext3("md");
|
|
2911
|
+
var TableSectionContext = /* @__PURE__ */ createContext3("body");
|
|
2912
|
+
var Table = /* @__PURE__ */ forwardRef33(function Table2({
|
|
1741
2913
|
size = "md",
|
|
1742
2914
|
striped: striped2,
|
|
1743
2915
|
stickyHeader: stickyHeader2,
|
|
@@ -1749,8 +2921,8 @@ var Table = /* @__PURE__ */ forwardRef26(function Table2({
|
|
|
1749
2921
|
children,
|
|
1750
2922
|
...rest
|
|
1751
2923
|
}, ref) {
|
|
1752
|
-
const captionId =
|
|
1753
|
-
return /* @__PURE__ */
|
|
2924
|
+
const captionId = useId12();
|
|
2925
|
+
return /* @__PURE__ */ jsx37(TableSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsx37(
|
|
1754
2926
|
"div",
|
|
1755
2927
|
{
|
|
1756
2928
|
className: cx(container, containerClassName),
|
|
@@ -1759,7 +2931,7 @@ var Table = /* @__PURE__ */ forwardRef26(function Table2({
|
|
|
1759
2931
|
role: "region",
|
|
1760
2932
|
"aria-labelledby": caption2 ? captionId : void 0,
|
|
1761
2933
|
"aria-label": caption2 ? void 0 : ariaLabel,
|
|
1762
|
-
children: /* @__PURE__ */
|
|
2934
|
+
children: /* @__PURE__ */ jsxs29(
|
|
1763
2935
|
"table",
|
|
1764
2936
|
{
|
|
1765
2937
|
ref,
|
|
@@ -1767,7 +2939,7 @@ var Table = /* @__PURE__ */ forwardRef26(function Table2({
|
|
|
1767
2939
|
"aria-label": caption2 ? void 0 : ariaLabel,
|
|
1768
2940
|
...rest,
|
|
1769
2941
|
children: [
|
|
1770
|
-
caption2 && /* @__PURE__ */
|
|
2942
|
+
caption2 && /* @__PURE__ */ jsx37("caption", { id: captionId, className: caption, children: caption2 }),
|
|
1771
2943
|
children
|
|
1772
2944
|
]
|
|
1773
2945
|
}
|
|
@@ -1775,57 +2947,57 @@ var Table = /* @__PURE__ */ forwardRef26(function Table2({
|
|
|
1775
2947
|
}
|
|
1776
2948
|
) });
|
|
1777
2949
|
});
|
|
1778
|
-
var TableHeader = /* @__PURE__ */
|
|
2950
|
+
var TableHeader = /* @__PURE__ */ forwardRef33(
|
|
1779
2951
|
function TableHeader2({ className, ...rest }, ref) {
|
|
1780
|
-
return /* @__PURE__ */
|
|
2952
|
+
return /* @__PURE__ */ jsx37(TableSectionContext.Provider, { value: "header", children: /* @__PURE__ */ jsx37("thead", { ref, className: cx(header9, className), ...rest }) });
|
|
1781
2953
|
}
|
|
1782
2954
|
);
|
|
1783
|
-
var TableBody = /* @__PURE__ */
|
|
2955
|
+
var TableBody = /* @__PURE__ */ forwardRef33(
|
|
1784
2956
|
function TableBody2({ className, ...rest }, ref) {
|
|
1785
|
-
return /* @__PURE__ */
|
|
2957
|
+
return /* @__PURE__ */ jsx37(TableSectionContext.Provider, { value: "body", children: /* @__PURE__ */ jsx37("tbody", { ref, className: cx(body4, className), ...rest }) });
|
|
1786
2958
|
}
|
|
1787
2959
|
);
|
|
1788
|
-
var TableFooter = /* @__PURE__ */
|
|
2960
|
+
var TableFooter = /* @__PURE__ */ forwardRef33(
|
|
1789
2961
|
function TableFooter2({ className, ...rest }, ref) {
|
|
1790
|
-
return /* @__PURE__ */
|
|
2962
|
+
return /* @__PURE__ */ jsx37(TableSectionContext.Provider, { value: "footer", children: /* @__PURE__ */ jsx37("tfoot", { ref, className: cx(footer4, className), ...rest }) });
|
|
1791
2963
|
}
|
|
1792
2964
|
);
|
|
1793
|
-
var TableRow = /* @__PURE__ */
|
|
1794
|
-
return /* @__PURE__ */
|
|
2965
|
+
var TableRow = /* @__PURE__ */ forwardRef33(function TableRow2({ selected, className, ...rest }, ref) {
|
|
2966
|
+
return /* @__PURE__ */ jsx37("tr", { ref, className: cx(row3, className), "data-state": selected ? "selected" : void 0, ...rest });
|
|
1795
2967
|
});
|
|
1796
|
-
var TableHead = /* @__PURE__ */
|
|
1797
|
-
const size =
|
|
1798
|
-
const section =
|
|
2968
|
+
var TableHead = /* @__PURE__ */ forwardRef33(function TableHead2({ align, sortDirection, onSort, scope, className, children, ...rest }, ref) {
|
|
2969
|
+
const size = useContext3(TableSizeContext);
|
|
2970
|
+
const section = useContext3(TableSectionContext);
|
|
1799
2971
|
const sortable = onSort !== void 0;
|
|
1800
2972
|
const direction = sortDirection ?? "none";
|
|
1801
2973
|
const SortIcon = direction === "descending" ? ArrowDownIcon : ArrowUpIcon;
|
|
1802
|
-
return /* @__PURE__ */
|
|
2974
|
+
return /* @__PURE__ */ jsx37(
|
|
1803
2975
|
"th",
|
|
1804
2976
|
{
|
|
1805
2977
|
ref,
|
|
1806
2978
|
scope: scope ?? (section === "header" ? "col" : "row"),
|
|
1807
2979
|
"aria-sort": sortable && direction !== "none" ? direction : void 0,
|
|
1808
2980
|
className: cx(
|
|
1809
|
-
|
|
2981
|
+
cell2({ size, align }),
|
|
1810
2982
|
section === "header" ? head : section === "footer" ? footerCell : void 0,
|
|
1811
2983
|
className
|
|
1812
2984
|
),
|
|
1813
2985
|
...rest,
|
|
1814
|
-
children: sortable ? /* @__PURE__ */
|
|
2986
|
+
children: sortable ? /* @__PURE__ */ jsxs29("button", { type: "button", className: sortButton, onClick: onSort, children: [
|
|
1815
2987
|
children,
|
|
1816
|
-
/* @__PURE__ */
|
|
2988
|
+
/* @__PURE__ */ jsx37(SortIcon, { size: 14, className: sortIcon, "data-active": direction !== "none", "aria-hidden": true })
|
|
1817
2989
|
] }) : children
|
|
1818
2990
|
}
|
|
1819
2991
|
);
|
|
1820
2992
|
});
|
|
1821
|
-
var TableCell = /* @__PURE__ */
|
|
1822
|
-
const size =
|
|
1823
|
-
const section =
|
|
1824
|
-
return /* @__PURE__ */
|
|
2993
|
+
var TableCell = /* @__PURE__ */ forwardRef33(function TableCell2({ align, className, ...rest }, ref) {
|
|
2994
|
+
const size = useContext3(TableSizeContext);
|
|
2995
|
+
const section = useContext3(TableSectionContext);
|
|
2996
|
+
return /* @__PURE__ */ jsx37(
|
|
1825
2997
|
"td",
|
|
1826
2998
|
{
|
|
1827
2999
|
ref,
|
|
1828
|
-
className: cx(
|
|
3000
|
+
className: cx(cell2({ size, align }), section === "footer" && footerCell, className),
|
|
1829
3001
|
...rest
|
|
1830
3002
|
}
|
|
1831
3003
|
);
|
|
@@ -1833,42 +3005,42 @@ var TableCell = /* @__PURE__ */ forwardRef26(function TableCell2({ align, classN
|
|
|
1833
3005
|
|
|
1834
3006
|
// src/components/Tabs/Tabs.tsx
|
|
1835
3007
|
import * as RadixTabs from "@radix-ui/react-tabs";
|
|
1836
|
-
import { createContext as
|
|
3008
|
+
import { createContext as createContext4, forwardRef as forwardRef34, useContext as useContext4 } from "react";
|
|
1837
3009
|
|
|
1838
3010
|
// src/components/Tabs/Tabs.css.ts
|
|
1839
3011
|
import { createRuntimeFn as _7a46822 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1840
|
-
var
|
|
1841
|
-
var
|
|
3012
|
+
var content10 = "fvhbtda";
|
|
3013
|
+
var list4 = /* @__PURE__ */ _7a46822({ defaultClassName: "fvhbtd0", variantClassNames: { variant: { line: "fvhbtd1", soft: "fvhbtd2" } }, defaultVariants: { variant: "line" }, compoundVariants: [] });
|
|
1842
3014
|
var trigger3 = /* @__PURE__ */ _7a46822({ defaultClassName: "fvhbtd3", variantClassNames: { variant: { line: "fvhbtd4", soft: "fvhbtd5" }, size: { sm: "fvhbtd6", md: "fvhbtd7" } }, defaultVariants: { variant: "line", size: "md" }, compoundVariants: [[{ variant: "soft", size: "sm" }, "fvhbtd8"], [{ variant: "soft", size: "md" }, "fvhbtd9"]] });
|
|
1843
3015
|
|
|
1844
3016
|
// src/components/Tabs/Tabs.tsx
|
|
1845
|
-
import { jsx as
|
|
1846
|
-
var TabsStyleContext = /* @__PURE__ */
|
|
1847
|
-
var Tabs = /* @__PURE__ */
|
|
3017
|
+
import { jsx as jsx38 } from "react/jsx-runtime";
|
|
3018
|
+
var TabsStyleContext = /* @__PURE__ */ createContext4({ variant: "line", size: "md" });
|
|
3019
|
+
var Tabs = /* @__PURE__ */ forwardRef34(function Tabs2({ variant = "line", size = "md", ...props }, ref) {
|
|
1848
3020
|
const controlled = "value" in props ? { value: props.value ?? "" } : {};
|
|
1849
|
-
return /* @__PURE__ */
|
|
3021
|
+
return /* @__PURE__ */ jsx38(TabsStyleContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx38(RadixTabs.Root, { ref, ...props, ...controlled }) });
|
|
1850
3022
|
});
|
|
1851
|
-
var TabsList = /* @__PURE__ */
|
|
1852
|
-
const { variant } =
|
|
1853
|
-
return /* @__PURE__ */
|
|
3023
|
+
var TabsList = /* @__PURE__ */ forwardRef34(function TabsList2({ className, ...rest }, ref) {
|
|
3024
|
+
const { variant } = useContext4(TabsStyleContext);
|
|
3025
|
+
return /* @__PURE__ */ jsx38(RadixTabs.List, { ref, className: cx(list4({ variant }), className), ...rest });
|
|
1854
3026
|
});
|
|
1855
|
-
var TabsTrigger = /* @__PURE__ */
|
|
1856
|
-
const { variant, size } =
|
|
1857
|
-
return /* @__PURE__ */
|
|
3027
|
+
var TabsTrigger = /* @__PURE__ */ forwardRef34(function TabsTrigger2({ className, ...rest }, ref) {
|
|
3028
|
+
const { variant, size } = useContext4(TabsStyleContext);
|
|
3029
|
+
return /* @__PURE__ */ jsx38(RadixTabs.Trigger, { ref, className: cx(trigger3({ variant, size }), className), ...rest });
|
|
1858
3030
|
});
|
|
1859
|
-
var TabsContent = /* @__PURE__ */
|
|
1860
|
-
return /* @__PURE__ */
|
|
3031
|
+
var TabsContent = /* @__PURE__ */ forwardRef34(function TabsContent2({ className, ...rest }, ref) {
|
|
3032
|
+
return /* @__PURE__ */ jsx38(RadixTabs.Content, { ref, className: cx(content10, className), ...rest });
|
|
1861
3033
|
});
|
|
1862
3034
|
|
|
1863
3035
|
// src/components/Textarea/Textarea.tsx
|
|
1864
3036
|
import {
|
|
1865
|
-
forwardRef as
|
|
3037
|
+
forwardRef as forwardRef35,
|
|
1866
3038
|
useCallback,
|
|
1867
|
-
useEffect as
|
|
1868
|
-
useId as
|
|
1869
|
-
useLayoutEffect,
|
|
1870
|
-
useRef as
|
|
1871
|
-
useState as
|
|
3039
|
+
useEffect as useEffect6,
|
|
3040
|
+
useId as useId13,
|
|
3041
|
+
useLayoutEffect as useLayoutEffect2,
|
|
3042
|
+
useRef as useRef11,
|
|
3043
|
+
useState as useState10
|
|
1872
3044
|
} from "react";
|
|
1873
3045
|
|
|
1874
3046
|
// src/components/Textarea/Textarea.css.ts
|
|
@@ -1880,9 +3052,9 @@ var footer5 = "_1koawa8";
|
|
|
1880
3052
|
var textarea = /* @__PURE__ */ _7a46823({ defaultClassName: "_1koawa0", variantClassNames: { size: { sm: "_1koawa1", md: "_1koawa2", lg: "_1koawa3" }, resize: { none: "_1koawa4", vertical: "_1koawa5", both: "_1koawa6" } }, defaultVariants: { size: "md", resize: "vertical" }, compoundVariants: [] });
|
|
1881
3053
|
|
|
1882
3054
|
// src/components/Textarea/Textarea.tsx
|
|
1883
|
-
import { jsx as
|
|
1884
|
-
var useIsomorphicLayoutEffect = typeof window !== "undefined" ?
|
|
1885
|
-
var Textarea = /* @__PURE__ */
|
|
3055
|
+
import { jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
3056
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect2 : useEffect6;
|
|
3057
|
+
var Textarea = /* @__PURE__ */ forwardRef35(function Textarea2({
|
|
1886
3058
|
label: label6,
|
|
1887
3059
|
helperText: helperText3,
|
|
1888
3060
|
error,
|
|
@@ -1903,11 +3075,11 @@ var Textarea = /* @__PURE__ */ forwardRef28(function Textarea2({
|
|
|
1903
3075
|
"aria-describedby": ariaDescribedBy,
|
|
1904
3076
|
...rest
|
|
1905
3077
|
}, ref) {
|
|
1906
|
-
const generatedId =
|
|
3078
|
+
const generatedId = useId13();
|
|
1907
3079
|
const textareaId = id ?? generatedId;
|
|
1908
3080
|
const helperId = helperText3 ? `${textareaId}-helper` : void 0;
|
|
1909
|
-
const innerRef =
|
|
1910
|
-
const [uncontrolledLength, setUncontrolledLength] =
|
|
3081
|
+
const innerRef = useRef11(null);
|
|
3082
|
+
const [uncontrolledLength, setUncontrolledLength] = useState10(() => String(defaultValue ?? "").length);
|
|
1911
3083
|
const length = value4 !== void 0 ? String(value4).length : uncontrolledLength;
|
|
1912
3084
|
const fitHeight = useCallback(() => {
|
|
1913
3085
|
const el = innerRef.current;
|
|
@@ -1922,12 +3094,12 @@ var Textarea = /* @__PURE__ */ forwardRef28(function Textarea2({
|
|
|
1922
3094
|
fitHeight();
|
|
1923
3095
|
onChange?.(event);
|
|
1924
3096
|
};
|
|
1925
|
-
return /* @__PURE__ */
|
|
1926
|
-
label6 && /* @__PURE__ */
|
|
3097
|
+
return /* @__PURE__ */ jsxs30("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
|
|
3098
|
+
label6 && /* @__PURE__ */ jsxs30("label", { htmlFor: textareaId, className: label, children: [
|
|
1927
3099
|
label6,
|
|
1928
|
-
required && /* @__PURE__ */
|
|
3100
|
+
required && /* @__PURE__ */ jsx39("span", { className: requiredMark, "aria-hidden": true, children: "*" })
|
|
1929
3101
|
] }),
|
|
1930
|
-
/* @__PURE__ */
|
|
3102
|
+
/* @__PURE__ */ jsx39(
|
|
1931
3103
|
"textarea",
|
|
1932
3104
|
{
|
|
1933
3105
|
ref: mergeRefs(innerRef, ref),
|
|
@@ -1949,38 +3121,46 @@ var Textarea = /* @__PURE__ */ forwardRef28(function Textarea2({
|
|
|
1949
3121
|
...rest
|
|
1950
3122
|
}
|
|
1951
3123
|
),
|
|
1952
|
-
(helperText3 || showCount) && /* @__PURE__ */
|
|
1953
|
-
helperText3 && /* @__PURE__ */
|
|
1954
|
-
showCount && /* @__PURE__ */
|
|
3124
|
+
(helperText3 || showCount) && /* @__PURE__ */ jsxs30("div", { className: footer5, children: [
|
|
3125
|
+
helperText3 && /* @__PURE__ */ jsx39("p", { id: helperId, className: helperText({ error }), children: helperText3 }),
|
|
3126
|
+
showCount && /* @__PURE__ */ jsx39("span", { className: cx(count, maxLength !== void 0 && length >= maxLength && countOver), children: maxLength !== void 0 ? `${length}/${maxLength}` : length })
|
|
1955
3127
|
] })
|
|
1956
3128
|
] });
|
|
1957
3129
|
});
|
|
1958
3130
|
|
|
1959
3131
|
// src/components/Toast/Toast.tsx
|
|
1960
3132
|
import * as RadixToast from "@radix-ui/react-toast";
|
|
1961
|
-
import { createContext as
|
|
3133
|
+
import { createContext as createContext5, useCallback as useCallback2, useContext as useContext5, useMemo as useMemo4, useRef as useRef12, useState as useState11 } from "react";
|
|
1962
3134
|
import { XIcon as XIcon5 } from "@bestow-ui/icons";
|
|
1963
3135
|
|
|
1964
3136
|
// src/components/Toast/Toast.css.ts
|
|
1965
3137
|
import { createRuntimeFn as _7a46824 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
1966
|
-
var action2 = "
|
|
1967
|
-
var close = "
|
|
1968
|
-
var description5 = "
|
|
1969
|
-
var title5 = "
|
|
1970
|
-
var toast = /* @__PURE__ */ _7a46824({ defaultClassName: "_1g11zvx1", variantClassNames: {
|
|
3138
|
+
var action2 = "_1g11zvx9";
|
|
3139
|
+
var close = "_1g11zvxa";
|
|
3140
|
+
var description5 = "_1g11zvx8";
|
|
3141
|
+
var title5 = "_1g11zvx7";
|
|
3142
|
+
var toast = /* @__PURE__ */ _7a46824({ defaultClassName: "_1g11zvx1", variantClassNames: { color: { primary: "_1g11zvx2", neutral: "_1g11zvx3", success: "_1g11zvx4", warning: "_1g11zvx5", danger: "_1g11zvx6" } }, defaultVariants: { color: "neutral" }, compoundVariants: [] });
|
|
1971
3143
|
var viewport2 = "_1g11zvx0";
|
|
1972
3144
|
|
|
1973
3145
|
// src/components/Toast/Toast.tsx
|
|
1974
|
-
import { jsx as
|
|
3146
|
+
import { jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
1975
3147
|
var REMOVE_DELAY = 500;
|
|
1976
|
-
var ToastContext = /* @__PURE__ */
|
|
1977
|
-
function ToastProvider({ children, duration = 5e3, label:
|
|
1978
|
-
const
|
|
1979
|
-
const
|
|
3148
|
+
var ToastContext = /* @__PURE__ */ createContext5(null);
|
|
3149
|
+
function ToastProvider({ children, duration = 5e3, label: labelProp }) {
|
|
3150
|
+
const m = useMessages();
|
|
3151
|
+
const label6 = labelProp ?? m.notifications ?? "\uC54C\uB9BC";
|
|
3152
|
+
const [toasts, setToasts] = useState11([]);
|
|
3153
|
+
const nextId = useRef12(0);
|
|
1980
3154
|
const portal2 = usePortalProps();
|
|
1981
|
-
const toast2 = useCallback2((options) => {
|
|
3155
|
+
const toast2 = useCallback2(({ variant, ...options }) => {
|
|
3156
|
+
if (variant !== void 0) {
|
|
3157
|
+
warnOnce(
|
|
3158
|
+
'toast() \uC758 variant \uB294 deprecated \uC608\uC694. color \uB97C \uC4F0\uC138\uC694 (variant "default" \u2192 color "neutral", 1.0 \uC5D0\uC11C \uC81C\uAC70).'
|
|
3159
|
+
);
|
|
3160
|
+
}
|
|
3161
|
+
const color = options.color ?? (variant === "default" ? "neutral" : variant);
|
|
1982
3162
|
const id = nextId.current++;
|
|
1983
|
-
setToasts((prev) => [...prev, { ...options, id, open: true }]);
|
|
3163
|
+
setToasts((prev) => [...prev, { ...options, color, id, open: true }]);
|
|
1984
3164
|
return id;
|
|
1985
3165
|
}, []);
|
|
1986
3166
|
const dismiss = useCallback2((id) => {
|
|
@@ -1988,10 +3168,10 @@ function ToastProvider({ children, duration = 5e3, label: label6 = "\uC54C\uB9BC
|
|
|
1988
3168
|
setToasts((prev) => prev.map((t) => isTarget(t) ? { ...t, open: false } : t));
|
|
1989
3169
|
setTimeout(() => setToasts((prev) => prev.filter((t) => t.open || !isTarget(t))), REMOVE_DELAY);
|
|
1990
3170
|
}, []);
|
|
1991
|
-
const value4 =
|
|
1992
|
-
return /* @__PURE__ */
|
|
3171
|
+
const value4 = useMemo4(() => ({ toast: toast2, dismiss }), [toast2, dismiss]);
|
|
3172
|
+
return /* @__PURE__ */ jsx40(ToastContext.Provider, { value: value4, children: /* @__PURE__ */ jsxs31(RadixToast.Provider, { duration, label: label6, swipeDirection: "right", children: [
|
|
1993
3173
|
children,
|
|
1994
|
-
toasts.map(({ id, open, title: title6, description: description6,
|
|
3174
|
+
toasts.map(({ id, open, title: title6, description: description6, color, duration: itemDuration, action: action3 }) => /* @__PURE__ */ jsxs31(
|
|
1995
3175
|
RadixToast.Root,
|
|
1996
3176
|
{
|
|
1997
3177
|
open,
|
|
@@ -1999,21 +3179,21 @@ function ToastProvider({ children, duration = 5e3, label: label6 = "\uC54C\uB9BC
|
|
|
1999
3179
|
onOpenChange: (nextOpen) => {
|
|
2000
3180
|
if (!nextOpen) dismiss(id);
|
|
2001
3181
|
},
|
|
2002
|
-
className: toast({
|
|
3182
|
+
className: toast({ color }),
|
|
2003
3183
|
children: [
|
|
2004
|
-
/* @__PURE__ */
|
|
2005
|
-
description6 && /* @__PURE__ */
|
|
2006
|
-
action3 && /* @__PURE__ */
|
|
2007
|
-
/* @__PURE__ */
|
|
3184
|
+
/* @__PURE__ */ jsx40(RadixToast.Title, { className: title5, children: title6 }),
|
|
3185
|
+
description6 && /* @__PURE__ */ jsx40(RadixToast.Description, { className: description5, children: description6 }),
|
|
3186
|
+
action3 && /* @__PURE__ */ jsx40(RadixToast.Action, { asChild: true, altText: action3.altText ?? action3.label, className: action2, children: /* @__PURE__ */ jsx40(Button, { size: "sm", variant: "soft", color: "neutral", onClick: action3.onClick, children: action3.label }) }),
|
|
3187
|
+
/* @__PURE__ */ jsx40(RadixToast.Close, { className: close, "aria-label": m.close ?? "\uB2EB\uAE30", children: /* @__PURE__ */ jsx40(XIcon5, { size: 16 }) })
|
|
2008
3188
|
]
|
|
2009
3189
|
},
|
|
2010
3190
|
id
|
|
2011
3191
|
)),
|
|
2012
|
-
/* @__PURE__ */
|
|
3192
|
+
/* @__PURE__ */ jsx40(RadixToast.Viewport, { className: cx(portal2.className, viewport2), style: portal2.style })
|
|
2013
3193
|
] }) });
|
|
2014
3194
|
}
|
|
2015
3195
|
function useToast() {
|
|
2016
|
-
const context =
|
|
3196
|
+
const context = useContext5(ToastContext);
|
|
2017
3197
|
if (!context) throw new Error("useToast \uB294 ToastProvider \uC548\uC5D0\uC11C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.");
|
|
2018
3198
|
return context;
|
|
2019
3199
|
}
|
|
@@ -2023,12 +3203,12 @@ import * as RadixTooltip from "@radix-ui/react-tooltip";
|
|
|
2023
3203
|
|
|
2024
3204
|
// src/components/Tooltip/Tooltip.css.ts
|
|
2025
3205
|
var arrow2 = "z7rufs1";
|
|
2026
|
-
var
|
|
3206
|
+
var content11 = "z7rufs0";
|
|
2027
3207
|
|
|
2028
3208
|
// src/components/Tooltip/Tooltip.tsx
|
|
2029
|
-
import { jsx as
|
|
3209
|
+
import { jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
2030
3210
|
function Tooltip({
|
|
2031
|
-
content:
|
|
3211
|
+
content: content12,
|
|
2032
3212
|
children,
|
|
2033
3213
|
side = "top",
|
|
2034
3214
|
align = "center",
|
|
@@ -2040,21 +3220,21 @@ function Tooltip({
|
|
|
2040
3220
|
className
|
|
2041
3221
|
}) {
|
|
2042
3222
|
const portal2 = usePortalProps();
|
|
2043
|
-
if (disabled ||
|
|
2044
|
-
return /* @__PURE__ */
|
|
2045
|
-
/* @__PURE__ */
|
|
2046
|
-
/* @__PURE__ */
|
|
3223
|
+
if (disabled || content12 == null || content12 === "") return children;
|
|
3224
|
+
return /* @__PURE__ */ jsx41(RadixTooltip.Provider, { delayDuration: delay, children: /* @__PURE__ */ jsxs32(RadixTooltip.Root, { open, defaultOpen, onOpenChange, children: [
|
|
3225
|
+
/* @__PURE__ */ jsx41(RadixTooltip.Trigger, { asChild: true, children }),
|
|
3226
|
+
/* @__PURE__ */ jsx41(RadixTooltip.Portal, { children: /* @__PURE__ */ jsxs32(
|
|
2047
3227
|
RadixTooltip.Content,
|
|
2048
3228
|
{
|
|
2049
3229
|
side,
|
|
2050
3230
|
align,
|
|
2051
3231
|
sideOffset: 6,
|
|
2052
3232
|
collisionPadding: 8,
|
|
2053
|
-
className: cx(portal2.className,
|
|
3233
|
+
className: cx(portal2.className, content11, className),
|
|
2054
3234
|
style: portal2.style,
|
|
2055
3235
|
children: [
|
|
2056
|
-
|
|
2057
|
-
/* @__PURE__ */
|
|
3236
|
+
content12,
|
|
3237
|
+
/* @__PURE__ */ jsx41(RadixTooltip.Arrow, { className: arrow2, width: 10, height: 5 })
|
|
2058
3238
|
]
|
|
2059
3239
|
}
|
|
2060
3240
|
) })
|
|
@@ -2062,14 +3242,14 @@ function Tooltip({
|
|
|
2062
3242
|
}
|
|
2063
3243
|
|
|
2064
3244
|
// src/components/Typography/Typography.tsx
|
|
2065
|
-
import { forwardRef as
|
|
3245
|
+
import { forwardRef as forwardRef36 } from "react";
|
|
2066
3246
|
|
|
2067
3247
|
// src/components/Typography/Typography.css.ts
|
|
2068
3248
|
import { createRuntimeFn as _7a46825 } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
2069
3249
|
var typography = /* @__PURE__ */ _7a46825({ defaultClassName: "kiolio0", variantClassNames: { variant: { display: "kiolio1", h1: "kiolio2", h2: "kiolio3", h3: "kiolio4", h4: "kiolio5", "body-lg": "kiolio6", body: "kiolio7", "body-sm": "kiolio8", caption: "kiolio9" }, color: { "default": "kiolioa", muted: "kioliob", subtle: "kiolioc", primary: "kioliod", danger: "kiolioe", success: "kioliof", warning: "kioliog", inherit: "kiolioh" }, weight: { regular: "kiolioi", medium: "kiolioj", semibold: "kioliok", bold: "kioliol" }, align: { start: "kioliom", center: "kiolion", end: "kiolioo" }, truncate: { true: "kioliop" } }, defaultVariants: { variant: "body", color: "default" }, compoundVariants: [] });
|
|
2070
3250
|
|
|
2071
3251
|
// src/components/Typography/Typography.tsx
|
|
2072
|
-
import { jsx as
|
|
3252
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
2073
3253
|
var defaultElement = {
|
|
2074
3254
|
display: "h1",
|
|
2075
3255
|
h1: "h1",
|
|
@@ -2081,9 +3261,9 @@ var defaultElement = {
|
|
|
2081
3261
|
"body-sm": "p",
|
|
2082
3262
|
caption: "span"
|
|
2083
3263
|
};
|
|
2084
|
-
var Typography = /* @__PURE__ */
|
|
3264
|
+
var Typography = /* @__PURE__ */ forwardRef36(function Typography2({ variant = "body", as, color, weight, align, truncate, className, ...rest }, ref) {
|
|
2085
3265
|
const Component = as ?? defaultElement[variant];
|
|
2086
|
-
return /* @__PURE__ */
|
|
3266
|
+
return /* @__PURE__ */ jsx42(
|
|
2087
3267
|
Component,
|
|
2088
3268
|
{
|
|
2089
3269
|
ref,
|
|
@@ -2092,20 +3272,170 @@ var Typography = /* @__PURE__ */ forwardRef29(function Typography2({ variant = "
|
|
|
2092
3272
|
}
|
|
2093
3273
|
);
|
|
2094
3274
|
});
|
|
3275
|
+
|
|
3276
|
+
// src/components/VerificationCodeInput/VerificationCodeInput.tsx
|
|
3277
|
+
import { forwardRef as forwardRef37, useEffect as useEffect7, useId as useId14, useRef as useRef13, useState as useState12 } from "react";
|
|
3278
|
+
|
|
3279
|
+
// src/components/VerificationCodeInput/VerificationCodeInput.css.ts
|
|
3280
|
+
var input4 = "ea01812";
|
|
3281
|
+
var row4 = "ea01810";
|
|
3282
|
+
var slot = "ea01813";
|
|
3283
|
+
var slots = "ea01811";
|
|
3284
|
+
var timer = "ea01814";
|
|
3285
|
+
|
|
3286
|
+
// src/components/VerificationCodeInput/VerificationCodeInput.tsx
|
|
3287
|
+
import { jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
3288
|
+
var formatTime = (seconds) => `${String(Math.floor(seconds / 60)).padStart(2, "0")}:${String(seconds % 60).padStart(2, "0")}`;
|
|
3289
|
+
var VerificationCodeInput = /* @__PURE__ */ forwardRef37(
|
|
3290
|
+
function VerificationCodeInput2(props, ref) {
|
|
3291
|
+
const {
|
|
3292
|
+
length = 6,
|
|
3293
|
+
value: value4,
|
|
3294
|
+
defaultValue,
|
|
3295
|
+
onValueChange,
|
|
3296
|
+
onComplete,
|
|
3297
|
+
type = "numeric",
|
|
3298
|
+
label: labelProp,
|
|
3299
|
+
helperText: helperText3,
|
|
3300
|
+
error,
|
|
3301
|
+
disabled,
|
|
3302
|
+
autoFocus,
|
|
3303
|
+
expiresIn,
|
|
3304
|
+
onExpire,
|
|
3305
|
+
onResend,
|
|
3306
|
+
resendText: resendTextProp,
|
|
3307
|
+
expiredText: expiredTextProp,
|
|
3308
|
+
name,
|
|
3309
|
+
id,
|
|
3310
|
+
className
|
|
3311
|
+
} = props;
|
|
3312
|
+
const m = useMessages();
|
|
3313
|
+
const label6 = labelProp ?? m.verificationCode ?? "\uC778\uC99D\uBC88\uD638";
|
|
3314
|
+
const resendText = resendTextProp ?? m.resend ?? "\uC7AC\uC804\uC1A1";
|
|
3315
|
+
const expiredText = expiredTextProp ?? m.verificationExpired ?? "\uC778\uC99D \uC2DC\uAC04\uC774 \uC9C0\uB0AC\uC5B4\uC694. \uC7AC\uC804\uC1A1\uD574 \uC8FC\uC138\uC694.";
|
|
3316
|
+
const generatedId = useId14();
|
|
3317
|
+
const inputId = id ?? generatedId;
|
|
3318
|
+
const helperId = `${inputId}-helper`;
|
|
3319
|
+
const statusId = `${inputId}-status`;
|
|
3320
|
+
const inputRef = useRef13(null);
|
|
3321
|
+
const isControlled = "value" in props;
|
|
3322
|
+
const [innerValue, setInnerValue] = useState12(defaultValue ?? "");
|
|
3323
|
+
const code = (isControlled ? value4 ?? "" : innerValue).slice(0, length);
|
|
3324
|
+
const [focused, setFocused] = useState12(false);
|
|
3325
|
+
const [endAt, setEndAt] = useState12(() => expiresIn ? Date.now() + expiresIn * 1e3 : null);
|
|
3326
|
+
const [remaining, setRemaining] = useState12(expiresIn ?? 0);
|
|
3327
|
+
const expired = expiresIn !== void 0 && remaining <= 0;
|
|
3328
|
+
const onExpireRef = useRef13(onExpire);
|
|
3329
|
+
useEffect7(() => {
|
|
3330
|
+
onExpireRef.current = onExpire;
|
|
3331
|
+
});
|
|
3332
|
+
useEffect7(() => {
|
|
3333
|
+
if (endAt === null) return;
|
|
3334
|
+
const tick = () => {
|
|
3335
|
+
const left = Math.max(0, Math.ceil((endAt - Date.now()) / 1e3));
|
|
3336
|
+
setRemaining(left);
|
|
3337
|
+
if (left === 0) {
|
|
3338
|
+
clearInterval(timer2);
|
|
3339
|
+
onExpireRef.current?.();
|
|
3340
|
+
}
|
|
3341
|
+
};
|
|
3342
|
+
const timer2 = setInterval(tick, 250);
|
|
3343
|
+
tick();
|
|
3344
|
+
return () => clearInterval(timer2);
|
|
3345
|
+
}, [endAt]);
|
|
3346
|
+
const setCode = (next) => {
|
|
3347
|
+
if (!isControlled) setInnerValue(next);
|
|
3348
|
+
onValueChange?.(next);
|
|
3349
|
+
if (next.length === length && code.length !== length) onComplete?.(next);
|
|
3350
|
+
};
|
|
3351
|
+
const handleChange = (event) => {
|
|
3352
|
+
const raw = event.target.value;
|
|
3353
|
+
const cleaned = (type === "numeric" ? raw.replace(/\D/g, "") : raw.replace(/[^0-9a-z]/gi, "").toUpperCase()).slice(0, length);
|
|
3354
|
+
setCode(cleaned);
|
|
3355
|
+
};
|
|
3356
|
+
const resend = () => {
|
|
3357
|
+
onResend?.();
|
|
3358
|
+
setCode("");
|
|
3359
|
+
if (expiresIn) {
|
|
3360
|
+
setEndAt(Date.now() + expiresIn * 1e3);
|
|
3361
|
+
setRemaining(expiresIn);
|
|
3362
|
+
}
|
|
3363
|
+
inputRef.current?.focus();
|
|
3364
|
+
};
|
|
3365
|
+
const description6 = helperText3 ?? m.verificationCodeHint?.(length, type) ?? `${length}\uC790\uB9AC ${type === "numeric" ? "\uC22B\uC790" : "\uBB38\uC790"}\uB97C \uC785\uB825\uD558\uC138\uC694.`;
|
|
3366
|
+
const activeIndex = Math.min(code.length, length - 1);
|
|
3367
|
+
return /* @__PURE__ */ jsxs33(
|
|
3368
|
+
"div",
|
|
3369
|
+
{
|
|
3370
|
+
className: cx(field, className),
|
|
3371
|
+
"data-invalid": error || void 0,
|
|
3372
|
+
"data-disabled": disabled || void 0,
|
|
3373
|
+
children: [
|
|
3374
|
+
/* @__PURE__ */ jsx43("label", { htmlFor: inputId, className: label, children: label6 }),
|
|
3375
|
+
/* @__PURE__ */ jsxs33("div", { className: row4, children: [
|
|
3376
|
+
/* @__PURE__ */ jsxs33("div", { className: slots, children: [
|
|
3377
|
+
/* @__PURE__ */ jsx43(
|
|
3378
|
+
"input",
|
|
3379
|
+
{
|
|
3380
|
+
ref: mergeRefs(ref, inputRef),
|
|
3381
|
+
id: inputId,
|
|
3382
|
+
type: "text",
|
|
3383
|
+
inputMode: type === "numeric" ? "numeric" : "text",
|
|
3384
|
+
autoComplete: "one-time-code",
|
|
3385
|
+
pattern: type === "numeric" ? "[0-9]*" : void 0,
|
|
3386
|
+
value: code,
|
|
3387
|
+
onChange: handleChange,
|
|
3388
|
+
onFocus: () => setFocused(true),
|
|
3389
|
+
onBlur: () => setFocused(false),
|
|
3390
|
+
disabled,
|
|
3391
|
+
autoFocus,
|
|
3392
|
+
"aria-invalid": error || void 0,
|
|
3393
|
+
"aria-describedby": `${helperId} ${statusId}`,
|
|
3394
|
+
className: input4
|
|
3395
|
+
}
|
|
3396
|
+
),
|
|
3397
|
+
Array.from({ length }, (_, index) => /* @__PURE__ */ jsx43(
|
|
3398
|
+
"div",
|
|
3399
|
+
{
|
|
3400
|
+
className: slot,
|
|
3401
|
+
"data-active": focused && index === activeIndex ? "" : void 0,
|
|
3402
|
+
"aria-hidden": true,
|
|
3403
|
+
children: code[index] ?? ""
|
|
3404
|
+
},
|
|
3405
|
+
index
|
|
3406
|
+
))
|
|
3407
|
+
] }),
|
|
3408
|
+
expiresIn !== void 0 && /* @__PURE__ */ jsx43("span", { role: "timer", className: timer, children: formatTime(remaining) }),
|
|
3409
|
+
onResend && /* @__PURE__ */ jsx43(Button, { size: "sm", variant: "outline", color: "neutral", onClick: resend, disabled, children: resendText })
|
|
3410
|
+
] }),
|
|
3411
|
+
/* @__PURE__ */ jsx43("p", { id: helperId, className: helperText({ error }), children: description6 }),
|
|
3412
|
+
/* @__PURE__ */ jsx43("p", { id: statusId, role: "status", className: helperText({ error: true }), children: expired ? expiredText : "" }),
|
|
3413
|
+
name && /* @__PURE__ */ jsx43("input", { type: "hidden", name, value: code })
|
|
3414
|
+
]
|
|
3415
|
+
}
|
|
3416
|
+
);
|
|
3417
|
+
}
|
|
3418
|
+
);
|
|
2095
3419
|
export {
|
|
2096
3420
|
Accordion,
|
|
2097
3421
|
AccordionItem,
|
|
3422
|
+
AddressInput,
|
|
3423
|
+
AgreementGroup,
|
|
2098
3424
|
Alert,
|
|
3425
|
+
AmountInput,
|
|
2099
3426
|
Avatar,
|
|
2100
3427
|
Badge,
|
|
2101
3428
|
Breadcrumb,
|
|
3429
|
+
BusinessNumberInput,
|
|
2102
3430
|
Button,
|
|
3431
|
+
Calendar,
|
|
2103
3432
|
Card,
|
|
2104
3433
|
CardBody,
|
|
2105
3434
|
CardFooter,
|
|
2106
3435
|
CardHeader,
|
|
2107
3436
|
Checkbox,
|
|
2108
3437
|
Combobox,
|
|
3438
|
+
DatePicker,
|
|
2109
3439
|
Divider,
|
|
2110
3440
|
Drawer,
|
|
2111
3441
|
DrawerClose,
|
|
@@ -2119,9 +3449,11 @@ export {
|
|
|
2119
3449
|
IconButton,
|
|
2120
3450
|
Input,
|
|
2121
3451
|
Link,
|
|
3452
|
+
LocaleProvider,
|
|
2122
3453
|
Modal,
|
|
2123
3454
|
ModalClose,
|
|
2124
3455
|
Pagination,
|
|
3456
|
+
PhoneNumberInput,
|
|
2125
3457
|
Popover2 as Popover,
|
|
2126
3458
|
PopoverClose,
|
|
2127
3459
|
Progress,
|
|
@@ -2149,10 +3481,23 @@ export {
|
|
|
2149
3481
|
ToastProvider,
|
|
2150
3482
|
Tooltip,
|
|
2151
3483
|
Typography,
|
|
3484
|
+
VerificationCodeInput,
|
|
3485
|
+
composeExtraAddress,
|
|
2152
3486
|
contrastRatio,
|
|
2153
3487
|
createIntentColors,
|
|
2154
3488
|
createTheme,
|
|
3489
|
+
en,
|
|
3490
|
+
formatBusinessNumber,
|
|
3491
|
+
formatKoreanAmount,
|
|
3492
|
+
formatKoreanDate,
|
|
3493
|
+
formatPhoneNumber,
|
|
3494
|
+
hasAllRequiredAgreements,
|
|
3495
|
+
isValidBusinessNumber,
|
|
3496
|
+
kakaoPostcodeProvider,
|
|
3497
|
+
parseISODate,
|
|
2155
3498
|
themeClass,
|
|
3499
|
+
toISODate,
|
|
3500
|
+
useMessages,
|
|
2156
3501
|
usePortalClassName,
|
|
2157
3502
|
usePortalProps,
|
|
2158
3503
|
useTheme,
|