@j-solution/components 1.6.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -6
- package/assets/jwms-portal-frontend-BtHTA-UF.css +1 -0
- package/assets/styles/global-utilities.css +34 -0
- package/assets/styles/j-components.css +1 -1
- package/assets/styles/themes.css +128 -21
- package/components/atoms/JAvatar.vue.cjs +1 -1
- package/components/atoms/JAvatar.vue.cjs.map +1 -1
- package/components/atoms/JAvatar.vue.js +10 -7
- package/components/atoms/JAvatar.vue.js.map +1 -1
- package/components/atoms/JBadge.vue.cjs +1 -1
- package/components/atoms/JBadge.vue.cjs.map +1 -1
- package/components/atoms/JBadge.vue.js +7 -6
- package/components/atoms/JBadge.vue.js.map +1 -1
- package/components/atoms/JButton.vue.cjs +6 -1
- package/components/atoms/JButton.vue.cjs.map +1 -1
- package/components/atoms/JButton.vue.js +10 -85
- package/components/atoms/JButton.vue.js.map +1 -1
- package/components/atoms/JButton.vue2.cjs +1 -1
- package/components/atoms/JButton.vue2.cjs.map +1 -1
- package/components/atoms/JButton.vue2.js +85 -2
- package/components/atoms/JButton.vue2.js.map +1 -1
- package/components/atoms/JDatepicker.vue.cjs +1 -1
- package/components/atoms/JDatepicker.vue.cjs.map +1 -1
- package/components/atoms/JDatepicker.vue.js +10 -10
- package/components/atoms/JDatepicker.vue.js.map +1 -1
- package/components/atoms/JEditor.vue.cjs +1 -1
- package/components/atoms/JEditor.vue.js +1 -1
- package/components/atoms/JEditor.vue2.cjs +1 -1
- package/components/atoms/JEditor.vue2.cjs.map +1 -1
- package/components/atoms/JEditor.vue2.js +31 -17
- package/components/atoms/JEditor.vue2.js.map +1 -1
- package/components/atoms/JGrid.vue.cjs +1 -1
- package/components/atoms/JGrid.vue.js +2 -2
- package/components/atoms/JGrid.vue2.cjs +1 -1
- package/components/atoms/JGrid.vue2.cjs.map +1 -1
- package/components/atoms/JGrid.vue2.js +59 -43
- package/components/atoms/JGrid.vue2.js.map +1 -1
- package/components/atoms/JIcon.vue.cjs +1 -1
- package/components/atoms/JIcon.vue.cjs.map +1 -1
- package/components/atoms/JIcon.vue.js +14 -13
- package/components/atoms/JIcon.vue.js.map +1 -1
- package/components/atoms/JKbd.vue.cjs +1 -1
- package/components/atoms/JKbd.vue.cjs.map +1 -1
- package/components/atoms/JKbd.vue.js +13 -10
- package/components/atoms/JKbd.vue.js.map +1 -1
- package/components/atoms/JLabel.vue.cjs +1 -1
- package/components/atoms/JLabel.vue.cjs.map +1 -1
- package/components/atoms/JLabel.vue.js +26 -22
- package/components/atoms/JLabel.vue.js.map +1 -1
- package/components/atoms/JLink.vue.cjs +1 -1
- package/components/atoms/JLink.vue.cjs.map +1 -1
- package/components/atoms/JLink.vue.js +5 -5
- package/components/atoms/JLink.vue.js.map +1 -1
- package/components/atoms/JPreview.vue.cjs +1 -1
- package/components/atoms/JPreview.vue.js +2 -2
- package/components/atoms/JPreview.vue2.cjs +1 -1
- package/components/atoms/JPreview.vue2.cjs.map +1 -1
- package/components/atoms/JPreview.vue2.js +33 -20
- package/components/atoms/JPreview.vue2.js.map +1 -1
- package/components/atoms/JProgress.vue.cjs +1 -1
- package/components/atoms/JProgress.vue.cjs.map +1 -1
- package/components/atoms/JProgress.vue.js +15 -9
- package/components/atoms/JProgress.vue.js.map +1 -1
- package/components/atoms/JRadio.vue.cjs +1 -1
- package/components/atoms/JRadio.vue.cjs.map +1 -1
- package/components/atoms/JRadio.vue.js +1 -1
- package/components/atoms/JRadio.vue.js.map +1 -1
- package/components/atoms/JSearchCombo.vue.cjs +1 -1
- package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
- package/components/atoms/JSearchCombo.vue.js +38 -37
- package/components/atoms/JSearchCombo.vue.js.map +1 -1
- package/components/atoms/JSectionTitle.vue.cjs +7 -0
- package/components/atoms/JSectionTitle.vue.cjs.map +1 -0
- package/components/atoms/JSectionTitle.vue.js +13 -0
- package/components/atoms/JSectionTitle.vue.js.map +1 -0
- package/components/atoms/JSectionTitle.vue2.cjs +2 -0
- package/components/atoms/JSectionTitle.vue2.cjs.map +1 -0
- package/components/atoms/JSectionTitle.vue2.js +67 -0
- package/components/atoms/JSectionTitle.vue2.js.map +1 -0
- package/components/atoms/JSpinner.vue.cjs +1 -1
- package/components/atoms/JSpinner.vue.cjs.map +1 -1
- package/components/atoms/JSpinner.vue.js +8 -7
- package/components/atoms/JSpinner.vue.js.map +1 -1
- package/components/atoms/JSplitter.vue.cjs +6 -1
- package/components/atoms/JSplitter.vue.cjs.map +1 -1
- package/components/atoms/JSplitter.vue.js +10 -54
- package/components/atoms/JSplitter.vue.js.map +1 -1
- package/components/atoms/JSplitter.vue2.cjs +1 -1
- package/components/atoms/JSplitter.vue2.cjs.map +1 -1
- package/components/atoms/JSplitter.vue2.js +59 -2
- package/components/atoms/JSplitter.vue2.js.map +1 -1
- package/components/atoms/JTooltip.vue.cjs +1 -1
- package/components/atoms/JTooltip.vue.cjs.map +1 -1
- package/components/atoms/JTooltip.vue.js +18 -15
- package/components/atoms/JTooltip.vue.js.map +1 -1
- package/components/examples/ExampleCrudPage.vue.cjs +1 -1
- package/components/examples/ExampleCrudPage.vue.cjs.map +1 -1
- package/components/examples/ExampleCrudPage.vue.js +265 -191
- package/components/examples/ExampleCrudPage.vue.js.map +1 -1
- package/components/examples/ExampleTabMappingPage.vue.cjs +1 -1
- package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -1
- package/components/examples/ExampleTabMappingPage.vue.js +349 -333
- package/components/examples/ExampleTabMappingPage.vue.js.map +1 -1
- package/components/molecules/JAlert.vue.cjs +1 -1
- package/components/molecules/JAlert.vue.cjs.map +1 -1
- package/components/molecules/JAlert.vue.js +18 -16
- package/components/molecules/JAlert.vue.js.map +1 -1
- package/components/molecules/JBreadcrumb.vue.cjs +1 -1
- package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
- package/components/molecules/JBreadcrumb.vue.js +3 -3
- package/components/molecules/JBreadcrumb.vue.js.map +1 -1
- package/components/molecules/JCard.vue.cjs +1 -1
- package/components/molecules/JCard.vue.cjs.map +1 -1
- package/components/molecules/JCard.vue.js +55 -39
- package/components/molecules/JCard.vue.js.map +1 -1
- package/components/molecules/JEmptyState.vue.cjs +7 -0
- package/components/molecules/JEmptyState.vue.cjs.map +1 -0
- package/components/molecules/JEmptyState.vue.js +13 -0
- package/components/molecules/JEmptyState.vue.js.map +1 -0
- package/components/molecules/JEmptyState.vue2.cjs +2 -0
- package/components/molecules/JEmptyState.vue2.cjs.map +1 -0
- package/components/molecules/JEmptyState.vue2.js +127 -0
- package/components/molecules/JEmptyState.vue2.js.map +1 -0
- package/components/molecules/JFormField.vue.cjs +6 -1
- package/components/molecules/JFormField.vue.cjs.map +1 -1
- package/components/molecules/JFormField.vue.js +10 -262
- package/components/molecules/JFormField.vue.js.map +1 -1
- package/components/molecules/JFormField.vue2.cjs +2 -0
- package/components/molecules/JFormField.vue2.cjs.map +1 -0
- package/components/molecules/JFormField.vue2.js +271 -0
- package/components/molecules/JFormField.vue2.js.map +1 -0
- package/components/molecules/JTabs.vue.cjs +1 -1
- package/components/molecules/JTabs.vue.js +1 -1
- package/components/molecules/JTabs.vue2.cjs +1 -1
- package/components/molecules/JTabs.vue2.cjs.map +1 -1
- package/components/molecules/JTabs.vue2.js +50 -56
- package/components/molecules/JTabs.vue2.js.map +1 -1
- package/components/molecules/JTitlebar.vue.cjs +1 -1
- package/components/molecules/JTitlebar.vue.cjs.map +1 -1
- package/components/molecules/JTitlebar.vue.js +49 -47
- package/components/molecules/JTitlebar.vue.js.map +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
- package/components/organisms/JDynamicForm.vue2.js +35 -32
- package/components/organisms/JDynamicForm.vue2.js.map +1 -1
- package/components/organisms/JDynamicTabs.vue.cjs +1 -1
- package/components/organisms/JDynamicTabs.vue.cjs.map +1 -1
- package/components/organisms/JDynamicTabs.vue.js +47 -52
- package/components/organisms/JDynamicTabs.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue.cjs +6 -1
- package/components/organisms/JFilterBar.vue.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue.js +10 -137
- package/components/organisms/JFilterBar.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue2.cjs +1 -1
- package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue2.js +141 -2
- package/components/organisms/JFilterBar.vue2.js.map +1 -1
- package/components/organisms/JFormModal.vue.cjs +1 -1
- package/components/organisms/JFormModal.vue.cjs.map +1 -1
- package/components/organisms/JFormModal.vue.js +54 -49
- package/components/organisms/JFormModal.vue.js.map +1 -1
- package/components/organisms/JHeader.vue.cjs +1 -1
- package/components/organisms/JHeader.vue.cjs.map +1 -1
- package/components/organisms/JHeader.vue.js +211 -208
- package/components/organisms/JHeader.vue.js.map +1 -1
- package/components/organisms/JModal.vue.cjs +1 -1
- package/components/organisms/JModal.vue.cjs.map +1 -1
- package/components/organisms/JModal.vue.js +31 -26
- package/components/organisms/JModal.vue.js.map +1 -1
- package/components/organisms/JPageContainer.vue.cjs +1 -1
- package/components/organisms/JPageContainer.vue.cjs.map +1 -1
- package/components/organisms/JPageContainer.vue.js +22 -22
- package/components/organisms/JPageContainer.vue.js.map +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
- package/components/organisms/JSearchPanel.vue2.js +34 -32
- package/components/organisms/JSearchPanel.vue2.js.map +1 -1
- package/components/organisms/JShuttle.vue.cjs +7 -0
- package/components/organisms/JShuttle.vue.cjs.map +1 -0
- package/components/organisms/JShuttle.vue.js +13 -0
- package/components/organisms/JShuttle.vue.js.map +1 -0
- package/components/organisms/JShuttle.vue2.cjs +2 -0
- package/components/organisms/JShuttle.vue2.cjs.map +1 -0
- package/components/organisms/JShuttle.vue2.js +216 -0
- package/components/organisms/JShuttle.vue2.js.map +1 -0
- package/components/organisms/JSidebarAdvanced.vue.cjs +1 -1
- package/components/organisms/JSidebarAdvanced.vue.js +7 -7
- package/components/organisms/JSidebarAdvanced.vue2.cjs +1 -1
- package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
- package/components/organisms/JSidebarAdvanced.vue2.js +40 -40
- package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +1 -1
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -1
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +83 -63
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js.map +1 -1
- package/components/organisms/JSidebarSimple.vue.cjs +1 -1
- package/components/organisms/JSidebarSimple.vue.js +2 -2
- package/components/organisms/JSidebarSimple.vue2.cjs +1 -1
- package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
- package/components/organisms/JSidebarSimple.vue2.js +2 -2
- package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
- package/components/shadcn/AccordionTrigger.vue.cjs +1 -1
- package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
- package/components/shadcn/AccordionTrigger.vue.js +3 -3
- package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
- package/components/shadcn/Card.vue.cjs +1 -1
- package/components/shadcn/Card.vue.cjs.map +1 -1
- package/components/shadcn/Card.vue.js +1 -1
- package/components/shadcn/Card.vue.js.map +1 -1
- package/components/shadcn/CardContent.vue.cjs +1 -1
- package/components/shadcn/CardContent.vue.cjs.map +1 -1
- package/components/shadcn/CardContent.vue.js +4 -4
- package/components/shadcn/CardContent.vue.js.map +1 -1
- package/components/shadcn/CardDescription.vue.cjs +1 -1
- package/components/shadcn/CardDescription.vue.cjs.map +1 -1
- package/components/shadcn/CardDescription.vue.js +1 -1
- package/components/shadcn/CardDescription.vue.js.map +1 -1
- package/components/shadcn/CardFooter.vue.cjs +1 -1
- package/components/shadcn/CardFooter.vue.cjs.map +1 -1
- package/components/shadcn/CardFooter.vue.js +7 -7
- package/components/shadcn/CardFooter.vue.js.map +1 -1
- package/components/shadcn/CardHeader.vue.cjs +1 -1
- package/components/shadcn/CardHeader.vue.cjs.map +1 -1
- package/components/shadcn/CardHeader.vue.js +8 -8
- package/components/shadcn/CardHeader.vue.js.map +1 -1
- package/components/shadcn/CardTitle.vue.cjs +1 -1
- package/components/shadcn/CardTitle.vue.cjs.map +1 -1
- package/components/shadcn/CardTitle.vue.js +5 -5
- package/components/shadcn/CardTitle.vue.js.map +1 -1
- package/components/shadcn/Input.vue.cjs +1 -1
- package/components/shadcn/Input.vue.cjs.map +1 -1
- package/components/shadcn/Input.vue.js +3 -3
- package/components/shadcn/Input.vue.js.map +1 -1
- package/components/shadcn/SelectTrigger.vue.cjs +1 -1
- package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
- package/components/shadcn/SelectTrigger.vue.js +2 -2
- package/components/shadcn/SelectTrigger.vue.js.map +1 -1
- package/components/shadcn/Switch.vue.cjs +1 -1
- package/components/shadcn/Switch.vue.cjs.map +1 -1
- package/components/shadcn/Switch.vue.js +2 -2
- package/components/shadcn/Switch.vue.js.map +1 -1
- package/components/shadcn/TabsContent.vue.cjs +1 -1
- package/components/shadcn/TabsContent.vue.cjs.map +1 -1
- package/components/shadcn/TabsContent.vue.js +1 -1
- package/components/shadcn/TabsContent.vue.js.map +1 -1
- package/components/shadcn/TabsList.vue.cjs +1 -1
- package/components/shadcn/TabsList.vue.cjs.map +1 -1
- package/components/shadcn/TabsList.vue.js +10 -10
- package/components/shadcn/TabsList.vue.js.map +1 -1
- package/components/shadcn/TabsTrigger.vue.cjs +1 -1
- package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
- package/components/shadcn/TabsTrigger.vue.js +4 -4
- package/components/shadcn/TabsTrigger.vue.js.map +1 -1
- package/components/shadcn/Textarea.vue.cjs +1 -1
- package/components/shadcn/Textarea.vue.cjs.map +1 -1
- package/components/shadcn/Textarea.vue.js +2 -2
- package/components/shadcn/Textarea.vue.js.map +1 -1
- package/components/shadcn/index.cjs +1 -1
- package/components/shadcn/index.cjs.map +1 -1
- package/components/shadcn/index.js +9 -8
- package/components/shadcn/index.js.map +1 -1
- package/components/templates/JLayout.vue.cjs.map +1 -1
- package/components/templates/JLayout.vue.js.map +1 -1
- package/index.cjs +1 -1
- package/index.js +73 -67
- package/package.json +1 -1
- package/types/index.d.ts +1025 -766
- package/assets/jwms-portal-frontend-DntSIcYt.css +0 -1
- package/components/molecules/JFormField.vue3.cjs +0 -2
- package/components/molecules/JFormField.vue3.cjs.map +0 -1
- package/components/molecules/JFormField.vue3.js +0 -6
- package/components/molecules/JFormField.vue3.js.map +0 -1
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { AgGridVue as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { defineComponent as A, ref as d, computed as i, onMounted as H, onUnmounted as F, watch as w, createElementBlock as V, openBlock as I, normalizeClass as b, unref as x, createVNode as O } from "vue";
|
|
2
|
+
import { AgGridVue as _ } from "ag-grid-vue3";
|
|
3
|
+
import { cn as W } from "../../lib/utils.js";
|
|
4
|
+
import { ModuleRegistry as z, AllCommunityModule as j } from "ag-grid-community";
|
|
5
|
+
import { AllEnterpriseModule as K } from "ag-grid-enterprise";
|
|
5
6
|
/* empty css */
|
|
6
7
|
/* empty css */
|
|
7
8
|
/* empty css */
|
|
8
|
-
const
|
|
9
|
+
const ee = /* @__PURE__ */ A({
|
|
9
10
|
__name: "JGrid",
|
|
10
11
|
props: {
|
|
12
|
+
class: {},
|
|
11
13
|
rowData: {},
|
|
12
14
|
columnDefs: {},
|
|
13
15
|
theme: { default: "ag-theme-balham" },
|
|
@@ -27,27 +29,32 @@ const K = { class: "ag-grid-container" }, Z = /* @__PURE__ */ N({
|
|
|
27
29
|
selectedRows: { default: () => [] },
|
|
28
30
|
columnHover: { type: Boolean, default: !0 },
|
|
29
31
|
enableColumnsToolPanel: { type: Boolean, default: !0 },
|
|
30
|
-
statusBar: { type: Boolean, default: !0 }
|
|
32
|
+
statusBar: { type: Boolean, default: !0 },
|
|
33
|
+
compactFooter: { type: Boolean, default: !1 },
|
|
34
|
+
rowGroupPanelShow: { default: "never" },
|
|
35
|
+
groupDefaultExpanded: { default: -1 },
|
|
36
|
+
pivotPanelShow: { default: "never" },
|
|
37
|
+
pivotMode: { type: Boolean, default: !1 }
|
|
31
38
|
},
|
|
32
39
|
emits: ["rowClicked", "rowDoubleClicked", "cellClicked", "selectionChanged", "cellValueChanged", "gridReady", "update:selectedRows"],
|
|
33
|
-
setup(
|
|
34
|
-
|
|
35
|
-
const e =
|
|
40
|
+
setup(c, { expose: y, emit: k }) {
|
|
41
|
+
z.registerModules([j, K]);
|
|
42
|
+
const e = c, n = k, l = d(null), p = d(null), f = d(!1), m = () => {
|
|
36
43
|
f.value = document.documentElement.classList.contains("dark");
|
|
37
|
-
},
|
|
44
|
+
}, D = i(() => {
|
|
38
45
|
if (!e.autoDetectDarkMode)
|
|
39
46
|
return e.theme;
|
|
40
47
|
const t = e.theme;
|
|
41
48
|
return f.value ? t.includes("-dark") ? t : `${t}-dark` : t.replace(/-dark$/, "");
|
|
42
|
-
}),
|
|
43
|
-
const s = e.actionButtons || [],
|
|
44
|
-
if (
|
|
49
|
+
}), P = (t) => {
|
|
50
|
+
const s = e.actionButtons || [], v = t.data, C = s.filter((o) => o.show ? o.show(v) : !0);
|
|
51
|
+
if (C.length === 0)
|
|
45
52
|
return "";
|
|
46
53
|
const u = document.createElement("div");
|
|
47
|
-
return u.className = "flex items-center gap-1",
|
|
54
|
+
return u.className = "flex items-center gap-1", C.forEach((o) => {
|
|
48
55
|
const a = document.createElement("button");
|
|
49
56
|
a.className = "px-2 py-1 text-xs border rounded transition-colors", o.styletype === "danger" ? a.className += " bg-red-50 border-red-400 text-red-700 hover:bg-red-100 dark:bg-red-950 dark:border-red-700 dark:text-red-400 dark:hover:bg-red-900" : a.className += " bg-gray-50 border-gray-400 text-gray-700 hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700", o.tooltip && (a.title = o.tooltip), o.label ? a.textContent = o.label : o.icon && (o.icon === "pencil" ? a.textContent = "수정" : o.icon === "trash2" || o.icon === "trash" ? a.textContent = "삭제" : o.icon === "eye" ? a.textContent = "보기" : o.icon === "copy" ? a.textContent = "복사" : o.icon === "download" ? a.textContent = "다운로드" : o.icon === "circleX" ? a.textContent = "비활성화" : o.icon === "circleCheckBig" ? a.textContent = "활성화" : a.textContent = o.icon), a.addEventListener("click", (T) => {
|
|
50
|
-
T.stopPropagation(), o.onClick(
|
|
57
|
+
T.stopPropagation(), o.onClick(v);
|
|
51
58
|
}), u.appendChild(a);
|
|
52
59
|
}), u;
|
|
53
60
|
}, g = i(() => !e.actionButtons || e.actionButtons.length === 0 ? null : {
|
|
@@ -63,7 +70,7 @@ const K = { class: "ag-grid-container" }, Z = /* @__PURE__ */ N({
|
|
|
63
70
|
resizable: !0,
|
|
64
71
|
suppressNavigable: !0,
|
|
65
72
|
suppressHeaderMenuButton: !0,
|
|
66
|
-
cellRenderer:
|
|
73
|
+
cellRenderer: P,
|
|
67
74
|
cellStyle: { display: "flex", justifyContent: "center", alignItems: "center" }
|
|
68
75
|
}), h = i(() => {
|
|
69
76
|
const t = [];
|
|
@@ -84,7 +91,7 @@ const K = { class: "ag-grid-container" }, Z = /* @__PURE__ */ N({
|
|
|
84
91
|
suppressHeaderMenuButton: !0,
|
|
85
92
|
cellStyle: { display: "flex", justifyContent: "center", alignItems: "center" }
|
|
86
93
|
}), g.value && t.push(g.value), t.push(...e.columnDefs), t;
|
|
87
|
-
}),
|
|
94
|
+
}), B = i(() => ({
|
|
88
95
|
// theme 옵션 제거 - 클래스 기반 테마(:class="theme") 사용
|
|
89
96
|
// columnDefs와 rowData는 prop으로 전달하므로 여기서 제거
|
|
90
97
|
pagination: e.pagination,
|
|
@@ -117,22 +124,29 @@ const K = { class: "ag-grid-container" }, Z = /* @__PURE__ */ N({
|
|
|
117
124
|
// 초기에는 접힌 상태
|
|
118
125
|
} : void 0,
|
|
119
126
|
// Status Bar (Enterprise)
|
|
120
|
-
|
|
127
|
+
// compactFooter 모드에서는 Status Bar 비활성화
|
|
128
|
+
statusBar: e.statusBar && !e.compactFooter ? {
|
|
121
129
|
statusPanels: [
|
|
122
130
|
{ statusPanel: "agTotalAndFilteredRowCountComponent", align: "left" },
|
|
123
131
|
{ statusPanel: "agSelectedRowCountComponent", align: "left" },
|
|
124
132
|
{ statusPanel: "agAggregationComponent", align: "right" }
|
|
125
133
|
]
|
|
126
134
|
} : void 0,
|
|
135
|
+
// Row Group Panel 설정 (Enterprise) - 그리드 상단에 드래그 영역 표시
|
|
136
|
+
rowGroupPanelShow: e.rowGroupPanelShow !== "never" ? e.rowGroupPanelShow : void 0,
|
|
137
|
+
// Pivot Panel 설정 (Enterprise) - 피벗 모드용 드래그 영역
|
|
138
|
+
pivotPanelShow: e.pivotPanelShow !== "never" ? e.pivotPanelShow : void 0,
|
|
139
|
+
// Pivot Mode 활성화
|
|
140
|
+
pivotMode: e.pivotMode,
|
|
127
141
|
// 그룹핑 기본 설정
|
|
128
|
-
groupDefaultExpanded: e.
|
|
142
|
+
groupDefaultExpanded: e.groupDefaultExpanded,
|
|
129
143
|
suppressAggFuncInHeader: !1,
|
|
130
144
|
// Tree Data 설정 (Enterprise)
|
|
131
145
|
treeData: e.enableTreeData || void 0,
|
|
132
146
|
getDataPath: e.enableTreeData ? e.getDataPath || ((s) => s.path || []) : void 0,
|
|
133
147
|
autoGroupColumnDef: e.enableTreeData && e.autoGroupColumnDef ? e.autoGroupColumnDef : void 0
|
|
134
148
|
}));
|
|
135
|
-
|
|
149
|
+
y({
|
|
136
150
|
gridApi: l,
|
|
137
151
|
gridColumnApi: p,
|
|
138
152
|
exportToExcel: () => {
|
|
@@ -141,59 +155,61 @@ const K = { class: "ag-grid-container" }, Z = /* @__PURE__ */ N({
|
|
|
141
155
|
});
|
|
142
156
|
}
|
|
143
157
|
});
|
|
144
|
-
const
|
|
158
|
+
const E = (t) => {
|
|
145
159
|
l.value = t.api, p.value = t.api, n("gridReady", t);
|
|
146
|
-
},
|
|
160
|
+
}, M = (t) => {
|
|
147
161
|
n("rowClicked", t);
|
|
148
|
-
},
|
|
162
|
+
}, S = (t) => {
|
|
149
163
|
n("rowDoubleClicked", t);
|
|
150
|
-
},
|
|
164
|
+
}, G = (t) => {
|
|
151
165
|
n("cellClicked", t);
|
|
152
|
-
},
|
|
166
|
+
}, R = (t) => {
|
|
153
167
|
n("selectionChanged", t), n("update:selectedRows", t.api.getSelectedRows());
|
|
154
|
-
},
|
|
168
|
+
}, N = (t) => {
|
|
155
169
|
n("cellValueChanged", t);
|
|
156
170
|
};
|
|
157
171
|
let r = null;
|
|
158
|
-
return
|
|
172
|
+
return H(() => {
|
|
159
173
|
e.autoDetectDarkMode && (m(), r = new MutationObserver(() => {
|
|
160
174
|
m();
|
|
161
175
|
}), r.observe(document.documentElement, {
|
|
162
176
|
attributes: !0,
|
|
163
177
|
attributeFilter: ["class"]
|
|
164
178
|
}));
|
|
165
|
-
}),
|
|
179
|
+
}), F(() => {
|
|
166
180
|
r && r.disconnect();
|
|
167
|
-
}),
|
|
181
|
+
}), w(
|
|
168
182
|
() => e.columnDefs,
|
|
169
183
|
() => {
|
|
170
184
|
l.value && l.value.setGridOption("columnDefs", h.value);
|
|
171
185
|
},
|
|
172
186
|
{ deep: !0 }
|
|
173
|
-
),
|
|
187
|
+
), w(
|
|
174
188
|
() => e.rowData,
|
|
175
189
|
() => {
|
|
176
190
|
l.value && l.value.setGridOption("rowData", e.rowData);
|
|
177
191
|
},
|
|
178
192
|
{ deep: !0 }
|
|
179
|
-
), (t, s) => (
|
|
180
|
-
|
|
193
|
+
), (t, s) => (I(), V("div", {
|
|
194
|
+
class: b(x(W)("ag-grid-container", e.class))
|
|
195
|
+
}, [
|
|
196
|
+
O(x(_), {
|
|
181
197
|
"column-defs": h.value,
|
|
182
|
-
"row-data":
|
|
183
|
-
"grid-options":
|
|
184
|
-
class:
|
|
198
|
+
"row-data": c.rowData,
|
|
199
|
+
"grid-options": B.value,
|
|
200
|
+
class: b(D.value),
|
|
185
201
|
style: { height: "100%", width: "100%" },
|
|
186
|
-
onGridReady:
|
|
187
|
-
onRowClicked:
|
|
188
|
-
onRowDoubleClicked:
|
|
189
|
-
onCellClicked:
|
|
190
|
-
onSelectionChanged:
|
|
191
|
-
onCellValueChanged:
|
|
202
|
+
onGridReady: E,
|
|
203
|
+
onRowClicked: M,
|
|
204
|
+
onRowDoubleClicked: S,
|
|
205
|
+
onCellClicked: G,
|
|
206
|
+
onSelectionChanged: R,
|
|
207
|
+
onCellValueChanged: N
|
|
192
208
|
}, null, 8, ["column-defs", "row-data", "grid-options", "class"])
|
|
193
|
-
]));
|
|
209
|
+
], 2));
|
|
194
210
|
}
|
|
195
211
|
});
|
|
196
212
|
export {
|
|
197
|
-
|
|
213
|
+
ee as default
|
|
198
214
|
};
|
|
199
215
|
//# sourceMappingURL=JGrid.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JGrid.vue2.js","sources":["../../../../src/components/atoms/JGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch, onMounted, onUnmounted } from 'vue'\nimport { AgGridVue } from 'ag-grid-vue3'\nimport type {\n ColDef,\n GridOptions,\n RowClickedEvent,\n CellClickedEvent,\n SelectionChangedEvent,\n CellValueChangedEvent,\n RowDoubleClickedEvent,\n GridReadyEvent,\n ICellRendererParams,\n} from 'ag-grid-community'\nimport { ModuleRegistry, AllCommunityModule } from 'ag-grid-community'\n// Enterprise 모듈 import (Grouping, Pivot, Excel Export 등)\nimport { AllEnterpriseModule } from 'ag-grid-enterprise'\n// ag-grid.css는 제거 - v34에서 Theming API와 충돌 방지\n// 테마 CSS 파일만 사용 (클래스 기반 테마)\n// v34에서는 dark 테마가 같은 CSS 파일 안에 포함되어 있음\n// 예: ag-theme-quartz.css에 .ag-theme-quartz-dark 클래스 포함\nimport 'ag-grid-community/styles/ag-theme-quartz.css'\nimport 'ag-grid-community/styles/ag-theme-alpine.css'\nimport 'ag-grid-community/styles/ag-theme-balham.css'\n\n// AG Grid 모듈 등록 (Community + Enterprise)\nModuleRegistry.registerModules([AllCommunityModule, AllEnterpriseModule])\n\n/**\n * Action Button 정의 타입\n */\nexport type ActionButton = {\n /** 버튼 아이콘 이름 (lucide) - label이 없을 때 기본 텍스트 생성에 사용 */\n icon?: string\n /** 버튼 라벨 */\n label?: string\n /** 툴팁 텍스트 */\n tooltip?: string\n /** 버튼 클릭 핸들러 (rowData 전달) */\n onClick: (rowData: any) => void\n /** 버튼 스타일 타입 */\n styletype?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\n /** 조건부 표시 함수 (rowData를 받아 boolean 반환) */\n show?: (rowData: any) => boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n /** 그리드에 표시할 데이터 배열 */\n rowData: any[]\n /** 컬럼 정의 배열 */\n columnDefs: ColDef[]\n /** ag-Grid 테마 */\n theme?: string\n /** 페이지네이션 활성화 여부 */\n pagination?: boolean\n /** 체크박스 선택 활성화 여부 */\n checkbox?: boolean\n /** 행 번호 표시 여부 (Enterprise) */\n rowNumbers?: boolean\n /** 행별 액션 버튼 목록 */\n actionButtons?: ActionButton[]\n /** 다크모드 자동 감지 여부 */\n autoDetectDarkMode?: boolean\n /** 요약 컬럼 표시 여부 */\n summaryColumn?: boolean\n /** 숨김 컬럼 관리 활성화 여부 */\n hiddenColumn?: boolean\n /** 그룹핑 기능 활성화 여부 (Enterprise) */\n enableGrouping?: boolean\n /** 피벗 기능 활성화 여부 (Enterprise) */\n enablePivot?: boolean\n /** Excel 내보내기 기능 활성화 여부 (Enterprise) */\n enableExcelExport?: boolean\n /** Tree Data 기능 활성화 여부 (Enterprise) */\n enableTreeData?: boolean\n /** Tree Data 계층 경로를 반환하는 함수 */\n getDataPath?: (data: any) => (string | number)[]\n /** Tree Data 그룹 컬럼 정의 */\n autoGroupColumnDef?: ColDef\n /** 선택된 행 데이터 배열 (v-model:selected-rows) */\n selectedRows?: any[]\n /** 컬럼 호버 하이라이트 활성화 여부 */\n columnHover?: boolean\n /** Columns Tool Panel 활성화 여부 (Enterprise) */\n enableColumnsToolPanel?: boolean\n /** Status Bar 활성화 여부 (Enterprise) */\n statusBar?: boolean\n }>(),\n {\n theme: 'ag-theme-balham',\n pagination: true,\n checkbox: false,\n rowNumbers: true,\n actionButtons: undefined,\n autoDetectDarkMode: true,\n summaryColumn: false,\n hiddenColumn: false,\n enableGrouping: true,\n enablePivot: false,\n enableExcelExport: false,\n enableTreeData: false,\n getDataPath: undefined,\n autoGroupColumnDef: undefined,\n selectedRows: () => [],\n columnHover: true,\n enableColumnsToolPanel: true,\n statusBar: true,\n },\n)\n\nconst emit = defineEmits<{\n /** 행 클릭 이벤트 */\n rowClicked: [event: RowClickedEvent]\n /** 행 더블클릭 이벤트 */\n rowDoubleClicked: [event: RowDoubleClickedEvent]\n /** 셀 클릭 이벤트 */\n cellClicked: [event: CellClickedEvent]\n /** 선택 변경 이벤트 (체크박스 등) */\n selectionChanged: [event: SelectionChangedEvent]\n /** 셀 값 변경 이벤트 */\n cellValueChanged: [event: CellValueChangedEvent]\n /** 그리드 준비 완료 이벤트 */\n gridReady: [event: GridReadyEvent]\n /** 선택된 행 변경 이벤트 (v-model:selected-rows) */\n 'update:selectedRows': [rows: any[]]\n}>()\n\n// ag-Grid 인스턴스 참조\nconst gridApi = ref<any>(null)\nconst gridColumnApi = ref<any>(null)\n\n// 다크모드 상태\nconst isDarkMode = ref(false)\n\n// 다크모드 감지 함수\nconst detectDarkMode = () => {\n isDarkMode.value = document.documentElement.classList.contains('dark')\n}\n\n// 현재 테마 계산 (다크모드 자동 전환)\nconst currentTheme = computed(() => {\n if (!props.autoDetectDarkMode) {\n return props.theme\n }\n \n const baseTheme = props.theme\n if (isDarkMode.value) {\n // 이미 dark 테마인 경우 그대로 유지, 아니면 -dark 추가\n return baseTheme.includes('-dark') ? baseTheme : `${baseTheme}-dark`\n } else {\n // dark 테마 제거\n return baseTheme.replace(/-dark$/, '')\n }\n})\n\n// Action Buttons Cell Renderer - 함수형으로 DOM 직접 생성\nconst ActionButtonsCellRenderer = (params: ICellRendererParams) => {\n const buttons = props.actionButtons || []\n const rowData = params.data\n \n // 표시할 버튼 필터링\n const visibleButtons = buttons.filter(btn => {\n if (btn.show) {\n return btn.show(rowData)\n }\n return true\n })\n \n if (visibleButtons.length === 0) {\n return ''\n }\n \n // 컨테이너 div 생성\n const container = document.createElement('div')\n container.className = 'flex items-center gap-1'\n \n // 각 버튼 생성\n visibleButtons.forEach((btn) => {\n const button = document.createElement('button')\n button.className = 'px-2 py-1 text-xs border rounded transition-colors'\n \n // styletype에 따른 클래스 추가\n if (btn.styletype === 'danger') {\n button.className += ' bg-red-50 border-red-400 text-red-700 hover:bg-red-100 dark:bg-red-950 dark:border-red-700 dark:text-red-400 dark:hover:bg-red-900'\n } else {\n button.className += ' bg-gray-50 border-gray-400 text-gray-700 hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700'\n }\n \n // tooltip\n if (btn.tooltip) {\n button.title = btn.tooltip\n }\n \n // 라벨 추가 (텍스트 버튼)\n if (btn.label) {\n button.textContent = btn.label\n } else if (btn.icon) {\n // 라벨이 없으면 기본 텍스트 생성\n if (btn.icon === 'pencil') {\n button.textContent = '수정'\n } else if (btn.icon === 'trash2' || btn.icon === 'trash') {\n button.textContent = '삭제'\n } else if (btn.icon === 'eye') {\n button.textContent = '보기'\n } else if (btn.icon === 'copy') {\n button.textContent = '복사'\n } else if (btn.icon === 'download') {\n button.textContent = '다운로드'\n } else if (btn.icon === 'circleX') {\n button.textContent = '비활성화'\n } else if (btn.icon === 'circleCheckBig') {\n button.textContent = '활성화'\n } else {\n button.textContent = btn.icon\n }\n }\n \n // 클릭 이벤트\n button.addEventListener('click', (e) => {\n e.stopPropagation()\n btn.onClick(rowData)\n })\n \n container.appendChild(button)\n })\n \n return container\n}\n\n// Action Buttons 컬럼 정의\nconst actionButtonsColumn = computed<ColDef | null>(() => {\n if (!props.actionButtons || props.actionButtons.length === 0) {\n return null\n }\n \n return {\n colId: 'actionButtons',\n headerName: '작업',\n field: '_actions',\n width: 120,\n minWidth: 80,\n maxWidth: 200,\n lockPosition: 'left' as const,\n sortable: false,\n filter: false,\n resizable: true,\n suppressNavigable: true,\n suppressHeaderMenuButton: true,\n cellRenderer: ActionButtonsCellRenderer,\n cellStyle: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\n }\n})\n\n// checkbox 활성화 및 추가 컬럼 처리\nconst processedColumnDefs = computed(() => {\n const columns: ColDef[] = []\n \n // 1. Checkbox 컬럼 (최우선)\n if (props.checkbox) {\n columns.push({\n colId: 'rowSelection',\n headerName: '',\n // field와 valueGetter 제거 - AG Grid 공식 방식\n width: 50,\n minWidth: 50,\n maxWidth: 50,\n lockPosition: 'left' as const,\n checkboxSelection: true,\n headerCheckboxSelection: true,\n sortable: false,\n filter: false,\n resizable: false,\n suppressNavigable: true,\n suppressHeaderMenuButton: true,\n cellStyle: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\n })\n }\n \n // 2. Action Buttons 컬럼\n if (actionButtonsColumn.value) {\n columns.push(actionButtonsColumn.value)\n }\n \n // 3. 사용자 정의 컬럼들 (Row Numbers는 AG Grid가 자동으로 추가)\n columns.push(...props.columnDefs)\n \n return columns\n})\n\n// Grid 옵션 설정\nconst gridOptions = computed<GridOptions>(() => {\n const options: GridOptions = {\n // theme 옵션 제거 - 클래스 기반 테마(:class=\"theme\") 사용\n // columnDefs와 rowData는 prop으로 전달하므로 여기서 제거\n pagination: props.pagination,\n rowSelection: props.checkbox ? 'multiple' : undefined,\n // 체크박스 모드일 때 row 클릭으로 선택이 변경되지 않도록 설정\n // 체크박스만으로 선택을 제어하도록 함\n suppressRowClickSelection: props.checkbox,\n\n // Row Numbers (Enterprise) - AG Grid 표준 방식\n rowNumbers: props.rowNumbers,\n\n // Column Hover Highlight\n columnHoverHighlight: props.columnHover,\n\n // Enterprise 기능 옵션\n sideBar: props.enableColumnsToolPanel || props.enableGrouping || props.enablePivot ? {\n toolPanels: [\n {\n id: 'columns',\n labelDefault: 'Columns',\n labelKey: 'columns',\n iconKey: 'columns',\n toolPanel: 'agColumnsToolPanel',\n toolPanelParams: {\n suppressRowGroups: !props.enableGrouping,\n suppressValues: !props.enablePivot,\n suppressPivots: !props.enablePivot,\n suppressPivotMode: !props.enablePivot,\n },\n },\n ],\n defaultToolPanel: '', // 초기에는 접힌 상태\n } : undefined,\n\n // Status Bar (Enterprise)\n statusBar: props.statusBar ? {\n statusPanels: [\n { statusPanel: 'agTotalAndFilteredRowCountComponent', align: 'left' as const },\n { statusPanel: 'agSelectedRowCountComponent', align: 'left' as const },\n { statusPanel: 'agAggregationComponent', align: 'right' as const },\n ],\n } : undefined,\n\n // 그룹핑 기본 설정\n groupDefaultExpanded: props.enableGrouping || props.enableTreeData ? 1 : undefined,\n suppressAggFuncInHeader: false,\n\n // Tree Data 설정 (Enterprise)\n treeData: props.enableTreeData || undefined,\n getDataPath: props.enableTreeData\n ? (props.getDataPath || ((data: any) => data.path || []))\n : undefined,\n autoGroupColumnDef: props.enableTreeData && props.autoGroupColumnDef\n ? props.autoGroupColumnDef\n : undefined,\n }\n\n return options\n})\n\n// Excel 내보내기 함수 (외부에서 사용 가능하도록 expose)\nconst exportToExcel = () => {\n if (gridApi.value && props.enableExcelExport) {\n gridApi.value.exportDataAsExcel({\n fileName: 'grid-export.xlsx',\n })\n }\n}\n\n// 그리드 API를 외부에 노출\ndefineExpose({\n gridApi,\n gridColumnApi,\n exportToExcel,\n})\n\n// Grid ready 이벤트 핸들러\nconst onGridReady = (params: GridReadyEvent) => {\n gridApi.value = params.api\n gridColumnApi.value = params.api // v34에서 columnApi는 deprecated\n emit('gridReady', params)\n}\n\n// 행 클릭 이벤트 핸들러\nconst onRowClicked = (event: RowClickedEvent) => {\n emit('rowClicked', event)\n}\n\n// 행 더블클릭 이벤트 핸들러\nconst onRowDoubleClicked = (event: RowDoubleClickedEvent) => {\n emit('rowDoubleClicked', event)\n}\n\n// 셀 클릭 이벤트 핸들러\nconst onCellClicked = (event: CellClickedEvent) => {\n emit('cellClicked', event)\n}\n\n// 선택 변경 이벤트 핸들러\nconst onSelectionChanged = (event: SelectionChangedEvent) => {\n emit('selectionChanged', event)\n emit('update:selectedRows', event.api.getSelectedRows())\n}\n\n// 셀 값 변경 이벤트 핸들러\nconst onCellValueChanged = (event: CellValueChangedEvent) => {\n emit('cellValueChanged', event)\n}\n\n// MutationObserver로 다크모드 변경 감지\nlet darkModeObserver: MutationObserver | null = null\n\nonMounted(() => {\n if (props.autoDetectDarkMode) {\n // 초기 다크모드 상태 감지\n detectDarkMode()\n \n // MutationObserver로 class 변경 감지\n darkModeObserver = new MutationObserver(() => {\n detectDarkMode()\n })\n \n darkModeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n }\n})\n\nonUnmounted(() => {\n if (darkModeObserver) {\n darkModeObserver.disconnect()\n }\n})\n\n// columnDefs 변경 감지\nwatch(\n () => props.columnDefs,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('columnDefs', processedColumnDefs.value)\n }\n },\n { deep: true },\n)\n\n// rowData 변경 감지\nwatch(\n () => props.rowData,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('rowData', props.rowData)\n }\n },\n { deep: true },\n)\n</script>\n\n<template>\n <div class=\"ag-grid-container\">\n <AgGridVue\n :column-defs=\"processedColumnDefs\"\n :row-data=\"rowData\"\n :grid-options=\"gridOptions\"\n :class=\"currentTheme\"\n style=\"height: 100%; width: 100%\"\n @grid-ready=\"onGridReady\"\n @row-clicked=\"onRowClicked\"\n @row-double-clicked=\"onRowDoubleClicked\"\n @cell-clicked=\"onCellClicked\"\n @selection-changed=\"onSelectionChanged\"\n @cell-value-changed=\"onCellValueChanged\"\n />\n </div>\n</template>\n\n<style scoped>\n.ag-grid-container {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"names":["ModuleRegistry","AllCommunityModule","AllEnterpriseModule","props","__props","emit","__emit","gridApi","ref","gridColumnApi","isDarkMode","detectDarkMode","currentTheme","computed","baseTheme","ActionButtonsCellRenderer","params","buttons","rowData","visibleButtons","btn","container","button","e","actionButtonsColumn","processedColumnDefs","columns","gridOptions","data","__expose","onGridReady","onRowClicked","event","onRowDoubleClicked","onCellClicked","onSelectionChanged","onCellValueChanged","darkModeObserver","onMounted","onUnmounted","watch","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","AgGridVue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JGrid.vue2.js","sources":["../../../../src/components/atoms/JGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch, onMounted, onUnmounted } from 'vue'\nimport { AgGridVue } from 'ag-grid-vue3'\nimport { cn } from '@/lib/utils'\nimport type {\n ColDef,\n GridOptions,\n RowClickedEvent,\n CellClickedEvent,\n SelectionChangedEvent,\n CellValueChangedEvent,\n RowDoubleClickedEvent,\n GridReadyEvent,\n ICellRendererParams,\n} from 'ag-grid-community'\nimport { ModuleRegistry, AllCommunityModule } from 'ag-grid-community'\n// Enterprise 모듈 import (Grouping, Pivot, Excel Export 등)\nimport { AllEnterpriseModule } from 'ag-grid-enterprise'\n// ag-grid.css는 제거 - v34에서 Theming API와 충돌 방지\n// 테마 CSS 파일만 사용 (클래스 기반 테마)\n// v34에서는 dark 테마가 같은 CSS 파일 안에 포함되어 있음\n// 예: ag-theme-quartz.css에 .ag-theme-quartz-dark 클래스 포함\nimport 'ag-grid-community/styles/ag-theme-quartz.css'\nimport 'ag-grid-community/styles/ag-theme-alpine.css'\nimport 'ag-grid-community/styles/ag-theme-balham.css'\n\n// AG Grid 모듈 등록 (Community + Enterprise)\nModuleRegistry.registerModules([AllCommunityModule, AllEnterpriseModule])\n\n/**\n * Action Button 정의 타입\n */\nexport type ActionButton = {\n /** 버튼 아이콘 이름 (lucide) - label이 없을 때 기본 텍스트 생성에 사용 */\n icon?: string\n /** 버튼 라벨 */\n label?: string\n /** 툴팁 텍스트 */\n tooltip?: string\n /** 버튼 클릭 핸들러 (rowData 전달) */\n onClick: (rowData: any) => void\n /** 버튼 스타일 타입 */\n styletype?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\n /** 조건부 표시 함수 (rowData를 받아 boolean 반환) */\n show?: (rowData: any) => boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n /** 추가 클래스 (외부 커스터마이징용) */\n class?: string\n /** 그리드에 표시할 데이터 배열 */\n rowData: any[]\n /** 컬럼 정의 배열 */\n columnDefs: ColDef[]\n /** ag-Grid 테마 */\n theme?: string\n /** 페이지네이션 활성화 여부 */\n pagination?: boolean\n /** 체크박스 선택 활성화 여부 */\n checkbox?: boolean\n /** 행 번호 표시 여부 (Enterprise) */\n rowNumbers?: boolean\n /** 행별 액션 버튼 목록 */\n actionButtons?: ActionButton[]\n /** 다크모드 자동 감지 여부 */\n autoDetectDarkMode?: boolean\n /** 요약 컬럼 표시 여부 */\n summaryColumn?: boolean\n /** 숨김 컬럼 관리 활성화 여부 */\n hiddenColumn?: boolean\n /** 그룹핑 기능 활성화 여부 (Enterprise) */\n enableGrouping?: boolean\n /** 피벗 기능 활성화 여부 (Enterprise) */\n enablePivot?: boolean\n /** Excel 내보내기 기능 활성화 여부 (Enterprise) */\n enableExcelExport?: boolean\n /** Tree Data 기능 활성화 여부 (Enterprise) */\n enableTreeData?: boolean\n /** Tree Data 계층 경로를 반환하는 함수 */\n getDataPath?: (data: any) => (string | number)[]\n /** Tree Data 그룹 컬럼 정의 */\n autoGroupColumnDef?: ColDef\n /** 선택된 행 데이터 배열 (v-model:selected-rows) */\n selectedRows?: any[]\n /** 컬럼 호버 하이라이트 활성화 여부 */\n columnHover?: boolean\n /** Columns Tool Panel 활성화 여부 (Enterprise) */\n enableColumnsToolPanel?: boolean\n /** Status Bar 활성화 여부 (Enterprise) */\n statusBar?: boolean\n /** 간소화된 Footer 모드 (Status Bar 제거, Pagination만 표시) */\n compactFooter?: boolean\n /** Row Group Panel 표시 여부 ('always' | 'onlyWhenGrouping' | 'never') */\n rowGroupPanelShow?: 'always' | 'onlyWhenGrouping' | 'never'\n /** 그룹 기본 확장 레벨 (-1: 모두 닫힘, 0: 첫 레벨만, 1: 2레벨까지...) */\n groupDefaultExpanded?: number\n /** Pivot Mode Panel 표시 여부 */\n pivotPanelShow?: 'always' | 'onlyWhenPivoting' | 'never'\n /** Pivot Mode 활성화 여부 */\n pivotMode?: boolean\n }>(),\n {\n theme: 'ag-theme-balham',\n pagination: true,\n checkbox: false,\n rowNumbers: true,\n actionButtons: undefined,\n autoDetectDarkMode: true,\n summaryColumn: false,\n hiddenColumn: false,\n enableGrouping: true,\n enablePivot: false,\n enableExcelExport: false,\n enableTreeData: false,\n getDataPath: undefined,\n autoGroupColumnDef: undefined,\n selectedRows: () => [],\n columnHover: true,\n enableColumnsToolPanel: true,\n statusBar: true,\n compactFooter: false,\n rowGroupPanelShow: 'never',\n groupDefaultExpanded: -1,\n pivotPanelShow: 'never',\n pivotMode: false,\n },\n)\n\nconst emit = defineEmits<{\n /** 행 클릭 이벤트 */\n rowClicked: [event: RowClickedEvent]\n /** 행 더블클릭 이벤트 */\n rowDoubleClicked: [event: RowDoubleClickedEvent]\n /** 셀 클릭 이벤트 */\n cellClicked: [event: CellClickedEvent]\n /** 선택 변경 이벤트 (체크박스 등) */\n selectionChanged: [event: SelectionChangedEvent]\n /** 셀 값 변경 이벤트 */\n cellValueChanged: [event: CellValueChangedEvent]\n /** 그리드 준비 완료 이벤트 */\n gridReady: [event: GridReadyEvent]\n /** 선택된 행 변경 이벤트 (v-model:selected-rows) */\n 'update:selectedRows': [rows: any[]]\n}>()\n\n// ag-Grid 인스턴스 참조\nconst gridApi = ref<any>(null)\nconst gridColumnApi = ref<any>(null)\n\n// 다크모드 상태\nconst isDarkMode = ref(false)\n\n// 다크모드 감지 함수\nconst detectDarkMode = () => {\n isDarkMode.value = document.documentElement.classList.contains('dark')\n}\n\n// 현재 테마 계산 (다크모드 자동 전환)\nconst currentTheme = computed(() => {\n if (!props.autoDetectDarkMode) {\n return props.theme\n }\n \n const baseTheme = props.theme\n if (isDarkMode.value) {\n // 이미 dark 테마인 경우 그대로 유지, 아니면 -dark 추가\n return baseTheme.includes('-dark') ? baseTheme : `${baseTheme}-dark`\n } else {\n // dark 테마 제거\n return baseTheme.replace(/-dark$/, '')\n }\n})\n\n// Action Buttons Cell Renderer - 함수형으로 DOM 직접 생성\nconst ActionButtonsCellRenderer = (params: ICellRendererParams) => {\n const buttons = props.actionButtons || []\n const rowData = params.data\n \n // 표시할 버튼 필터링\n const visibleButtons = buttons.filter(btn => {\n if (btn.show) {\n return btn.show(rowData)\n }\n return true\n })\n \n if (visibleButtons.length === 0) {\n return ''\n }\n \n // 컨테이너 div 생성\n const container = document.createElement('div')\n container.className = 'flex items-center gap-1'\n \n // 각 버튼 생성\n visibleButtons.forEach((btn) => {\n const button = document.createElement('button')\n button.className = 'px-2 py-1 text-xs border rounded transition-colors'\n \n // styletype에 따른 클래스 추가\n if (btn.styletype === 'danger') {\n button.className += ' bg-red-50 border-red-400 text-red-700 hover:bg-red-100 dark:bg-red-950 dark:border-red-700 dark:text-red-400 dark:hover:bg-red-900'\n } else {\n button.className += ' bg-gray-50 border-gray-400 text-gray-700 hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700'\n }\n \n // tooltip\n if (btn.tooltip) {\n button.title = btn.tooltip\n }\n \n // 라벨 추가 (텍스트 버튼)\n if (btn.label) {\n button.textContent = btn.label\n } else if (btn.icon) {\n // 라벨이 없으면 기본 텍스트 생성\n if (btn.icon === 'pencil') {\n button.textContent = '수정'\n } else if (btn.icon === 'trash2' || btn.icon === 'trash') {\n button.textContent = '삭제'\n } else if (btn.icon === 'eye') {\n button.textContent = '보기'\n } else if (btn.icon === 'copy') {\n button.textContent = '복사'\n } else if (btn.icon === 'download') {\n button.textContent = '다운로드'\n } else if (btn.icon === 'circleX') {\n button.textContent = '비활성화'\n } else if (btn.icon === 'circleCheckBig') {\n button.textContent = '활성화'\n } else {\n button.textContent = btn.icon\n }\n }\n \n // 클릭 이벤트\n button.addEventListener('click', (e) => {\n e.stopPropagation()\n btn.onClick(rowData)\n })\n \n container.appendChild(button)\n })\n \n return container\n}\n\n// Action Buttons 컬럼 정의\nconst actionButtonsColumn = computed<ColDef | null>(() => {\n if (!props.actionButtons || props.actionButtons.length === 0) {\n return null\n }\n \n return {\n colId: 'actionButtons',\n headerName: '작업',\n field: '_actions',\n width: 120,\n minWidth: 80,\n maxWidth: 200,\n lockPosition: 'left' as const,\n sortable: false,\n filter: false,\n resizable: true,\n suppressNavigable: true,\n suppressHeaderMenuButton: true,\n cellRenderer: ActionButtonsCellRenderer,\n cellStyle: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\n }\n})\n\n// checkbox 활성화 및 추가 컬럼 처리\nconst processedColumnDefs = computed(() => {\n const columns: ColDef[] = []\n \n // 1. Checkbox 컬럼 (최우선)\n if (props.checkbox) {\n columns.push({\n colId: 'rowSelection',\n headerName: '',\n // field와 valueGetter 제거 - AG Grid 공식 방식\n width: 50,\n minWidth: 50,\n maxWidth: 50,\n lockPosition: 'left' as const,\n checkboxSelection: true,\n headerCheckboxSelection: true,\n sortable: false,\n filter: false,\n resizable: false,\n suppressNavigable: true,\n suppressHeaderMenuButton: true,\n cellStyle: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\n })\n }\n \n // 2. Action Buttons 컬럼\n if (actionButtonsColumn.value) {\n columns.push(actionButtonsColumn.value)\n }\n \n // 3. 사용자 정의 컬럼들 (Row Numbers는 AG Grid가 자동으로 추가)\n columns.push(...props.columnDefs)\n \n return columns\n})\n\n// Grid 옵션 설정\nconst gridOptions = computed<GridOptions>(() => {\n const options: GridOptions = {\n // theme 옵션 제거 - 클래스 기반 테마(:class=\"theme\") 사용\n // columnDefs와 rowData는 prop으로 전달하므로 여기서 제거\n pagination: props.pagination,\n rowSelection: props.checkbox ? 'multiple' : undefined,\n // 체크박스 모드일 때 row 클릭으로 선택이 변경되지 않도록 설정\n // 체크박스만으로 선택을 제어하도록 함\n suppressRowClickSelection: props.checkbox,\n\n // Row Numbers (Enterprise) - AG Grid 표준 방식\n rowNumbers: props.rowNumbers,\n\n // Column Hover Highlight\n columnHoverHighlight: props.columnHover,\n\n // Enterprise 기능 옵션\n sideBar: props.enableColumnsToolPanel || props.enableGrouping || props.enablePivot ? {\n toolPanels: [\n {\n id: 'columns',\n labelDefault: 'Columns',\n labelKey: 'columns',\n iconKey: 'columns',\n toolPanel: 'agColumnsToolPanel',\n toolPanelParams: {\n suppressRowGroups: !props.enableGrouping,\n suppressValues: !props.enablePivot,\n suppressPivots: !props.enablePivot,\n suppressPivotMode: !props.enablePivot,\n },\n },\n ],\n defaultToolPanel: '', // 초기에는 접힌 상태\n } : undefined,\n\n // Status Bar (Enterprise)\n // compactFooter 모드에서는 Status Bar 비활성화\n statusBar: (props.statusBar && !props.compactFooter) ? {\n statusPanels: [\n { statusPanel: 'agTotalAndFilteredRowCountComponent', align: 'left' as const },\n { statusPanel: 'agSelectedRowCountComponent', align: 'left' as const },\n { statusPanel: 'agAggregationComponent', align: 'right' as const },\n ],\n } : undefined,\n\n // Row Group Panel 설정 (Enterprise) - 그리드 상단에 드래그 영역 표시\n rowGroupPanelShow: props.rowGroupPanelShow !== 'never' ? props.rowGroupPanelShow : undefined,\n\n // Pivot Panel 설정 (Enterprise) - 피벗 모드용 드래그 영역\n pivotPanelShow: props.pivotPanelShow !== 'never' ? props.pivotPanelShow : undefined,\n \n // Pivot Mode 활성화\n pivotMode: props.pivotMode,\n\n // 그룹핑 기본 설정\n groupDefaultExpanded: props.groupDefaultExpanded,\n suppressAggFuncInHeader: false,\n\n // Tree Data 설정 (Enterprise)\n treeData: props.enableTreeData || undefined,\n getDataPath: props.enableTreeData\n ? (props.getDataPath || ((data: any) => data.path || []))\n : undefined,\n autoGroupColumnDef: props.enableTreeData && props.autoGroupColumnDef\n ? props.autoGroupColumnDef\n : undefined,\n }\n\n return options\n})\n\n// Excel 내보내기 함수 (외부에서 사용 가능하도록 expose)\nconst exportToExcel = () => {\n if (gridApi.value && props.enableExcelExport) {\n gridApi.value.exportDataAsExcel({\n fileName: 'grid-export.xlsx',\n })\n }\n}\n\n// 그리드 API를 외부에 노출\ndefineExpose({\n gridApi,\n gridColumnApi,\n exportToExcel,\n})\n\n// Grid ready 이벤트 핸들러\nconst onGridReady = (params: GridReadyEvent) => {\n gridApi.value = params.api\n gridColumnApi.value = params.api // v34에서 columnApi는 deprecated\n emit('gridReady', params)\n}\n\n// 행 클릭 이벤트 핸들러\nconst onRowClicked = (event: RowClickedEvent) => {\n emit('rowClicked', event)\n}\n\n// 행 더블클릭 이벤트 핸들러\nconst onRowDoubleClicked = (event: RowDoubleClickedEvent) => {\n emit('rowDoubleClicked', event)\n}\n\n// 셀 클릭 이벤트 핸들러\nconst onCellClicked = (event: CellClickedEvent) => {\n emit('cellClicked', event)\n}\n\n// 선택 변경 이벤트 핸들러\nconst onSelectionChanged = (event: SelectionChangedEvent) => {\n emit('selectionChanged', event)\n emit('update:selectedRows', event.api.getSelectedRows())\n}\n\n// 셀 값 변경 이벤트 핸들러\nconst onCellValueChanged = (event: CellValueChangedEvent) => {\n emit('cellValueChanged', event)\n}\n\n// MutationObserver로 다크모드 변경 감지\nlet darkModeObserver: MutationObserver | null = null\n\nonMounted(() => {\n if (props.autoDetectDarkMode) {\n // 초기 다크모드 상태 감지\n detectDarkMode()\n \n // MutationObserver로 class 변경 감지\n darkModeObserver = new MutationObserver(() => {\n detectDarkMode()\n })\n \n darkModeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n }\n})\n\nonUnmounted(() => {\n if (darkModeObserver) {\n darkModeObserver.disconnect()\n }\n})\n\n// columnDefs 변경 감지\nwatch(\n () => props.columnDefs,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('columnDefs', processedColumnDefs.value)\n }\n },\n { deep: true },\n)\n\n// rowData 변경 감지\nwatch(\n () => props.rowData,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('rowData', props.rowData)\n }\n },\n { deep: true },\n)\n</script>\n\n<template>\n <div :class=\"cn('ag-grid-container', props.class)\">\n <AgGridVue\n :column-defs=\"processedColumnDefs\"\n :row-data=\"rowData\"\n :grid-options=\"gridOptions\"\n :class=\"currentTheme\"\n style=\"height: 100%; width: 100%\"\n @grid-ready=\"onGridReady\"\n @row-clicked=\"onRowClicked\"\n @row-double-clicked=\"onRowDoubleClicked\"\n @cell-clicked=\"onCellClicked\"\n @selection-changed=\"onSelectionChanged\"\n @cell-value-changed=\"onCellValueChanged\"\n />\n </div>\n</template>\n\n<style scoped>\n.ag-grid-container {\n width: 100%;\n height: 100%;\n}\n\n/* ============================================\n COMPACT FOOTER: Status Bar + Pagination 통합\n ============================================ */\n\n/* Status Bar 높이 줄이기 */\n:deep(.ag-status-bar) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 0.8125rem;\n}\n\n/* Status Bar 컴포넌트들 높이 조정 */\n:deep(.ag-status-bar-left),\n:deep(.ag-status-bar-center),\n:deep(.ag-status-bar-right) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Status Bar 패널들 간격 조정 */\n:deep(.ag-status-panel) {\n padding: 0;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Pagination Panel 높이 줄이기 */\n:deep(.ag-paging-panel) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n font-size: 0.8125rem;\n}\n\n/* Pagination 컴포넌트들 높이 조정 */\n:deep(.ag-paging-page-size),\n:deep(.ag-paging-row-summary-panel) {\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Page Size Selector 높이 조정 */\n:deep(.ag-paging-page-size .ag-picker-field) {\n height: 24px;\n min-height: 24px;\n}\n\n:deep(.ag-paging-page-size .ag-picker-field-wrapper) {\n height: 24px;\n padding: 0 4px;\n}\n\n/* Pagination 버튼들 높이 조정 */\n:deep(.ag-paging-button) {\n height: 24px;\n width: 24px;\n padding: 2px;\n}\n\n/* Pagination 버튼 래퍼 */\n:deep(.ag-paging-button-wrapper) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Row summary 텍스트 */\n:deep(.ag-paging-row-summary-panel-number) {\n line-height: 28px;\n}\n\n/* ========================================\n 패턴 9: AG-Grid 스타일 향상\n ======================================== */\n\n:deep(.ag-root-wrapper) {\n border: 1px solid hsl(var(--border));\n border-radius: 0.375rem;\n}\n\n:deep(.ag-header) {\n background-color: hsl(var(--muted));\n border-bottom: 1px solid hsl(var(--border));\n font-weight: 500;\n}\n\n:deep(.ag-header-cell) {\n color: hsl(var(--foreground));\n font-size: 0.75rem;\n padding: 0.5rem;\n}\n\n:deep(.ag-row) {\n transition: background-color 0.2s ease, border-left 0.2s ease;\n cursor: pointer;\n}\n\n:deep(.ag-row:hover) {\n background-color: hsl(var(--primary) / 0.05) !important;\n}\n\n:deep(.ag-row-selected) {\n background-color: hsl(var(--primary) / 0.1) !important;\n border-left: 2px solid hsl(var(--primary)) !important;\n}\n\n:deep(.ag-row-selected:hover) {\n background-color: hsl(var(--primary) / 0.15) !important;\n}\n\n:deep(.ag-cell) {\n line-height: 1.5;\n padding: 0.5rem;\n border-bottom: 1px solid hsl(var(--border) / 0.5);\n}\n\n:deep(.ag-paging-panel) {\n background-color: hsl(var(--muted) / 0.5);\n border-top: 1px solid hsl(var(--border));\n}\n</style>\n"],"names":["ModuleRegistry","AllCommunityModule","AllEnterpriseModule","props","__props","emit","__emit","gridApi","ref","gridColumnApi","isDarkMode","detectDarkMode","currentTheme","computed","baseTheme","ActionButtonsCellRenderer","params","buttons","rowData","visibleButtons","btn","container","button","e","actionButtonsColumn","processedColumnDefs","columns","gridOptions","data","__expose","onGridReady","onRowClicked","event","onRowDoubleClicked","onCellClicked","onSelectionChanged","onCellValueChanged","darkModeObserver","onMounted","onUnmounted","watch","_createElementBlock","_normalizeClass","_unref","cn","_createVNode","AgGridVue"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAAA,EAAe,gBAAgB,CAACC,GAAoBC,CAAmB,CAAC;AAoBxE,UAAMC,IAAQC,GAkFRC,IAAOC,GAkBPC,IAAUC,EAAS,IAAI,GACvBC,IAAgBD,EAAS,IAAI,GAG7BE,IAAaF,EAAI,EAAK,GAGtBG,IAAiB,MAAM;AAC3B,MAAAD,EAAW,QAAQ,SAAS,gBAAgB,UAAU,SAAS,MAAM;AAAA,IACvE,GAGME,IAAeC,EAAS,MAAM;AAClC,UAAI,CAACV,EAAM;AACT,eAAOA,EAAM;AAGf,YAAMW,IAAYX,EAAM;AACxB,aAAIO,EAAW,QAENI,EAAU,SAAS,OAAO,IAAIA,IAAY,GAAGA,CAAS,UAGtDA,EAAU,QAAQ,UAAU,EAAE;AAAA,IAEzC,CAAC,GAGKC,IAA4B,CAACC,MAAgC;AACjE,YAAMC,IAAUd,EAAM,iBAAiB,CAAA,GACjCe,IAAUF,EAAO,MAGjBG,IAAiBF,EAAQ,OAAO,CAAAG,MAChCA,EAAI,OACCA,EAAI,KAAKF,CAAO,IAElB,EACR;AAED,UAAIC,EAAe,WAAW;AAC5B,eAAO;AAIT,YAAME,IAAY,SAAS,cAAc,KAAK;AAC9C,aAAAA,EAAU,YAAY,2BAGtBF,EAAe,QAAQ,CAACC,MAAQ;AAC9B,cAAME,IAAS,SAAS,cAAc,QAAQ;AAC9C,QAAAA,EAAO,YAAY,sDAGfF,EAAI,cAAc,WACpBE,EAAO,aAAa,wIAEpBA,EAAO,aAAa,+IAIlBF,EAAI,YACNE,EAAO,QAAQF,EAAI,UAIjBA,EAAI,QACNE,EAAO,cAAcF,EAAI,QAChBA,EAAI,SAETA,EAAI,SAAS,WACfE,EAAO,cAAc,OACZF,EAAI,SAAS,YAAYA,EAAI,SAAS,UAC/CE,EAAO,cAAc,OACZF,EAAI,SAAS,QACtBE,EAAO,cAAc,OACZF,EAAI,SAAS,SACtBE,EAAO,cAAc,OACZF,EAAI,SAAS,aACtBE,EAAO,cAAc,SACZF,EAAI,SAAS,YACtBE,EAAO,cAAc,SACZF,EAAI,SAAS,mBACtBE,EAAO,cAAc,QAErBA,EAAO,cAAcF,EAAI,OAK7BE,EAAO,iBAAiB,SAAS,CAACC,MAAM;AACtC,UAAAA,EAAE,gBAAA,GACFH,EAAI,QAAQF,CAAO;AAAA,QACrB,CAAC,GAEDG,EAAU,YAAYC,CAAM;AAAA,MAC9B,CAAC,GAEMD;AAAA,IACT,GAGMG,IAAsBX,EAAwB,MAC9C,CAACV,EAAM,iBAAiBA,EAAM,cAAc,WAAW,IAClD,OAGF;AAAA,MACL,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,cAAc;AAAA,MACd,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,mBAAmB;AAAA,MACnB,0BAA0B;AAAA,MAC1B,cAAcY;AAAA,MACd,WAAW,EAAE,SAAS,QAAQ,gBAAgB,UAAU,YAAY,SAAA;AAAA,IAAS,CAEhF,GAGKU,IAAsBZ,EAAS,MAAM;AACzC,YAAMa,IAAoB,CAAA;AAG1B,aAAIvB,EAAM,YACRuB,EAAQ,KAAK;AAAA,QACX,OAAO;AAAA,QACP,YAAY;AAAA;AAAA,QAEZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,yBAAyB;AAAA,QACzB,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,mBAAmB;AAAA,QACnB,0BAA0B;AAAA,QAC1B,WAAW,EAAE,SAAS,QAAQ,gBAAgB,UAAU,YAAY,SAAA;AAAA,MAAS,CAC9E,GAICF,EAAoB,SACtBE,EAAQ,KAAKF,EAAoB,KAAK,GAIxCE,EAAQ,KAAK,GAAGvB,EAAM,UAAU,GAEzBuB;AAAA,IACT,CAAC,GAGKC,IAAcd,EAAsB,OACX;AAAA;AAAA;AAAA,MAG3B,YAAYV,EAAM;AAAA,MAClB,cAAcA,EAAM,WAAW,aAAa;AAAA;AAAA;AAAA,MAG5C,2BAA2BA,EAAM;AAAA;AAAA,MAGjC,YAAYA,EAAM;AAAA;AAAA,MAGlB,sBAAsBA,EAAM;AAAA;AAAA,MAG5B,SAASA,EAAM,0BAA0BA,EAAM,kBAAkBA,EAAM,cAAc;AAAA,QACnF,YAAY;AAAA,UACV;AAAA,YACE,IAAI;AAAA,YACJ,cAAc;AAAA,YACd,UAAU;AAAA,YACV,SAAS;AAAA,YACT,WAAW;AAAA,YACX,iBAAiB;AAAA,cACf,mBAAmB,CAACA,EAAM;AAAA,cAC1B,gBAAgB,CAACA,EAAM;AAAA,cACvB,gBAAgB,CAACA,EAAM;AAAA,cACvB,mBAAmB,CAACA,EAAM;AAAA,YAAA;AAAA,UAC5B;AAAA,QACF;AAAA,QAEF,kBAAkB;AAAA;AAAA,MAAA,IAChB;AAAA;AAAA;AAAA,MAIJ,WAAYA,EAAM,aAAa,CAACA,EAAM,gBAAiB;AAAA,QACrD,cAAc;AAAA,UACZ,EAAE,aAAa,uCAAuC,OAAO,OAAA;AAAA,UAC7D,EAAE,aAAa,+BAA+B,OAAO,OAAA;AAAA,UACrD,EAAE,aAAa,0BAA0B,OAAO,QAAA;AAAA,QAAiB;AAAA,MACnE,IACE;AAAA;AAAA,MAGJ,mBAAmBA,EAAM,sBAAsB,UAAUA,EAAM,oBAAoB;AAAA;AAAA,MAGnF,gBAAgBA,EAAM,mBAAmB,UAAUA,EAAM,iBAAiB;AAAA;AAAA,MAG1E,WAAWA,EAAM;AAAA;AAAA,MAGjB,sBAAsBA,EAAM;AAAA,MAC5B,yBAAyB;AAAA;AAAA,MAGzB,UAAUA,EAAM,kBAAkB;AAAA,MAClC,aAAaA,EAAM,iBACdA,EAAM,gBAAgB,CAACyB,MAAcA,EAAK,QAAQ,CAAA,KACnD;AAAA,MACJ,oBAAoBzB,EAAM,kBAAkBA,EAAM,qBAC9CA,EAAM,qBACN;AAAA,IAAA,EAIP;AAYD,IAAA0B,EAAa;AAAA,MACX,SAAAtB;AAAA,MACA,eAAAE;AAAA,MACA,eAZoB,MAAM;AAC1B,QAAIF,EAAQ,SAASJ,EAAM,qBACzBI,EAAQ,MAAM,kBAAkB;AAAA,UAC9B,UAAU;AAAA,QAAA,CACX;AAAA,MAEL;AAAA,IAME,CACD;AAGD,UAAMuB,IAAc,CAACd,MAA2B;AAC9C,MAAAT,EAAQ,QAAQS,EAAO,KACvBP,EAAc,QAAQO,EAAO,KAC7BX,EAAK,aAAaW,CAAM;AAAA,IAC1B,GAGMe,IAAe,CAACC,MAA2B;AAC/C,MAAA3B,EAAK,cAAc2B,CAAK;AAAA,IAC1B,GAGMC,IAAqB,CAACD,MAAiC;AAC3D,MAAA3B,EAAK,oBAAoB2B,CAAK;AAAA,IAChC,GAGME,IAAgB,CAACF,MAA4B;AACjD,MAAA3B,EAAK,eAAe2B,CAAK;AAAA,IAC3B,GAGMG,IAAqB,CAACH,MAAiC;AAC3D,MAAA3B,EAAK,oBAAoB2B,CAAK,GAC9B3B,EAAK,uBAAuB2B,EAAM,IAAI,gBAAA,CAAiB;AAAA,IACzD,GAGMI,IAAqB,CAACJ,MAAiC;AAC3D,MAAA3B,EAAK,oBAAoB2B,CAAK;AAAA,IAChC;AAGA,QAAIK,IAA4C;AAEhD,WAAAC,EAAU,MAAM;AACd,MAAInC,EAAM,uBAERQ,EAAA,GAGA0B,IAAmB,IAAI,iBAAiB,MAAM;AAC5C,QAAA1B,EAAA;AAAA,MACF,CAAC,GAED0B,EAAiB,QAAQ,SAAS,iBAAiB;AAAA,QACjD,YAAY;AAAA,QACZ,iBAAiB,CAAC,OAAO;AAAA,MAAA,CAC1B;AAAA,IAEL,CAAC,GAEDE,EAAY,MAAM;AAChB,MAAIF,KACFA,EAAiB,WAAA;AAAA,IAErB,CAAC,GAGDG;AAAA,MACE,MAAMrC,EAAM;AAAA,MACZ,MAAM;AACJ,QAAII,EAAQ,SACVA,EAAQ,MAAM,cAAc,cAAckB,EAAoB,KAAK;AAAA,MAEvE;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAIfe;AAAA,MACE,MAAMrC,EAAM;AAAA,MACZ,MAAM;AACJ,QAAII,EAAQ,SACVA,EAAQ,MAAM,cAAc,WAAWJ,EAAM,OAAO;AAAA,MAExD;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,mBAKbsC,EAcM,OAAA;AAAA,MAdA,OAAKC,EAAEC,EAAAC,CAAA,EAAE,qBAAsBzC,EAAM,KAAK,CAAA;AAAA,IAAA;MAC9C0C,EAYEF,EAAAG,CAAA,GAAA;AAAA,QAXC,eAAarB,EAAA;AAAA,QACb,YAAUrB,EAAA;AAAA,QACV,gBAAcuB,EAAA;AAAA,QACd,SAAOf,EAAA,KAAY;AAAA,QACpB,OAAA,EAAA,QAAA,QAAA,OAAA,OAAA;AAAA,QACC,aAAAkB;AAAA,QACA,cAAAC;AAAA,QACA,oBAAAE;AAAA,QACA,eAAAC;AAAA,QACA,oBAAAC;AAAA,QACA,oBAAAC;AAAA,MAAA;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue"),e=require("lucide-vue-next"),h=o.defineComponent({__name:"JIcon",props:{name:{},size:{default:"
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue"),e=require("lucide-vue-next"),h=o.defineComponent({__name:"JIcon",props:{name:{},size:{default:"sm"},color:{},class:{},styletype:{default:"default"},ariaLabel:{},role:{default:"img"}},setup(n){const r=n,a={house:e.House,user:e.User,settings:e.Settings,search:e.Search,plus:e.Plus,minus:e.Minus,squarePen:e.SquarePen,trash2:e.Trash2,save:e.Save,download:e.Download,upload:e.Upload,eye:e.Eye,eyeOff:e.EyeOff,heart:e.Heart,star:e.Star,check:e.Check,x:e.X,circleAlert:e.CircleAlert,info:e.Info,chevronDown:e.ChevronDown,chevronUp:e.ChevronUp,chevronLeft:e.ChevronLeft,chevronRight:e.ChevronRight,menu:e.Menu,ellipsis:e.Ellipsis,ellipsisVertical:e.EllipsisVertical,palette:e.Palette,package:e.Package,packageCheck:e.PackageCheck,packageX:e.PackageX,truck:e.Truck,warehouse:e.Warehouse,boxes:e.Boxes,archive:e.Archive,clipboardList:e.ClipboardList,clipboardCheck:e.ClipboardCheck,fileText:e.FileText,chartBar:e.ChartBar,trendingUp:e.TrendingUp,trendingDown:e.TrendingDown,calendar:e.Calendar,clock:e.Clock,mapPin:e.MapPin,table:e.Table,list:e.List,listFilter:e.ListFilter,arrowUpWideNarrow:e.ArrowUpWideNarrow,arrowDownWideNarrow:e.ArrowDownWideNarrow,scale:e.Scale,server:e.Server,database:e.Database,link:e.Link,arrowLeftRight:e.ArrowLeftRight,circleQuestionMark:e.CircleQuestionMark,monitor:e.Monitor,users:e.Users,code:e.Code,fileKey:e.FileKey,cpu:e.Cpu,rocket:e.Rocket,fileSpreadsheet:e.FileSpreadsheet,activity:e.Activity,messageCircle:e.MessageCircle,book:e.Book,logIn:e.LogIn,logOut:e.LogOut,copy:e.Copy,clipboard:e.Clipboard,undo2:e.Undo2,redo2:e.Redo2,pencil:e.Pencil,folder:e.Folder,folderPlus:e.FolderPlus,folderOpen:e.FolderOpen,filePlus:e.FilePlus,fileSearch:e.FileSearch,filePen:e.FilePen,fileMinus:e.FileMinus,mail:e.Mail,send:e.Send,phone:e.Phone,bell:e.Bell,bellOff:e.BellOff,messageSquare:e.MessageSquare,arrowUp:e.ArrowUp,arrowDown:e.ArrowDown,arrowLeft:e.ArrowLeft,arrowRight:e.ArrowRight,rotateCw:e.RotateCw,rotateCcw:e.RotateCcw,refreshCw:e.RefreshCw,move:e.Move,circleCheckBig:e.CircleCheckBig,circleX:e.CircleX,circle:e.Circle,lock:e.Lock,lockOpen:e.LockOpen,shield:e.Shield,shieldCheck:e.ShieldCheck,shieldAlert:e.ShieldAlert,userPlus:e.UserPlus,userMinus:e.UserMinus,userCheck:e.UserCheck,userX:e.UserX,circleUser:e.CircleUser,power:e.Power,zap:e.Zap,target:e.Target,flag:e.Flag,funnel:e.Funnel,building:e.Building,briefcase:e.Briefcase,globe:e.Globe,printer:e.Printer,share2:e.Share2,externalLink:e.ExternalLink,maximize2:e.Maximize2,minimize2:e.Minimize2,moveVertical:e.MoveVertical,moveHorizontal:e.MoveHorizontal,sun:e.Sun,moon:e.Moon},c={xs:12,sm:16,md:20,lg:24,xl:32},t={default:{class:""},primary:{color:"#3b82f6",class:""},success:{color:"#10b981",class:""},warning:{color:"#f59e0b",class:""},danger:{color:"#ef4444",class:""}},u=o.computed(()=>{const l=t[r.styletype],i=c[r.size],p=[l.class,r.class].filter(Boolean).join(" "),s=r.ariaLabel||r.name;return{size:i,color:r.color||l.color,class:p,"aria-label":s,"aria-hidden":!s,role:r.role}}),d=o.computed(()=>r.name in a?a[r.name]:e.House);return(l,i)=>(o.openBlock(),o.createBlock(o.resolveDynamicComponent(d.value),o.normalizeProps(o.guardReactiveProps(u.value)),null,16))}});exports.default=h;
|
|
2
2
|
//# sourceMappingURL=JIcon.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JIcon.vue.cjs","sources":["../../../../src/components/atoms/JIcon.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { \r\n House, \r\n User, \r\n Settings, \r\n Search, \r\n Plus, \r\n Minus, \r\n SquarePen, \r\n Trash2, \r\n Save, \r\n Download,\r\n Upload,\r\n Eye,\r\n EyeOff,\r\n Heart,\r\n Star,\r\n Check,\r\n X,\r\n CircleAlert,\r\n Info,\r\n ChevronDown,\r\n ChevronUp,\r\n ChevronLeft,\r\n ChevronRight,\r\n Menu,\r\n Ellipsis,\r\n EllipsisVertical,\r\n Palette,\r\n // WMS 핵심 아이콘들\r\n Package,\r\n PackageCheck,\r\n PackageX,\r\n Truck,\r\n Warehouse,\r\n Boxes,\r\n Archive,\r\n ClipboardList,\r\n ClipboardCheck,\r\n FileText,\r\n ChartBar,\r\n TrendingUp,\r\n TrendingDown,\r\n Calendar,\r\n Clock,\r\n MapPin,\r\n Table,\r\n List,\r\n ListFilter,\r\n ArrowUpWideNarrow,\r\n ArrowDownWideNarrow,\r\n Scale,\r\n // 추가 아이콘들\r\n Server,\r\n Database,\r\n Link,\r\n ArrowLeftRight,\r\n CircleQuestionMark,\r\n Monitor,\r\n Users,\r\n Code,\r\n FileKey,\r\n Cpu,\r\n Rocket,\r\n FileSpreadsheet,\r\n Activity,\r\n MessageCircle,\r\n Book,\r\n LogIn,\r\n LogOut,\r\n // 편집 관련\r\n Copy,\r\n Clipboard,\r\n Undo2,\r\n Redo2,\r\n Pencil,\r\n // 파일/폴더 관련\r\n Folder,\r\n FolderPlus,\r\n FolderOpen,\r\n FilePlus,\r\n FileSearch,\r\n FilePen,\r\n FileMinus,\r\n // 통신/알림 관련\r\n Mail,\r\n Send,\r\n Phone,\r\n Bell,\r\n BellOff,\r\n MessageSquare,\r\n // 화살표/방향 관련\r\n ArrowUp,\r\n ArrowDown,\r\n ArrowLeft,\r\n ArrowRight,\r\n RotateCw,\r\n RotateCcw,\r\n RefreshCw,\r\n Move,\r\n // 상태/피드백 관련\r\n CircleCheckBig,\r\n CircleX,\r\n Circle,\r\n // 보안 관련\r\n Lock,\r\n LockOpen,\r\n Shield,\r\n ShieldCheck,\r\n ShieldAlert,\r\n // 사용자 관리 관련\r\n UserPlus,\r\n UserMinus,\r\n UserCheck,\r\n UserX,\r\n CircleUser,\r\n // 액션 관련\r\n Power,\r\n Zap,\r\n Target,\r\n Flag,\r\n Funnel,\r\n // 조직/팀 관련\r\n Building,\r\n Briefcase,\r\n Globe,\r\n // 기타 유용한 아이콘\r\n Printer,\r\n Share2,\r\n ExternalLink,\r\n Maximize2,\r\n Minimize2,\r\n MoveVertical,\r\n MoveHorizontal,\r\n Sun,\r\n Moon,\r\n type LucideIcon\r\n} from 'lucide-vue-next'\r\n\r\n// 확장 가능한 아이콘 타입\r\ntype BaseIconName = \r\n | 'house' | 'user' | 'settings' | 'search' | 'plus' | 'minus'\r\n | 'squarePen' | 'trash2' | 'save' | 'download' | 'upload'\r\n | 'eye' | 'eyeOff' | 'heart' | 'star' | 'check' | 'x'\r\n | 'circleAlert' | 'info' | 'chevronDown' | 'chevronUp'\r\n | 'chevronLeft' | 'chevronRight' | 'menu' | 'ellipsis' | 'ellipsisVertical'\r\n | 'palette'\r\n // WMS 핵심 아이콘들\r\n | 'package' | 'packageCheck' | 'packageX'\r\n | 'truck' | 'warehouse' | 'boxes'\r\n | 'archive' | 'clipboardList' | 'clipboardCheck'\r\n | 'fileText' | 'chartBar'\r\n | 'trendingUp' | 'trendingDown' | 'calendar' | 'clock'\r\n | 'mapPin' | 'table' | 'list' | 'listFilter'\r\n | 'arrowUpWideNarrow' | 'arrowDownWideNarrow' | 'scale'\r\n // 추가 아이콘들\r\n | 'server' | 'database' | 'link' | 'arrowLeftRight' | 'circleQuestionMark'\r\n | 'monitor' | 'users' | 'code' | 'fileKey' | 'cpu'\r\n | 'rocket' | 'fileSpreadsheet' | 'activity' | 'messageCircle' | 'book'\r\n // 인증 관련 아이콘들\r\n | 'logIn' | 'logOut'\r\n // 편집 관련 아이콘들\r\n | 'copy' | 'clipboard' | 'undo2' | 'redo2' | 'pencil'\r\n // 파일/폴더 관련 아이콘들\r\n | 'folder' | 'folderPlus' | 'folderOpen' | 'filePlus' | 'fileSearch' | 'filePen' | 'fileMinus'\r\n // 통신/알림 관련 아이콘들\r\n | 'mail' | 'send' | 'phone' | 'bell' | 'bellOff' | 'messageSquare'\r\n // 화살표/방향 관련 아이콘들\r\n | 'arrowUp' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'rotateCw' | 'rotateCcw' | 'refreshCw' | 'move'\r\n // 상태/피드백 관련 아이콘들\r\n | 'circleCheckBig' | 'circleX' | 'circle'\r\n // 보안 관련 아이콘들\r\n | 'lock' | 'lockOpen' | 'shield' | 'shieldCheck' | 'shieldAlert'\r\n // 사용자 관리 관련 아이콘들\r\n | 'userPlus' | 'userMinus' | 'userCheck' | 'userX' | 'circleUser'\r\n // 액션 관련 아이콘들\r\n | 'power' | 'zap' | 'target' | 'flag' | 'funnel'\r\n // 조직/팀 관련 아이콘들\r\n | 'building' | 'briefcase' | 'globe'\r\n // 기타 유용한 아이콘들\r\n | 'printer' | 'share2' | 'externalLink' | 'maximize2' | 'minimize2' | 'moveVertical' | 'moveHorizontal'\r\n | 'sun' | 'moon'\r\n\r\n// 커스텀 아이콘 확장을 위한 타입\r\ntype CustomIconName = string // 나중에 확장 가능\r\n\r\ntype IconName = BaseIconName | CustomIconName\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'sm' | 'md' | 'lg' | 'xl'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n name: IconName\r\n size?: SizeType\r\n color?: string\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 접근성 라벨 */\r\n ariaLabel?: string\r\n /** 접근성 역할 */\r\n role?: string\r\n }>(),\r\n {\r\n size: 'md',\r\n styletype: 'default',\r\n role: 'img',\r\n },\r\n)\r\n\r\n/**\r\n * 기본 아이콘 매핑 (타입 안전)\r\n */\r\nconst baseIconMap: Record<BaseIconName, LucideIcon> = {\r\n house: House,\r\n user: User,\r\n settings: Settings,\r\n search: Search,\r\n plus: Plus,\r\n minus: Minus,\r\n squarePen: SquarePen,\r\n trash2: Trash2,\r\n save: Save,\r\n download: Download,\r\n upload: Upload,\r\n eye: Eye,\r\n eyeOff: EyeOff,\r\n heart: Heart,\r\n star: Star,\r\n check: Check,\r\n x: X,\r\n circleAlert: CircleAlert,\r\n info: Info,\r\n chevronDown: ChevronDown,\r\n chevronUp: ChevronUp,\r\n chevronLeft: ChevronLeft,\r\n chevronRight: ChevronRight,\r\n menu: Menu,\r\n ellipsis: Ellipsis,\r\n ellipsisVertical: EllipsisVertical,\r\n palette: Palette,\r\n // WMS 핵심 아이콘들\r\n package: Package,\r\n packageCheck: PackageCheck,\r\n packageX: PackageX,\r\n truck: Truck,\r\n warehouse: Warehouse,\r\n boxes: Boxes,\r\n archive: Archive,\r\n clipboardList: ClipboardList,\r\n clipboardCheck: ClipboardCheck,\r\n fileText: FileText,\r\n chartBar: ChartBar,\r\n trendingUp: TrendingUp,\r\n trendingDown: TrendingDown,\r\n calendar: Calendar,\r\n clock: Clock,\r\n mapPin: MapPin,\r\n table: Table,\r\n list: List,\r\n listFilter: ListFilter,\r\n arrowUpWideNarrow: ArrowUpWideNarrow,\r\n arrowDownWideNarrow: ArrowDownWideNarrow,\r\n scale: Scale,\r\n // 추가 아이콘들\r\n server: Server,\r\n database: Database,\r\n link: Link,\r\n arrowLeftRight: ArrowLeftRight,\r\n circleQuestionMark: CircleQuestionMark,\r\n monitor: Monitor,\r\n users: Users,\r\n code: Code,\r\n fileKey: FileKey,\r\n cpu: Cpu,\r\n rocket: Rocket,\r\n fileSpreadsheet: FileSpreadsheet,\r\n activity: Activity,\r\n messageCircle: MessageCircle,\r\n book: Book,\r\n // 인증 관련 아이콘들\r\n logIn: LogIn,\r\n logOut: LogOut,\r\n // 편집 관련 아이콘들\r\n copy: Copy,\r\n clipboard: Clipboard,\r\n undo2: Undo2,\r\n redo2: Redo2,\r\n pencil: Pencil,\r\n // 파일/폴더 관련 아이콘들\r\n folder: Folder,\r\n folderPlus: FolderPlus,\r\n folderOpen: FolderOpen,\r\n filePlus: FilePlus,\r\n fileSearch: FileSearch,\r\n filePen: FilePen,\r\n fileMinus: FileMinus,\r\n // 통신/알림 관련 아이콘들\r\n mail: Mail,\r\n send: Send,\r\n phone: Phone,\r\n bell: Bell,\r\n bellOff: BellOff,\r\n messageSquare: MessageSquare,\r\n // 화살표/방향 관련 아이콘들\r\n arrowUp: ArrowUp,\r\n arrowDown: ArrowDown,\r\n arrowLeft: ArrowLeft,\r\n arrowRight: ArrowRight,\r\n rotateCw: RotateCw,\r\n rotateCcw: RotateCcw,\r\n refreshCw: RefreshCw,\r\n move: Move,\r\n // 상태/피드백 관련 아이콘들\r\n circleCheckBig: CircleCheckBig,\r\n circleX: CircleX,\r\n circle: Circle,\r\n // 보안 관련 아이콘들\r\n lock: Lock,\r\n lockOpen: LockOpen,\r\n shield: Shield,\r\n shieldCheck: ShieldCheck,\r\n shieldAlert: ShieldAlert,\r\n // 사용자 관리 관련 아이콘들\r\n userPlus: UserPlus,\r\n userMinus: UserMinus,\r\n userCheck: UserCheck,\r\n userX: UserX,\r\n circleUser: CircleUser,\r\n // 액션 관련 아이콘들\r\n power: Power,\r\n zap: Zap,\r\n target: Target,\r\n flag: Flag,\r\n funnel: Funnel,\r\n // 조직/팀 관련 아이콘들\r\n building: Building,\r\n briefcase: Briefcase,\r\n globe: Globe,\r\n // 기타 유용한 아이콘들\r\n printer: Printer,\r\n share2: Share2,\r\n externalLink: ExternalLink,\r\n maximize2: Maximize2,\r\n minimize2: Minimize2,\r\n moveVertical: MoveVertical,\r\n moveHorizontal: MoveHorizontal,\r\n sun: Sun,\r\n moon: Moon,\r\n}\r\n\r\n/**\r\n * 동적 아이콘 로딩을 위한 함수 (나중에 확장 가능)\r\n * 현재는 사용하지 않지만 향후 커스텀 아이콘 지원을 위해 준비\r\n */\r\n// const loadCustomIcon = async (iconName: string): Promise<LucideIcon | null> => {\r\n// try {\r\n// // 나중에 다른 아이콘 라이브러리나 커스텀 아이콘을 동적으로 로드할 수 있음\r\n// // 예: const { [iconName]: IconComponent } = await import('@/assets/icons')\r\n// return null\r\n// } catch {\r\n// return null\r\n// }\r\n// }\r\n\r\n/**\r\n * size -> 실제 크기 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, number> = {\r\n sm: 16,\r\n md: 24,\r\n lg: 32,\r\n xl: 40,\r\n}\r\n\r\n/**\r\n * styletype -> color, class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { color?: string; class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n color: '#3b82f6',\r\n class: '',\r\n },\r\n success: { \r\n color: '#10b981',\r\n class: '',\r\n },\r\n warning: { \r\n color: '#f59e0b',\r\n class: '',\r\n },\r\n danger: { \r\n color: '#ef4444',\r\n class: '',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 props가 있으면 styletype 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, props.class].filter(Boolean).join(' ')\r\n const ariaLabel = props.ariaLabel || props.name\r\n \r\n return {\r\n size: sizePreset,\r\n color: props.color || stylePreset.color, // props.color가 있으면 우선 사용, 없으면 stylePreset.color 사용\r\n class: finalClass,\r\n 'aria-label': ariaLabel,\r\n 'aria-hidden': !ariaLabel,\r\n role: props.role,\r\n }\r\n})\r\n\r\n/** 현재 아이콘 컴포넌트 */\r\nconst IconComponent = computed(() => {\r\n // 기본 아이콘 먼저 확인\r\n if (props.name in baseIconMap) {\r\n return baseIconMap[props.name as BaseIconName]\r\n }\r\n \r\n // 커스텀 아이콘은 나중에 확장\r\n // return loadCustomIcon(props.name)\r\n \r\n // 기본값으로 house 아이콘 반환\r\n return House\r\n})\r\n</script>\r\n\r\n<template>\r\n <component \r\n :is=\"IconComponent\" \r\n v-bind=\"mapped\"\r\n />\r\n</template>"],"names":["props","__props","baseIconMap","House","User","Settings","Search","Plus","Minus","SquarePen","Trash2","Save","Download","Upload","Eye","EyeOff","Heart","Star","Check","X","CircleAlert","Info","ChevronDown","ChevronUp","ChevronLeft","ChevronRight","Menu","Ellipsis","EllipsisVertical","Palette","Package","PackageCheck","PackageX","Truck","Warehouse","Boxes","Archive","ClipboardList","ClipboardCheck","FileText","ChartBar","TrendingUp","TrendingDown","Calendar","Clock","MapPin","Table","List","ListFilter","ArrowUpWideNarrow","ArrowDownWideNarrow","Scale","Server","Database","Link","ArrowLeftRight","CircleQuestionMark","Monitor","Users","Code","FileKey","Cpu","Rocket","FileSpreadsheet","Activity","MessageCircle","Book","LogIn","LogOut","Copy","Clipboard","Undo2","Redo2","Pencil","Folder","FolderPlus","FolderOpen","FilePlus","FileSearch","FilePen","FileMinus","Mail","Send","Phone","Bell","BellOff","MessageSquare","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","RotateCw","RotateCcw","RefreshCw","Move","CircleCheckBig","CircleX","Circle","Lock","LockOpen","Shield","ShieldCheck","ShieldAlert","UserPlus","UserMinus","UserCheck","UserX","CircleUser","Power","Zap","Target","Flag","Funnel","Building","Briefcase","Globe","Printer","Share2","ExternalLink","Maximize2","Minimize2","MoveVertical","MoveHorizontal","Sun","Moon","SIZE_PRESETS","STYLE_PRESETS","mapped","computed","stylePreset","sizePreset","finalClass","ariaLabel","IconComponent","_createBlock","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JIcon.vue.cjs","sources":["../../../../src/components/atoms/JIcon.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { \r\n House, \r\n User, \r\n Settings, \r\n Search, \r\n Plus, \r\n Minus, \r\n SquarePen, \r\n Trash2, \r\n Save, \r\n Download,\r\n Upload,\r\n Eye,\r\n EyeOff,\r\n Heart,\r\n Star,\r\n Check,\r\n X,\r\n CircleAlert,\r\n Info,\r\n ChevronDown,\r\n ChevronUp,\r\n ChevronLeft,\r\n ChevronRight,\r\n Menu,\r\n Ellipsis,\r\n EllipsisVertical,\r\n Palette,\r\n // WMS 핵심 아이콘들\r\n Package,\r\n PackageCheck,\r\n PackageX,\r\n Truck,\r\n Warehouse,\r\n Boxes,\r\n Archive,\r\n ClipboardList,\r\n ClipboardCheck,\r\n FileText,\r\n ChartBar,\r\n TrendingUp,\r\n TrendingDown,\r\n Calendar,\r\n Clock,\r\n MapPin,\r\n Table,\r\n List,\r\n ListFilter,\r\n ArrowUpWideNarrow,\r\n ArrowDownWideNarrow,\r\n Scale,\r\n // 추가 아이콘들\r\n Server,\r\n Database,\r\n Link,\r\n ArrowLeftRight,\r\n CircleQuestionMark,\r\n Monitor,\r\n Users,\r\n Code,\r\n FileKey,\r\n Cpu,\r\n Rocket,\r\n FileSpreadsheet,\r\n Activity,\r\n MessageCircle,\r\n Book,\r\n LogIn,\r\n LogOut,\r\n // 편집 관련\r\n Copy,\r\n Clipboard,\r\n Undo2,\r\n Redo2,\r\n Pencil,\r\n // 파일/폴더 관련\r\n Folder,\r\n FolderPlus,\r\n FolderOpen,\r\n FilePlus,\r\n FileSearch,\r\n FilePen,\r\n FileMinus,\r\n // 통신/알림 관련\r\n Mail,\r\n Send,\r\n Phone,\r\n Bell,\r\n BellOff,\r\n MessageSquare,\r\n // 화살표/방향 관련\r\n ArrowUp,\r\n ArrowDown,\r\n ArrowLeft,\r\n ArrowRight,\r\n RotateCw,\r\n RotateCcw,\r\n RefreshCw,\r\n Move,\r\n // 상태/피드백 관련\r\n CircleCheckBig,\r\n CircleX,\r\n Circle,\r\n // 보안 관련\r\n Lock,\r\n LockOpen,\r\n Shield,\r\n ShieldCheck,\r\n ShieldAlert,\r\n // 사용자 관리 관련\r\n UserPlus,\r\n UserMinus,\r\n UserCheck,\r\n UserX,\r\n CircleUser,\r\n // 액션 관련\r\n Power,\r\n Zap,\r\n Target,\r\n Flag,\r\n Funnel,\r\n // 조직/팀 관련\r\n Building,\r\n Briefcase,\r\n Globe,\r\n // 기타 유용한 아이콘\r\n Printer,\r\n Share2,\r\n ExternalLink,\r\n Maximize2,\r\n Minimize2,\r\n MoveVertical,\r\n MoveHorizontal,\r\n Sun,\r\n Moon,\r\n type LucideIcon\r\n} from 'lucide-vue-next'\r\n\r\n// 확장 가능한 아이콘 타입\r\ntype BaseIconName = \r\n | 'house' | 'user' | 'settings' | 'search' | 'plus' | 'minus'\r\n | 'squarePen' | 'trash2' | 'save' | 'download' | 'upload'\r\n | 'eye' | 'eyeOff' | 'heart' | 'star' | 'check' | 'x'\r\n | 'circleAlert' | 'info' | 'chevronDown' | 'chevronUp'\r\n | 'chevronLeft' | 'chevronRight' | 'menu' | 'ellipsis' | 'ellipsisVertical'\r\n | 'palette'\r\n // WMS 핵심 아이콘들\r\n | 'package' | 'packageCheck' | 'packageX'\r\n | 'truck' | 'warehouse' | 'boxes'\r\n | 'archive' | 'clipboardList' | 'clipboardCheck'\r\n | 'fileText' | 'chartBar'\r\n | 'trendingUp' | 'trendingDown' | 'calendar' | 'clock'\r\n | 'mapPin' | 'table' | 'list' | 'listFilter'\r\n | 'arrowUpWideNarrow' | 'arrowDownWideNarrow' | 'scale'\r\n // 추가 아이콘들\r\n | 'server' | 'database' | 'link' | 'arrowLeftRight' | 'circleQuestionMark'\r\n | 'monitor' | 'users' | 'code' | 'fileKey' | 'cpu'\r\n | 'rocket' | 'fileSpreadsheet' | 'activity' | 'messageCircle' | 'book'\r\n // 인증 관련 아이콘들\r\n | 'logIn' | 'logOut'\r\n // 편집 관련 아이콘들\r\n | 'copy' | 'clipboard' | 'undo2' | 'redo2' | 'pencil'\r\n // 파일/폴더 관련 아이콘들\r\n | 'folder' | 'folderPlus' | 'folderOpen' | 'filePlus' | 'fileSearch' | 'filePen' | 'fileMinus'\r\n // 통신/알림 관련 아이콘들\r\n | 'mail' | 'send' | 'phone' | 'bell' | 'bellOff' | 'messageSquare'\r\n // 화살표/방향 관련 아이콘들\r\n | 'arrowUp' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'rotateCw' | 'rotateCcw' | 'refreshCw' | 'move'\r\n // 상태/피드백 관련 아이콘들\r\n | 'circleCheckBig' | 'circleX' | 'circle'\r\n // 보안 관련 아이콘들\r\n | 'lock' | 'lockOpen' | 'shield' | 'shieldCheck' | 'shieldAlert'\r\n // 사용자 관리 관련 아이콘들\r\n | 'userPlus' | 'userMinus' | 'userCheck' | 'userX' | 'circleUser'\r\n // 액션 관련 아이콘들\r\n | 'power' | 'zap' | 'target' | 'flag' | 'funnel'\r\n // 조직/팀 관련 아이콘들\r\n | 'building' | 'briefcase' | 'globe'\r\n // 기타 유용한 아이콘들\r\n | 'printer' | 'share2' | 'externalLink' | 'maximize2' | 'minimize2' | 'moveVertical' | 'moveHorizontal'\r\n | 'sun' | 'moon'\r\n\r\n// 커스텀 아이콘 확장을 위한 타입\r\ntype CustomIconName = string // 나중에 확장 가능\r\n\r\ntype IconName = BaseIconName | CustomIconName\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n name: IconName\r\n size?: SizeType\r\n color?: string\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 접근성 라벨 */\r\n ariaLabel?: string\r\n /** 접근성 역할 */\r\n role?: string\r\n }>(),\r\n {\n size: 'sm',\n styletype: 'default',\n role: 'img',\n },\n)\r\n\r\n/**\r\n * 기본 아이콘 매핑 (타입 안전)\r\n */\r\nconst baseIconMap: Record<BaseIconName, LucideIcon> = {\r\n house: House,\r\n user: User,\r\n settings: Settings,\r\n search: Search,\r\n plus: Plus,\r\n minus: Minus,\r\n squarePen: SquarePen,\r\n trash2: Trash2,\r\n save: Save,\r\n download: Download,\r\n upload: Upload,\r\n eye: Eye,\r\n eyeOff: EyeOff,\r\n heart: Heart,\r\n star: Star,\r\n check: Check,\r\n x: X,\r\n circleAlert: CircleAlert,\r\n info: Info,\r\n chevronDown: ChevronDown,\r\n chevronUp: ChevronUp,\r\n chevronLeft: ChevronLeft,\r\n chevronRight: ChevronRight,\r\n menu: Menu,\r\n ellipsis: Ellipsis,\r\n ellipsisVertical: EllipsisVertical,\r\n palette: Palette,\r\n // WMS 핵심 아이콘들\r\n package: Package,\r\n packageCheck: PackageCheck,\r\n packageX: PackageX,\r\n truck: Truck,\r\n warehouse: Warehouse,\r\n boxes: Boxes,\r\n archive: Archive,\r\n clipboardList: ClipboardList,\r\n clipboardCheck: ClipboardCheck,\r\n fileText: FileText,\r\n chartBar: ChartBar,\r\n trendingUp: TrendingUp,\r\n trendingDown: TrendingDown,\r\n calendar: Calendar,\r\n clock: Clock,\r\n mapPin: MapPin,\r\n table: Table,\r\n list: List,\r\n listFilter: ListFilter,\r\n arrowUpWideNarrow: ArrowUpWideNarrow,\r\n arrowDownWideNarrow: ArrowDownWideNarrow,\r\n scale: Scale,\r\n // 추가 아이콘들\r\n server: Server,\r\n database: Database,\r\n link: Link,\r\n arrowLeftRight: ArrowLeftRight,\r\n circleQuestionMark: CircleQuestionMark,\r\n monitor: Monitor,\r\n users: Users,\r\n code: Code,\r\n fileKey: FileKey,\r\n cpu: Cpu,\r\n rocket: Rocket,\r\n fileSpreadsheet: FileSpreadsheet,\r\n activity: Activity,\r\n messageCircle: MessageCircle,\r\n book: Book,\r\n // 인증 관련 아이콘들\r\n logIn: LogIn,\r\n logOut: LogOut,\r\n // 편집 관련 아이콘들\r\n copy: Copy,\r\n clipboard: Clipboard,\r\n undo2: Undo2,\r\n redo2: Redo2,\r\n pencil: Pencil,\r\n // 파일/폴더 관련 아이콘들\r\n folder: Folder,\r\n folderPlus: FolderPlus,\r\n folderOpen: FolderOpen,\r\n filePlus: FilePlus,\r\n fileSearch: FileSearch,\r\n filePen: FilePen,\r\n fileMinus: FileMinus,\r\n // 통신/알림 관련 아이콘들\r\n mail: Mail,\r\n send: Send,\r\n phone: Phone,\r\n bell: Bell,\r\n bellOff: BellOff,\r\n messageSquare: MessageSquare,\r\n // 화살표/방향 관련 아이콘들\r\n arrowUp: ArrowUp,\r\n arrowDown: ArrowDown,\r\n arrowLeft: ArrowLeft,\r\n arrowRight: ArrowRight,\r\n rotateCw: RotateCw,\r\n rotateCcw: RotateCcw,\r\n refreshCw: RefreshCw,\r\n move: Move,\r\n // 상태/피드백 관련 아이콘들\r\n circleCheckBig: CircleCheckBig,\r\n circleX: CircleX,\r\n circle: Circle,\r\n // 보안 관련 아이콘들\r\n lock: Lock,\r\n lockOpen: LockOpen,\r\n shield: Shield,\r\n shieldCheck: ShieldCheck,\r\n shieldAlert: ShieldAlert,\r\n // 사용자 관리 관련 아이콘들\r\n userPlus: UserPlus,\r\n userMinus: UserMinus,\r\n userCheck: UserCheck,\r\n userX: UserX,\r\n circleUser: CircleUser,\r\n // 액션 관련 아이콘들\r\n power: Power,\r\n zap: Zap,\r\n target: Target,\r\n flag: Flag,\r\n funnel: Funnel,\r\n // 조직/팀 관련 아이콘들\r\n building: Building,\r\n briefcase: Briefcase,\r\n globe: Globe,\r\n // 기타 유용한 아이콘들\r\n printer: Printer,\r\n share2: Share2,\r\n externalLink: ExternalLink,\r\n maximize2: Maximize2,\r\n minimize2: Minimize2,\r\n moveVertical: MoveVertical,\r\n moveHorizontal: MoveHorizontal,\r\n sun: Sun,\r\n moon: Moon,\r\n}\r\n\r\n/**\r\n * 동적 아이콘 로딩을 위한 함수 (나중에 확장 가능)\r\n * 현재는 사용하지 않지만 향후 커스텀 아이콘 지원을 위해 준비\r\n */\r\n// const loadCustomIcon = async (iconName: string): Promise<LucideIcon | null> => {\r\n// try {\r\n// // 나중에 다른 아이콘 라이브러리나 커스텀 아이콘을 동적으로 로드할 수 있음\r\n// // 예: const { [iconName]: IconComponent } = await import('@/assets/icons')\r\n// return null\r\n// } catch {\r\n// return null\r\n// }\r\n// }\r\n\r\n/**\r\n * size -> 실제 크기 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n}\n\r\n/**\r\n * styletype -> color, class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { color?: string; class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n color: '#3b82f6',\r\n class: '',\r\n },\r\n success: { \r\n color: '#10b981',\r\n class: '',\r\n },\r\n warning: { \r\n color: '#f59e0b',\r\n class: '',\r\n },\r\n danger: { \r\n color: '#ef4444',\r\n class: '',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 props가 있으면 styletype 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, props.class].filter(Boolean).join(' ')\r\n const ariaLabel = props.ariaLabel || props.name\r\n \r\n return {\r\n size: sizePreset,\r\n color: props.color || stylePreset.color, // props.color가 있으면 우선 사용, 없으면 stylePreset.color 사용\r\n class: finalClass,\r\n 'aria-label': ariaLabel,\r\n 'aria-hidden': !ariaLabel,\r\n role: props.role,\r\n }\r\n})\r\n\r\n/** 현재 아이콘 컴포넌트 */\r\nconst IconComponent = computed(() => {\r\n // 기본 아이콘 먼저 확인\r\n if (props.name in baseIconMap) {\r\n return baseIconMap[props.name as BaseIconName]\r\n }\r\n \r\n // 커스텀 아이콘은 나중에 확장\r\n // return loadCustomIcon(props.name)\r\n \r\n // 기본값으로 house 아이콘 반환\r\n return House\r\n})\r\n</script>\r\n\r\n<template>\r\n <component \r\n :is=\"IconComponent\" \r\n v-bind=\"mapped\"\r\n />\r\n</template>"],"names":["props","__props","baseIconMap","House","User","Settings","Search","Plus","Minus","SquarePen","Trash2","Save","Download","Upload","Eye","EyeOff","Heart","Star","Check","X","CircleAlert","Info","ChevronDown","ChevronUp","ChevronLeft","ChevronRight","Menu","Ellipsis","EllipsisVertical","Palette","Package","PackageCheck","PackageX","Truck","Warehouse","Boxes","Archive","ClipboardList","ClipboardCheck","FileText","ChartBar","TrendingUp","TrendingDown","Calendar","Clock","MapPin","Table","List","ListFilter","ArrowUpWideNarrow","ArrowDownWideNarrow","Scale","Server","Database","Link","ArrowLeftRight","CircleQuestionMark","Monitor","Users","Code","FileKey","Cpu","Rocket","FileSpreadsheet","Activity","MessageCircle","Book","LogIn","LogOut","Copy","Clipboard","Undo2","Redo2","Pencil","Folder","FolderPlus","FolderOpen","FilePlus","FileSearch","FilePen","FileMinus","Mail","Send","Phone","Bell","BellOff","MessageSquare","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","RotateCw","RotateCcw","RefreshCw","Move","CircleCheckBig","CircleX","Circle","Lock","LockOpen","Shield","ShieldCheck","ShieldAlert","UserPlus","UserMinus","UserCheck","UserX","CircleUser","Power","Zap","Target","Flag","Funnel","Building","Briefcase","Globe","Printer","Share2","ExternalLink","Maximize2","Minimize2","MoveVertical","MoveHorizontal","Sun","Moon","SIZE_PRESETS","STYLE_PRESETS","mapped","computed","stylePreset","sizePreset","finalClass","ariaLabel","IconComponent","_createBlock","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps"],"mappings":"mUAsMA,MAAMA,EAAQC,EAuBRC,EAAgD,CACpD,MAAOC,EAAAA,MACP,KAAMC,EAAAA,KACN,SAAUC,EAAAA,SACV,OAAQC,EAAAA,OACR,KAAMC,EAAAA,KACN,MAAOC,EAAAA,MACP,UAAWC,EAAAA,UACX,OAAQC,EAAAA,OACR,KAAMC,EAAAA,KACN,SAAUC,EAAAA,SACV,OAAQC,EAAAA,OACR,IAAKC,EAAAA,IACL,OAAQC,EAAAA,OACR,MAAOC,EAAAA,MACP,KAAMC,EAAAA,KACN,MAAOC,EAAAA,MACP,EAAGC,EAAAA,EACH,YAAaC,EAAAA,YACb,KAAMC,EAAAA,KACN,YAAaC,EAAAA,YACb,UAAWC,EAAAA,UACX,YAAaC,EAAAA,YACb,aAAcC,EAAAA,aACd,KAAMC,EAAAA,KACN,SAAUC,EAAAA,SACV,iBAAkBC,EAAAA,iBAClB,QAASC,EAAAA,QAET,QAASC,EAAAA,QACT,aAAcC,EAAAA,aACd,SAAUC,EAAAA,SACV,MAAOC,EAAAA,MACP,UAAWC,EAAAA,UACX,MAAOC,EAAAA,MACP,QAASC,EAAAA,QACT,cAAeC,EAAAA,cACf,eAAgBC,EAAAA,eAChB,SAAUC,EAAAA,SACV,SAAUC,EAAAA,SACV,WAAYC,EAAAA,WACZ,aAAcC,EAAAA,aACd,SAAUC,EAAAA,SACV,MAAOC,EAAAA,MACP,OAAQC,EAAAA,OACR,MAAOC,EAAAA,MACP,KAAMC,EAAAA,KACN,WAAYC,EAAAA,WACZ,kBAAmBC,EAAAA,kBACnB,oBAAqBC,EAAAA,oBACrB,MAAOC,EAAAA,MAEP,OAAQC,EAAAA,OACR,SAAUC,EAAAA,SACV,KAAMC,EAAAA,KACN,eAAgBC,EAAAA,eAChB,mBAAoBC,EAAAA,mBACpB,QAASC,EAAAA,QACT,MAAOC,EAAAA,MACP,KAAMC,EAAAA,KACN,QAASC,EAAAA,QACT,IAAKC,EAAAA,IACL,OAAQC,EAAAA,OACR,gBAAiBC,EAAAA,gBACjB,SAAUC,EAAAA,SACV,cAAeC,EAAAA,cACf,KAAMC,EAAAA,KAEN,MAAOC,EAAAA,MACP,OAAQC,EAAAA,OAER,KAAMC,EAAAA,KACN,UAAWC,EAAAA,UACX,MAAOC,EAAAA,MACP,MAAOC,EAAAA,MACP,OAAQC,EAAAA,OAER,OAAQC,EAAAA,OACR,WAAYC,EAAAA,WACZ,WAAYC,EAAAA,WACZ,SAAUC,EAAAA,SACV,WAAYC,EAAAA,WACZ,QAASC,EAAAA,QACT,UAAWC,EAAAA,UAEX,KAAMC,EAAAA,KACN,KAAMC,EAAAA,KACN,MAAOC,EAAAA,MACP,KAAMC,EAAAA,KACN,QAASC,EAAAA,QACT,cAAeC,EAAAA,cAEf,QAASC,EAAAA,QACT,UAAWC,EAAAA,UACX,UAAWC,EAAAA,UACX,WAAYC,EAAAA,WACZ,SAAUC,EAAAA,SACV,UAAWC,EAAAA,UACX,UAAWC,EAAAA,UACX,KAAMC,EAAAA,KAEN,eAAgBC,EAAAA,eAChB,QAASC,EAAAA,QACT,OAAQC,EAAAA,OAER,KAAMC,EAAAA,KACN,SAAUC,EAAAA,SACV,OAAQC,EAAAA,OACR,YAAaC,EAAAA,YACb,YAAaC,EAAAA,YAEb,SAAUC,EAAAA,SACV,UAAWC,EAAAA,UACX,UAAWC,EAAAA,UACX,MAAOC,EAAAA,MACP,WAAYC,EAAAA,WAEZ,MAAOC,EAAAA,MACP,IAAKC,EAAAA,IACL,OAAQC,EAAAA,OACR,KAAMC,EAAAA,KACN,OAAQC,EAAAA,OAER,SAAUC,EAAAA,SACV,UAAWC,EAAAA,UACX,MAAOC,EAAAA,MAEP,QAASC,EAAAA,QACT,OAAQC,EAAAA,OACR,aAAcC,EAAAA,aACd,UAAWC,EAAAA,UACX,UAAWC,EAAAA,UACX,aAAcC,EAAAA,aACd,eAAgBC,EAAAA,eAChB,IAAKC,EAAAA,IACL,KAAMC,EAAAA,IAAA,EAoBFC,EAAyC,CAC7C,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,EAAA,EAMAC,EAAsE,CAC1E,QAAS,CAAE,MAAO,EAAA,EAClB,QAAS,CACP,MAAO,UACP,MAAO,EAAA,EAET,QAAS,CACP,MAAO,UACP,MAAO,EAAA,EAET,QAAS,CACP,MAAO,UACP,MAAO,EAAA,EAET,OAAQ,CACN,MAAO,UACP,MAAO,EAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAcH,EAAc9H,EAAM,SAAU,EAC5CkI,EAAaL,EAAa7H,EAAM,IAAK,EACrCmI,EAAa,CAACF,EAAY,MAAOjI,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EACtEoI,EAAYpI,EAAM,WAAaA,EAAM,KAE3C,MAAO,CACL,KAAMkI,EACN,MAAOlI,EAAM,OAASiI,EAAY,MAClC,MAAOE,EACP,aAAcC,EACd,cAAe,CAACA,EAChB,KAAMpI,EAAM,IAAA,CAEhB,CAAC,EAGKqI,EAAgBL,EAAAA,SAAS,IAEzBhI,EAAM,QAAQE,EACTA,EAAYF,EAAM,IAAoB,EAOxCG,EAAAA,KACR,8BAICmI,EAAAA,YAGEC,EAAAA,wBAFKF,EAAA,KAAa,EAAAG,iBAAAC,EAAAA,mBACVV,EAAA,KAAM,CAAA,EAAA,KAAA,EAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { defineComponent as h, computed as i, createBlock as f, openBlock as C, resolveDynamicComponent as g, normalizeProps as m, guardReactiveProps as k } from "vue";
|
|
2
|
-
import { Moon as w, Sun as P, MoveHorizontal as b, MoveVertical as v, Minimize2 as S, Maximize2 as L, ExternalLink as M, Share2 as U, Printer as y, Globe as F, Briefcase as R, Building as
|
|
2
|
+
import { Moon as w, Sun as P, MoveHorizontal as b, MoveVertical as v, Minimize2 as S, Maximize2 as L, ExternalLink as M, Share2 as U, Printer as y, Globe as F, Briefcase as R, Building as x, Funnel as A, Flag as B, Target as z, Zap as D, Power as E, CircleUser as T, UserX as O, UserCheck as _, UserMinus as I, UserPlus as X, ShieldAlert as W, ShieldCheck as q, Shield as H, LockOpen as N, Lock as V, Circle as K, CircleX as Q, CircleCheckBig as Z, Move as j, RefreshCw as G, RotateCcw as J, RotateCw as Y, ArrowRight as $, ArrowLeft as ee, ArrowDown as re, ArrowUp as oe, MessageSquare as le, BellOff as ae, Bell as ie, Phone as se, Send as ne, Mail as ce, FileMinus as te, FilePen as pe, FileSearch as ue, FilePlus as de, FolderOpen as he, FolderPlus as fe, Folder as Ce, Pencil as ge, Redo2 as me, Undo2 as ke, Clipboard as we, Copy as Pe, LogOut as be, LogIn as ve, Book as Se, MessageCircle as Le, Activity as Me, FileSpreadsheet as Ue, Rocket as ye, Cpu as Fe, FileKey as Re, Code as xe, Users as Ae, Monitor as Be, CircleQuestionMark as ze, ArrowLeftRight as De, Link as Ee, Database as Te, Server as Oe, Scale as _e, ArrowDownWideNarrow as Ie, ArrowUpWideNarrow as Xe, ListFilter as We, List as qe, Table as He, MapPin as Ne, Clock as Ve, Calendar as Ke, TrendingDown as Qe, TrendingUp as Ze, ChartBar as je, FileText as Ge, ClipboardCheck as Je, ClipboardList as Ye, Archive as $e, Boxes as er, Warehouse as rr, Truck as or, PackageX as lr, PackageCheck as ar, Package as ir, Palette as sr, EllipsisVertical as nr, Ellipsis as cr, Menu as tr, ChevronRight as pr, ChevronLeft as ur, ChevronUp as dr, ChevronDown as hr, Info as fr, CircleAlert as Cr, X as gr, Check as mr, Star as kr, Heart as wr, EyeOff as Pr, Eye as br, Upload as vr, Download as Sr, Save as Lr, Trash2 as Mr, SquarePen as Ur, Minus as yr, Plus as Fr, Search as Rr, Settings as xr, User as Ar, House as s } from "lucide-vue-next";
|
|
3
3
|
const Dr = /* @__PURE__ */ h({
|
|
4
4
|
__name: "JIcon",
|
|
5
5
|
props: {
|
|
6
6
|
name: {},
|
|
7
|
-
size: { default: "
|
|
7
|
+
size: { default: "sm" },
|
|
8
8
|
color: {},
|
|
9
9
|
class: {},
|
|
10
10
|
styletype: { default: "default" },
|
|
@@ -14,8 +14,8 @@ const Dr = /* @__PURE__ */ h({
|
|
|
14
14
|
setup(n) {
|
|
15
15
|
const e = n, o = {
|
|
16
16
|
house: s,
|
|
17
|
-
user:
|
|
18
|
-
settings:
|
|
17
|
+
user: Ar,
|
|
18
|
+
settings: xr,
|
|
19
19
|
search: Rr,
|
|
20
20
|
plus: Fr,
|
|
21
21
|
minus: yr,
|
|
@@ -69,9 +69,9 @@ const Dr = /* @__PURE__ */ h({
|
|
|
69
69
|
link: Ee,
|
|
70
70
|
arrowLeftRight: De,
|
|
71
71
|
circleQuestionMark: ze,
|
|
72
|
-
monitor:
|
|
73
|
-
users:
|
|
74
|
-
code:
|
|
72
|
+
monitor: Be,
|
|
73
|
+
users: Ae,
|
|
74
|
+
code: xe,
|
|
75
75
|
fileKey: Re,
|
|
76
76
|
cpu: Fe,
|
|
77
77
|
rocket: ye,
|
|
@@ -132,10 +132,10 @@ const Dr = /* @__PURE__ */ h({
|
|
|
132
132
|
power: E,
|
|
133
133
|
zap: D,
|
|
134
134
|
target: z,
|
|
135
|
-
flag:
|
|
136
|
-
funnel:
|
|
135
|
+
flag: B,
|
|
136
|
+
funnel: A,
|
|
137
137
|
// 조직/팀 관련 아이콘들
|
|
138
|
-
building:
|
|
138
|
+
building: x,
|
|
139
139
|
briefcase: R,
|
|
140
140
|
globe: F,
|
|
141
141
|
// 기타 유용한 아이콘들
|
|
@@ -149,10 +149,11 @@ const Dr = /* @__PURE__ */ h({
|
|
|
149
149
|
sun: P,
|
|
150
150
|
moon: w
|
|
151
151
|
}, c = {
|
|
152
|
+
xs: 12,
|
|
152
153
|
sm: 16,
|
|
153
|
-
md:
|
|
154
|
-
lg:
|
|
155
|
-
xl:
|
|
154
|
+
md: 20,
|
|
155
|
+
lg: 24,
|
|
156
|
+
xl: 32
|
|
156
157
|
}, t = {
|
|
157
158
|
default: { class: "" },
|
|
158
159
|
primary: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JIcon.vue.js","sources":["../../../../src/components/atoms/JIcon.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { \r\n House, \r\n User, \r\n Settings, \r\n Search, \r\n Plus, \r\n Minus, \r\n SquarePen, \r\n Trash2, \r\n Save, \r\n Download,\r\n Upload,\r\n Eye,\r\n EyeOff,\r\n Heart,\r\n Star,\r\n Check,\r\n X,\r\n CircleAlert,\r\n Info,\r\n ChevronDown,\r\n ChevronUp,\r\n ChevronLeft,\r\n ChevronRight,\r\n Menu,\r\n Ellipsis,\r\n EllipsisVertical,\r\n Palette,\r\n // WMS 핵심 아이콘들\r\n Package,\r\n PackageCheck,\r\n PackageX,\r\n Truck,\r\n Warehouse,\r\n Boxes,\r\n Archive,\r\n ClipboardList,\r\n ClipboardCheck,\r\n FileText,\r\n ChartBar,\r\n TrendingUp,\r\n TrendingDown,\r\n Calendar,\r\n Clock,\r\n MapPin,\r\n Table,\r\n List,\r\n ListFilter,\r\n ArrowUpWideNarrow,\r\n ArrowDownWideNarrow,\r\n Scale,\r\n // 추가 아이콘들\r\n Server,\r\n Database,\r\n Link,\r\n ArrowLeftRight,\r\n CircleQuestionMark,\r\n Monitor,\r\n Users,\r\n Code,\r\n FileKey,\r\n Cpu,\r\n Rocket,\r\n FileSpreadsheet,\r\n Activity,\r\n MessageCircle,\r\n Book,\r\n LogIn,\r\n LogOut,\r\n // 편집 관련\r\n Copy,\r\n Clipboard,\r\n Undo2,\r\n Redo2,\r\n Pencil,\r\n // 파일/폴더 관련\r\n Folder,\r\n FolderPlus,\r\n FolderOpen,\r\n FilePlus,\r\n FileSearch,\r\n FilePen,\r\n FileMinus,\r\n // 통신/알림 관련\r\n Mail,\r\n Send,\r\n Phone,\r\n Bell,\r\n BellOff,\r\n MessageSquare,\r\n // 화살표/방향 관련\r\n ArrowUp,\r\n ArrowDown,\r\n ArrowLeft,\r\n ArrowRight,\r\n RotateCw,\r\n RotateCcw,\r\n RefreshCw,\r\n Move,\r\n // 상태/피드백 관련\r\n CircleCheckBig,\r\n CircleX,\r\n Circle,\r\n // 보안 관련\r\n Lock,\r\n LockOpen,\r\n Shield,\r\n ShieldCheck,\r\n ShieldAlert,\r\n // 사용자 관리 관련\r\n UserPlus,\r\n UserMinus,\r\n UserCheck,\r\n UserX,\r\n CircleUser,\r\n // 액션 관련\r\n Power,\r\n Zap,\r\n Target,\r\n Flag,\r\n Funnel,\r\n // 조직/팀 관련\r\n Building,\r\n Briefcase,\r\n Globe,\r\n // 기타 유용한 아이콘\r\n Printer,\r\n Share2,\r\n ExternalLink,\r\n Maximize2,\r\n Minimize2,\r\n MoveVertical,\r\n MoveHorizontal,\r\n Sun,\r\n Moon,\r\n type LucideIcon\r\n} from 'lucide-vue-next'\r\n\r\n// 확장 가능한 아이콘 타입\r\ntype BaseIconName = \r\n | 'house' | 'user' | 'settings' | 'search' | 'plus' | 'minus'\r\n | 'squarePen' | 'trash2' | 'save' | 'download' | 'upload'\r\n | 'eye' | 'eyeOff' | 'heart' | 'star' | 'check' | 'x'\r\n | 'circleAlert' | 'info' | 'chevronDown' | 'chevronUp'\r\n | 'chevronLeft' | 'chevronRight' | 'menu' | 'ellipsis' | 'ellipsisVertical'\r\n | 'palette'\r\n // WMS 핵심 아이콘들\r\n | 'package' | 'packageCheck' | 'packageX'\r\n | 'truck' | 'warehouse' | 'boxes'\r\n | 'archive' | 'clipboardList' | 'clipboardCheck'\r\n | 'fileText' | 'chartBar'\r\n | 'trendingUp' | 'trendingDown' | 'calendar' | 'clock'\r\n | 'mapPin' | 'table' | 'list' | 'listFilter'\r\n | 'arrowUpWideNarrow' | 'arrowDownWideNarrow' | 'scale'\r\n // 추가 아이콘들\r\n | 'server' | 'database' | 'link' | 'arrowLeftRight' | 'circleQuestionMark'\r\n | 'monitor' | 'users' | 'code' | 'fileKey' | 'cpu'\r\n | 'rocket' | 'fileSpreadsheet' | 'activity' | 'messageCircle' | 'book'\r\n // 인증 관련 아이콘들\r\n | 'logIn' | 'logOut'\r\n // 편집 관련 아이콘들\r\n | 'copy' | 'clipboard' | 'undo2' | 'redo2' | 'pencil'\r\n // 파일/폴더 관련 아이콘들\r\n | 'folder' | 'folderPlus' | 'folderOpen' | 'filePlus' | 'fileSearch' | 'filePen' | 'fileMinus'\r\n // 통신/알림 관련 아이콘들\r\n | 'mail' | 'send' | 'phone' | 'bell' | 'bellOff' | 'messageSquare'\r\n // 화살표/방향 관련 아이콘들\r\n | 'arrowUp' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'rotateCw' | 'rotateCcw' | 'refreshCw' | 'move'\r\n // 상태/피드백 관련 아이콘들\r\n | 'circleCheckBig' | 'circleX' | 'circle'\r\n // 보안 관련 아이콘들\r\n | 'lock' | 'lockOpen' | 'shield' | 'shieldCheck' | 'shieldAlert'\r\n // 사용자 관리 관련 아이콘들\r\n | 'userPlus' | 'userMinus' | 'userCheck' | 'userX' | 'circleUser'\r\n // 액션 관련 아이콘들\r\n | 'power' | 'zap' | 'target' | 'flag' | 'funnel'\r\n // 조직/팀 관련 아이콘들\r\n | 'building' | 'briefcase' | 'globe'\r\n // 기타 유용한 아이콘들\r\n | 'printer' | 'share2' | 'externalLink' | 'maximize2' | 'minimize2' | 'moveVertical' | 'moveHorizontal'\r\n | 'sun' | 'moon'\r\n\r\n// 커스텀 아이콘 확장을 위한 타입\r\ntype CustomIconName = string // 나중에 확장 가능\r\n\r\ntype IconName = BaseIconName | CustomIconName\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'sm' | 'md' | 'lg' | 'xl'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n name: IconName\r\n size?: SizeType\r\n color?: string\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 접근성 라벨 */\r\n ariaLabel?: string\r\n /** 접근성 역할 */\r\n role?: string\r\n }>(),\r\n {\r\n size: 'md',\r\n styletype: 'default',\r\n role: 'img',\r\n },\r\n)\r\n\r\n/**\r\n * 기본 아이콘 매핑 (타입 안전)\r\n */\r\nconst baseIconMap: Record<BaseIconName, LucideIcon> = {\r\n house: House,\r\n user: User,\r\n settings: Settings,\r\n search: Search,\r\n plus: Plus,\r\n minus: Minus,\r\n squarePen: SquarePen,\r\n trash2: Trash2,\r\n save: Save,\r\n download: Download,\r\n upload: Upload,\r\n eye: Eye,\r\n eyeOff: EyeOff,\r\n heart: Heart,\r\n star: Star,\r\n check: Check,\r\n x: X,\r\n circleAlert: CircleAlert,\r\n info: Info,\r\n chevronDown: ChevronDown,\r\n chevronUp: ChevronUp,\r\n chevronLeft: ChevronLeft,\r\n chevronRight: ChevronRight,\r\n menu: Menu,\r\n ellipsis: Ellipsis,\r\n ellipsisVertical: EllipsisVertical,\r\n palette: Palette,\r\n // WMS 핵심 아이콘들\r\n package: Package,\r\n packageCheck: PackageCheck,\r\n packageX: PackageX,\r\n truck: Truck,\r\n warehouse: Warehouse,\r\n boxes: Boxes,\r\n archive: Archive,\r\n clipboardList: ClipboardList,\r\n clipboardCheck: ClipboardCheck,\r\n fileText: FileText,\r\n chartBar: ChartBar,\r\n trendingUp: TrendingUp,\r\n trendingDown: TrendingDown,\r\n calendar: Calendar,\r\n clock: Clock,\r\n mapPin: MapPin,\r\n table: Table,\r\n list: List,\r\n listFilter: ListFilter,\r\n arrowUpWideNarrow: ArrowUpWideNarrow,\r\n arrowDownWideNarrow: ArrowDownWideNarrow,\r\n scale: Scale,\r\n // 추가 아이콘들\r\n server: Server,\r\n database: Database,\r\n link: Link,\r\n arrowLeftRight: ArrowLeftRight,\r\n circleQuestionMark: CircleQuestionMark,\r\n monitor: Monitor,\r\n users: Users,\r\n code: Code,\r\n fileKey: FileKey,\r\n cpu: Cpu,\r\n rocket: Rocket,\r\n fileSpreadsheet: FileSpreadsheet,\r\n activity: Activity,\r\n messageCircle: MessageCircle,\r\n book: Book,\r\n // 인증 관련 아이콘들\r\n logIn: LogIn,\r\n logOut: LogOut,\r\n // 편집 관련 아이콘들\r\n copy: Copy,\r\n clipboard: Clipboard,\r\n undo2: Undo2,\r\n redo2: Redo2,\r\n pencil: Pencil,\r\n // 파일/폴더 관련 아이콘들\r\n folder: Folder,\r\n folderPlus: FolderPlus,\r\n folderOpen: FolderOpen,\r\n filePlus: FilePlus,\r\n fileSearch: FileSearch,\r\n filePen: FilePen,\r\n fileMinus: FileMinus,\r\n // 통신/알림 관련 아이콘들\r\n mail: Mail,\r\n send: Send,\r\n phone: Phone,\r\n bell: Bell,\r\n bellOff: BellOff,\r\n messageSquare: MessageSquare,\r\n // 화살표/방향 관련 아이콘들\r\n arrowUp: ArrowUp,\r\n arrowDown: ArrowDown,\r\n arrowLeft: ArrowLeft,\r\n arrowRight: ArrowRight,\r\n rotateCw: RotateCw,\r\n rotateCcw: RotateCcw,\r\n refreshCw: RefreshCw,\r\n move: Move,\r\n // 상태/피드백 관련 아이콘들\r\n circleCheckBig: CircleCheckBig,\r\n circleX: CircleX,\r\n circle: Circle,\r\n // 보안 관련 아이콘들\r\n lock: Lock,\r\n lockOpen: LockOpen,\r\n shield: Shield,\r\n shieldCheck: ShieldCheck,\r\n shieldAlert: ShieldAlert,\r\n // 사용자 관리 관련 아이콘들\r\n userPlus: UserPlus,\r\n userMinus: UserMinus,\r\n userCheck: UserCheck,\r\n userX: UserX,\r\n circleUser: CircleUser,\r\n // 액션 관련 아이콘들\r\n power: Power,\r\n zap: Zap,\r\n target: Target,\r\n flag: Flag,\r\n funnel: Funnel,\r\n // 조직/팀 관련 아이콘들\r\n building: Building,\r\n briefcase: Briefcase,\r\n globe: Globe,\r\n // 기타 유용한 아이콘들\r\n printer: Printer,\r\n share2: Share2,\r\n externalLink: ExternalLink,\r\n maximize2: Maximize2,\r\n minimize2: Minimize2,\r\n moveVertical: MoveVertical,\r\n moveHorizontal: MoveHorizontal,\r\n sun: Sun,\r\n moon: Moon,\r\n}\r\n\r\n/**\r\n * 동적 아이콘 로딩을 위한 함수 (나중에 확장 가능)\r\n * 현재는 사용하지 않지만 향후 커스텀 아이콘 지원을 위해 준비\r\n */\r\n// const loadCustomIcon = async (iconName: string): Promise<LucideIcon | null> => {\r\n// try {\r\n// // 나중에 다른 아이콘 라이브러리나 커스텀 아이콘을 동적으로 로드할 수 있음\r\n// // 예: const { [iconName]: IconComponent } = await import('@/assets/icons')\r\n// return null\r\n// } catch {\r\n// return null\r\n// }\r\n// }\r\n\r\n/**\r\n * size -> 실제 크기 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, number> = {\r\n sm: 16,\r\n md: 24,\r\n lg: 32,\r\n xl: 40,\r\n}\r\n\r\n/**\r\n * styletype -> color, class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { color?: string; class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n color: '#3b82f6',\r\n class: '',\r\n },\r\n success: { \r\n color: '#10b981',\r\n class: '',\r\n },\r\n warning: { \r\n color: '#f59e0b',\r\n class: '',\r\n },\r\n danger: { \r\n color: '#ef4444',\r\n class: '',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 props가 있으면 styletype 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, props.class].filter(Boolean).join(' ')\r\n const ariaLabel = props.ariaLabel || props.name\r\n \r\n return {\r\n size: sizePreset,\r\n color: props.color || stylePreset.color, // props.color가 있으면 우선 사용, 없으면 stylePreset.color 사용\r\n class: finalClass,\r\n 'aria-label': ariaLabel,\r\n 'aria-hidden': !ariaLabel,\r\n role: props.role,\r\n }\r\n})\r\n\r\n/** 현재 아이콘 컴포넌트 */\r\nconst IconComponent = computed(() => {\r\n // 기본 아이콘 먼저 확인\r\n if (props.name in baseIconMap) {\r\n return baseIconMap[props.name as BaseIconName]\r\n }\r\n \r\n // 커스텀 아이콘은 나중에 확장\r\n // return loadCustomIcon(props.name)\r\n \r\n // 기본값으로 house 아이콘 반환\r\n return House\r\n})\r\n</script>\r\n\r\n<template>\r\n <component \r\n :is=\"IconComponent\" \r\n v-bind=\"mapped\"\r\n />\r\n</template>"],"names":["props","__props","baseIconMap","House","User","Settings","Search","Plus","Minus","SquarePen","Trash2","Save","Download","Upload","Eye","EyeOff","Heart","Star","Check","X","CircleAlert","Info","ChevronDown","ChevronUp","ChevronLeft","ChevronRight","Menu","Ellipsis","EllipsisVertical","Palette","Package","PackageCheck","PackageX","Truck","Warehouse","Boxes","Archive","ClipboardList","ClipboardCheck","FileText","ChartBar","TrendingUp","TrendingDown","Calendar","Clock","MapPin","Table","List","ListFilter","ArrowUpWideNarrow","ArrowDownWideNarrow","Scale","Server","Database","Link","ArrowLeftRight","CircleQuestionMark","Monitor","Users","Code","FileKey","Cpu","Rocket","FileSpreadsheet","Activity","MessageCircle","Book","LogIn","LogOut","Copy","Clipboard","Undo2","Redo2","Pencil","Folder","FolderPlus","FolderOpen","FilePlus","FileSearch","FilePen","FileMinus","Mail","Send","Phone","Bell","BellOff","MessageSquare","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","RotateCw","RotateCcw","RefreshCw","Move","CircleCheckBig","CircleX","Circle","Lock","LockOpen","Shield","ShieldCheck","ShieldAlert","UserPlus","UserMinus","UserCheck","UserX","CircleUser","Power","Zap","Target","Flag","Funnel","Building","Briefcase","Globe","Printer","Share2","ExternalLink","Maximize2","Minimize2","MoveVertical","MoveHorizontal","Sun","Moon","SIZE_PRESETS","STYLE_PRESETS","mapped","computed","stylePreset","sizePreset","finalClass","ariaLabel","IconComponent","_createBlock","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JIcon.vue.js","sources":["../../../../src/components/atoms/JIcon.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { \r\n House, \r\n User, \r\n Settings, \r\n Search, \r\n Plus, \r\n Minus, \r\n SquarePen, \r\n Trash2, \r\n Save, \r\n Download,\r\n Upload,\r\n Eye,\r\n EyeOff,\r\n Heart,\r\n Star,\r\n Check,\r\n X,\r\n CircleAlert,\r\n Info,\r\n ChevronDown,\r\n ChevronUp,\r\n ChevronLeft,\r\n ChevronRight,\r\n Menu,\r\n Ellipsis,\r\n EllipsisVertical,\r\n Palette,\r\n // WMS 핵심 아이콘들\r\n Package,\r\n PackageCheck,\r\n PackageX,\r\n Truck,\r\n Warehouse,\r\n Boxes,\r\n Archive,\r\n ClipboardList,\r\n ClipboardCheck,\r\n FileText,\r\n ChartBar,\r\n TrendingUp,\r\n TrendingDown,\r\n Calendar,\r\n Clock,\r\n MapPin,\r\n Table,\r\n List,\r\n ListFilter,\r\n ArrowUpWideNarrow,\r\n ArrowDownWideNarrow,\r\n Scale,\r\n // 추가 아이콘들\r\n Server,\r\n Database,\r\n Link,\r\n ArrowLeftRight,\r\n CircleQuestionMark,\r\n Monitor,\r\n Users,\r\n Code,\r\n FileKey,\r\n Cpu,\r\n Rocket,\r\n FileSpreadsheet,\r\n Activity,\r\n MessageCircle,\r\n Book,\r\n LogIn,\r\n LogOut,\r\n // 편집 관련\r\n Copy,\r\n Clipboard,\r\n Undo2,\r\n Redo2,\r\n Pencil,\r\n // 파일/폴더 관련\r\n Folder,\r\n FolderPlus,\r\n FolderOpen,\r\n FilePlus,\r\n FileSearch,\r\n FilePen,\r\n FileMinus,\r\n // 통신/알림 관련\r\n Mail,\r\n Send,\r\n Phone,\r\n Bell,\r\n BellOff,\r\n MessageSquare,\r\n // 화살표/방향 관련\r\n ArrowUp,\r\n ArrowDown,\r\n ArrowLeft,\r\n ArrowRight,\r\n RotateCw,\r\n RotateCcw,\r\n RefreshCw,\r\n Move,\r\n // 상태/피드백 관련\r\n CircleCheckBig,\r\n CircleX,\r\n Circle,\r\n // 보안 관련\r\n Lock,\r\n LockOpen,\r\n Shield,\r\n ShieldCheck,\r\n ShieldAlert,\r\n // 사용자 관리 관련\r\n UserPlus,\r\n UserMinus,\r\n UserCheck,\r\n UserX,\r\n CircleUser,\r\n // 액션 관련\r\n Power,\r\n Zap,\r\n Target,\r\n Flag,\r\n Funnel,\r\n // 조직/팀 관련\r\n Building,\r\n Briefcase,\r\n Globe,\r\n // 기타 유용한 아이콘\r\n Printer,\r\n Share2,\r\n ExternalLink,\r\n Maximize2,\r\n Minimize2,\r\n MoveVertical,\r\n MoveHorizontal,\r\n Sun,\r\n Moon,\r\n type LucideIcon\r\n} from 'lucide-vue-next'\r\n\r\n// 확장 가능한 아이콘 타입\r\ntype BaseIconName = \r\n | 'house' | 'user' | 'settings' | 'search' | 'plus' | 'minus'\r\n | 'squarePen' | 'trash2' | 'save' | 'download' | 'upload'\r\n | 'eye' | 'eyeOff' | 'heart' | 'star' | 'check' | 'x'\r\n | 'circleAlert' | 'info' | 'chevronDown' | 'chevronUp'\r\n | 'chevronLeft' | 'chevronRight' | 'menu' | 'ellipsis' | 'ellipsisVertical'\r\n | 'palette'\r\n // WMS 핵심 아이콘들\r\n | 'package' | 'packageCheck' | 'packageX'\r\n | 'truck' | 'warehouse' | 'boxes'\r\n | 'archive' | 'clipboardList' | 'clipboardCheck'\r\n | 'fileText' | 'chartBar'\r\n | 'trendingUp' | 'trendingDown' | 'calendar' | 'clock'\r\n | 'mapPin' | 'table' | 'list' | 'listFilter'\r\n | 'arrowUpWideNarrow' | 'arrowDownWideNarrow' | 'scale'\r\n // 추가 아이콘들\r\n | 'server' | 'database' | 'link' | 'arrowLeftRight' | 'circleQuestionMark'\r\n | 'monitor' | 'users' | 'code' | 'fileKey' | 'cpu'\r\n | 'rocket' | 'fileSpreadsheet' | 'activity' | 'messageCircle' | 'book'\r\n // 인증 관련 아이콘들\r\n | 'logIn' | 'logOut'\r\n // 편집 관련 아이콘들\r\n | 'copy' | 'clipboard' | 'undo2' | 'redo2' | 'pencil'\r\n // 파일/폴더 관련 아이콘들\r\n | 'folder' | 'folderPlus' | 'folderOpen' | 'filePlus' | 'fileSearch' | 'filePen' | 'fileMinus'\r\n // 통신/알림 관련 아이콘들\r\n | 'mail' | 'send' | 'phone' | 'bell' | 'bellOff' | 'messageSquare'\r\n // 화살표/방향 관련 아이콘들\r\n | 'arrowUp' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'rotateCw' | 'rotateCcw' | 'refreshCw' | 'move'\r\n // 상태/피드백 관련 아이콘들\r\n | 'circleCheckBig' | 'circleX' | 'circle'\r\n // 보안 관련 아이콘들\r\n | 'lock' | 'lockOpen' | 'shield' | 'shieldCheck' | 'shieldAlert'\r\n // 사용자 관리 관련 아이콘들\r\n | 'userPlus' | 'userMinus' | 'userCheck' | 'userX' | 'circleUser'\r\n // 액션 관련 아이콘들\r\n | 'power' | 'zap' | 'target' | 'flag' | 'funnel'\r\n // 조직/팀 관련 아이콘들\r\n | 'building' | 'briefcase' | 'globe'\r\n // 기타 유용한 아이콘들\r\n | 'printer' | 'share2' | 'externalLink' | 'maximize2' | 'minimize2' | 'moveVertical' | 'moveHorizontal'\r\n | 'sun' | 'moon'\r\n\r\n// 커스텀 아이콘 확장을 위한 타입\r\ntype CustomIconName = string // 나중에 확장 가능\r\n\r\ntype IconName = BaseIconName | CustomIconName\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n name: IconName\r\n size?: SizeType\r\n color?: string\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 접근성 라벨 */\r\n ariaLabel?: string\r\n /** 접근성 역할 */\r\n role?: string\r\n }>(),\r\n {\n size: 'sm',\n styletype: 'default',\n role: 'img',\n },\n)\r\n\r\n/**\r\n * 기본 아이콘 매핑 (타입 안전)\r\n */\r\nconst baseIconMap: Record<BaseIconName, LucideIcon> = {\r\n house: House,\r\n user: User,\r\n settings: Settings,\r\n search: Search,\r\n plus: Plus,\r\n minus: Minus,\r\n squarePen: SquarePen,\r\n trash2: Trash2,\r\n save: Save,\r\n download: Download,\r\n upload: Upload,\r\n eye: Eye,\r\n eyeOff: EyeOff,\r\n heart: Heart,\r\n star: Star,\r\n check: Check,\r\n x: X,\r\n circleAlert: CircleAlert,\r\n info: Info,\r\n chevronDown: ChevronDown,\r\n chevronUp: ChevronUp,\r\n chevronLeft: ChevronLeft,\r\n chevronRight: ChevronRight,\r\n menu: Menu,\r\n ellipsis: Ellipsis,\r\n ellipsisVertical: EllipsisVertical,\r\n palette: Palette,\r\n // WMS 핵심 아이콘들\r\n package: Package,\r\n packageCheck: PackageCheck,\r\n packageX: PackageX,\r\n truck: Truck,\r\n warehouse: Warehouse,\r\n boxes: Boxes,\r\n archive: Archive,\r\n clipboardList: ClipboardList,\r\n clipboardCheck: ClipboardCheck,\r\n fileText: FileText,\r\n chartBar: ChartBar,\r\n trendingUp: TrendingUp,\r\n trendingDown: TrendingDown,\r\n calendar: Calendar,\r\n clock: Clock,\r\n mapPin: MapPin,\r\n table: Table,\r\n list: List,\r\n listFilter: ListFilter,\r\n arrowUpWideNarrow: ArrowUpWideNarrow,\r\n arrowDownWideNarrow: ArrowDownWideNarrow,\r\n scale: Scale,\r\n // 추가 아이콘들\r\n server: Server,\r\n database: Database,\r\n link: Link,\r\n arrowLeftRight: ArrowLeftRight,\r\n circleQuestionMark: CircleQuestionMark,\r\n monitor: Monitor,\r\n users: Users,\r\n code: Code,\r\n fileKey: FileKey,\r\n cpu: Cpu,\r\n rocket: Rocket,\r\n fileSpreadsheet: FileSpreadsheet,\r\n activity: Activity,\r\n messageCircle: MessageCircle,\r\n book: Book,\r\n // 인증 관련 아이콘들\r\n logIn: LogIn,\r\n logOut: LogOut,\r\n // 편집 관련 아이콘들\r\n copy: Copy,\r\n clipboard: Clipboard,\r\n undo2: Undo2,\r\n redo2: Redo2,\r\n pencil: Pencil,\r\n // 파일/폴더 관련 아이콘들\r\n folder: Folder,\r\n folderPlus: FolderPlus,\r\n folderOpen: FolderOpen,\r\n filePlus: FilePlus,\r\n fileSearch: FileSearch,\r\n filePen: FilePen,\r\n fileMinus: FileMinus,\r\n // 통신/알림 관련 아이콘들\r\n mail: Mail,\r\n send: Send,\r\n phone: Phone,\r\n bell: Bell,\r\n bellOff: BellOff,\r\n messageSquare: MessageSquare,\r\n // 화살표/방향 관련 아이콘들\r\n arrowUp: ArrowUp,\r\n arrowDown: ArrowDown,\r\n arrowLeft: ArrowLeft,\r\n arrowRight: ArrowRight,\r\n rotateCw: RotateCw,\r\n rotateCcw: RotateCcw,\r\n refreshCw: RefreshCw,\r\n move: Move,\r\n // 상태/피드백 관련 아이콘들\r\n circleCheckBig: CircleCheckBig,\r\n circleX: CircleX,\r\n circle: Circle,\r\n // 보안 관련 아이콘들\r\n lock: Lock,\r\n lockOpen: LockOpen,\r\n shield: Shield,\r\n shieldCheck: ShieldCheck,\r\n shieldAlert: ShieldAlert,\r\n // 사용자 관리 관련 아이콘들\r\n userPlus: UserPlus,\r\n userMinus: UserMinus,\r\n userCheck: UserCheck,\r\n userX: UserX,\r\n circleUser: CircleUser,\r\n // 액션 관련 아이콘들\r\n power: Power,\r\n zap: Zap,\r\n target: Target,\r\n flag: Flag,\r\n funnel: Funnel,\r\n // 조직/팀 관련 아이콘들\r\n building: Building,\r\n briefcase: Briefcase,\r\n globe: Globe,\r\n // 기타 유용한 아이콘들\r\n printer: Printer,\r\n share2: Share2,\r\n externalLink: ExternalLink,\r\n maximize2: Maximize2,\r\n minimize2: Minimize2,\r\n moveVertical: MoveVertical,\r\n moveHorizontal: MoveHorizontal,\r\n sun: Sun,\r\n moon: Moon,\r\n}\r\n\r\n/**\r\n * 동적 아이콘 로딩을 위한 함수 (나중에 확장 가능)\r\n * 현재는 사용하지 않지만 향후 커스텀 아이콘 지원을 위해 준비\r\n */\r\n// const loadCustomIcon = async (iconName: string): Promise<LucideIcon | null> => {\r\n// try {\r\n// // 나중에 다른 아이콘 라이브러리나 커스텀 아이콘을 동적으로 로드할 수 있음\r\n// // 예: const { [iconName]: IconComponent } = await import('@/assets/icons')\r\n// return null\r\n// } catch {\r\n// return null\r\n// }\r\n// }\r\n\r\n/**\r\n * size -> 실제 크기 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n}\n\r\n/**\r\n * styletype -> color, class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { color?: string; class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n color: '#3b82f6',\r\n class: '',\r\n },\r\n success: { \r\n color: '#10b981',\r\n class: '',\r\n },\r\n warning: { \r\n color: '#f59e0b',\r\n class: '',\r\n },\r\n danger: { \r\n color: '#ef4444',\r\n class: '',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 props가 있으면 styletype 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, props.class].filter(Boolean).join(' ')\r\n const ariaLabel = props.ariaLabel || props.name\r\n \r\n return {\r\n size: sizePreset,\r\n color: props.color || stylePreset.color, // props.color가 있으면 우선 사용, 없으면 stylePreset.color 사용\r\n class: finalClass,\r\n 'aria-label': ariaLabel,\r\n 'aria-hidden': !ariaLabel,\r\n role: props.role,\r\n }\r\n})\r\n\r\n/** 현재 아이콘 컴포넌트 */\r\nconst IconComponent = computed(() => {\r\n // 기본 아이콘 먼저 확인\r\n if (props.name in baseIconMap) {\r\n return baseIconMap[props.name as BaseIconName]\r\n }\r\n \r\n // 커스텀 아이콘은 나중에 확장\r\n // return loadCustomIcon(props.name)\r\n \r\n // 기본값으로 house 아이콘 반환\r\n return House\r\n})\r\n</script>\r\n\r\n<template>\r\n <component \r\n :is=\"IconComponent\" \r\n v-bind=\"mapped\"\r\n />\r\n</template>"],"names":["props","__props","baseIconMap","House","User","Settings","Search","Plus","Minus","SquarePen","Trash2","Save","Download","Upload","Eye","EyeOff","Heart","Star","Check","X","CircleAlert","Info","ChevronDown","ChevronUp","ChevronLeft","ChevronRight","Menu","Ellipsis","EllipsisVertical","Palette","Package","PackageCheck","PackageX","Truck","Warehouse","Boxes","Archive","ClipboardList","ClipboardCheck","FileText","ChartBar","TrendingUp","TrendingDown","Calendar","Clock","MapPin","Table","List","ListFilter","ArrowUpWideNarrow","ArrowDownWideNarrow","Scale","Server","Database","Link","ArrowLeftRight","CircleQuestionMark","Monitor","Users","Code","FileKey","Cpu","Rocket","FileSpreadsheet","Activity","MessageCircle","Book","LogIn","LogOut","Copy","Clipboard","Undo2","Redo2","Pencil","Folder","FolderPlus","FolderOpen","FilePlus","FileSearch","FilePen","FileMinus","Mail","Send","Phone","Bell","BellOff","MessageSquare","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","RotateCw","RotateCcw","RefreshCw","Move","CircleCheckBig","CircleX","Circle","Lock","LockOpen","Shield","ShieldCheck","ShieldAlert","UserPlus","UserMinus","UserCheck","UserX","CircleUser","Power","Zap","Target","Flag","Funnel","Building","Briefcase","Globe","Printer","Share2","ExternalLink","Maximize2","Minimize2","MoveVertical","MoveHorizontal","Sun","Moon","SIZE_PRESETS","STYLE_PRESETS","mapped","computed","stylePreset","sizePreset","finalClass","ariaLabel","IconComponent","_createBlock","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),o=require("../shadcn/Kbd.vue.cjs"),u=e.defineComponent({__name:"JKbd",props:{class:{},styletype:{default:"default"},size:{default:"sm"}},setup(l){const s=l,a={default:{class:""},primary:{class:"bg-blue-100 text-blue-800 border-blue-200"},success:{class:"bg-green-100 text-green-800 border-green-200"},warning:{class:"bg-amber-100 text-amber-800 border-amber-200"},danger:{class:"bg-red-100 text-red-800 border-red-200"}},c={xs:{class:"h-3.5 px-0.5 text-[10px] min-w-[14px]"},sm:{class:"h-4 px-1 text-xs min-w-[16px]"},md:{class:"h-5 px-1.5 text-xs"},lg:{class:"h-6 px-2 text-sm"}},n=e.computed(()=>{const t=a[s.styletype],r=c[s.size];return{class:[t.class,r.class,s.class].filter(Boolean).join(" ")}});return(t,r)=>(e.openBlock(),e.createBlock(o.default,e.normalizeProps(e.guardReactiveProps(n.value)),{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},16))}});exports.default=u;
|
|
2
2
|
//# sourceMappingURL=JKbd.vue.cjs.map
|