@j-solution/components 1.8.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +415 -416
- package/assets/jwms-portal-frontend-Di6lStzZ.css +1 -0
- package/assets/styles/j-components.css +1 -1
- package/assets/styles/main.css +29 -29
- package/assets/styles/themes.css +422 -422
- package/components/atoms/JAvatar.vue.cjs.map +1 -1
- package/components/atoms/JAvatar.vue.js.map +1 -1
- package/components/atoms/JBadge.vue.cjs.map +1 -1
- package/components/atoms/JBadge.vue.js.map +1 -1
- package/components/atoms/JButton.vue.cjs +1 -1
- package/components/atoms/JButton.vue.js +1 -1
- package/components/atoms/JButton.vue2.cjs.map +1 -1
- package/components/atoms/JButton.vue2.js.map +1 -1
- package/components/atoms/JCombo.vue.cjs.map +1 -1
- package/components/atoms/JCombo.vue.js.map +1 -1
- package/components/atoms/JDatepicker.vue.cjs.map +1 -1
- package/components/atoms/JDatepicker.vue.js.map +1 -1
- package/components/atoms/JDivider.vue.cjs.map +1 -1
- package/components/atoms/JDivider.vue.js.map +1 -1
- package/components/atoms/JEditor.vue.cjs +1 -1
- package/components/atoms/JEditor.vue.js +2 -2
- package/components/atoms/JEditor.vue2.cjs.map +1 -1
- 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 +72 -85
- package/components/atoms/JGrid.vue2.js.map +1 -1
- package/components/atoms/JIcon.vue.cjs.map +1 -1
- package/components/atoms/JIcon.vue.js.map +1 -1
- package/components/atoms/JImage.vue.cjs.map +1 -1
- package/components/atoms/JImage.vue.js.map +1 -1
- package/components/atoms/JKbd.vue.cjs.map +1 -1
- package/components/atoms/JKbd.vue.js.map +1 -1
- package/components/atoms/JLabel.vue.cjs.map +1 -1
- package/components/atoms/JLabel.vue.js.map +1 -1
- package/components/atoms/JPreview.vue.cjs +1 -1
- package/components/atoms/JPreview.vue.js +7 -7
- package/components/atoms/JPreview.vue2.cjs.map +1 -1
- package/components/atoms/JPreview.vue2.js.map +1 -1
- package/components/atoms/JProgress.vue.cjs.map +1 -1
- package/components/atoms/JProgress.vue.js.map +1 -1
- package/components/atoms/JRadio.vue.cjs.map +1 -1
- package/components/atoms/JRadio.vue.js.map +1 -1
- package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
- package/components/atoms/JSearchCombo.vue.js.map +1 -1
- package/components/atoms/JSectionTitle.vue2.cjs +1 -1
- package/components/atoms/JSectionTitle.vue2.cjs.map +1 -1
- package/components/atoms/JSectionTitle.vue2.js +5 -8
- package/components/atoms/JSectionTitle.vue2.js.map +1 -1
- package/components/atoms/JSpinner.vue.cjs.map +1 -1
- package/components/atoms/JSpinner.vue.js.map +1 -1
- package/components/atoms/JToast.vue.cjs.map +1 -1
- package/components/atoms/JToast.vue.js.map +1 -1
- package/components/atoms/JTooltip.vue.cjs.map +1 -1
- package/components/atoms/JTooltip.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 +2 -5
- package/components/molecules/JAlert.vue.js.map +1 -1
- package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
- package/components/molecules/JBreadcrumb.vue.js.map +1 -1
- package/components/molecules/JEmptyState.vue2.cjs +1 -1
- package/components/molecules/JEmptyState.vue2.cjs.map +1 -1
- package/components/molecules/JEmptyState.vue2.js +15 -18
- package/components/molecules/JEmptyState.vue2.js.map +1 -1
- package/components/molecules/JFormField.vue2.cjs +1 -1
- package/components/molecules/JFormField.vue2.cjs.map +1 -1
- package/components/molecules/JFormField.vue2.js +2 -5
- package/components/molecules/JFormField.vue2.js.map +1 -1
- package/components/molecules/JTabs.vue.cjs +1 -1
- package/components/molecules/JTabs.vue.js +1 -1
- package/components/molecules/JTabs.vue2.cjs.map +1 -1
- 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 +16 -19
- 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 +2 -5
- package/components/organisms/JDynamicForm.vue2.js.map +1 -1
- package/components/organisms/JDynamicTabs.vue.cjs.map +1 -1
- package/components/organisms/JDynamicTabs.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue.cjs +1 -1
- package/components/organisms/JFilterBar.vue.js +2 -2
- package/components/organisms/JFilterBar.vue2.cjs +1 -1
- package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue2.js +14 -12
- 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 +14 -17
- package/components/organisms/JFormModal.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 +2 -5
- package/components/organisms/JModal.vue.js.map +1 -1
- package/components/organisms/JPageContainer.vue.cjs.map +1 -1
- 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 +20 -23
- package/components/organisms/JSearchPanel.vue2.js.map +1 -1
- package/components/organisms/JSidebar/JSidebar.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebar.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue.js +189 -0
- package/components/organisms/JSidebar/JSidebar.vue.js.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue2.cjs +2 -0
- package/components/organisms/JSidebar/JSidebar.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebar.vue2.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.js +89 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.js +79 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebarItem.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.map +1 -1
- package/components/organisms/JSidebarAdvanced.vue2.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.map +1 -1
- package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
- package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
- package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
- package/components/shadcn/Card.vue.cjs.map +1 -1
- package/components/shadcn/Card.vue.js.map +1 -1
- package/components/shadcn/CardContent.vue.cjs.map +1 -1
- package/components/shadcn/CardContent.vue.js.map +1 -1
- package/components/shadcn/CardDescription.vue.cjs.map +1 -1
- package/components/shadcn/CardDescription.vue.js.map +1 -1
- package/components/shadcn/CardFooter.vue.cjs.map +1 -1
- package/components/shadcn/CardFooter.vue.js.map +1 -1
- package/components/shadcn/CardHeader.vue.cjs.map +1 -1
- package/components/shadcn/CardHeader.vue.js.map +1 -1
- package/components/shadcn/CardTitle.vue.cjs.map +1 -1
- package/components/shadcn/CardTitle.vue.js.map +1 -1
- package/components/shadcn/Checkbox.vue.cjs.map +1 -1
- package/components/shadcn/Checkbox.vue.js.map +1 -1
- package/components/shadcn/Combobox.vue.cjs.map +1 -1
- package/components/shadcn/Combobox.vue.js.map +1 -1
- package/components/shadcn/ComboboxAnchor.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxAnchor.vue.js.map +1 -1
- package/components/shadcn/ComboboxEmpty.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxEmpty.vue.js.map +1 -1
- package/components/shadcn/ComboboxGroup.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxGroup.vue.js.map +1 -1
- package/components/shadcn/ComboboxInput.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxInput.vue.js.map +1 -1
- package/components/shadcn/ComboboxItem.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxItem.vue.js.map +1 -1
- package/components/shadcn/ComboboxList.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxList.vue.js.map +1 -1
- package/components/shadcn/ComboboxTrigger.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxTrigger.vue.js.map +1 -1
- package/components/shadcn/ContextMenu.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenu.vue.js.map +1 -1
- package/components/shadcn/ContextMenuContent.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuContent.vue.js.map +1 -1
- package/components/shadcn/ContextMenuGroup.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuGroup.vue.js.map +1 -1
- package/components/shadcn/ContextMenuItem.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuItem.vue.js.map +1 -1
- package/components/shadcn/ContextMenuLabel.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuLabel.vue.js.map +1 -1
- package/components/shadcn/ContextMenuSeparator.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuSeparator.vue.js.map +1 -1
- package/components/shadcn/ContextMenuSub.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuSub.vue.js.map +1 -1
- package/components/shadcn/ContextMenuSubContent.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuSubContent.vue.js.map +1 -1
- package/components/shadcn/ContextMenuSubTrigger.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuSubTrigger.vue.js.map +1 -1
- package/components/shadcn/ContextMenuTrigger.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuTrigger.vue.js.map +1 -1
- package/components/shadcn/Field.vue.cjs.map +1 -1
- package/components/shadcn/Field.vue.js.map +1 -1
- package/components/shadcn/FieldContent.vue.cjs.map +1 -1
- package/components/shadcn/FieldContent.vue.js.map +1 -1
- package/components/shadcn/FieldDescription.vue.cjs.map +1 -1
- package/components/shadcn/FieldDescription.vue.js.map +1 -1
- package/components/shadcn/FieldError.vue.cjs.map +1 -1
- package/components/shadcn/FieldError.vue.js.map +1 -1
- package/components/shadcn/FieldGroup.vue.cjs.map +1 -1
- package/components/shadcn/FieldGroup.vue.js.map +1 -1
- package/components/shadcn/FieldLabel.vue.cjs.map +1 -1
- package/components/shadcn/FieldLabel.vue.js.map +1 -1
- package/components/shadcn/Input.vue.cjs.map +1 -1
- package/components/shadcn/Input.vue.js.map +1 -1
- package/components/shadcn/Label.vue.cjs.map +1 -1
- package/components/shadcn/Label.vue.js.map +1 -1
- package/components/shadcn/RadioGroup.vue.cjs.map +1 -1
- package/components/shadcn/RadioGroup.vue.js.map +1 -1
- package/components/shadcn/RadioGroupItem.vue.cjs.map +1 -1
- package/components/shadcn/RadioGroupItem.vue.js.map +1 -1
- package/components/shadcn/Select.vue.cjs.map +1 -1
- package/components/shadcn/Select.vue.js.map +1 -1
- package/components/shadcn/SelectContent.vue.cjs.map +1 -1
- package/components/shadcn/SelectContent.vue.js.map +1 -1
- package/components/shadcn/SelectGroup.vue.cjs.map +1 -1
- package/components/shadcn/SelectGroup.vue.js.map +1 -1
- package/components/shadcn/SelectItem.vue.cjs.map +1 -1
- package/components/shadcn/SelectItem.vue.js.map +1 -1
- package/components/shadcn/SelectLabel.vue.cjs.map +1 -1
- package/components/shadcn/SelectLabel.vue.js.map +1 -1
- package/components/shadcn/SelectScrollDownButton.vue2.cjs.map +1 -1
- package/components/shadcn/SelectScrollDownButton.vue2.js.map +1 -1
- package/components/shadcn/SelectScrollUpButton.vue2.cjs.map +1 -1
- package/components/shadcn/SelectScrollUpButton.vue2.js.map +1 -1
- package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
- package/components/shadcn/SelectTrigger.vue.js.map +1 -1
- package/components/shadcn/SelectValue.vue.cjs.map +1 -1
- package/components/shadcn/SelectValue.vue.js.map +1 -1
- package/components/shadcn/Separator.vue.cjs.map +1 -1
- package/components/shadcn/Separator.vue.js.map +1 -1
- package/components/shadcn/Switch.vue.cjs.map +1 -1
- package/components/shadcn/Switch.vue.js.map +1 -1
- package/components/shadcn/Tabs.vue.cjs.map +1 -1
- package/components/shadcn/Tabs.vue.js.map +1 -1
- package/components/shadcn/TabsContent.vue.cjs.map +1 -1
- package/components/shadcn/TabsContent.vue.js.map +1 -1
- package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
- package/components/shadcn/TabsTrigger.vue.js.map +1 -1
- package/components/shadcn/Textarea.vue.cjs.map +1 -1
- package/components/shadcn/Textarea.vue.js.map +1 -1
- package/components/shadcn/Toaster.vue.cjs.map +1 -1
- package/components/shadcn/Toaster.vue.js.map +1 -1
- package/components/shadcn/index.cjs.map +1 -1
- package/components/shadcn/index.js.map +1 -1
- package/components/shadcn/resizable/ResizableHandle.vue.cjs.map +1 -1
- package/components/shadcn/resizable/ResizableHandle.vue.js.map +1 -1
- package/components/shadcn/resizable/ResizablePanelGroup.vue.cjs.map +1 -1
- package/components/shadcn/resizable/ResizablePanelGroup.vue.js.map +1 -1
- package/components/templates/JLayout.vue.cjs.map +1 -1
- package/components/templates/JLayout.vue.js.map +1 -1
- package/components/templates/JLayoutSimple.vue.cjs +1 -1
- package/components/templates/JLayoutSimple.vue.cjs.map +1 -1
- package/components/templates/JLayoutSimple.vue.js +36 -30
- package/components/templates/JLayoutSimple.vue.js.map +1 -1
- package/index.cjs +1 -1
- package/index.js +22 -20
- package/lib/styleTypePreset.cjs.map +1 -1
- package/lib/styleTypePreset.js.map +1 -1
- package/lib/theme-utils.cjs.map +1 -1
- package/lib/theme-utils.js.map +1 -1
- package/package.json +1 -1
- package/tailwind.config.js +81 -81
- package/types/index.d.ts +119 -107
- package/types/sidebar.types.cjs +2 -0
- package/types/sidebar.types.cjs.map +1 -0
- package/types/sidebar.types.js +5 -0
- package/types/sidebar.types.js.map +1 -0
- package/assets/jwms-portal-frontend-BtHTA-UF.css +0 -1
package/README.md
CHANGED
|
@@ -1,416 +1,415 @@
|
|
|
1
|
-
# J-Component
|
|
2
|
-
|
|
3
|
-
> Vue.js 3 기반 Atomic Design 패턴 컴포넌트 라이브러리
|
|
4
|
-
|
|
5
|
-
## 📋 프로젝트 개요
|
|
6
|
-
|
|
7
|
-
J-Component는 Vue.js 3와 TypeScript를 기반으로 한 재사용 가능한 UI 컴포넌트 라이브러리입니다. shadcn/ui 디자인 시스템과 Atomic Design 패턴을 적용하여 일관성 있고 확장 가능한 컴포넌트를 제공합니다.
|
|
8
|
-
|
|
9
|
-
## 🚀 현재 버전: v1.
|
|
10
|
-
|
|
11
|
-
**최신 업데이트 (2026년 2월 20일)**
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- **
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
- **
|
|
29
|
-
- **
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
- **
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
├──
|
|
45
|
-
│ ├──
|
|
46
|
-
│ │ ├──
|
|
47
|
-
│ │ ├──
|
|
48
|
-
│ │ ├──
|
|
49
|
-
│ │
|
|
50
|
-
│
|
|
51
|
-
│ ├──
|
|
52
|
-
│ ├──
|
|
53
|
-
│
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
- **
|
|
108
|
-
- **
|
|
109
|
-
- **
|
|
110
|
-
- **
|
|
111
|
-
- **
|
|
112
|
-
- **
|
|
113
|
-
- **
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
- **
|
|
118
|
-
- **
|
|
119
|
-
- **
|
|
120
|
-
- **
|
|
121
|
-
- **
|
|
122
|
-
- **
|
|
123
|
-
- **
|
|
124
|
-
- **
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
- **
|
|
129
|
-
- **
|
|
130
|
-
- **
|
|
131
|
-
- **
|
|
132
|
-
- **
|
|
133
|
-
- **
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
- **
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
<
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
import {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
<
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
import {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
<
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
import {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
| **[
|
|
241
|
-
| **[
|
|
242
|
-
| **[
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
- **`packages/v{version}/
|
|
250
|
-
- **`packages/v{version}/
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
├──
|
|
260
|
-
├──
|
|
261
|
-
├──
|
|
262
|
-
│ ├──
|
|
263
|
-
│
|
|
264
|
-
|
|
265
|
-
└──
|
|
266
|
-
|
|
267
|
-
├──
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
>
|
|
277
|
-
> -
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
-
|
|
298
|
-
-
|
|
299
|
-
-
|
|
300
|
-
-
|
|
301
|
-
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
-
|
|
307
|
-
-
|
|
308
|
-
-
|
|
309
|
-
|
|
310
|
-
-
|
|
311
|
-
-
|
|
312
|
-
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
-
|
|
327
|
-
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
-
|
|
333
|
-
-
|
|
334
|
-
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
- GitHub
|
|
373
|
-
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
<
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
```
|
|
1
|
+
# J-Component
|
|
2
|
+
|
|
3
|
+
> Vue.js 3 기반 Atomic Design 패턴 컴포넌트 라이브러리
|
|
4
|
+
|
|
5
|
+
## 📋 프로젝트 개요
|
|
6
|
+
|
|
7
|
+
J-Component는 Vue.js 3와 TypeScript를 기반으로 한 재사용 가능한 UI 컴포넌트 라이브러리입니다. shadcn/ui 디자인 시스템과 Atomic Design 패턴을 적용하여 일관성 있고 확장 가능한 컴포넌트를 제공합니다.
|
|
8
|
+
|
|
9
|
+
## 🚀 현재 버전: v1.9.1
|
|
10
|
+
|
|
11
|
+
**최신 업데이트 (2026년 2월 20일)**
|
|
12
|
+
- **JGrid 테마 적용 방식 전환**: AG Grid Theme Builder API(`themeQuartz.withParams`) 기반으로 변경
|
|
13
|
+
- **자동 색상 모드 연동**: `browserColorScheme: 'inherit'`로 라이트/다크 모드 자동 감지
|
|
14
|
+
- **JFilterBar 레이아웃 개선**: 필터 컬럼 최소 폭/간격 조정으로 입력 필드 가독성 향상
|
|
15
|
+
- **패키징 워크플로 정리**: `.claude/commands/package.md` 추가로 배포 절차 표준화
|
|
16
|
+
|
|
17
|
+
[전체 릴리즈 노트 보기](./RELEASE_NOTES.md)
|
|
18
|
+
|
|
19
|
+
## 🛠️ 기술 스택
|
|
20
|
+
|
|
21
|
+
### 핵심 프레임워크
|
|
22
|
+
- **Vue.js 3.5** - 프론트엔드 프레임워크
|
|
23
|
+
- **TypeScript 5.9** - 타입 시스템
|
|
24
|
+
- **Vite 7** - 빌드 도구
|
|
25
|
+
|
|
26
|
+
### UI & 스타일링
|
|
27
|
+
- **TailwindCSS 3.4** - 유틸리티 CSS 프레임워크
|
|
28
|
+
- **shadcn/ui** - 디자인 시스템 (radix-vue 기반)
|
|
29
|
+
- **Lucide Icons** - 아이콘 라이브러리
|
|
30
|
+
|
|
31
|
+
### 개발 도구
|
|
32
|
+
- **Storybook 9** - 컴포넌트 문서화 및 테스트
|
|
33
|
+
- Docs 탭: 다양한 폼 스키마/도메인 예시 자동 미리보기 지원
|
|
34
|
+
- 테마 셀렉터: 8가지 tweakcn 테마 지원 (Default, Slate, Rose, Blue, Green, Purple, Orange, Vescrow)
|
|
35
|
+
- 다크모드 토글: 라이트/다크 모드 실시간 전환
|
|
36
|
+
- **ESLint 9** - 코드 품질 검사
|
|
37
|
+
- **Prettier** - 코드 포맷팅
|
|
38
|
+
|
|
39
|
+
## 📁 프로젝트 구조
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
jwms-portal-frontend/
|
|
43
|
+
├── src/
|
|
44
|
+
│ ├── components/ # Atomic Design Components
|
|
45
|
+
│ │ ├── atoms/ # 기본 UI 요소 (JButton, JInput, JIcon 등)
|
|
46
|
+
│ │ ├── molecules/ # atoms의 조합 (JFormField, JCard, JAlert 등)
|
|
47
|
+
│ │ ├── organisms/ # molecules의 조합 (JModal, JDynamicTabs, JDynamicForm 등)
|
|
48
|
+
│ │ ├── shadcn/ # shadcn 컴포넌트 래핑
|
|
49
|
+
│ │ └── templates/ # 페이지 레이아웃
|
|
50
|
+
│ ├── stories/ # Storybook 스토리
|
|
51
|
+
│ ├── types/ # TypeScript 타입 정의
|
|
52
|
+
│ ├── composables/ # Vue Composition Functions
|
|
53
|
+
│ └── services/ # API 서비스
|
|
54
|
+
├── docs/ # 컴포넌트 사용 가이드
|
|
55
|
+
└── dist/ # 빌드 결과물
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 🚀 시작하기
|
|
59
|
+
|
|
60
|
+
### 설치
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# 저장소 클론
|
|
64
|
+
git clone <repository-url>
|
|
65
|
+
cd J-Component
|
|
66
|
+
|
|
67
|
+
# 의존성 설치
|
|
68
|
+
cd jwms-portal-frontend
|
|
69
|
+
npm install
|
|
70
|
+
# 또는
|
|
71
|
+
pnpm install
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 개발 서버 실행
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# 개발 서버 시작 (http://localhost:5173)
|
|
78
|
+
npm run dev
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Storybook 실행
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Storybook 시작 (http://localhost:6006)
|
|
85
|
+
npm run storybook
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Storybook 기능:**
|
|
89
|
+
- 다양한 폼 레이아웃/스키마(검색, 개인정보, 섹션, Wizard 등)와 Args/Docs 자동 문서 예시 확인 가능
|
|
90
|
+
- 툴바에서 테마 선택 (Default, Slate, Rose, Blue, Green)
|
|
91
|
+
- 다크모드 토글로 라이트/다크 모드 전환
|
|
92
|
+
|
|
93
|
+
### 빌드
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# 프로덕션 빌드
|
|
97
|
+
npm run build
|
|
98
|
+
|
|
99
|
+
# 빌드 결과 미리보기
|
|
100
|
+
npm run preview
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 📚 주요 컴포넌트
|
|
104
|
+
|
|
105
|
+
### Atoms (기본 요소)
|
|
106
|
+
- **JButton** - 버튼 컴포넌트
|
|
107
|
+
- **JInput** - 입력 필드
|
|
108
|
+
- **JIcon** - 아이콘 컴포넌트
|
|
109
|
+
- **JLabel** - 라벨 컴포넌트
|
|
110
|
+
- **JBadge** - 배지 컴포넌트
|
|
111
|
+
- **JProgress** - 진행률 표시
|
|
112
|
+
- **JSpinner** - 로딩 스피너
|
|
113
|
+
- **JGrid** - AG Grid 기반 데이터 그리드 컴포넌트 (Enterprise 기능 지원: 그룹핑, 피벗, Excel 내보내기)
|
|
114
|
+
|
|
115
|
+
### Molecules (조합 요소)
|
|
116
|
+
- **JFormField** - 폼 필드 래퍼
|
|
117
|
+
- **JCard** - 카드 컴포넌트
|
|
118
|
+
- **JAlert** - 알림 컴포넌트
|
|
119
|
+
- **JAccordion** - 아코디언 컴포넌트
|
|
120
|
+
- **JContextMenu** - 컨텍스트 메뉴
|
|
121
|
+
- **JSearchAddr** - 주소 검색 컴포넌트
|
|
122
|
+
- **JTabs** - 탭 컴포넌트 (탭 전환 이벤트 처리 개선, component 속성 활용 지원)
|
|
123
|
+
- **JButtonGroup** - 버튼 그룹 컴포넌트 (구분선 자동 표시 지원)
|
|
124
|
+
- **JTitlebar** - 타이틀바 컴포넌트 (제목, 설명, 팝오버 기능)
|
|
125
|
+
|
|
126
|
+
### Organisms (복합 요소)
|
|
127
|
+
- **JModal** - 모달 컴포넌트 (size prop 지원: sm, md, lg, xl, 2xl, full)
|
|
128
|
+
- **JDynamicTabs** - 동적 탭 관리
|
|
129
|
+
- **JDynamicForm** - 스키마 기반 동적 폼(기본/섹션/다단계, Docs 탭/다양한 예시 참조)
|
|
130
|
+
- **JFormModal** - JDynamicForm 기반 동적 폼 모달 컴포넌트 (size prop 지원)
|
|
131
|
+
- **JSearchPanel** - JDynamicForm 기반 재사용 가능한 검색 패널 (Collapsible, 조건 요약, 초기화 기능 지원)
|
|
132
|
+
- **JSidebarAdvanced** - 고급 사이드바 (검색, 즐겨찾기, 다단계 메뉴 지원)
|
|
133
|
+
- **JSidebarSimple** - 간단한 사이드바 (다단계 메뉴, 검색 지원)
|
|
134
|
+
|
|
135
|
+
### Templates (레이아웃)
|
|
136
|
+
- **JLayoutAdvanced** - 고급 레이아웃 (JHeader + JSidebarAdvanced + JDynamicTabs 조합)
|
|
137
|
+
- **JLayoutSimple** - 간단한 레이아웃 (JHeader + JSidebarSimple + JPageContainer 조합)
|
|
138
|
+
|
|
139
|
+
## 📖 사용 예시
|
|
140
|
+
|
|
141
|
+
> 💡 **컴포넌트 사용 가이드**: [사용 가이드](./docs/USAGE_GUIDE.md)에서 JDynamicTabs 경로 기반 컴포넌트 로딩 방법 등 상세 가이드를 확인하세요.
|
|
142
|
+
|
|
143
|
+
### NPM 패키지 사용 (권장)
|
|
144
|
+
|
|
145
|
+
```vue
|
|
146
|
+
<template>
|
|
147
|
+
<div class="p-4">
|
|
148
|
+
<JButton variant="primary" @click="handleClick">
|
|
149
|
+
클릭하세요
|
|
150
|
+
</JButton>
|
|
151
|
+
|
|
152
|
+
<JFormField label="이름" required>
|
|
153
|
+
<JInput v-model="name" placeholder="이름을 입력하세요" />
|
|
154
|
+
</JFormField>
|
|
155
|
+
|
|
156
|
+
<JAlert type="info" title="알림">
|
|
157
|
+
이것은 정보 알림입니다.
|
|
158
|
+
</JAlert>
|
|
159
|
+
</div>
|
|
160
|
+
</template>
|
|
161
|
+
|
|
162
|
+
<script setup>
|
|
163
|
+
import { ref } from 'vue'
|
|
164
|
+
import { JButton, JFormField, JInput, JAlert } from '@j-solution/components'
|
|
165
|
+
// CSS는 자동으로 포함됩니다 - 별도 import 불필요
|
|
166
|
+
|
|
167
|
+
const name = ref('')
|
|
168
|
+
|
|
169
|
+
const handleClick = () => {
|
|
170
|
+
console.log('버튼 클릭됨')
|
|
171
|
+
}
|
|
172
|
+
</script>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
> 💡 **참고**: NPM 패키지는 패키지 진입점에서 CSS가 자동으로 import되므로, 컴포넌트만 import하면 스타일이 자동으로 적용됩니다.
|
|
176
|
+
|
|
177
|
+
### Standard 방식 사용 (파일 복사)
|
|
178
|
+
|
|
179
|
+
```vue
|
|
180
|
+
<template>
|
|
181
|
+
<div class="p-4">
|
|
182
|
+
<JButton variant="primary" @click="handleClick">
|
|
183
|
+
클릭하세요
|
|
184
|
+
</JButton>
|
|
185
|
+
|
|
186
|
+
<JFormField label="이름" required>
|
|
187
|
+
<JInput v-model="name" placeholder="이름을 입력하세요" />
|
|
188
|
+
</JFormField>
|
|
189
|
+
|
|
190
|
+
<JAlert type="info" title="알림">
|
|
191
|
+
이것은 정보 알림입니다.
|
|
192
|
+
</JAlert>
|
|
193
|
+
</div>
|
|
194
|
+
</template>
|
|
195
|
+
|
|
196
|
+
<script setup>
|
|
197
|
+
import { ref } from 'vue'
|
|
198
|
+
import { JButton, JFormField, JInput, JAlert } from '@/components'
|
|
199
|
+
|
|
200
|
+
const name = ref('')
|
|
201
|
+
|
|
202
|
+
const handleClick = () => {
|
|
203
|
+
console.log('버튼 클릭됨')
|
|
204
|
+
}
|
|
205
|
+
</script>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 주소 검색 컴포넌트
|
|
209
|
+
|
|
210
|
+
```vue
|
|
211
|
+
<template>
|
|
212
|
+
<JSearchAddr
|
|
213
|
+
v-model="address"
|
|
214
|
+
@select="handleAddressSelect"
|
|
215
|
+
placeholder="주소를 검색하세요"
|
|
216
|
+
/>
|
|
217
|
+
</template>
|
|
218
|
+
|
|
219
|
+
<script setup>
|
|
220
|
+
import { ref } from 'vue'
|
|
221
|
+
import { JSearchAddr } from '@/components/molecules'
|
|
222
|
+
|
|
223
|
+
const address = ref('')
|
|
224
|
+
|
|
225
|
+
const handleAddressSelect = (selectedAddress) => {
|
|
226
|
+
console.log('선택된 주소:', selectedAddress)
|
|
227
|
+
}
|
|
228
|
+
</script>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## 📚 문서 가이드
|
|
232
|
+
|
|
233
|
+
> **모든 문서는 이 README.md를 기준으로 연결되어 있습니다.**
|
|
234
|
+
|
|
235
|
+
### 📖 주요 문서
|
|
236
|
+
|
|
237
|
+
| 문서 | 설명 | 대상 |
|
|
238
|
+
|------|------|------|
|
|
239
|
+
| **[설치 가이드](./docs/INSTALLATION_GUIDE.md)** | 처음 설치하는 방법 | Standard 방식, NPM 방식 설치 가이드 |
|
|
240
|
+
| **[업데이트 가이드](./docs/UPDATE_GUIDE.md)** | 버전 업데이트 방법 | Standard 방식, NPM 방식 업데이트 가이드 |
|
|
241
|
+
| **[사용 가이드](./docs/USAGE_GUIDE.md)** | 컴포넌트 사용 방법 | 컴포넌트 목록, 사용 예시, 권장사항 |
|
|
242
|
+
| **[릴리즈 노트](./RELEASE_NOTES.md)** | 버전별 변경사항 | 모든 버전의 변경 이력 |
|
|
243
|
+
|
|
244
|
+
### 📦 패키지 문서
|
|
245
|
+
|
|
246
|
+
패키지에 포함된 문서들 (원본: `docs/` 디렉토리):
|
|
247
|
+
|
|
248
|
+
- **`packages/v{version}/README.md`**: 패키지 소개 및 설치 방법
|
|
249
|
+
- **`packages/v{version}/USAGE_GUIDE.md`**: 컴포넌트 사용 가이드
|
|
250
|
+
- **`packages/v{version}/UPDATE_GUIDE.md`**: 버전 업데이트 가이드
|
|
251
|
+
|
|
252
|
+
> 💡 **참고**: 패키지 문서는 `docs/` 디렉토리의 원본을 기반으로 패키징 시 자동으로 포함됩니다.
|
|
253
|
+
|
|
254
|
+
### 🗺️ 문서 구조
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
J-Component/
|
|
258
|
+
├── README.md # 메인 문서 (이 파일)
|
|
259
|
+
├── RELEASE_NOTES.md # 릴리즈 노트
|
|
260
|
+
├── docs/ # 문서 원본
|
|
261
|
+
│ ├── INSTALLATION_GUIDE.md # 설치 가이드
|
|
262
|
+
│ ├── UPDATE_GUIDE.md # 업데이트 가이드
|
|
263
|
+
│ └── USAGE_GUIDE.md # 사용 가이드
|
|
264
|
+
└── packages/ # 배포 패키지
|
|
265
|
+
└── v{version}/
|
|
266
|
+
├── README.md # (docs에서 복사)
|
|
267
|
+
├── USAGE_GUIDE.md # (docs에서 복사)
|
|
268
|
+
└── UPDATE_GUIDE.md # (docs에서 복사)
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 📦 컴포넌트 패키징 및 배포
|
|
274
|
+
|
|
275
|
+
> **⚠️ 중요**: 패키지를 생성하거나 버전을 업데이트하기 전에 **반드시** 다음 문서를 참조하세요:
|
|
276
|
+
> - **상세 가이드**: [`jwms-portal-frontend/PACKAGING.md`](./jwms-portal-frontend/PACKAGING.md)
|
|
277
|
+
> - **빠른 참조**: [`PACKAGING_GUIDE.md`](./PACKAGING_GUIDE.md)
|
|
278
|
+
|
|
279
|
+
J-Component는 **두 가지 배포 방식**을 지원합니다:
|
|
280
|
+
|
|
281
|
+
### 🚀 통합 패키징 (권장)
|
|
282
|
+
|
|
283
|
+
**하나의 명령어로 두 가지 방식 모두 생성:**
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
cd jwms-portal-frontend
|
|
287
|
+
npm run package
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
이 명령어는 다음을 자동으로 실행합니다:
|
|
291
|
+
1. **Standard 방식**: `packages/v{version}/` 디렉토리에 파일 복사 방식 패키지 생성
|
|
292
|
+
2. **NPM 방식**: `dist/npm/` 디렉토리에 npm 패키지 생성
|
|
293
|
+
|
|
294
|
+
### 1) Standard 방식 (파일 복사)
|
|
295
|
+
|
|
296
|
+
- **출력 위치**: `packages/v{version}/`
|
|
297
|
+
- **사용 방법**: 타겟 프로젝트에 파일을 직접 복사하여 사용
|
|
298
|
+
- **특징**:
|
|
299
|
+
- 기존 프로젝트 구조와 동일
|
|
300
|
+
- Git에 커밋 가능 (버전별 스냅샷)
|
|
301
|
+
- `packages/latest/standard/`에 최신 버전 포인터 제공
|
|
302
|
+
|
|
303
|
+
### 2) NPM 방식 (npm 패키지)
|
|
304
|
+
|
|
305
|
+
- **출력 위치**: `dist/npm/`
|
|
306
|
+
- **사용 방법**:
|
|
307
|
+
- 로컬 테스트: `npm install file:../path/to/dist/npm`
|
|
308
|
+
- npm 레지스트리: `npm install @j-solution/components` (배포 후)
|
|
309
|
+
- **특징**:
|
|
310
|
+
- ES Module + CommonJS + TypeScript 타입 정의 포함
|
|
311
|
+
- 가상 모듈 자동 인라인 처리
|
|
312
|
+
- `dist` 디렉토리는 `.gitignore`에 포함 (빌드 시 자동 생성)
|
|
313
|
+
|
|
314
|
+
#### NPM 패키지 배포
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
# 로컬에서 빌드 및 배포
|
|
318
|
+
cd jwms-portal-frontend/dist/npm
|
|
319
|
+
npm publish --access public
|
|
320
|
+
# 또는
|
|
321
|
+
pnpm publish --access public
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
#### 자동 배포 (GitHub Actions)
|
|
325
|
+
- GitHub에서 Release를 생성하면 자동으로 npm 레지스트리에 배포
|
|
326
|
+
- `.github/workflows/publish-npm.yml` 워크플로우 자동 실행
|
|
327
|
+
- `NPM_TOKEN` 시크릿 필요
|
|
328
|
+
|
|
329
|
+
### ⚠️ 중요 사항
|
|
330
|
+
|
|
331
|
+
- **v1.0.0부터 namespaced 방식 지원 중단**
|
|
332
|
+
- 기존: standard, namespaced, npm (3가지)
|
|
333
|
+
- 현재: standard, npm (2가지)
|
|
334
|
+
- namespaced 방식은 npm 방식으로 대체됨
|
|
335
|
+
|
|
336
|
+
### 개별 패키징
|
|
337
|
+
|
|
338
|
+
필요한 경우 개별로 실행할 수 있습니다:
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
# Standard 방식만
|
|
342
|
+
npm run package:standard
|
|
343
|
+
|
|
344
|
+
# NPM 방식만
|
|
345
|
+
npm run package:npm
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
자세한 내용: [PACKAGING.md](./jwms-portal-frontend/PACKAGING.md)
|
|
349
|
+
|
|
350
|
+
> 💡 **설치 및 업데이트 방법**: [설치 가이드](./docs/INSTALLATION_GUIDE.md) 및 [업데이트 가이드](./docs/UPDATE_GUIDE.md)를 참고하세요.
|
|
351
|
+
|
|
352
|
+
### 패키지 다운로드
|
|
353
|
+
|
|
354
|
+
패키지 폴더만 다운로드하는 방법 (전체 리포지토리 클론 불필요):
|
|
355
|
+
|
|
356
|
+
**⭐ 추천: Git Sparse Checkout** (패키지 폴더만 다운로드):
|
|
357
|
+
```bash
|
|
358
|
+
# Public 리포지토리
|
|
359
|
+
git clone --depth 1 --filter=blob:none --sparse <repository-url>
|
|
360
|
+
cd J-Component
|
|
361
|
+
git sparse-checkout set packages/v1.0.0
|
|
362
|
+
# 또는 packages/latest/standard
|
|
363
|
+
|
|
364
|
+
# Private 리포지토리 (인증 필요)
|
|
365
|
+
git clone --depth 1 --filter=blob:none --sparse git@github.com:<username>/<repository>.git
|
|
366
|
+
cd J-Component
|
|
367
|
+
git sparse-checkout set packages/v1.0.0
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**다른 방법들**:
|
|
371
|
+
- GitHub 웹 인터페이스에서 특정 디렉토리 ZIP 다운로드
|
|
372
|
+
- GitHub API 사용
|
|
373
|
+
- Git Submodule 사용
|
|
374
|
+
|
|
375
|
+
> **📝 참고**: 각 패키지의 `README.md`에 상세한 다운로드 방법이 안내되어 있습니다.
|
|
376
|
+
|
|
377
|
+
## 🔧 개발 가이드
|
|
378
|
+
|
|
379
|
+
### 컴포넌트 작성 규칙
|
|
380
|
+
|
|
381
|
+
1. **Atomic Design 패턴** 준수
|
|
382
|
+
2. **TypeScript** 타입 정의 필수
|
|
383
|
+
3. **Props** 인터페이스 정의
|
|
384
|
+
4. **Storybook** 스토리 작성
|
|
385
|
+
5. **Tailwind CSS** 스타일링
|
|
386
|
+
|
|
387
|
+
### 컴포넌트 템플릿
|
|
388
|
+
|
|
389
|
+
```vue
|
|
390
|
+
<template>
|
|
391
|
+
<div class="j-component">
|
|
392
|
+
<!-- 컴포넌트 내용 -->
|
|
393
|
+
</div>
|
|
394
|
+
</template>
|
|
395
|
+
|
|
396
|
+
<script setup lang="ts">
|
|
397
|
+
interface Props {
|
|
398
|
+
variant?: 'primary' | 'secondary'
|
|
399
|
+
size?: 'sm' | 'md' | 'lg'
|
|
400
|
+
disabled?: boolean
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
interface Emits {
|
|
404
|
+
(e: 'click', value: string): void
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
408
|
+
variant: 'primary',
|
|
409
|
+
size: 'md',
|
|
410
|
+
disabled: false
|
|
411
|
+
})
|
|
412
|
+
|
|
413
|
+
const emit = defineEmits<Emits>()
|
|
414
|
+
</script>
|
|
415
|
+
```
|