pds-dev-kit-web 2.2.205 → 2.2.207

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.
Files changed (26) hide show
  1. package/dist/src/common/hooks/useParentResizeObserver.d.ts +2 -0
  2. package/dist/src/common/hooks/useParentResizeObserver.js +20 -0
  3. package/dist/src/common/hooks/useResizeObserver.d.ts +3 -0
  4. package/dist/src/common/hooks/useResizeObserver.js +27 -0
  5. package/dist/src/common/hooks/useWindowSize.d.ts +4 -0
  6. package/dist/src/common/hooks/useWindowSize.js +22 -0
  7. package/dist/src/common/services/i18n/resources/en.json +2 -0
  8. package/dist/src/common/services/i18n/resources/es.json +2 -0
  9. package/dist/src/common/services/i18n/resources/fil.json +2 -0
  10. package/dist/src/common/services/i18n/resources/index.d.ts +15 -0
  11. package/dist/src/common/services/i18n/resources/ja.json +2 -0
  12. package/dist/src/common/services/i18n/resources/ko.json +3 -0
  13. package/dist/src/common/services/i18n/resources/zh-cn.json +2 -0
  14. package/dist/src/common/services/i18n/resources/zh-tw.json +2 -0
  15. package/dist/src/desktop/components/BoxItem/BoxItem.js +1 -1
  16. package/dist/src/desktop/components/Calendar/Calendar.js +2 -2
  17. package/dist/src/desktop/components/Calendar/MonthlyView.js +138 -100
  18. package/dist/src/desktop/components/Calendar/MultiWeekSchedulesLayer.js +18 -36
  19. package/dist/src/desktop/components/Calendar/timeFormatUtils.js +4 -6
  20. package/dist/src/desktop/layout/LayoutWF/Containers/ContentsContainer/variation/WFA.js +1 -1
  21. package/dist/src/desktop/layout/LayoutWF/Containers/ContentsContainer/variation/WFB.js +1 -1
  22. package/dist/src/desktop/layout/LayoutWF/Containers/ContentsContainer/variation/WFE.js +1 -1
  23. package/dist/src/desktop/layout/LayoutWF/Containers/ContentsContainer/variation/WFL.js +8 -5
  24. package/dist/src/mobile/components/BoxItem/BoxItem.js +1 -1
  25. package/package.json +1 -1
  26. package/release-note.md +2 -3
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare function useParentResizeObserver<T extends HTMLElement>(ref: React.RefObject<T>, callback: () => void, delay?: number): void;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useParentResizeObserver = void 0;
4
+ var react_1 = require("react");
5
+ var useResizeObserver_1 = require("./useResizeObserver");
6
+ function useParentResizeObserver(ref, callback, delay) {
7
+ if (delay === void 0) { delay = 100; }
8
+ (0, react_1.useLayoutEffect)(function () {
9
+ var _a;
10
+ var parent = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.parentElement;
11
+ if (!parent)
12
+ return;
13
+ var debouncedCallback = (0, useResizeObserver_1.debounce)(callback, delay);
14
+ var resizeObserver = new ResizeObserver(debouncedCallback);
15
+ resizeObserver.observe(parent);
16
+ callback();
17
+ return function () { return resizeObserver.disconnect(); };
18
+ }, [ref, callback]);
19
+ }
20
+ exports.useParentResizeObserver = useParentResizeObserver;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ export declare const debounce: (fn: () => void, delay: number) => () => void;
3
+ export declare function useResizeObserver<T extends HTMLElement>(ref: React.RefObject<T>, callback: () => void, delay?: number): void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useResizeObserver = exports.debounce = void 0;
4
+ var react_1 = require("react");
5
+ var debounce = function (fn, delay) {
6
+ var timer = null;
7
+ return function () {
8
+ if (timer)
9
+ clearTimeout(timer);
10
+ timer = setTimeout(fn, delay);
11
+ };
12
+ };
13
+ exports.debounce = debounce;
14
+ function useResizeObserver(ref, callback, delay) {
15
+ if (delay === void 0) { delay = 100; }
16
+ (0, react_1.useLayoutEffect)(function () {
17
+ var target = ref.current;
18
+ if (!target)
19
+ return;
20
+ var debouncedCallback = (0, exports.debounce)(callback, delay);
21
+ var resizeObserver = new ResizeObserver(debouncedCallback);
22
+ resizeObserver.observe(target);
23
+ callback();
24
+ return function () { return resizeObserver.disconnect(); };
25
+ }, [ref, callback, delay]);
26
+ }
27
+ exports.useResizeObserver = useResizeObserver;
@@ -0,0 +1,4 @@
1
+ export declare function useWindowSize(): {
2
+ width: number;
3
+ height: number;
4
+ };
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useWindowSize = void 0;
4
+ var react_1 = require("react");
5
+ function useWindowSize() {
6
+ var _a = (0, react_1.useState)({
7
+ width: window.innerWidth,
8
+ height: window.innerHeight
9
+ }), size = _a[0], setSize = _a[1];
10
+ (0, react_1.useEffect)(function () {
11
+ var handleResize = function () {
12
+ setSize({
13
+ width: window.innerWidth,
14
+ height: window.innerHeight
15
+ });
16
+ };
17
+ window.addEventListener('resize', handleResize);
18
+ return function () { return window.removeEventListener('resize', handleResize); };
19
+ }, []);
20
+ return size;
21
+ }
22
+ exports.useWindowSize = useWindowSize;
@@ -51,6 +51,8 @@
51
51
  "calendar_month_12": "Dec",
52
52
  "str_fm_datetime_am": "{{hour}} AM",
53
53
  "str_fm_datetime_pm": "{{hour}} PM",
54
+ "str_fm_am": "AM",
55
+ "str_fm_pm": "PM",
54
56
  "calendar_duration_hour": " hour",
55
57
  "calendar_duration_hours": " hours",
56
58
  "str_fm_datetime_noon": "Noon",
@@ -51,6 +51,8 @@
51
51
  "calendar_month_12": "Dic",
52
52
  "str_fm_datetime_am": "{{hour}} AM",
53
53
  "str_fm_datetime_pm": "{{hour}} PM",
54
+ "str_fm_am": "AM",
55
+ "str_fm_pm": "PM",
54
56
  "calendar_duration_hour": " hora",
55
57
  "calendar_duration_hours": " horas",
56
58
  "str_fm_datetime_noon": "Mediodía",
@@ -51,6 +51,8 @@
51
51
  "calendar_month_12": "Dis",
52
52
  "str_fm_datetime_am": "{{hour}} NU",
53
53
  "str_fm_datetime_pm": "{{hour}} NH",
54
+ "str_fm_am": "NU",
55
+ "str_fm_pm": "NH",
54
56
  "calendar_duration_hour": " oras",
55
57
  "calendar_duration_hours": " oras",
56
58
  "str_fm_datetime_noon": "Tanghali",
@@ -52,6 +52,9 @@ declare const locale: {
52
52
  calendar_month_12: string;
53
53
  str_fm_datetime_am: string;
54
54
  str_fm_datetime_pm: string;
55
+ str_fm_am: string;
56
+ str_fm_pm: string;
57
+ str_fm_datetime_pm_only: string;
55
58
  calendar_duration_hour: string;
56
59
  calendar_duration_hours: string;
57
60
  str_fm_datetime_noon: string;
@@ -148,6 +151,8 @@ declare const locale: {
148
151
  calendar_month_12: string;
149
152
  str_fm_datetime_am: string;
150
153
  str_fm_datetime_pm: string;
154
+ str_fm_am: string;
155
+ str_fm_pm: string;
151
156
  calendar_duration_hour: string;
152
157
  calendar_duration_hours: string;
153
158
  str_fm_datetime_noon: string;
@@ -244,6 +249,8 @@ declare const locale: {
244
249
  calendar_month_12: string;
245
250
  str_fm_datetime_am: string;
246
251
  str_fm_datetime_pm: string;
252
+ str_fm_am: string;
253
+ str_fm_pm: string;
247
254
  calendar_duration_hour: string;
248
255
  calendar_duration_hours: string;
249
256
  str_fm_datetime_noon: string;
@@ -340,6 +347,8 @@ declare const locale: {
340
347
  calendar_month_12: string;
341
348
  str_fm_datetime_am: string;
342
349
  str_fm_datetime_pm: string;
350
+ str_fm_am: string;
351
+ str_fm_pm: string;
343
352
  calendar_duration_hour: string;
344
353
  calendar_duration_hours: string;
345
354
  str_fm_datetime_noon: string;
@@ -436,6 +445,8 @@ declare const locale: {
436
445
  calendar_month_12: string;
437
446
  str_fm_datetime_am: string;
438
447
  str_fm_datetime_pm: string;
448
+ str_fm_am: string;
449
+ str_fm_pm: string;
439
450
  calendar_duration_hour: string;
440
451
  calendar_duration_hours: string;
441
452
  str_fm_datetime_noon: string;
@@ -532,6 +543,8 @@ declare const locale: {
532
543
  calendar_month_12: string;
533
544
  str_fm_datetime_am: string;
534
545
  str_fm_datetime_pm: string;
546
+ str_fm_am: string;
547
+ str_fm_pm: string;
535
548
  calendar_duration_hour: string;
536
549
  calendar_duration_hours: string;
537
550
  str_fm_datetime_noon: string;
@@ -628,6 +641,8 @@ declare const locale: {
628
641
  calendar_month_12: string;
629
642
  str_fm_datetime_am: string;
630
643
  str_fm_datetime_pm: string;
644
+ str_fm_am: string;
645
+ str_fm_pm: string;
631
646
  calendar_duration_hour: string;
632
647
  calendar_duration_hours: string;
633
648
  str_fm_datetime_noon: string;
@@ -51,6 +51,8 @@
51
51
  "calendar_month_12": "12月",
52
52
  "str_fm_datetime_am": "午前{{hour}}時",
53
53
  "str_fm_datetime_pm": "午後{{hour}}時",
54
+ "str_fm_am": "午前",
55
+ "str_fm_pm": "午後",
54
56
  "calendar_duration_hour": "時間",
55
57
  "calendar_duration_hours": "時間",
56
58
  "str_fm_datetime_noon": "昼",
@@ -51,6 +51,9 @@
51
51
  "calendar_month_12": "12월",
52
52
  "str_fm_datetime_am": "오전 {{hour}}시",
53
53
  "str_fm_datetime_pm": "오후 {{hour}}시",
54
+ "str_fm_am": "오전",
55
+ "str_fm_pm": "오후",
56
+ "str_fm_datetime_pm_only": "오후",
54
57
  "calendar_duration_hour": "시간",
55
58
  "calendar_duration_hours": "시간",
56
59
  "str_fm_datetime_noon": "정오",
@@ -51,6 +51,8 @@
51
51
  "calendar_month_12": "12月",
52
52
  "str_fm_datetime_am": "上午{{hour}}时",
53
53
  "str_fm_datetime_pm": "下午{{hour}}时",
54
+ "str_fm_am": "上午",
55
+ "str_fm_pm": "下午",
54
56
  "calendar_duration_hour": "小时",
55
57
  "calendar_duration_hours": "小时",
56
58
  "str_fm_datetime_noon": "中午",
@@ -51,6 +51,8 @@
51
51
  "calendar_month_12": "12月",
52
52
  "str_fm_datetime_am": "上午{{hour}}時",
53
53
  "str_fm_datetime_pm": "下午{{hour}}時",
54
+ "str_fm_am": "上午",
55
+ "str_fm_pm": "下午",
54
56
  "calendar_duration_hour": "小時",
55
57
  "calendar_duration_hours": "小時",
56
58
  "str_fm_datetime_noon": "中午",
@@ -91,7 +91,7 @@ function BoxItem(_a) {
91
91
  justifyContent: 'space-between',
92
92
  maxWidth: '100%',
93
93
  cursor: state === 'disabled' ? 'default' : selectionMode === 'use' ? 'pointer' : 'default'
94
- } }, { children: [(0, jsx_runtime_1.jsxs)(LeftBox_1.LeftBox, __assign({ hasRightBox: displayType !== 'none' || chipMode === 'use' }, { children: [checkboxMode !== 'none' && ((0, jsx_runtime_1.jsx)(LeftBox_1.LeftBox.Checkbox, { selected: selectState === 'selected', isIndeterminate: checkboxMode === 'indeterminate' })), imageMode === 'use' && ((0, jsx_runtime_1.jsx)(LeftBox_1.LeftBox.Image, { shape: imageShapeType, src: imageSrc, width: imageWidth, ratio: imageRatio, scaleType: imageScaleType })), (0, jsx_runtime_1.jsxs)(S_TextGroup, { children: [titleText && ((0, jsx_runtime_1.jsx)(index_1.D_TextLabel, { text: titleText, colorOverride: state === 'disabled' ? 'ui_cpnt_textlabel_sys_secondary' : titleTextColorKey, styleTheme: titleFontSize, lineLimit: titleTextLineLimit, ellipsisMode: "use", wordBreak: titleTextWordBreak })), descText && ((0, jsx_runtime_1.jsx)(index_1.D_TextLabel, { text: descText, colorOverride: state === 'disabled' ? 'ui_cpnt_textlabel_sys_secondary' : descTextColorKey, lineLimit: descLineLimit, ellipsisMode: "use", styleTheme: "caption1Regular", wordBreak: descTextWordBreak }))] })] })), (0, jsx_runtime_1.jsxs)(S_RightBox, { children: [displayType !== 'none' ||
94
+ } }, { children: [(0, jsx_runtime_1.jsxs)(LeftBox_1.LeftBox, __assign({ hasRightBox: displayType !== 'none' || chipMode === 'use' }, { children: [checkboxMode !== 'none' && ((0, jsx_runtime_1.jsx)(LeftBox_1.LeftBox.Checkbox, { selected: selectState === 'selected', isIndeterminate: checkboxMode === 'indeterminate' })), imageMode === 'use' && ((0, jsx_runtime_1.jsx)(LeftBox_1.LeftBox.Image, { shape: imageShapeType, src: imageSrc, width: imageWidth, ratio: imageRatio, scaleType: imageScaleType })), (0, jsx_runtime_1.jsxs)(S_TextGroup, { children: [titleText && ((0, jsx_runtime_1.jsx)(index_1.D_TextLabel, { text: titleText, colorOverride: state === 'disabled' ? undefined : titleTextColorKey, colorTheme: state === 'disabled' ? 'sysTextTertiary' : undefined, styleTheme: titleFontSize, lineLimit: titleTextLineLimit, ellipsisMode: "use", wordBreak: titleTextWordBreak })), descText && ((0, jsx_runtime_1.jsx)(index_1.D_TextLabel, { text: descText, colorOverride: state === 'disabled' ? 'ui_cpnt_textlabel_sys_secondary' : descTextColorKey, lineLimit: descLineLimit, ellipsisMode: "use", styleTheme: "caption1Regular", wordBreak: descTextWordBreak }))] })] })), (0, jsx_runtime_1.jsxs)(S_RightBox, { children: [displayType !== 'none' ||
95
95
  (chipMode === 'use' && (0, jsx_runtime_1.jsx)(components_1.Spacing, { size: "spacing_b", spacingType: "width" })), chipMode === 'use' && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(Chip_1.Chip, { text: chipText, overrideBackgroundColorKey: chipOverrideBackgroundColorKey, displayType: "information", overrideTextColorKey: chipOverrideTextColorKey }) })), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [displayType === 'ibtn_amount1' && ((0, jsx_runtime_1.jsx)(index_1.D_IconButton, { iconName: iBtn1IconName || 'ic_arrow_right', baseSize: "medium", fillType: "fill", iconFillType: iBtn1IconFillType, iconColorKey: iBtn1IconColorKey, onClick: handleIBtn1Click, iconSize: 20, state: state, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", shapeType: "rectangle" })), displayType === 'ibtn_amount2' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(index_1.D_IconButton, { iconName: iBtn1IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn1IconFillType, iconColorKey: iBtn1IconColorKey, onClick: handleIBtn1Click, state: state, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" }), (0, jsx_runtime_1.jsx)(index_1.D_IconButton, { iconName: iBtn2IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn2IconFillType, iconColorKey: iBtn2IconColorKey, state: state, onClick: handleIBtn2Click, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" })] })), displayType === 'ibtn_amount3' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(index_1.D_IconButton, { iconName: iBtn1IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn1IconFillType, iconColorKey: iBtn1IconColorKey, state: state, onClick: handleIBtn1Click, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" }), (0, jsx_runtime_1.jsx)(index_1.D_IconButton, { iconName: iBtn2IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn2IconFillType, iconColorKey: iBtn2IconColorKey, state: state, onClick: handleIBtn2Click, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" }), (0, jsx_runtime_1.jsx)(index_1.D_IconButton, { iconName: iBtn3IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn3IconFillType, iconColorKey: iBtn3IconColorKey, state: state, onClick: handleIBtn3Click, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" })] }))] }), indicatorMode === 'use' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(components_1.Spacing, { size: "spacing_b", spacingType: "width" }), (0, jsx_runtime_1.jsx)(components_1.Icon, { iconName: "ic_arrow_right", fillType: "line", size: 20, colorKey: "ui_cpnt_icon_sys_grey_01" })] }))] })] })) })));
96
96
  }
97
97
  var S_BoxItem = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: row;\n gap: ", ";\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: row;\n gap: ", ";\n width: 100%;\n"])), function (_a) {
@@ -388,11 +388,11 @@ var Calendar = function (_a) {
388
388
  // 유틸리티 함수
389
389
  getSchedulesForDate: getSchedulesForDate, isToday: isToday, isPastDate: isPastDate, getDayTextByDate: getDayTextByDate,
390
390
  // 상태값
391
- isDragOverDate: isDragOverDate, selectedDate: selectedDate, displayAllDayScheduleMode: displayAllDayScheduleMode }, { children: (0, jsx_runtime_1.jsxs)(S_CalendarContainer, __assign({ "x-pds-name": "Calendar", "x-pds-element-type": "component", "x-pds-device-type": "desktop", onKeyDown: handleKeyDown, tabIndex: 0 }, { children: [(0, jsx_runtime_1.jsxs)(S_CalendarHeader, { children: [(0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "headingBold", textAlign: "center", text: (0, calendarUtils_1.getHeaderText)(currentViewType, selectedDate, t) }), (0, jsx_runtime_1.jsxs)(S_LeftContainer, { children: [(0, jsx_runtime_1.jsx)(S_NavigationButton, __assign({ onClick: function () { return navigateDate('prev'); } }, { children: (0, jsx_runtime_1.jsx)(IconButton_1.IconButton, { iconName: "ic_arrow_left", baseSize: "small", iconSize: 16, baseColorKey: "ui_cpnt_button_fill_base_transparent", iconColorKey: "ui_cpnt_icon_sys_grey_01" }) })), todayBtnMode === 'use' && ((0, jsx_runtime_1.jsx)(TextButton_1.TextButton, { text: t('str_calendar_today'), size: "small", colorTheme: "grey_01", onClick: handleTodayClick })), (0, jsx_runtime_1.jsx)(S_NavigationButton, __assign({ onClick: function () { return navigateDate('next'); } }, { children: (0, jsx_runtime_1.jsx)(IconButton_1.IconButton, { iconName: "ic_arrow_right", baseSize: "small", iconSize: 16, baseColorKey: "ui_cpnt_button_fill_base_transparent", iconColorKey: "ui_cpnt_icon_sys_grey_01" }) })), (0, jsx_runtime_1.jsx)(Dropdown_1.Dropdown, { size: "small", valueArray: viewTypeOptions, value: viewTypeOptions.find(function (option) { return option.value === currentViewType; }), onChange: handleViewTypeChange, customWidth: "120px" })] })] }), (0, jsx_runtime_1.jsx)(S_CalendarContent, { children: renderCalendarContent() })] })) })));
391
+ isDragOverDate: isDragOverDate, selectedDate: selectedDate, displayAllDayScheduleMode: displayAllDayScheduleMode }, { children: (0, jsx_runtime_1.jsxs)(S_CalendarContainer, __assign({ "x-pds-name": "Calendar", "x-pds-element-type": "component", "x-pds-device-type": "desktop", onKeyDown: handleKeyDown, tabIndex: 0 }, { children: [(0, jsx_runtime_1.jsxs)(S_CalendarHeader, { children: [(0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "headingBold", textAlign: "center", text: (0, calendarUtils_1.getHeaderText)(currentViewType, selectedDate, t) }), (0, jsx_runtime_1.jsxs)(S_LeftContainer, { children: [(0, jsx_runtime_1.jsx)(S_NavigationButtonContainer, __assign({ onClick: function () { return navigateDate('prev'); } }, { children: (0, jsx_runtime_1.jsx)(IconButton_1.IconButton, { iconName: "ic_arrow_left", baseSize: "small", iconSize: 16, baseColorKey: "ui_cpnt_button_fill_base_transparent", iconColorKey: "ui_cpnt_icon_sys_grey_01" }) })), todayBtnMode === 'use' && ((0, jsx_runtime_1.jsx)(TextButton_1.TextButton, { text: t('str_calendar_today'), size: "small", colorTheme: "grey_01", onClick: handleTodayClick })), (0, jsx_runtime_1.jsx)(S_NavigationButtonContainer, __assign({ onClick: function () { return navigateDate('next'); } }, { children: (0, jsx_runtime_1.jsx)(IconButton_1.IconButton, { iconName: "ic_arrow_right", baseSize: "small", iconSize: 16, baseColorKey: "ui_cpnt_button_fill_base_transparent", iconColorKey: "ui_cpnt_icon_sys_grey_01" }) })), (0, jsx_runtime_1.jsx)(Dropdown_1.Dropdown, { size: "small", valueArray: viewTypeOptions, value: viewTypeOptions.find(function (option) { return option.value === currentViewType; }), onChange: handleViewTypeChange, customWidth: "120px" })] })] }), (0, jsx_runtime_1.jsx)(S_CalendarContent, { children: renderCalendarContent() })] })) })));
392
392
  };
393
393
  var S_CalendarContainer = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 400px;\n outline: 0px;\n overflow: hidden;\n width: 100%;\n"], ["\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 400px;\n outline: 0px;\n overflow: hidden;\n width: 100%;\n"])));
394
394
  var S_CalendarHeader = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 16px;\n padding: 0px 0px 8px 0px;\n"], ["\n align-items: center;\n display: flex;\n gap: 16px;\n padding: 0px 0px 8px 0px;\n"])));
395
- var S_NavigationButton = styled_components_1.default.button(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n align-items: center;\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n height: 32px;\n justify-content: center;\n width: 32px;\n"], ["\n align-items: center;\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n height: 32px;\n justify-content: center;\n width: 32px;\n"])));
395
+ var S_NavigationButtonContainer = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n align-items: center;\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n height: 32px;\n justify-content: center;\n width: 32px;\n"], ["\n align-items: center;\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n height: 32px;\n justify-content: center;\n width: 32px;\n"])));
396
396
  var S_LeftContainer = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 8px;\n margin-left: auto;\n"], ["\n align-items: center;\n display: flex;\n gap: 8px;\n margin-left: auto;\n"])));
397
397
  var S_CalendarContent = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n flex: 1;\n overflow: auto;\n"], ["\n flex: 1;\n overflow: auto;\n"])));
398
398
  exports.default = Calendar;
@@ -31,6 +31,8 @@ exports.MonthlyView = void 0;
31
31
  var jsx_runtime_1 = require("react/jsx-runtime");
32
32
  var react_1 = require("react");
33
33
  var react_i18next_1 = require("react-i18next");
34
+ var useResizeObserver_1 = require("../../../common/hooks/useResizeObserver");
35
+ var useWindowSize_1 = require("../../../common/hooks/useWindowSize");
34
36
  var dateHelper_1 = require("../../../common/utils/dateHelper");
35
37
  var components_1 = require("../../../hybrid/components");
36
38
  var styled_components_1 = __importDefault(require("styled-components"));
@@ -42,6 +44,7 @@ var MonthlyView = function (_a) {
42
44
  var getDayTextByDate = _a.getDayTextByDate, startOfWeek = _a.startOfWeek, selectedDate = _a.selectedDate, selectedDates = _a.selectedDates, selectedSchedules = _a.selectedSchedules, dragStartDate = _a.dragStartDate, dragEndDate = _a.dragEndDate, isDragOverDate = _a.isDragOverDate, schedules = _a.schedules, getSchedulesForDate = _a.getSchedulesForDate, isToday = _a.isToday, isPastDate = _a.isPastDate, handleDateClick = _a.handleDateClick, handleScheduleClick = _a.handleScheduleClick, handleMouseUp = _a.handleMouseUp, handleDateDragOver = _a.handleDateDragOver, handleDateDragLeave = _a.handleDateDragLeave, handleDateDrop = _a.handleDateDrop, handleScheduleDragStart = _a.handleScheduleDragStart, handleScheduleDragEnd = _a.handleScheduleDragEnd, _b = _a.isDraggable, isDraggable = _b === void 0 ? false : _b, onSwitchToWeeklyView = _a.onSwitchToWeeklyView;
43
45
  var t = (0, react_i18next_1.useTranslation)().t;
44
46
  var renderScheduleItem = (0, CalendarContext_1.useCalendarContext)().renderScheduleItem;
47
+ var height = (0, useWindowSize_1.useWindowSize)().height;
45
48
  var calendarCellRef = (0, react_1.useRef)(null);
46
49
  var _c = (0, react_1.useState)(3), maxSchedulesPerDay = _c[0], setMaxSchedulesPerDay = _c[1];
47
50
  var scheduleItemHeight = 22; // 스케줄 아이템 대략 높이
@@ -55,48 +58,31 @@ var MonthlyView = function (_a) {
55
58
  return;
56
59
  var cellHeight = calendarCellRef.current.clientHeight;
57
60
  var dateLabelHeight = 20; // 날짜 텍스트 영역
58
- var cellPadding = 8; // 상하 패딩 (4px * 2)
59
- var moreTextHeight = scheduleItemHeight; // "더보기" 텍스트 높이
60
- var availableHeight = cellHeight - dateLabelHeight - cellPadding;
61
- var maxSchedulesWithMore = Math.floor((availableHeight - moreTextHeight) / scheduleItemHeight);
61
+ var moreTextHeight = scheduleItemHeight;
62
+ var availableHeight = cellHeight - dateLabelHeight - moreTextHeight;
63
+ var maxSchedulesWithMore = Math.floor(availableHeight / scheduleItemHeight);
62
64
  // 최소 1개는 보여주되, 더보기를 고려한 개수로 설정
63
65
  var calculatedMax = Math.max(1, maxSchedulesWithMore);
64
66
  setMaxSchedulesPerDay(calculatedMax);
65
67
  }, [scheduleItemHeight]);
66
68
  // ResizeObserver로 크기 변경 감지
67
- (0, react_1.useLayoutEffect)(function () {
68
- if (!calendarCellRef.current)
69
- return;
70
- var resizeObserver = new ResizeObserver(function () {
71
- calculateMaxSchedules();
72
- });
73
- resizeObserver.observe(calendarCellRef.current);
74
- // 초기 계산
75
- calculateMaxSchedules();
76
- return function () {
77
- resizeObserver.disconnect();
78
- };
79
- }, [calculateMaxSchedules]);
69
+ (0, useResizeObserver_1.useResizeObserver)(calendarCellRef, calculateMaxSchedules, 100);
80
70
  // 창 크기 변경 시에도 재계산
81
71
  (0, react_1.useLayoutEffect)(function () {
82
- var handleResize = function () {
83
- setTimeout(calculateMaxSchedules, 0);
84
- };
85
- window.addEventListener('resize', handleResize);
86
- return function () { return window.removeEventListener('resize', handleResize); };
87
- }, [calculateMaxSchedules]);
88
- // 다중 이벤트 계산
89
- var getMultiWeekSchedules = (0, react_1.useMemo)(function () {
90
- // 개선: 날짜별(row, col) -> 사용중인 row set을 관리
91
- var rowColUsedRows = {};
92
- var multiWeekSchedules = [];
93
- var allSchedules = new Map();
94
- var processedScheduleIds = new Set();
95
- // 캘린더에 표시되는 전체 날짜 범위 계산
72
+ calculateMaxSchedules();
73
+ }, [height]);
74
+ // 캘린더 범위 계산
75
+ var getCalendarDateRange = (0, react_1.useCallback)(function (days) {
96
76
  var calendarStart = new Date(days[0]);
97
77
  var calendarEnd = new Date(days[days.length - 1]);
98
78
  calendarStart.setHours(0, 0, 0, 0);
99
79
  calendarEnd.setHours(0, 0, 0, 0);
80
+ return { calendarStart: calendarStart, calendarEnd: calendarEnd };
81
+ }, []);
82
+ // 다중일 스케줄 수집 및 필터링
83
+ var collectMultiDaySchedules = (0, react_1.useCallback)(function (days, getSchedulesForDate, calendarStart, calendarEnd) {
84
+ var allSchedules = new Map();
85
+ var processedScheduleIds = new Set();
100
86
  days.forEach(function (date) {
101
87
  var schedulesForDate = getSchedulesForDate(date);
102
88
  schedulesForDate.forEach(function (schedule) {
@@ -122,8 +108,11 @@ var MonthlyView = function (_a) {
122
108
  }
123
109
  });
124
110
  });
125
- // 개선: 멀티데이 스케줄을 시작일 기준 오름차순, duration 오름차순으로 정렬
126
- var sortedMultiDaySchedules = Array.from(allSchedules.values()).sort(function (a, b) {
111
+ return Array.from(allSchedules.values());
112
+ }, []);
113
+ // 스케줄 정렬 (시작일 기준 오름차순, 기간 오름차순)
114
+ var sortSchedulesByStartAndDuration = (0, react_1.useCallback)(function (schedules) {
115
+ return schedules.sort(function (a, b) {
127
116
  var aStart = new Date(a.startDate).getTime();
128
117
  var bStart = new Date(b.startDate).getTime();
129
118
  if (aStart !== bStart)
@@ -132,88 +121,137 @@ var MonthlyView = function (_a) {
132
121
  var bDur = new Date(b.endDate).getTime() - bStart;
133
122
  return aDur - bDur;
134
123
  });
135
- // 개선: 각 멀티데이 스케줄마다, 차지하는 모든 날짜(row, col)에서 사용중인 row를 체크하여, 가장 작은 빈 row에만 할당
136
- sortedMultiDaySchedules.forEach(function (schedule) {
124
+ }, []);
125
+ // 스케줄의 그리드 위치 계산
126
+ var calculateScheduleGridPosition = (0, react_1.useCallback)(function (schedule, days, calendarStart, calendarEnd) {
127
+ var scheduleStart = new Date(schedule.startDate);
128
+ var scheduleEnd = new Date(schedule.endDate);
129
+ scheduleStart.setHours(0, 0, 0, 0);
130
+ scheduleEnd.setHours(0, 0, 0, 0);
131
+ // 캘린더 범위 내에서 표시할 실제 시작/끝 날짜 계산
132
+ var displayStart = new Date(Math.max(scheduleStart.getTime(), calendarStart.getTime()));
133
+ var displayEnd = new Date(Math.min(scheduleEnd.getTime(), calendarEnd.getTime()));
134
+ // 캘린더 그리드에서 시작과 끝 위치 찾기
135
+ var startIndex = days.findIndex(function (date) {
136
+ var d = new Date(date);
137
+ d.setHours(0, 0, 0, 0);
138
+ return d.getTime() === displayStart.getTime();
139
+ });
140
+ var endIndex = days.findIndex(function (date) {
141
+ var d = new Date(date);
142
+ d.setHours(0, 0, 0, 0);
143
+ return d.getTime() === displayEnd.getTime();
144
+ });
145
+ if (startIndex === -1 || endIndex === -1) {
146
+ return null;
147
+ }
148
+ return { startIndex: startIndex, endIndex: endIndex };
149
+ }, []);
150
+ // 행별 세그먼트 정보 계산
151
+ var calculateRowSegments = (0, react_1.useCallback)(function (startIndex, endIndex) {
152
+ var startRow = Math.floor(startIndex / 7) + 2;
153
+ var endRow = Math.floor(endIndex / 7) + 2;
154
+ var segments = [];
155
+ var getSegmentBounds = function (row, startRow, endRow, startIndex, endIndex) {
156
+ if (row === startRow && row === endRow) {
157
+ return [(startIndex % 7) + 1, (endIndex % 7) + 1];
158
+ }
159
+ if (row === startRow) {
160
+ return [(startIndex % 7) + 1, 7];
161
+ }
162
+ if (row === endRow) {
163
+ return [1, (endIndex % 7) + 1];
164
+ }
165
+ return [1, 7];
166
+ };
167
+ for (var row = startRow; row <= endRow; row += 1) {
168
+ var _a = getSegmentBounds(row, startRow, endRow, startIndex, endIndex), startCol = _a[0], endCol = _a[1];
169
+ segments.push({ row: row, startCol: startCol, endCol: endCol });
170
+ }
171
+ return segments;
172
+ }, []);
173
+ // 사용중인 행 정보를 수집
174
+ var collectUsedRows = (0, react_1.useCallback)(function (segments, rowColUsedRows) {
175
+ var usedRows = new Set();
176
+ segments.forEach(function (_a) {
177
+ var row = _a.row, startCol = _a.startCol, endCol = _a.endCol;
178
+ for (var col = startCol; col <= endCol; col += 1) {
179
+ var key = "".concat(row, "_").concat(col);
180
+ if (rowColUsedRows[key]) {
181
+ rowColUsedRows[key].forEach(function (r) { return usedRows.add(r); });
182
+ }
183
+ }
184
+ });
185
+ return usedRows;
186
+ }, []);
187
+ // 가장 작은 빈 행 인덱스 찾기
188
+ var findAvailableRowIndex = (0, react_1.useCallback)(function (usedRows) {
189
+ var scheduleIndex = 0;
190
+ while (usedRows.has(scheduleIndex)) {
191
+ scheduleIndex += 1;
192
+ }
193
+ return scheduleIndex;
194
+ }, []);
195
+ // 행-열 사용 정보 업데이트
196
+ var updateRowColUsage = (0, react_1.useCallback)(function (segments, scheduleIndex, rowColUsedRows) {
197
+ segments.forEach(function (_a) {
198
+ var row = _a.row, startCol = _a.startCol, endCol = _a.endCol;
199
+ for (var col = startCol; col <= endCol; col += 1) {
200
+ var key = "".concat(row, "_").concat(col);
201
+ if (!rowColUsedRows[key])
202
+ rowColUsedRows[key] = new Set();
203
+ rowColUsedRows[key].add(scheduleIndex);
204
+ }
205
+ });
206
+ }, []);
207
+ // 다중 이벤트 계산
208
+ var getMultiWeekSchedules = (0, react_1.useMemo)(function () {
209
+ var _a = getCalendarDateRange(days), calendarStart = _a.calendarStart, calendarEnd = _a.calendarEnd;
210
+ var multiDaySchedules = collectMultiDaySchedules(days, getSchedulesForDate, calendarStart, calendarEnd);
211
+ var sortedSchedules = sortSchedulesByStartAndDuration(multiDaySchedules);
212
+ var rowColUsedRows = {};
213
+ var multiWeekSchedules = [];
214
+ sortedSchedules.forEach(function (schedule) {
137
215
  var scheduleStart = new Date(schedule.startDate);
138
216
  var scheduleEnd = new Date(schedule.endDate);
139
217
  scheduleStart.setHours(0, 0, 0, 0);
140
218
  scheduleEnd.setHours(0, 0, 0, 0);
141
219
  if (scheduleStart.getTime() !== scheduleEnd.getTime()) {
142
- // 캘린더 범위 내에서 표시할 실제 시작/끝 날짜 계산
143
- var displayStart_1 = new Date(Math.max(scheduleStart.getTime(), calendarStart.getTime()));
144
- var displayEnd_1 = new Date(Math.min(scheduleEnd.getTime(), calendarEnd.getTime()));
145
- // 캘린더 그리드에서 시작과 끝 위치 찾기
146
- var startIndex = days.findIndex(function (date) {
147
- var d = new Date(date);
148
- d.setHours(0, 0, 0, 0);
149
- return d.getTime() === displayStart_1.getTime();
150
- });
151
- var endIndex = days.findIndex(function (date) {
152
- var d = new Date(date);
153
- d.setHours(0, 0, 0, 0);
154
- return d.getTime() === displayEnd_1.getTime();
155
- });
156
- if (startIndex !== -1 && endIndex !== -1) {
157
- var startRow = Math.floor(startIndex / 7) + 2;
158
- var endRow = Math.floor(endIndex / 7) + 2;
159
- var _loop_1 = function (row) {
160
- var isFirstRow = row === startRow;
161
- var isLastRow = row === endRow;
162
- var segmentStartCol = void 0;
163
- var segmentEndCol = void 0;
164
- if (isFirstRow && isLastRow) {
165
- segmentStartCol = (startIndex % 7) + 1;
166
- segmentEndCol = (endIndex % 7) + 1;
167
- }
168
- else if (isFirstRow) {
169
- segmentStartCol = (startIndex % 7) + 1;
170
- segmentEndCol = 7;
171
- }
172
- else if (isLastRow) {
173
- segmentStartCol = 1;
174
- segmentEndCol = (endIndex % 7) + 1;
175
- }
176
- else {
177
- segmentStartCol = 1;
178
- segmentEndCol = 7;
179
- }
180
- // 개선: 이 스케줄이 차지하는 날짜(row, col) 전체에서 사용중인 row set을 합침
181
- var usedRows = new Set();
182
- for (var col = segmentStartCol; col <= segmentEndCol; col += 1) {
183
- var key = "".concat(row, "_").concat(col);
184
- if (rowColUsedRows[key]) {
185
- rowColUsedRows[key].forEach(function (r) { return usedRows.add(r); });
186
- }
187
- }
188
- // 가장 작은 빈 row를 찾음
189
- var scheduleIndex = 0;
190
- while (usedRows.has(scheduleIndex)) {
191
- scheduleIndex += 1;
192
- }
193
- // 이 스케줄이 차지하는 모든 날짜(row, col)에 scheduleIndex를 기록
194
- for (var col = segmentStartCol; col <= segmentEndCol; col += 1) {
195
- var key = "".concat(row, "_").concat(col);
196
- if (!rowColUsedRows[key])
197
- rowColUsedRows[key] = new Set();
198
- rowColUsedRows[key].add(scheduleIndex);
199
- }
220
+ var gridPosition = calculateScheduleGridPosition(schedule, days, calendarStart, calendarEnd);
221
+ if (gridPosition) {
222
+ var startIndex = gridPosition.startIndex, endIndex = gridPosition.endIndex;
223
+ var segments = calculateRowSegments(startIndex, endIndex);
224
+ segments.forEach(function (_a) {
225
+ var row = _a.row, startCol = _a.startCol, endCol = _a.endCol;
226
+ var usedRows = collectUsedRows([{ row: row, startCol: startCol, endCol: endCol }], rowColUsedRows);
227
+ var scheduleIndex = findAvailableRowIndex(usedRows);
228
+ updateRowColUsage([{ row: row, startCol: startCol, endCol: endCol }], scheduleIndex, rowColUsedRows);
200
229
  multiWeekSchedules.push({
201
230
  schedule: schedule,
202
231
  startRow: row,
203
232
  endRow: row,
204
- startCol: segmentStartCol,
205
- endCol: segmentEndCol,
233
+ startCol: startCol,
234
+ endCol: endCol,
206
235
  scheduleIndex: scheduleIndex
207
236
  });
208
- };
209
- for (var row = startRow; row <= endRow; row += 1) {
210
- _loop_1(row);
211
- }
237
+ });
212
238
  }
213
239
  }
214
240
  });
215
241
  return multiWeekSchedules;
216
- }, [days, getSchedulesForDate, schedules]);
242
+ }, [
243
+ days,
244
+ getSchedulesForDate,
245
+ schedules,
246
+ getCalendarDateRange,
247
+ collectMultiDaySchedules,
248
+ sortSchedulesByStartAndDuration,
249
+ calculateScheduleGridPosition,
250
+ calculateRowSegments,
251
+ collectUsedRows,
252
+ findAvailableRowIndex,
253
+ updateRowColUsage
254
+ ]);
217
255
  var getCalendarCellData = function (date, index) {
218
256
  var daySchedules = getSchedulesForDate(date);
219
257
  var row = Math.floor(index / 7) + 2; // 헤더 고려
@@ -30,6 +30,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.MultiWeekSchedulesLayer = void 0;
31
31
  var jsx_runtime_1 = require("react/jsx-runtime");
32
32
  var react_1 = require("react");
33
+ var useParentResizeObserver_1 = require("../../../common/hooks/useParentResizeObserver");
34
+ var useWindowSize_1 = require("../../../common/hooks/useWindowSize");
33
35
  var styled_components_1 = __importDefault(require("styled-components"));
34
36
  var TextLabel_1 = require("../TextLabel");
35
37
  var ScheduleItem_1 = require("./ScheduleItem");
@@ -38,6 +40,7 @@ var MultiWeekSchedulesLayer = function (_a) {
38
40
  var containerRef = (0, react_1.useRef)(null);
39
41
  var _d = (0, react_1.useState)([]), cellPositions = _d[0], setCellPositions = _d[1];
40
42
  var _e = (0, react_1.useState)([]), hiddenSchedules = _e[0], setHiddenSchedules = _e[1];
43
+ var height = (0, useWindowSize_1.useWindowSize)().height;
41
44
  // 캘린더 셀들의 실제 위치를 계산하는 함수
42
45
  var calculateCellPositions = (0, react_1.useCallback)(function () {
43
46
  if (!containerRef.current)
@@ -73,30 +76,11 @@ var MultiWeekSchedulesLayer = function (_a) {
73
76
  setCellPositions(positions);
74
77
  }, []);
75
78
  // ResizeObserver로 크기 변경 감지
79
+ (0, useParentResizeObserver_1.useParentResizeObserver)(containerRef, calculateCellPositions, 100);
80
+ // 창 크기 변경 시 재계산
76
81
  (0, react_1.useLayoutEffect)(function () {
77
- if (!containerRef.current)
78
- return;
79
- var gridContainer = containerRef.current.parentElement;
80
- if (!gridContainer)
81
- return;
82
- var resizeObserver = new ResizeObserver(function () {
83
- calculateCellPositions();
84
- });
85
- resizeObserver.observe(gridContainer);
86
- // 초기 계산
87
82
  calculateCellPositions();
88
- return function () {
89
- resizeObserver.disconnect();
90
- };
91
- }, [calculateCellPositions]);
92
- // 창 크기 변경 시에도 재계산
93
- (0, react_1.useLayoutEffect)(function () {
94
- var handleResize = function () {
95
- setTimeout(calculateCellPositions, 0);
96
- };
97
- window.addEventListener('resize', handleResize);
98
- return function () { return window.removeEventListener('resize', handleResize); };
99
- }, [calculateCellPositions]);
83
+ }, [height, calculateCellPositions]);
100
84
  (0, react_1.useEffect)(function () {
101
85
  // 각 row별로 스케줄 개수와 높이 제한 확인
102
86
  var schedulesByRow = {};
@@ -109,18 +93,13 @@ var MultiWeekSchedulesLayer = function (_a) {
109
93
  schedulesByRow[row].push(scheduleInfo);
110
94
  }
111
95
  });
112
- // 각 row에서 높이 제한 확인 (실제로 보이는 줄 수와 전체 스케줄 수 모두 출력)
96
+ // 각 row(주)에서 높이 제한 확인 (실제로 보이는 줄 수와 전체 스케줄 수 모두 출력)
113
97
  Object.keys(schedulesByRow).forEach(function (rowStr) {
114
98
  var row = parseInt(rowStr, 10);
115
99
  var schedules = schedulesByRow[row];
116
- // scheduleIndex별로 줄에 하나씩만!
117
- var rowIndexMap = {};
118
- schedules.forEach(function (s) {
119
- rowIndexMap[s.scheduleIndex] = s;
120
- });
121
- var rowSchedules = Object.values(rowIndexMap);
100
+ var rowSchedules = __spreadArray([], schedules, true);
122
101
  if (rowSchedules.length > maxSchedulesPerDay) {
123
- // row를 날짜로 변환 (row 2가 첫 번째 주, row 3이 두 번째 주...)
102
+ // row(주)를 날짜로 변환 (row 2가 첫 번째 주, row 3이 두 번째 주...)
124
103
  var weekIndex = row - 2; // 헤더 제외
125
104
  var today = new Date();
126
105
  var startOfWeek = new Date(today);
@@ -129,11 +108,18 @@ var MultiWeekSchedulesLayer = function (_a) {
129
108
  weekStart.setDate(startOfWeek.getDate() + weekIndex * 7);
130
109
  var weekEnd = new Date(weekStart);
131
110
  weekEnd.setDate(weekStart.getDate() + 6);
132
- setHiddenSchedules(__spreadArray([], rowSchedules, true).filter(function (_, index) { return index > maxSchedulesPerDay - 1; })
111
+ // 최대 스케줄 개수를 초과하는 스케줄은 숨김 처리 (scheduleIndex기준, 0부터 시작)
112
+ setHiddenSchedules(__spreadArray([], rowSchedules, true).filter(function (rowSchedule) { return rowSchedule.scheduleIndex > maxSchedulesPerDay - 1; })
133
113
  .map(function (s) { return s.schedule.id.toString(); }));
134
114
  }
135
115
  });
136
116
  }, [maxSchedulesPerDay]);
117
+ // 드래그 시작 핸들러를 함수로 분리
118
+ var handleDragStart = function (schedule, e) {
119
+ if (handleScheduleDragStart) {
120
+ handleScheduleDragStart(schedule, e);
121
+ }
122
+ };
137
123
  return ((0, jsx_runtime_1.jsx)(S_Layer, __assign({ ref: containerRef }, { children: multiWeekSchedules
138
124
  .filter(function (s) { return !hiddenSchedules.includes(s.schedule.id.toString()); })
139
125
  .map(function (_a) {
@@ -142,11 +128,7 @@ var MultiWeekSchedulesLayer = function (_a) {
142
128
  var isSelected = selectedSchedules.some(function (s) { return s.id === schedule.id; });
143
129
  var uniqueKey = "multi-".concat(schedule.id, "-").concat(startRow, "-").concat(startCol, "-").concat(endCol);
144
130
  if (isSameRow) {
145
- return ((0, jsx_runtime_1.jsxs)(S_MultiWeekSchedule, __assign({ "$color": schedule.color, "$startRow": startRow, "$endRow": endRow, "$startCol": startCol, "$endCol": endCol, "$scheduleIndex": scheduleIndex, "$isSelected": isSelected, "$isDraggable": isDraggable, "$cellPositions": cellPositions, draggable: isDraggable, onDragStart: isDraggable
146
- ? function (e) {
147
- handleScheduleDragStart === null || handleScheduleDragStart === void 0 ? void 0 : handleScheduleDragStart(schedule, e);
148
- }
149
- : undefined, onDragEnd: isDraggable ? handleScheduleDragEnd : undefined, onClick: function (e) {
131
+ return ((0, jsx_runtime_1.jsxs)(S_MultiWeekSchedule, __assign({ "$color": schedule.color, "$startRow": startRow, "$endRow": endRow, "$startCol": startCol, "$endCol": endCol, "$scheduleIndex": scheduleIndex, "$isSelected": isSelected, "$isDraggable": isDraggable, "$cellPositions": cellPositions, draggable: isDraggable, onDragStart: isDraggable ? function (e) { return handleDragStart(schedule, e); } : undefined, onDragEnd: isDraggable ? handleScheduleDragEnd : undefined, onClick: function (e) {
150
132
  e.stopPropagation();
151
133
  handleScheduleClick === null || handleScheduleClick === void 0 ? void 0 : handleScheduleClick(schedule, e);
152
134
  } }, { children: [(0, jsx_runtime_1.jsx)(ScheduleItem_1.S_Dot, { "$isSelected": isSelected }), (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "caption2Bold", text: schedule.title, ellipsisMode: "use", colorTheme: isSelected ? 'sysTextWhite' : undefined })] }), uniqueKey));
@@ -37,23 +37,21 @@ var formatTimeWithLocale = function (hour, minute, currentLang, t) {
37
37
  if (currentLang === 'ko') {
38
38
  var minuteStr = minute.toString().padStart(2, '0');
39
39
  if (hour === 12) {
40
- return minute === 0
41
- ? t('str_fm_datetime_noon')
42
- : "12:".concat(minuteStr, " ").concat(t('str_fm_datetime_noon'));
40
+ return minute === 0 ? t('str_fm_datetime_noon') : "".concat(t('str_fm_pm'), " 12:").concat(minuteStr);
43
41
  }
44
42
  if (hour < 12) {
45
43
  if (hour === 0) {
46
44
  return minute === 0
47
45
  ? "".concat(t('str_fm_datetime_am', { hour: 12 }))
48
- : "12:".concat(minuteStr, " ").concat(t('str_fm_datetime_am', { hour: 12 }));
46
+ : "".concat(t('str_fm_am'), " 12:").concat(minuteStr);
49
47
  }
50
48
  return minute === 0
51
49
  ? "".concat(t('str_fm_datetime_am', { hour: hour }))
52
- : "".concat(hour, ":").concat(minuteStr, " ").concat(t('str_fm_datetime_am', { hour: hour }));
50
+ : "".concat(t('str_fm_am'), " ").concat(hour, ":").concat(minuteStr);
53
51
  }
54
52
  return minute === 0
55
53
  ? "".concat(t('str_fm_datetime_pm', { hour: hour - 12 }))
56
- : "".concat(hour - 12, ":").concat(minuteStr, " ").concat(t('str_fm_datetime_pm', { hour: hour - 12 }));
54
+ : "".concat(t('str_fm_pm'), " ").concat(hour - 12, ":").concat(minuteStr);
57
55
  }
58
56
  // 다른 언어의 경우 기본 formatHour 함수 사용
59
57
  return (0, exports.formatHour)(hour, minute, currentLang);
@@ -93,7 +93,7 @@ var overrideStyleContainer1 = (0, styled_components_1.css)(templateObject_11 ||
93
93
  var theme = _a.theme, overrideContainer1ColorKey = _a.overrideContainer1ColorKey;
94
94
  return overrideContainer1ColorKey && theme[overrideContainer1ColorKey];
95
95
  });
96
- var S_ContentsContainer = styled_components_1.default.div(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 24px;\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n overflow-x: hidden;\n overflow-y: overlay;\n width: 864px;\n ", ";\n ", ";\n\n ", "\n ", "\n"], ["\n background-color: ", ";\n border-radius: 24px;\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n overflow-x: hidden;\n overflow-y: overlay;\n width: 864px;\n ", ";\n ", ";\n\n ", "\n ", "\n"])), function (_a) {
96
+ var S_ContentsContainer = styled_components_1.default.div(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 24px;\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n overflow-x: hidden;\n overflow-y: overlay;\n scrollbar-width: auto !important;\n ", ";\n ", ";\n width: 864px;\n\n ", "\n ", "\n"], ["\n background-color: ", ";\n border-radius: 24px;\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n overflow-x: hidden;\n overflow-y: overlay;\n scrollbar-width: auto !important;\n ", ";\n ", ";\n width: 864px;\n\n ", "\n ", "\n"])), function (_a) {
97
97
  var theme = _a.theme;
98
98
  return theme.ui_wizard_contentscontainer01_background;
99
99
  }, function (_a) {
@@ -50,7 +50,7 @@ var overrideStyleContainer1 = (0, styled_components_1.css)(templateObject_1 || (
50
50
  var theme = _a.theme, overrideContainer1ColorKey = _a.overrideContainer1ColorKey;
51
51
  return overrideContainer1ColorKey && theme[overrideContainer1ColorKey];
52
52
  });
53
- var S_ContentsContainer = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n align-items: flex-start;\n background-color: ", ";\n border-radius: 24px;\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n overflow-x: hidden;\n overflow-y: overlay;\n width: 864px;\n ", ";\n\n ", "\n ", "\n"], ["\n align-items: flex-start;\n background-color: ", ";\n border-radius: 24px;\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n overflow-x: hidden;\n overflow-y: overlay;\n width: 864px;\n ", ";\n\n ", "\n ", "\n"])), function (_a) {
53
+ var S_ContentsContainer = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n align-items: flex-start;\n background-color: ", ";\n border-radius: 24px;\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n overflow-x: hidden;\n overflow-y: overlay;\n scrollbar-width: auto !important;\n width: 864px;\n ", ";\n\n ", "\n ", "\n"], ["\n align-items: flex-start;\n background-color: ", ";\n border-radius: 24px;\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n overflow-x: hidden;\n overflow-y: overlay;\n scrollbar-width: auto !important;\n width: 864px;\n ", ";\n\n ", "\n ", "\n"])), function (_a) {
54
54
  var theme = _a.theme;
55
55
  return theme.ui_wizard_contentscontainer01_background;
56
56
  }, function (_a) {
@@ -60,7 +60,7 @@ var overrideStyleContainer1 = (0, styled_components_1.css)(templateObject_11 ||
60
60
  var theme = _a.theme, overrideContainer1ColorKey = _a.overrideContainer1ColorKey;
61
61
  return overrideContainer1ColorKey && theme[overrideContainer1ColorKey];
62
62
  });
63
- var S_ContentsContainer = styled_components_1.default.div(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n align-items: flex-start;\n background-color: ", ";\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n\n ", ";\n ", ";\n\n ", "\n ", "\n"], ["\n align-items: flex-start;\n background-color: ", ";\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n\n ", ";\n ", ";\n\n ", "\n ", "\n"])), function (_a) {
63
+ var S_ContentsContainer = styled_components_1.default.div(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n align-items: flex-start;\n background-color: ", ";\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n scrollbar-width: auto !important;\n ", ";\n ", ";\n\n ", "\n ", "\n"], ["\n align-items: flex-start;\n background-color: ", ";\n display: flex;\n height: 60vh;\n justify-content: center;\n max-height: 640px;\n scrollbar-width: auto !important;\n ", ";\n ", ";\n\n ", "\n ", "\n"])), function (_a) {
64
64
  var theme = _a.theme;
65
65
  return theme.ui_wizard_contentscontainer01_background;
66
66
  }, function (_a) {
@@ -61,7 +61,7 @@ var WFL_4Area2Style = (0, styled_components_1.css)(templateObject_12 || (templat
61
61
  var WFL_1Content2Style = (0, styled_components_1.css)(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n height: 100%;\n overflow: hidden;\n"], ["\n height: 100%;\n overflow: hidden;\n"])));
62
62
  var WFL_2Content2Style = (0, styled_components_1.css)(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n height: 100%;\n overflow: hidden;\n"], ["\n height: 100%;\n overflow: hidden;\n"])));
63
63
  var S_Box = styled_components_1.default.div(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n display: flex;\n height: 60vh;\n max-height: 640px;\n"], ["\n display: flex;\n height: 60vh;\n max-height: 640px;\n"])));
64
- var S_ContentsContainer1 = styled_components_1.default.div(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 24px 0 0 24px;\n box-sizing: border-box;\n overflow-x: hidden;\n overflow-y: auto;\n width: 480px;\n\n ", ";\n ", ";\n\n ", "\n"], ["\n background-color: ", ";\n border-radius: 24px 0 0 24px;\n box-sizing: border-box;\n overflow-x: hidden;\n overflow-y: auto;\n width: 480px;\n\n ", ";\n ", ";\n\n ", "\n"])), function (_a) {
64
+ var S_ContentsContainer1 = styled_components_1.default.div(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 24px 0 0 24px;\n box-sizing: border-box;\n overflow-x: hidden;\n overflow-y: auto;\n scrollbar-width: auto !important;\n\n ", ";\n ", ";\n\n width: 480px;\n\n ", "\n"], ["\n background-color: ", ";\n border-radius: 24px 0 0 24px;\n box-sizing: border-box;\n overflow-x: hidden;\n overflow-y: auto;\n scrollbar-width: auto !important;\n\n ", ";\n ", ";\n\n width: 480px;\n\n ", "\n"])), function (_a) {
65
65
  var theme = _a.theme;
66
66
  return theme.ui_wizard_contentscontainer01_background;
67
67
  }, function (_a) {
@@ -75,8 +75,8 @@ var S_ContentsContainer1 = styled_components_1.default.div(templateObject_16 ||
75
75
  }, function (_a) {
76
76
  var containerColor = _a.containerColor;
77
77
  return "background-color: ".concat(containerColor);
78
- }, scrollbarStyle_1.scrollbarStyle);
79
- var S_ContentsContainer2 = styled_components_1.default.div(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 0 24px 24px 0;\n width: 672px;\n\n ", ";\n ", ";\n"], ["\n background-color: ", ";\n border-radius: 0 24px 24px 0;\n width: 672px;\n\n ", ";\n ", ";\n"])), function (_a) {
78
+ }, scrollbarStyle_1.scrollbarWithPaddingStyle);
79
+ var S_ContentsContainer2 = styled_components_1.default.div(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 0 24px 24px 0;\n\n scrollbar-width: auto !important;\n\n ", ";\n ", ";\n\n width: 672px;\n\n ", "\n"], ["\n background-color: ", ";\n border-radius: 0 24px 24px 0;\n\n scrollbar-width: auto !important;\n\n ", ";\n ", ";\n\n width: 672px;\n\n ", "\n"])), function (_a) {
80
80
  var theme = _a.theme;
81
81
  return theme.ui_wizard_contentscontainer02_background;
82
82
  }, function (_a) {
@@ -90,12 +90,15 @@ var S_ContentsContainer2 = styled_components_1.default.div(templateObject_17 ||
90
90
  }, function (_a) {
91
91
  var containerColor = _a.containerColor;
92
92
  return "background-color: ".concat(containerColor);
93
- });
93
+ }, scrollbarStyle_1.scrollbarWithPaddingStyle);
94
94
  var S_ContentsArea1 = styled_components_1.default.div(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n box-sizing: border-box;\n padding-bottom: 64px;\n\n ", ";\n"], ["\n box-sizing: border-box;\n padding-bottom: 64px;\n\n ", ";\n"])), function (_a) {
95
95
  var areaColor = _a.areaColor;
96
96
  return "background-color: ".concat(areaColor);
97
97
  });
98
- var S_ContentsArea2 = styled_components_1.default.div(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n box-sizing: border-box;\n\n ", ";\n ", ";\n"], ["\n box-sizing: border-box;\n\n ", ";\n ", ";\n"])), function (_a) {
98
+ var S_ContentsArea2 = styled_components_1.default.div(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n box-sizing: border-box;\n padding-left: ", ";\n ", ";\n ", ";\n"], ["\n box-sizing: border-box;\n padding-left: ", ";\n ", ";\n ", ";\n"])), function (_a) {
99
+ var theme = _a.theme;
100
+ return theme.spacing.spacingF;
101
+ }, function (_a) {
99
102
  var layoutType = _a.layoutType;
100
103
  return ({
101
104
  WFL_1: WFL_1Area2Style,
@@ -90,7 +90,7 @@ function BoxItem(_a) {
90
90
  alignItems: 'center',
91
91
  justifyContent: 'space-between',
92
92
  cursor: state === 'disabled' ? 'default' : selectionMode === 'use' ? 'pointer' : 'default'
93
- } }, { children: [(0, jsx_runtime_1.jsxs)(LeftBox_1.LeftBox, __assign({ hasRightBox: displayType !== 'none' || chipMode === 'use' }, { children: [checkboxMode !== 'none' && ((0, jsx_runtime_1.jsx)(LeftBox_1.LeftBox.Checkbox, { selected: selectState === 'selected', isIndeterminate: checkboxMode === 'indeterminate' })), imageMode === 'use' && ((0, jsx_runtime_1.jsx)(LeftBox_1.LeftBox.Image, { shape: imageShapeType, src: imageSrc, width: imageWidth, ratio: imageRatio, scaleType: imageScaleType })), (0, jsx_runtime_1.jsxs)(S_TextGroup, { children: [titleText && ((0, jsx_runtime_1.jsx)(index_1.M_TextLabel, { text: titleText, colorOverride: state === 'disabled' ? 'ui_cpnt_textlabel_sys_secondary' : titleTextColorKey, styleTheme: titleFontSize, lineLimit: titleTextLineLimit, wordBreak: titleTextWordBreak, ellipsisMode: "use" })), descText && ((0, jsx_runtime_1.jsx)(index_1.M_TextLabel, { text: descText, colorOverride: state === 'disabled' ? 'ui_cpnt_textlabel_sys_secondary' : descTextColorKey, lineLimit: descLineLimit, wordBreak: descTextWordBreak, ellipsisMode: "use", styleTheme: "caption1Regular" }))] })] })), (0, jsx_runtime_1.jsxs)(S_RightBox, { children: [displayType !== 'none' ||
93
+ } }, { children: [(0, jsx_runtime_1.jsxs)(LeftBox_1.LeftBox, __assign({ hasRightBox: displayType !== 'none' || chipMode === 'use' }, { children: [checkboxMode !== 'none' && ((0, jsx_runtime_1.jsx)(LeftBox_1.LeftBox.Checkbox, { selected: selectState === 'selected', isIndeterminate: checkboxMode === 'indeterminate' })), imageMode === 'use' && ((0, jsx_runtime_1.jsx)(LeftBox_1.LeftBox.Image, { shape: imageShapeType, src: imageSrc, width: imageWidth, ratio: imageRatio, scaleType: imageScaleType })), (0, jsx_runtime_1.jsxs)(S_TextGroup, { children: [titleText && ((0, jsx_runtime_1.jsx)(index_1.M_TextLabel, { text: titleText, colorOverride: state === 'disabled' ? undefined : titleTextColorKey, colorTheme: state === 'disabled' ? 'sysTextTertiary' : undefined, styleTheme: titleFontSize, lineLimit: titleTextLineLimit, wordBreak: titleTextWordBreak, ellipsisMode: "use" })), descText && ((0, jsx_runtime_1.jsx)(index_1.M_TextLabel, { text: descText, colorOverride: state === 'disabled' ? 'ui_cpnt_textlabel_sys_secondary' : descTextColorKey, lineLimit: descLineLimit, wordBreak: descTextWordBreak, ellipsisMode: "use", styleTheme: "caption1Regular" }))] })] })), (0, jsx_runtime_1.jsxs)(S_RightBox, { children: [displayType !== 'none' ||
94
94
  (chipMode === 'use' && (0, jsx_runtime_1.jsx)(components_1.Spacing, { size: "spacing_b", spacingType: "width" })), chipMode === 'use' && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(Chip_1.Chip, { text: chipText, overrideBackgroundColorKey: chipOverrideBackgroundColorKey, displayType: "information", overrideTextColorKey: chipOverrideTextColorKey }) })), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [displayType === 'ibtn_amount1' && ((0, jsx_runtime_1.jsx)(index_1.M_IconButton, { iconName: iBtn1IconName || 'ic_arrow_right', baseSize: "medium", fillType: "fill", iconFillType: iBtn1IconFillType, iconColorKey: iBtn1IconColorKey, onClick: handleIBtn1Click, state: state, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", shapeType: "rectangle" })), displayType === 'ibtn_amount2' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(index_1.M_IconButton, { iconName: iBtn1IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn1IconFillType, iconColorKey: iBtn1IconColorKey, onClick: handleIBtn1Click, state: state, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" }), (0, jsx_runtime_1.jsx)(index_1.M_IconButton, { iconName: iBtn2IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn2IconFillType, iconColorKey: iBtn2IconColorKey, onClick: handleIBtn2Click, state: state, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" })] })), displayType === 'ibtn_amount3' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(index_1.M_IconButton, { iconName: iBtn1IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn1IconFillType, iconColorKey: iBtn1IconColorKey, onClick: handleIBtn1Click, state: state, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" }), (0, jsx_runtime_1.jsx)(index_1.M_IconButton, { iconName: iBtn2IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn2IconFillType, iconColorKey: iBtn2IconColorKey, onClick: handleIBtn2Click, state: state, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" }), (0, jsx_runtime_1.jsx)(index_1.M_IconButton, { iconName: iBtn3IconName || 'ic_arrow_right', fillType: "fill", iconFillType: iBtn3IconFillType, iconColorKey: iBtn3IconColorKey, onClick: handleIBtn3Click, state: state, iconSize: 20, baseColorKey: "ui_cpnt_button_fill_base_transparent", borderColorKey: "ui_cpnt_button_fill_base_transparent", baseSize: "medium", shapeType: "rectangle" })] }))] }), indicatorMode === 'use' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(components_1.Spacing, { size: "spacing_b", spacingType: "width" }), (0, jsx_runtime_1.jsx)(components_1.Icon, { iconName: "ic_arrow_right", fillType: "line", size: 20, colorKey: "ui_cpnt_icon_sys_grey_01" })] }))] })] })) })));
95
95
  }
96
96
  var S_BoxItem = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n flex-direction: row;\n gap: ", ";\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n flex-direction: row;\n gap: ", ";\n width: 100%;\n"])), function (_a) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pds-dev-kit-web",
3
- "version": "2.2.205",
3
+ "version": "2.2.207",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
package/release-note.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # PDS-DEV-KIT-WEB Release Notes
2
- ## [v2.2.205]
2
+ ## [v2.2.207]
3
3
  ## daily|https://design.storybook.publ.biz/
4
4
 
5
5
  ### 업데이트 사항
6
- * [PDS-1311] 캘린더 배포 이후 수정사항 반영
7
- * [PDS-1245] 다국어 배포 이후 수정사항 반영
6
+ * [PDS-1336] BoxItem state : disabled일 때, 스펙 수정 건 , 레이아웃에 스크롤 추가