@loword/loword-design-system 0.0.10 → 0.0.13
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/LDAccordion/AccordionBase.d.ts +41 -0
- package/dist/components/LDAccordion/AccordionBase.d.ts.map +1 -0
- package/dist/components/LDAccordion/AccordionBase.js +24 -0
- package/dist/components/LDAccordion/LDAccordion.d.ts +31 -0
- package/dist/components/LDAccordion/LDAccordion.d.ts.map +1 -0
- package/dist/components/LDAccordion/LDAccordion.js +21 -0
- package/dist/components/LDAutoComplete/AutoCompleteBase.js +6 -6
- package/dist/components/LDAvatar/LDAvatar.d.ts +1 -1
- package/dist/components/LDAvatar/LDAvatar.d.ts.map +1 -1
- package/dist/components/LDAvatar/LDAvatar.js +19 -10
- 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/CalendarBase.d.ts +17 -0
- package/dist/components/LDCalendar/CalendarBase.d.ts.map +1 -0
- package/dist/components/LDCalendar/CalendarBase.js +49 -0
- package/dist/components/LDCalendar/LDCalendar.d.ts +8 -14
- package/dist/components/LDCalendar/LDCalendar.d.ts.map +1 -1
- package/dist/components/LDCalendar/LDCalendar.js +51 -39
- package/dist/components/LDCarousel/CarouselBase.d.ts +3 -3
- package/dist/components/LDCarousel/CarouselBase.d.ts.map +1 -1
- package/dist/components/LDCarousel/CarouselBase.js +12 -6
- package/dist/components/LDCarousel/LDCarousel.d.ts +7 -8
- package/dist/components/LDCarousel/LDCarousel.d.ts.map +1 -1
- package/dist/components/LDCarousel/LDCarousel.js +2 -2
- 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 +4 -4
- package/dist/components/LDCheckbox/LDCheckbox.d.ts +2 -5
- package/dist/components/LDCheckbox/LDCheckbox.d.ts.map +1 -1
- package/dist/components/LDCheckbox/LDCheckbox.js +66 -8
- package/dist/components/LDCheckbox/LDCheckboxGroup.d.ts +3 -3
- package/dist/components/LDCheckbox/LDCheckboxGroup.d.ts.map +1 -1
- package/dist/components/LDCheckbox/LDCheckboxGroup.js +11 -2
- package/dist/components/LDCheckbox/LDFormCheckbox.d.ts +12 -0
- package/dist/components/LDCheckbox/LDFormCheckbox.d.ts.map +1 -0
- package/dist/components/LDCheckbox/LDFormCheckbox.js +8 -0
- package/dist/components/LDCheckbox/LDFormCheckboxGroup.d.ts +11 -0
- package/dist/components/LDCheckbox/LDFormCheckboxGroup.d.ts.map +1 -0
- package/dist/components/LDCheckbox/LDFormCheckboxGroup.js +8 -0
- package/dist/components/LDDataCalendar/DataCalendarBase.d.ts +17 -1
- package/dist/components/LDDataCalendar/DataCalendarBase.d.ts.map +1 -1
- package/dist/components/LDDataCalendar/DataCalendarBase.js +34 -4
- package/dist/components/LDDataCalendar/LDDataCalendar.d.ts +27 -10
- package/dist/components/LDDataCalendar/LDDataCalendar.d.ts.map +1 -1
- package/dist/components/LDDataCalendar/LDDataCalendar.js +8 -8
- 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.d.ts +2 -0
- package/dist/components/LDDrawer/LDDrawer.d.ts.map +1 -1
- package/dist/components/LDDrawer/LDDrawer.js +2 -2
- package/dist/components/LDEditor/LDEditor.d.ts.map +1 -1
- package/dist/components/LDEditor/LDEditor.js +94 -54
- package/dist/components/LDEmpty/EmptyBase.d.ts +19 -0
- package/dist/components/LDEmpty/EmptyBase.d.ts.map +1 -0
- package/dist/components/LDEmpty/EmptyBase.js +18 -0
- package/dist/components/LDEmpty/LDEmpty.d.ts +35 -0
- package/dist/components/LDEmpty/LDEmpty.d.ts.map +1 -0
- package/dist/components/LDEmpty/LDEmpty.js +30 -0
- 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 +21 -21
- package/dist/components/LDFileUpload/LDFileUpload.d.ts +3 -0
- package/dist/components/LDFileUpload/LDFileUpload.d.ts.map +1 -1
- package/dist/components/LDFileUpload/LDFileUpload.js +3 -3
- package/dist/components/LDFileUpload/LDFileUploadList.d.ts +3 -0
- package/dist/components/LDFileUpload/LDFileUploadList.d.ts.map +1 -1
- package/dist/components/LDFileUpload/LDFileUploadList.js +1 -3
- package/dist/components/LDFileUpload/LDImageUpload.d.ts +5 -0
- package/dist/components/LDFileUpload/LDImageUpload.d.ts.map +1 -1
- package/dist/components/LDFileUpload/LDImageUpload.js +5 -3
- package/dist/components/LDFileUpload/LDImageUploadList.d.ts +3 -0
- package/dist/components/LDFileUpload/LDImageUploadList.d.ts.map +1 -1
- package/dist/components/LDFileUpload/LDImageUploadList.js +1 -3
- 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/InputBase.d.ts +5 -3
- package/dist/components/LDInput/InputBase.d.ts.map +1 -1
- package/dist/components/LDInput/InputBase.js +4 -4
- 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 +17 -14
- package/dist/components/LDInput/LDInput.d.ts +10 -3
- package/dist/components/LDInput/LDInput.d.ts.map +1 -1
- package/dist/components/LDInput/LDInput.js +114 -50
- package/dist/components/LDLNB/LDLNB.d.ts +42 -0
- package/dist/components/LDLNB/LDLNB.d.ts.map +1 -0
- package/dist/components/LDLNB/LDLNB.js +34 -0
- package/dist/components/LDLNB/LDLNBBase.d.ts +5 -13
- package/dist/components/LDLNB/LDLNBBase.d.ts.map +1 -1
- package/dist/components/LDLNB/LDLNBBase.js +52 -18
- package/dist/components/LDMenuBar/LDMenuBar.d.ts +33 -19
- package/dist/components/LDMenuBar/LDMenuBar.d.ts.map +1 -1
- package/dist/components/LDMenuBar/LDMenuBar.js +13 -27
- package/dist/components/LDMenuBar/MenuBarBase.d.ts +4 -5
- package/dist/components/LDMenuBar/MenuBarBase.d.ts.map +1 -1
- package/dist/components/LDMenuBar/MenuBarBase.js +12 -14
- package/dist/components/LDModal/LDModal.d.ts +20 -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 +59 -0
- package/dist/components/LDModal/LDModalView.d.ts.map +1 -0
- package/dist/components/LDModal/LDModalView.js +72 -0
- package/dist/components/LDNotification/LDNotification.d.ts +40 -0
- package/dist/components/LDNotification/LDNotification.d.ts.map +1 -0
- package/dist/components/LDNotification/LDNotification.js +76 -0
- package/dist/components/LDNotification/NotificationBase.d.ts +29 -0
- package/dist/components/LDNotification/NotificationBase.d.ts.map +1 -0
- package/dist/components/LDNotification/NotificationBase.js +27 -0
- package/dist/components/LDOTPInput/LDFormOTPInput.d.ts +15 -0
- package/dist/components/LDOTPInput/LDFormOTPInput.d.ts.map +1 -0
- package/dist/components/LDOTPInput/LDFormOTPInput.js +8 -0
- package/dist/components/LDOTPInput/LDOTPInput.d.ts +10 -22
- package/dist/components/LDOTPInput/LDOTPInput.d.ts.map +1 -1
- package/dist/components/LDOTPInput/LDOTPInput.js +44 -72
- package/dist/components/LDOTPInput/OTPInputBase.d.ts +46 -0
- package/dist/components/LDOTPInput/OTPInputBase.d.ts.map +1 -0
- package/dist/components/LDOTPInput/OTPInputBase.js +48 -0
- 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 +3 -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.d.ts +1 -1
- package/dist/components/LDPopover/LDPopover.d.ts.map +1 -1
- package/dist/components/LDPopover/LDPopover.js +8 -7
- package/dist/components/LDProgressBar/LDProgressBar.d.ts +16 -0
- package/dist/components/LDProgressBar/LDProgressBar.d.ts.map +1 -0
- package/dist/components/LDProgressBar/LDProgressBar.js +9 -0
- package/dist/components/LDProgressBar/ProgressBarBase.d.ts +11 -0
- package/dist/components/LDProgressBar/ProgressBarBase.d.ts.map +1 -0
- package/dist/components/LDProgressBar/ProgressBarBase.js +10 -0
- package/dist/components/LDRadio/LDFormRadioGroup.d.ts +11 -0
- package/dist/components/LDRadio/LDFormRadioGroup.d.ts.map +1 -0
- package/dist/components/LDRadio/LDFormRadioGroup.js +8 -0
- package/dist/components/LDRadio/LDRadio.d.ts +2 -2
- package/dist/components/LDRadio/LDRadio.d.ts.map +1 -1
- package/dist/components/LDRadio/LDRadio.js +70 -15
- package/dist/components/LDRadio/LDRadioGroup.d.ts +5 -3
- package/dist/components/LDRadio/LDRadioGroup.d.ts.map +1 -1
- package/dist/components/LDRadio/LDRadioGroup.js +11 -2
- 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/LDSectionNav/LDSectionNav.d.ts +11 -0
- package/dist/components/LDSectionNav/LDSectionNav.d.ts.map +1 -0
- package/dist/components/LDSectionNav/LDSectionNav.js +11 -0
- package/dist/components/LDSectionNav/SectionNavBase.d.ts +20 -0
- package/dist/components/LDSectionNav/SectionNavBase.d.ts.map +1 -0
- package/dist/components/LDSectionNav/SectionNavBase.js +53 -0
- 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/LDCollapsibleTanstackTable.d.ts.map +1 -1
- package/dist/components/LDTable/LDCollapsibleTanstackTable.js +12 -9
- package/dist/components/LDTable/LDTable.d.ts.map +1 -1
- package/dist/components/LDTable/LDTable.js +1 -1
- package/dist/components/LDTable/LDTanstackTable.d.ts.map +1 -1
- package/dist/components/LDTable/LDTanstackTable.js +6 -7
- 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 +3 -3
- package/dist/components/LDToast/LDToast.js +1 -1
- package/dist/components/LDToast/LDToaster.d.ts +2 -1
- package/dist/components/LDToast/LDToaster.d.ts.map +1 -1
- package/dist/components/LDToast/LDToaster.js +2 -2
- package/dist/components/LDToggleButton/LDFormToggleButton.d.ts +10 -0
- package/dist/components/LDToggleButton/LDFormToggleButton.d.ts.map +1 -0
- package/dist/components/LDToggleButton/LDFormToggleButton.js +8 -0
- package/dist/components/LDTooltip/LDTooltip.js +1 -1
- package/dist/components/LDTooltip/TooltipBase.d.ts +6 -2
- package/dist/components/LDTooltip/TooltipBase.d.ts.map +1 -1
- package/dist/components/LDTooltip/TooltipBase.js +4 -4
- package/dist/index.css +913 -307
- package/dist/index.d.ts +28 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -20
- 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 +14 -2
- package/src/styles/carousel.css +15 -14
- package/src/styles/components/button.css +2 -2
- package/src/styles/components/editor.css +6 -0
- package/src/styles/components/index.css +1 -0
- package/src/styles/components/input.css +16 -2
- package/src/styles/components/select.css +61 -0
- package/src/styles/components/shared.css +6 -6
- package/src/styles/motion.css +115 -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/FormCheckbox.js +0 -9
- package/dist/components/LDCheckbox/FormCheckboxGroup.d.ts +0 -13
- package/dist/components/LDCheckbox/FormCheckboxGroup.d.ts.map +0 -1
- package/dist/components/LDCheckbox/FormCheckboxGroup.js +0 -9
- 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/LDRadio/FormRadioGroup.js +0 -9
- 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
- package/dist/components/LDToggleButton/FormToggleButton.js +0 -9
|
@@ -1,21 +1,35 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import type { ElementType, ReactNode } from 'react';
|
|
2
|
+
/** 메뉴바 항목 */
|
|
3
|
+
export interface LDMenuBarItem {
|
|
4
|
+
/** 항목 구분 값 (열림 상태 식별) */
|
|
5
|
+
value: string;
|
|
6
|
+
/** Trigger에 표시할 라벨/아이콘 */
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
/** 드롭다운 내용. 있으면 드롭다운 항목, 없으면 단순 링크가 된다 */
|
|
9
|
+
content?: ReactNode;
|
|
10
|
+
/** content를 헤더 전체 폭(mega) 패널 + 딤으로 표시 */
|
|
11
|
+
mega?: boolean;
|
|
12
|
+
/** 단순 링크일 때 Trigger 렌더 엘리먼트 (라우터 Link 주입용, 기본 'button') */
|
|
13
|
+
as?: ElementType;
|
|
14
|
+
/** 단순 링크 href */
|
|
15
|
+
href?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface LDMenuBarProps {
|
|
18
|
+
/** 메뉴바 항목 목록 */
|
|
19
|
+
items: LDMenuBarItem[];
|
|
20
|
+
/** 드롭다운 열림 트리거 방식. 기본 'hover' */
|
|
21
|
+
trigger?: 'hover' | 'click';
|
|
22
|
+
/** 좌측 로고 슬롯 */
|
|
23
|
+
logo?: ReactNode;
|
|
24
|
+
/** 우측 액션 슬롯 (알림·아바타 등) */
|
|
25
|
+
actions?: ReactNode;
|
|
26
|
+
/** Root에 적용할 추가 className */
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 가로 헤더형 메뉴바. items로 네비게이션을 구성하고 logo/actions 슬롯에 임의 콘텐츠를 주입한다.
|
|
31
|
+
* item.content가 있으면 드롭다운, 없으면 단순 링크. item.mega면 헤더 전체 폭 패널로 열린다.
|
|
32
|
+
*/
|
|
33
|
+
declare const LDMenuBar: ({ items, trigger, logo, actions, className, }: LDMenuBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
20
34
|
export default LDMenuBar;
|
|
21
35
|
//# sourceMappingURL=LDMenuBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDMenuBar.d.ts","sourceRoot":"","sources":["../../../src/components/LDMenuBar/LDMenuBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"LDMenuBar.d.ts","sourceRoot":"","sources":["../../../src/components/LDMenuBar/LDMenuBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOpD,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,yCAAyC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB;IAChB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,eAAe;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsBD;;;GAGG;AACH,QAAA,MAAM,SAAS,GAAI,+CAMhB,cAAc,4CAuDhB,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -1,33 +1,19 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import cn from '../../utils/cn.js';
|
|
4
4
|
import MenuBarBase from './MenuBarBase.js';
|
|
5
|
-
|
|
6
|
-
// className을 주면 cn으로 머지되어 소비측 오버라이드 우선.
|
|
7
|
-
const Root = ({ className, ...props }) => (_jsx(MenuBarBase.Root, { className: cn('relative flex items-center justify-between w-full h-[64px] min-h-[64px]', 'px-md gap-10 bg-white border-b border-mono100 sticky top-0 z-50', className), ...props }));
|
|
8
|
-
const Logo = ({ className, ...props }) => (_jsx(MenuBarBase.Logo, { className: cn('flex items-center shrink-0', className), ...props }));
|
|
9
|
-
const Nav = ({ className, ...props }) => (_jsx(MenuBarBase.Nav, { className: cn('flex flex-1 items-center justify-start gap-xs', className), ...props }));
|
|
10
|
-
const Item = ({ className, ...props }) => (_jsx(MenuBarBase.Item, { className: className, ...props }));
|
|
11
|
-
const Trigger = ({ className, ...props }) => (_jsx(MenuBarBase.Trigger, { className: cn('flex items-center gap-xs px-sm py-xs rounded-[5px] cursor-pointer', 'display16 bold text-mono700 hover:bg-mono100 hover:text-mono900 ld-transition', 'aria-expanded:bg-tintBlue aria-expanded:text-blue400', className), ...props }));
|
|
5
|
+
const TRIGGER_CLASS = cn('flex items-center gap-xs px-sm py-xs rounded-[5px] cursor-pointer', 'display16 bold text-mono700 hover:bg-mono100 hover:text-mono900 ld-transition', 'aria-expanded:bg-tintBlue aria-expanded:text-blue400');
|
|
12
6
|
// item 모드: 항목 바로 아래 작은 드롭다운
|
|
13
|
-
const
|
|
14
|
-
// mega 모드: 헤더 전체 폭
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
Logo,
|
|
25
|
-
Nav,
|
|
26
|
-
Item,
|
|
27
|
-
Trigger,
|
|
28
|
-
Content,
|
|
29
|
-
MegaContent,
|
|
30
|
-
Actions,
|
|
31
|
-
Separator,
|
|
7
|
+
const DROPDOWN_CLASS = cn('absolute top-full left-0 mt-xs min-w-[180px] z-50', 'flex flex-col gap-xs p-xs rounded-[8px] bg-white border border-mono100 shadow-lg');
|
|
8
|
+
// mega 모드: fixed로 부모 li(relative)를 벗어나 헤더 전체 폭 차지. top-16 = 헤더 높이 64px.
|
|
9
|
+
const MEGA_CLASS = cn('fixed left-0 right-0 top-16 z-50', 'p-lg bg-white border-b border-mono100 shadow-lg');
|
|
10
|
+
const MEGA_BACKDROP_CLASS = 'fixed left-0 right-0 top-16 bottom-0 z-40 bg-black/40';
|
|
11
|
+
/**
|
|
12
|
+
* 가로 헤더형 메뉴바. items로 네비게이션을 구성하고 logo/actions 슬롯에 임의 콘텐츠를 주입한다.
|
|
13
|
+
* item.content가 있으면 드롭다운, 없으면 단순 링크. item.mega면 헤더 전체 폭 패널로 열린다.
|
|
14
|
+
*/
|
|
15
|
+
const LDMenuBar = ({ items, trigger = 'hover', logo, actions, className, }) => {
|
|
16
|
+
return (_jsxs(MenuBarBase.Root, { trigger: trigger, className: cn('relative flex items-center justify-between w-full h-[64px] min-h-[64px]', 'px-md gap-10 bg-white border-b border-mono100 sticky top-0 z-50', className), children: [logo && (_jsx(MenuBarBase.Logo, { className: "flex items-center shrink-0", children: logo })), _jsx(MenuBarBase.Nav, { className: "flex flex-1 items-center justify-start gap-xs", children: items.map((item) => (_jsxs(MenuBarBase.Item, { value: item.value, hasDropdown: !!item.content, children: [_jsx(MenuBarBase.Trigger, { as: item.content ? undefined : item.as, href: item.content ? undefined : item.href, className: TRIGGER_CLASS, children: item.label }), item.content &&
|
|
17
|
+
(item.mega ? (_jsx(MenuBarBase.Content, { backdrop: true, backdropClassName: MEGA_BACKDROP_CLASS, className: MEGA_CLASS, children: item.content })) : (_jsx(MenuBarBase.Content, { className: DROPDOWN_CLASS, children: item.content })))] }, item.value))) }), actions && (_jsx(MenuBarBase.Actions, { className: "flex items-center gap-sm shrink-0", children: actions }))] }));
|
|
32
18
|
};
|
|
33
19
|
export default LDMenuBar;
|
|
@@ -10,6 +10,8 @@ interface SlotProps {
|
|
|
10
10
|
}
|
|
11
11
|
interface ItemProps {
|
|
12
12
|
value: string;
|
|
13
|
+
/** 드롭다운(Content/MegaContent)을 가진 항목이면 true. 지정 시 hover/click으로 열리고 Trigger가 토글로 동작한다. 없으면 단순 링크. */
|
|
14
|
+
hasDropdown?: boolean;
|
|
13
15
|
children: ReactNode;
|
|
14
16
|
className?: string;
|
|
15
17
|
}
|
|
@@ -28,12 +30,9 @@ declare const MenuBarBase: {
|
|
|
28
30
|
Root: ({ children, className, trigger }: RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
31
|
Logo: ({ children, className }: SlotProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
32
|
Nav: ({ children, className }: SlotProps) => import("react/jsx-runtime").JSX.Element;
|
|
31
|
-
Item: ({ value, children, className }: ItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
Item: ({ value, hasDropdown, children, className, }: ItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
32
34
|
Trigger: ({ as: Comp, children, className, ...rest }: TriggerProps) => import("react/jsx-runtime").JSX.Element;
|
|
33
|
-
Content: {
|
|
34
|
-
({ children, className, backdrop, backdropClassName, }: ContentProps): import("react/jsx-runtime").JSX.Element | null;
|
|
35
|
-
displayName: string;
|
|
36
|
-
};
|
|
35
|
+
Content: ({ children, className, backdrop, backdropClassName, }: ContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
37
36
|
Actions: ({ children, className }: SlotProps) => import("react/jsx-runtime").JSX.Element;
|
|
38
37
|
Separator: ({ className }: {
|
|
39
38
|
className?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuBarBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDMenuBar/MenuBarBase.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MenuBarBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDMenuBar/MenuBarBase.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAwCpD,UAAU,SAAS;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC7B;AAqBD,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyBD,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAuCD,UAAU,YAAa,SAAQ,SAAS;IACtC,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAmCD,QAAA,MAAM,WAAW;6CA3JyC,SAAS;oCAwB5B,SAAS;mCAIV,SAAS;yDA0B5C,SAAS;0DA8BT,YAAY;qEA2CZ,YAAY;uCA/F2B,SAAS;+BAIjB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;CAgIvD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { createContext, useContext, useState } from 'react';
|
|
4
4
|
import cn from '../../utils/cn.js';
|
|
5
|
-
const CONTENT_NAME = 'MenuBarContent';
|
|
6
5
|
const MenuBarContext = createContext(null);
|
|
7
6
|
const useMenuBarContext = () => {
|
|
8
7
|
const ctx = useContext(MenuBarContext);
|
|
@@ -26,21 +25,18 @@ const Logo = ({ children, className }) => (_jsx("div", { className: className, c
|
|
|
26
25
|
const Nav = ({ children, className }) => (_jsx("ul", { className: className, children: children }));
|
|
27
26
|
const Actions = ({ children, className }) => (_jsx("div", { className: className, children: children }));
|
|
28
27
|
const Separator = ({ className }) => (_jsx("span", { "aria-hidden": true, className: className }));
|
|
29
|
-
const Item = ({ value, children, className }) => {
|
|
28
|
+
const Item = ({ value, hasDropdown = false, children, className, }) => {
|
|
30
29
|
const { trigger, setOpenValue } = useMenuBarContext();
|
|
31
|
-
|
|
32
|
-
const hasContent = Children.toArray(children).some((c) => isValidElement(c) &&
|
|
33
|
-
c.type?.displayName === CONTENT_NAME);
|
|
34
|
-
const hoverProps = trigger === 'hover' && hasContent
|
|
30
|
+
const hoverProps = trigger === 'hover' && hasDropdown
|
|
35
31
|
? { onMouseEnter: () => setOpenValue(value) }
|
|
36
32
|
: {};
|
|
37
|
-
return (_jsx(ItemContext, { value: { value,
|
|
33
|
+
return (_jsx(ItemContext, { value: { value, hasDropdown }, children: _jsx("li", { className: cn('relative', className), ...hoverProps, children: children }) }));
|
|
38
34
|
};
|
|
39
35
|
const Trigger = ({ as: Comp = 'button', children, className, ...rest }) => {
|
|
40
36
|
const { trigger, setOpenValue, isOpen } = useMenuBarContext();
|
|
41
|
-
const { value,
|
|
37
|
+
const { value, hasDropdown } = useItemContext();
|
|
42
38
|
// 드롭다운 없는 항목 → 순수 링크/버튼 (토글 안 함)
|
|
43
|
-
if (!
|
|
39
|
+
if (!hasDropdown) {
|
|
44
40
|
return (_jsx(Comp, { className: className, ...rest, children: children }));
|
|
45
41
|
}
|
|
46
42
|
const handleClick = trigger === 'click'
|
|
@@ -51,11 +47,13 @@ const Trigger = ({ as: Comp = 'button', children, className, ...rest }) => {
|
|
|
51
47
|
const Content = ({ children, className, backdrop, backdropClassName, }) => {
|
|
52
48
|
const { isOpen, setOpenValue } = useMenuBarContext();
|
|
53
49
|
const { value } = useItemContext();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
const open = isOpen(value);
|
|
51
|
+
// 항상 마운트해두고 data-open으로 opacity를 300ms 전환(열림 fade-in / 닫힘 fade-out).
|
|
52
|
+
// 닫힘 상태에선 inert로 클릭·포커스·스크린리더에서 제외한다 — 안 그러면 opacity:0인
|
|
53
|
+
// mega 딤이 화면 전체 클릭을 가로챈다.
|
|
54
|
+
const fade = 'ld-transition data-[open=false]:opacity-0';
|
|
55
|
+
return (_jsxs(_Fragment, { children: [backdrop && (_jsx("div", { "aria-hidden": true, "data-open": open, inert: !open, onClick: () => setOpenValue(null), className: cn(fade, backdropClassName) })), _jsx("div", { "data-open": open, inert: !open, className: cn(fade, className), children: children })] }));
|
|
57
56
|
};
|
|
58
|
-
Content.displayName = CONTENT_NAME;
|
|
59
57
|
const MenuBarBase = {
|
|
60
58
|
Root,
|
|
61
59
|
Logo,
|
|
@@ -1,51 +1,31 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export
|
|
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 LDModalProps {
|
|
20
|
-
/** 모달 열림 상태 (제어 컴포넌트) */
|
|
21
|
-
open?: boolean;
|
|
22
|
-
/** 초기 열림 상태 (비제어 컴포넌트) */
|
|
23
|
-
defaultOpen?: boolean;
|
|
24
|
-
/** 열림 상태 변경 시 호출되는 콜백 */
|
|
25
|
-
onOpenChange?: (open: boolean) => void;
|
|
26
|
-
/** 서브 타이틀 (title 위에 표시) */
|
|
1
|
+
import { TModalClassNames, type ModalSize } from './LDModalView.js';
|
|
2
|
+
export interface LDModalOptions<T = undefined> {
|
|
27
3
|
name?: string;
|
|
28
|
-
/** 모달 제목 */
|
|
29
4
|
title?: string;
|
|
30
|
-
/** 모달 설명 텍스트 */
|
|
31
5
|
description?: string;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
6
|
+
content?: React.ReactNode | ((args: {
|
|
7
|
+
onClose: (value?: T) => void;
|
|
8
|
+
}) => React.ReactNode);
|
|
9
|
+
buttons?: {
|
|
10
|
+
value: T;
|
|
11
|
+
label: string;
|
|
12
|
+
variant?: 'solid' | 'outline' | 'ghost';
|
|
13
|
+
color?: 'neutral' | 'point' | 'danger';
|
|
14
|
+
onClick?: () => void | boolean | Promise<void | boolean>;
|
|
15
|
+
}[];
|
|
16
|
+
/** 버튼 배치 방향 */
|
|
17
|
+
buttonsDirection?: 'row' | 'column';
|
|
35
18
|
size?: ModalSize;
|
|
36
|
-
/** 너비 직접 지정 (size보다 우선) */
|
|
37
19
|
icon?: 'success' | 'fail';
|
|
38
|
-
/**
|
|
39
|
-
buttons?: ModalButtons;
|
|
40
|
-
/** 스크롤 동작 */
|
|
20
|
+
/** 스크롤 동작 (LDModalView와 동일) */
|
|
41
21
|
scrollBehavior?: 'inside' | 'outside';
|
|
42
|
-
/** 추가 CSS 클래스
|
|
22
|
+
/** 모달 패널에 적용할 추가 CSS 클래스 */
|
|
43
23
|
className?: string;
|
|
44
|
-
/** 인라인 스타일 (
|
|
24
|
+
/** 모달 패널 인라인 스타일 (자유 width/height 등) */
|
|
45
25
|
style?: React.CSSProperties;
|
|
46
|
-
|
|
47
|
-
|
|
26
|
+
onBeforeClose?: () => Promise<boolean> | boolean;
|
|
27
|
+
classNames?: TModalClassNames;
|
|
48
28
|
}
|
|
49
|
-
declare const LDModal:
|
|
29
|
+
declare const LDModal: <T = undefined>(options: LDModalOptions<T>) => Promise<T | undefined>;
|
|
50
30
|
export default LDModal;
|
|
51
31
|
//# sourceMappingURL=LDModal.d.ts.map
|
|
@@ -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,EAClB,gBAAgB,EAEhB,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAEvB,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;IACjD,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;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, style: options.style, buttons: list ? { direction: options.buttonsDirection, list } : undefined, classNames: options.classNames, children: content }));
|
|
54
|
+
};
|
|
55
|
+
root.render(_jsx(ModalHost, {}));
|
|
56
|
+
});
|
|
71
57
|
};
|
|
72
58
|
export default LDModal;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export type ModalSize = 'small' | 'medium' | 'large' | 'xlarge';
|
|
3
|
+
export type TModalClassNames = {
|
|
4
|
+
overlay?: string;
|
|
5
|
+
content?: string;
|
|
6
|
+
layout?: string;
|
|
7
|
+
panel?: string;
|
|
8
|
+
close?: string;
|
|
9
|
+
title?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
};
|
|
12
|
+
export interface ModalButtons {
|
|
13
|
+
direction?: 'row' | 'column';
|
|
14
|
+
list?: ModalButton[];
|
|
15
|
+
}
|
|
16
|
+
export interface ModalButton<T = unknown> {
|
|
17
|
+
/** 버튼 텍스트 */
|
|
18
|
+
label: string;
|
|
19
|
+
/** 버튼 식별 값 (onButtonClick에 전달) */
|
|
20
|
+
value: T;
|
|
21
|
+
/** 버튼 스타일 유형 */
|
|
22
|
+
variant?: 'solid' | 'outline' | 'ghost';
|
|
23
|
+
/** 버튼 색상 테마 */
|
|
24
|
+
color?: 'neutral' | 'point' | 'danger';
|
|
25
|
+
/** 클릭 핸들러 (false 반환 시 모달 닫힘 방지) */
|
|
26
|
+
onClick?: () => void | boolean | Promise<void | boolean>;
|
|
27
|
+
}
|
|
28
|
+
export interface LDModalViewProps {
|
|
29
|
+
/** 모달 열림 상태 (제어 컴포넌트) */
|
|
30
|
+
open?: boolean;
|
|
31
|
+
/** 초기 열림 상태 (비제어 컴포넌트) */
|
|
32
|
+
defaultOpen?: boolean;
|
|
33
|
+
/** 열림 상태 변경 시 호출되는 콜백 */
|
|
34
|
+
onOpenChange?: (open: boolean) => void;
|
|
35
|
+
/** 서브 타이틀 (title 위에 표시) */
|
|
36
|
+
name?: string;
|
|
37
|
+
/** 모달 제목 */
|
|
38
|
+
title?: string;
|
|
39
|
+
/** 모달 설명 텍스트 */
|
|
40
|
+
description?: string;
|
|
41
|
+
/** 본문 콘텐츠 */
|
|
42
|
+
children?: ReactNode;
|
|
43
|
+
/** 모달 너비 프리셋 */
|
|
44
|
+
size?: ModalSize;
|
|
45
|
+
/** 너비 직접 지정 (size보다 우선) */
|
|
46
|
+
icon?: 'success' | 'fail';
|
|
47
|
+
/** 하단 버튼 목록 */
|
|
48
|
+
buttons?: ModalButtons;
|
|
49
|
+
/** 스크롤 동작 */
|
|
50
|
+
scrollBehavior?: 'inside' | 'outside';
|
|
51
|
+
/** 인라인 스타일 (모달 패널에 적용) */
|
|
52
|
+
style?: React.CSSProperties;
|
|
53
|
+
/** 버튼 클릭 시 해당 버튼의 value를 전달하는 콜백 */
|
|
54
|
+
onButtonClick?: (value: unknown) => void;
|
|
55
|
+
classNames?: TModalClassNames;
|
|
56
|
+
}
|
|
57
|
+
declare const LDModalView: ({ open, defaultOpen, onOpenChange, name, title, description, children, size, icon, buttons, scrollBehavior, classNames, style, onButtonClick, }: LDModalViewProps) => import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
export default LDModalView;
|
|
59
|
+
//# 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,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,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,0BAA0B;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AA6CD,QAAA,MAAM,WAAW,GAAI,iJAelB,gBAAgB,4CAmLlB,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', classNames, 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, { className: classNames?.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
|
+
}, classNames?.content), 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]', classNames?.layout), style: style, onClick: (e) => e.stopPropagation(), children: [_jsx(ModalBase.Close, { asChild: true, className: cn('absolute top-4 right-5 text-neutral500 cursor-pointer outline-hidden', classNames?.close), 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], classNames?.panel), 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: cn('display28 bold whitespace-pre-wrap text-center', classNames?.title), children: title })), description && (_jsx(ModalBase.Description, { className: cn('display14 text-neutral500 whitespace-pre-wrap text-center', classNames?.description), 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;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type CSSProperties, type ReactNode } from 'react';
|
|
2
|
+
import { type NotificationType } from './NotificationBase.js';
|
|
3
|
+
export type NotificationSize = 'small' | 'medium' | 'large';
|
|
4
|
+
export interface LDNotificationProps {
|
|
5
|
+
/** 트리거로 사용할 노드 — 벨 아이콘, 아바타 등 임의의 ReactNode */
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
/** 배지 표시 방식 — 'dot'이면 점만, 'count'면 숫자로 표시 (기본값 'count') */
|
|
8
|
+
type?: NotificationType;
|
|
9
|
+
/** type='dot'일 때 점을 보여줄지 여부 (기본값 false). type='count'일 땐 사용되지 않음 */
|
|
10
|
+
dot?: boolean;
|
|
11
|
+
/** type='count'일 때 표시할 알림 개수 (기본값 0) */
|
|
12
|
+
count?: number;
|
|
13
|
+
/** type='count'일 때, count가 이 값을 초과하면 `${overflowCount}+`로 표시 (기본값 99) */
|
|
14
|
+
overflowCount?: number;
|
|
15
|
+
/** type='count'일 때, count가 0이어도 배지를 표시할지 여부 (기본값 false) */
|
|
16
|
+
showZero?: boolean;
|
|
17
|
+
/** 기본 위치(우측 상단 모서리)에서 [x, y]만큼 px 이동. x는 오른쪽, y는 아래쪽이 + 방향 */
|
|
18
|
+
offset?: [number, number];
|
|
19
|
+
/** 배지 크기 — 'small' | 'medium' | 'large' (기본값 'medium') */
|
|
20
|
+
size?: NotificationSize;
|
|
21
|
+
/** 트리거와 배지를 함께 감싸는 Root wrapper에 적용할 className */
|
|
22
|
+
className?: string;
|
|
23
|
+
/** 배지(Indicator) 자체에 적용할 className — 색상 등 기본 스타일을 덮어쓸 때 사용 */
|
|
24
|
+
indicatorClassName?: string;
|
|
25
|
+
/**
|
|
26
|
+
* count가 증가하는 순간 트리거(children) wrapper에 잠깐 추가되는 className.
|
|
27
|
+
* 예: `"animate-bell"` — 새 알림이 왔을 때 트리거를 흔드는 등 강조 효과를 주고 싶을 때 사용
|
|
28
|
+
*/
|
|
29
|
+
triggerHighlightClassName?: string;
|
|
30
|
+
/**
|
|
31
|
+
* count가 증가하는 순간 배지(Indicator)에 추가되는 className.
|
|
32
|
+
* 예: `"animate-bounce"`
|
|
33
|
+
*/
|
|
34
|
+
indicatorHighlightClassName?: string;
|
|
35
|
+
/** Root wrapper에 적용할 인라인 스타일 */
|
|
36
|
+
style?: CSSProperties;
|
|
37
|
+
}
|
|
38
|
+
declare const LDNotification: ({ children, type, dot, count, overflowCount, showZero, offset, size, className, indicatorClassName, triggerHighlightClassName, indicatorHighlightClassName, style, }: LDNotificationProps) => import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
export default LDNotification;
|
|
40
|
+
//# sourceMappingURL=LDNotification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LDNotification.d.ts","sourceRoot":"","sources":["../../../src/components/LDNotification/LDNotification.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAyB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,oEAAoE;IACpE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,0DAA0D;IAC1D,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;;;OAGG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gCAAgC;IAChC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAiID,QAAA,MAAM,cAAc,GAAI,sKAcrB,mBAAmB,4CA4BrB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|