@loword/loword-design-system 0.0.9 → 0.0.11
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/LDAutoComplete/AutoCompleteBase.js +6 -6
- package/dist/components/LDBadge/LDBadge.d.ts +5 -6
- package/dist/components/LDBadge/LDBadge.d.ts.map +1 -1
- package/dist/components/LDBadge/LDBadge.js +2 -2
- package/dist/components/LDBreadCrumb/LDBreadCrumb.d.ts +1 -2
- package/dist/components/LDBreadCrumb/LDBreadCrumb.d.ts.map +1 -1
- package/dist/components/LDButton/LDButton.d.ts +3 -3
- package/dist/components/LDButton/LDButton.d.ts.map +1 -1
- package/dist/components/LDButton/LDButton.js +5 -5
- package/dist/components/LDCalendar/LDCalendar.d.ts +7 -6
- package/dist/components/LDCalendar/LDCalendar.d.ts.map +1 -1
- package/dist/components/LDCalendar/LDCalendar.js +59 -16
- package/dist/components/LDCarousel/CarouselBase.d.ts.map +1 -1
- package/dist/components/LDCarousel/CarouselBase.js +8 -4
- package/dist/components/LDCheckbox/CheckboxBase.d.ts +1 -3
- package/dist/components/LDCheckbox/CheckboxBase.d.ts.map +1 -1
- package/dist/components/LDCheckbox/CheckboxBase.js +3 -3
- package/dist/components/LDCheckbox/LDCheckbox.d.ts.map +1 -1
- package/dist/components/LDCheckbox/LDCheckbox.js +4 -4
- package/dist/components/LDCheckbox/LDCheckboxGroup.js +1 -1
- package/dist/components/LDCheckbox/LDFormCheckbox.d.ts +14 -0
- package/dist/components/LDCheckbox/LDFormCheckbox.d.ts.map +1 -0
- package/dist/components/LDCheckbox/{FormCheckbox.js → LDFormCheckbox.js} +2 -2
- package/dist/components/LDCheckbox/LDFormCheckboxGroup.d.ts +13 -0
- package/dist/components/LDCheckbox/LDFormCheckboxGroup.d.ts.map +1 -0
- package/dist/components/LDCheckbox/{FormCheckboxGroup.js → LDFormCheckboxGroup.js} +2 -2
- package/dist/components/LDDatePicker/LDDatePicker.d.ts +10 -4
- package/dist/components/LDDatePicker/LDDatePicker.d.ts.map +1 -1
- package/dist/components/LDDatePicker/LDDatePicker.js +95 -25
- package/dist/components/LDDatePicker/LDFormDatePicker.d.ts +13 -0
- package/dist/components/LDDatePicker/LDFormDatePicker.d.ts.map +1 -0
- package/dist/components/LDDatePicker/LDFormDatePicker.js +15 -0
- package/dist/components/LDDateRangePicker/LDDateRangePicker.d.ts +13 -6
- package/dist/components/LDDateRangePicker/LDDateRangePicker.d.ts.map +1 -1
- package/dist/components/LDDateRangePicker/LDDateRangePicker.js +143 -93
- package/dist/components/LDDateRangePicker/LDFormDateRangePicker.d.ts +13 -0
- package/dist/components/LDDateRangePicker/LDFormDateRangePicker.d.ts.map +1 -0
- package/dist/components/LDDateRangePicker/LDFormDateRangePicker.js +20 -0
- package/dist/components/LDDrawer/LDDrawer.js +2 -2
- package/dist/components/LDFileUpload/FileUploadBase.d.ts +11 -3
- package/dist/components/LDFileUpload/FileUploadBase.d.ts.map +1 -1
- package/dist/components/LDFileUpload/FileUploadBase.js +17 -17
- package/dist/components/LDFileUpload/LDFileUpload.d.ts.map +1 -1
- package/dist/components/LDFileUpload/LDFileUpload.js +3 -1
- package/dist/components/LDFileUpload/LDFileUploadList.js +1 -1
- package/dist/components/LDFileUpload/LDImageUpload.d.ts +2 -0
- package/dist/components/LDFileUpload/LDImageUpload.d.ts.map +1 -1
- package/dist/components/LDFileUpload/LDImageUpload.js +5 -1
- package/dist/components/LDFileUpload/LDImageUploadList.js +1 -1
- package/dist/components/LDForm/LDFormErrorMessage.d.ts +3 -1
- package/dist/components/LDForm/LDFormErrorMessage.d.ts.map +1 -1
- package/dist/components/LDForm/LDFormErrorMessage.js +2 -2
- package/dist/components/LDInput/LDFormInput.d.ts +1 -1
- package/dist/components/LDInput/LDFormInput.d.ts.map +1 -1
- package/dist/components/LDInput/LDFormInput.js +37 -14
- package/dist/components/LDInput/LDInput.d.ts +4 -3
- package/dist/components/LDInput/LDInput.d.ts.map +1 -1
- package/dist/components/LDInput/LDInput.js +49 -48
- package/dist/components/LDModal/LDModal.d.ts +19 -40
- package/dist/components/LDModal/LDModal.d.ts.map +1 -1
- package/dist/components/LDModal/LDModal.js +56 -70
- package/dist/components/LDModal/LDModalView.d.ts +51 -0
- package/dist/components/LDModal/LDModalView.d.ts.map +1 -0
- package/dist/components/LDModal/LDModalView.js +72 -0
- package/dist/components/LDOTPInput/LDOTPInput.d.ts.map +1 -1
- package/dist/components/LDOTPInput/LDOTPInput.js +4 -3
- package/dist/components/LDPagination/LDPagination.d.ts +5 -1
- package/dist/components/LDPagination/LDPagination.d.ts.map +1 -1
- package/dist/components/LDPagination/LDPagination.js +10 -1
- package/dist/components/LDPagination/PaginationBase.d.ts +13 -4
- package/dist/components/LDPagination/PaginationBase.d.ts.map +1 -1
- package/dist/components/LDPagination/PaginationBase.js +8 -7
- package/dist/components/LDPopover/LDPopover.js +3 -3
- package/dist/components/LDRadio/LDFormRadioGroup.d.ts +13 -0
- package/dist/components/LDRadio/LDFormRadioGroup.d.ts.map +1 -0
- package/dist/components/LDRadio/{FormRadioGroup.js → LDFormRadioGroup.js} +2 -2
- package/dist/components/LDRadio/LDRadio.d.ts +1 -1
- package/dist/components/LDRadio/LDRadio.d.ts.map +1 -1
- package/dist/components/LDRadio/LDRadio.js +15 -6
- package/dist/components/LDRadio/LDRadioGroup.d.ts.map +1 -1
- package/dist/components/LDRadio/LDRadioGroup.js +1 -1
- package/dist/components/LDRadio/RadioBase.d.ts +2 -3
- package/dist/components/LDRadio/RadioBase.d.ts.map +1 -1
- package/dist/components/LDRadio/RadioBase.js +7 -4
- package/dist/components/LDSelect/LDFormMultiSelect.d.ts +13 -0
- package/dist/components/LDSelect/LDFormMultiSelect.d.ts.map +1 -0
- package/dist/components/LDSelect/{FormMultiSelect.js → LDFormMultiSelect.js} +2 -2
- package/dist/components/LDSelect/LDFormSelect.d.ts +13 -0
- package/dist/components/LDSelect/LDFormSelect.d.ts.map +1 -0
- package/dist/components/LDSelect/LDFormSelect.js +10 -0
- package/dist/components/LDSelect/LDMultiSelect.d.ts +6 -3
- package/dist/components/LDSelect/LDMultiSelect.d.ts.map +1 -1
- package/dist/components/LDSelect/LDMultiSelect.js +35 -31
- package/dist/components/LDSelect/LDSelect.d.ts +6 -3
- package/dist/components/LDSelect/LDSelect.d.ts.map +1 -1
- package/dist/components/LDSelect/LDSelect.js +37 -30
- package/dist/components/LDSelect/SelectBase.d.ts.map +1 -1
- package/dist/components/LDSelect/SelectBase.js +21 -7
- package/dist/components/LDSpinner/LDSpinner.d.ts +1 -1
- package/dist/components/LDSpinner/LDSpinner.d.ts.map +1 -1
- package/dist/components/LDSpinner/LDSpinner.js +6 -6
- package/dist/components/LDTable/LDTanstackTable.js +1 -1
- package/dist/components/LDTable/TableField.d.ts +1 -1
- package/dist/components/LDTable/TableField.d.ts.map +1 -1
- package/dist/components/LDTextarea/LDFormTextarea.d.ts +14 -0
- package/dist/components/LDTextarea/LDFormTextarea.d.ts.map +1 -0
- package/dist/components/LDTextarea/{FormTextarea.js → LDFormTextarea.js} +2 -2
- package/dist/components/LDTextarea/LDTextarea.d.ts +1 -1
- package/dist/components/LDTextarea/LDTextarea.d.ts.map +1 -1
- package/dist/components/LDTextarea/LDTextarea.js +30 -30
- package/dist/components/LDTimePicker/LDFormTimePicker.d.ts +12 -0
- package/dist/components/LDTimePicker/LDFormTimePicker.d.ts.map +1 -0
- package/dist/components/LDTimePicker/{FormTimePicker.js → LDFormTimePicker.js} +3 -3
- package/dist/components/LDTimePicker/LDTimePicker.js +2 -2
- package/dist/components/LDToast/LDToast.js +1 -1
- package/dist/components/LDToggleButton/LDFormToggleButton.d.ts +12 -0
- package/dist/components/LDToggleButton/LDFormToggleButton.d.ts.map +1 -0
- package/dist/components/LDToggleButton/{FormToggleButton.js → LDFormToggleButton.js} +2 -2
- package/dist/index.css +349 -207
- package/dist/index.d.ts +13 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -13
- package/dist/utils/cn.d.ts.map +1 -1
- package/dist/utils/cn.js +25 -1
- package/dist/utils/file.d.ts +2 -2
- package/dist/utils/file.d.ts.map +1 -1
- package/dist/utils/file.js +26 -23
- package/dist/utils/renderIcon.d.ts +1 -2
- package/dist/utils/renderIcon.d.ts.map +1 -1
- package/dist/utils/renderIcon.js +5 -4
- package/package.json +1 -1
- package/src/styles/components/button.css +2 -2
- package/src/styles/components/index.css +1 -0
- package/src/styles/components/input.css +2 -2
- package/src/styles/components/select.css +61 -0
- package/src/styles/motion.css +37 -0
- package/src/theme.css +3 -0
- package/dist/components/Icon/LucideIcon.d.ts +0 -12
- package/dist/components/Icon/LucideIcon.d.ts.map +0 -1
- package/dist/components/Icon/LucideIcon.js +0 -49
- package/dist/components/LDCheckbox/FormCheckbox.d.ts +0 -14
- package/dist/components/LDCheckbox/FormCheckbox.d.ts.map +0 -1
- package/dist/components/LDCheckbox/FormCheckboxGroup.d.ts +0 -13
- package/dist/components/LDCheckbox/FormCheckboxGroup.d.ts.map +0 -1
- package/dist/components/LDDatePicker/FormDatePicker.d.ts +0 -12
- package/dist/components/LDDatePicker/FormDatePicker.d.ts.map +0 -1
- package/dist/components/LDDatePicker/FormDatePicker.js +0 -12
- package/dist/components/LDDateRangePicker/FormDateRangePicker.d.ts +0 -12
- package/dist/components/LDDateRangePicker/FormDateRangePicker.d.ts.map +0 -1
- package/dist/components/LDDateRangePicker/FormDateRangePicker.js +0 -10
- package/dist/components/LDModal/openModal.d.ts +0 -24
- package/dist/components/LDModal/openModal.d.ts.map +0 -1
- package/dist/components/LDModal/openModal.js +0 -52
- package/dist/components/LDRadio/FormRadioGroup.d.ts +0 -13
- package/dist/components/LDRadio/FormRadioGroup.d.ts.map +0 -1
- package/dist/components/LDSelect/FormMultiSelect.d.ts +0 -13
- package/dist/components/LDSelect/FormMultiSelect.d.ts.map +0 -1
- package/dist/components/LDSelect/FormSelect.d.ts +0 -13
- package/dist/components/LDSelect/FormSelect.d.ts.map +0 -1
- package/dist/components/LDSelect/FormSelect.js +0 -10
- package/dist/components/LDTextarea/FormTextarea.d.ts +0 -14
- package/dist/components/LDTextarea/FormTextarea.d.ts.map +0 -1
- package/dist/components/LDTimePicker/FormTimePicker.d.ts +0 -12
- package/dist/components/LDTimePicker/FormTimePicker.d.ts.map +0 -1
- package/dist/components/LDToggleButton/FormToggleButton.d.ts +0 -12
- package/dist/components/LDToggleButton/FormToggleButton.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDModal.d.ts","sourceRoot":"","sources":["../../../src/components/LDModal/LDModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LDModal.d.ts","sourceRoot":"","sources":["../../../src/components/LDModal/LDModal.tsx"],"names":[],"mappings":"AAIA,OAAoB,EAAoB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAE9E,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,SAAS;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EACJ,KAAK,CAAC,SAAS,GACf,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAClE,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;QACxC,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;QACvC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;KAC1D,EAAE,CAAC;IACJ,eAAe;IACf,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACtC,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAClD;AAED,QAAA,MAAM,OAAO,GAAI,CAAC,GAAG,SAAS,EAC5B,SAAS,cAAc,CAAC,CAAC,CAAC,KACzB,OAAO,CAAC,CAAC,GAAG,SAAS,CA2EvB,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -1,72 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
['top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2']: scrollBehavior === 'inside',
|
|
58
|
-
['inset-0 overflow-y-auto flex justify-center items-start py-20']: scrollBehavior === 'outside',
|
|
59
|
-
}), onMouseDown: (e) => (overlayRef.current = e.target === e.currentTarget), onClick: (e) => {
|
|
60
|
-
if (scrollBehavior === 'outside' &&
|
|
61
|
-
e.target === e.currentTarget &&
|
|
62
|
-
overlayRef.current)
|
|
63
|
-
onOpenChange?.(false);
|
|
64
|
-
overlayRef.current = false;
|
|
65
|
-
}, children: _jsxs("div", { className: cn('relative bg-white rounded-2xl p-5', sizeClasses[size], 'mobile:max-w-[calc(100vw-40px)]', scrollBehavior === 'inside' &&
|
|
66
|
-
'flex flex-col overflow-y-auto max-h-[90dvh]', className), style: style, onClick: (e) => e.stopPropagation(), children: [_jsx(ModalBase.Close, { className: "absolute top-4 right-5 text-neutral500 cursor-pointer outline-hidden", children: _jsx(LDButton, { variant: "ghost", color: "neutral", leftIcon: "x", compact: true }) }), _jsxs("div", { className: cn('w-full flex flex-col shrink-0', scrollBehavior === 'inside' && 'flex-1 min-h-0', layoutGapSizeClasses[size], !hasHeader && noHeaderPaddingTopSizeClasses[size]), children: [hasHeader && (_jsxs("div", { className: "w-full flex gap-5 py-5 items-center flex-col text-center shrink-0", children: [icon === 'success' && (_jsx("div", { className: cn('flex items-center justify-center rounded-full bg-hyper-blue', statusIconSizeClasses[size]), children: _jsx(LucideIcon, { name: "check", className: "text-white" }) })), icon === 'fail' && (_jsx("div", { className: cn('flex items-center justify-center rounded-full bg-danger600', statusIconSizeClasses[size]), children: _jsx(LucideIcon, { name: "circleAlert", className: "text-white" }) })), name && (_jsx("span", { className: "display16 bold text-neutral500 whitespace-pre-wrap", children: name })), title && (_jsx(ModalBase.Title, { className: "display28 bold whitespace-pre-wrap text-center", children: title })), description && (_jsx(ModalBase.Description, { className: "display14 text-neutral500 whitespace-pre-wrap text-center", children: description }))] })), children && (_jsx("div", { className: cn(scrollBehavior === 'inside' &&
|
|
67
|
-
'flex-1 min-h-10 overflow-y-auto'), children: children })), buttons?.list && buttons?.list?.length > 0 && (_jsx("div", { className: cn('flex mobile:flex-1 mobile:flex-col mobile:items-center', buttons.direction === 'column' ? 'flex-col' : 'flex-row', buttonsGapSizeClasses[size]), children: buttons?.list?.map((button, index) => {
|
|
68
|
-
const isFirst = index === 0;
|
|
69
|
-
return (_jsx("div", { className: "flex flex-1 w-full", children: _jsx(LDButton, { type: "button", onClick: () => handleClick(button), variant: button.variant ?? (isFirst ? 'solid' : 'outline'), color: button.color ?? (isFirst ? 'point' : 'neutral'), size: buttonSizeClasses[size], block: true, children: button.label }) }, String(button.value)));
|
|
70
|
-
}) }))] })] }) })] }));
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useState } from 'react';
|
|
4
|
+
import { createRoot } from 'react-dom/client';
|
|
5
|
+
import LDModalView from './LDModalView.js';
|
|
6
|
+
const LDModal = (options) => {
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
const container = document.createElement('div');
|
|
9
|
+
document.body.appendChild(container);
|
|
10
|
+
const root = createRoot(container);
|
|
11
|
+
const closeModal = () => {
|
|
12
|
+
root.unmount();
|
|
13
|
+
container.remove();
|
|
14
|
+
};
|
|
15
|
+
const ModalHost = () => {
|
|
16
|
+
const [open, setOpen] = useState(true);
|
|
17
|
+
const closingRef = useRef(false);
|
|
18
|
+
const close = async (value) => {
|
|
19
|
+
if (closingRef.current)
|
|
20
|
+
return;
|
|
21
|
+
if (options.onBeforeClose) {
|
|
22
|
+
const canClose = await options.onBeforeClose();
|
|
23
|
+
if (!canClose)
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
closingRef.current = true;
|
|
27
|
+
setOpen(false);
|
|
28
|
+
resolve(value);
|
|
29
|
+
setTimeout(closeModal, 300);
|
|
30
|
+
};
|
|
31
|
+
const list = options.buttons?.map((btn) => ({
|
|
32
|
+
...btn,
|
|
33
|
+
value: btn.value,
|
|
34
|
+
onClick: async () => {
|
|
35
|
+
let shouldClose = true;
|
|
36
|
+
if (btn.onClick) {
|
|
37
|
+
const res = await btn.onClick();
|
|
38
|
+
if (res === false)
|
|
39
|
+
shouldClose = false;
|
|
40
|
+
}
|
|
41
|
+
if (shouldClose) {
|
|
42
|
+
close(btn.value);
|
|
43
|
+
}
|
|
44
|
+
return false; // LDModalView 내부의 기본 닫기 동작 방지
|
|
45
|
+
},
|
|
46
|
+
}));
|
|
47
|
+
const content = typeof options.content === 'function'
|
|
48
|
+
? options.content({ onClose: close })
|
|
49
|
+
: options.content;
|
|
50
|
+
return (_jsx(LDModalView, { open: open, onOpenChange: (next) => {
|
|
51
|
+
if (!next)
|
|
52
|
+
close(undefined);
|
|
53
|
+
}, name: options.name, title: options.title, description: options.description, size: options.size, icon: options.icon, scrollBehavior: options.scrollBehavior, className: options.className, style: options.style, buttons: list ? { direction: options.buttonsDirection, list } : undefined, children: content }));
|
|
54
|
+
};
|
|
55
|
+
root.render(_jsx(ModalHost, {}));
|
|
56
|
+
});
|
|
71
57
|
};
|
|
72
58
|
export default LDModal;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export type ModalSize = 'small' | 'medium' | 'large' | 'xlarge';
|
|
3
|
+
export interface ModalButtons {
|
|
4
|
+
direction?: 'row' | 'column';
|
|
5
|
+
list?: ModalButton[];
|
|
6
|
+
}
|
|
7
|
+
export interface ModalButton<T = unknown> {
|
|
8
|
+
/** 버튼 텍스트 */
|
|
9
|
+
label: string;
|
|
10
|
+
/** 버튼 식별 값 (onButtonClick에 전달) */
|
|
11
|
+
value: T;
|
|
12
|
+
/** 버튼 스타일 유형 */
|
|
13
|
+
variant?: 'solid' | 'outline' | 'ghost';
|
|
14
|
+
/** 버튼 색상 테마 */
|
|
15
|
+
color?: 'neutral' | 'point' | 'danger';
|
|
16
|
+
/** 클릭 핸들러 (false 반환 시 모달 닫힘 방지) */
|
|
17
|
+
onClick?: () => void | boolean | Promise<void | boolean>;
|
|
18
|
+
}
|
|
19
|
+
export interface LDModalViewProps {
|
|
20
|
+
/** 모달 열림 상태 (제어 컴포넌트) */
|
|
21
|
+
open?: boolean;
|
|
22
|
+
/** 초기 열림 상태 (비제어 컴포넌트) */
|
|
23
|
+
defaultOpen?: boolean;
|
|
24
|
+
/** 열림 상태 변경 시 호출되는 콜백 */
|
|
25
|
+
onOpenChange?: (open: boolean) => void;
|
|
26
|
+
/** 서브 타이틀 (title 위에 표시) */
|
|
27
|
+
name?: string;
|
|
28
|
+
/** 모달 제목 */
|
|
29
|
+
title?: string;
|
|
30
|
+
/** 모달 설명 텍스트 */
|
|
31
|
+
description?: string;
|
|
32
|
+
/** 본문 콘텐츠 */
|
|
33
|
+
children?: ReactNode;
|
|
34
|
+
/** 모달 너비 프리셋 */
|
|
35
|
+
size?: ModalSize;
|
|
36
|
+
/** 너비 직접 지정 (size보다 우선) */
|
|
37
|
+
icon?: 'success' | 'fail';
|
|
38
|
+
/** 하단 버튼 목록 */
|
|
39
|
+
buttons?: ModalButtons;
|
|
40
|
+
/** 스크롤 동작 */
|
|
41
|
+
scrollBehavior?: 'inside' | 'outside';
|
|
42
|
+
/** 추가 CSS 클래스 (모달 패널에 적용) */
|
|
43
|
+
className?: string;
|
|
44
|
+
/** 인라인 스타일 (모달 패널에 적용) */
|
|
45
|
+
style?: React.CSSProperties;
|
|
46
|
+
/** 버튼 클릭 시 해당 버튼의 value를 전달하는 콜백 */
|
|
47
|
+
onButtonClick?: (value: unknown) => void;
|
|
48
|
+
}
|
|
49
|
+
declare const LDModalView: ({ open, defaultOpen, onOpenChange, name, title, description, children, size, icon, buttons, scrollBehavior, className, style, onButtonClick, }: LDModalViewProps) => import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
export default LDModalView;
|
|
51
|
+
//# sourceMappingURL=LDModalView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LDModalView.d.ts","sourceRoot":"","sources":["../../../src/components/LDModal/LDModalView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAO/C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,KAAK,EAAE,CAAC,CAAC;IACT,gBAAgB;IAChB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,eAAe;IACf,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvC,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gBAAgB;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,eAAe;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,aAAa;IACb,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACtC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AA6CD,QAAA,MAAM,WAAW,GAAI,gJAelB,gBAAgB,4CAkKlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import ModalBase from './ModalBase.js';
|
|
4
|
+
import cn from '../../utils/cn.js';
|
|
5
|
+
import LDButton from '../LDButton/LDButton.js';
|
|
6
|
+
import { Check, CircleAlert, X } from 'lucide-react';
|
|
7
|
+
// ── 스타일 매핑 ──
|
|
8
|
+
const sizeClasses = {
|
|
9
|
+
small: 'modal-sm',
|
|
10
|
+
medium: 'modal-md',
|
|
11
|
+
large: 'modal-lg',
|
|
12
|
+
xlarge: 'modal-xl',
|
|
13
|
+
};
|
|
14
|
+
const buttonSizeClasses = {
|
|
15
|
+
small: 'medium',
|
|
16
|
+
medium: 'large',
|
|
17
|
+
large: 'large',
|
|
18
|
+
xlarge: 'large',
|
|
19
|
+
};
|
|
20
|
+
const buttonsGapSizeClasses = {
|
|
21
|
+
small: 'gap-xs',
|
|
22
|
+
medium: 'gap-sm',
|
|
23
|
+
large: 'gap-sm',
|
|
24
|
+
xlarge: 'gap-sm',
|
|
25
|
+
};
|
|
26
|
+
const layoutGapSizeClasses = {
|
|
27
|
+
small: 'gap-lg',
|
|
28
|
+
medium: 'gap-xl',
|
|
29
|
+
large: 'gap-xl',
|
|
30
|
+
xlarge: 'gap-xl',
|
|
31
|
+
};
|
|
32
|
+
const noHeaderPaddingTopSizeClasses = {
|
|
33
|
+
small: 'pt-lg',
|
|
34
|
+
medium: 'pt-xl',
|
|
35
|
+
large: 'pt-xl',
|
|
36
|
+
xlarge: 'pt-xl',
|
|
37
|
+
};
|
|
38
|
+
const statusIconSizeClasses = {
|
|
39
|
+
small: 'size-10',
|
|
40
|
+
medium: 'size-12.5',
|
|
41
|
+
large: 'size-12.5',
|
|
42
|
+
xlarge: 'size-12.5',
|
|
43
|
+
};
|
|
44
|
+
const LDModalView = ({ open, defaultOpen, onOpenChange, name, title, description, children, size = 'small', icon, buttons, scrollBehavior = 'inside', className, style, onButtonClick, }) => {
|
|
45
|
+
const overlayRef = useRef(false);
|
|
46
|
+
const hasHeader = name || title || description || icon;
|
|
47
|
+
const handleClick = async (button) => {
|
|
48
|
+
if (button.onClick) {
|
|
49
|
+
const res = await button.onClick();
|
|
50
|
+
if (res === false)
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
onButtonClick?.(button.value);
|
|
54
|
+
onOpenChange?.(false);
|
|
55
|
+
};
|
|
56
|
+
return (_jsxs(ModalBase.Root, { open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, children: [_jsx(ModalBase.Overlay, {}), _jsx(ModalBase.Content, { className: cn({
|
|
57
|
+
['top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2']: scrollBehavior === 'inside',
|
|
58
|
+
['inset-0 overflow-y-auto flex justify-center items-start py-20']: scrollBehavior === 'outside',
|
|
59
|
+
}), onMouseDown: (e) => (overlayRef.current = e.target === e.currentTarget), onClick: (e) => {
|
|
60
|
+
if (scrollBehavior === 'outside' &&
|
|
61
|
+
e.target === e.currentTarget &&
|
|
62
|
+
overlayRef.current)
|
|
63
|
+
onOpenChange?.(false);
|
|
64
|
+
overlayRef.current = false;
|
|
65
|
+
}, children: _jsxs("div", { className: cn('relative bg-white rounded-2xl p-5', sizeClasses[size], 'mobile:max-w-[calc(100vw-40px)]', scrollBehavior === 'inside' &&
|
|
66
|
+
'flex flex-col overflow-y-auto max-h-[90dvh]', className), style: style, onClick: (e) => e.stopPropagation(), children: [_jsx(ModalBase.Close, { asChild: true, className: "absolute top-4 right-5 text-neutral500 cursor-pointer outline-hidden", children: _jsx(LDButton, { variant: "ghost", color: "neutral", leftIcon: _jsx(X, {}), compact: true }) }), _jsxs("div", { className: cn('w-full flex flex-col shrink-0', scrollBehavior === 'inside' && 'flex-1 min-h-0', layoutGapSizeClasses[size], !hasHeader && noHeaderPaddingTopSizeClasses[size]), children: [hasHeader && (_jsxs("div", { className: "w-full flex gap-5 py-5 items-center flex-col text-center shrink-0", children: [icon === 'success' && (_jsx("div", { className: cn('flex items-center justify-center rounded-full bg-hyper-blue', statusIconSizeClasses[size]), children: _jsx(Check, { className: "text-white" }) })), icon === 'fail' && (_jsx("div", { className: cn('flex items-center justify-center rounded-full bg-danger600', statusIconSizeClasses[size]), children: _jsx(CircleAlert, { className: "text-white" }) })), name && (_jsx("span", { className: "display16 bold text-neutral500 whitespace-pre-wrap", children: name })), title && (_jsx(ModalBase.Title, { className: "display28 bold whitespace-pre-wrap text-center", children: title })), description && (_jsx(ModalBase.Description, { className: "display14 text-neutral500 whitespace-pre-wrap text-center", children: description }))] })), children && (_jsx("div", { className: cn(scrollBehavior === 'inside' &&
|
|
67
|
+
'flex-1 min-h-10 overflow-y-auto'), children: children })), buttons?.list && buttons?.list?.length > 0 && (_jsx("div", { className: cn('flex mobile:flex-1 mobile:flex-col mobile:items-center', buttons.direction === 'column' ? 'flex-col' : 'flex-row', buttonsGapSizeClasses[size]), children: buttons?.list?.map((button, index) => {
|
|
68
|
+
const isFirst = index === 0;
|
|
69
|
+
return (_jsx("div", { className: "flex flex-1 w-full", children: _jsx(LDButton, { type: "button", onClick: () => handleClick(button), variant: button.variant ?? (isFirst ? 'solid' : 'outline'), color: button.color ?? (isFirst ? 'point' : 'neutral'), size: buttonSizeClasses[size], block: true, children: button.label }) }, String(button.value)));
|
|
70
|
+
}) }))] })] }) })] }));
|
|
71
|
+
};
|
|
72
|
+
export default LDModalView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDOTPInput.d.ts","sourceRoot":"","sources":["../../../src/components/LDOTPInput/LDOTPInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AA2Bf,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC9E,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"LDOTPInput.d.ts","sourceRoot":"","sources":["../../../src/components/LDOTPInput/LDOTPInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AA2Bf,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC9E,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAqBD;;;GAGG;AACH,QAAA,MAAM,UAAU,GAAI,sGAWjB,eAAe,4CA4DjB,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,aAAa,GAAI,0BAGpB;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,4CAIA,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,YAAY,GAAI,uBAGnB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,4CA0BA,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,iBAAiB,GAAI,eAAe;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,4CAE/D,CAAC;AAGF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;AACtE,eAAe,UAAU,CAAC"}
|
|
@@ -18,8 +18,9 @@ const sizeClasses = {
|
|
|
18
18
|
xLarge: 'w-[64px] h-[64px] display20',
|
|
19
19
|
};
|
|
20
20
|
const variantClasses = {
|
|
21
|
-
filled: 'bg-lb50
|
|
22
|
-
outline: 'bg-transparent
|
|
21
|
+
filled: 'bg-lb50 outline-2 outline-transparent [outline-style:solid] -outline-offset-2 text-lb900',
|
|
22
|
+
outline: 'bg-transparent outline-1 outline-mono200 [outline-style:solid] -outline-offset-1',
|
|
23
|
+
// ghost는 하단 밑줄(border-b-2)이라 전체 링인 outline으로 대체 불가 → 유지
|
|
23
24
|
ghost: 'bg-transparent border-b-2 border-mono200 rounded-none',
|
|
24
25
|
};
|
|
25
26
|
// ── Components ──
|
|
@@ -73,7 +74,7 @@ const OTPInputSlot = ({ index, className, }) => {
|
|
|
73
74
|
const { value, focusedIndex, isInvalid, variant, size, disabled } = useOTPInputContext();
|
|
74
75
|
const char = value[index];
|
|
75
76
|
const isActive = focusedIndex === index;
|
|
76
|
-
return (_jsxs("div", { className: cn('relative flex items-center justify-center font-bold transition-all rounded-[5px]', sizeClasses[size], variantClasses[variant], isActive && 'border-lb500 ring-2 ring-lb500
|
|
77
|
+
return (_jsxs("div", { className: cn('relative flex items-center justify-center font-bold transition-all rounded-[5px]', sizeClasses[size], variantClasses[variant], isActive && 'border-lb500 ring-2 ring-lb500', isActive && variant === 'filled' && 'bg-white', isActive && variant === 'ghost' && 'border-lb500', isInvalid && 'border-danger500 text-danger500 bg-tintRed', className), children: [char, isActive && !disabled && (_jsx("div", { className: "absolute inset-y-1/4 w-[2px] bg-lb500 animate-pulse" }))] }));
|
|
77
78
|
};
|
|
78
79
|
/**
|
|
79
80
|
* OTPInputSeparator
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
+
/** 페이지네이션 크기 프리셋 */
|
|
3
|
+
export type PaginationSize = 'small' | 'medium' | 'large';
|
|
2
4
|
export interface LDPaginationProps {
|
|
3
5
|
currentPage: number;
|
|
4
6
|
totalPages: number;
|
|
5
7
|
onPageChange: (page: number) => void;
|
|
6
8
|
numbersToShow?: number;
|
|
9
|
+
/** 페이지네이션 크기 프리셋 (기본 small) */
|
|
10
|
+
size?: PaginationSize;
|
|
7
11
|
className?: string;
|
|
8
12
|
style?: React.CSSProperties;
|
|
9
13
|
}
|
|
10
|
-
declare const LDPagination: ({ currentPage, totalPages, onPageChange, numbersToShow, className, style, }: LDPaginationProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
declare const LDPagination: ({ currentPage, totalPages, onPageChange, numbersToShow, size, className, style, }: LDPaginationProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
15
|
export default LDPagination;
|
|
12
16
|
//# sourceMappingURL=LDPagination.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDPagination.d.ts","sourceRoot":"","sources":["../../../src/components/LDPagination/LDPagination.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"LDPagination.d.ts","sourceRoot":"","sources":["../../../src/components/LDPagination/LDPagination.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,oBAAoB;AACpB,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAY1D,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,QAAA,MAAM,YAAY,GAAI,mFAQnB,iBAAiB,4CAmBnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import PaginationBase from './PaginationBase.js';
|
|
3
3
|
import cn from '../../utils/cn.js';
|
|
4
|
-
|
|
4
|
+
/** size별 내부 버튼 크기/패딩 매핑 */
|
|
5
|
+
const sizePresets = {
|
|
6
|
+
small: { navSize: '2xsmall', itemSize: 'xsmall' },
|
|
7
|
+
medium: { navSize: 'xsmall', itemSize: 'small' },
|
|
8
|
+
large: { navSize: 'small', itemSize: 'medium', itemClassName: 'p-5' },
|
|
9
|
+
};
|
|
10
|
+
const LDPagination = ({ currentPage, totalPages, onPageChange, numbersToShow = 5, size = 'small', className, style, }) => {
|
|
11
|
+
const preset = sizePresets[size];
|
|
12
|
+
return (_jsx(PaginationBase.Provider, { currentPage: currentPage, totalPages: totalPages, onPageChange: onPageChange, children: _jsxs(PaginationBase.Root, { className: cn('py-5', className), style: style, children: [_jsx(PaginationBase.Prev, { size: preset.navSize }), _jsx(PaginationBase.List, { numbersToShow: numbersToShow, size: preset.itemSize, className: preset.itemClassName }), _jsx(PaginationBase.Next, { size: preset.navSize })] }) }));
|
|
13
|
+
};
|
|
5
14
|
export default LDPagination;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import { type ButtonSize } from '../LDButton/LDButton.js';
|
|
2
3
|
interface ProviderProps {
|
|
3
4
|
children: ReactNode;
|
|
4
5
|
currentPage: number;
|
|
@@ -9,28 +10,36 @@ interface RootProps extends HTMLAttributes<HTMLElement> {
|
|
|
9
10
|
children?: ReactNode;
|
|
10
11
|
}
|
|
11
12
|
interface PrevProps {
|
|
13
|
+
/** 이전 버튼 크기 (LDButton size 프리셋) */
|
|
14
|
+
size?: ButtonSize;
|
|
12
15
|
className?: string;
|
|
13
16
|
}
|
|
14
17
|
interface NextProps {
|
|
18
|
+
/** 다음 버튼 크기 (LDButton size 프리셋) */
|
|
19
|
+
size?: ButtonSize;
|
|
15
20
|
className?: string;
|
|
16
21
|
}
|
|
17
22
|
interface ListProps {
|
|
18
23
|
numbersToShow?: number;
|
|
24
|
+
/** 페이지 번호 버튼 크기 (LDButton size 프리셋) */
|
|
25
|
+
size?: ButtonSize;
|
|
19
26
|
className?: string;
|
|
20
27
|
}
|
|
21
28
|
interface ItemProps {
|
|
22
29
|
page: number;
|
|
23
30
|
isActive?: boolean;
|
|
31
|
+
/** 페이지 번호 버튼 크기 (LDButton size 프리셋) */
|
|
32
|
+
size?: ButtonSize;
|
|
24
33
|
onClick?: () => void;
|
|
25
34
|
className?: string;
|
|
26
35
|
}
|
|
27
36
|
declare const PaginationBase: {
|
|
28
37
|
Provider: ({ children, currentPage, totalPages, onPageChange, }: ProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
38
|
Root: ({ className, children, ...props }: RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
|
-
Prev: ({ className }: PrevProps) => import("react/jsx-runtime").JSX.Element;
|
|
31
|
-
Next: ({ className }: NextProps) => import("react/jsx-runtime").JSX.Element;
|
|
32
|
-
List: ({ numbersToShow, className }: ListProps) => import("react/jsx-runtime").JSX.Element;
|
|
33
|
-
Item: ({ page, isActive, onClick, className }: ItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
Prev: ({ size, className }: PrevProps) => import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
Next: ({ size, className }: NextProps) => import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
List: ({ numbersToShow, size, className }: ListProps) => import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
Item: ({ page, isActive, size, onClick, className, }: ItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
34
43
|
};
|
|
35
44
|
export default PaginationBase;
|
|
36
45
|
//# sourceMappingURL=PaginationBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaginationBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDPagination/PaginationBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PaginationBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDPagination/PaginationBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAwBjE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAeD,UAAU,SAAU,SAAQ,cAAc,CAAC,WAAW,CAAC;IACrD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAcD,UAAU,SAAS;IACjB,mCAAmC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,UAAU,SAAS;IACjB,mCAAmC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,UAAU,SAAS;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2BD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8BD,QAAA,MAAM,cAAc;qEA/JjB,aAAa;8CAYiC,SAAS;gCAkBX,SAAS;gCAiCT,SAAS;+CAkCS,SAAS;0DAwCvE,SAAS;CA6BX,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { createContext, useContext } from 'react';
|
|
3
|
+
import { ChevronLeft, ChevronRight } from 'lucide-react';
|
|
3
4
|
import cn from '../../utils/cn.js';
|
|
4
5
|
import LDButton from '../LDButton/LDButton.js';
|
|
5
6
|
import { calculatePaginationOptions } from './paginationUtils.js';
|
|
@@ -12,26 +13,26 @@ const usePaginationContext = () => {
|
|
|
12
13
|
};
|
|
13
14
|
const Provider = ({ children, currentPage, totalPages, onPageChange, }) => (_jsx(PaginationContext, { value: { currentPage, totalPages, onPageChange }, children: children }));
|
|
14
15
|
const Root = ({ className, children, ...props }) => (_jsx("nav", { role: "navigation", "aria-label": "pagination", className: cn('flex flex-row gap-2.5 items-center', className), ...props, children: children }));
|
|
15
|
-
const Prev = ({ className }) => {
|
|
16
|
+
const Prev = ({ size = '2xsmall', className }) => {
|
|
16
17
|
const { currentPage, onPageChange } = usePaginationContext();
|
|
17
18
|
const canPrevious = currentPage > 1;
|
|
18
|
-
return (_jsx(LDButton, { variant: "outline", color: "neutral", size:
|
|
19
|
+
return (_jsx(LDButton, { variant: "outline", color: "neutral", size: size, shape: "capsule", leftIcon: _jsx(ChevronLeft, {}), compact: true, disabled: !canPrevious, onClick: () => onPageChange(currentPage - 1), "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0", className: cn(canPrevious
|
|
19
20
|
? 'bg-neutral100 text-neutral400'
|
|
20
21
|
: 'bg-neutral50 text-neutral200', canPrevious && 'hover:bg-neutral200', className) }));
|
|
21
22
|
};
|
|
22
|
-
const Next = ({ className }) => {
|
|
23
|
+
const Next = ({ size = '2xsmall', className }) => {
|
|
23
24
|
const { currentPage, totalPages, onPageChange } = usePaginationContext();
|
|
24
25
|
const canNext = currentPage < totalPages;
|
|
25
|
-
return (_jsx(LDButton, { variant: "outline", color: "neutral", size:
|
|
26
|
+
return (_jsx(LDButton, { variant: "outline", color: "neutral", size: size, shape: "capsule", leftIcon: _jsx(ChevronRight, {}), disabled: !canNext, compact: true, onClick: () => onPageChange(currentPage + 1), "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0", className: cn(canNext
|
|
26
27
|
? 'bg-neutral100 text-neutral400'
|
|
27
28
|
: 'bg-neutral50 text-neutral200', canNext && 'hover:bg-neutral200', className) }));
|
|
28
29
|
};
|
|
29
|
-
const List = ({ numbersToShow = 5, className }) => {
|
|
30
|
+
const List = ({ numbersToShow = 5, size = 'xsmall', className }) => {
|
|
30
31
|
const { currentPage, totalPages, onPageChange } = usePaginationContext();
|
|
31
32
|
const pages = calculatePaginationOptions(currentPage, totalPages, numbersToShow);
|
|
32
|
-
return (_jsx(_Fragment, { children: pages.map((page, idx) => (_jsx(Item, { page: page, isActive: currentPage === page, onClick: () => onPageChange(page), className: className }, `page_${page}_${idx}`))) }));
|
|
33
|
+
return (_jsx(_Fragment, { children: pages.map((page, idx) => (_jsx(Item, { page: page, isActive: currentPage === page, size: size, onClick: () => onPageChange(page), className: className }, `page_${page}_${idx}`))) }));
|
|
33
34
|
};
|
|
34
|
-
const Item = ({ page, isActive, onClick, className }) => (_jsx(LDButton, { variant: "ghost", shape: "capsule", color: isActive ? 'point' : 'neutral', size:
|
|
35
|
+
const Item = ({ page, isActive, size = 'xsmall', onClick, className, }) => (_jsx(LDButton, { variant: "ghost", shape: "capsule", color: isActive ? 'point' : 'neutral', size: size, compact: true, onClick: onClick, "aria-label": `${page} 페이지`, "aria-current": isActive ? 'page' : undefined, className: cn('outline-none regular', !isActive && 'text-neutral400', className), children: page }));
|
|
35
36
|
// ── Export ──
|
|
36
37
|
const PaginationBase = {
|
|
37
38
|
Provider,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { isValidElement } from 'react';
|
|
3
3
|
import PopoverBase from './PopoverBase.js';
|
|
4
|
-
import LucideIcon from '../Icon/LucideIcon.js';
|
|
5
4
|
import cn from '../../utils/cn.js';
|
|
5
|
+
import { Ellipsis, EllipsisVertical } from 'lucide-react';
|
|
6
6
|
// ── 스타일 매핑 ──
|
|
7
7
|
const itemColorClasses = {
|
|
8
8
|
blue: 'hover:bg-tintBlue text-lb500',
|
|
@@ -16,11 +16,11 @@ const iconSizes = {
|
|
|
16
16
|
};
|
|
17
17
|
const LDPopover = ({ items, content, children, open, onOpenChange, iconSize = 'sm', isHorizontal = false, align = 'end', offset, contentWidth, triggerClassName, popoverClassName, style, }) => {
|
|
18
18
|
const isAsChild = isValidElement(children);
|
|
19
|
-
return (_jsxs(PopoverBase.Root, { open: open, onOpenChange: onOpenChange, children: [_jsx(PopoverBase.Trigger, { asChild: isAsChild, style: style, className: cn('flex items-center justify-center cursor-pointer ld-transition rounded-[5px] outline-none', !isAsChild && '
|
|
19
|
+
return (_jsxs(PopoverBase.Root, { open: open, onOpenChange: onOpenChange, children: [_jsx(PopoverBase.Trigger, { asChild: isAsChild, style: style, className: cn('flex items-center justify-center cursor-pointer ld-transition rounded-[5px] outline-none', !isAsChild && 'p-1 min-h-6 hover:bg-mono100', triggerClassName), children: isAsChild ? (children) : isHorizontal ? (_jsx(Ellipsis, { size: iconSizes[iconSize], className: "text-neutral500" })) : (_jsx(EllipsisVertical, { size: iconSizes[iconSize], className: "text-neutral500" })) }), _jsx(PopoverBase.Content, { align: align, sideOffset: offset, style: {
|
|
20
20
|
width: contentWidth === 'trigger'
|
|
21
21
|
? 'var(--radix-popover-trigger-width)'
|
|
22
22
|
: contentWidth,
|
|
23
|
-
}, className: cn('min-w-
|
|
23
|
+
}, className: cn('min-w-40 rounded-[5px] bg-white border border-mono100 p-xs flex flex-col gap-xs z-50 shadow-lg', popoverClassName), children: content
|
|
24
24
|
? content
|
|
25
25
|
: items?.map((item, index) => (_jsx("button", { type: "button", className: cn('w-full flex items-center cursor-pointer justify-start px-2 py-1.5 rounded-[5px] ld-transition display12 text-left', itemColorClasses[item.color ?? 'gray']), onClick: (e) => {
|
|
26
26
|
e.stopPropagation();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type RegisterOptions } from 'react-hook-form';
|
|
2
|
+
import { type LDRadioGroupProps } from './LDRadioGroup.js';
|
|
3
|
+
interface LDFormRadioGroupProps extends Omit<LDRadioGroupProps, 'value' | 'onChange'> {
|
|
4
|
+
name: string;
|
|
5
|
+
options?: RegisterOptions;
|
|
6
|
+
customErrorMessage?: string;
|
|
7
|
+
isHiddenErrorMessage?: boolean;
|
|
8
|
+
errorClassName?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
declare const LDFormRadioGroup: ({ name, options, customErrorMessage, isHiddenErrorMessage, errorClassName, disabled, ...props }: LDFormRadioGroupProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default LDFormRadioGroup;
|
|
13
|
+
//# sourceMappingURL=LDFormRadioGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LDFormRadioGroup.d.ts","sourceRoot":"","sources":["../../../src/components/LDRadio/LDFormRadioGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAqB,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAItE,UAAU,qBAAsB,SAAQ,IAAI,CAC1C,iBAAiB,EACjB,OAAO,GAAG,UAAU,CACrB;IACC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,gBAAgB,GAAI,iGAQvB,qBAAqB,4CA8BvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import LDRadioGroup from './LDRadioGroup.js';
|
|
4
4
|
import FormField from '../LDForm/LDFormField.js';
|
|
5
5
|
import FormErrorMessage from '../LDForm/LDFormErrorMessage.js';
|
|
6
|
-
const
|
|
6
|
+
const LDFormRadioGroup = ({ name, options, customErrorMessage = '', isHiddenErrorMessage = true, errorClassName, disabled = false, ...props }) => {
|
|
7
7
|
return (_jsx(FormField, { name: name, options: options, customErrorMessage: customErrorMessage, disabled: disabled, children: ({ field, fieldState }) => (_jsxs("div", { className: "relative", children: [_jsx(LDRadioGroup, { ...props, name: name, value: field.value ?? '', onChange: field.onChange, disabled: disabled, "aria-invalid": field['aria-invalid'], "aria-describedby": field['aria-describedby'] }), !isHiddenErrorMessage && (_jsx(FormErrorMessage, { error: fieldState.error, disabled: disabled, className: errorClassName }))] })) }));
|
|
8
8
|
};
|
|
9
|
-
export default
|
|
9
|
+
export default LDFormRadioGroup;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type InputHTMLAttributes, type Ref } from 'react';
|
|
2
2
|
type RadioSize = 'sm' | 'md';
|
|
3
|
-
type RadioType = 'default' | 'pill';
|
|
3
|
+
type RadioType = 'default' | 'circle' | 'pill';
|
|
4
4
|
export interface LDRadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'checked' | 'disabled'> {
|
|
5
5
|
/** controlled 체크 상태 */
|
|
6
6
|
checked?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDRadio.d.ts","sourceRoot":"","sources":["../../../src/components/LDRadio/LDRadio.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAK3D,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7B,KAAK,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"LDRadio.d.ts","sourceRoot":"","sources":["../../../src/components/LDRadio/LDRadio.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAK3D,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7B,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAkB/C,MAAM,WAAW,YAAa,SAAQ,IAAI,CACxC,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CACzC;IACC,uBAAuB;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB;IAClB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,cAAc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,yCAAyC;IACzC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,aAAa;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AA6FD,QAAA,MAAM,OAAO,GAAI,4GAYd,YAAY,4CAgDd,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -16,13 +16,22 @@ const labelSizeClasses = {
|
|
|
16
16
|
// ── Inner: pill 타입 ──
|
|
17
17
|
const PillInner = ({ label, ref, ...props }) => {
|
|
18
18
|
const { checked } = useRadioContext();
|
|
19
|
-
return (_jsxs(_Fragment, { children: [_jsx(RadioBase.HiddenInput, { ref: ref, ...props }), _jsxs("div", { className: "relative flex items-center", children: [_jsx(RadioBase.Indicator, {
|
|
19
|
+
return (_jsxs(_Fragment, { children: [_jsx(RadioBase.HiddenInput, { ref: ref, ...props }), _jsxs("div", { className: "relative flex items-center", children: [_jsx(RadioBase.Indicator, { iconSize: 16, className: "absolute left-0", iconClassName: cn('shrink-0 ld-transition', checked ? 'opacity-100' : 'opacity-0') }), label && (_jsx(RadioBase.Label, { className: cn('ld-transition text-nowrap', checked ? 'pl-5' : 'pl-sm pr-sm'), children: label }))] })] }));
|
|
20
20
|
};
|
|
21
|
-
// ── Inner: default 타입 ──
|
|
22
|
-
const DefaultInner = ({ size, label, ref, ...props }) => {
|
|
21
|
+
// ── Inner: default, circle 타입 ──
|
|
22
|
+
const DefaultInner = ({ type, size, label, ref, ...props }) => {
|
|
23
23
|
const { checked, disabled } = useRadioContext();
|
|
24
|
-
return (_jsxs(_Fragment, { children: [_jsx(RadioBase.HiddenInput, { ref: ref, ...props }), _jsx(RadioBase.Indicator, {
|
|
25
|
-
|
|
24
|
+
return (_jsxs(_Fragment, { children: [_jsx(RadioBase.HiddenInput, { ref: ref, ...props }), _jsx(RadioBase.Indicator, { type: type, iconSize: checkIconSizes[size], className: cn('flex items-center justify-center rounded-full ld-transition outline-transparent [outline-style:solid] -outline-offset-1 shrink-0', type === 'circle' ? 'outline-1' : 'outline-2', {
|
|
25
|
+
'outline-lb500 bg-lb500': !disabled && checked && type === 'default',
|
|
26
|
+
'bg-white outline-neutral100': !disabled && !checked && type === 'default',
|
|
27
|
+
'bg-white outline-lb500': !disabled && type === 'circle',
|
|
28
|
+
}, disabled && 'outline-neutral200 bg-mono100', radioSizeClasses[size]), iconClassName: cn('shrink-0 ld-transition', {
|
|
29
|
+
'text-neutral300': checked && disabled && type === 'default',
|
|
30
|
+
'text-white': checked && !disabled && type === 'default',
|
|
31
|
+
'bg-neutral300': checked && disabled && type === 'circle',
|
|
32
|
+
'text-lb500 bg-lb500': checked && !disabled && type === 'circle',
|
|
33
|
+
'opacity-0': !checked,
|
|
34
|
+
}) }), label && (_jsx(RadioBase.Label, { className: "text-neutral500", children: label }))] }));
|
|
26
35
|
};
|
|
27
36
|
const LDRadio = ({ checked, defaultChecked, onCheckedChange, size = 'sm', type = 'default', label, disabled = false, className, style, ref, ...props }) => {
|
|
28
37
|
if (type === 'pill') {
|
|
@@ -32,6 +41,6 @@ const LDRadio = ({ checked, defaultChecked, onCheckedChange, size = 'sm', type =
|
|
|
32
41
|
// className을 함수로 받아 Root 내부의 resolved 값을 주입함.
|
|
33
42
|
className: (c) => cn('items-center gap-2 rounded-full py-sm px-[15px] ld-transition display14 bold', c ? 'bg-tintBlue text-lb500' : 'bg-mono100 text-mono500', disabled && 'opacity-50 cursor-not-allowed', className), children: _jsx(PillInner, { label: label, ref: ref, ...props }) }));
|
|
34
43
|
}
|
|
35
|
-
return (_jsx(RadioBase.Root, { checked: checked, defaultChecked: defaultChecked, onCheckedChange: onCheckedChange, disabled: disabled, style: style, className: cn('items-center gap-[5px]', labelSizeClasses[size], className), children: _jsx(DefaultInner, { size: size, label: label, ref: ref, ...props }) }));
|
|
44
|
+
return (_jsx(RadioBase.Root, { checked: checked, defaultChecked: defaultChecked, onCheckedChange: onCheckedChange, disabled: disabled, style: style, className: cn('items-center gap-[5px]', labelSizeClasses[size], className), children: _jsx(DefaultInner, { type: type, size: size, label: label, ref: ref, ...props }) }));
|
|
36
45
|
};
|
|
37
46
|
export default LDRadio;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDRadioGroup.d.ts","sourceRoot":"","sources":["../../../src/components/LDRadio/LDRadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,QAAA,MAAM,YAAY,GAAI,6IAYnB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"LDRadioGroup.d.ts","sourceRoot":"","sources":["../../../src/components/LDRadio/LDRadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,QAAA,MAAM,YAAY,GAAI,6IAYnB,iBAAiB,4CAwBnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -2,6 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import LDRadio from './LDRadio.js';
|
|
3
3
|
import cn from '../../utils/cn.js';
|
|
4
4
|
const LDRadioGroup = ({ items, value, onChange, disabled = false, type = 'pill', size = 'sm', name, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedby, className, style, }) => {
|
|
5
|
-
return (_jsx("div", { role: "radiogroup", "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, className: cn('flex flex-row gap-
|
|
5
|
+
return (_jsx("div", { role: "radiogroup", "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, className: cn('flex flex-row gap-5'), style: style, children: items.map((option) => (_jsx(LDRadio, { name: name, type: type, size: size, checked: value === option.value, className: className, onCheckedChange: () => onChange?.(option.value), label: option.label, disabled: disabled || option.disabled }, option.value))) }));
|
|
6
6
|
};
|
|
7
7
|
export default LDRadioGroup;
|