@x-plat/design-system 0.8.3 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AutoResizeTextArea/index.cjs +140 -4
- package/dist/components/AutoResizeTextArea/index.css +38 -0
- package/dist/components/AutoResizeTextArea/index.d.cts +4 -0
- package/dist/components/AutoResizeTextArea/index.d.ts +4 -0
- package/dist/components/AutoResizeTextArea/index.js +140 -4
- package/dist/components/Badge/index.cjs +5 -1
- package/dist/components/Badge/index.css +1 -0
- package/dist/components/Badge/index.d.cts +1 -0
- package/dist/components/Badge/index.d.ts +1 -0
- package/dist/components/Badge/index.js +5 -1
- package/dist/components/Box/index.d.cts +3 -0
- package/dist/components/Box/index.d.ts +3 -0
- package/dist/components/Chart/index.cjs +7 -6
- package/dist/components/Chart/index.d.cts +12 -1
- package/dist/components/Chart/index.d.ts +12 -1
- package/dist/components/Chart/index.js +7 -6
- package/dist/components/ChatInput/index.cjs +150 -9
- package/dist/components/ChatInput/index.css +38 -0
- package/dist/components/ChatInput/index.d.cts +9 -0
- package/dist/components/ChatInput/index.d.ts +9 -0
- package/dist/components/ChatInput/index.js +151 -10
- package/dist/components/CheckBox/index.cjs +137 -6
- package/dist/components/CheckBox/index.css +40 -0
- package/dist/components/CheckBox/index.d.cts +13 -2
- package/dist/components/CheckBox/index.d.ts +13 -2
- package/dist/components/CheckBox/index.js +137 -6
- package/dist/components/Chip/index.d.cts +2 -0
- package/dist/components/Chip/index.d.ts +2 -0
- package/dist/components/DatePicker/index.cjs +76 -62
- package/dist/components/DatePicker/index.css +38 -31
- package/dist/components/DatePicker/index.js +42 -28
- package/dist/components/Drawer/index.d.cts +1 -0
- package/dist/components/Drawer/index.d.ts +1 -0
- package/dist/components/FieldMessage/index.cjs +183 -0
- package/dist/components/FieldMessage/index.css +37 -0
- package/dist/components/FieldMessage/index.d.cts +37 -0
- package/dist/components/FieldMessage/index.d.ts +37 -0
- package/dist/components/FieldMessage/index.js +154 -0
- package/dist/components/FileUpload/index.cjs +135 -8
- package/dist/components/FileUpload/index.css +38 -0
- package/dist/components/FileUpload/index.d.cts +9 -0
- package/dist/components/FileUpload/index.d.ts +9 -0
- package/dist/components/FileUpload/index.js +135 -8
- package/dist/components/ImageSelector/index.cjs +153 -11
- package/dist/components/ImageSelector/index.css +38 -0
- package/dist/components/ImageSelector/index.d.cts +6 -0
- package/dist/components/ImageSelector/index.d.ts +6 -0
- package/dist/components/ImageSelector/index.js +153 -11
- package/dist/components/Input/index.cjs +38 -25
- package/dist/components/Input/index.css +38 -31
- package/dist/components/Input/index.d.cts +7 -8
- package/dist/components/Input/index.d.ts +7 -8
- package/dist/components/Input/index.js +36 -23
- package/dist/components/NotificationBadge/index.cjs +5 -1
- package/dist/components/NotificationBadge/index.css +1 -0
- package/dist/components/NotificationBadge/index.d.cts +6 -2
- package/dist/components/NotificationBadge/index.d.ts +6 -2
- package/dist/components/NotificationBadge/index.js +5 -1
- package/dist/components/Pagination/index.cjs +6 -2
- package/dist/components/Pagination/index.css +1 -0
- package/dist/components/Pagination/index.d.cts +13 -2
- package/dist/components/Pagination/index.d.ts +13 -2
- package/dist/components/Pagination/index.js +6 -2
- package/dist/components/Progress/index.cjs +6 -2
- package/dist/components/Progress/index.css +1 -0
- package/dist/components/Progress/index.d.cts +11 -2
- package/dist/components/Progress/index.d.ts +11 -2
- package/dist/components/Progress/index.js +6 -2
- package/dist/components/Radio/index.cjs +158 -10
- package/dist/components/Radio/index.css +40 -0
- package/dist/components/Radio/index.d.cts +14 -2
- package/dist/components/Radio/index.d.ts +14 -2
- package/dist/components/Radio/index.js +158 -10
- package/dist/components/Select/index.cjs +139 -13
- package/dist/components/Select/index.css +38 -0
- package/dist/components/Select/index.d.cts +8 -1
- package/dist/components/Select/index.d.ts +8 -1
- package/dist/components/Select/index.js +139 -13
- package/dist/components/Skeleton/index.d.cts +3 -0
- package/dist/components/Skeleton/index.d.ts +3 -0
- package/dist/components/Spinner/index.cjs +6 -2
- package/dist/components/Spinner/index.css +1 -0
- package/dist/components/Spinner/index.d.cts +8 -2
- package/dist/components/Spinner/index.d.ts +8 -2
- package/dist/components/Spinner/index.js +6 -2
- package/dist/components/Steps/index.cjs +6 -2
- package/dist/components/Steps/index.css +11 -0
- package/dist/components/Steps/index.d.cts +9 -2
- package/dist/components/Steps/index.d.ts +9 -2
- package/dist/components/Steps/index.js +6 -2
- package/dist/components/Switch/index.cjs +146 -6
- package/dist/components/Switch/index.css +40 -0
- package/dist/components/Switch/index.d.cts +13 -2
- package/dist/components/Switch/index.d.ts +13 -2
- package/dist/components/Switch/index.js +146 -6
- package/dist/components/Tab/index.cjs +4 -3
- package/dist/components/Tab/index.d.cts +12 -1
- package/dist/components/Tab/index.d.ts +12 -1
- package/dist/components/Tab/index.js +4 -3
- package/dist/components/Tag/index.cjs +5 -3
- package/dist/components/Tag/index.d.cts +12 -2
- package/dist/components/Tag/index.d.ts +12 -2
- package/dist/components/Tag/index.js +5 -3
- package/dist/components/TextArea/index.cjs +138 -2
- package/dist/components/TextArea/index.css +38 -0
- package/dist/components/TextArea/index.d.cts +6 -0
- package/dist/components/TextArea/index.d.ts +6 -0
- package/dist/components/TextArea/index.js +138 -2
- package/dist/components/Tooltip/index.cjs +4 -2
- package/dist/components/Tooltip/index.d.cts +11 -1
- package/dist/components/Tooltip/index.d.ts +11 -1
- package/dist/components/Tooltip/index.js +4 -2
- package/dist/components/index.cjs +479 -408
- package/dist/components/index.css +59 -31
- package/dist/components/index.d.cts +3 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.js +262 -194
- package/dist/index.cjs +484 -413
- package/dist/index.css +59 -31
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +264 -196
- package/dist/status-g_KP3qT6.d.cts +8 -0
- package/dist/status-g_KP3qT6.d.ts +8 -0
- package/dist/validation-Dqo1zqhT.d.cts +13 -0
- package/dist/validation-Dqo1zqhT.d.ts +13 -0
- package/guidelines/AGENT_PROMPT.md +15 -0
- package/guidelines/components/card.md +3 -3
- package/guidelines/components/feedback.md +1 -1
- package/guidelines/components/form.md +26 -0
- package/guidelines/components/navigation.md +16 -15
- package/guidelines/components/overlay.md +43 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5595,11 +5595,49 @@ var Alert_default = Alert;
|
|
|
5595
5595
|
|
|
5596
5596
|
// src/components/AutoResizeTextArea/AutoResizeTextArea.tsx
|
|
5597
5597
|
import React2 from "react";
|
|
5598
|
-
|
|
5598
|
+
|
|
5599
|
+
// src/components/FieldMessage/FieldMessage.tsx
|
|
5600
|
+
import { Fragment, jsx as jsx297, jsxs as jsxs191 } from "react/jsx-runtime";
|
|
5601
|
+
var ICON = {
|
|
5602
|
+
default: /* @__PURE__ */ jsx297(InfoIcon_default, {}),
|
|
5603
|
+
success: /* @__PURE__ */ jsx297(SuccessIcon_default, {}),
|
|
5604
|
+
warning: /* @__PURE__ */ jsx297(InfoIcon_default, {}),
|
|
5605
|
+
error: /* @__PURE__ */ jsx297(ErrorIcon_default, {})
|
|
5606
|
+
};
|
|
5607
|
+
var FieldMessage = (props) => {
|
|
5608
|
+
const { validations } = props;
|
|
5609
|
+
if (!validations || validations.length === 0) return null;
|
|
5610
|
+
return /* @__PURE__ */ jsx297("div", { className: "lib-xplat-field-message-wrap", children: validations.map((v, idx) => /* @__PURE__ */ jsxs191(
|
|
5611
|
+
"div",
|
|
5612
|
+
{
|
|
5613
|
+
className: clsx_default("lib-xplat-field-message", v.status),
|
|
5614
|
+
children: [
|
|
5615
|
+
/* @__PURE__ */ jsx297("div", { className: "icon", children: ICON[v.status] }),
|
|
5616
|
+
/* @__PURE__ */ jsx297("span", { children: v.message })
|
|
5617
|
+
]
|
|
5618
|
+
},
|
|
5619
|
+
`${v.message}_${idx}`
|
|
5620
|
+
)) });
|
|
5621
|
+
};
|
|
5622
|
+
FieldMessage.displayName = "FieldMessage";
|
|
5623
|
+
var FieldMessage_default = FieldMessage;
|
|
5624
|
+
var Field = (props) => {
|
|
5625
|
+
const { validations, children } = props;
|
|
5626
|
+
if (!validations || validations.length === 0) return /* @__PURE__ */ jsx297(Fragment, { children });
|
|
5627
|
+
return /* @__PURE__ */ jsxs191("div", { className: "lib-xplat-field", children: [
|
|
5628
|
+
children,
|
|
5629
|
+
/* @__PURE__ */ jsx297(FieldMessage, { validations })
|
|
5630
|
+
] });
|
|
5631
|
+
};
|
|
5632
|
+
Field.displayName = "Field";
|
|
5633
|
+
var hasError = (validations) => !!validations?.some((v) => v.status === "error");
|
|
5634
|
+
|
|
5635
|
+
// src/components/AutoResizeTextArea/AutoResizeTextArea.tsx
|
|
5636
|
+
import { jsx as jsx298 } from "react/jsx-runtime";
|
|
5599
5637
|
var MAX_HEIGHT = 400;
|
|
5600
5638
|
var AutoResizeTextArea = React2.forwardRef(
|
|
5601
5639
|
(props, ref) => {
|
|
5602
|
-
const { value, className, onChange, disabled, bare = false, ...textareaProps } = props;
|
|
5640
|
+
const { value, className, onChange, disabled, bare = false, validations, ...textareaProps } = props;
|
|
5603
5641
|
const localRef = React2.useRef(null);
|
|
5604
5642
|
const setRefs = (el) => {
|
|
5605
5643
|
localRef.current = el;
|
|
@@ -5627,9 +5665,10 @@ var AutoResizeTextArea = React2.forwardRef(
|
|
|
5627
5665
|
updateHeight();
|
|
5628
5666
|
}, [value]);
|
|
5629
5667
|
if (bare) {
|
|
5630
|
-
return /* @__PURE__ */
|
|
5668
|
+
return /* @__PURE__ */ jsx298(
|
|
5631
5669
|
"textarea",
|
|
5632
5670
|
{
|
|
5671
|
+
"aria-invalid": hasError(validations) || void 0,
|
|
5633
5672
|
...textareaProps,
|
|
5634
5673
|
ref: setRefs,
|
|
5635
5674
|
className,
|
|
@@ -5639,9 +5678,10 @@ var AutoResizeTextArea = React2.forwardRef(
|
|
|
5639
5678
|
}
|
|
5640
5679
|
);
|
|
5641
5680
|
}
|
|
5642
|
-
|
|
5681
|
+
const control = /* @__PURE__ */ jsx298("div", { className: clsx_default("lib-xplat-auto-resize-textarea-wrapper", className), children: /* @__PURE__ */ jsx298("div", { className: clsx_default("lib-xplat-auto-resize-textarea", disabled && "disabled"), children: /* @__PURE__ */ jsx298(
|
|
5643
5682
|
"textarea",
|
|
5644
5683
|
{
|
|
5684
|
+
"aria-invalid": hasError(validations) || void 0,
|
|
5645
5685
|
...textareaProps,
|
|
5646
5686
|
ref: setRefs,
|
|
5647
5687
|
disabled,
|
|
@@ -5649,13 +5689,14 @@ var AutoResizeTextArea = React2.forwardRef(
|
|
|
5649
5689
|
onChange: handleChange
|
|
5650
5690
|
}
|
|
5651
5691
|
) }) });
|
|
5692
|
+
return /* @__PURE__ */ jsx298(Field, { validations, children: control });
|
|
5652
5693
|
}
|
|
5653
5694
|
);
|
|
5654
5695
|
AutoResizeTextArea.displayName = "AutoResizeTextArea";
|
|
5655
5696
|
var AutoResizeTextArea_default = AutoResizeTextArea;
|
|
5656
5697
|
|
|
5657
5698
|
// src/components/Avatar/Avatar.tsx
|
|
5658
|
-
import { jsx as
|
|
5699
|
+
import { jsx as jsx299 } from "react/jsx-runtime";
|
|
5659
5700
|
var CATEGORICAL_COUNT = 8;
|
|
5660
5701
|
var getColorIndex = (name) => {
|
|
5661
5702
|
if (!name) return 1;
|
|
@@ -5672,36 +5713,36 @@ var Avatar = (props) => {
|
|
|
5672
5713
|
const fullInitials = name ? name.split(" ").map((s) => s[0]).join("").slice(0, 2).toUpperCase() : "";
|
|
5673
5714
|
const initials = size === "sm" ? fullInitials.slice(0, 1) : fullInitials;
|
|
5674
5715
|
const catIndex = getColorIndex(name || "");
|
|
5675
|
-
return /* @__PURE__ */
|
|
5716
|
+
return /* @__PURE__ */ jsx299("div", { className: clsx_default("lib-xplat-avatar", size), children: src ? /* @__PURE__ */ jsx299("img", { src, alt: alt || name || "avatar" }) : /* @__PURE__ */ jsx299("div", { className: clsx_default("fallback", `cat-${catIndex}`), children: initials || /* @__PURE__ */ jsx299("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx299("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" }) }) }) });
|
|
5676
5717
|
};
|
|
5677
5718
|
Avatar.displayName = "Avatar";
|
|
5678
5719
|
var Avatar_default = Avatar;
|
|
5679
5720
|
|
|
5680
5721
|
// src/components/Box/Box.tsx
|
|
5681
|
-
import { jsx as
|
|
5722
|
+
import { jsx as jsx300, jsxs as jsxs192 } from "react/jsx-runtime";
|
|
5682
5723
|
var Box = ({
|
|
5683
5724
|
children,
|
|
5684
5725
|
title,
|
|
5685
5726
|
variant = "outlined",
|
|
5686
5727
|
padding = "md"
|
|
5687
5728
|
}) => {
|
|
5688
|
-
return /* @__PURE__ */
|
|
5689
|
-
title && /* @__PURE__ */
|
|
5690
|
-
/* @__PURE__ */
|
|
5729
|
+
return /* @__PURE__ */ jsxs192("div", { className: clsx_default("lib-xplat-box", variant, `pad-${padding}`), children: [
|
|
5730
|
+
title && /* @__PURE__ */ jsx300("div", { className: "box-title", children: title }),
|
|
5731
|
+
/* @__PURE__ */ jsx300("div", { className: "box-content", children })
|
|
5691
5732
|
] });
|
|
5692
5733
|
};
|
|
5693
5734
|
Box.displayName = "Box";
|
|
5694
5735
|
var Box_default = Box;
|
|
5695
5736
|
|
|
5696
5737
|
// src/components/Breadcrumb/Breadcrumb.tsx
|
|
5697
|
-
import { jsx as
|
|
5738
|
+
import { jsx as jsx301, jsxs as jsxs193 } from "react/jsx-runtime";
|
|
5698
5739
|
var Breadcrumb = (props) => {
|
|
5699
5740
|
const { items, separator = "/" } = props;
|
|
5700
|
-
return /* @__PURE__ */
|
|
5741
|
+
return /* @__PURE__ */ jsx301("nav", { className: "lib-xplat-breadcrumb", "aria-label": "\uACBD\uB85C", children: /* @__PURE__ */ jsx301("ol", { children: items.map((item, index) => {
|
|
5701
5742
|
const isLast = index === items.length - 1;
|
|
5702
|
-
return /* @__PURE__ */
|
|
5703
|
-
isLast ? /* @__PURE__ */
|
|
5704
|
-
!isLast && /* @__PURE__ */
|
|
5743
|
+
return /* @__PURE__ */ jsxs193("li", { children: [
|
|
5744
|
+
isLast ? /* @__PURE__ */ jsx301("span", { className: "current", "aria-current": "page", children: item.label }) : item.href ? /* @__PURE__ */ jsx301("a", { href: item.href, className: "link", children: item.label }) : /* @__PURE__ */ jsx301("button", { className: "link", onClick: item.onClick, children: item.label }),
|
|
5745
|
+
!isLast && /* @__PURE__ */ jsx301("span", { className: "separator", children: separator })
|
|
5705
5746
|
] }, index);
|
|
5706
5747
|
}) }) });
|
|
5707
5748
|
};
|
|
@@ -5709,7 +5750,7 @@ Breadcrumb.displayName = "Breadcrumb";
|
|
|
5709
5750
|
var Breadcrumb_default = Breadcrumb;
|
|
5710
5751
|
|
|
5711
5752
|
// src/components/Button/Button.tsx
|
|
5712
|
-
import { jsx as
|
|
5753
|
+
import { jsx as jsx302 } from "react/jsx-runtime";
|
|
5713
5754
|
var Button = (props) => {
|
|
5714
5755
|
const {
|
|
5715
5756
|
children,
|
|
@@ -5718,7 +5759,7 @@ var Button = (props) => {
|
|
|
5718
5759
|
disabled,
|
|
5719
5760
|
...rest
|
|
5720
5761
|
} = props;
|
|
5721
|
-
return /* @__PURE__ */
|
|
5762
|
+
return /* @__PURE__ */ jsx302(
|
|
5722
5763
|
"button",
|
|
5723
5764
|
{
|
|
5724
5765
|
className: clsx_default("lib-xplat-button", type, size),
|
|
@@ -5835,7 +5876,7 @@ var MONTH_LABELS = {
|
|
|
5835
5876
|
};
|
|
5836
5877
|
|
|
5837
5878
|
// src/components/Calendar/Calendar.tsx
|
|
5838
|
-
import { Fragment, jsx as
|
|
5879
|
+
import { Fragment as Fragment2, jsx as jsx303, jsxs as jsxs194 } from "react/jsx-runtime";
|
|
5839
5880
|
var DayCell = React4.memo(
|
|
5840
5881
|
({
|
|
5841
5882
|
day,
|
|
@@ -5847,7 +5888,7 @@ var DayCell = React4.memo(
|
|
|
5847
5888
|
onEventClick
|
|
5848
5889
|
}) => {
|
|
5849
5890
|
if (renderDay) {
|
|
5850
|
-
return /* @__PURE__ */
|
|
5891
|
+
return /* @__PURE__ */ jsx303(
|
|
5851
5892
|
"div",
|
|
5852
5893
|
{
|
|
5853
5894
|
className: clsx_default(
|
|
@@ -5864,7 +5905,7 @@ var DayCell = React4.memo(
|
|
|
5864
5905
|
}
|
|
5865
5906
|
);
|
|
5866
5907
|
}
|
|
5867
|
-
return /* @__PURE__ */
|
|
5908
|
+
return /* @__PURE__ */ jsxs194(
|
|
5868
5909
|
"div",
|
|
5869
5910
|
{
|
|
5870
5911
|
className: clsx_default(
|
|
@@ -5880,9 +5921,9 @@ var DayCell = React4.memo(
|
|
|
5880
5921
|
if (!disabled && day.isCurrentMonth) onSelect?.(day.date);
|
|
5881
5922
|
},
|
|
5882
5923
|
children: [
|
|
5883
|
-
/* @__PURE__ */
|
|
5884
|
-
dayEvents.length > 0 && /* @__PURE__ */
|
|
5885
|
-
dayEvents.slice(0, 3).map((event, ei) => /* @__PURE__ */
|
|
5924
|
+
/* @__PURE__ */ jsx303("span", { className: "calendar-day-number", children: day.day }),
|
|
5925
|
+
dayEvents.length > 0 && /* @__PURE__ */ jsxs194("div", { className: "calendar-day-events", children: [
|
|
5926
|
+
dayEvents.slice(0, 3).map((event, ei) => /* @__PURE__ */ jsx303(
|
|
5886
5927
|
"span",
|
|
5887
5928
|
{
|
|
5888
5929
|
className: "calendar-event-dot",
|
|
@@ -5895,7 +5936,7 @@ var DayCell = React4.memo(
|
|
|
5895
5936
|
},
|
|
5896
5937
|
ei
|
|
5897
5938
|
)),
|
|
5898
|
-
dayEvents.length > 3 && /* @__PURE__ */
|
|
5939
|
+
dayEvents.length > 3 && /* @__PURE__ */ jsxs194("span", { className: "calendar-event-more", children: [
|
|
5899
5940
|
"+",
|
|
5900
5941
|
dayEvents.length - 3
|
|
5901
5942
|
] })
|
|
@@ -6016,21 +6057,21 @@ var Calendar = (props) => {
|
|
|
6016
6057
|
const weekdays = WEEKDAY_LABELS[locale];
|
|
6017
6058
|
const monthLabels = MONTH_LABELS[locale];
|
|
6018
6059
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
6019
|
-
return /* @__PURE__ */
|
|
6060
|
+
return /* @__PURE__ */ jsxs194(
|
|
6020
6061
|
"div",
|
|
6021
6062
|
{
|
|
6022
6063
|
className: "lib-xplat-calendar",
|
|
6023
6064
|
style: selectedColor ? { "--calendar-selected-color": `var(--${selectedColor})` } : void 0,
|
|
6024
6065
|
children: [
|
|
6025
|
-
/* @__PURE__ */
|
|
6026
|
-
/* @__PURE__ */
|
|
6027
|
-
/* @__PURE__ */
|
|
6028
|
-
/* @__PURE__ */
|
|
6029
|
-
showToday && /* @__PURE__ */
|
|
6066
|
+
/* @__PURE__ */ jsxs194("div", { className: "calendar-header", children: [
|
|
6067
|
+
/* @__PURE__ */ jsx303("button", { className: "calendar-nav", onClick: handlePrev, "aria-label": "\uC774\uC804", children: /* @__PURE__ */ jsx303(ChevronLeftIcon_default, {}) }),
|
|
6068
|
+
/* @__PURE__ */ jsx303("button", { className: "calendar-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
6069
|
+
/* @__PURE__ */ jsx303("button", { className: "calendar-nav", onClick: handleNext, "aria-label": "\uB2E4\uC74C", children: /* @__PURE__ */ jsx303(ChevronRightIcon_default, {}) }),
|
|
6070
|
+
showToday && /* @__PURE__ */ jsx303("button", { className: "calendar-today-btn", onClick: handleToday, children: locale === "ko" ? "\uC624\uB298" : "Today" })
|
|
6030
6071
|
] }),
|
|
6031
|
-
pickerMode === "years" && /* @__PURE__ */
|
|
6072
|
+
pickerMode === "years" && /* @__PURE__ */ jsx303("div", { className: "calendar-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
6032
6073
|
const y = yearRangeStart + i;
|
|
6033
|
-
return /* @__PURE__ */
|
|
6074
|
+
return /* @__PURE__ */ jsx303(
|
|
6034
6075
|
"button",
|
|
6035
6076
|
{
|
|
6036
6077
|
type: "button",
|
|
@@ -6041,7 +6082,7 @@ var Calendar = (props) => {
|
|
|
6041
6082
|
y
|
|
6042
6083
|
);
|
|
6043
6084
|
}) }),
|
|
6044
|
-
pickerMode === "months" && /* @__PURE__ */
|
|
6085
|
+
pickerMode === "months" && /* @__PURE__ */ jsx303("div", { className: "calendar-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx303(
|
|
6045
6086
|
"button",
|
|
6046
6087
|
{
|
|
6047
6088
|
type: "button",
|
|
@@ -6051,8 +6092,8 @@ var Calendar = (props) => {
|
|
|
6051
6092
|
},
|
|
6052
6093
|
i
|
|
6053
6094
|
)) }),
|
|
6054
|
-
pickerMode === "days" && /* @__PURE__ */
|
|
6055
|
-
/* @__PURE__ */
|
|
6095
|
+
pickerMode === "days" && /* @__PURE__ */ jsxs194(Fragment2, { children: [
|
|
6096
|
+
/* @__PURE__ */ jsx303("div", { className: "calendar-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx303(
|
|
6056
6097
|
"div",
|
|
6057
6098
|
{
|
|
6058
6099
|
className: clsx_default(
|
|
@@ -6064,12 +6105,12 @@ var Calendar = (props) => {
|
|
|
6064
6105
|
},
|
|
6065
6106
|
label
|
|
6066
6107
|
)) }),
|
|
6067
|
-
/* @__PURE__ */
|
|
6108
|
+
/* @__PURE__ */ jsx303("div", { className: "calendar-grid", children: days.map((day, idx) => {
|
|
6068
6109
|
const dayEvents = getEventsForDay(day.date);
|
|
6069
6110
|
const t = day.date.getTime();
|
|
6070
6111
|
const disabled = t < minTime || t > maxTime;
|
|
6071
6112
|
const isSelected = selectedDate ? isSameDay(day.date, selectedDate) : false;
|
|
6072
|
-
return /* @__PURE__ */
|
|
6113
|
+
return /* @__PURE__ */ jsx303(
|
|
6073
6114
|
DayCell,
|
|
6074
6115
|
{
|
|
6075
6116
|
day,
|
|
@@ -6095,10 +6136,10 @@ var Calendar_default = Calendar;
|
|
|
6095
6136
|
import React5 from "react";
|
|
6096
6137
|
|
|
6097
6138
|
// src/components/CardTab/CardTabPanel.tsx
|
|
6098
|
-
import { jsx as
|
|
6139
|
+
import { jsx as jsx304 } from "react/jsx-runtime";
|
|
6099
6140
|
var CardTabPanel = (props) => {
|
|
6100
6141
|
const { children, columns = 3 } = props;
|
|
6101
|
-
return /* @__PURE__ */
|
|
6142
|
+
return /* @__PURE__ */ jsx304(
|
|
6102
6143
|
"div",
|
|
6103
6144
|
{
|
|
6104
6145
|
className: "card-tab-panel",
|
|
@@ -6111,7 +6152,7 @@ CardTabPanel.displayName = "CardTab.Panel";
|
|
|
6111
6152
|
var CardTabPanel_default = CardTabPanel;
|
|
6112
6153
|
|
|
6113
6154
|
// src/components/CardTab/CardTab.tsx
|
|
6114
|
-
import { jsx as
|
|
6155
|
+
import { jsx as jsx305, jsxs as jsxs195 } from "react/jsx-runtime";
|
|
6115
6156
|
var CardTabRoot = (props) => {
|
|
6116
6157
|
const {
|
|
6117
6158
|
tabs,
|
|
@@ -6135,10 +6176,10 @@ var CardTabRoot = (props) => {
|
|
|
6135
6176
|
const activePanel = panels.find(
|
|
6136
6177
|
(panel) => panel.props.value === activeValue
|
|
6137
6178
|
);
|
|
6138
|
-
return /* @__PURE__ */
|
|
6139
|
-
/* @__PURE__ */
|
|
6179
|
+
return /* @__PURE__ */ jsxs195("div", { className: clsx_default("lib-xplat-card-tab", size), children: [
|
|
6180
|
+
/* @__PURE__ */ jsx305("div", { className: "card-tab-bar", children: tabs.map((tab) => {
|
|
6140
6181
|
const isActive2 = tab.value === activeValue;
|
|
6141
|
-
return /* @__PURE__ */
|
|
6182
|
+
return /* @__PURE__ */ jsx305(
|
|
6142
6183
|
"button",
|
|
6143
6184
|
{
|
|
6144
6185
|
className: clsx_default("card-tab-trigger", isActive2 && "active"),
|
|
@@ -6150,7 +6191,7 @@ var CardTabRoot = (props) => {
|
|
|
6150
6191
|
tab.value
|
|
6151
6192
|
);
|
|
6152
6193
|
}) }),
|
|
6153
|
-
/* @__PURE__ */
|
|
6194
|
+
/* @__PURE__ */ jsx305("div", { className: "card-tab-body", children: activePanel })
|
|
6154
6195
|
] });
|
|
6155
6196
|
};
|
|
6156
6197
|
CardTabRoot.displayName = "CardTab";
|
|
@@ -6161,7 +6202,7 @@ var CardTab_default = CardTab;
|
|
|
6161
6202
|
|
|
6162
6203
|
// src/components/Chart/Chart.tsx
|
|
6163
6204
|
import React6 from "react";
|
|
6164
|
-
import { Fragment as
|
|
6205
|
+
import { Fragment as Fragment3, jsx as jsx306, jsxs as jsxs196 } from "react/jsx-runtime";
|
|
6165
6206
|
var CATEGORICAL_COUNT2 = 8;
|
|
6166
6207
|
var LINE_BAR_PALETTES = Array.from({ length: CATEGORICAL_COUNT2 }, (_, i) => {
|
|
6167
6208
|
const n = i + 1;
|
|
@@ -6304,12 +6345,12 @@ var formatTick = (value, maxVal) => {
|
|
|
6304
6345
|
const fixed = value.toFixed(decimals);
|
|
6305
6346
|
return decimals === 0 ? Number(fixed).toLocaleString("en-US") : fixed;
|
|
6306
6347
|
};
|
|
6307
|
-
var GridLines = React6.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */
|
|
6348
|
+
var GridLines = React6.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ jsx306(Fragment3, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
|
|
6308
6349
|
const y = PADDING.top + (1 - ratio) * chartH;
|
|
6309
6350
|
const val = formatTick(maxVal * ratio, maxVal);
|
|
6310
|
-
return /* @__PURE__ */
|
|
6311
|
-
/* @__PURE__ */
|
|
6312
|
-
/* @__PURE__ */
|
|
6351
|
+
return /* @__PURE__ */ jsxs196("g", { children: [
|
|
6352
|
+
/* @__PURE__ */ jsx306("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
6353
|
+
/* @__PURE__ */ jsx306("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
6313
6354
|
] }, ratio);
|
|
6314
6355
|
}) }));
|
|
6315
6356
|
GridLines.displayName = "GridLines";
|
|
@@ -6321,10 +6362,10 @@ var getLabelStep = (count, chartW) => {
|
|
|
6321
6362
|
};
|
|
6322
6363
|
var AxisLabels = React6.memo(({ labels, count, chartW, height }) => {
|
|
6323
6364
|
const step = getLabelStep(count, chartW);
|
|
6324
|
-
return /* @__PURE__ */
|
|
6365
|
+
return /* @__PURE__ */ jsx306(Fragment3, { children: labels.map((label, i) => {
|
|
6325
6366
|
if (i % step !== 0) return null;
|
|
6326
6367
|
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
6327
|
-
return /* @__PURE__ */
|
|
6368
|
+
return /* @__PURE__ */ jsx306("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6328
6369
|
}) });
|
|
6329
6370
|
});
|
|
6330
6371
|
AxisLabels.displayName = "AxisLabels";
|
|
@@ -6400,7 +6441,7 @@ var LineChart = React6.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6400
6441
|
}, [animate, width]);
|
|
6401
6442
|
const activeX = activeIndex !== null ? seriesPoints[0]?.[activeIndex]?.x ?? null : null;
|
|
6402
6443
|
const lineClipId = "line-area-clip";
|
|
6403
|
-
return /* @__PURE__ */
|
|
6444
|
+
return /* @__PURE__ */ jsxs196(
|
|
6404
6445
|
"svg",
|
|
6405
6446
|
{
|
|
6406
6447
|
viewBox: `0 0 ${width} ${height}`,
|
|
@@ -6418,9 +6459,9 @@ var LineChart = React6.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6418
6459
|
onLeave();
|
|
6419
6460
|
},
|
|
6420
6461
|
children: [
|
|
6421
|
-
animate && /* @__PURE__ */
|
|
6422
|
-
/* @__PURE__ */
|
|
6423
|
-
/* @__PURE__ */
|
|
6462
|
+
animate && /* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsx306("clipPath", { id: lineClipId, children: /* @__PURE__ */ jsx306("rect", { ref: clipRef, x: "0", y: "0", width: animate ? 0 : width, height }) }) }),
|
|
6463
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
6464
|
+
/* @__PURE__ */ jsx306(AxisLabels, { labels, count, chartW, height }),
|
|
6424
6465
|
entries.map(([key], di) => {
|
|
6425
6466
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6426
6467
|
const color = palette[2];
|
|
@@ -6429,16 +6470,16 @@ var LineChart = React6.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6429
6470
|
const gradientId = `line-gradient-${di}`;
|
|
6430
6471
|
const polyPoints = points.map((p) => `${p.x},${p.y}`).join(" ");
|
|
6431
6472
|
const areaD = `M ${points[0].x},${points[0].y} ${points.map((p) => `L ${p.x},${p.y}`).join(" ")} L ${points[points.length - 1].x},${PADDING.top + chartH} L ${points[0].x},${PADDING.top + chartH} Z`;
|
|
6432
|
-
return /* @__PURE__ */
|
|
6433
|
-
/* @__PURE__ */
|
|
6434
|
-
/* @__PURE__ */
|
|
6435
|
-
/* @__PURE__ */
|
|
6473
|
+
return /* @__PURE__ */ jsxs196("g", { children: [
|
|
6474
|
+
/* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsxs196("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
6475
|
+
/* @__PURE__ */ jsx306("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.2" }),
|
|
6476
|
+
/* @__PURE__ */ jsx306("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0" })
|
|
6436
6477
|
] }) }),
|
|
6437
|
-
/* @__PURE__ */
|
|
6438
|
-
/* @__PURE__ */
|
|
6439
|
-
/* @__PURE__ */
|
|
6478
|
+
/* @__PURE__ */ jsxs196("g", { clipPath: animate ? `url(#${lineClipId})` : void 0, children: [
|
|
6479
|
+
/* @__PURE__ */ jsx306("path", { d: areaD, fill: `url(#${gradientId})` }),
|
|
6480
|
+
/* @__PURE__ */ jsx306("polyline", { points: polyPoints, fill: "none", stroke: color, strokeWidth: "2" })
|
|
6440
6481
|
] }),
|
|
6441
|
-
activeIndex !== null && points[activeIndex] && /* @__PURE__ */
|
|
6482
|
+
activeIndex !== null && points[activeIndex] && /* @__PURE__ */ jsx306(
|
|
6442
6483
|
"circle",
|
|
6443
6484
|
{
|
|
6444
6485
|
cx: points[activeIndex].x,
|
|
@@ -6450,7 +6491,7 @@ var LineChart = React6.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6450
6491
|
)
|
|
6451
6492
|
] }, di);
|
|
6452
6493
|
}),
|
|
6453
|
-
activeX !== null && /* @__PURE__ */
|
|
6494
|
+
activeX !== null && /* @__PURE__ */ jsx306(
|
|
6454
6495
|
"line",
|
|
6455
6496
|
{
|
|
6456
6497
|
x1: activeX,
|
|
@@ -6460,7 +6501,7 @@ var LineChart = React6.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6460
6501
|
className: "chart-crosshair"
|
|
6461
6502
|
}
|
|
6462
6503
|
),
|
|
6463
|
-
/* @__PURE__ */
|
|
6504
|
+
/* @__PURE__ */ jsx306(
|
|
6464
6505
|
"rect",
|
|
6465
6506
|
{
|
|
6466
6507
|
x: PADDING.left,
|
|
@@ -6509,7 +6550,7 @@ var CurveChart = React6.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6509
6550
|
}, [animate, width]);
|
|
6510
6551
|
const activeX = activeIndex !== null ? seriesPoints[0]?.[activeIndex]?.x ?? null : null;
|
|
6511
6552
|
const curveClipId = "curve-area-clip";
|
|
6512
|
-
return /* @__PURE__ */
|
|
6553
|
+
return /* @__PURE__ */ jsxs196(
|
|
6513
6554
|
"svg",
|
|
6514
6555
|
{
|
|
6515
6556
|
viewBox: `0 0 ${width} ${height}`,
|
|
@@ -6528,9 +6569,9 @@ var CurveChart = React6.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6528
6569
|
onLeave();
|
|
6529
6570
|
},
|
|
6530
6571
|
children: [
|
|
6531
|
-
animate && /* @__PURE__ */
|
|
6532
|
-
/* @__PURE__ */
|
|
6533
|
-
/* @__PURE__ */
|
|
6572
|
+
animate && /* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsx306("clipPath", { id: curveClipId, children: /* @__PURE__ */ jsx306("rect", { ref: curveClipRef, x: "0", y: "0", width: animate ? 0 : width, height }) }) }),
|
|
6573
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
6574
|
+
/* @__PURE__ */ jsx306(AxisLabels, { labels, count, chartW, height }),
|
|
6534
6575
|
entries.map(([key], di) => {
|
|
6535
6576
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6536
6577
|
const color = palette[2];
|
|
@@ -6539,16 +6580,16 @@ var CurveChart = React6.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6539
6580
|
const gradientId = `curve-gradient-${di}`;
|
|
6540
6581
|
const linePath = toSmoothPath(points);
|
|
6541
6582
|
const areaPath = linePath + ` L ${points[points.length - 1].x} ${PADDING.top + chartH} L ${points[0].x} ${PADDING.top + chartH} Z`;
|
|
6542
|
-
return /* @__PURE__ */
|
|
6543
|
-
/* @__PURE__ */
|
|
6544
|
-
/* @__PURE__ */
|
|
6545
|
-
/* @__PURE__ */
|
|
6583
|
+
return /* @__PURE__ */ jsxs196("g", { children: [
|
|
6584
|
+
/* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsxs196("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
6585
|
+
/* @__PURE__ */ jsx306("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.4" }),
|
|
6586
|
+
/* @__PURE__ */ jsx306("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0.02" })
|
|
6546
6587
|
] }) }),
|
|
6547
|
-
/* @__PURE__ */
|
|
6548
|
-
/* @__PURE__ */
|
|
6549
|
-
/* @__PURE__ */
|
|
6588
|
+
/* @__PURE__ */ jsxs196("g", { clipPath: animate ? `url(#${curveClipId})` : void 0, children: [
|
|
6589
|
+
/* @__PURE__ */ jsx306("path", { d: areaPath, fill: `url(#${gradientId})` }),
|
|
6590
|
+
/* @__PURE__ */ jsx306("path", { d: linePath, fill: "none", stroke: color, strokeWidth: "2" })
|
|
6550
6591
|
] }),
|
|
6551
|
-
activeIndex !== null && points[activeIndex] && /* @__PURE__ */
|
|
6592
|
+
activeIndex !== null && points[activeIndex] && /* @__PURE__ */ jsx306(
|
|
6552
6593
|
"circle",
|
|
6553
6594
|
{
|
|
6554
6595
|
cx: points[activeIndex].x,
|
|
@@ -6560,7 +6601,7 @@ var CurveChart = React6.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6560
6601
|
)
|
|
6561
6602
|
] }, di);
|
|
6562
6603
|
}),
|
|
6563
|
-
activeX !== null && /* @__PURE__ */
|
|
6604
|
+
activeX !== null && /* @__PURE__ */ jsx306(
|
|
6564
6605
|
"line",
|
|
6565
6606
|
{
|
|
6566
6607
|
x1: activeX,
|
|
@@ -6570,7 +6611,7 @@ var CurveChart = React6.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6570
6611
|
className: "chart-crosshair"
|
|
6571
6612
|
}
|
|
6572
6613
|
),
|
|
6573
|
-
/* @__PURE__ */
|
|
6614
|
+
/* @__PURE__ */ jsx306(
|
|
6574
6615
|
"rect",
|
|
6575
6616
|
{
|
|
6576
6617
|
x: PADDING.left,
|
|
@@ -6613,11 +6654,11 @@ var BarChart = React6.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
6613
6654
|
[entries, maxVal, chartH, groupW, barW, barGap, groupCount]
|
|
6614
6655
|
);
|
|
6615
6656
|
const barLabelStep = getLabelStep(count, chartW);
|
|
6616
|
-
return /* @__PURE__ */
|
|
6617
|
-
/* @__PURE__ */
|
|
6657
|
+
return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6658
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
6618
6659
|
labels.map((label, i) => {
|
|
6619
6660
|
if (i % barLabelStep !== 0) return null;
|
|
6620
|
-
return /* @__PURE__ */
|
|
6661
|
+
return /* @__PURE__ */ jsx306("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6621
6662
|
}),
|
|
6622
6663
|
entries.map(([key], di) => {
|
|
6623
6664
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
@@ -6626,7 +6667,7 @@ var BarChart = React6.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
6626
6667
|
const r2 = Math.min(4, b.w / 2);
|
|
6627
6668
|
const d = b.h <= r2 ? `M ${b.x} ${b.y + b.h} V ${b.y} H ${b.x + b.w} V ${b.y + b.h} Z` : `M ${b.x} ${b.y + b.h} V ${b.y + r2} Q ${b.x} ${b.y} ${b.x + r2} ${b.y} H ${b.x + b.w - r2} Q ${b.x + b.w} ${b.y} ${b.x + b.w} ${b.y + r2} V ${b.y + b.h} Z`;
|
|
6628
6669
|
const delay = 100 + i * 80;
|
|
6629
|
-
return /* @__PURE__ */
|
|
6670
|
+
return /* @__PURE__ */ jsx306(
|
|
6630
6671
|
"path",
|
|
6631
6672
|
{
|
|
6632
6673
|
d,
|
|
@@ -6706,8 +6747,8 @@ var PieDonutChart = React6.memo(
|
|
|
6706
6747
|
});
|
|
6707
6748
|
}, [values, total, cx, cy, r2, innerR, labels]);
|
|
6708
6749
|
const maskId = `pie-mask-${isDoughnut ? "d" : "p"}`;
|
|
6709
|
-
return /* @__PURE__ */
|
|
6710
|
-
animate && /* @__PURE__ */
|
|
6750
|
+
return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${size} ${size}`, className: "chart-svg chart-pie", children: [
|
|
6751
|
+
animate && /* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsx306("mask", { id: maskId, children: /* @__PURE__ */ jsx306(
|
|
6711
6752
|
"circle",
|
|
6712
6753
|
{
|
|
6713
6754
|
ref: maskRef,
|
|
@@ -6720,7 +6761,7 @@ var PieDonutChart = React6.memo(
|
|
|
6720
6761
|
transform: `rotate(-90 ${cx} ${cy})`
|
|
6721
6762
|
}
|
|
6722
6763
|
) }) }),
|
|
6723
|
-
/* @__PURE__ */
|
|
6764
|
+
/* @__PURE__ */ jsx306("g", { mask: animate ? `url(#${maskId})` : void 0, children: sliceData.map((s, i) => /* @__PURE__ */ jsx306("g", { children: /* @__PURE__ */ jsx306(
|
|
6724
6765
|
"path",
|
|
6725
6766
|
{
|
|
6726
6767
|
d: s.d,
|
|
@@ -6755,15 +6796,15 @@ var ChartTooltip = ({ x, y, containerWidth, containerHeight, tooltipType, childr
|
|
|
6755
6796
|
const sepIdx = content.indexOf(" \u2014 ");
|
|
6756
6797
|
const title = sepIdx >= 0 ? content.slice(0, sepIdx) : content;
|
|
6757
6798
|
const desc = sepIdx >= 0 ? content.slice(sepIdx + 3) : "";
|
|
6758
|
-
return /* @__PURE__ */
|
|
6799
|
+
return /* @__PURE__ */ jsxs196(
|
|
6759
6800
|
"div",
|
|
6760
6801
|
{
|
|
6761
6802
|
ref,
|
|
6762
6803
|
className: `lib-xplat-tooltip ${tooltipType} chart-tooltip-pos`,
|
|
6763
6804
|
style: { left: pos.left, top: pos.top },
|
|
6764
6805
|
children: [
|
|
6765
|
-
title && /* @__PURE__ */
|
|
6766
|
-
desc && /* @__PURE__ */
|
|
6806
|
+
title && /* @__PURE__ */ jsx306("div", { className: "tooltip-title", children: title }),
|
|
6807
|
+
desc && /* @__PURE__ */ jsx306("div", { className: "tooltip-desc", children: desc })
|
|
6767
6808
|
]
|
|
6768
6809
|
}
|
|
6769
6810
|
);
|
|
@@ -6775,14 +6816,14 @@ var ChartLegend = ({ data, labels, type }) => {
|
|
|
6775
6816
|
const total = values.reduce((a, b) => a + b, 0) || 1;
|
|
6776
6817
|
const firstKey = entries[0]?.[0] ?? "";
|
|
6777
6818
|
const colorOffset = hashString(firstKey);
|
|
6778
|
-
return /* @__PURE__ */
|
|
6819
|
+
return /* @__PURE__ */ jsx306("div", { className: "chart-legend", children: values.map((v, i) => {
|
|
6779
6820
|
const pct = Math.round(v / total * 100);
|
|
6780
6821
|
const color = PIE_COLORS[(i + colorOffset) % PIE_COLORS.length];
|
|
6781
|
-
return /* @__PURE__ */
|
|
6782
|
-
/* @__PURE__ */
|
|
6783
|
-
/* @__PURE__ */
|
|
6784
|
-
/* @__PURE__ */
|
|
6785
|
-
/* @__PURE__ */
|
|
6822
|
+
return /* @__PURE__ */ jsxs196("div", { className: "chart-legend-item", children: [
|
|
6823
|
+
/* @__PURE__ */ jsx306("span", { className: "chart-legend-dot", style: { backgroundColor: color } }),
|
|
6824
|
+
/* @__PURE__ */ jsxs196("div", { className: "chart-legend-text", children: [
|
|
6825
|
+
/* @__PURE__ */ jsx306("span", { className: "chart-legend-label", children: labels[i] || `${i + 1}` }),
|
|
6826
|
+
/* @__PURE__ */ jsxs196("span", { className: "chart-legend-value", children: [
|
|
6786
6827
|
v.toLocaleString(),
|
|
6787
6828
|
"(",
|
|
6788
6829
|
pct,
|
|
@@ -6792,22 +6833,23 @@ var ChartLegend = ({ data, labels, type }) => {
|
|
|
6792
6833
|
] }, i);
|
|
6793
6834
|
}) });
|
|
6794
6835
|
}
|
|
6795
|
-
return /* @__PURE__ */
|
|
6836
|
+
return /* @__PURE__ */ jsx306("div", { className: "chart-legend", children: entries.map(([key], di) => {
|
|
6796
6837
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6797
6838
|
const color = palette[2];
|
|
6798
6839
|
const values = entries[di][1];
|
|
6799
6840
|
const sum = values.reduce((a, b) => a + b, 0);
|
|
6800
|
-
return /* @__PURE__ */
|
|
6801
|
-
/* @__PURE__ */
|
|
6802
|
-
/* @__PURE__ */
|
|
6803
|
-
/* @__PURE__ */
|
|
6804
|
-
/* @__PURE__ */
|
|
6841
|
+
return /* @__PURE__ */ jsxs196("div", { className: "chart-legend-item", children: [
|
|
6842
|
+
/* @__PURE__ */ jsx306("span", { className: "chart-legend-dot", style: { backgroundColor: color } }),
|
|
6843
|
+
/* @__PURE__ */ jsxs196("div", { className: "chart-legend-text", children: [
|
|
6844
|
+
/* @__PURE__ */ jsx306("span", { className: "chart-legend-label", children: key }),
|
|
6845
|
+
/* @__PURE__ */ jsx306("span", { className: "chart-legend-value", children: sum.toLocaleString() })
|
|
6805
6846
|
] })
|
|
6806
6847
|
] }, di);
|
|
6807
6848
|
}) });
|
|
6808
6849
|
};
|
|
6809
6850
|
var Chart = React6.memo((props) => {
|
|
6810
|
-
const { type, data, labels, tooltip: showTooltip = true, tooltipType = "light" } = props;
|
|
6851
|
+
const { variant, type, data, labels, tooltip: showTooltip = true, tooltipType = "light" } = props;
|
|
6852
|
+
const shape = variant ?? type ?? "line";
|
|
6811
6853
|
const { tooltip, show, hide, move, containerRef } = useChartTooltip(showTooltip);
|
|
6812
6854
|
const { width, height } = useChartSize(containerRef);
|
|
6813
6855
|
const stableData = React6.useMemo(() => data, [JSON.stringify(data)]);
|
|
@@ -6815,14 +6857,14 @@ var Chart = React6.memo((props) => {
|
|
|
6815
6857
|
const dataKey = React6.useMemo(() => JSON.stringify(labels), [labels]);
|
|
6816
6858
|
const animate = useChartAnimation(containerRef, dataKey);
|
|
6817
6859
|
const ready = width > 0 && height > 0;
|
|
6818
|
-
return /* @__PURE__ */
|
|
6819
|
-
ready &&
|
|
6820
|
-
ready &&
|
|
6821
|
-
ready &&
|
|
6822
|
-
ready &&
|
|
6823
|
-
ready &&
|
|
6824
|
-
ready && (type === "pie" || type === "doughnut") && /* @__PURE__ */
|
|
6825
|
-
tooltip.visible && tooltip.content && /* @__PURE__ */
|
|
6860
|
+
return /* @__PURE__ */ jsxs196("div", { className: "lib-xplat-chart", ref: containerRef, children: [
|
|
6861
|
+
ready && shape === "line" && /* @__PURE__ */ jsx306(LineChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
6862
|
+
ready && shape === "curve" && /* @__PURE__ */ jsx306(CurveChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
6863
|
+
ready && shape === "bar" && /* @__PURE__ */ jsx306(BarChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
6864
|
+
ready && shape === "pie" && /* @__PURE__ */ jsx306(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
6865
|
+
ready && shape === "doughnut" && /* @__PURE__ */ jsx306(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, isDoughnut: true, onHover: show, onMove: move, onLeave: hide }),
|
|
6866
|
+
ready && (type === "pie" || type === "doughnut") && /* @__PURE__ */ jsx306(ChartLegend, { data: stableData, labels: stableLabels, type }),
|
|
6867
|
+
tooltip.visible && tooltip.content && /* @__PURE__ */ jsx306(ChartTooltip, { x: tooltip.x, y: tooltip.y, containerWidth: width, containerHeight: height, tooltipType, children: tooltip.content })
|
|
6826
6868
|
] });
|
|
6827
6869
|
});
|
|
6828
6870
|
Chart.displayName = "Chart";
|
|
@@ -6832,7 +6874,7 @@ var Chart_default = Chart;
|
|
|
6832
6874
|
import React7 from "react";
|
|
6833
6875
|
|
|
6834
6876
|
// src/components/IconButton/IconButton.tsx
|
|
6835
|
-
import { jsx as
|
|
6877
|
+
import { jsx as jsx307 } from "react/jsx-runtime";
|
|
6836
6878
|
var IconButton = (props) => {
|
|
6837
6879
|
const {
|
|
6838
6880
|
icon,
|
|
@@ -6841,7 +6883,7 @@ var IconButton = (props) => {
|
|
|
6841
6883
|
disabled,
|
|
6842
6884
|
...rest
|
|
6843
6885
|
} = props;
|
|
6844
|
-
return /* @__PURE__ */
|
|
6886
|
+
return /* @__PURE__ */ jsx307(
|
|
6845
6887
|
"button",
|
|
6846
6888
|
{
|
|
6847
6889
|
className: clsx_default("lib-xplat-icon-button", type, size),
|
|
@@ -6855,7 +6897,7 @@ IconButton.displayName = "IconButton";
|
|
|
6855
6897
|
var IconButton_default = IconButton;
|
|
6856
6898
|
|
|
6857
6899
|
// src/components/ChatInput/ChatInput.tsx
|
|
6858
|
-
import { jsx as
|
|
6900
|
+
import { jsx as jsx308, jsxs as jsxs197 } from "react/jsx-runtime";
|
|
6859
6901
|
var ChatInput = React7.forwardRef(
|
|
6860
6902
|
(props, ref) => {
|
|
6861
6903
|
const {
|
|
@@ -6864,7 +6906,8 @@ var ChatInput = React7.forwardRef(
|
|
|
6864
6906
|
disabled = false,
|
|
6865
6907
|
buttonType = "primary",
|
|
6866
6908
|
onSubmit,
|
|
6867
|
-
onChange
|
|
6909
|
+
onChange,
|
|
6910
|
+
validations
|
|
6868
6911
|
} = props;
|
|
6869
6912
|
const isControlled = valueProp !== void 0;
|
|
6870
6913
|
const [internalValue, setInternalValue] = React7.useState("");
|
|
@@ -6886,8 +6929,8 @@ var ChatInput = React7.forwardRef(
|
|
|
6886
6929
|
handleSubmit();
|
|
6887
6930
|
}
|
|
6888
6931
|
};
|
|
6889
|
-
|
|
6890
|
-
/* @__PURE__ */
|
|
6932
|
+
const control = /* @__PURE__ */ jsxs197("div", { className: clsx_default("lib-xplat-chat-input", disabled && "disabled"), children: [
|
|
6933
|
+
/* @__PURE__ */ jsx308(
|
|
6891
6934
|
AutoResizeTextArea_default,
|
|
6892
6935
|
{
|
|
6893
6936
|
ref,
|
|
@@ -6898,13 +6941,14 @@ var ChatInput = React7.forwardRef(
|
|
|
6898
6941
|
disabled,
|
|
6899
6942
|
rows: 1,
|
|
6900
6943
|
onChange: handleChange,
|
|
6944
|
+
"aria-invalid": hasError(validations) || void 0,
|
|
6901
6945
|
onKeyDown: handleKeyDown
|
|
6902
6946
|
}
|
|
6903
6947
|
),
|
|
6904
|
-
/* @__PURE__ */
|
|
6948
|
+
/* @__PURE__ */ jsx308(
|
|
6905
6949
|
IconButton_default,
|
|
6906
6950
|
{
|
|
6907
|
-
icon: /* @__PURE__ */
|
|
6951
|
+
icon: /* @__PURE__ */ jsx308(MessageSquareIcon_default, {}),
|
|
6908
6952
|
type: buttonType,
|
|
6909
6953
|
size: "sm",
|
|
6910
6954
|
disabled: !hasText || disabled,
|
|
@@ -6913,6 +6957,7 @@ var ChatInput = React7.forwardRef(
|
|
|
6913
6957
|
}
|
|
6914
6958
|
)
|
|
6915
6959
|
] });
|
|
6960
|
+
return /* @__PURE__ */ jsx308(Field, { validations, children: control });
|
|
6916
6961
|
}
|
|
6917
6962
|
);
|
|
6918
6963
|
ChatInput.displayName = "ChatInput";
|
|
@@ -6937,8 +6982,11 @@ import { semantic } from "@x-plat/tokens-core";
|
|
|
6937
6982
|
// src/tokens/index.ts
|
|
6938
6983
|
import { cssVar } from "@x-plat/tokens-core";
|
|
6939
6984
|
|
|
6985
|
+
// src/tokens/interface/status.ts
|
|
6986
|
+
var normalizeStatus = (value) => value === "brand" ? "primary" : value;
|
|
6987
|
+
|
|
6940
6988
|
// src/components/CheckBox/CheckBox.tsx
|
|
6941
|
-
import { jsx as
|
|
6989
|
+
import { jsx as jsx309, jsxs as jsxs198 } from "react/jsx-runtime";
|
|
6942
6990
|
var CheckBox = (props) => {
|
|
6943
6991
|
const {
|
|
6944
6992
|
checked,
|
|
@@ -6947,9 +6995,11 @@ var CheckBox = (props) => {
|
|
|
6947
6995
|
onChange,
|
|
6948
6996
|
disabled,
|
|
6949
6997
|
size = "md",
|
|
6950
|
-
type = "
|
|
6998
|
+
type = "primary",
|
|
6999
|
+
validations,
|
|
6951
7000
|
...rest
|
|
6952
7001
|
} = props;
|
|
7002
|
+
const statusType = normalizeStatus(type);
|
|
6953
7003
|
const handleChange = (e) => {
|
|
6954
7004
|
if (onChange) onChange(e);
|
|
6955
7005
|
};
|
|
@@ -6957,33 +7007,35 @@ var CheckBox = (props) => {
|
|
|
6957
7007
|
const checkedClasses = `checked`;
|
|
6958
7008
|
const disabledClasses = "disabled";
|
|
6959
7009
|
const boxClasses = disabled ? disabledClasses : checked ? checkedClasses : uncheckedClasses;
|
|
6960
|
-
|
|
6961
|
-
/* @__PURE__ */
|
|
7010
|
+
const control = /* @__PURE__ */ jsxs198("label", { className: clsx_default("lib-xplat-checkbox", size, statusType, className), children: [
|
|
7011
|
+
/* @__PURE__ */ jsx309(
|
|
6962
7012
|
"input",
|
|
6963
7013
|
{
|
|
6964
7014
|
type: "checkbox",
|
|
6965
7015
|
checked,
|
|
6966
7016
|
onChange: handleChange,
|
|
6967
7017
|
disabled,
|
|
7018
|
+
"aria-invalid": hasError(validations) || void 0,
|
|
6968
7019
|
...rest
|
|
6969
7020
|
}
|
|
6970
7021
|
),
|
|
6971
|
-
/* @__PURE__ */
|
|
6972
|
-
label && /* @__PURE__ */
|
|
7022
|
+
/* @__PURE__ */ jsx309("span", { className: clsx_default("checkbox", boxClasses), children: /* @__PURE__ */ jsx309("span", { className: clsx_default("check-icon", { visible: checked }), children: /* @__PURE__ */ jsx309(CheckIcon_default, {}) }) }),
|
|
7023
|
+
label && /* @__PURE__ */ jsx309("span", { className: "label", children: label })
|
|
6973
7024
|
] });
|
|
7025
|
+
return /* @__PURE__ */ jsx309(Field, { validations, children: control });
|
|
6974
7026
|
};
|
|
6975
7027
|
CheckBox.displayName = "CheckBox";
|
|
6976
7028
|
var CheckBox_default = CheckBox;
|
|
6977
7029
|
|
|
6978
7030
|
// src/components/Chip/Chip.tsx
|
|
6979
|
-
import { jsx as
|
|
7031
|
+
import { jsx as jsx310 } from "react/jsx-runtime";
|
|
6980
7032
|
var Chip = (props) => {
|
|
6981
7033
|
const {
|
|
6982
7034
|
children,
|
|
6983
7035
|
type = "primary",
|
|
6984
7036
|
size = "md"
|
|
6985
7037
|
} = props;
|
|
6986
|
-
return /* @__PURE__ */
|
|
7038
|
+
return /* @__PURE__ */ jsx310("div", { className: clsx_default("lib-xplat-chip", type, size), children });
|
|
6987
7039
|
};
|
|
6988
7040
|
Chip.displayName = "Chip";
|
|
6989
7041
|
var Chip_default = Chip;
|
|
@@ -6994,23 +7046,6 @@ import React12 from "react";
|
|
|
6994
7046
|
// src/components/Input/Input.tsx
|
|
6995
7047
|
import React8 from "react";
|
|
6996
7048
|
|
|
6997
|
-
// src/components/Input/InputValidations.tsx
|
|
6998
|
-
import { jsx as jsx310, jsxs as jsxs198 } from "react/jsx-runtime";
|
|
6999
|
-
var InputValidations = (props) => {
|
|
7000
|
-
const { message, status = "default" } = props;
|
|
7001
|
-
return /* @__PURE__ */ jsxs198("div", { className: clsx_default("lib-xplat-input-validation", status), children: [
|
|
7002
|
-
/* @__PURE__ */ jsxs198("div", { className: "icon", children: [
|
|
7003
|
-
status === "default" && /* @__PURE__ */ jsx310(InfoIcon_default, {}),
|
|
7004
|
-
status === "success" && /* @__PURE__ */ jsx310(SuccessIcon_default, {}),
|
|
7005
|
-
status === "warning" && /* @__PURE__ */ jsx310(InfoIcon_default, {}),
|
|
7006
|
-
status === "error" && /* @__PURE__ */ jsx310(ErrorIcon_default, {})
|
|
7007
|
-
] }),
|
|
7008
|
-
/* @__PURE__ */ jsx310("div", { className: "message", children: message })
|
|
7009
|
-
] });
|
|
7010
|
-
};
|
|
7011
|
-
InputValidations.displayName = "InputValidations";
|
|
7012
|
-
var InputValidations_default = InputValidations;
|
|
7013
|
-
|
|
7014
7049
|
// src/components/Input/reg.ts
|
|
7015
7050
|
var numberAndCommaReg = /^[0-9,]+$/;
|
|
7016
7051
|
var phoneNumberMaxLengthReg = /^.{0,13}$/;
|
|
@@ -7047,7 +7082,6 @@ var handleTelBackspace = (prevValue, currValue) => {
|
|
|
7047
7082
|
|
|
7048
7083
|
// src/components/Input/Input.tsx
|
|
7049
7084
|
import { jsx as jsx311, jsxs as jsxs199 } from "react/jsx-runtime";
|
|
7050
|
-
import { createElement } from "react";
|
|
7051
7085
|
var formatValue = (type, value) => {
|
|
7052
7086
|
if (value === null || value === void 0) return "";
|
|
7053
7087
|
const strValue = Array.isArray(value) ? String(value[0] ?? "") : String(value);
|
|
@@ -7136,20 +7170,15 @@ var Input = React8.forwardRef((props, ref) => {
|
|
|
7136
7170
|
disabled,
|
|
7137
7171
|
type: type === "number" ? "text" : type,
|
|
7138
7172
|
value: localValue,
|
|
7139
|
-
onChange: handleChange
|
|
7173
|
+
onChange: handleChange,
|
|
7174
|
+
"aria-invalid": hasError(validations) || void 0
|
|
7140
7175
|
}
|
|
7141
7176
|
),
|
|
7142
7177
|
suffix && /* @__PURE__ */ jsx311("div", { className: "suffix", children: suffix })
|
|
7143
7178
|
]
|
|
7144
7179
|
}
|
|
7145
7180
|
),
|
|
7146
|
-
|
|
7147
|
-
InputValidations_default,
|
|
7148
|
-
{
|
|
7149
|
-
...validation,
|
|
7150
|
-
key: `${validation.message}_${idx}`
|
|
7151
|
-
}
|
|
7152
|
-
)) })
|
|
7181
|
+
/* @__PURE__ */ jsx311(FieldMessage_default, { validations })
|
|
7153
7182
|
] });
|
|
7154
7183
|
});
|
|
7155
7184
|
Input.displayName = "Input";
|
|
@@ -7233,7 +7262,7 @@ var Modal_default = Modal;
|
|
|
7233
7262
|
|
|
7234
7263
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
7235
7264
|
import React11 from "react";
|
|
7236
|
-
import { Fragment as
|
|
7265
|
+
import { Fragment as Fragment4, jsx as jsx314, jsxs as jsxs200 } from "react/jsx-runtime";
|
|
7237
7266
|
var DayCell2 = React11.memo(
|
|
7238
7267
|
({
|
|
7239
7268
|
day,
|
|
@@ -7376,7 +7405,7 @@ var SingleDatePicker = (props) => {
|
|
|
7376
7405
|
},
|
|
7377
7406
|
i
|
|
7378
7407
|
)) }),
|
|
7379
|
-
pickerMode === "days" && /* @__PURE__ */ jsxs200(
|
|
7408
|
+
pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment4, { children: [
|
|
7380
7409
|
/* @__PURE__ */ jsx314("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx314(
|
|
7381
7410
|
"div",
|
|
7382
7411
|
{
|
|
@@ -7513,7 +7542,8 @@ var TabItem_default = TabItem;
|
|
|
7513
7542
|
// src/components/Tab/Tab.tsx
|
|
7514
7543
|
import { jsx as jsx317, jsxs as jsxs202 } from "react/jsx-runtime";
|
|
7515
7544
|
var Tab = (props) => {
|
|
7516
|
-
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
7545
|
+
const { activeIndex, onChange, tabs, variant, type, size = "md" } = props;
|
|
7546
|
+
const shape = variant ?? type ?? "default";
|
|
7517
7547
|
const [underlineStyle, setUnderlineStyle] = React14.useState({
|
|
7518
7548
|
left: 0,
|
|
7519
7549
|
width: 0
|
|
@@ -7528,7 +7558,7 @@ var Tab = (props) => {
|
|
|
7528
7558
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
7529
7559
|
}
|
|
7530
7560
|
}, [activeIndex, tabs.length]);
|
|
7531
|
-
return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-tab", `type-${
|
|
7561
|
+
return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-tab", `type-${shape}`, size), children: [
|
|
7532
7562
|
tabs.map((tab, idx) => /* @__PURE__ */ jsx317(
|
|
7533
7563
|
TabItem_default,
|
|
7534
7564
|
{
|
|
@@ -7541,7 +7571,7 @@ var Tab = (props) => {
|
|
|
7541
7571
|
},
|
|
7542
7572
|
`${tab.value}_${idx}`
|
|
7543
7573
|
)),
|
|
7544
|
-
|
|
7574
|
+
shape === "toggle" && /* @__PURE__ */ jsx317(
|
|
7545
7575
|
"div",
|
|
7546
7576
|
{
|
|
7547
7577
|
className: "tab-toggle-underline",
|
|
@@ -8665,7 +8695,8 @@ var FileUpload = (props) => {
|
|
|
8665
8695
|
maxSize,
|
|
8666
8696
|
onChange,
|
|
8667
8697
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
8668
|
-
description
|
|
8698
|
+
description,
|
|
8699
|
+
validations
|
|
8669
8700
|
} = props;
|
|
8670
8701
|
const [isDragOver, setIsDragOver] = React22.useState(false);
|
|
8671
8702
|
const inputRef = React22.useRef(null);
|
|
@@ -8698,7 +8729,7 @@ var FileUpload = (props) => {
|
|
|
8698
8729
|
handleFiles(e.target.files);
|
|
8699
8730
|
}
|
|
8700
8731
|
};
|
|
8701
|
-
|
|
8732
|
+
const control = /* @__PURE__ */ jsxs209(
|
|
8702
8733
|
"div",
|
|
8703
8734
|
{
|
|
8704
8735
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -8714,7 +8745,8 @@ var FileUpload = (props) => {
|
|
|
8714
8745
|
type: "file",
|
|
8715
8746
|
accept,
|
|
8716
8747
|
multiple,
|
|
8717
|
-
onChange: handleChange
|
|
8748
|
+
onChange: handleChange,
|
|
8749
|
+
"aria-invalid": hasError(validations) || void 0
|
|
8718
8750
|
}
|
|
8719
8751
|
),
|
|
8720
8752
|
/* @__PURE__ */ jsx325("div", { className: "upload-icon", children: /* @__PURE__ */ jsx325(UploadIcon_default, {}) }),
|
|
@@ -8723,6 +8755,7 @@ var FileUpload = (props) => {
|
|
|
8723
8755
|
]
|
|
8724
8756
|
}
|
|
8725
8757
|
);
|
|
8758
|
+
return /* @__PURE__ */ jsx325(Field, { validations, children: control });
|
|
8726
8759
|
};
|
|
8727
8760
|
FileUpload.displayName = "FileUpload";
|
|
8728
8761
|
var FileUpload_default = FileUpload;
|
|
@@ -8865,7 +8898,7 @@ var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
|
8865
8898
|
import React25 from "react";
|
|
8866
8899
|
import { jsx as jsx327, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
8867
8900
|
var ImageSelector = (props) => {
|
|
8868
|
-
const { value, label, onChange } = props;
|
|
8901
|
+
const { value, label, onChange, validations } = props;
|
|
8869
8902
|
const [previewUrl, setPreviewUrl] = React25.useState();
|
|
8870
8903
|
React25.useEffect(() => {
|
|
8871
8904
|
if (!value) {
|
|
@@ -8889,7 +8922,7 @@ var ImageSelector = (props) => {
|
|
|
8889
8922
|
const handleOpenFileDialog = () => {
|
|
8890
8923
|
inputRef.current?.click();
|
|
8891
8924
|
};
|
|
8892
|
-
|
|
8925
|
+
const control = /* @__PURE__ */ jsxs210("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
8893
8926
|
/* @__PURE__ */ jsx327(
|
|
8894
8927
|
"input",
|
|
8895
8928
|
{
|
|
@@ -8897,7 +8930,8 @@ var ImageSelector = (props) => {
|
|
|
8897
8930
|
accept: "image/*",
|
|
8898
8931
|
id: "image-input",
|
|
8899
8932
|
onChange: handleFileChange,
|
|
8900
|
-
ref: inputRef
|
|
8933
|
+
ref: inputRef,
|
|
8934
|
+
"aria-invalid": hasError(validations) || void 0
|
|
8901
8935
|
}
|
|
8902
8936
|
),
|
|
8903
8937
|
value && /* @__PURE__ */ jsxs210("div", { className: "action-bar", children: [
|
|
@@ -8909,6 +8943,7 @@ var ImageSelector = (props) => {
|
|
|
8909
8943
|
/* @__PURE__ */ jsx327("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
8910
8944
|
] }) })
|
|
8911
8945
|
] });
|
|
8946
|
+
return /* @__PURE__ */ jsx327(Field, { validations, children: control });
|
|
8912
8947
|
};
|
|
8913
8948
|
ImageSelector.displayName = "ImageSelector";
|
|
8914
8949
|
var ImageSelector_default = ImageSelector;
|
|
@@ -8962,11 +8997,12 @@ var NotificationBadge = (props) => {
|
|
|
8962
8997
|
dot = false,
|
|
8963
8998
|
size = "md"
|
|
8964
8999
|
} = props;
|
|
9000
|
+
const statusType = normalizeStatus(type);
|
|
8965
9001
|
const showBadge = dot || count !== void 0 && count > 0;
|
|
8966
9002
|
const displayCount = count !== void 0 && count > maxCount ? `${maxCount}+` : count;
|
|
8967
9003
|
return /* @__PURE__ */ jsxs211("div", { className: clsx_default("lib-xplat-notification-badge", size), children: [
|
|
8968
9004
|
children,
|
|
8969
|
-
showBadge && /* @__PURE__ */ jsx330("span", { className: clsx_default("badge-indicator",
|
|
9005
|
+
showBadge && /* @__PURE__ */ jsx330("span", { className: clsx_default("badge-indicator", statusType, { dot }), children: !dot && displayCount })
|
|
8970
9006
|
] });
|
|
8971
9007
|
};
|
|
8972
9008
|
NotificationBadge.displayName = "NotificationBadge";
|
|
@@ -9007,8 +9043,9 @@ var Pagination = (props) => {
|
|
|
9007
9043
|
siblingCount = 1,
|
|
9008
9044
|
onChange,
|
|
9009
9045
|
size = "md",
|
|
9010
|
-
type = "
|
|
9046
|
+
type = "primary"
|
|
9011
9047
|
} = props;
|
|
9048
|
+
const statusType = normalizeStatus(type);
|
|
9012
9049
|
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
|
9013
9050
|
const pages = getPageRange(current, totalPages, siblingCount);
|
|
9014
9051
|
const handleClick = (page) => {
|
|
@@ -9016,7 +9053,7 @@ var Pagination = (props) => {
|
|
|
9016
9053
|
onChange?.(page);
|
|
9017
9054
|
}
|
|
9018
9055
|
};
|
|
9019
|
-
return /* @__PURE__ */ jsxs212("nav", { className: clsx_default("lib-xplat-pagination", size,
|
|
9056
|
+
return /* @__PURE__ */ jsxs212("nav", { className: clsx_default("lib-xplat-pagination", size, statusType), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
9020
9057
|
/* @__PURE__ */ jsx331(
|
|
9021
9058
|
"button",
|
|
9022
9059
|
{
|
|
@@ -9117,11 +9154,12 @@ var Progress = (props) => {
|
|
|
9117
9154
|
value,
|
|
9118
9155
|
max = 100,
|
|
9119
9156
|
size = "md",
|
|
9120
|
-
type = "
|
|
9157
|
+
type = "primary",
|
|
9121
9158
|
showLabel = false
|
|
9122
9159
|
} = props;
|
|
9160
|
+
const statusType = normalizeStatus(type);
|
|
9123
9161
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
9124
|
-
return /* @__PURE__ */ jsxs214("div", { className: clsx_default("lib-xplat-progress", size,
|
|
9162
|
+
return /* @__PURE__ */ jsxs214("div", { className: clsx_default("lib-xplat-progress", size, statusType), children: [
|
|
9125
9163
|
/* @__PURE__ */ jsx333(
|
|
9126
9164
|
"div",
|
|
9127
9165
|
{
|
|
@@ -9166,9 +9204,11 @@ var Radio = (props) => {
|
|
|
9166
9204
|
className,
|
|
9167
9205
|
value,
|
|
9168
9206
|
size: sizeProp,
|
|
9169
|
-
type = "
|
|
9207
|
+
type = "primary",
|
|
9208
|
+
validations,
|
|
9170
9209
|
...rest
|
|
9171
9210
|
} = props;
|
|
9211
|
+
const statusType = normalizeStatus(type);
|
|
9172
9212
|
const context = useRadioGroupContext();
|
|
9173
9213
|
const size = sizeProp ?? context?.size ?? "md";
|
|
9174
9214
|
const isGroup = !!context;
|
|
@@ -9178,18 +9218,27 @@ var Radio = (props) => {
|
|
|
9178
9218
|
value,
|
|
9179
9219
|
onChange: rest.onChange
|
|
9180
9220
|
};
|
|
9181
|
-
|
|
9221
|
+
const control = /* @__PURE__ */ jsxs215(
|
|
9182
9222
|
"label",
|
|
9183
9223
|
{
|
|
9184
9224
|
className: clsx_default(
|
|
9185
9225
|
"lib-xplat-radio",
|
|
9186
9226
|
size,
|
|
9187
|
-
|
|
9227
|
+
statusType,
|
|
9188
9228
|
localChecked ? "checked" : void 0,
|
|
9189
9229
|
className
|
|
9190
9230
|
),
|
|
9191
9231
|
children: [
|
|
9192
|
-
/* @__PURE__ */ jsx334(
|
|
9232
|
+
/* @__PURE__ */ jsx334(
|
|
9233
|
+
"input",
|
|
9234
|
+
{
|
|
9235
|
+
...rest,
|
|
9236
|
+
...inputProps,
|
|
9237
|
+
checked: localChecked,
|
|
9238
|
+
type: "radio",
|
|
9239
|
+
"aria-invalid": hasError(validations) || void 0
|
|
9240
|
+
}
|
|
9241
|
+
),
|
|
9193
9242
|
/* @__PURE__ */ jsx334(
|
|
9194
9243
|
"div",
|
|
9195
9244
|
{
|
|
@@ -9204,15 +9253,16 @@ var Radio = (props) => {
|
|
|
9204
9253
|
]
|
|
9205
9254
|
}
|
|
9206
9255
|
);
|
|
9256
|
+
return /* @__PURE__ */ jsx334(Field, { validations, children: control });
|
|
9207
9257
|
};
|
|
9208
9258
|
Radio.displayName = "Radio";
|
|
9209
9259
|
var Radio_default = Radio;
|
|
9210
9260
|
|
|
9211
9261
|
// src/components/Radio/RadioGroup.tsx
|
|
9212
|
-
import { Fragment as
|
|
9262
|
+
import { Fragment as Fragment5, jsx as jsx335 } from "react/jsx-runtime";
|
|
9213
9263
|
var RadioGroup = (props) => {
|
|
9214
9264
|
const { children, ...rest } = props;
|
|
9215
|
-
return /* @__PURE__ */ jsx335(
|
|
9265
|
+
return /* @__PURE__ */ jsx335(Fragment5, { children: /* @__PURE__ */ jsx335(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
9216
9266
|
};
|
|
9217
9267
|
RadioGroup.displayName = "RadioGroup";
|
|
9218
9268
|
var RadioGroup_default = RadioGroup;
|
|
@@ -9271,6 +9321,7 @@ var SelectRoot = (props) => {
|
|
|
9271
9321
|
children,
|
|
9272
9322
|
disabled = false,
|
|
9273
9323
|
error = false,
|
|
9324
|
+
validations,
|
|
9274
9325
|
size = "md"
|
|
9275
9326
|
} = props;
|
|
9276
9327
|
const itemChildren = React30.Children.toArray(children).filter(
|
|
@@ -9341,14 +9392,14 @@ var SelectRoot = (props) => {
|
|
|
9341
9392
|
if (disabled) return;
|
|
9342
9393
|
toggle();
|
|
9343
9394
|
};
|
|
9344
|
-
|
|
9395
|
+
const control = /* @__PURE__ */ jsx337(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs216(
|
|
9345
9396
|
"div",
|
|
9346
9397
|
{
|
|
9347
9398
|
className: clsx_default(
|
|
9348
9399
|
"lib-xplat-select",
|
|
9349
9400
|
size,
|
|
9350
9401
|
disabled && "disabled",
|
|
9351
|
-
error && "error",
|
|
9402
|
+
(error || hasError(validations)) && "error",
|
|
9352
9403
|
mounted && "is-open"
|
|
9353
9404
|
),
|
|
9354
9405
|
children: [
|
|
@@ -9359,14 +9410,14 @@ var SelectRoot = (props) => {
|
|
|
9359
9410
|
className: clsx_default(
|
|
9360
9411
|
"select-trigger",
|
|
9361
9412
|
disabled && "disabled",
|
|
9362
|
-
error && "error"
|
|
9413
|
+
(error || hasError(validations)) && "error"
|
|
9363
9414
|
),
|
|
9364
9415
|
onClick: handleTriggerClick,
|
|
9365
9416
|
role: "combobox",
|
|
9366
9417
|
"aria-expanded": isOpen,
|
|
9367
9418
|
"aria-haspopup": "listbox",
|
|
9368
9419
|
"aria-disabled": disabled,
|
|
9369
|
-
"aria-invalid": error,
|
|
9420
|
+
"aria-invalid": error || hasError(validations) || void 0,
|
|
9370
9421
|
tabIndex: disabled ? -1 : 0,
|
|
9371
9422
|
onKeyDown: (e) => {
|
|
9372
9423
|
if (disabled) return;
|
|
@@ -9410,6 +9461,7 @@ var SelectRoot = (props) => {
|
|
|
9410
9461
|
]
|
|
9411
9462
|
}
|
|
9412
9463
|
) });
|
|
9464
|
+
return /* @__PURE__ */ jsx337(Field, { validations, children: control });
|
|
9413
9465
|
};
|
|
9414
9466
|
SelectRoot.displayName = "Select";
|
|
9415
9467
|
var Select = Object.assign(SelectRoot, {
|
|
@@ -9451,12 +9503,13 @@ import { jsx as jsx339, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
|
9451
9503
|
var Spinner = (props) => {
|
|
9452
9504
|
const {
|
|
9453
9505
|
size = "md",
|
|
9454
|
-
type = "
|
|
9506
|
+
type = "primary"
|
|
9455
9507
|
} = props;
|
|
9508
|
+
const statusType = normalizeStatus(type);
|
|
9456
9509
|
return /* @__PURE__ */ jsx339(
|
|
9457
9510
|
"div",
|
|
9458
9511
|
{
|
|
9459
|
-
className: clsx_default("lib-xplat-spinner", size,
|
|
9512
|
+
className: clsx_default("lib-xplat-spinner", size, statusType),
|
|
9460
9513
|
role: "status",
|
|
9461
9514
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
9462
9515
|
children: /* @__PURE__ */ jsxs217("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
@@ -9494,9 +9547,10 @@ var Steps = (props) => {
|
|
|
9494
9547
|
const {
|
|
9495
9548
|
items,
|
|
9496
9549
|
current,
|
|
9497
|
-
type = "
|
|
9550
|
+
type = "primary"
|
|
9498
9551
|
} = props;
|
|
9499
|
-
|
|
9552
|
+
const statusType = normalizeStatus(type);
|
|
9553
|
+
return /* @__PURE__ */ jsx340("div", { className: clsx_default("lib-xplat-steps", statusType), children: items.map((item, index) => {
|
|
9500
9554
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
9501
9555
|
return /* @__PURE__ */ jsxs218("div", { className: clsx_default("step-item", status), children: [
|
|
9502
9556
|
/* @__PURE__ */ jsx340("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx340(CheckIcon_default, {}) : /* @__PURE__ */ jsx340("span", { children: index + 1 }) }),
|
|
@@ -9821,10 +9875,12 @@ var Switch = (props) => {
|
|
|
9821
9875
|
const {
|
|
9822
9876
|
value,
|
|
9823
9877
|
size = "md",
|
|
9824
|
-
type = "
|
|
9878
|
+
type = "primary",
|
|
9825
9879
|
disabled,
|
|
9826
|
-
onChange
|
|
9880
|
+
onChange,
|
|
9881
|
+
validations
|
|
9827
9882
|
} = props;
|
|
9883
|
+
const statusType = normalizeStatus(type);
|
|
9828
9884
|
const [isAnimating, setIsAnimating] = React32.useState(false);
|
|
9829
9885
|
const timeoutRef = React32.useRef(null);
|
|
9830
9886
|
React32.useEffect(() => {
|
|
@@ -9842,22 +9898,24 @@ var Switch = (props) => {
|
|
|
9842
9898
|
timeoutRef.current = null;
|
|
9843
9899
|
}, KNOB_TRANSITION_MS);
|
|
9844
9900
|
};
|
|
9845
|
-
|
|
9901
|
+
const control = /* @__PURE__ */ jsx342(
|
|
9846
9902
|
"div",
|
|
9847
9903
|
{
|
|
9848
9904
|
className: clsx_default(
|
|
9849
9905
|
"lib-xplat-switch",
|
|
9850
9906
|
size,
|
|
9851
|
-
|
|
9907
|
+
statusType,
|
|
9852
9908
|
value ? "checked" : void 0,
|
|
9853
9909
|
disabled && "disabled",
|
|
9854
9910
|
isAnimating && "animating"
|
|
9855
9911
|
),
|
|
9856
9912
|
onClick: handleClick,
|
|
9913
|
+
"aria-invalid": hasError(validations) || void 0,
|
|
9857
9914
|
"aria-disabled": disabled || isAnimating,
|
|
9858
9915
|
children: /* @__PURE__ */ jsx342("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
9859
9916
|
}
|
|
9860
9917
|
);
|
|
9918
|
+
return /* @__PURE__ */ jsx342(Field, { validations, children: control });
|
|
9861
9919
|
};
|
|
9862
9920
|
Switch.displayName = "Switch";
|
|
9863
9921
|
var Switch_default = Switch;
|
|
@@ -10063,20 +10121,22 @@ import { jsx as jsx348, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
|
10063
10121
|
var Tag = (props) => {
|
|
10064
10122
|
const {
|
|
10065
10123
|
children,
|
|
10066
|
-
|
|
10124
|
+
variant,
|
|
10125
|
+
type,
|
|
10067
10126
|
onClose,
|
|
10068
10127
|
size = "md",
|
|
10069
10128
|
disabled = false,
|
|
10070
10129
|
colorIndex
|
|
10071
10130
|
} = props;
|
|
10131
|
+
const shape = variant ?? type ?? "neutral";
|
|
10072
10132
|
return /* @__PURE__ */ jsxs220(
|
|
10073
10133
|
"span",
|
|
10074
10134
|
{
|
|
10075
10135
|
className: clsx_default(
|
|
10076
10136
|
"lib-xplat-tag",
|
|
10077
|
-
|
|
10137
|
+
shape,
|
|
10078
10138
|
size,
|
|
10079
|
-
|
|
10139
|
+
shape === "categorical" && colorIndex !== void 0 && `cat-${colorIndex}`,
|
|
10080
10140
|
disabled && "disabled"
|
|
10081
10141
|
),
|
|
10082
10142
|
children: [
|
|
@@ -10097,22 +10157,25 @@ var TextArea = React38.forwardRef(
|
|
|
10097
10157
|
const {
|
|
10098
10158
|
className,
|
|
10099
10159
|
size = "md",
|
|
10160
|
+
validations,
|
|
10100
10161
|
resize = "vertical",
|
|
10101
10162
|
rows = 3,
|
|
10102
10163
|
disabled,
|
|
10103
10164
|
...textareaProps
|
|
10104
10165
|
} = props;
|
|
10105
|
-
|
|
10166
|
+
const control = /* @__PURE__ */ jsx349("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ jsx349(
|
|
10106
10167
|
"textarea",
|
|
10107
10168
|
{
|
|
10108
10169
|
...textareaProps,
|
|
10109
10170
|
ref,
|
|
10110
10171
|
rows,
|
|
10111
10172
|
disabled,
|
|
10173
|
+
"aria-invalid": hasError(validations) || void 0,
|
|
10112
10174
|
className: clsx_default("lib-xplat-textarea", size, disabled && "disabled"),
|
|
10113
10175
|
style: { resize }
|
|
10114
10176
|
}
|
|
10115
10177
|
) });
|
|
10178
|
+
return /* @__PURE__ */ jsx349(Field, { validations, children: control });
|
|
10116
10179
|
}
|
|
10117
10180
|
);
|
|
10118
10181
|
TextArea.displayName = "TextArea";
|
|
@@ -10211,7 +10274,7 @@ ToastProvider.displayName = "ToastProvider";
|
|
|
10211
10274
|
|
|
10212
10275
|
// src/components/Tooltip/Tooltip.tsx
|
|
10213
10276
|
import React40 from "react";
|
|
10214
|
-
import { Fragment as
|
|
10277
|
+
import { Fragment as Fragment6, jsx as jsx351, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
10215
10278
|
var OFFSET = 12;
|
|
10216
10279
|
var GAP = 8;
|
|
10217
10280
|
var SHOW_DELAY = 300;
|
|
@@ -10220,10 +10283,12 @@ var Tooltip = (props) => {
|
|
|
10220
10283
|
children,
|
|
10221
10284
|
title,
|
|
10222
10285
|
description,
|
|
10223
|
-
|
|
10286
|
+
variant,
|
|
10287
|
+
type,
|
|
10224
10288
|
follow = false,
|
|
10225
10289
|
disabled = false
|
|
10226
10290
|
} = props;
|
|
10291
|
+
const shape = variant ?? type ?? "dark";
|
|
10227
10292
|
const triggerRef = React40.useRef(null);
|
|
10228
10293
|
const tooltipRef = React40.useRef(null);
|
|
10229
10294
|
const [visible, setVisible] = React40.useState(false);
|
|
@@ -10314,7 +10379,7 @@ var Tooltip = (props) => {
|
|
|
10314
10379
|
window.clearTimeout(delayTimer.current);
|
|
10315
10380
|
cancelAnimationFrame(rafRef.current);
|
|
10316
10381
|
}, []);
|
|
10317
|
-
if (!title && !description) return /* @__PURE__ */ jsx351(
|
|
10382
|
+
if (!title && !description) return /* @__PURE__ */ jsx351(Fragment6, { children });
|
|
10318
10383
|
return /* @__PURE__ */ jsxs222(
|
|
10319
10384
|
"div",
|
|
10320
10385
|
{
|
|
@@ -10333,7 +10398,7 @@ var Tooltip = (props) => {
|
|
|
10333
10398
|
{
|
|
10334
10399
|
ref: tooltipRef,
|
|
10335
10400
|
role: "tooltip",
|
|
10336
|
-
className: clsx_default("lib-xplat-tooltip",
|
|
10401
|
+
className: clsx_default("lib-xplat-tooltip", shape),
|
|
10337
10402
|
style: { position: "fixed", left: pos.left, top: pos.top },
|
|
10338
10403
|
children: [
|
|
10339
10404
|
title && /* @__PURE__ */ jsx351("div", { className: "tooltip-title", children: title }),
|
|
@@ -10788,11 +10853,11 @@ Header.displayName = "Header";
|
|
|
10788
10853
|
var Header_default = Header;
|
|
10789
10854
|
|
|
10790
10855
|
// src/layout/Layout/Layout.tsx
|
|
10791
|
-
import { Fragment as
|
|
10856
|
+
import { Fragment as Fragment7, jsx as jsx357, jsxs as jsxs225 } from "react/jsx-runtime";
|
|
10792
10857
|
var Layout = (props) => {
|
|
10793
10858
|
const { header, sideBar, children } = props;
|
|
10794
10859
|
return /* @__PURE__ */ jsx357("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ jsxs225("div", { className: "lib-xplat-layout-content-wrapper", children: [
|
|
10795
|
-
sideBar && /* @__PURE__ */ jsx357(
|
|
10860
|
+
sideBar && /* @__PURE__ */ jsx357(Fragment7, { children: sideBar }),
|
|
10796
10861
|
/* @__PURE__ */ jsxs225("div", { className: "lib-xplat-layout-content", children: [
|
|
10797
10862
|
header && /* @__PURE__ */ jsx357("div", { className: "lib-xplat-layout-conent-header", children: header }),
|
|
10798
10863
|
children
|
|
@@ -10979,6 +11044,8 @@ export {
|
|
|
10979
11044
|
FacebookIcon_default as FacebookIcon,
|
|
10980
11045
|
FastForwardIcon_default as FastForwardIcon,
|
|
10981
11046
|
FeatherIcon_default as FeatherIcon,
|
|
11047
|
+
Field,
|
|
11048
|
+
FieldMessage_default as FieldMessage,
|
|
10982
11049
|
FigmaIcon_default as FigmaIcon,
|
|
10983
11050
|
FileIcon_default as FileIcon,
|
|
10984
11051
|
FileMinusIcon_default as FileMinusIcon,
|
|
@@ -11207,6 +11274,7 @@ export {
|
|
|
11207
11274
|
breakpoints,
|
|
11208
11275
|
cssVar,
|
|
11209
11276
|
gridColumns,
|
|
11277
|
+
hasError,
|
|
11210
11278
|
isInRange,
|
|
11211
11279
|
isSameDay,
|
|
11212
11280
|
semantic,
|