@ncds/ui-admin 1.6.3 → 1.6.4-alpha.1
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/mcp/bin/server.d.ts +1 -0
- package/mcp/bin/server.js +67 -0
- package/mcp/bin/server.mjs +14 -0
- package/mcp/bin/tools/getComponentHtml.d.ts +3 -0
- package/mcp/bin/tools/getComponentHtml.js +30 -0
- package/mcp/bin/tools/getComponentProps.d.ts +3 -0
- package/mcp/bin/tools/getComponentProps.js +16 -0
- package/mcp/bin/tools/listComponents.d.ts +3 -0
- package/mcp/bin/tools/listComponents.js +15 -0
- package/mcp/bin/tools/ping.d.ts +11 -0
- package/mcp/bin/tools/ping.js +30 -0
- package/mcp/bin/tools/searchComponent.d.ts +3 -0
- package/mcp/bin/tools/searchComponent.js +20 -0
- package/mcp/bin/tools/validateHtml.d.ts +10 -0
- package/mcp/bin/tools/validateHtml.js +142 -0
- package/mcp/bin/types.d.ts +28 -0
- package/mcp/bin/types.js +5 -0
- package/mcp/bin/utils/dataLoader.d.ts +11 -0
- package/mcp/bin/utils/dataLoader.js +68 -0
- package/mcp/bin/utils/logger.d.ts +18 -0
- package/mcp/bin/utils/logger.js +27 -0
- package/mcp/bin/utils/response.d.ts +23 -0
- package/mcp/bin/utils/response.js +31 -0
- package/mcp/bin/version.d.ts +1 -0
- package/mcp/bin/version.js +4 -0
- package/mcp/data/.gitkeep +0 -0
- package/mcp/data/_meta.json +7 -0
- package/mcp/data/badge-group.json +73 -0
- package/mcp/data/badge.json +86 -0
- package/mcp/data/bread-crumb.json +22 -0
- package/mcp/data/breadcrumb.json +31 -0
- package/mcp/data/button-group.json +65 -0
- package/mcp/data/button.json +114 -0
- package/mcp/data/carousel-arrow.json +59 -0
- package/mcp/data/carousel-number-group.json +57 -0
- package/mcp/data/carousel.json +22 -0
- package/mcp/data/checkbox.json +31 -0
- package/mcp/data/combobox.json +114 -0
- package/mcp/data/date-picker.json +77 -0
- package/mcp/data/divider.json +56 -0
- package/mcp/data/dot.json +55 -0
- package/mcp/data/dropdown.json +81 -0
- package/mcp/data/empty-state.json +34 -0
- package/mcp/data/featured-icon.json +83 -0
- package/mcp/data/file-input.json +76 -0
- package/mcp/data/horizontal-tab.json +71 -0
- package/mcp/data/image-file-input.json +97 -0
- package/mcp/data/input.json +104 -0
- package/mcp/data/modal.json +85 -0
- package/mcp/data/notification.json +116 -0
- package/mcp/data/number-input.json +128 -0
- package/mcp/data/pagination.json +65 -0
- package/mcp/data/password-input.json +47 -0
- package/mcp/data/progress-bar.json +51 -0
- package/mcp/data/progress-circle.json +54 -0
- package/mcp/data/radio.json +31 -0
- package/mcp/data/range-date-picker-with-buttons.json +64 -0
- package/mcp/data/range-date-picker.json +55 -0
- package/mcp/data/select-dropdown.json +32 -0
- package/mcp/data/select.json +64 -0
- package/mcp/data/selectbox.json +129 -0
- package/mcp/data/slider.json +57 -0
- package/mcp/data/spinner.json +54 -0
- package/mcp/data/switch.json +71 -0
- package/mcp/data/tab.json +122 -0
- package/mcp/data/tag.json +66 -0
- package/mcp/data/textarea.json +88 -0
- package/mcp/data/toggle.json +59 -0
- package/mcp/data/tooltip.json +123 -0
- package/mcp/data/vertical-tab.json +64 -0
- package/mcp/templates/.mcp.json.example +8 -0
- package/mcp/templates/README.md +31 -0
- package/package.json +26 -3
- package/dist/cjs/assets/scripts/comboBox.js +0 -280
- package/dist/cjs/assets/scripts/datePicker.js +0 -706
- package/dist/cjs/assets/scripts/featuredIcon.js +0 -95
- package/dist/cjs/assets/scripts/fileInput/FileInput.js +0 -183
- package/dist/cjs/assets/scripts/fileInput/FileInputModel.js +0 -246
- package/dist/cjs/assets/scripts/fileInput/FileInputView.js +0 -455
- package/dist/cjs/assets/scripts/fileInput/const/classNames.js +0 -35
- package/dist/cjs/assets/scripts/fileInput/const/index.js +0 -27
- package/dist/cjs/assets/scripts/fileInput/const/types.js +0 -13
- package/dist/cjs/assets/scripts/fileInput/index.js +0 -44
- package/dist/cjs/assets/scripts/imageFileInput/ImageFileInput.js +0 -187
- package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputModel.js +0 -255
- package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputView.js +0 -354
- package/dist/cjs/assets/scripts/imageFileInput/const/classNames.js +0 -41
- package/dist/cjs/assets/scripts/imageFileInput/const/index.js +0 -27
- package/dist/cjs/assets/scripts/imageFileInput/const/types.js +0 -13
- package/dist/cjs/assets/scripts/imageFileInput/index.js +0 -44
- package/dist/cjs/assets/scripts/index.js +0 -30
- package/dist/cjs/assets/scripts/modal/Modal.js +0 -116
- package/dist/cjs/assets/scripts/modal/ModalActions.js +0 -128
- package/dist/cjs/assets/scripts/modal/ModalContent.js +0 -46
- package/dist/cjs/assets/scripts/modal/ModalHeader.js +0 -115
- package/dist/cjs/assets/scripts/modal/const/classNames.js +0 -41
- package/dist/cjs/assets/scripts/modal/const/index.js +0 -27
- package/dist/cjs/assets/scripts/modal/const/types.js +0 -5
- package/dist/cjs/assets/scripts/modal/index.js +0 -61
- package/dist/cjs/assets/scripts/modal/utils/contentUtils.js +0 -35
- package/dist/cjs/assets/scripts/notification/FloatingNotification.js +0 -180
- package/dist/cjs/assets/scripts/notification/FullWidthNotification.js +0 -120
- package/dist/cjs/assets/scripts/notification/MessageNotification.js +0 -146
- package/dist/cjs/assets/scripts/notification/Notification.js +0 -116
- package/dist/cjs/assets/scripts/notification/const/classNames.js +0 -50
- package/dist/cjs/assets/scripts/notification/const/icons.js +0 -45
- package/dist/cjs/assets/scripts/notification/const/index.js +0 -87
- package/dist/cjs/assets/scripts/notification/const/sizes.js +0 -54
- package/dist/cjs/assets/scripts/notification/const/types.js +0 -14
- package/dist/cjs/assets/scripts/notification/index.js +0 -92
- package/dist/cjs/assets/scripts/notification/utils.js +0 -92
- package/dist/cjs/assets/scripts/progress-bar/ProgressBar.js +0 -272
- package/dist/cjs/assets/scripts/progress-bar/index.js +0 -12
- package/dist/cjs/assets/scripts/selectBox.js +0 -319
- package/dist/cjs/assets/scripts/shared/ButtonCloseX.js +0 -46
- package/dist/cjs/assets/scripts/tab.js +0 -40
- package/dist/cjs/assets/scripts/tag/Tag.js +0 -268
- package/dist/cjs/assets/scripts/tag/const/classNames.js +0 -24
- package/dist/cjs/assets/scripts/tag/const/index.js +0 -38
- package/dist/cjs/assets/scripts/tag/const/sizes.js +0 -13
- package/dist/cjs/assets/scripts/tag/const/types.js +0 -5
- package/dist/cjs/assets/scripts/tag/index.js +0 -44
- package/dist/cjs/assets/scripts/tooltip/Tooltip.js +0 -380
- package/dist/cjs/assets/scripts/tooltip/TooltipLayerManager.js +0 -84
- package/dist/cjs/assets/scripts/tooltip/const/classNames.js +0 -29
- package/dist/cjs/assets/scripts/tooltip/const/constants.js +0 -56
- package/dist/cjs/assets/scripts/tooltip/const/icons.js +0 -15
- package/dist/cjs/assets/scripts/tooltip/const/index.js +0 -123
- package/dist/cjs/assets/scripts/tooltip/const/templates.js +0 -49
- package/dist/cjs/assets/scripts/tooltip/const/types.js +0 -5
- package/dist/cjs/assets/scripts/tooltip/index.js +0 -57
- package/dist/cjs/assets/scripts/tooltip/utils.js +0 -41
- package/dist/cjs/assets/scripts/utils/unifiedBox/DOMRenderer.js +0 -384
- package/dist/cjs/assets/scripts/utils/unifiedBox/DropdownModel.js +0 -368
- package/dist/cjs/assets/scripts/utils/unifiedBox/UnifiedBoxController.js +0 -681
- package/dist/cjs/assets/scripts/utils/unifiedBox/UnifiedBoxManager.js +0 -711
- package/dist/esm/assets/scripts/comboBox.js +0 -275
- package/dist/esm/assets/scripts/datePicker.js +0 -699
- package/dist/esm/assets/scripts/featuredIcon.js +0 -90
- package/dist/esm/assets/scripts/fileInput/FileInput.js +0 -178
- package/dist/esm/assets/scripts/fileInput/FileInputModel.js +0 -241
- package/dist/esm/assets/scripts/fileInput/FileInputView.js +0 -450
- package/dist/esm/assets/scripts/fileInput/const/classNames.js +0 -25
- package/dist/esm/assets/scripts/fileInput/const/index.js +0 -2
- package/dist/esm/assets/scripts/fileInput/const/types.js +0 -7
- package/dist/esm/assets/scripts/fileInput/index.js +0 -9
- package/dist/esm/assets/scripts/imageFileInput/ImageFileInput.js +0 -182
- package/dist/esm/assets/scripts/imageFileInput/ImageFileInputModel.js +0 -250
- package/dist/esm/assets/scripts/imageFileInput/ImageFileInputView.js +0 -349
- package/dist/esm/assets/scripts/imageFileInput/const/classNames.js +0 -30
- package/dist/esm/assets/scripts/imageFileInput/const/index.js +0 -2
- package/dist/esm/assets/scripts/imageFileInput/const/types.js +0 -7
- package/dist/esm/assets/scripts/imageFileInput/index.js +0 -9
- package/dist/esm/assets/scripts/index.js +0 -28
- package/dist/esm/assets/scripts/modal/Modal.js +0 -110
- package/dist/esm/assets/scripts/modal/ModalActions.js +0 -123
- package/dist/esm/assets/scripts/modal/ModalContent.js +0 -41
- package/dist/esm/assets/scripts/modal/ModalHeader.js +0 -110
- package/dist/esm/assets/scripts/modal/const/classNames.js +0 -31
- package/dist/esm/assets/scripts/modal/const/index.js +0 -2
- package/dist/esm/assets/scripts/modal/const/types.js +0 -1
- package/dist/esm/assets/scripts/modal/index.js +0 -15
- package/dist/esm/assets/scripts/modal/utils/contentUtils.js +0 -28
- package/dist/esm/assets/scripts/notification/FloatingNotification.js +0 -176
- package/dist/esm/assets/scripts/notification/FullWidthNotification.js +0 -115
- package/dist/esm/assets/scripts/notification/MessageNotification.js +0 -141
- package/dist/esm/assets/scripts/notification/Notification.js +0 -111
- package/dist/esm/assets/scripts/notification/const/classNames.js +0 -44
- package/dist/esm/assets/scripts/notification/const/icons.js +0 -39
- package/dist/esm/assets/scripts/notification/const/index.js +0 -4
- package/dist/esm/assets/scripts/notification/const/sizes.js +0 -48
- package/dist/esm/assets/scripts/notification/const/types.js +0 -8
- package/dist/esm/assets/scripts/notification/index.js +0 -11
- package/dist/esm/assets/scripts/notification/utils.js +0 -79
- package/dist/esm/assets/scripts/progress-bar/ProgressBar.js +0 -267
- package/dist/esm/assets/scripts/progress-bar/index.js +0 -1
- package/dist/esm/assets/scripts/selectBox.js +0 -314
- package/dist/esm/assets/scripts/shared/ButtonCloseX.js +0 -38
- package/dist/esm/assets/scripts/tab.js +0 -35
- package/dist/esm/assets/scripts/tag/Tag.js +0 -263
- package/dist/esm/assets/scripts/tag/const/classNames.js +0 -16
- package/dist/esm/assets/scripts/tag/const/index.js +0 -3
- package/dist/esm/assets/scripts/tag/const/sizes.js +0 -7
- package/dist/esm/assets/scripts/tag/const/types.js +0 -1
- package/dist/esm/assets/scripts/tag/index.js +0 -9
- package/dist/esm/assets/scripts/tooltip/Tooltip.js +0 -375
- package/dist/esm/assets/scripts/tooltip/TooltipLayerManager.js +0 -79
- package/dist/esm/assets/scripts/tooltip/const/classNames.js +0 -23
- package/dist/esm/assets/scripts/tooltip/const/constants.js +0 -50
- package/dist/esm/assets/scripts/tooltip/const/icons.js +0 -9
- package/dist/esm/assets/scripts/tooltip/const/index.js +0 -4
- package/dist/esm/assets/scripts/tooltip/const/templates.js +0 -42
- package/dist/esm/assets/scripts/tooltip/const/types.js +0 -1
- package/dist/esm/assets/scripts/tooltip/index.js +0 -10
- package/dist/esm/assets/scripts/tooltip/utils.js +0 -35
- package/dist/esm/assets/scripts/utils/unifiedBox/DOMRenderer.js +0 -379
- package/dist/esm/assets/scripts/utils/unifiedBox/DropdownModel.js +0 -363
- package/dist/esm/assets/scripts/utils/unifiedBox/UnifiedBoxController.js +0 -676
- package/dist/esm/assets/scripts/utils/unifiedBox/UnifiedBoxManager.js +0 -706
- package/dist/types/assets/scripts/comboBox.d.ts +0 -91
- package/dist/types/assets/scripts/datePicker.d.ts +0 -87
- package/dist/types/assets/scripts/featuredIcon.d.ts +0 -23
- package/dist/types/assets/scripts/fileInput/FileInput.d.ts +0 -67
- package/dist/types/assets/scripts/fileInput/FileInputModel.d.ts +0 -70
- package/dist/types/assets/scripts/fileInput/FileInputView.d.ts +0 -77
- package/dist/types/assets/scripts/fileInput/const/classNames.d.ts +0 -17
- package/dist/types/assets/scripts/fileInput/const/index.d.ts +0 -3
- package/dist/types/assets/scripts/fileInput/const/types.d.ts +0 -132
- package/dist/types/assets/scripts/fileInput/index.d.ts +0 -4
- package/dist/types/assets/scripts/imageFileInput/ImageFileInput.d.ts +0 -64
- package/dist/types/assets/scripts/imageFileInput/ImageFileInputModel.d.ts +0 -74
- package/dist/types/assets/scripts/imageFileInput/ImageFileInputView.d.ts +0 -80
- package/dist/types/assets/scripts/imageFileInput/const/classNames.d.ts +0 -20
- package/dist/types/assets/scripts/imageFileInput/const/index.d.ts +0 -3
- package/dist/types/assets/scripts/imageFileInput/const/types.d.ts +0 -126
- package/dist/types/assets/scripts/imageFileInput/index.d.ts +0 -4
- package/dist/types/assets/scripts/index.d.ts +0 -33
- package/dist/types/assets/scripts/modal/Modal.d.ts +0 -28
- package/dist/types/assets/scripts/modal/ModalActions.d.ts +0 -19
- package/dist/types/assets/scripts/modal/ModalContent.d.ts +0 -14
- package/dist/types/assets/scripts/modal/ModalHeader.d.ts +0 -16
- package/dist/types/assets/scripts/modal/const/classNames.d.ts +0 -23
- package/dist/types/assets/scripts/modal/const/index.d.ts +0 -3
- package/dist/types/assets/scripts/modal/const/types.d.ts +0 -62
- package/dist/types/assets/scripts/modal/index.d.ts +0 -8
- package/dist/types/assets/scripts/modal/utils/contentUtils.d.ts +0 -11
- package/dist/types/assets/scripts/notification/FloatingNotification.d.ts +0 -25
- package/dist/types/assets/scripts/notification/FullWidthNotification.d.ts +0 -22
- package/dist/types/assets/scripts/notification/MessageNotification.d.ts +0 -23
- package/dist/types/assets/scripts/notification/Notification.d.ts +0 -22
- package/dist/types/assets/scripts/notification/const/classNames.d.ts +0 -44
- package/dist/types/assets/scripts/notification/const/icons.d.ts +0 -26
- package/dist/types/assets/scripts/notification/const/index.d.ts +0 -6
- package/dist/types/assets/scripts/notification/const/sizes.d.ts +0 -33
- package/dist/types/assets/scripts/notification/const/types.d.ts +0 -20
- package/dist/types/assets/scripts/notification/index.d.ts +0 -8
- package/dist/types/assets/scripts/notification/utils.d.ts +0 -9
- package/dist/types/assets/scripts/progress-bar/ProgressBar.d.ts +0 -68
- package/dist/types/assets/scripts/progress-bar/index.d.ts +0 -2
- package/dist/types/assets/scripts/selectBox.d.ts +0 -77
- package/dist/types/assets/scripts/shared/ButtonCloseX.d.ts +0 -6
- package/dist/types/assets/scripts/tab.d.ts +0 -8
- package/dist/types/assets/scripts/tag/Tag.d.ts +0 -28
- package/dist/types/assets/scripts/tag/const/classNames.d.ts +0 -12
- package/dist/types/assets/scripts/tag/const/index.d.ts +0 -4
- package/dist/types/assets/scripts/tag/const/sizes.d.ts +0 -8
- package/dist/types/assets/scripts/tag/const/types.d.ts +0 -34
- package/dist/types/assets/scripts/tag/index.d.ts +0 -4
- package/dist/types/assets/scripts/tooltip/Tooltip.d.ts +0 -55
- package/dist/types/assets/scripts/tooltip/TooltipLayerManager.d.ts +0 -22
- package/dist/types/assets/scripts/tooltip/const/classNames.d.ts +0 -18
- package/dist/types/assets/scripts/tooltip/const/constants.d.ts +0 -34
- package/dist/types/assets/scripts/tooltip/const/icons.d.ts +0 -5
- package/dist/types/assets/scripts/tooltip/const/index.d.ts +0 -6
- package/dist/types/assets/scripts/tooltip/const/templates.d.ts +0 -17
- package/dist/types/assets/scripts/tooltip/const/types.d.ts +0 -15
- package/dist/types/assets/scripts/tooltip/index.d.ts +0 -7
- package/dist/types/assets/scripts/tooltip/utils.d.ts +0 -3
- package/dist/types/assets/scripts/utils/unifiedBox/DOMRenderer.d.ts +0 -108
- package/dist/types/assets/scripts/utils/unifiedBox/DropdownModel.d.ts +0 -158
- package/dist/types/assets/scripts/utils/unifiedBox/UnifiedBoxController.d.ts +0 -171
- package/dist/types/assets/scripts/utils/unifiedBox/UnifiedBoxManager.d.ts +0 -99
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ProgressBar 클래스
|
|
3
|
-
* 프로그레스 바를 생성하고 관리하는 역할을 합니다.
|
|
4
|
-
*/
|
|
5
|
-
var __assign = this && this.__assign || function () {
|
|
6
|
-
__assign = Object.assign || function (t) {
|
|
7
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
8
|
-
s = arguments[i];
|
|
9
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
10
|
-
}
|
|
11
|
-
return t;
|
|
12
|
-
};
|
|
13
|
-
return __assign.apply(this, arguments);
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* 값을 0-100 범위로 제한
|
|
17
|
-
*/
|
|
18
|
-
function clampValue(value) {
|
|
19
|
-
return Math.min(Math.max(0, value), 100);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 색상 이름을 fill 색상 클래스명으로 변환
|
|
23
|
-
*/
|
|
24
|
-
function getFillColorClass(color) {
|
|
25
|
-
if (!color) return '';
|
|
26
|
-
var normalizedColor = color.toLowerCase().trim();
|
|
27
|
-
return "ncua-progress-bar__fill--color-".concat(normalizedColor);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* 색상 이름을 label 색상 클래스명으로 변환
|
|
31
|
-
*/
|
|
32
|
-
function getLabelColorClass(color) {
|
|
33
|
-
if (!color) return '';
|
|
34
|
-
var normalizedColor = color.toLowerCase().trim();
|
|
35
|
-
return "ncua-progress-bar__label--color-".concat(normalizedColor);
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* ProgressBar 클래스
|
|
39
|
-
*/
|
|
40
|
-
var ProgressBar = /** @class */function () {
|
|
41
|
-
function ProgressBar(options) {
|
|
42
|
-
if (options === void 0) {
|
|
43
|
-
options = {};
|
|
44
|
-
}
|
|
45
|
-
this.element = null;
|
|
46
|
-
this.options = __assign({
|
|
47
|
-
showZeroLabel: false,
|
|
48
|
-
valueToPercent: true
|
|
49
|
-
}, options);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* segments 처리 로직
|
|
53
|
-
*/
|
|
54
|
-
ProgressBar.prototype.processSegments = function () {
|
|
55
|
-
var _a;
|
|
56
|
-
var _b = this.options,
|
|
57
|
-
segments = _b.segments,
|
|
58
|
-
label = _b.label,
|
|
59
|
-
valueToPercent = _b.valueToPercent;
|
|
60
|
-
var hasSegments = Boolean(segments && segments.length > 0);
|
|
61
|
-
var segmentCount = (_a = segments === null || segments === void 0 ? void 0 : segments.length) !== null && _a !== void 0 ? _a : 0;
|
|
62
|
-
if (hasSegments) {
|
|
63
|
-
// segment가 2개 이상일 때만 valueToPercent 적용 (기본값: true)
|
|
64
|
-
var shouldApplyValueToPercent = segmentCount >= 2 && valueToPercent !== false;
|
|
65
|
-
var segmentsToProcess = segments;
|
|
66
|
-
// valueToPercent 적용: segments의 합계를 100%로 규정하고 비율로 계산
|
|
67
|
-
if (shouldApplyValueToPercent) {
|
|
68
|
-
// 원본 값들의 합계 계산
|
|
69
|
-
var originalTotal_1 = segmentsToProcess.reduce(function (sum, seg) {
|
|
70
|
-
return sum + seg.value;
|
|
71
|
-
}, 0);
|
|
72
|
-
if (originalTotal_1 > 0) {
|
|
73
|
-
// 각 segment를 합계 대비 비율로 변환 (합계를 100%로 규정)
|
|
74
|
-
segmentsToProcess = segmentsToProcess.map(function (segment) {
|
|
75
|
-
return {
|
|
76
|
-
value: segment.value / originalTotal_1 * 100,
|
|
77
|
-
color: segment.color
|
|
78
|
-
};
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// 각 값 제한 (0-100 범위)
|
|
83
|
-
var limitedSegments = segmentsToProcess.map(function (segment) {
|
|
84
|
-
return {
|
|
85
|
-
value: clampValue(segment.value),
|
|
86
|
-
color: segment.color
|
|
87
|
-
};
|
|
88
|
-
});
|
|
89
|
-
// 전체 합계 계산
|
|
90
|
-
var actualTotal_1 = limitedSegments.reduce(function (sum, seg) {
|
|
91
|
-
return sum + seg.value;
|
|
92
|
-
}, 0);
|
|
93
|
-
var total_1 = Math.min(actualTotal_1, 100);
|
|
94
|
-
// 모든 segments를 좌측에서부터 연속적으로 배치 (비율로 계산)
|
|
95
|
-
var processed = limitedSegments.map(function (segment) {
|
|
96
|
-
return __assign(__assign({}, segment), {
|
|
97
|
-
width: actualTotal_1 > 0 ? segment.value / actualTotal_1 * total_1 : 0
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
// segment의 개수가 2이상일때는 bottom 라벨로 고정
|
|
101
|
-
var effectiveLabel = segmentCount >= 2 ? 'bottom' : label;
|
|
102
|
-
// floating label 스타일
|
|
103
|
-
var progressValueStyle = effectiveLabel === 'top-float' || effectiveLabel === 'bottom-float' ? {
|
|
104
|
-
'--progress-value': "".concat(total_1, "%")
|
|
105
|
-
} : undefined;
|
|
106
|
-
return {
|
|
107
|
-
totalValue: total_1,
|
|
108
|
-
displayValue: "".concat(total_1.toFixed(0), "%"),
|
|
109
|
-
processedSegments: processed,
|
|
110
|
-
effectiveLabel: effectiveLabel,
|
|
111
|
-
progressValueStyle: progressValueStyle
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
// value만 있을 때는 valueToPercent 무시 (이미 퍼센트로 간주)
|
|
115
|
-
if (this.options.value !== undefined) {
|
|
116
|
-
var clamped = clampValue(this.options.value);
|
|
117
|
-
var effectiveLabel = label;
|
|
118
|
-
var progressValueStyle = effectiveLabel === 'top-float' || effectiveLabel === 'bottom-float' ? {
|
|
119
|
-
'--progress-value': "".concat(clamped, "%")
|
|
120
|
-
} : undefined;
|
|
121
|
-
return {
|
|
122
|
-
totalValue: clamped,
|
|
123
|
-
displayValue: "".concat(clamped.toFixed(0), "%"),
|
|
124
|
-
processedSegments: [],
|
|
125
|
-
effectiveLabel: effectiveLabel,
|
|
126
|
-
progressValueStyle: progressValueStyle
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
130
|
-
totalValue: 0,
|
|
131
|
-
displayValue: '0%',
|
|
132
|
-
processedSegments: [],
|
|
133
|
-
effectiveLabel: label,
|
|
134
|
-
progressValueStyle: undefined
|
|
135
|
-
};
|
|
136
|
-
};
|
|
137
|
-
/**
|
|
138
|
-
* 단일 라벨 HTML 생성
|
|
139
|
-
*/
|
|
140
|
-
ProgressBar.prototype.renderSingleLabel = function (labelType, displayValue, totalValue) {
|
|
141
|
-
// 0%이고 showZeroLabel이 false면 라벨 표시하지 않음
|
|
142
|
-
if (totalValue === 0 && !this.options.showZeroLabel) {
|
|
143
|
-
return '';
|
|
144
|
-
}
|
|
145
|
-
return "<span class=\"ncua-progress-bar__label ncua-progress-bar__label-".concat(labelType, "\">").concat(displayValue, "</span>");
|
|
146
|
-
};
|
|
147
|
-
/**
|
|
148
|
-
* segments 라벨 HTML 생성
|
|
149
|
-
*/
|
|
150
|
-
ProgressBar.prototype.renderSegmentLabels = function (segments, segmentCount) {
|
|
151
|
-
var _this = this;
|
|
152
|
-
if (segmentCount < 2) return '';
|
|
153
|
-
var labels = [];
|
|
154
|
-
segments.forEach(function (segment, index) {
|
|
155
|
-
// 0%이고 showZeroLabel이 false면 라벨 표시하지 않음
|
|
156
|
-
if (segment.value === 0 && !_this.options.showZeroLabel) {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
var leftPosition = 0;
|
|
160
|
-
for (var i = 0; i < index; i++) {
|
|
161
|
-
leftPosition += segments[i].width;
|
|
162
|
-
}
|
|
163
|
-
// 0%일 때는 segment 시작 위치에 맞추되, 라벨이 게이지 바를 넘어가지 않도록 조정
|
|
164
|
-
// 그 외에는 중앙에 정렬
|
|
165
|
-
var isZero = segment.value === 0;
|
|
166
|
-
// 0%일 때는 약간의 오프셋을 주어 자연스럽게 보이도록 함 (라벨 너비의 절반 정도)
|
|
167
|
-
var labelPosition = isZero ? Math.max(0, leftPosition - 1) : leftPosition + segment.width / 2;
|
|
168
|
-
var transform = isZero ? 'translateX(0)' : 'translateX(-50%)';
|
|
169
|
-
var colorClass = getLabelColorClass(segment.color);
|
|
170
|
-
labels.push("<span class=\"ncua-progress-bar__label ncua-progress-bar__label--segment ".concat(colorClass, "\" style=\"left: ").concat(labelPosition, "%; transform: ").concat(transform, ";\">").concat(segment.value.toFixed(0), "%</span>"));
|
|
171
|
-
});
|
|
172
|
-
return labels.length > 0 ? "<div class=\"ncua-progress-bar__labels--multiple\">".concat(labels.join(''), "</div>") : '';
|
|
173
|
-
};
|
|
174
|
-
/**
|
|
175
|
-
* segment bar HTML 생성
|
|
176
|
-
*/
|
|
177
|
-
ProgressBar.prototype.renderSegmentBar = function (segments) {
|
|
178
|
-
var fills = [];
|
|
179
|
-
segments.forEach(function (segment, index) {
|
|
180
|
-
var classes = ['ncua-progress-bar__fill', index === 0 ? 'ncua-progress-bar__fill--first' : '', index === segments.length - 1 ? 'ncua-progress-bar__fill--last' : '', getFillColorClass(segment.color)].filter(Boolean).join(' ');
|
|
181
|
-
fills.push("<div class=\"".concat(classes, "\" style=\"width: ").concat(segment.width, "%;\"></div>"));
|
|
182
|
-
});
|
|
183
|
-
return fills.join('');
|
|
184
|
-
};
|
|
185
|
-
/**
|
|
186
|
-
* HTML 문자열 생성
|
|
187
|
-
*/
|
|
188
|
-
ProgressBar.prototype.toHTML = function () {
|
|
189
|
-
var _a, _b;
|
|
190
|
-
var _c = this.processSegments(),
|
|
191
|
-
totalValue = _c.totalValue,
|
|
192
|
-
displayValue = _c.displayValue,
|
|
193
|
-
processedSegments = _c.processedSegments,
|
|
194
|
-
effectiveLabel = _c.effectiveLabel,
|
|
195
|
-
progressValueStyle = _c.progressValueStyle;
|
|
196
|
-
var hasSegments = Boolean(this.options.segments && this.options.segments.length > 0);
|
|
197
|
-
var segmentCount = (_b = (_a = this.options.segments) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
|
|
198
|
-
var isFloatingLabel = effectiveLabel === 'top-float' || effectiveLabel === 'bottom-float';
|
|
199
|
-
// 스타일 문자열 생성
|
|
200
|
-
var styleString = progressValueStyle ? "style=\"".concat(Object.entries(progressValueStyle).map(function (_a) {
|
|
201
|
-
var key = _a[0],
|
|
202
|
-
value = _a[1];
|
|
203
|
-
return "".concat(key.replace(/([A-Z])/g, '-$1').toLowerCase(), ": ").concat(value);
|
|
204
|
-
}).join('; '), "\"") : '';
|
|
205
|
-
// segment가 1개이거나 value만 있을 때는 동일하게 처리 (단일 progress bar)
|
|
206
|
-
var isSingleBar = segmentCount < 2; // segment가 0개 또는 1개일 때
|
|
207
|
-
if (isSingleBar) {
|
|
208
|
-
var fillColorClass = hasSegments && segmentCount === 1 ? getFillColorClass(processedSegments[0].color) : '';
|
|
209
|
-
var floatingLabel_1 = isFloatingLabel ? this.renderSingleLabel(effectiveLabel, displayValue, totalValue) : '';
|
|
210
|
-
var rightLabel_1 = effectiveLabel === 'right' ? this.renderSingleLabel('right', displayValue, totalValue) : '';
|
|
211
|
-
var bottomLabel_1 = effectiveLabel === 'bottom' ? this.renderSingleLabel('bottom', displayValue, totalValue) : '';
|
|
212
|
-
// 단일 progress bar일 때는 text-align: left를 위한 클래스 추가
|
|
213
|
-
var singleSegmentClass = 'ncua-progress-bar--single-segment';
|
|
214
|
-
return "<div class=\"ncua-progress-bar ncua-progress-bar-".concat(effectiveLabel || '', " ").concat(singleSegmentClass, "\" ").concat(styleString, ">\n ").concat(floatingLabel_1, "\n <div class=\"ncua-progress-bar__content\">\n <div class=\"ncua-progress-bar__bar\">\n <div class=\"ncua-progress-bar__fill ").concat(fillColorClass, "\" style=\"width: ").concat(totalValue, "%;\" aria-valuenow=\"").concat(totalValue, "\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\n </div>\n ").concat(rightLabel_1, "\n </div>\n ").concat(bottomLabel_1, "\n</div>");
|
|
215
|
-
}
|
|
216
|
-
// 일반 케이스
|
|
217
|
-
var floatingLabel = isFloatingLabel ? this.renderSingleLabel(effectiveLabel, displayValue, totalValue) : '';
|
|
218
|
-
var rightLabel = effectiveLabel === 'right' ? this.renderSingleLabel('right', displayValue, totalValue) : '';
|
|
219
|
-
var bottomLabel = effectiveLabel === 'bottom' ? this.renderSingleLabel('bottom', displayValue, totalValue) : '';
|
|
220
|
-
var segmentLabels = hasSegments && segmentCount >= 2 ? this.renderSegmentLabels(processedSegments, segmentCount) : '';
|
|
221
|
-
var segmentBar = hasSegments ? this.renderSegmentBar(processedSegments) : "<div class=\"ncua-progress-bar__fill\" style=\"width: ".concat(totalValue, "%;\" aria-valuenow=\"").concat(totalValue, "\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>");
|
|
222
|
-
var segmentsClass = hasSegments ? 'ncua-progress-bar__bar--segments' : '';
|
|
223
|
-
return "<div class=\"ncua-progress-bar ncua-progress-bar-".concat(effectiveLabel || '', "\" ").concat(styleString, ">\n ").concat(floatingLabel, "\n <div class=\"ncua-progress-bar__content\">\n <div class=\"ncua-progress-bar__bar ").concat(segmentsClass, "\">\n ").concat(segmentBar, "\n </div>\n ").concat(rightLabel, "\n </div>\n ").concat(hasSegments && segmentCount >= 2 ? segmentLabels : bottomLabel, "\n</div>");
|
|
224
|
-
};
|
|
225
|
-
/**
|
|
226
|
-
* DOM 요소 생성
|
|
227
|
-
*/
|
|
228
|
-
ProgressBar.prototype.toElement = function () {
|
|
229
|
-
var div = document.createElement('div');
|
|
230
|
-
div.innerHTML = this.toHTML();
|
|
231
|
-
this.element = div.firstElementChild;
|
|
232
|
-
return this.element;
|
|
233
|
-
};
|
|
234
|
-
/**
|
|
235
|
-
* 요소 반환
|
|
236
|
-
*/
|
|
237
|
-
ProgressBar.prototype.getElement = function () {
|
|
238
|
-
return this.toElement();
|
|
239
|
-
};
|
|
240
|
-
/**
|
|
241
|
-
* 옵션 업데이트
|
|
242
|
-
*/
|
|
243
|
-
ProgressBar.prototype.updateOptions = function (newOptions) {
|
|
244
|
-
this.options = __assign(__assign({}, this.options), newOptions);
|
|
245
|
-
if (this.element) {
|
|
246
|
-
var newElement = this.toElement();
|
|
247
|
-
if (this.element.parentNode) {
|
|
248
|
-
this.element.parentNode.replaceChild(newElement, this.element);
|
|
249
|
-
}
|
|
250
|
-
this.element = newElement;
|
|
251
|
-
}
|
|
252
|
-
};
|
|
253
|
-
/**
|
|
254
|
-
* Static factory method
|
|
255
|
-
*/
|
|
256
|
-
ProgressBar.create = function (options) {
|
|
257
|
-
return new ProgressBar(options);
|
|
258
|
-
};
|
|
259
|
-
/**
|
|
260
|
-
* Static method: HTML 문자열 생성
|
|
261
|
-
*/
|
|
262
|
-
ProgressBar.toHTML = function (options) {
|
|
263
|
-
return new ProgressBar(options).toHTML();
|
|
264
|
-
};
|
|
265
|
-
return ProgressBar;
|
|
266
|
-
}();
|
|
267
|
-
export { ProgressBar };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { ProgressBar } from './ProgressBar';
|
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
var __assign = this && this.__assign || function () {
|
|
2
|
-
__assign = Object.assign || function (t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
6
|
-
}
|
|
7
|
-
return t;
|
|
8
|
-
};
|
|
9
|
-
return __assign.apply(this, arguments);
|
|
10
|
-
};
|
|
11
|
-
import { UnifiedBoxManager } from './utils/unifiedBox/UnifiedBoxManager';
|
|
12
|
-
var SelectBox = /** @class */function () {
|
|
13
|
-
function SelectBox(element, config) {
|
|
14
|
-
if (config === void 0) {
|
|
15
|
-
config = {};
|
|
16
|
-
}
|
|
17
|
-
var _this = this;
|
|
18
|
-
var _a, _b, _c, _d, _e, _f;
|
|
19
|
-
this.targetSelect = null;
|
|
20
|
-
this.isInitializing = true;
|
|
21
|
-
this.lastValue = '';
|
|
22
|
-
this.element = element;
|
|
23
|
-
// 타겟 select 요소 찾기
|
|
24
|
-
this.targetSelect = this.findTargetSelect(element);
|
|
25
|
-
// HTML에서 옵션 파싱 (config.options가 없을 경우)
|
|
26
|
-
var htmlOptions = this.parseOptionsFromHTML();
|
|
27
|
-
// JavaScript 옵션을 DropdownOption 형식으로 변환
|
|
28
|
-
var normalizedOptions = config.options ? this.normalizeOptions(config.options) : htmlOptions;
|
|
29
|
-
var finalOptions = normalizedOptions;
|
|
30
|
-
// HTML에서 속성 파싱
|
|
31
|
-
var htmlAttributes = this.parseAttributesFromHTML();
|
|
32
|
-
// 기존 API를 새 API로 변환
|
|
33
|
-
var unifiedConfig = __assign(__assign({}, config), {
|
|
34
|
-
type: 'selectbox',
|
|
35
|
-
multiple: (_a = config.multiple) !== null && _a !== void 0 ? _a : false,
|
|
36
|
-
showFooterButtons: (_b = config.showFooterButtons) !== null && _b !== void 0 ? _b : false,
|
|
37
|
-
onEdit: config.onEdit,
|
|
38
|
-
onSelectAll: config.onSelectAll,
|
|
39
|
-
onComplete: config.onComplete,
|
|
40
|
-
options: finalOptions,
|
|
41
|
-
placeholder: config.placeholder || htmlAttributes.placeholder || '선택하세요',
|
|
42
|
-
value: (_d = (_c = config.value) !== null && _c !== void 0 ? _c : htmlAttributes.value) !== null && _d !== void 0 ? _d : config.multiple ? [] : '',
|
|
43
|
-
disabled: (_f = (_e = config.disabled) !== null && _e !== void 0 ? _e : htmlAttributes.disabled) !== null && _f !== void 0 ? _f : false,
|
|
44
|
-
size: config.size || htmlAttributes.size || 'md',
|
|
45
|
-
onChange: function (value) {
|
|
46
|
-
var _a;
|
|
47
|
-
// 초기화 중에는 동기화하지 않음 (무한 루프 방지)
|
|
48
|
-
if (_this.isInitializing) {
|
|
49
|
-
_this.lastValue = value; // 초기값 저장
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
// 값이 실제로 변경되지 않았으면 동기화 생략 (무한 루프 방지)
|
|
53
|
-
if (JSON.stringify(_this.lastValue) === JSON.stringify(value)) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
_this.lastValue = value; // 새 값 저장
|
|
57
|
-
// 타겟 select와 동기화
|
|
58
|
-
if (config.multiple) {
|
|
59
|
-
_this.syncWithTargetSelectMultiple(value);
|
|
60
|
-
} else {
|
|
61
|
-
_this.syncWithTargetSelect(value);
|
|
62
|
-
}
|
|
63
|
-
// onChange 콜백에는 실제 value를 전달
|
|
64
|
-
var realValue = config.multiple ? value.map(function (v) {
|
|
65
|
-
return _this.getRealValueFromId(v);
|
|
66
|
-
}) : _this.getRealValueFromId(value);
|
|
67
|
-
(_a = config.onChange) === null || _a === void 0 ? void 0 : _a.call(config, realValue);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
this.unifiedSelectBox = new UnifiedBoxManager(element, unifiedConfig);
|
|
71
|
-
// 초기화 완료 (다음 이벤트 루프에서 실행)
|
|
72
|
-
setTimeout(function () {
|
|
73
|
-
_this.isInitializing = false;
|
|
74
|
-
}, 0);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* JavaScript 옵션을 DropdownOption 형식으로 변환
|
|
78
|
-
*/
|
|
79
|
-
SelectBox.prototype.normalizeOptions = function (options) {
|
|
80
|
-
return options.map(function (option) {
|
|
81
|
-
// 이미 DropdownOption 형식인 경우
|
|
82
|
-
if ('label' in option) {
|
|
83
|
-
return option;
|
|
84
|
-
}
|
|
85
|
-
// SelectBoxOptionType 형식인 경우 (text -> label 변환)
|
|
86
|
-
var selectBoxOption = option;
|
|
87
|
-
return {
|
|
88
|
-
id: selectBoxOption.id,
|
|
89
|
-
label: selectBoxOption.text,
|
|
90
|
-
disabled: selectBoxOption.disabled
|
|
91
|
-
};
|
|
92
|
-
});
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* 타겟 select 요소 찾기
|
|
96
|
-
*/
|
|
97
|
-
SelectBox.prototype.findTargetSelect = function (element) {
|
|
98
|
-
// 1. 직접 select 태그인 경우
|
|
99
|
-
if (element.tagName === 'SELECT') {
|
|
100
|
-
return element;
|
|
101
|
-
}
|
|
102
|
-
// 2. 자식으로 select 태그가 있는 경우
|
|
103
|
-
var selectChild = element.querySelector('select');
|
|
104
|
-
if (selectChild) {
|
|
105
|
-
return selectChild;
|
|
106
|
-
}
|
|
107
|
-
// 3. data-target 속성으로 지정된 경우
|
|
108
|
-
var targetId = element.getAttribute('data-target');
|
|
109
|
-
if (targetId) {
|
|
110
|
-
var targetElement = document.getElementById(targetId);
|
|
111
|
-
if (targetElement && targetElement.tagName === 'SELECT') {
|
|
112
|
-
return targetElement;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return null;
|
|
116
|
-
};
|
|
117
|
-
/**
|
|
118
|
-
* HTML select에서 옵션 파싱
|
|
119
|
-
*/
|
|
120
|
-
SelectBox.prototype.parseOptionsFromHTML = function () {
|
|
121
|
-
if (!this.targetSelect) return [];
|
|
122
|
-
var options = [];
|
|
123
|
-
var optionElements = this.targetSelect.querySelectorAll('option');
|
|
124
|
-
// 빈 값 옵션 개수 확인 (최적화를 위해)
|
|
125
|
-
var emptyValueCount = Array.from(optionElements).filter(function (opt) {
|
|
126
|
-
return opt.value === '';
|
|
127
|
-
}).length;
|
|
128
|
-
optionElements.forEach(function (optionElement, index) {
|
|
129
|
-
var optionValue = optionElement.value;
|
|
130
|
-
// 빈 값 옵션이 1개뿐이면 단순 처리, 여러 개면 고유 ID 생성
|
|
131
|
-
var optionId;
|
|
132
|
-
if (optionValue !== '') {
|
|
133
|
-
optionId = optionValue;
|
|
134
|
-
} else if (emptyValueCount === 1) {
|
|
135
|
-
// 빈 값 옵션이 하나뿐이면 그냥 빈 문자열 사용 (단순화)
|
|
136
|
-
optionId = '';
|
|
137
|
-
} else {
|
|
138
|
-
// 빈 값 옵션이 여러 개면 고유 ID 생성 (구분 필요)
|
|
139
|
-
optionId = "__empty_option_".concat(index);
|
|
140
|
-
}
|
|
141
|
-
options.push({
|
|
142
|
-
id: optionId,
|
|
143
|
-
label: optionElement.textContent || optionElement.value || '선택하세요',
|
|
144
|
-
disabled: optionElement.disabled,
|
|
145
|
-
// 원본 value 저장 (동기화를 위해)
|
|
146
|
-
originalValue: optionValue
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
return options;
|
|
150
|
-
};
|
|
151
|
-
/**
|
|
152
|
-
* HTML에서 속성 파싱
|
|
153
|
-
*/
|
|
154
|
-
SelectBox.prototype.parseAttributesFromHTML = function () {
|
|
155
|
-
var attributes = {};
|
|
156
|
-
if (this.targetSelect) {
|
|
157
|
-
// select 요소의 속성들
|
|
158
|
-
if (this.targetSelect.disabled) attributes.disabled = true;
|
|
159
|
-
if (this.targetSelect.value) attributes.value = this.targetSelect.value;
|
|
160
|
-
// placeholder는 첫 번째 빈 option에서 가져오기
|
|
161
|
-
var firstOption = this.targetSelect.querySelector('option[value=""], option:not([value])');
|
|
162
|
-
if (firstOption) {
|
|
163
|
-
attributes.placeholder = firstOption.textContent || '선택하세요';
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
// 컨테이너 요소의 data 속성들
|
|
167
|
-
var containerAttributes = this.element.dataset;
|
|
168
|
-
if (containerAttributes.placeholder) attributes.placeholder = containerAttributes.placeholder;
|
|
169
|
-
if (containerAttributes.size) attributes.size = containerAttributes.size;
|
|
170
|
-
if (containerAttributes.disabled === 'true') attributes.disabled = true;
|
|
171
|
-
return attributes;
|
|
172
|
-
};
|
|
173
|
-
/**
|
|
174
|
-
* ID로부터 실제 HTML select의 value 값을 가져오기
|
|
175
|
-
*/
|
|
176
|
-
SelectBox.prototype.getRealValueFromId = function (id) {
|
|
177
|
-
var options = this.unifiedSelectBox.getOptions();
|
|
178
|
-
var option = options.find(function (opt) {
|
|
179
|
-
return opt.id === id;
|
|
180
|
-
});
|
|
181
|
-
// originalValue가 있으면 그것을 사용, 없으면 id를 문자열로 변환
|
|
182
|
-
return (option === null || option === void 0 ? void 0 : option.originalValue) !== undefined ? option.originalValue : String(id);
|
|
183
|
-
};
|
|
184
|
-
/**
|
|
185
|
-
* 실제 HTML select의 value 값으로부터 내부 ID를 가져오기
|
|
186
|
-
*/
|
|
187
|
-
SelectBox.prototype.getIdFromRealValue = function (value) {
|
|
188
|
-
var options = this.unifiedSelectBox.getOptions();
|
|
189
|
-
var option = options.find(function (opt) {
|
|
190
|
-
return opt.originalValue === String(value);
|
|
191
|
-
});
|
|
192
|
-
// originalValue가 일치하는 옵션을 찾으면 그 ID를 반환, 없으면 value 그대로 반환
|
|
193
|
-
return option ? option.id : value;
|
|
194
|
-
};
|
|
195
|
-
/**
|
|
196
|
-
* 타겟 select와 동기화 (Single 모드)
|
|
197
|
-
*/
|
|
198
|
-
SelectBox.prototype.syncWithTargetSelect = function (value) {
|
|
199
|
-
if (this.targetSelect) {
|
|
200
|
-
// originalValue가 있는 옵션을 찾아서 실제 value로 변환
|
|
201
|
-
var realValue = this.getRealValueFromId(value);
|
|
202
|
-
this.targetSelect.value = realValue;
|
|
203
|
-
// select 요소의 change 이벤트 발생
|
|
204
|
-
var event_1 = new Event('change', {
|
|
205
|
-
bubbles: true
|
|
206
|
-
});
|
|
207
|
-
this.targetSelect.dispatchEvent(event_1);
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
/**
|
|
211
|
-
* 타겟 select와 동기화 (Multiple 모드)
|
|
212
|
-
*/
|
|
213
|
-
SelectBox.prototype.syncWithTargetSelectMultiple = function (values) {
|
|
214
|
-
var _this = this;
|
|
215
|
-
if (this.targetSelect && this.targetSelect.multiple) {
|
|
216
|
-
// 모든 옵션 선택 해제
|
|
217
|
-
Array.from(this.targetSelect.options).forEach(function (option) {
|
|
218
|
-
option.selected = false;
|
|
219
|
-
});
|
|
220
|
-
// 선택된 값들에 해당하는 옵션들 선택
|
|
221
|
-
values.forEach(function (value) {
|
|
222
|
-
var realValue = _this.getRealValueFromId(value);
|
|
223
|
-
var option = _this.targetSelect.querySelector("option[value=\"".concat(realValue, "\"]"));
|
|
224
|
-
if (option) {
|
|
225
|
-
option.selected = true;
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
// select 요소의 change 이벤트 발생
|
|
229
|
-
var event_2 = new Event('change', {
|
|
230
|
-
bubbles: true
|
|
231
|
-
});
|
|
232
|
-
this.targetSelect.dispatchEvent(event_2);
|
|
233
|
-
}
|
|
234
|
-
};
|
|
235
|
-
// 기존 API 호환성 메서드들
|
|
236
|
-
SelectBox.prototype.getValues = function () {
|
|
237
|
-
var _this = this;
|
|
238
|
-
var internalValue = this.unifiedSelectBox.getValues();
|
|
239
|
-
return internalValue.map(function (option) {
|
|
240
|
-
return __assign(__assign({}, option), {
|
|
241
|
-
id: _this.getRealValueFromId(option.id)
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
};
|
|
245
|
-
SelectBox.prototype.setValues = function (value) {
|
|
246
|
-
var _this = this;
|
|
247
|
-
var internalValue = value.map(function (v) {
|
|
248
|
-
return _this.getIdFromRealValue(v.id);
|
|
249
|
-
});
|
|
250
|
-
if (JSON.stringify(this.lastValue) === JSON.stringify(internalValue)) {
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
this.lastValue = internalValue;
|
|
254
|
-
// id 배열을 옵션 객체 배열로 변환
|
|
255
|
-
var allOptions = this.unifiedSelectBox.getOptions();
|
|
256
|
-
var optionArray = internalValue.map(function (id) {
|
|
257
|
-
return allOptions.find(function (opt) {
|
|
258
|
-
return opt.id === id;
|
|
259
|
-
});
|
|
260
|
-
}).filter(function (opt) {
|
|
261
|
-
return opt !== undefined;
|
|
262
|
-
});
|
|
263
|
-
this.unifiedSelectBox.setValues(optionArray);
|
|
264
|
-
// setValues 호출 시에도 타겟 select와 동기화
|
|
265
|
-
if (this.targetSelect) {
|
|
266
|
-
if (this.unifiedSelectBox.isMultiple()) {
|
|
267
|
-
this.syncWithTargetSelectMultiple(internalValue);
|
|
268
|
-
} else {
|
|
269
|
-
// 단일 선택 모드인 경우 첫 번째 값만 사용
|
|
270
|
-
this.syncWithTargetSelect(internalValue[0] || '');
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
};
|
|
274
|
-
SelectBox.prototype.getOptions = function () {
|
|
275
|
-
return this.unifiedSelectBox.getOptions();
|
|
276
|
-
};
|
|
277
|
-
SelectBox.prototype.updateOptions = function (newOptions) {
|
|
278
|
-
this.unifiedSelectBox.updateOptions(newOptions);
|
|
279
|
-
};
|
|
280
|
-
SelectBox.prototype.setDisabled = function (disabled) {
|
|
281
|
-
this.unifiedSelectBox.setDisabled(disabled);
|
|
282
|
-
};
|
|
283
|
-
SelectBox.prototype.open = function () {
|
|
284
|
-
this.unifiedSelectBox.open();
|
|
285
|
-
};
|
|
286
|
-
SelectBox.prototype.close = function () {
|
|
287
|
-
this.unifiedSelectBox.close();
|
|
288
|
-
};
|
|
289
|
-
SelectBox.prototype.focus = function () {
|
|
290
|
-
this.unifiedSelectBox.focus();
|
|
291
|
-
};
|
|
292
|
-
SelectBox.prototype.destroy = function () {
|
|
293
|
-
this.unifiedSelectBox.destroy();
|
|
294
|
-
};
|
|
295
|
-
// Multiple 모드 전용 메서드들
|
|
296
|
-
SelectBox.prototype.selectAll = function () {
|
|
297
|
-
this.unifiedSelectBox.selectAll();
|
|
298
|
-
};
|
|
299
|
-
SelectBox.prototype.deselectAll = function () {
|
|
300
|
-
this.unifiedSelectBox.deselectAll();
|
|
301
|
-
};
|
|
302
|
-
SelectBox.prototype.getSelectedCount = function () {
|
|
303
|
-
var values = this.getValues();
|
|
304
|
-
return values.length;
|
|
305
|
-
};
|
|
306
|
-
SelectBox.prototype.isMultiple = function () {
|
|
307
|
-
return this.unifiedSelectBox.isMultiple();
|
|
308
|
-
};
|
|
309
|
-
SelectBox.prototype.toggleSelectAll = function () {
|
|
310
|
-
this.unifiedSelectBox.toggleSelectAll();
|
|
311
|
-
};
|
|
312
|
-
return SelectBox;
|
|
313
|
-
}();
|
|
314
|
-
export { SelectBox };
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// 공통 X버튼 로직 (React ButtonCloseX 컴포넌트와 동일한 구조)
|
|
2
|
-
// React ButtonCloseX와 동일한 SVG 사이즈 매핑
|
|
3
|
-
export var SVG_SIZE = {
|
|
4
|
-
xs: 16,
|
|
5
|
-
sm: 20,
|
|
6
|
-
md: 20,
|
|
7
|
-
lg: 24
|
|
8
|
-
};
|
|
9
|
-
// X버튼 SVG 아이콘
|
|
10
|
-
export var X_CLOSE_SVG = function (size) {
|
|
11
|
-
return "<svg width=\"".concat(size, "\" height=\"").concat(size, "\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>");
|
|
12
|
-
};
|
|
13
|
-
// X버튼 렌더링 유틸리티 (React ButtonCloseX와 동일한 인터페이스)
|
|
14
|
-
export function ButtonCloseX(size, theme, additionalClasses, ariaLabel, onClick) {
|
|
15
|
-
if (theme === void 0) {
|
|
16
|
-
theme = 'light';
|
|
17
|
-
}
|
|
18
|
-
if (additionalClasses === void 0) {
|
|
19
|
-
additionalClasses = '';
|
|
20
|
-
}
|
|
21
|
-
if (ariaLabel === void 0) {
|
|
22
|
-
ariaLabel = '닫기';
|
|
23
|
-
}
|
|
24
|
-
var svgSize = SVG_SIZE[size];
|
|
25
|
-
var buttonId = "close-btn-".concat(Math.random().toString(36).substr(2, 9));
|
|
26
|
-
var buttonHTML = "\n <button type=\"button\" id=\"".concat(buttonId, "\" class=\"ncua-button-close-x ncua-button-close-x--").concat(size, " ncua-button-close-x--").concat(theme, " ").concat(additionalClasses, "\" aria-label=\"").concat(ariaLabel, "\">\n ").concat(X_CLOSE_SVG(svgSize.toString()), "\n </button>\n ");
|
|
27
|
-
// onClick이 제공된 경우 이벤트 바인딩
|
|
28
|
-
if (onClick) {
|
|
29
|
-
// DOM에 추가된 후 이벤트 바인딩을 위해 setTimeout 사용
|
|
30
|
-
setTimeout(function () {
|
|
31
|
-
var button = document.getElementById(buttonId);
|
|
32
|
-
if (button) {
|
|
33
|
-
button.addEventListener('click', onClick);
|
|
34
|
-
}
|
|
35
|
-
}, 0);
|
|
36
|
-
}
|
|
37
|
-
return buttonHTML;
|
|
38
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Swiper } from 'swiper';
|
|
2
|
-
var Tab = /** @class */function () {
|
|
3
|
-
function Tab(element) {
|
|
4
|
-
this.swiper = null;
|
|
5
|
-
if (!element) {
|
|
6
|
-
throw new Error('Tab element is required');
|
|
7
|
-
}
|
|
8
|
-
if (!(element instanceof HTMLElement)) {
|
|
9
|
-
throw new Error('Invalid element type provided to Tab');
|
|
10
|
-
}
|
|
11
|
-
this.element = element;
|
|
12
|
-
this.init();
|
|
13
|
-
}
|
|
14
|
-
Tab.prototype.init = function () {
|
|
15
|
-
this.swiper = new Swiper(this.element, {
|
|
16
|
-
slidesPerView: 'auto',
|
|
17
|
-
spaceBetween: 8,
|
|
18
|
-
grabCursor: true,
|
|
19
|
-
loop: false,
|
|
20
|
-
freeMode: {
|
|
21
|
-
enabled: true,
|
|
22
|
-
sticky: false
|
|
23
|
-
},
|
|
24
|
-
mousewheel: true
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
Tab.prototype.destroy = function () {
|
|
28
|
-
if (this.swiper) {
|
|
29
|
-
this.swiper.destroy();
|
|
30
|
-
this.swiper = null;
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
return Tab;
|
|
34
|
-
}();
|
|
35
|
-
export { Tab };
|