@j-solution/components 1.6.0 → 1.7.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.
Files changed (197) hide show
  1. package/README.md +8 -7
  2. package/assets/jwms-portal-frontend-CwxPfHfa.css +1 -0
  3. package/assets/styles/j-components.css +1 -1
  4. package/assets/styles/themes.css +107 -0
  5. package/components/atoms/JAvatar.vue.cjs +1 -1
  6. package/components/atoms/JAvatar.vue.cjs.map +1 -1
  7. package/components/atoms/JAvatar.vue.js +10 -7
  8. package/components/atoms/JAvatar.vue.js.map +1 -1
  9. package/components/atoms/JBadge.vue.cjs +1 -1
  10. package/components/atoms/JBadge.vue.cjs.map +1 -1
  11. package/components/atoms/JBadge.vue.js +7 -6
  12. package/components/atoms/JBadge.vue.js.map +1 -1
  13. package/components/atoms/JButton.vue.cjs +1 -1
  14. package/components/atoms/JButton.vue.cjs.map +1 -1
  15. package/components/atoms/JButton.vue.js +5 -5
  16. package/components/atoms/JButton.vue.js.map +1 -1
  17. package/components/atoms/JDatepicker.vue.cjs +1 -1
  18. package/components/atoms/JDatepicker.vue.cjs.map +1 -1
  19. package/components/atoms/JDatepicker.vue.js +10 -10
  20. package/components/atoms/JDatepicker.vue.js.map +1 -1
  21. package/components/atoms/JEditor.vue.cjs +1 -1
  22. package/components/atoms/JEditor.vue.js +1 -1
  23. package/components/atoms/JEditor.vue2.cjs +1 -1
  24. package/components/atoms/JEditor.vue2.cjs.map +1 -1
  25. package/components/atoms/JEditor.vue2.js +31 -17
  26. package/components/atoms/JEditor.vue2.js.map +1 -1
  27. package/components/atoms/JGrid.vue.cjs +1 -1
  28. package/components/atoms/JGrid.vue.js +2 -2
  29. package/components/atoms/JGrid.vue2.cjs +1 -1
  30. package/components/atoms/JGrid.vue2.cjs.map +1 -1
  31. package/components/atoms/JGrid.vue2.js +45 -33
  32. package/components/atoms/JGrid.vue2.js.map +1 -1
  33. package/components/atoms/JIcon.vue.cjs +1 -1
  34. package/components/atoms/JIcon.vue.cjs.map +1 -1
  35. package/components/atoms/JIcon.vue.js +14 -13
  36. package/components/atoms/JIcon.vue.js.map +1 -1
  37. package/components/atoms/JKbd.vue.cjs +1 -1
  38. package/components/atoms/JKbd.vue.cjs.map +1 -1
  39. package/components/atoms/JKbd.vue.js +13 -10
  40. package/components/atoms/JKbd.vue.js.map +1 -1
  41. package/components/atoms/JLabel.vue.cjs +1 -1
  42. package/components/atoms/JLabel.vue.cjs.map +1 -1
  43. package/components/atoms/JLabel.vue.js +4 -4
  44. package/components/atoms/JLabel.vue.js.map +1 -1
  45. package/components/atoms/JLink.vue.cjs +1 -1
  46. package/components/atoms/JLink.vue.cjs.map +1 -1
  47. package/components/atoms/JLink.vue.js +5 -5
  48. package/components/atoms/JLink.vue.js.map +1 -1
  49. package/components/atoms/JPreview.vue.cjs +1 -1
  50. package/components/atoms/JPreview.vue.js +2 -2
  51. package/components/atoms/JPreview.vue2.cjs +1 -1
  52. package/components/atoms/JPreview.vue2.cjs.map +1 -1
  53. package/components/atoms/JPreview.vue2.js +33 -20
  54. package/components/atoms/JPreview.vue2.js.map +1 -1
  55. package/components/atoms/JProgress.vue.cjs +1 -1
  56. package/components/atoms/JProgress.vue.cjs.map +1 -1
  57. package/components/atoms/JProgress.vue.js +15 -9
  58. package/components/atoms/JProgress.vue.js.map +1 -1
  59. package/components/atoms/JRadio.vue.cjs +1 -1
  60. package/components/atoms/JRadio.vue.cjs.map +1 -1
  61. package/components/atoms/JRadio.vue.js +1 -1
  62. package/components/atoms/JRadio.vue.js.map +1 -1
  63. package/components/atoms/JSearchCombo.vue.cjs +1 -1
  64. package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
  65. package/components/atoms/JSearchCombo.vue.js +38 -37
  66. package/components/atoms/JSearchCombo.vue.js.map +1 -1
  67. package/components/atoms/JSpinner.vue.cjs +1 -1
  68. package/components/atoms/JSpinner.vue.cjs.map +1 -1
  69. package/components/atoms/JSpinner.vue.js +8 -7
  70. package/components/atoms/JSpinner.vue.js.map +1 -1
  71. package/components/atoms/JSplitter.vue.cjs +1 -1
  72. package/components/atoms/JSplitter.vue.cjs.map +1 -1
  73. package/components/atoms/JSplitter.vue.js +32 -27
  74. package/components/atoms/JSplitter.vue.js.map +1 -1
  75. package/components/atoms/JTooltip.vue.cjs +1 -1
  76. package/components/atoms/JTooltip.vue.cjs.map +1 -1
  77. package/components/atoms/JTooltip.vue.js +18 -15
  78. package/components/atoms/JTooltip.vue.js.map +1 -1
  79. package/components/examples/ExampleCrudPage.vue.cjs +2 -0
  80. package/components/examples/ExampleCrudPage.vue.cjs.map +1 -0
  81. package/components/examples/ExampleCrudPage.vue.js +358 -0
  82. package/components/examples/ExampleCrudPage.vue.js.map +1 -0
  83. package/components/examples/ExampleCrudPage.vue2.cjs +2 -0
  84. package/components/examples/ExampleCrudPage.vue2.cjs.map +1 -0
  85. package/components/examples/ExampleCrudPage.vue2.js +5 -0
  86. package/components/examples/ExampleCrudPage.vue2.js.map +1 -0
  87. package/components/examples/ExampleTabMappingPage.vue.cjs +2 -0
  88. package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -0
  89. package/components/examples/ExampleTabMappingPage.vue.js +522 -0
  90. package/components/examples/ExampleTabMappingPage.vue.js.map +1 -0
  91. package/components/examples/ExampleTabMappingPage.vue2.cjs +2 -0
  92. package/components/examples/ExampleTabMappingPage.vue2.cjs.map +1 -0
  93. package/components/examples/ExampleTabMappingPage.vue2.js +5 -0
  94. package/components/examples/ExampleTabMappingPage.vue2.js.map +1 -0
  95. package/components/molecules/JBreadcrumb.vue.cjs +1 -1
  96. package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
  97. package/components/molecules/JBreadcrumb.vue.js +3 -3
  98. package/components/molecules/JBreadcrumb.vue.js.map +1 -1
  99. package/components/molecules/JFormField.vue.cjs +1 -1
  100. package/components/molecules/JFormField.vue.cjs.map +1 -1
  101. package/components/molecules/JFormField.vue.js +26 -24
  102. package/components/molecules/JFormField.vue.js.map +1 -1
  103. package/components/molecules/JTabs.vue.cjs +1 -1
  104. package/components/molecules/JTabs.vue.js +1 -1
  105. package/components/molecules/JTabs.vue2.cjs +1 -1
  106. package/components/molecules/JTabs.vue2.cjs.map +1 -1
  107. package/components/molecules/JTabs.vue2.js +7 -7
  108. package/components/molecules/JTabs.vue2.js.map +1 -1
  109. package/components/molecules/JTitlebar.vue.cjs +1 -1
  110. package/components/molecules/JTitlebar.vue.cjs.map +1 -1
  111. package/components/molecules/JTitlebar.vue.js +35 -36
  112. package/components/molecules/JTitlebar.vue.js.map +1 -1
  113. package/components/organisms/JFilterBar.vue.cjs +1 -1
  114. package/components/organisms/JFilterBar.vue.cjs.map +1 -1
  115. package/components/organisms/JFilterBar.vue.js +5 -5
  116. package/components/organisms/JFilterBar.vue.js.map +1 -1
  117. package/components/organisms/JHeader.vue.cjs +1 -1
  118. package/components/organisms/JHeader.vue.cjs.map +1 -1
  119. package/components/organisms/JHeader.vue.js +25 -23
  120. package/components/organisms/JHeader.vue.js.map +1 -1
  121. package/components/organisms/JModal.vue.cjs +1 -1
  122. package/components/organisms/JModal.vue.cjs.map +1 -1
  123. package/components/organisms/JModal.vue.js +30 -27
  124. package/components/organisms/JModal.vue.js.map +1 -1
  125. package/components/organisms/JSidebarAdvanced.vue.cjs +1 -1
  126. package/components/organisms/JSidebarAdvanced.vue.js +7 -7
  127. package/components/organisms/JSidebarAdvanced.vue2.cjs +1 -1
  128. package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
  129. package/components/organisms/JSidebarAdvanced.vue2.js +40 -40
  130. package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
  131. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +1 -1
  132. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -1
  133. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +83 -63
  134. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js.map +1 -1
  135. package/components/organisms/JSidebarSimple.vue.cjs +1 -1
  136. package/components/organisms/JSidebarSimple.vue.js +2 -2
  137. package/components/organisms/JSidebarSimple.vue2.cjs +1 -1
  138. package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
  139. package/components/organisms/JSidebarSimple.vue2.js +2 -2
  140. package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
  141. package/components/shadcn/AccordionTrigger.vue.cjs +1 -1
  142. package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
  143. package/components/shadcn/AccordionTrigger.vue.js +3 -3
  144. package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
  145. package/components/shadcn/CardContent.vue.cjs +1 -1
  146. package/components/shadcn/CardContent.vue.cjs.map +1 -1
  147. package/components/shadcn/CardContent.vue.js +1 -1
  148. package/components/shadcn/CardContent.vue.js.map +1 -1
  149. package/components/shadcn/CardDescription.vue.cjs +1 -1
  150. package/components/shadcn/CardDescription.vue.cjs.map +1 -1
  151. package/components/shadcn/CardDescription.vue.js +1 -1
  152. package/components/shadcn/CardDescription.vue.js.map +1 -1
  153. package/components/shadcn/CardFooter.vue.cjs +1 -1
  154. package/components/shadcn/CardFooter.vue.cjs.map +1 -1
  155. package/components/shadcn/CardFooter.vue.js +7 -7
  156. package/components/shadcn/CardFooter.vue.js.map +1 -1
  157. package/components/shadcn/CardHeader.vue.cjs +1 -1
  158. package/components/shadcn/CardHeader.vue.cjs.map +1 -1
  159. package/components/shadcn/CardHeader.vue.js +8 -8
  160. package/components/shadcn/CardHeader.vue.js.map +1 -1
  161. package/components/shadcn/CardTitle.vue.cjs +1 -1
  162. package/components/shadcn/CardTitle.vue.cjs.map +1 -1
  163. package/components/shadcn/CardTitle.vue.js +5 -5
  164. package/components/shadcn/CardTitle.vue.js.map +1 -1
  165. package/components/shadcn/Input.vue.cjs +1 -1
  166. package/components/shadcn/Input.vue.cjs.map +1 -1
  167. package/components/shadcn/Input.vue.js +1 -1
  168. package/components/shadcn/Input.vue.js.map +1 -1
  169. package/components/shadcn/SelectTrigger.vue.cjs +1 -1
  170. package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
  171. package/components/shadcn/SelectTrigger.vue.js +2 -2
  172. package/components/shadcn/SelectTrigger.vue.js.map +1 -1
  173. package/components/shadcn/Switch.vue.cjs +1 -1
  174. package/components/shadcn/Switch.vue.cjs.map +1 -1
  175. package/components/shadcn/Switch.vue.js +2 -2
  176. package/components/shadcn/Switch.vue.js.map +1 -1
  177. package/components/shadcn/TabsList.vue.cjs +1 -1
  178. package/components/shadcn/TabsList.vue.cjs.map +1 -1
  179. package/components/shadcn/TabsList.vue.js +1 -1
  180. package/components/shadcn/TabsList.vue.js.map +1 -1
  181. package/components/shadcn/TabsTrigger.vue.cjs +1 -1
  182. package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
  183. package/components/shadcn/TabsTrigger.vue.js +4 -4
  184. package/components/shadcn/TabsTrigger.vue.js.map +1 -1
  185. package/components/shadcn/Textarea.vue.cjs +1 -1
  186. package/components/shadcn/Textarea.vue.cjs.map +1 -1
  187. package/components/shadcn/Textarea.vue.js +2 -2
  188. package/components/shadcn/Textarea.vue.js.map +1 -1
  189. package/components/shadcn/index.cjs +1 -1
  190. package/components/shadcn/index.cjs.map +1 -1
  191. package/components/shadcn/index.js +8 -7
  192. package/components/shadcn/index.js.map +1 -1
  193. package/index.cjs +1 -1
  194. package/index.js +76 -72
  195. package/package.json +1 -1
  196. package/types/index.d.ts +742 -15
  197. package/assets/jwms-portal-frontend-DntSIcYt.css +0 -1
@@ -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 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 /** 간소화된 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=\"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\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</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,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:"md"},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={sm:16,md:24,lg:32,xl:40},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;
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":"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"}
@@ -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 A, Funnel as B, Flag as x, 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 Ae, Users as Be, Monitor as xe, 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 Ar, User as Br, House as s } from "lucide-vue-next";
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: "md" },
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: Br,
18
- settings: Ar,
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: xe,
73
- users: Be,
74
- code: Ae,
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: x,
136
- funnel: B,
135
+ flag: B,
136
+ funnel: A,
137
137
  // 조직/팀 관련 아이콘들
138
- building: A,
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: 24,
154
- lg: 32,
155
- xl: 40
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"),n=require("../shadcn/Kbd.vue.cjs"),u=e.defineComponent({__name:"JKbd",props:{class:{},styletype:{default:"default"},size:{default:"md"}},setup(a){const s=a,l={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={sm:{class:"h-4 px-1 text-xs"},md:{class:"h-5 px-1.5 text-sm"},lg:{class:"h-6 px-2 text-base"}},o=e.computed(()=>{const t=l[s.styletype],r=c[s.size];return{class:[t.class,r.class,s.class].filter(Boolean).join(" ")}});return(t,r)=>(e.openBlock(),e.createBlock(n.default,e.normalizeProps(e.guardReactiveProps(o.value)),{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},16))}});exports.default=u;
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
@@ -1 +1 @@
1
- {"version":3,"file":"JKbd.vue.cjs","sources":["../../../../src/components/atoms/JKbd.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Kbd from '@/components/shadcn/Kbd.vue'\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'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 키보드 키 크기 */\r\n size?: SizeType\r\n }>(),\r\n {\r\n styletype: 'default',\r\n size: 'md',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: 'bg-blue-100 text-blue-800 border-blue-200',\r\n },\r\n success: { \r\n class: 'bg-green-100 text-green-800 border-green-200',\r\n },\r\n warning: { \r\n class: 'bg-amber-100 text-amber-800 border-amber-200',\r\n },\r\n danger: { \r\n class: 'bg-red-100 text-red-800 border-red-200',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\r\n sm: { \r\n class: 'h-4 px-1 text-xs',\r\n },\r\n md: { \r\n class: 'h-5 px-1.5 text-sm',\r\n },\r\n lg: { \r\n class: 'h-6 px-2 text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype과 size를 병합하여 최종 클래스 생성 */\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, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Kbd v-bind=\"mapped\">\r\n <slot />\r\n </Kbd>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","stylePreset","sizePreset","_openBlock","_createBlock","Kbd","_renderSlot","_ctx"],"mappings":"qRAaA,MAAMA,EAAQC,EAiBRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,QAAS,CACP,MAAO,2CAAA,EAET,QAAS,CACP,MAAO,8CAAA,EAET,QAAS,CACP,MAAO,8CAAA,EAET,OAAQ,CACN,MAAO,wCAAA,CACT,EAMIC,EAAoD,CACxD,GAAI,CACF,MAAO,kBAAA,EAET,GAAI,CACF,MAAO,oBAAA,EAET,GAAI,CACF,MAAO,oBAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAcJ,EAAcF,EAAM,SAAU,EAC5CO,EAAaJ,EAAaH,EAAM,IAAK,EAG3C,MAAO,CACL,MAHiB,CAACM,EAAY,MAAOC,EAAW,MAAOP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAGrF,CAEX,CAAC,gBAICQ,EAAAA,UAAA,EAAAC,EAAAA,YAEMC,EAAAA,8CAFON,EAAA,KAAM,CAAA,EAAA,mBACjB,IAAQ,CAARO,aAAQC,EAAA,OAAA,SAAA,CAAA"}
1
+ {"version":3,"file":"JKbd.vue.cjs","sources":["../../../../src/components/atoms/JKbd.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Kbd from '@/components/shadcn/Kbd.vue'\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'\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 키보드 키 크기 */\r\n size?: SizeType\r\n }>(),\r\n {\n styletype: 'default',\n size: 'sm',\n },\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: 'bg-blue-100 text-blue-800 border-blue-200',\r\n },\r\n success: { \r\n class: 'bg-green-100 text-green-800 border-green-200',\r\n },\r\n warning: { \r\n class: 'bg-amber-100 text-amber-800 border-amber-200',\r\n },\r\n danger: { \r\n class: 'bg-red-100 text-red-800 border-red-200',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\n xs: { \n class: 'h-3.5 px-0.5 text-[10px] min-w-[14px]',\n },\n sm: { \n class: 'h-4 px-1 text-xs min-w-[16px]',\n },\n md: { \n class: 'h-5 px-1.5 text-xs',\n },\n lg: { \n class: 'h-6 px-2 text-sm',\n },\n}\n\r\n/** 최종 바인딩: styletype과 size를 병합하여 최종 클래스 생성 */\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, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Kbd v-bind=\"mapped\">\r\n <slot />\r\n </Kbd>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","stylePreset","sizePreset","_openBlock","_createBlock","Kbd","_renderSlot","_ctx"],"mappings":"qRAaA,MAAMA,EAAQC,EAiBRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,QAAS,CACP,MAAO,2CAAA,EAET,QAAS,CACP,MAAO,8CAAA,EAET,QAAS,CACP,MAAO,8CAAA,EAET,OAAQ,CACN,MAAO,wCAAA,CACT,EAMIC,EAAoD,CACxD,GAAI,CACF,MAAO,uCAAA,EAET,GAAI,CACF,MAAO,+BAAA,EAET,GAAI,CACF,MAAO,oBAAA,EAET,GAAI,CACF,MAAO,kBAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAcJ,EAAcF,EAAM,SAAU,EAC5CO,EAAaJ,EAAaH,EAAM,IAAK,EAG3C,MAAO,CACL,MAHiB,CAACM,EAAY,MAAOC,EAAW,MAAOP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAGrF,CAEX,CAAC,gBAICQ,EAAAA,UAAA,EAAAC,EAAAA,YAEMC,EAAAA,8CAFON,EAAA,KAAM,CAAA,EAAA,mBACjB,IAAQ,CAARO,aAAQC,EAAA,OAAA,SAAA,CAAA"}
@@ -1,11 +1,11 @@
1
- import { defineComponent as c, computed as n, createBlock as d, openBlock as p, normalizeProps as m, guardReactiveProps as u, withCtx as i, renderSlot as b } from "vue";
2
- import f from "../shadcn/Kbd.vue.js";
3
- const S = /* @__PURE__ */ c({
1
+ import { defineComponent as o, computed as n, createBlock as p, openBlock as d, normalizeProps as m, guardReactiveProps as x, withCtx as i, renderSlot as u } from "vue";
2
+ import b from "../shadcn/Kbd.vue.js";
3
+ const S = /* @__PURE__ */ o({
4
4
  __name: "JKbd",
5
5
  props: {
6
6
  class: {},
7
7
  styletype: { default: "default" },
8
- size: { default: "md" }
8
+ size: { default: "sm" }
9
9
  },
10
10
  setup(r) {
11
11
  const e = r, a = {
@@ -23,24 +23,27 @@ const S = /* @__PURE__ */ c({
23
23
  class: "bg-red-100 text-red-800 border-red-200"
24
24
  }
25
25
  }, l = {
26
+ xs: {
27
+ class: "h-3.5 px-0.5 text-[10px] min-w-[14px]"
28
+ },
26
29
  sm: {
27
- class: "h-4 px-1 text-xs"
30
+ class: "h-4 px-1 text-xs min-w-[16px]"
28
31
  },
29
32
  md: {
30
- class: "h-5 px-1.5 text-sm"
33
+ class: "h-5 px-1.5 text-xs"
31
34
  },
32
35
  lg: {
33
- class: "h-6 px-2 text-base"
36
+ class: "h-6 px-2 text-sm"
34
37
  }
35
- }, o = n(() => {
38
+ }, c = n(() => {
36
39
  const s = a[e.styletype], t = l[e.size];
37
40
  return {
38
41
  class: [s.class, t.class, e.class].filter(Boolean).join(" ")
39
42
  };
40
43
  });
41
- return (s, t) => (p(), d(f, m(u(o.value)), {
44
+ return (s, t) => (d(), p(b, m(x(c.value)), {
42
45
  default: i(() => [
43
- b(s.$slots, "default")
46
+ u(s.$slots, "default")
44
47
  ]),
45
48
  _: 3
46
49
  }, 16));
@@ -1 +1 @@
1
- {"version":3,"file":"JKbd.vue.js","sources":["../../../../src/components/atoms/JKbd.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Kbd from '@/components/shadcn/Kbd.vue'\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'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 키보드 키 크기 */\r\n size?: SizeType\r\n }>(),\r\n {\r\n styletype: 'default',\r\n size: 'md',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: 'bg-blue-100 text-blue-800 border-blue-200',\r\n },\r\n success: { \r\n class: 'bg-green-100 text-green-800 border-green-200',\r\n },\r\n warning: { \r\n class: 'bg-amber-100 text-amber-800 border-amber-200',\r\n },\r\n danger: { \r\n class: 'bg-red-100 text-red-800 border-red-200',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\r\n sm: { \r\n class: 'h-4 px-1 text-xs',\r\n },\r\n md: { \r\n class: 'h-5 px-1.5 text-sm',\r\n },\r\n lg: { \r\n class: 'h-6 px-2 text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype과 size를 병합하여 최종 클래스 생성 */\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, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Kbd v-bind=\"mapped\">\r\n <slot />\r\n </Kbd>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","stylePreset","sizePreset","_openBlock","_createBlock","Kbd","_renderSlot","_ctx"],"mappings":";;;;;;;;;;AAaA,UAAMA,IAAQC,GAiBRC,IAAsD;AAAA,MAC1D,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAoD;AAAA,MACxD,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,IACT,GAIIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAcJ,EAAcF,EAAM,SAAU,GAC5CO,IAAaJ,EAAaH,EAAM,IAAK;AAG3C,aAAO;AAAA,QACL,OAHiB,CAACM,EAAY,OAAOC,EAAW,OAAOP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAGrF;AAAA,IAEX,CAAC;sBAICQ,EAAA,GAAAC,EAEMC,OAFON,EAAA,KAAM,CAAA,GAAA;AAAA,iBACjB,MAAQ;AAAA,QAARO,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
1
+ {"version":3,"file":"JKbd.vue.js","sources":["../../../../src/components/atoms/JKbd.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Kbd from '@/components/shadcn/Kbd.vue'\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'\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 키보드 키 크기 */\r\n size?: SizeType\r\n }>(),\r\n {\n styletype: 'default',\n size: 'sm',\n },\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: 'bg-blue-100 text-blue-800 border-blue-200',\r\n },\r\n success: { \r\n class: 'bg-green-100 text-green-800 border-green-200',\r\n },\r\n warning: { \r\n class: 'bg-amber-100 text-amber-800 border-amber-200',\r\n },\r\n danger: { \r\n class: 'bg-red-100 text-red-800 border-red-200',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\n xs: { \n class: 'h-3.5 px-0.5 text-[10px] min-w-[14px]',\n },\n sm: { \n class: 'h-4 px-1 text-xs min-w-[16px]',\n },\n md: { \n class: 'h-5 px-1.5 text-xs',\n },\n lg: { \n class: 'h-6 px-2 text-sm',\n },\n}\n\r\n/** 최종 바인딩: styletype과 size를 병합하여 최종 클래스 생성 */\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, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Kbd v-bind=\"mapped\">\r\n <slot />\r\n </Kbd>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","stylePreset","sizePreset","_openBlock","_createBlock","Kbd","_renderSlot","_ctx"],"mappings":";;;;;;;;;;AAaA,UAAMA,IAAQC,GAiBRC,IAAsD;AAAA,MAC1D,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAoD;AAAA,MACxD,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,IACT,GAIIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAcJ,EAAcF,EAAM,SAAU,GAC5CO,IAAaJ,EAAaH,EAAM,IAAK;AAG3C,aAAO;AAAA,QACL,OAHiB,CAACM,EAAY,OAAOC,EAAW,OAAOP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAGrF;AAAA,IAEX,CAAC;sBAICQ,EAAA,GAAAC,EAEMC,OAFON,EAAA,KAAM,CAAA,GAAA;AAAA,iBACjB,MAAQ;AAAA,QAARO,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const u=require("../shadcn/Label.vue.cjs"),n={key:0,class:"text-red-500 mr-1"},d={key:1,class:"text-red-500 mr-1"},i=e.defineComponent({__name:"JLabel",props:{text:{default:""},required:{type:Boolean,default:!1},styletype:{default:"default"},for:{}},setup(t){const s=t,l={default:{class:""},required:{class:"text-red-600"},optional:{class:"text-gray-500"},error:{class:"text-red-600"},success:{class:"text-green-600"},warning:{class:"text-amber-600"},sm:{class:"text-xs"},lg:{class:"text-base"}},a=e.computed(()=>{const r=s.styletype||"default",o=l[r]??l.default;return{for:s.for,class:o?.class||""}}),c=e.computed(()=>s.text?s.text:"");return(r,o)=>(e.openBlock(),e.createBlock(e.unref(u.default),e.mergeProps(a.value,{class:["text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",a.value.class]}),{default:e.withCtx(()=>[t.required&&t.styletype==="required"?(e.openBlock(),e.createElementBlock("span",n,"*")):t.required?(e.openBlock(),e.createElementBlock("span",d,"*")):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(c.value)+" ",1),e.renderSlot(r.$slots,"default")]),_:3},16,["class"]))}});exports.default=i;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const u=require("../shadcn/Label.vue.cjs"),n={key:0,class:"text-red-500 mr-1"},d={key:1,class:"text-red-500 mr-1"},i=e.defineComponent({__name:"JLabel",props:{text:{default:""},required:{type:Boolean,default:!1},styletype:{default:"default"},for:{}},setup(t){const s=t,l={default:{class:""},required:{class:"text-red-600"},optional:{class:"text-gray-500"},error:{class:"text-red-600"},success:{class:"text-green-600"},warning:{class:"text-amber-600"},sm:{class:"text-xs"},lg:{class:"text-base"}},a=e.computed(()=>{const r=s.styletype||"default",o=l[r]??l.default;return{for:s.for,class:o?.class||""}}),c=e.computed(()=>s.text?s.text:"");return(r,o)=>(e.openBlock(),e.createBlock(e.unref(u.default),e.mergeProps(a.value,{class:["text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",a.value.class]}),{default:e.withCtx(()=>[t.required&&t.styletype==="required"?(e.openBlock(),e.createElementBlock("span",n,"*")):t.required?(e.openBlock(),e.createElementBlock("span",d,"*")):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(c.value)+" ",1),e.renderSlot(r.$slots,"default")]),_:3},16,["class"]))}});exports.default=i;
2
2
  //# sourceMappingURL=JLabel.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JLabel.vue.cjs","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Label } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'required' // 필수 필드 표시 (빨간 별표)\r\n | 'optional' // 선택 필드 표시 (회색 텍스트)\r\n | 'error' // 에러 상태 (빨간 텍스트)\r\n | 'success' // 성공 상태 (초록 텍스트)\r\n | 'warning' // 경고 상태 (주황 텍스트)\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 라벨 텍스트 */\r\n text?: string\r\n /** 필수 필드 여부 */\r\n required?: boolean\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** HTML for 속성 (연결할 input의 id) */\r\n for?: string\r\n }>(),\r\n {\r\n text: '',\r\n required: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n required: { \r\n class: 'text-red-600',\r\n },\r\n optional: { \r\n class: 'text-gray-500',\r\n },\r\n error: { \r\n class: 'text-red-600',\r\n },\r\n success: { \r\n class: 'text-green-600',\r\n },\r\n warning: { \r\n class: 'text-amber-600',\r\n },\r\n sm: { \r\n class: 'text-xs',\r\n },\r\n lg: { \r\n class: 'text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\r\nconst mapped = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n \r\n return {\r\n for: props.for,\r\n class: preset?.class || '',\r\n }\r\n})\r\n\r\nconst displayText = computed(() => {\r\n if (props.text) {\r\n return props.text\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\r\n <Label \r\n v-bind=\"mapped\"\r\n :class=\"[\r\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\r\n mapped.class\r\n ]\"\r\n >\r\n <span v-if=\"required && styletype === 'required'\" class=\"text-red-500 mr-1\">*</span>\r\n <span v-else-if=\"required\" class=\"text-red-500 mr-1\">*</span>\r\n {{ displayText }}\r\n <slot />\r\n </Label>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","displayText","_createBlock","_unref","Label","_mergeProps","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_renderSlot","_ctx"],"mappings":"qaAeA,MAAMA,EAAQC,EAqBRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,SAAU,CACR,MAAO,cAAA,EAET,SAAU,CACR,MAAO,eAAA,EAET,MAAO,CACL,MAAO,cAAA,EAET,QAAS,CACP,MAAO,gBAAA,EAET,QAAS,CACP,MAAO,gBAAA,EAET,GAAI,CACF,MAAO,SAAA,EAET,GAAI,CACF,MAAO,WAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWL,EAAM,WAAa,UAC9BM,EAASJ,EAAcG,CAAQ,GAAKH,EAAc,QAExD,MAAO,CACL,IAAKF,EAAM,IACX,MAAOM,GAAQ,OAAS,EAAA,CAE5B,CAAC,EAEKC,EAAcH,EAAAA,SAAS,IACvBJ,EAAM,KACDA,EAAM,KAER,EACR,8BAICQ,EAAAA,YAWQC,EAAAA,MAAAC,EAAAA,OAAA,EAXRC,EAAAA,WAWQR,EAAA,MAVQ,CACb,MAAK,8FAAgHA,EAAA,MAAO,KAAA,uBAK7H,IAAoF,CAAxEF,EAAA,UAAYA,EAAA,YAAS,0BAAjCW,EAAAA,mBAAoF,OAApFC,EAA4E,GAAC,GAC5DZ,EAAA,wBAAjBW,EAAAA,mBAA6D,OAA7DE,EAAqD,GAAC,iDAAO,IAC7DC,kBAAGR,EAAA,KAAW,EAAG,IACjB,CAAA,EAAAS,aAAQC,EAAA,OAAA,SAAA,CAAA"}
1
+ {"version":3,"file":"JLabel.vue.cjs","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Label } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'required' // 필수 필드 표시 (빨간 별표)\r\n | 'optional' // 선택 필드 표시 (회색 텍스트)\r\n | 'error' // 에러 상태 (빨간 텍스트)\r\n | 'success' // 성공 상태 (초록 텍스트)\r\n | 'warning' // 경고 상태 (주황 텍스트)\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 라벨 텍스트 */\r\n text?: string\r\n /** 필수 필드 여부 */\r\n required?: boolean\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** HTML for 속성 (연결할 input의 id) */\r\n for?: string\r\n }>(),\r\n {\r\n text: '',\r\n required: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n required: { \r\n class: 'text-red-600',\r\n },\r\n optional: { \r\n class: 'text-gray-500',\r\n },\r\n error: { \r\n class: 'text-red-600',\r\n },\r\n success: { \r\n class: 'text-green-600',\r\n },\r\n warning: { \r\n class: 'text-amber-600',\r\n },\r\n sm: { \r\n class: 'text-xs',\r\n },\r\n lg: { \r\n class: 'text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\r\nconst mapped = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n \r\n return {\r\n for: props.for,\r\n class: preset?.class || '',\r\n }\r\n})\r\n\r\nconst displayText = computed(() => {\r\n if (props.text) {\r\n return props.text\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\n <Label \n v-bind=\"mapped\"\n :class=\"[\n 'text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n mapped.class\n ]\"\n >\n <span v-if=\"required && styletype === 'required'\" class=\"text-red-500 mr-1\">*</span>\n <span v-else-if=\"required\" class=\"text-red-500 mr-1\">*</span>\n {{ displayText }}\n <slot />\n </Label>\n</template>\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","displayText","_createBlock","_unref","Label","_mergeProps","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_renderSlot","_ctx"],"mappings":"qaAeA,MAAMA,EAAQC,EAqBRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,SAAU,CACR,MAAO,cAAA,EAET,SAAU,CACR,MAAO,eAAA,EAET,MAAO,CACL,MAAO,cAAA,EAET,QAAS,CACP,MAAO,gBAAA,EAET,QAAS,CACP,MAAO,gBAAA,EAET,GAAI,CACF,MAAO,SAAA,EAET,GAAI,CACF,MAAO,WAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWL,EAAM,WAAa,UAC9BM,EAASJ,EAAcG,CAAQ,GAAKH,EAAc,QAExD,MAAO,CACL,IAAKF,EAAM,IACX,MAAOM,GAAQ,OAAS,EAAA,CAE5B,CAAC,EAEKC,EAAcH,EAAAA,SAAS,IACvBJ,EAAM,KACDA,EAAM,KAER,EACR,8BAICQ,EAAAA,YAWQC,EAAAA,MAAAC,EAAAA,OAAA,EAXRC,EAAAA,WAWQR,EAAA,MAVQ,CACb,MAAK,8FAA8GA,EAAA,MAAO,KAAA,uBAK3H,IAAoF,CAAxEF,EAAA,UAAYA,EAAA,YAAS,0BAAjCW,EAAAA,mBAAoF,OAApFC,EAA4E,GAAC,GAC5DZ,EAAA,wBAAjBW,EAAAA,mBAA6D,OAA7DE,EAAqD,GAAC,iDAAO,IAC7DC,kBAAGR,EAAA,KAAW,EAAG,IACjB,CAAA,EAAAS,aAAQC,EAAA,OAAA,SAAA,CAAA"}
@@ -1,4 +1,4 @@
1
- import { defineComponent as u, computed as c, createBlock as i, openBlock as r, unref as f, mergeProps as m, withCtx as p, createElementBlock as n, createCommentVNode as x, createTextVNode as y, renderSlot as g, toDisplayString as _ } from "vue";
1
+ import { defineComponent as u, computed as c, createBlock as i, openBlock as r, unref as f, mergeProps as p, withCtx as m, createElementBlock as n, createCommentVNode as x, createTextVNode as y, renderSlot as g, toDisplayString as _ } from "vue";
2
2
  import "../shadcn/index.js";
3
3
  import b from "../shadcn/Label.vue.js";
4
4
  const k = {
@@ -46,13 +46,13 @@ const k = {
46
46
  class: o?.class || ""
47
47
  };
48
48
  }), d = c(() => t.text ? t.text : "");
49
- return (s, o) => (r(), i(f(b), m(l.value, {
49
+ return (s, o) => (r(), i(f(b), p(l.value, {
50
50
  class: [
51
- "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
51
+ "text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
52
52
  l.value.class
53
53
  ]
54
54
  }), {
55
- default: p(() => [
55
+ default: m(() => [
56
56
  e.required && e.styletype === "required" ? (r(), n("span", k, "*")) : e.required ? (r(), n("span", q, "*")) : x("", !0),
57
57
  y(" " + _(d.value) + " ", 1),
58
58
  g(s.$slots, "default")
@@ -1 +1 @@
1
- {"version":3,"file":"JLabel.vue.js","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Label } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'required' // 필수 필드 표시 (빨간 별표)\r\n | 'optional' // 선택 필드 표시 (회색 텍스트)\r\n | 'error' // 에러 상태 (빨간 텍스트)\r\n | 'success' // 성공 상태 (초록 텍스트)\r\n | 'warning' // 경고 상태 (주황 텍스트)\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 라벨 텍스트 */\r\n text?: string\r\n /** 필수 필드 여부 */\r\n required?: boolean\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** HTML for 속성 (연결할 input의 id) */\r\n for?: string\r\n }>(),\r\n {\r\n text: '',\r\n required: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n required: { \r\n class: 'text-red-600',\r\n },\r\n optional: { \r\n class: 'text-gray-500',\r\n },\r\n error: { \r\n class: 'text-red-600',\r\n },\r\n success: { \r\n class: 'text-green-600',\r\n },\r\n warning: { \r\n class: 'text-amber-600',\r\n },\r\n sm: { \r\n class: 'text-xs',\r\n },\r\n lg: { \r\n class: 'text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\r\nconst mapped = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n \r\n return {\r\n for: props.for,\r\n class: preset?.class || '',\r\n }\r\n})\r\n\r\nconst displayText = computed(() => {\r\n if (props.text) {\r\n return props.text\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\r\n <Label \r\n v-bind=\"mapped\"\r\n :class=\"[\r\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\r\n mapped.class\r\n ]\"\r\n >\r\n <span v-if=\"required && styletype === 'required'\" class=\"text-red-500 mr-1\">*</span>\r\n <span v-else-if=\"required\" class=\"text-red-500 mr-1\">*</span>\r\n {{ displayText }}\r\n <slot />\r\n </Label>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","displayText","_createBlock","_unref","Label","_mergeProps","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,UAAMA,IAAQC,GAqBRC,IAAsD;AAAA,MAC1D,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,UAAU;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,MAET,UAAU;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,MAET,OAAO;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,IACT,GAIIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAWL,EAAM,aAAa,WAC9BM,IAASJ,EAAcG,CAAQ,KAAKH,EAAc;AAExD,aAAO;AAAA,QACL,KAAKF,EAAM;AAAA,QACX,OAAOM,GAAQ,SAAS;AAAA,MAAA;AAAA,IAE5B,CAAC,GAEKC,IAAcH,EAAS,MACvBJ,EAAM,OACDA,EAAM,OAER,EACR;2BAICQ,EAWQC,EAAAC,CAAA,GAXRC,EAWQR,EAAA,OAVQ;AAAA,MACb,OAAK;AAAA;QAAgHA,EAAA,MAAO;AAAA,MAAA;AAAA;iBAK7H,MAAoF;AAAA,QAAxEF,EAAA,YAAYA,EAAA,cAAS,mBAAjCW,EAAoF,QAApFC,GAA4E,GAAC,KAC5DZ,EAAA,iBAAjBW,EAA6D,QAA7DE,GAAqD,GAAC;UAAO,MAC7DC,EAAGR,EAAA,KAAW,IAAG,KACjB,CAAA;AAAA,QAAAS,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
1
+ {"version":3,"file":"JLabel.vue.js","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Label } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'required' // 필수 필드 표시 (빨간 별표)\r\n | 'optional' // 선택 필드 표시 (회색 텍스트)\r\n | 'error' // 에러 상태 (빨간 텍스트)\r\n | 'success' // 성공 상태 (초록 텍스트)\r\n | 'warning' // 경고 상태 (주황 텍스트)\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 라벨 텍스트 */\r\n text?: string\r\n /** 필수 필드 여부 */\r\n required?: boolean\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** HTML for 속성 (연결할 input의 id) */\r\n for?: string\r\n }>(),\r\n {\r\n text: '',\r\n required: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n required: { \r\n class: 'text-red-600',\r\n },\r\n optional: { \r\n class: 'text-gray-500',\r\n },\r\n error: { \r\n class: 'text-red-600',\r\n },\r\n success: { \r\n class: 'text-green-600',\r\n },\r\n warning: { \r\n class: 'text-amber-600',\r\n },\r\n sm: { \r\n class: 'text-xs',\r\n },\r\n lg: { \r\n class: 'text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\r\nconst mapped = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n \r\n return {\r\n for: props.for,\r\n class: preset?.class || '',\r\n }\r\n})\r\n\r\nconst displayText = computed(() => {\r\n if (props.text) {\r\n return props.text\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\n <Label \n v-bind=\"mapped\"\n :class=\"[\n 'text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n mapped.class\n ]\"\n >\n <span v-if=\"required && styletype === 'required'\" class=\"text-red-500 mr-1\">*</span>\n <span v-else-if=\"required\" class=\"text-red-500 mr-1\">*</span>\n {{ displayText }}\n <slot />\n </Label>\n</template>\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","displayText","_createBlock","_unref","Label","_mergeProps","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,UAAMA,IAAQC,GAqBRC,IAAsD;AAAA,MAC1D,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,UAAU;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,MAET,UAAU;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,MAET,OAAO;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,IACT,GAIIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAWL,EAAM,aAAa,WAC9BM,IAASJ,EAAcG,CAAQ,KAAKH,EAAc;AAExD,aAAO;AAAA,QACL,KAAKF,EAAM;AAAA,QACX,OAAOM,GAAQ,SAAS;AAAA,MAAA;AAAA,IAE5B,CAAC,GAEKC,IAAcH,EAAS,MACvBJ,EAAM,OACDA,EAAM,OAER,EACR;2BAICQ,EAWQC,EAAAC,CAAA,GAXRC,EAWQR,EAAA,OAVQ;AAAA,MACb,OAAK;AAAA;QAA8GA,EAAA,MAAO;AAAA,MAAA;AAAA;iBAK3H,MAAoF;AAAA,QAAxEF,EAAA,YAAYA,EAAA,cAAS,mBAAjCW,EAAoF,QAApFC,GAA4E,GAAC,KAC5DZ,EAAA,iBAAjBW,EAA6D,QAA7DE,GAAqD,GAAC;UAAO,MAC7DC,EAAGR,EAAA,KAAW,IAAG,KACjB,CAAA;AAAA,QAAAS,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const c=require("../shadcn/Button.vue.cjs"),u=e.defineComponent({__name:"JLink",props:{href:{},text:{},target:{},styletype:{default:"default"},disabled:{type:Boolean,default:!1},class:{}},setup(s){const t=s,n={default:{variant:"link",class:"text-primary underline-offset-4 hover:underline"},primary:{variant:"link",class:"text-primary-foreground bg-primary hover:bg-primary/90"},secondary:{variant:"link",class:"text-secondary-foreground bg-secondary hover:bg-secondary/80"},destructive:{variant:"link",class:"text-destructive hover:text-destructive/90"},outline:{variant:"outline",class:"border border-input bg-background hover:bg-accent hover:text-accent-foreground"},ghost:{variant:"ghost",class:"hover:bg-accent hover:text-accent-foreground"},sm:{variant:"link",size:"sm",class:"h-8 px-3 text-xs"},lg:{variant:"link",size:"lg",class:"h-12 px-8 text-base"}},o=e.computed(()=>{const r=t.styletype||"default",a=n[r]??n.default,i=[a?.class,t.class].filter(Boolean).join(" ");return{variant:a?.variant||"link",size:a?.size||"default",class:i,disabled:t.disabled}}),l=e.computed(()=>{const r={as:"a"};return t.href&&(r.href=t.href),t.target&&(r.target=t.target),r});return(r,a)=>(e.openBlock(),e.createBlock(e.unref(c.default),e.normalizeProps(e.guardReactiveProps({...o.value,...l.value})),{default:e.withCtx(()=>[e.renderSlot(r.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(s.text),1)])]),_:3},16))}});exports.default=u;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const c=require("../shadcn/Button.vue.cjs"),u=e.defineComponent({__name:"JLink",props:{href:{},text:{},target:{},styletype:{default:"default"},disabled:{type:Boolean,default:!1},class:{}},setup(s){const t=s,n={default:{variant:"link",class:"text-primary underline-offset-4 hover:underline"},primary:{variant:"link",class:"text-primary-foreground bg-primary hover:bg-primary/90"},secondary:{variant:"link",class:"text-secondary-foreground bg-secondary hover:bg-secondary/80"},destructive:{variant:"link",class:"text-destructive hover:text-destructive/90"},outline:{variant:"outline",class:"border border-input bg-background hover:bg-accent hover:text-accent-foreground"},ghost:{variant:"ghost",class:"hover:bg-accent hover:text-accent-foreground"},sm:{variant:"link",size:"sm",class:"h-8 px-3 text-xs"},lg:{variant:"link",size:"lg",class:"h-12 px-8 text-base"}},o=e.computed(()=>{const r=t.styletype||"default",a=n[r]??n.default,i=[a?.class,t.class].filter(Boolean).join(" ");return{variant:a?.variant||"link",size:a?.size||"sm",class:i,disabled:t.disabled}}),l=e.computed(()=>{const r={as:"a"};return t.href&&(r.href=t.href),t.target&&(r.target=t.target),r});return(r,a)=>(e.openBlock(),e.createBlock(e.unref(c.default),e.normalizeProps(e.guardReactiveProps({...o.value,...l.value})),{default:e.withCtx(()=>[e.renderSlot(r.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(s.text),1)])]),_:3},16))}});exports.default=u;
2
2
  //# sourceMappingURL=JLink.vue.cjs.map