@j-solution/components 1.9.0 โ†’ 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +6 -5
  2. package/assets/{jwms-portal-frontend-Ct2Tc7yj.css โ†’ jwms-portal-frontend-Di6lStzZ.css} +1 -1
  3. package/assets/styles/j-components.css +1 -1
  4. package/assets/styles/main.css +29 -29
  5. package/components/atoms/JAvatar.vue.cjs.map +1 -1
  6. package/components/atoms/JAvatar.vue.js.map +1 -1
  7. package/components/atoms/JBadge.vue.cjs.map +1 -1
  8. package/components/atoms/JBadge.vue.js.map +1 -1
  9. package/components/atoms/JCombo.vue.cjs.map +1 -1
  10. package/components/atoms/JCombo.vue.js.map +1 -1
  11. package/components/atoms/JDatepicker.vue.cjs.map +1 -1
  12. package/components/atoms/JDatepicker.vue.js.map +1 -1
  13. package/components/atoms/JDivider.vue.cjs.map +1 -1
  14. package/components/atoms/JDivider.vue.js.map +1 -1
  15. package/components/atoms/JEditor.vue.cjs +1 -1
  16. package/components/atoms/JEditor.vue.js +2 -2
  17. package/components/atoms/JEditor.vue2.cjs.map +1 -1
  18. package/components/atoms/JEditor.vue2.js.map +1 -1
  19. package/components/atoms/JGrid.vue.cjs +1 -1
  20. package/components/atoms/JGrid.vue.js +2 -2
  21. package/components/atoms/JGrid.vue2.cjs +1 -1
  22. package/components/atoms/JGrid.vue2.cjs.map +1 -1
  23. package/components/atoms/JGrid.vue2.js +72 -85
  24. package/components/atoms/JGrid.vue2.js.map +1 -1
  25. package/components/atoms/JIcon.vue.cjs.map +1 -1
  26. package/components/atoms/JIcon.vue.js.map +1 -1
  27. package/components/atoms/JImage.vue.cjs.map +1 -1
  28. package/components/atoms/JImage.vue.js.map +1 -1
  29. package/components/atoms/JKbd.vue.cjs.map +1 -1
  30. package/components/atoms/JKbd.vue.js.map +1 -1
  31. package/components/atoms/JPreview.vue.cjs +1 -1
  32. package/components/atoms/JPreview.vue.js +7 -7
  33. package/components/atoms/JPreview.vue2.cjs.map +1 -1
  34. package/components/atoms/JPreview.vue2.js.map +1 -1
  35. package/components/atoms/JProgress.vue.cjs.map +1 -1
  36. package/components/atoms/JProgress.vue.js.map +1 -1
  37. package/components/atoms/JRadio.vue.cjs.map +1 -1
  38. package/components/atoms/JRadio.vue.js.map +1 -1
  39. package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
  40. package/components/atoms/JSearchCombo.vue.js.map +1 -1
  41. package/components/atoms/JSectionTitle.vue2.cjs +1 -1
  42. package/components/atoms/JSectionTitle.vue2.cjs.map +1 -1
  43. package/components/atoms/JSectionTitle.vue2.js +5 -8
  44. package/components/atoms/JSectionTitle.vue2.js.map +1 -1
  45. package/components/atoms/JSpinner.vue.cjs.map +1 -1
  46. package/components/atoms/JSpinner.vue.js.map +1 -1
  47. package/components/atoms/JToast.vue.cjs.map +1 -1
  48. package/components/atoms/JToast.vue.js.map +1 -1
  49. package/components/atoms/JTooltip.vue.cjs.map +1 -1
  50. package/components/atoms/JTooltip.vue.js.map +1 -1
  51. package/components/molecules/JAlert.vue.cjs +1 -1
  52. package/components/molecules/JAlert.vue.cjs.map +1 -1
  53. package/components/molecules/JAlert.vue.js +2 -5
  54. package/components/molecules/JAlert.vue.js.map +1 -1
  55. package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
  56. package/components/molecules/JBreadcrumb.vue.js.map +1 -1
  57. package/components/molecules/JEmptyState.vue2.cjs +1 -1
  58. package/components/molecules/JEmptyState.vue2.cjs.map +1 -1
  59. package/components/molecules/JEmptyState.vue2.js +15 -18
  60. package/components/molecules/JEmptyState.vue2.js.map +1 -1
  61. package/components/molecules/JFormField.vue2.cjs +1 -1
  62. package/components/molecules/JFormField.vue2.cjs.map +1 -1
  63. package/components/molecules/JFormField.vue2.js +2 -5
  64. package/components/molecules/JFormField.vue2.js.map +1 -1
  65. package/components/molecules/JTitlebar.vue.cjs +1 -1
  66. package/components/molecules/JTitlebar.vue.cjs.map +1 -1
  67. package/components/molecules/JTitlebar.vue.js +16 -19
  68. package/components/molecules/JTitlebar.vue.js.map +1 -1
  69. package/components/organisms/JDynamicForm.vue2.cjs +1 -1
  70. package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
  71. package/components/organisms/JDynamicForm.vue2.js +2 -5
  72. package/components/organisms/JDynamicForm.vue2.js.map +1 -1
  73. package/components/organisms/JFilterBar.vue.cjs +1 -1
  74. package/components/organisms/JFilterBar.vue.js +2 -2
  75. package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
  76. package/components/organisms/JFilterBar.vue2.js.map +1 -1
  77. package/components/organisms/JFormModal.vue.cjs +1 -1
  78. package/components/organisms/JFormModal.vue.cjs.map +1 -1
  79. package/components/organisms/JFormModal.vue.js +14 -17
  80. package/components/organisms/JFormModal.vue.js.map +1 -1
  81. package/components/organisms/JModal.vue.cjs +1 -1
  82. package/components/organisms/JModal.vue.cjs.map +1 -1
  83. package/components/organisms/JModal.vue.js +2 -5
  84. package/components/organisms/JModal.vue.js.map +1 -1
  85. package/components/organisms/JSearchPanel.vue2.cjs +1 -1
  86. package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
  87. package/components/organisms/JSearchPanel.vue2.js +20 -23
  88. package/components/organisms/JSearchPanel.vue2.js.map +1 -1
  89. package/components/organisms/JSidebar/JSidebar.vue.cjs.map +1 -1
  90. package/components/organisms/JSidebar/JSidebar.vue.js.map +1 -1
  91. package/components/organisms/JSidebar/JSidebarGroup.vue.cjs.map +1 -1
  92. package/components/organisms/JSidebar/JSidebarGroup.vue.js.map +1 -1
  93. package/components/organisms/JSidebar/JSidebarItem.vue.cjs.map +1 -1
  94. package/components/organisms/JSidebar/JSidebarItem.vue.js.map +1 -1
  95. package/components/organisms/JSidebarAdvanced.vue.cjs +1 -1
  96. package/components/organisms/JSidebarAdvanced.vue.js +7 -7
  97. package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
  98. package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
  99. package/components/organisms/JSidebarSimple.vue.cjs +1 -1
  100. package/components/organisms/JSidebarSimple.vue.js +2 -2
  101. package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
  102. package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
  103. package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
  104. package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
  105. package/components/shadcn/CardDescription.vue.cjs.map +1 -1
  106. package/components/shadcn/CardDescription.vue.js.map +1 -1
  107. package/components/shadcn/CardFooter.vue.cjs.map +1 -1
  108. package/components/shadcn/CardFooter.vue.js.map +1 -1
  109. package/components/shadcn/CardTitle.vue.cjs.map +1 -1
  110. package/components/shadcn/CardTitle.vue.js.map +1 -1
  111. package/components/shadcn/Checkbox.vue.cjs.map +1 -1
  112. package/components/shadcn/Checkbox.vue.js.map +1 -1
  113. package/components/shadcn/Combobox.vue.cjs.map +1 -1
  114. package/components/shadcn/Combobox.vue.js.map +1 -1
  115. package/components/shadcn/ComboboxAnchor.vue.cjs.map +1 -1
  116. package/components/shadcn/ComboboxAnchor.vue.js.map +1 -1
  117. package/components/shadcn/ComboboxEmpty.vue.cjs.map +1 -1
  118. package/components/shadcn/ComboboxEmpty.vue.js.map +1 -1
  119. package/components/shadcn/ComboboxGroup.vue.cjs.map +1 -1
  120. package/components/shadcn/ComboboxGroup.vue.js.map +1 -1
  121. package/components/shadcn/ComboboxInput.vue.cjs.map +1 -1
  122. package/components/shadcn/ComboboxInput.vue.js.map +1 -1
  123. package/components/shadcn/ComboboxItem.vue.cjs.map +1 -1
  124. package/components/shadcn/ComboboxItem.vue.js.map +1 -1
  125. package/components/shadcn/ComboboxList.vue.cjs.map +1 -1
  126. package/components/shadcn/ComboboxList.vue.js.map +1 -1
  127. package/components/shadcn/ComboboxTrigger.vue.cjs.map +1 -1
  128. package/components/shadcn/ComboboxTrigger.vue.js.map +1 -1
  129. package/components/shadcn/ContextMenu.vue.cjs.map +1 -1
  130. package/components/shadcn/ContextMenu.vue.js.map +1 -1
  131. package/components/shadcn/ContextMenuContent.vue.cjs.map +1 -1
  132. package/components/shadcn/ContextMenuContent.vue.js.map +1 -1
  133. package/components/shadcn/ContextMenuGroup.vue.cjs.map +1 -1
  134. package/components/shadcn/ContextMenuGroup.vue.js.map +1 -1
  135. package/components/shadcn/ContextMenuItem.vue.cjs.map +1 -1
  136. package/components/shadcn/ContextMenuItem.vue.js.map +1 -1
  137. package/components/shadcn/ContextMenuLabel.vue.cjs.map +1 -1
  138. package/components/shadcn/ContextMenuLabel.vue.js.map +1 -1
  139. package/components/shadcn/ContextMenuSeparator.vue.cjs.map +1 -1
  140. package/components/shadcn/ContextMenuSeparator.vue.js.map +1 -1
  141. package/components/shadcn/ContextMenuSub.vue.cjs.map +1 -1
  142. package/components/shadcn/ContextMenuSub.vue.js.map +1 -1
  143. package/components/shadcn/ContextMenuSubContent.vue.cjs.map +1 -1
  144. package/components/shadcn/ContextMenuSubContent.vue.js.map +1 -1
  145. package/components/shadcn/ContextMenuSubTrigger.vue.cjs.map +1 -1
  146. package/components/shadcn/ContextMenuSubTrigger.vue.js.map +1 -1
  147. package/components/shadcn/ContextMenuTrigger.vue.cjs.map +1 -1
  148. package/components/shadcn/ContextMenuTrigger.vue.js.map +1 -1
  149. package/components/shadcn/Field.vue.cjs.map +1 -1
  150. package/components/shadcn/Field.vue.js.map +1 -1
  151. package/components/shadcn/FieldContent.vue.cjs.map +1 -1
  152. package/components/shadcn/FieldContent.vue.js.map +1 -1
  153. package/components/shadcn/FieldDescription.vue.cjs.map +1 -1
  154. package/components/shadcn/FieldDescription.vue.js.map +1 -1
  155. package/components/shadcn/FieldError.vue.cjs.map +1 -1
  156. package/components/shadcn/FieldError.vue.js.map +1 -1
  157. package/components/shadcn/FieldGroup.vue.cjs.map +1 -1
  158. package/components/shadcn/FieldGroup.vue.js.map +1 -1
  159. package/components/shadcn/FieldLabel.vue.cjs.map +1 -1
  160. package/components/shadcn/FieldLabel.vue.js.map +1 -1
  161. package/components/shadcn/Label.vue.cjs.map +1 -1
  162. package/components/shadcn/Label.vue.js.map +1 -1
  163. package/components/shadcn/RadioGroup.vue.cjs.map +1 -1
  164. package/components/shadcn/RadioGroup.vue.js.map +1 -1
  165. package/components/shadcn/RadioGroupItem.vue.cjs.map +1 -1
  166. package/components/shadcn/RadioGroupItem.vue.js.map +1 -1
  167. package/components/shadcn/Select.vue.cjs.map +1 -1
  168. package/components/shadcn/Select.vue.js.map +1 -1
  169. package/components/shadcn/SelectContent.vue.cjs.map +1 -1
  170. package/components/shadcn/SelectContent.vue.js.map +1 -1
  171. package/components/shadcn/SelectGroup.vue.cjs.map +1 -1
  172. package/components/shadcn/SelectGroup.vue.js.map +1 -1
  173. package/components/shadcn/SelectItem.vue.cjs.map +1 -1
  174. package/components/shadcn/SelectItem.vue.js.map +1 -1
  175. package/components/shadcn/SelectLabel.vue.cjs.map +1 -1
  176. package/components/shadcn/SelectLabel.vue.js.map +1 -1
  177. package/components/shadcn/SelectScrollDownButton.vue2.cjs.map +1 -1
  178. package/components/shadcn/SelectScrollDownButton.vue2.js.map +1 -1
  179. package/components/shadcn/SelectScrollUpButton.vue2.cjs.map +1 -1
  180. package/components/shadcn/SelectScrollUpButton.vue2.js.map +1 -1
  181. package/components/shadcn/SelectValue.vue.cjs.map +1 -1
  182. package/components/shadcn/SelectValue.vue.js.map +1 -1
  183. package/components/shadcn/Separator.vue.cjs.map +1 -1
  184. package/components/shadcn/Separator.vue.js.map +1 -1
  185. package/components/shadcn/Switch.vue.cjs.map +1 -1
  186. package/components/shadcn/Switch.vue.js.map +1 -1
  187. package/components/shadcn/Tabs.vue.cjs.map +1 -1
  188. package/components/shadcn/Tabs.vue.js.map +1 -1
  189. package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
  190. package/components/shadcn/TabsTrigger.vue.js.map +1 -1
  191. package/components/shadcn/Toaster.vue.cjs.map +1 -1
  192. package/components/shadcn/Toaster.vue.js.map +1 -1
  193. package/components/shadcn/resizable/ResizableHandle.vue.cjs.map +1 -1
  194. package/components/shadcn/resizable/ResizableHandle.vue.js.map +1 -1
  195. package/components/shadcn/resizable/ResizablePanelGroup.vue.cjs.map +1 -1
  196. package/components/shadcn/resizable/ResizablePanelGroup.vue.js.map +1 -1
  197. package/lib/styleTypePreset.cjs.map +1 -1
  198. package/lib/styleTypePreset.js.map +1 -1
  199. package/lib/theme-utils.cjs.map +1 -1
  200. package/lib/theme-utils.js.map +1 -1
  201. package/package.json +1 -1
  202. package/tailwind.config.js +81 -81
  203. package/types/index.d.ts +0 -46
  204. package/types/sidebar.types.cjs.map +1 -1
  205. package/types/sidebar.types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"JGrid.vue2.cjs","sources":["../../../../src/components/atoms/JGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch, onMounted, onUnmounted } from 'vue'\nimport { AgGridVue } from 'ag-grid-vue3'\nimport { cn } from '@/lib/utils'\nimport type {\n ColDef,\n GridOptions,\n RowClickedEvent,\n CellClickedEvent,\n SelectionChangedEvent,\n CellValueChangedEvent,\n RowDoubleClickedEvent,\n GridReadyEvent,\n ICellRendererParams,\n} from 'ag-grid-community'\nimport { ModuleRegistry, AllCommunityModule } from 'ag-grid-community'\n// Enterprise ๋ชจ๋“ˆ import (Grouping, Pivot, Excel Export ๋“ฑ)\nimport { AllEnterpriseModule } from 'ag-grid-enterprise'\n// ag-grid.css๋Š” ์ œ๊ฑฐ - v34์—์„œ Theming API์™€ ์ถฉ๋Œ ๋ฐฉ์ง€\n// ํ…Œ๋งˆ CSS ํŒŒ์ผ๋งŒ ์‚ฌ์šฉ (ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ํ…Œ๋งˆ)\n// v34์—์„œ๋Š” dark ํ…Œ๋งˆ๊ฐ€ ๊ฐ™์€ CSS ํŒŒ์ผ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ์Œ\n// ์˜ˆ: ag-theme-quartz.css์— .ag-theme-quartz-dark ํด๋ž˜์Šค ํฌํ•จ\nimport 'ag-grid-community/styles/ag-theme-quartz.css'\nimport 'ag-grid-community/styles/ag-theme-alpine.css'\nimport 'ag-grid-community/styles/ag-theme-balham.css'\n\n// AG Grid ๋ชจ๋“ˆ ๋“ฑ๋ก (Community + Enterprise)\nModuleRegistry.registerModules([AllCommunityModule, AllEnterpriseModule])\n\n/**\n * Action Button ์ •์˜ ํƒ€์ž…\n */\nexport type ActionButton = {\n /** ๋ฒ„ํŠผ ์•„์ด์ฝ˜ ์ด๋ฆ„ (lucide) - label์ด ์—†์„ ๋•Œ ๊ธฐ๋ณธ ํ…์ŠคํŠธ ์ƒ์„ฑ์— ์‚ฌ์šฉ */\n icon?: string\n /** ๋ฒ„ํŠผ ๋ผ๋ฒจ */\n label?: string\n /** ํˆดํŒ ํ…์ŠคํŠธ */\n tooltip?: string\n /** ๋ฒ„ํŠผ ํด๋ฆญ ํ•ธ๋“ค๋Ÿฌ (rowData ์ „๋‹ฌ) */\n onClick: (rowData: any) => void\n /** ๋ฒ„ํŠผ ์Šคํƒ€์ผ ํƒ€์ž… */\n styletype?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\n /** ์กฐ๊ฑด๋ถ€ ํ‘œ์‹œ ํ•จ์ˆ˜ (rowData๋ฅผ ๋ฐ›์•„ boolean ๋ฐ˜ํ™˜) */\n show?: (rowData: any) => boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n /** ์ถ”๊ฐ€ ํด๋ž˜์Šค (์™ธ๋ถ€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์šฉ) */\n class?: string\n /** ๊ทธ๋ฆฌ๋“œ์— ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด */\n rowData: any[]\n /** ์ปฌ๋Ÿผ ์ •์˜ ๋ฐฐ์—ด */\n columnDefs: ColDef[]\n /** ag-Grid ํ…Œ๋งˆ */\n theme?: string\n /** ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n pagination?: boolean\n /** ์ฒดํฌ๋ฐ•์Šค ์„ ํƒ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n checkbox?: boolean\n /** ํ–‰ ๋ฒˆํ˜ธ ํ‘œ์‹œ ์—ฌ๋ถ€ (Enterprise) */\n rowNumbers?: boolean\n /** ํ–‰๋ณ„ ์•ก์…˜ ๋ฒ„ํŠผ ๋ชฉ๋ก */\n actionButtons?: ActionButton[]\n /** ๋‹คํฌ๋ชจ๋“œ ์ž๋™ ๊ฐ์ง€ ์—ฌ๋ถ€ */\n autoDetectDarkMode?: boolean\n /** ์š”์•ฝ ์ปฌ๋Ÿผ ํ‘œ์‹œ ์—ฌ๋ถ€ */\n summaryColumn?: boolean\n /** ์ˆจ๊น€ ์ปฌ๋Ÿผ ๊ด€๋ฆฌ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n hiddenColumn?: boolean\n /** ๊ทธ๋ฃนํ•‘ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enableGrouping?: boolean\n /** ํ”ผ๋ฒ— ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enablePivot?: boolean\n /** Excel ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enableExcelExport?: boolean\n /** Tree Data ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enableTreeData?: boolean\n /** Tree Data ๊ณ„์ธต ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ */\n getDataPath?: (data: any) => (string | number)[]\n /** Tree Data ๊ทธ๋ฃน ์ปฌ๋Ÿผ ์ •์˜ */\n autoGroupColumnDef?: ColDef\n /** ์„ ํƒ๋œ ํ–‰ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด (v-model:selected-rows) */\n selectedRows?: any[]\n /** ์ปฌ๋Ÿผ ํ˜ธ๋ฒ„ ํ•˜์ด๋ผ์ดํŠธ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n columnHover?: boolean\n /** Columns Tool Panel ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enableColumnsToolPanel?: boolean\n /** Status Bar ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n statusBar?: boolean\n /** ๊ฐ„์†Œํ™”๋œ Footer ๋ชจ๋“œ (Status Bar ์ œ๊ฑฐ, Pagination๋งŒ ํ‘œ์‹œ) */\n compactFooter?: boolean\n /** Row Group Panel ํ‘œ์‹œ ์—ฌ๋ถ€ ('always' | 'onlyWhenGrouping' | 'never') */\n rowGroupPanelShow?: 'always' | 'onlyWhenGrouping' | 'never'\n /** ๊ทธ๋ฃน ๊ธฐ๋ณธ ํ™•์žฅ ๋ ˆ๋ฒจ (-1: ๋ชจ๋‘ ๋‹ซํž˜, 0: ์ฒซ ๋ ˆ๋ฒจ๋งŒ, 1: 2๋ ˆ๋ฒจ๊นŒ์ง€...) */\n groupDefaultExpanded?: number\n /** Pivot Mode Panel ํ‘œ์‹œ ์—ฌ๋ถ€ */\n pivotPanelShow?: 'always' | 'onlyWhenPivoting' | 'never'\n /** Pivot Mode ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n pivotMode?: boolean\n }>(),\n {\n theme: 'ag-theme-balham',\n pagination: true,\n checkbox: false,\n rowNumbers: true,\n actionButtons: undefined,\n autoDetectDarkMode: true,\n summaryColumn: false,\n hiddenColumn: false,\n enableGrouping: true,\n enablePivot: false,\n enableExcelExport: false,\n enableTreeData: false,\n getDataPath: undefined,\n autoGroupColumnDef: undefined,\n selectedRows: () => [],\n columnHover: true,\n enableColumnsToolPanel: true,\n statusBar: true,\n compactFooter: false,\n rowGroupPanelShow: 'never',\n groupDefaultExpanded: -1,\n pivotPanelShow: 'never',\n pivotMode: false,\n },\n)\n\nconst emit = defineEmits<{\n /** ํ–‰ ํด๋ฆญ ์ด๋ฒคํŠธ */\n rowClicked: [event: RowClickedEvent]\n /** ํ–‰ ๋”๋ธ”ํด๋ฆญ ์ด๋ฒคํŠธ */\n rowDoubleClicked: [event: RowDoubleClickedEvent]\n /** ์…€ ํด๋ฆญ ์ด๋ฒคํŠธ */\n cellClicked: [event: CellClickedEvent]\n /** ์„ ํƒ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ (์ฒดํฌ๋ฐ•์Šค ๋“ฑ) */\n selectionChanged: [event: SelectionChangedEvent]\n /** ์…€ ๊ฐ’ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ */\n cellValueChanged: [event: CellValueChangedEvent]\n /** ๊ทธ๋ฆฌ๋“œ ์ค€๋น„ ์™„๋ฃŒ ์ด๋ฒคํŠธ */\n gridReady: [event: GridReadyEvent]\n /** ์„ ํƒ๋œ ํ–‰ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ (v-model:selected-rows) */\n 'update:selectedRows': [rows: any[]]\n}>()\n\n// ag-Grid ์ธ์Šคํ„ด์Šค ์ฐธ์กฐ\nconst gridApi = ref<any>(null)\nconst gridColumnApi = ref<any>(null)\n\n// ๋‹คํฌ๋ชจ๋“œ ์ƒํƒœ\nconst isDarkMode = ref(false)\n\n// ๋‹คํฌ๋ชจ๋“œ ๊ฐ์ง€ ํ•จ์ˆ˜\nconst detectDarkMode = () => {\n isDarkMode.value = document.documentElement.classList.contains('dark')\n}\n\n// ํ˜„์žฌ ํ…Œ๋งˆ ๊ณ„์‚ฐ (๋‹คํฌ๋ชจ๋“œ ์ž๋™ ์ „ํ™˜)\nconst currentTheme = computed(() => {\n if (!props.autoDetectDarkMode) {\n return props.theme\n }\n \n const baseTheme = props.theme\n if (isDarkMode.value) {\n // ์ด๋ฏธ dark ํ…Œ๋งˆ์ธ ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ์œ ์ง€, ์•„๋‹ˆ๋ฉด -dark ์ถ”๊ฐ€\n return baseTheme.includes('-dark') ? baseTheme : `${baseTheme}-dark`\n } else {\n // dark ํ…Œ๋งˆ ์ œ๊ฑฐ\n return baseTheme.replace(/-dark$/, '')\n }\n})\n\n// Action Buttons Cell Renderer - ํ•จ์ˆ˜ํ˜•์œผ๋กœ DOM ์ง์ ‘ ์ƒ์„ฑ\nconst ActionButtonsCellRenderer = (params: ICellRendererParams) => {\n const buttons = props.actionButtons || []\n const rowData = params.data\n \n // ํ‘œ์‹œํ•  ๋ฒ„ํŠผ ํ•„ํ„ฐ๋ง\n const visibleButtons = buttons.filter(btn => {\n if (btn.show) {\n return btn.show(rowData)\n }\n return true\n })\n \n if (visibleButtons.length === 0) {\n return ''\n }\n \n // ์ปจํ…Œ์ด๋„ˆ div ์ƒ์„ฑ\n const container = document.createElement('div')\n container.className = 'flex items-center gap-1'\n \n // ๊ฐ ๋ฒ„ํŠผ ์ƒ์„ฑ\n visibleButtons.forEach((btn) => {\n const button = document.createElement('button')\n button.className = 'px-2 py-1 text-xs border rounded transition-colors'\n \n // styletype์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์ถ”๊ฐ€\n if (btn.styletype === 'danger') {\n button.className += ' bg-red-50 border-red-400 text-red-700 hover:bg-red-100 dark:bg-red-950 dark:border-red-700 dark:text-red-400 dark:hover:bg-red-900'\n } else {\n button.className += ' bg-gray-50 border-gray-400 text-gray-700 hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700'\n }\n \n // tooltip\n if (btn.tooltip) {\n button.title = btn.tooltip\n }\n \n // ๋ผ๋ฒจ ์ถ”๊ฐ€ (ํ…์ŠคํŠธ ๋ฒ„ํŠผ)\n if (btn.label) {\n button.textContent = btn.label\n } else if (btn.icon) {\n // ๋ผ๋ฒจ์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ ํ…์ŠคํŠธ ์ƒ์„ฑ\n if (btn.icon === 'pencil') {\n button.textContent = '์ˆ˜์ •'\n } else if (btn.icon === 'trash2' || btn.icon === 'trash') {\n button.textContent = '์‚ญ์ œ'\n } else if (btn.icon === 'eye') {\n button.textContent = '๋ณด๊ธฐ'\n } else if (btn.icon === 'copy') {\n button.textContent = '๋ณต์‚ฌ'\n } else if (btn.icon === 'download') {\n button.textContent = '๋‹ค์šด๋กœ๋“œ'\n } else if (btn.icon === 'circleX') {\n button.textContent = '๋น„ํ™œ์„ฑํ™”'\n } else if (btn.icon === 'circleCheckBig') {\n button.textContent = 'ํ™œ์„ฑํ™”'\n } else {\n button.textContent = btn.icon\n }\n }\n \n // ํด๋ฆญ ์ด๋ฒคํŠธ\n button.addEventListener('click', (e) => {\n e.stopPropagation()\n btn.onClick(rowData)\n })\n \n container.appendChild(button)\n })\n \n return container\n}\n\n// Action Buttons ์ปฌ๋Ÿผ ์ •์˜\nconst actionButtonsColumn = computed<ColDef | null>(() => {\n if (!props.actionButtons || props.actionButtons.length === 0) {\n return null\n }\n \n return {\n colId: 'actionButtons',\n headerName: '์ž‘์—…',\n field: '_actions',\n width: 120,\n minWidth: 80,\n maxWidth: 200,\n lockPosition: 'left' as const,\n sortable: false,\n filter: false,\n resizable: true,\n suppressNavigable: true,\n suppressHeaderMenuButton: true,\n cellRenderer: ActionButtonsCellRenderer,\n cellStyle: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\n }\n})\n\n// checkbox ํ™œ์„ฑํ™” ๋ฐ ์ถ”๊ฐ€ ์ปฌ๋Ÿผ ์ฒ˜๋ฆฌ\nconst processedColumnDefs = computed(() => {\n const columns: ColDef[] = []\n \n // 1. Checkbox ์ปฌ๋Ÿผ (์ตœ์šฐ์„ )\n if (props.checkbox) {\n columns.push({\n colId: 'rowSelection',\n headerName: '',\n // field์™€ valueGetter ์ œ๊ฑฐ - AG Grid ๊ณต์‹ ๋ฐฉ์‹\n width: 50,\n minWidth: 50,\n maxWidth: 50,\n lockPosition: 'left' as const,\n checkboxSelection: true,\n headerCheckboxSelection: true,\n sortable: false,\n filter: false,\n resizable: false,\n suppressNavigable: true,\n suppressHeaderMenuButton: true,\n cellStyle: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\n })\n }\n \n // 2. Action Buttons ์ปฌ๋Ÿผ\n if (actionButtonsColumn.value) {\n columns.push(actionButtonsColumn.value)\n }\n \n // 3. ์‚ฌ์šฉ์ž ์ •์˜ ์ปฌ๋Ÿผ๋“ค (Row Numbers๋Š” AG Grid๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€)\n columns.push(...props.columnDefs)\n \n return columns\n})\n\n// Grid ์˜ต์…˜ ์„ค์ •\nconst gridOptions = computed<GridOptions>(() => {\n const options: GridOptions = {\n // theme ์˜ต์…˜ ์ œ๊ฑฐ - ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ํ…Œ๋งˆ(:class=\"theme\") ์‚ฌ์šฉ\n // columnDefs์™€ rowData๋Š” prop์œผ๋กœ ์ „๋‹ฌํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์ œ๊ฑฐ\n pagination: props.pagination,\n rowSelection: props.checkbox ? 'multiple' : undefined,\n // ์ฒดํฌ๋ฐ•์Šค ๋ชจ๋“œ์ผ ๋•Œ row ํด๋ฆญ์œผ๋กœ ์„ ํƒ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •\n // ์ฒดํฌ๋ฐ•์Šค๋งŒ์œผ๋กœ ์„ ํƒ์„ ์ œ์–ดํ•˜๋„๋ก ํ•จ\n suppressRowClickSelection: props.checkbox,\n\n // Row Numbers (Enterprise) - AG Grid ํ‘œ์ค€ ๋ฐฉ์‹\n rowNumbers: props.rowNumbers,\n\n // Column Hover Highlight\n columnHoverHighlight: props.columnHover,\n\n // Enterprise ๊ธฐ๋Šฅ ์˜ต์…˜\n sideBar: props.enableColumnsToolPanel || props.enableGrouping || props.enablePivot ? {\n toolPanels: [\n {\n id: 'columns',\n labelDefault: 'Columns',\n labelKey: 'columns',\n iconKey: 'columns',\n toolPanel: 'agColumnsToolPanel',\n toolPanelParams: {\n suppressRowGroups: !props.enableGrouping,\n suppressValues: !props.enablePivot,\n suppressPivots: !props.enablePivot,\n suppressPivotMode: !props.enablePivot,\n },\n },\n ],\n defaultToolPanel: '', // ์ดˆ๊ธฐ์—๋Š” ์ ‘ํžŒ ์ƒํƒœ\n } : undefined,\n\n // Status Bar (Enterprise)\n // compactFooter ๋ชจ๋“œ์—์„œ๋Š” Status Bar ๋น„ํ™œ์„ฑํ™”\n statusBar: (props.statusBar && !props.compactFooter) ? {\n statusPanels: [\n { statusPanel: 'agTotalAndFilteredRowCountComponent', align: 'left' as const },\n { statusPanel: 'agSelectedRowCountComponent', align: 'left' as const },\n { statusPanel: 'agAggregationComponent', align: 'right' as const },\n ],\n } : undefined,\n\n // Row Group Panel ์„ค์ • (Enterprise) - ๊ทธ๋ฆฌ๋“œ ์ƒ๋‹จ์— ๋“œ๋ž˜๊ทธ ์˜์—ญ ํ‘œ์‹œ\n rowGroupPanelShow: props.rowGroupPanelShow !== 'never' ? props.rowGroupPanelShow : undefined,\n\n // Pivot Panel ์„ค์ • (Enterprise) - ํ”ผ๋ฒ— ๋ชจ๋“œ์šฉ ๋“œ๋ž˜๊ทธ ์˜์—ญ\n pivotPanelShow: props.pivotPanelShow !== 'never' ? props.pivotPanelShow : undefined,\n \n // Pivot Mode ํ™œ์„ฑํ™”\n pivotMode: props.pivotMode,\n\n // ๊ทธ๋ฃนํ•‘ ๊ธฐ๋ณธ ์„ค์ •\n groupDefaultExpanded: props.groupDefaultExpanded,\n suppressAggFuncInHeader: false,\n\n // Tree Data ์„ค์ • (Enterprise)\n treeData: props.enableTreeData || undefined,\n getDataPath: props.enableTreeData\n ? (props.getDataPath || ((data: any) => data.path || []))\n : undefined,\n autoGroupColumnDef: props.enableTreeData && props.autoGroupColumnDef\n ? props.autoGroupColumnDef\n : undefined,\n }\n\n return options\n})\n\n// Excel ๋‚ด๋ณด๋‚ด๊ธฐ ํ•จ์ˆ˜ (์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก expose)\nconst exportToExcel = () => {\n if (gridApi.value && props.enableExcelExport) {\n gridApi.value.exportDataAsExcel({\n fileName: 'grid-export.xlsx',\n })\n }\n}\n\n// ๊ทธ๋ฆฌ๋“œ API๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœ\ndefineExpose({\n gridApi,\n gridColumnApi,\n exportToExcel,\n})\n\n// Grid ready ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onGridReady = (params: GridReadyEvent) => {\n gridApi.value = params.api\n gridColumnApi.value = params.api // v34์—์„œ columnApi๋Š” deprecated\n emit('gridReady', params)\n}\n\n// ํ–‰ ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onRowClicked = (event: RowClickedEvent) => {\n emit('rowClicked', event)\n}\n\n// ํ–‰ ๋”๋ธ”ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onRowDoubleClicked = (event: RowDoubleClickedEvent) => {\n emit('rowDoubleClicked', event)\n}\n\n// ์…€ ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onCellClicked = (event: CellClickedEvent) => {\n emit('cellClicked', event)\n}\n\n// ์„ ํƒ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onSelectionChanged = (event: SelectionChangedEvent) => {\n emit('selectionChanged', event)\n emit('update:selectedRows', event.api.getSelectedRows())\n}\n\n// ์…€ ๊ฐ’ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onCellValueChanged = (event: CellValueChangedEvent) => {\n emit('cellValueChanged', event)\n}\n\n// MutationObserver๋กœ ๋‹คํฌ๋ชจ๋“œ ๋ณ€๊ฒฝ ๊ฐ์ง€\nlet darkModeObserver: MutationObserver | null = null\n\nonMounted(() => {\n if (props.autoDetectDarkMode) {\n // ์ดˆ๊ธฐ ๋‹คํฌ๋ชจ๋“œ ์ƒํƒœ ๊ฐ์ง€\n detectDarkMode()\n \n // MutationObserver๋กœ class ๋ณ€๊ฒฝ ๊ฐ์ง€\n darkModeObserver = new MutationObserver(() => {\n detectDarkMode()\n })\n \n darkModeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n }\n})\n\nonUnmounted(() => {\n if (darkModeObserver) {\n darkModeObserver.disconnect()\n }\n})\n\n// columnDefs ๋ณ€๊ฒฝ ๊ฐ์ง€\nwatch(\n () => props.columnDefs,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('columnDefs', processedColumnDefs.value)\n }\n },\n { deep: true },\n)\n\n// rowData ๋ณ€๊ฒฝ ๊ฐ์ง€\nwatch(\n () => props.rowData,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('rowData', props.rowData)\n }\n },\n { deep: true },\n)\n</script>\n\n<template>\n <div :class=\"cn('ag-grid-container', props.class)\">\n <AgGridVue\n :column-defs=\"processedColumnDefs\"\n :row-data=\"rowData\"\n :grid-options=\"gridOptions\"\n :class=\"currentTheme\"\n style=\"height: 100%; width: 100%\"\n @grid-ready=\"onGridReady\"\n @row-clicked=\"onRowClicked\"\n @row-double-clicked=\"onRowDoubleClicked\"\n @cell-clicked=\"onCellClicked\"\n @selection-changed=\"onSelectionChanged\"\n @cell-value-changed=\"onCellValueChanged\"\n />\n </div>\n</template>\n\n<style scoped>\n.ag-grid-container {\n width: 100%;\n height: 100%;\n}\n\n/* ============================================\n COMPACT FOOTER: Status Bar + Pagination ํ†ตํ•ฉ\n ============================================ */\n\n/* Status Bar ๋†’์ด ์ค„์ด๊ธฐ */\n:deep(.ag-status-bar) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 0.8125rem;\n}\n\n/* Status Bar ์ปดํฌ๋„ŒํŠธ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-status-bar-left),\n:deep(.ag-status-bar-center),\n:deep(.ag-status-bar-right) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Status Bar ํŒจ๋„๋“ค ๊ฐ„๊ฒฉ ์กฐ์ • */\n:deep(.ag-status-panel) {\n padding: 0;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Pagination Panel ๋†’์ด ์ค„์ด๊ธฐ */\n:deep(.ag-paging-panel) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n font-size: 0.8125rem;\n}\n\n/* Pagination ์ปดํฌ๋„ŒํŠธ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-page-size),\n:deep(.ag-paging-row-summary-panel) {\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Page Size Selector ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-page-size .ag-picker-field) {\n height: 24px;\n min-height: 24px;\n}\n\n:deep(.ag-paging-page-size .ag-picker-field-wrapper) {\n height: 24px;\n padding: 0 4px;\n}\n\n/* Pagination ๋ฒ„ํŠผ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-button) {\n height: 24px;\n width: 24px;\n padding: 2px;\n}\n\n/* Pagination ๋ฒ„ํŠผ ๋ž˜ํผ */\n:deep(.ag-paging-button-wrapper) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Row summary ํ…์ŠคํŠธ */\n:deep(.ag-paging-row-summary-panel-number) {\n line-height: 28px;\n}\n\n/* ========================================\n ํŒจํ„ด 9: AG-Grid ์Šคํƒ€์ผ ํ–ฅ์ƒ\n ======================================== */\n\n:deep(.ag-root-wrapper) {\n border: 1px solid hsl(var(--border));\n border-radius: 0.375rem;\n}\n\n:deep(.ag-header) {\n background-color: hsl(var(--muted));\n border-bottom: 1px solid hsl(var(--border));\n font-weight: 500;\n}\n\n:deep(.ag-header-cell) {\n color: hsl(var(--foreground));\n font-size: 0.75rem;\n padding: 0.5rem;\n}\n\n:deep(.ag-row) {\n transition: background-color 0.2s ease, border-left 0.2s ease;\n cursor: pointer;\n}\n\n:deep(.ag-row:hover) {\n background-color: hsl(var(--primary) / 0.05) !important;\n}\n\n:deep(.ag-row-selected) {\n background-color: hsl(var(--primary) / 0.1) !important;\n border-left: 2px solid hsl(var(--primary)) !important;\n}\n\n:deep(.ag-row-selected:hover) {\n background-color: hsl(var(--primary) / 0.15) !important;\n}\n\n:deep(.ag-cell) {\n line-height: 1.5;\n padding: 0.5rem;\n border-bottom: 1px solid hsl(var(--border) / 0.5);\n}\n\n:deep(.ag-paging-panel) {\n background-color: hsl(var(--muted) / 0.5);\n border-top: 1px solid hsl(var(--border));\n}\n</style>\n"],"names":["ModuleRegistry","AllCommunityModule","AllEnterpriseModule","props","__props","emit","__emit","gridApi","ref","gridColumnApi","isDarkMode","detectDarkMode","currentTheme","computed","baseTheme","ActionButtonsCellRenderer","params","buttons","rowData","visibleButtons","btn","container","button","e","actionButtonsColumn","processedColumnDefs","columns","gridOptions","data","__expose","onGridReady","onRowClicked","event","onRowDoubleClicked","onCellClicked","onSelectionChanged","onCellValueChanged","darkModeObserver","onMounted","onUnmounted","watch","_createElementBlock","_normalizeClass","_unref","cn","_createVNode","AgGridVue"],"mappings":"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"}
1
+ {"version":3,"file":"JGrid.vue2.cjs","sources":["../../../../src/components/atoms/JGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { AgGridVue } from 'ag-grid-vue3'\nimport { cn } from '@/lib/utils'\nimport type {\n ColDef,\n GridOptions,\n RowClickedEvent,\n CellClickedEvent,\n SelectionChangedEvent,\n CellValueChangedEvent,\n RowDoubleClickedEvent,\n GridReadyEvent,\n ICellRendererParams,\n} from 'ag-grid-community'\nimport { ModuleRegistry, AllCommunityModule, themeQuartz } from 'ag-grid-community'\n// Enterprise ๋ชจ๋“ˆ import (Grouping, Pivot, Excel Export ๋“ฑ)\nimport { AllEnterpriseModule } from 'ag-grid-enterprise'\n\n// AG Grid ๋ชจ๋“ˆ ๋“ฑ๋ก (Community + Enterprise)\nModuleRegistry.registerModules([AllCommunityModule, AllEnterpriseModule])\n\n// Theme Builder API: JLIS ์ปค์Šคํ…€ ํ…Œ๋งˆ (browserColorScheme: 'inherit' โ†’ ๋‹คํฌ๋ชจ๋“œ ์ž๋™ ๊ฐ์ง€)\nconst jTheme = themeQuartz.withParams({\n browserColorScheme: 'inherit',\n cellHorizontalPaddingScale: 1,\n columnBorder: true,\n fontSize: 13,\n headerBackgroundColor: '#FFFFFF',\n headerFontWeight: 500,\n headerVerticalPaddingScale: 0.7,\n iconSize: 14,\n oddRowBackgroundColor: '#CBE6F175',\n rowVerticalPaddingScale: 0.5,\n})\n\n/**\n * Action Button ์ •์˜ ํƒ€์ž…\n */\nexport type ActionButton = {\n /** ๋ฒ„ํŠผ ์•„์ด์ฝ˜ ์ด๋ฆ„ (lucide) - label์ด ์—†์„ ๋•Œ ๊ธฐ๋ณธ ํ…์ŠคํŠธ ์ƒ์„ฑ์— ์‚ฌ์šฉ */\n icon?: string\n /** ๋ฒ„ํŠผ ๋ผ๋ฒจ */\n label?: string\n /** ํˆดํŒ ํ…์ŠคํŠธ */\n tooltip?: string\n /** ๋ฒ„ํŠผ ํด๋ฆญ ํ•ธ๋“ค๋Ÿฌ (rowData ์ „๋‹ฌ) */\n onClick: (rowData: any) => void\n /** ๋ฒ„ํŠผ ์Šคํƒ€์ผ ํƒ€์ž… */\n styletype?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\n /** ์กฐ๊ฑด๋ถ€ ํ‘œ์‹œ ํ•จ์ˆ˜ (rowData๋ฅผ ๋ฐ›์•„ boolean ๋ฐ˜ํ™˜) */\n show?: (rowData: any) => boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n /** ์ถ”๊ฐ€ ํด๋ž˜์Šค (์™ธ๋ถ€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์šฉ) */\n class?: string\n /** ๊ทธ๋ฆฌ๋“œ์— ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด */\n rowData: any[]\n /** ์ปฌ๋Ÿผ ์ •์˜ ๋ฐฐ์—ด */\n columnDefs: ColDef[]\n /** ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n pagination?: boolean\n /** ์ฒดํฌ๋ฐ•์Šค ์„ ํƒ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n checkbox?: boolean\n /** ํ–‰ ๋ฒˆํ˜ธ ํ‘œ์‹œ ์—ฌ๋ถ€ (Enterprise) */\n rowNumbers?: boolean\n /** ํ–‰๋ณ„ ์•ก์…˜ ๋ฒ„ํŠผ ๋ชฉ๋ก */\n actionButtons?: ActionButton[]\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 pagination: true,\n checkbox: false,\n rowNumbers: true,\n actionButtons: undefined,\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// 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: jTheme,\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// columnDefs ๋ณ€๊ฒฝ ๊ฐ์ง€\nwatch(\n () => props.columnDefs,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('columnDefs', processedColumnDefs.value)\n }\n },\n { deep: true },\n)\n\n// rowData ๋ณ€๊ฒฝ ๊ฐ์ง€\nwatch(\n () => props.rowData,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('rowData', props.rowData)\n }\n },\n { deep: true },\n)\n</script>\n\n<template>\n <div :class=\"cn('ag-grid-container', props.class)\">\n <AgGridVue\n :column-defs=\"processedColumnDefs\"\n :row-data=\"rowData\"\n :grid-options=\"gridOptions\"\n style=\"height: 100%; width: 100%\"\n @grid-ready=\"onGridReady\"\n @row-clicked=\"onRowClicked\"\n @row-double-clicked=\"onRowDoubleClicked\"\n @cell-clicked=\"onCellClicked\"\n @selection-changed=\"onSelectionChanged\"\n @cell-value-changed=\"onCellValueChanged\"\n />\n </div>\n</template>\n\n<style scoped>\n.ag-grid-container {\n width: 100%;\n height: 100%;\n}\n\n/* ============================================\n COMPACT FOOTER: Status Bar + Pagination ํ†ตํ•ฉ\n ============================================ */\n\n/* Status Bar ๋†’์ด ์ค„์ด๊ธฐ */\n:deep(.ag-status-bar) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 0.8125rem;\n}\n\n/* Status Bar ์ปดํฌ๋„ŒํŠธ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-status-bar-left),\n:deep(.ag-status-bar-center),\n:deep(.ag-status-bar-right) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Status Bar ํŒจ๋„๋“ค ๊ฐ„๊ฒฉ ์กฐ์ • */\n:deep(.ag-status-panel) {\n padding: 0;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Pagination Panel ๋†’์ด ์ค„์ด๊ธฐ */\n:deep(.ag-paging-panel) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n font-size: 0.8125rem;\n}\n\n/* Pagination ์ปดํฌ๋„ŒํŠธ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-page-size),\n:deep(.ag-paging-row-summary-panel) {\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Page Size Selector ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-page-size .ag-picker-field) {\n height: 24px;\n min-height: 24px;\n}\n\n:deep(.ag-paging-page-size .ag-picker-field-wrapper) {\n height: 24px;\n padding: 0 4px;\n}\n\n/* Pagination ๋ฒ„ํŠผ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-button) {\n height: 24px;\n width: 24px;\n padding: 2px;\n}\n\n/* Pagination ๋ฒ„ํŠผ ๋ž˜ํผ */\n:deep(.ag-paging-button-wrapper) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Row summary ํ…์ŠคํŠธ */\n:deep(.ag-paging-row-summary-panel-number) {\n line-height: 28px;\n}\n\n/* ========================================\n ํŒจํ„ด 9: AG-Grid ์Šคํƒ€์ผ ํ–ฅ์ƒ\n ======================================== */\n\n:deep(.ag-root-wrapper) {\n border: 1px solid hsl(var(--border));\n border-radius: 0.375rem;\n}\n\n:deep(.ag-header) {\n background-color: hsl(var(--muted));\n border-bottom: 1px solid hsl(var(--border));\n font-weight: 500;\n}\n\n:deep(.ag-header-cell) {\n color: hsl(var(--foreground));\n font-size: 0.75rem;\n padding: 0.5rem;\n}\n\n:deep(.ag-row) {\n transition: background-color 0.2s ease, border-left 0.2s ease;\n cursor: pointer;\n}\n\n:deep(.ag-row:hover) {\n background-color: hsl(var(--primary) / 0.05) !important;\n}\n\n:deep(.ag-row-selected) {\n background-color: hsl(var(--primary) / 0.1) !important;\n border-left: 2px solid hsl(var(--primary)) !important;\n}\n\n:deep(.ag-row-selected:hover) {\n background-color: hsl(var(--primary) / 0.15) !important;\n}\n\n:deep(.ag-cell) {\n line-height: 1.5;\n padding: 0.5rem;\n border-bottom: 1px solid hsl(var(--border) / 0.5);\n}\n\n:deep(.ag-paging-panel) {\n background-color: hsl(var(--muted) / 0.5);\n border-top: 1px solid hsl(var(--border));\n}\n</style>\n"],"names":["ModuleRegistry","AllCommunityModule","AllEnterpriseModule","jTheme","themeQuartz","props","__props","emit","__emit","gridApi","ref","gridColumnApi","ActionButtonsCellRenderer","params","buttons","rowData","visibleButtons","btn","container","button","e","actionButtonsColumn","computed","processedColumnDefs","columns","gridOptions","data","__expose","onGridReady","onRowClicked","event","onRowDoubleClicked","onCellClicked","onSelectionChanged","onCellValueChanged","watch","_createElementBlock","_normalizeClass","_unref","cn","_createVNode","AgGridVue"],"mappings":"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"}
@@ -1,23 +1,18 @@
1
- import { defineComponent as A, ref as d, computed as i, onMounted as H, onUnmounted as F, watch as w, createElementBlock as V, openBlock as I, normalizeClass as b, unref as x, createVNode as O } from "vue";
2
- import { AgGridVue as _ } from "ag-grid-vue3";
3
- import { cn as W } from "../../lib/utils.js";
4
- import { ModuleRegistry as z, AllCommunityModule as j } from "ag-grid-community";
5
- import { AllEnterpriseModule as K } from "ag-grid-enterprise";
6
- /* empty css */
7
- /* empty css */
8
- /* empty css */
9
- const ee = /* @__PURE__ */ A({
1
+ import { defineComponent as R, ref as g, computed as s, watch as h, createElementBlock as F, openBlock as N, normalizeClass as T, unref as C, createVNode as A } from "vue";
2
+ import { AgGridVue as M } from "ag-grid-vue3";
3
+ import { cn as H } from "../../lib/utils.js";
4
+ import { ModuleRegistry as V, AllCommunityModule as z, themeQuartz as I } from "ag-grid-community";
5
+ import { AllEnterpriseModule as W } from "ag-grid-enterprise";
6
+ const Q = /* @__PURE__ */ R({
10
7
  __name: "JGrid",
11
8
  props: {
12
9
  class: {},
13
10
  rowData: {},
14
11
  columnDefs: {},
15
- theme: { default: "ag-theme-balham" },
16
12
  pagination: { type: Boolean, default: !0 },
17
13
  checkbox: { type: Boolean, default: !1 },
18
14
  rowNumbers: { type: Boolean, default: !0 },
19
15
  actionButtons: { default: void 0 },
20
- autoDetectDarkMode: { type: Boolean, default: !0 },
21
16
  summaryColumn: { type: Boolean, default: !1 },
22
17
  hiddenColumn: { type: Boolean, default: !1 },
23
18
  enableGrouping: { type: Boolean, default: !0 },
@@ -37,27 +32,31 @@ const ee = /* @__PURE__ */ A({
37
32
  pivotMode: { type: Boolean, default: !1 }
38
33
  },
39
34
  emits: ["rowClicked", "rowDoubleClicked", "cellClicked", "selectionChanged", "cellValueChanged", "gridReady", "update:selectedRows"],
40
- setup(c, { expose: y, emit: k }) {
41
- z.registerModules([j, K]);
42
- const e = c, n = k, l = d(null), p = d(null), f = d(!1), m = () => {
43
- f.value = document.documentElement.classList.contains("dark");
44
- }, D = i(() => {
45
- if (!e.autoDetectDarkMode)
46
- return e.theme;
47
- const t = e.theme;
48
- return f.value ? t.includes("-dark") ? t : `${t}-dark` : t.replace(/-dark$/, "");
49
- }), P = (t) => {
50
- const s = e.actionButtons || [], v = t.data, C = s.filter((o) => o.show ? o.show(v) : !0);
51
- if (C.length === 0)
35
+ setup(u, { expose: v, emit: w }) {
36
+ V.registerModules([z, W]);
37
+ const x = I.withParams({
38
+ browserColorScheme: "inherit",
39
+ cellHorizontalPaddingScale: 1,
40
+ columnBorder: !0,
41
+ fontSize: 13,
42
+ headerBackgroundColor: "#FFFFFF",
43
+ headerFontWeight: 500,
44
+ headerVerticalPaddingScale: 0.7,
45
+ iconSize: 14,
46
+ oddRowBackgroundColor: "#CBE6F175",
47
+ rowVerticalPaddingScale: 0.5
48
+ }), e = u, n = w, a = g(null), d = g(null), y = (o) => {
49
+ const r = e.actionButtons || [], f = o.data, m = r.filter((t) => t.show ? t.show(f) : !0);
50
+ if (m.length === 0)
52
51
  return "";
53
- const u = document.createElement("div");
54
- return u.className = "flex items-center gap-1", C.forEach((o) => {
55
- const a = document.createElement("button");
56
- a.className = "px-2 py-1 text-xs border rounded transition-colors", o.styletype === "danger" ? a.className += " bg-red-50 border-red-400 text-red-700 hover:bg-red-100 dark:bg-red-950 dark:border-red-700 dark:text-red-400 dark:hover:bg-red-900" : a.className += " bg-gray-50 border-gray-400 text-gray-700 hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700", o.tooltip && (a.title = o.tooltip), o.label ? a.textContent = o.label : o.icon && (o.icon === "pencil" ? a.textContent = "์ˆ˜์ •" : o.icon === "trash2" || o.icon === "trash" ? a.textContent = "์‚ญ์ œ" : o.icon === "eye" ? a.textContent = "๋ณด๊ธฐ" : o.icon === "copy" ? a.textContent = "๋ณต์‚ฌ" : o.icon === "download" ? a.textContent = "๋‹ค์šด๋กœ๋“œ" : o.icon === "circleX" ? a.textContent = "๋น„ํ™œ์„ฑํ™”" : o.icon === "circleCheckBig" ? a.textContent = "ํ™œ์„ฑํ™”" : a.textContent = o.icon), a.addEventListener("click", (T) => {
57
- T.stopPropagation(), o.onClick(v);
58
- }), u.appendChild(a);
59
- }), u;
60
- }, g = i(() => !e.actionButtons || e.actionButtons.length === 0 ? null : {
52
+ const i = document.createElement("div");
53
+ return i.className = "flex items-center gap-1", m.forEach((t) => {
54
+ const l = document.createElement("button");
55
+ l.className = "px-2 py-1 text-xs border rounded transition-colors", t.styletype === "danger" ? l.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" : l.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", t.tooltip && (l.title = t.tooltip), t.label ? l.textContent = t.label : t.icon && (t.icon === "pencil" ? l.textContent = "์ˆ˜์ •" : t.icon === "trash2" || t.icon === "trash" ? l.textContent = "์‚ญ์ œ" : t.icon === "eye" ? l.textContent = "๋ณด๊ธฐ" : t.icon === "copy" ? l.textContent = "๋ณต์‚ฌ" : t.icon === "download" ? l.textContent = "๋‹ค์šด๋กœ๋“œ" : t.icon === "circleX" ? l.textContent = "๋น„ํ™œ์„ฑํ™”" : t.icon === "circleCheckBig" ? l.textContent = "ํ™œ์„ฑํ™”" : l.textContent = t.icon), l.addEventListener("click", (G) => {
56
+ G.stopPropagation(), t.onClick(f);
57
+ }), i.appendChild(l);
58
+ }), i;
59
+ }, c = s(() => !e.actionButtons || e.actionButtons.length === 0 ? null : {
61
60
  colId: "actionButtons",
62
61
  headerName: "์ž‘์—…",
63
62
  field: "_actions",
@@ -70,11 +69,11 @@ const ee = /* @__PURE__ */ A({
70
69
  resizable: !0,
71
70
  suppressNavigable: !0,
72
71
  suppressHeaderMenuButton: !0,
73
- cellRenderer: P,
72
+ cellRenderer: y,
74
73
  cellStyle: { display: "flex", justifyContent: "center", alignItems: "center" }
75
- }), h = i(() => {
76
- const t = [];
77
- return e.checkbox && t.push({
74
+ }), p = s(() => {
75
+ const o = [];
76
+ return e.checkbox && o.push({
78
77
  colId: "rowSelection",
79
78
  headerName: "",
80
79
  // field์™€ valueGetter ์ œ๊ฑฐ - AG Grid ๊ณต์‹ ๋ฐฉ์‹
@@ -90,10 +89,9 @@ const ee = /* @__PURE__ */ A({
90
89
  suppressNavigable: !0,
91
90
  suppressHeaderMenuButton: !0,
92
91
  cellStyle: { display: "flex", justifyContent: "center", alignItems: "center" }
93
- }), g.value && t.push(g.value), t.push(...e.columnDefs), t;
94
- }), B = i(() => ({
95
- // theme ์˜ต์…˜ ์ œ๊ฑฐ - ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ํ…Œ๋งˆ(:class="theme") ์‚ฌ์šฉ
96
- // columnDefs์™€ rowData๋Š” prop์œผ๋กœ ์ „๋‹ฌํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์ œ๊ฑฐ
92
+ }), c.value && o.push(c.value), o.push(...e.columnDefs), o;
93
+ }), b = s(() => ({
94
+ theme: x,
97
95
  pagination: e.pagination,
98
96
  rowSelection: e.checkbox ? "multiple" : void 0,
99
97
  // ์ฒดํฌ๋ฐ•์Šค ๋ชจ๋“œ์ผ ๋•Œ row ํด๋ฆญ์œผ๋กœ ์„ ํƒ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •
@@ -143,73 +141,62 @@ const ee = /* @__PURE__ */ A({
143
141
  suppressAggFuncInHeader: !1,
144
142
  // Tree Data ์„ค์ • (Enterprise)
145
143
  treeData: e.enableTreeData || void 0,
146
- getDataPath: e.enableTreeData ? e.getDataPath || ((s) => s.path || []) : void 0,
144
+ getDataPath: e.enableTreeData ? e.getDataPath || ((r) => r.path || []) : void 0,
147
145
  autoGroupColumnDef: e.enableTreeData && e.autoGroupColumnDef ? e.autoGroupColumnDef : void 0
148
146
  }));
149
- y({
150
- gridApi: l,
151
- gridColumnApi: p,
147
+ v({
148
+ gridApi: a,
149
+ gridColumnApi: d,
152
150
  exportToExcel: () => {
153
- l.value && e.enableExcelExport && l.value.exportDataAsExcel({
151
+ a.value && e.enableExcelExport && a.value.exportDataAsExcel({
154
152
  fileName: "grid-export.xlsx"
155
153
  });
156
154
  }
157
155
  });
158
- const E = (t) => {
159
- l.value = t.api, p.value = t.api, n("gridReady", t);
160
- }, M = (t) => {
161
- n("rowClicked", t);
162
- }, S = (t) => {
163
- n("rowDoubleClicked", t);
164
- }, G = (t) => {
165
- n("cellClicked", t);
166
- }, R = (t) => {
167
- n("selectionChanged", t), n("update:selectedRows", t.api.getSelectedRows());
168
- }, N = (t) => {
169
- n("cellValueChanged", t);
156
+ const P = (o) => {
157
+ a.value = o.api, d.value = o.api, n("gridReady", o);
158
+ }, B = (o) => {
159
+ n("rowClicked", o);
160
+ }, k = (o) => {
161
+ n("rowDoubleClicked", o);
162
+ }, D = (o) => {
163
+ n("cellClicked", o);
164
+ }, S = (o) => {
165
+ n("selectionChanged", o), n("update:selectedRows", o.api.getSelectedRows());
166
+ }, E = (o) => {
167
+ n("cellValueChanged", o);
170
168
  };
171
- let r = null;
172
- return H(() => {
173
- e.autoDetectDarkMode && (m(), r = new MutationObserver(() => {
174
- m();
175
- }), r.observe(document.documentElement, {
176
- attributes: !0,
177
- attributeFilter: ["class"]
178
- }));
179
- }), F(() => {
180
- r && r.disconnect();
181
- }), w(
169
+ return h(
182
170
  () => e.columnDefs,
183
171
  () => {
184
- l.value && l.value.setGridOption("columnDefs", h.value);
172
+ a.value && a.value.setGridOption("columnDefs", p.value);
185
173
  },
186
174
  { deep: !0 }
187
- ), w(
175
+ ), h(
188
176
  () => e.rowData,
189
177
  () => {
190
- l.value && l.value.setGridOption("rowData", e.rowData);
178
+ a.value && a.value.setGridOption("rowData", e.rowData);
191
179
  },
192
180
  { deep: !0 }
193
- ), (t, s) => (I(), V("div", {
194
- class: b(x(W)("ag-grid-container", e.class))
181
+ ), (o, r) => (N(), F("div", {
182
+ class: T(C(H)("ag-grid-container", e.class))
195
183
  }, [
196
- O(x(_), {
197
- "column-defs": h.value,
198
- "row-data": c.rowData,
199
- "grid-options": B.value,
200
- class: b(D.value),
184
+ A(C(M), {
185
+ "column-defs": p.value,
186
+ "row-data": u.rowData,
187
+ "grid-options": b.value,
201
188
  style: { height: "100%", width: "100%" },
202
- onGridReady: E,
203
- onRowClicked: M,
204
- onRowDoubleClicked: S,
205
- onCellClicked: G,
206
- onSelectionChanged: R,
207
- onCellValueChanged: N
208
- }, null, 8, ["column-defs", "row-data", "grid-options", "class"])
189
+ onGridReady: P,
190
+ onRowClicked: B,
191
+ onRowDoubleClicked: k,
192
+ onCellClicked: D,
193
+ onSelectionChanged: S,
194
+ onCellValueChanged: E
195
+ }, null, 8, ["column-defs", "row-data", "grid-options"])
209
196
  ], 2));
210
197
  }
211
198
  });
212
199
  export {
213
- ee as default
200
+ Q as default
214
201
  };
215
202
  //# sourceMappingURL=JGrid.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JGrid.vue2.js","sources":["../../../../src/components/atoms/JGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch, onMounted, onUnmounted } from 'vue'\nimport { AgGridVue } from 'ag-grid-vue3'\nimport { cn } from '@/lib/utils'\nimport type {\n ColDef,\n GridOptions,\n RowClickedEvent,\n CellClickedEvent,\n SelectionChangedEvent,\n CellValueChangedEvent,\n RowDoubleClickedEvent,\n GridReadyEvent,\n ICellRendererParams,\n} from 'ag-grid-community'\nimport { ModuleRegistry, AllCommunityModule } from 'ag-grid-community'\n// Enterprise ๋ชจ๋“ˆ import (Grouping, Pivot, Excel Export ๋“ฑ)\nimport { AllEnterpriseModule } from 'ag-grid-enterprise'\n// ag-grid.css๋Š” ์ œ๊ฑฐ - v34์—์„œ Theming API์™€ ์ถฉ๋Œ ๋ฐฉ์ง€\n// ํ…Œ๋งˆ CSS ํŒŒ์ผ๋งŒ ์‚ฌ์šฉ (ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ํ…Œ๋งˆ)\n// v34์—์„œ๋Š” dark ํ…Œ๋งˆ๊ฐ€ ๊ฐ™์€ CSS ํŒŒ์ผ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ์Œ\n// ์˜ˆ: ag-theme-quartz.css์— .ag-theme-quartz-dark ํด๋ž˜์Šค ํฌํ•จ\nimport 'ag-grid-community/styles/ag-theme-quartz.css'\nimport 'ag-grid-community/styles/ag-theme-alpine.css'\nimport 'ag-grid-community/styles/ag-theme-balham.css'\n\n// AG Grid ๋ชจ๋“ˆ ๋“ฑ๋ก (Community + Enterprise)\nModuleRegistry.registerModules([AllCommunityModule, AllEnterpriseModule])\n\n/**\n * Action Button ์ •์˜ ํƒ€์ž…\n */\nexport type ActionButton = {\n /** ๋ฒ„ํŠผ ์•„์ด์ฝ˜ ์ด๋ฆ„ (lucide) - label์ด ์—†์„ ๋•Œ ๊ธฐ๋ณธ ํ…์ŠคํŠธ ์ƒ์„ฑ์— ์‚ฌ์šฉ */\n icon?: string\n /** ๋ฒ„ํŠผ ๋ผ๋ฒจ */\n label?: string\n /** ํˆดํŒ ํ…์ŠคํŠธ */\n tooltip?: string\n /** ๋ฒ„ํŠผ ํด๋ฆญ ํ•ธ๋“ค๋Ÿฌ (rowData ์ „๋‹ฌ) */\n onClick: (rowData: any) => void\n /** ๋ฒ„ํŠผ ์Šคํƒ€์ผ ํƒ€์ž… */\n styletype?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\n /** ์กฐ๊ฑด๋ถ€ ํ‘œ์‹œ ํ•จ์ˆ˜ (rowData๋ฅผ ๋ฐ›์•„ boolean ๋ฐ˜ํ™˜) */\n show?: (rowData: any) => boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n /** ์ถ”๊ฐ€ ํด๋ž˜์Šค (์™ธ๋ถ€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์šฉ) */\n class?: string\n /** ๊ทธ๋ฆฌ๋“œ์— ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด */\n rowData: any[]\n /** ์ปฌ๋Ÿผ ์ •์˜ ๋ฐฐ์—ด */\n columnDefs: ColDef[]\n /** ag-Grid ํ…Œ๋งˆ */\n theme?: string\n /** ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n pagination?: boolean\n /** ์ฒดํฌ๋ฐ•์Šค ์„ ํƒ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n checkbox?: boolean\n /** ํ–‰ ๋ฒˆํ˜ธ ํ‘œ์‹œ ์—ฌ๋ถ€ (Enterprise) */\n rowNumbers?: boolean\n /** ํ–‰๋ณ„ ์•ก์…˜ ๋ฒ„ํŠผ ๋ชฉ๋ก */\n actionButtons?: ActionButton[]\n /** ๋‹คํฌ๋ชจ๋“œ ์ž๋™ ๊ฐ์ง€ ์—ฌ๋ถ€ */\n autoDetectDarkMode?: boolean\n /** ์š”์•ฝ ์ปฌ๋Ÿผ ํ‘œ์‹œ ์—ฌ๋ถ€ */\n summaryColumn?: boolean\n /** ์ˆจ๊น€ ์ปฌ๋Ÿผ ๊ด€๋ฆฌ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n hiddenColumn?: boolean\n /** ๊ทธ๋ฃนํ•‘ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enableGrouping?: boolean\n /** ํ”ผ๋ฒ— ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enablePivot?: boolean\n /** Excel ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enableExcelExport?: boolean\n /** Tree Data ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enableTreeData?: boolean\n /** Tree Data ๊ณ„์ธต ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ */\n getDataPath?: (data: any) => (string | number)[]\n /** Tree Data ๊ทธ๋ฃน ์ปฌ๋Ÿผ ์ •์˜ */\n autoGroupColumnDef?: ColDef\n /** ์„ ํƒ๋œ ํ–‰ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด (v-model:selected-rows) */\n selectedRows?: any[]\n /** ์ปฌ๋Ÿผ ํ˜ธ๋ฒ„ ํ•˜์ด๋ผ์ดํŠธ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n columnHover?: boolean\n /** Columns Tool Panel ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n enableColumnsToolPanel?: boolean\n /** Status Bar ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (Enterprise) */\n statusBar?: boolean\n /** ๊ฐ„์†Œํ™”๋œ Footer ๋ชจ๋“œ (Status Bar ์ œ๊ฑฐ, Pagination๋งŒ ํ‘œ์‹œ) */\n compactFooter?: boolean\n /** Row Group Panel ํ‘œ์‹œ ์—ฌ๋ถ€ ('always' | 'onlyWhenGrouping' | 'never') */\n rowGroupPanelShow?: 'always' | 'onlyWhenGrouping' | 'never'\n /** ๊ทธ๋ฃน ๊ธฐ๋ณธ ํ™•์žฅ ๋ ˆ๋ฒจ (-1: ๋ชจ๋‘ ๋‹ซํž˜, 0: ์ฒซ ๋ ˆ๋ฒจ๋งŒ, 1: 2๋ ˆ๋ฒจ๊นŒ์ง€...) */\n groupDefaultExpanded?: number\n /** Pivot Mode Panel ํ‘œ์‹œ ์—ฌ๋ถ€ */\n pivotPanelShow?: 'always' | 'onlyWhenPivoting' | 'never'\n /** Pivot Mode ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n pivotMode?: boolean\n }>(),\n {\n theme: 'ag-theme-balham',\n pagination: true,\n checkbox: false,\n rowNumbers: true,\n actionButtons: undefined,\n autoDetectDarkMode: true,\n summaryColumn: false,\n hiddenColumn: false,\n enableGrouping: true,\n enablePivot: false,\n enableExcelExport: false,\n enableTreeData: false,\n getDataPath: undefined,\n autoGroupColumnDef: undefined,\n selectedRows: () => [],\n columnHover: true,\n enableColumnsToolPanel: true,\n statusBar: true,\n compactFooter: false,\n rowGroupPanelShow: 'never',\n groupDefaultExpanded: -1,\n pivotPanelShow: 'never',\n pivotMode: false,\n },\n)\n\nconst emit = defineEmits<{\n /** ํ–‰ ํด๋ฆญ ์ด๋ฒคํŠธ */\n rowClicked: [event: RowClickedEvent]\n /** ํ–‰ ๋”๋ธ”ํด๋ฆญ ์ด๋ฒคํŠธ */\n rowDoubleClicked: [event: RowDoubleClickedEvent]\n /** ์…€ ํด๋ฆญ ์ด๋ฒคํŠธ */\n cellClicked: [event: CellClickedEvent]\n /** ์„ ํƒ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ (์ฒดํฌ๋ฐ•์Šค ๋“ฑ) */\n selectionChanged: [event: SelectionChangedEvent]\n /** ์…€ ๊ฐ’ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ */\n cellValueChanged: [event: CellValueChangedEvent]\n /** ๊ทธ๋ฆฌ๋“œ ์ค€๋น„ ์™„๋ฃŒ ์ด๋ฒคํŠธ */\n gridReady: [event: GridReadyEvent]\n /** ์„ ํƒ๋œ ํ–‰ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ (v-model:selected-rows) */\n 'update:selectedRows': [rows: any[]]\n}>()\n\n// ag-Grid ์ธ์Šคํ„ด์Šค ์ฐธ์กฐ\nconst gridApi = ref<any>(null)\nconst gridColumnApi = ref<any>(null)\n\n// ๋‹คํฌ๋ชจ๋“œ ์ƒํƒœ\nconst isDarkMode = ref(false)\n\n// ๋‹คํฌ๋ชจ๋“œ ๊ฐ์ง€ ํ•จ์ˆ˜\nconst detectDarkMode = () => {\n isDarkMode.value = document.documentElement.classList.contains('dark')\n}\n\n// ํ˜„์žฌ ํ…Œ๋งˆ ๊ณ„์‚ฐ (๋‹คํฌ๋ชจ๋“œ ์ž๋™ ์ „ํ™˜)\nconst currentTheme = computed(() => {\n if (!props.autoDetectDarkMode) {\n return props.theme\n }\n \n const baseTheme = props.theme\n if (isDarkMode.value) {\n // ์ด๋ฏธ dark ํ…Œ๋งˆ์ธ ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ์œ ์ง€, ์•„๋‹ˆ๋ฉด -dark ์ถ”๊ฐ€\n return baseTheme.includes('-dark') ? baseTheme : `${baseTheme}-dark`\n } else {\n // dark ํ…Œ๋งˆ ์ œ๊ฑฐ\n return baseTheme.replace(/-dark$/, '')\n }\n})\n\n// Action Buttons Cell Renderer - ํ•จ์ˆ˜ํ˜•์œผ๋กœ DOM ์ง์ ‘ ์ƒ์„ฑ\nconst ActionButtonsCellRenderer = (params: ICellRendererParams) => {\n const buttons = props.actionButtons || []\n const rowData = params.data\n \n // ํ‘œ์‹œํ•  ๋ฒ„ํŠผ ํ•„ํ„ฐ๋ง\n const visibleButtons = buttons.filter(btn => {\n if (btn.show) {\n return btn.show(rowData)\n }\n return true\n })\n \n if (visibleButtons.length === 0) {\n return ''\n }\n \n // ์ปจํ…Œ์ด๋„ˆ div ์ƒ์„ฑ\n const container = document.createElement('div')\n container.className = 'flex items-center gap-1'\n \n // ๊ฐ ๋ฒ„ํŠผ ์ƒ์„ฑ\n visibleButtons.forEach((btn) => {\n const button = document.createElement('button')\n button.className = 'px-2 py-1 text-xs border rounded transition-colors'\n \n // styletype์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์ถ”๊ฐ€\n if (btn.styletype === 'danger') {\n button.className += ' bg-red-50 border-red-400 text-red-700 hover:bg-red-100 dark:bg-red-950 dark:border-red-700 dark:text-red-400 dark:hover:bg-red-900'\n } else {\n button.className += ' bg-gray-50 border-gray-400 text-gray-700 hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700'\n }\n \n // tooltip\n if (btn.tooltip) {\n button.title = btn.tooltip\n }\n \n // ๋ผ๋ฒจ ์ถ”๊ฐ€ (ํ…์ŠคํŠธ ๋ฒ„ํŠผ)\n if (btn.label) {\n button.textContent = btn.label\n } else if (btn.icon) {\n // ๋ผ๋ฒจ์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ ํ…์ŠคํŠธ ์ƒ์„ฑ\n if (btn.icon === 'pencil') {\n button.textContent = '์ˆ˜์ •'\n } else if (btn.icon === 'trash2' || btn.icon === 'trash') {\n button.textContent = '์‚ญ์ œ'\n } else if (btn.icon === 'eye') {\n button.textContent = '๋ณด๊ธฐ'\n } else if (btn.icon === 'copy') {\n button.textContent = '๋ณต์‚ฌ'\n } else if (btn.icon === 'download') {\n button.textContent = '๋‹ค์šด๋กœ๋“œ'\n } else if (btn.icon === 'circleX') {\n button.textContent = '๋น„ํ™œ์„ฑํ™”'\n } else if (btn.icon === 'circleCheckBig') {\n button.textContent = 'ํ™œ์„ฑํ™”'\n } else {\n button.textContent = btn.icon\n }\n }\n \n // ํด๋ฆญ ์ด๋ฒคํŠธ\n button.addEventListener('click', (e) => {\n e.stopPropagation()\n btn.onClick(rowData)\n })\n \n container.appendChild(button)\n })\n \n return container\n}\n\n// Action Buttons ์ปฌ๋Ÿผ ์ •์˜\nconst actionButtonsColumn = computed<ColDef | null>(() => {\n if (!props.actionButtons || props.actionButtons.length === 0) {\n return null\n }\n \n return {\n colId: 'actionButtons',\n headerName: '์ž‘์—…',\n field: '_actions',\n width: 120,\n minWidth: 80,\n maxWidth: 200,\n lockPosition: 'left' as const,\n sortable: false,\n filter: false,\n resizable: true,\n suppressNavigable: true,\n suppressHeaderMenuButton: true,\n cellRenderer: ActionButtonsCellRenderer,\n cellStyle: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\n }\n})\n\n// checkbox ํ™œ์„ฑํ™” ๋ฐ ์ถ”๊ฐ€ ์ปฌ๋Ÿผ ์ฒ˜๋ฆฌ\nconst processedColumnDefs = computed(() => {\n const columns: ColDef[] = []\n \n // 1. Checkbox ์ปฌ๋Ÿผ (์ตœ์šฐ์„ )\n if (props.checkbox) {\n columns.push({\n colId: 'rowSelection',\n headerName: '',\n // field์™€ valueGetter ์ œ๊ฑฐ - AG Grid ๊ณต์‹ ๋ฐฉ์‹\n width: 50,\n minWidth: 50,\n maxWidth: 50,\n lockPosition: 'left' as const,\n checkboxSelection: true,\n headerCheckboxSelection: true,\n sortable: false,\n filter: false,\n resizable: false,\n suppressNavigable: true,\n suppressHeaderMenuButton: true,\n cellStyle: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\n })\n }\n \n // 2. Action Buttons ์ปฌ๋Ÿผ\n if (actionButtonsColumn.value) {\n columns.push(actionButtonsColumn.value)\n }\n \n // 3. ์‚ฌ์šฉ์ž ์ •์˜ ์ปฌ๋Ÿผ๋“ค (Row Numbers๋Š” AG Grid๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€)\n columns.push(...props.columnDefs)\n \n return columns\n})\n\n// Grid ์˜ต์…˜ ์„ค์ •\nconst gridOptions = computed<GridOptions>(() => {\n const options: GridOptions = {\n // theme ์˜ต์…˜ ์ œ๊ฑฐ - ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ํ…Œ๋งˆ(:class=\"theme\") ์‚ฌ์šฉ\n // columnDefs์™€ rowData๋Š” prop์œผ๋กœ ์ „๋‹ฌํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์ œ๊ฑฐ\n pagination: props.pagination,\n rowSelection: props.checkbox ? 'multiple' : undefined,\n // ์ฒดํฌ๋ฐ•์Šค ๋ชจ๋“œ์ผ ๋•Œ row ํด๋ฆญ์œผ๋กœ ์„ ํƒ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •\n // ์ฒดํฌ๋ฐ•์Šค๋งŒ์œผ๋กœ ์„ ํƒ์„ ์ œ์–ดํ•˜๋„๋ก ํ•จ\n suppressRowClickSelection: props.checkbox,\n\n // Row Numbers (Enterprise) - AG Grid ํ‘œ์ค€ ๋ฐฉ์‹\n rowNumbers: props.rowNumbers,\n\n // Column Hover Highlight\n columnHoverHighlight: props.columnHover,\n\n // Enterprise ๊ธฐ๋Šฅ ์˜ต์…˜\n sideBar: props.enableColumnsToolPanel || props.enableGrouping || props.enablePivot ? {\n toolPanels: [\n {\n id: 'columns',\n labelDefault: 'Columns',\n labelKey: 'columns',\n iconKey: 'columns',\n toolPanel: 'agColumnsToolPanel',\n toolPanelParams: {\n suppressRowGroups: !props.enableGrouping,\n suppressValues: !props.enablePivot,\n suppressPivots: !props.enablePivot,\n suppressPivotMode: !props.enablePivot,\n },\n },\n ],\n defaultToolPanel: '', // ์ดˆ๊ธฐ์—๋Š” ์ ‘ํžŒ ์ƒํƒœ\n } : undefined,\n\n // Status Bar (Enterprise)\n // compactFooter ๋ชจ๋“œ์—์„œ๋Š” Status Bar ๋น„ํ™œ์„ฑํ™”\n statusBar: (props.statusBar && !props.compactFooter) ? {\n statusPanels: [\n { statusPanel: 'agTotalAndFilteredRowCountComponent', align: 'left' as const },\n { statusPanel: 'agSelectedRowCountComponent', align: 'left' as const },\n { statusPanel: 'agAggregationComponent', align: 'right' as const },\n ],\n } : undefined,\n\n // Row Group Panel ์„ค์ • (Enterprise) - ๊ทธ๋ฆฌ๋“œ ์ƒ๋‹จ์— ๋“œ๋ž˜๊ทธ ์˜์—ญ ํ‘œ์‹œ\n rowGroupPanelShow: props.rowGroupPanelShow !== 'never' ? props.rowGroupPanelShow : undefined,\n\n // Pivot Panel ์„ค์ • (Enterprise) - ํ”ผ๋ฒ— ๋ชจ๋“œ์šฉ ๋“œ๋ž˜๊ทธ ์˜์—ญ\n pivotPanelShow: props.pivotPanelShow !== 'never' ? props.pivotPanelShow : undefined,\n \n // Pivot Mode ํ™œ์„ฑํ™”\n pivotMode: props.pivotMode,\n\n // ๊ทธ๋ฃนํ•‘ ๊ธฐ๋ณธ ์„ค์ •\n groupDefaultExpanded: props.groupDefaultExpanded,\n suppressAggFuncInHeader: false,\n\n // Tree Data ์„ค์ • (Enterprise)\n treeData: props.enableTreeData || undefined,\n getDataPath: props.enableTreeData\n ? (props.getDataPath || ((data: any) => data.path || []))\n : undefined,\n autoGroupColumnDef: props.enableTreeData && props.autoGroupColumnDef\n ? props.autoGroupColumnDef\n : undefined,\n }\n\n return options\n})\n\n// Excel ๋‚ด๋ณด๋‚ด๊ธฐ ํ•จ์ˆ˜ (์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก expose)\nconst exportToExcel = () => {\n if (gridApi.value && props.enableExcelExport) {\n gridApi.value.exportDataAsExcel({\n fileName: 'grid-export.xlsx',\n })\n }\n}\n\n// ๊ทธ๋ฆฌ๋“œ API๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœ\ndefineExpose({\n gridApi,\n gridColumnApi,\n exportToExcel,\n})\n\n// Grid ready ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onGridReady = (params: GridReadyEvent) => {\n gridApi.value = params.api\n gridColumnApi.value = params.api // v34์—์„œ columnApi๋Š” deprecated\n emit('gridReady', params)\n}\n\n// ํ–‰ ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onRowClicked = (event: RowClickedEvent) => {\n emit('rowClicked', event)\n}\n\n// ํ–‰ ๋”๋ธ”ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onRowDoubleClicked = (event: RowDoubleClickedEvent) => {\n emit('rowDoubleClicked', event)\n}\n\n// ์…€ ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onCellClicked = (event: CellClickedEvent) => {\n emit('cellClicked', event)\n}\n\n// ์„ ํƒ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onSelectionChanged = (event: SelectionChangedEvent) => {\n emit('selectionChanged', event)\n emit('update:selectedRows', event.api.getSelectedRows())\n}\n\n// ์…€ ๊ฐ’ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nconst onCellValueChanged = (event: CellValueChangedEvent) => {\n emit('cellValueChanged', event)\n}\n\n// MutationObserver๋กœ ๋‹คํฌ๋ชจ๋“œ ๋ณ€๊ฒฝ ๊ฐ์ง€\nlet darkModeObserver: MutationObserver | null = null\n\nonMounted(() => {\n if (props.autoDetectDarkMode) {\n // ์ดˆ๊ธฐ ๋‹คํฌ๋ชจ๋“œ ์ƒํƒœ ๊ฐ์ง€\n detectDarkMode()\n \n // MutationObserver๋กœ class ๋ณ€๊ฒฝ ๊ฐ์ง€\n darkModeObserver = new MutationObserver(() => {\n detectDarkMode()\n })\n \n darkModeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n }\n})\n\nonUnmounted(() => {\n if (darkModeObserver) {\n darkModeObserver.disconnect()\n }\n})\n\n// columnDefs ๋ณ€๊ฒฝ ๊ฐ์ง€\nwatch(\n () => props.columnDefs,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('columnDefs', processedColumnDefs.value)\n }\n },\n { deep: true },\n)\n\n// rowData ๋ณ€๊ฒฝ ๊ฐ์ง€\nwatch(\n () => props.rowData,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('rowData', props.rowData)\n }\n },\n { deep: true },\n)\n</script>\n\n<template>\n <div :class=\"cn('ag-grid-container', props.class)\">\n <AgGridVue\n :column-defs=\"processedColumnDefs\"\n :row-data=\"rowData\"\n :grid-options=\"gridOptions\"\n :class=\"currentTheme\"\n style=\"height: 100%; width: 100%\"\n @grid-ready=\"onGridReady\"\n @row-clicked=\"onRowClicked\"\n @row-double-clicked=\"onRowDoubleClicked\"\n @cell-clicked=\"onCellClicked\"\n @selection-changed=\"onSelectionChanged\"\n @cell-value-changed=\"onCellValueChanged\"\n />\n </div>\n</template>\n\n<style scoped>\n.ag-grid-container {\n width: 100%;\n height: 100%;\n}\n\n/* ============================================\n COMPACT FOOTER: Status Bar + Pagination ํ†ตํ•ฉ\n ============================================ */\n\n/* Status Bar ๋†’์ด ์ค„์ด๊ธฐ */\n:deep(.ag-status-bar) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 0.8125rem;\n}\n\n/* Status Bar ์ปดํฌ๋„ŒํŠธ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-status-bar-left),\n:deep(.ag-status-bar-center),\n:deep(.ag-status-bar-right) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Status Bar ํŒจ๋„๋“ค ๊ฐ„๊ฒฉ ์กฐ์ • */\n:deep(.ag-status-panel) {\n padding: 0;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Pagination Panel ๋†’์ด ์ค„์ด๊ธฐ */\n:deep(.ag-paging-panel) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n font-size: 0.8125rem;\n}\n\n/* Pagination ์ปดํฌ๋„ŒํŠธ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-page-size),\n:deep(.ag-paging-row-summary-panel) {\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Page Size Selector ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-page-size .ag-picker-field) {\n height: 24px;\n min-height: 24px;\n}\n\n:deep(.ag-paging-page-size .ag-picker-field-wrapper) {\n height: 24px;\n padding: 0 4px;\n}\n\n/* Pagination ๋ฒ„ํŠผ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-button) {\n height: 24px;\n width: 24px;\n padding: 2px;\n}\n\n/* Pagination ๋ฒ„ํŠผ ๋ž˜ํผ */\n:deep(.ag-paging-button-wrapper) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Row summary ํ…์ŠคํŠธ */\n:deep(.ag-paging-row-summary-panel-number) {\n line-height: 28px;\n}\n\n/* ========================================\n ํŒจํ„ด 9: AG-Grid ์Šคํƒ€์ผ ํ–ฅ์ƒ\n ======================================== */\n\n:deep(.ag-root-wrapper) {\n border: 1px solid hsl(var(--border));\n border-radius: 0.375rem;\n}\n\n:deep(.ag-header) {\n background-color: hsl(var(--muted));\n border-bottom: 1px solid hsl(var(--border));\n font-weight: 500;\n}\n\n:deep(.ag-header-cell) {\n color: hsl(var(--foreground));\n font-size: 0.75rem;\n padding: 0.5rem;\n}\n\n:deep(.ag-row) {\n transition: background-color 0.2s ease, border-left 0.2s ease;\n cursor: pointer;\n}\n\n:deep(.ag-row:hover) {\n background-color: hsl(var(--primary) / 0.05) !important;\n}\n\n:deep(.ag-row-selected) {\n background-color: hsl(var(--primary) / 0.1) !important;\n border-left: 2px solid hsl(var(--primary)) !important;\n}\n\n:deep(.ag-row-selected:hover) {\n background-color: hsl(var(--primary) / 0.15) !important;\n}\n\n:deep(.ag-cell) {\n line-height: 1.5;\n padding: 0.5rem;\n border-bottom: 1px solid hsl(var(--border) / 0.5);\n}\n\n:deep(.ag-paging-panel) {\n background-color: hsl(var(--muted) / 0.5);\n border-top: 1px solid hsl(var(--border));\n}\n</style>\n"],"names":["ModuleRegistry","AllCommunityModule","AllEnterpriseModule","props","__props","emit","__emit","gridApi","ref","gridColumnApi","isDarkMode","detectDarkMode","currentTheme","computed","baseTheme","ActionButtonsCellRenderer","params","buttons","rowData","visibleButtons","btn","container","button","e","actionButtonsColumn","processedColumnDefs","columns","gridOptions","data","__expose","onGridReady","onRowClicked","event","onRowDoubleClicked","onCellClicked","onSelectionChanged","onCellValueChanged","darkModeObserver","onMounted","onUnmounted","watch","_createElementBlock","_normalizeClass","_unref","cn","_createVNode","AgGridVue"],"mappings":"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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 } from 'vue'\nimport { AgGridVue } from 'ag-grid-vue3'\nimport { cn } from '@/lib/utils'\nimport type {\n ColDef,\n GridOptions,\n RowClickedEvent,\n CellClickedEvent,\n SelectionChangedEvent,\n CellValueChangedEvent,\n RowDoubleClickedEvent,\n GridReadyEvent,\n ICellRendererParams,\n} from 'ag-grid-community'\nimport { ModuleRegistry, AllCommunityModule, themeQuartz } from 'ag-grid-community'\n// Enterprise ๋ชจ๋“ˆ import (Grouping, Pivot, Excel Export ๋“ฑ)\nimport { AllEnterpriseModule } from 'ag-grid-enterprise'\n\n// AG Grid ๋ชจ๋“ˆ ๋“ฑ๋ก (Community + Enterprise)\nModuleRegistry.registerModules([AllCommunityModule, AllEnterpriseModule])\n\n// Theme Builder API: JLIS ์ปค์Šคํ…€ ํ…Œ๋งˆ (browserColorScheme: 'inherit' โ†’ ๋‹คํฌ๋ชจ๋“œ ์ž๋™ ๊ฐ์ง€)\nconst jTheme = themeQuartz.withParams({\n browserColorScheme: 'inherit',\n cellHorizontalPaddingScale: 1,\n columnBorder: true,\n fontSize: 13,\n headerBackgroundColor: '#FFFFFF',\n headerFontWeight: 500,\n headerVerticalPaddingScale: 0.7,\n iconSize: 14,\n oddRowBackgroundColor: '#CBE6F175',\n rowVerticalPaddingScale: 0.5,\n})\n\n/**\n * Action Button ์ •์˜ ํƒ€์ž…\n */\nexport type ActionButton = {\n /** ๋ฒ„ํŠผ ์•„์ด์ฝ˜ ์ด๋ฆ„ (lucide) - label์ด ์—†์„ ๋•Œ ๊ธฐ๋ณธ ํ…์ŠคํŠธ ์ƒ์„ฑ์— ์‚ฌ์šฉ */\n icon?: string\n /** ๋ฒ„ํŠผ ๋ผ๋ฒจ */\n label?: string\n /** ํˆดํŒ ํ…์ŠคํŠธ */\n tooltip?: string\n /** ๋ฒ„ํŠผ ํด๋ฆญ ํ•ธ๋“ค๋Ÿฌ (rowData ์ „๋‹ฌ) */\n onClick: (rowData: any) => void\n /** ๋ฒ„ํŠผ ์Šคํƒ€์ผ ํƒ€์ž… */\n styletype?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\n /** ์กฐ๊ฑด๋ถ€ ํ‘œ์‹œ ํ•จ์ˆ˜ (rowData๋ฅผ ๋ฐ›์•„ boolean ๋ฐ˜ํ™˜) */\n show?: (rowData: any) => boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n /** ์ถ”๊ฐ€ ํด๋ž˜์Šค (์™ธ๋ถ€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์šฉ) */\n class?: string\n /** ๊ทธ๋ฆฌ๋“œ์— ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด */\n rowData: any[]\n /** ์ปฌ๋Ÿผ ์ •์˜ ๋ฐฐ์—ด */\n columnDefs: ColDef[]\n /** ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n pagination?: boolean\n /** ์ฒดํฌ๋ฐ•์Šค ์„ ํƒ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */\n checkbox?: boolean\n /** ํ–‰ ๋ฒˆํ˜ธ ํ‘œ์‹œ ์—ฌ๋ถ€ (Enterprise) */\n rowNumbers?: boolean\n /** ํ–‰๋ณ„ ์•ก์…˜ ๋ฒ„ํŠผ ๋ชฉ๋ก */\n actionButtons?: ActionButton[]\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 pagination: true,\n checkbox: false,\n rowNumbers: true,\n actionButtons: undefined,\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// 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: jTheme,\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// columnDefs ๋ณ€๊ฒฝ ๊ฐ์ง€\nwatch(\n () => props.columnDefs,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('columnDefs', processedColumnDefs.value)\n }\n },\n { deep: true },\n)\n\n// rowData ๋ณ€๊ฒฝ ๊ฐ์ง€\nwatch(\n () => props.rowData,\n () => {\n if (gridApi.value) {\n gridApi.value.setGridOption('rowData', props.rowData)\n }\n },\n { deep: true },\n)\n</script>\n\n<template>\n <div :class=\"cn('ag-grid-container', props.class)\">\n <AgGridVue\n :column-defs=\"processedColumnDefs\"\n :row-data=\"rowData\"\n :grid-options=\"gridOptions\"\n style=\"height: 100%; width: 100%\"\n @grid-ready=\"onGridReady\"\n @row-clicked=\"onRowClicked\"\n @row-double-clicked=\"onRowDoubleClicked\"\n @cell-clicked=\"onCellClicked\"\n @selection-changed=\"onSelectionChanged\"\n @cell-value-changed=\"onCellValueChanged\"\n />\n </div>\n</template>\n\n<style scoped>\n.ag-grid-container {\n width: 100%;\n height: 100%;\n}\n\n/* ============================================\n COMPACT FOOTER: Status Bar + Pagination ํ†ตํ•ฉ\n ============================================ */\n\n/* Status Bar ๋†’์ด ์ค„์ด๊ธฐ */\n:deep(.ag-status-bar) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 0.8125rem;\n}\n\n/* Status Bar ์ปดํฌ๋„ŒํŠธ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-status-bar-left),\n:deep(.ag-status-bar-center),\n:deep(.ag-status-bar-right) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Status Bar ํŒจ๋„๋“ค ๊ฐ„๊ฒฉ ์กฐ์ • */\n:deep(.ag-status-panel) {\n padding: 0;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Pagination Panel ๋†’์ด ์ค„์ด๊ธฐ */\n:deep(.ag-paging-panel) {\n min-height: 28px !important;\n height: 28px !important;\n padding: 0 12px !important;\n border-top: 1px solid var(--ag-border-color);\n font-size: 0.8125rem;\n}\n\n/* Pagination ์ปดํฌ๋„ŒํŠธ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-page-size),\n:deep(.ag-paging-row-summary-panel) {\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n/* Page Size Selector ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-page-size .ag-picker-field) {\n height: 24px;\n min-height: 24px;\n}\n\n:deep(.ag-paging-page-size .ag-picker-field-wrapper) {\n height: 24px;\n padding: 0 4px;\n}\n\n/* Pagination ๋ฒ„ํŠผ๋“ค ๋†’์ด ์กฐ์ • */\n:deep(.ag-paging-button) {\n height: 24px;\n width: 24px;\n padding: 2px;\n}\n\n/* Pagination ๋ฒ„ํŠผ ๋ž˜ํผ */\n:deep(.ag-paging-button-wrapper) {\n height: 28px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Row summary ํ…์ŠคํŠธ */\n:deep(.ag-paging-row-summary-panel-number) {\n line-height: 28px;\n}\n\n/* ========================================\n ํŒจํ„ด 9: AG-Grid ์Šคํƒ€์ผ ํ–ฅ์ƒ\n ======================================== */\n\n:deep(.ag-root-wrapper) {\n border: 1px solid hsl(var(--border));\n border-radius: 0.375rem;\n}\n\n:deep(.ag-header) {\n background-color: hsl(var(--muted));\n border-bottom: 1px solid hsl(var(--border));\n font-weight: 500;\n}\n\n:deep(.ag-header-cell) {\n color: hsl(var(--foreground));\n font-size: 0.75rem;\n padding: 0.5rem;\n}\n\n:deep(.ag-row) {\n transition: background-color 0.2s ease, border-left 0.2s ease;\n cursor: pointer;\n}\n\n:deep(.ag-row:hover) {\n background-color: hsl(var(--primary) / 0.05) !important;\n}\n\n:deep(.ag-row-selected) {\n background-color: hsl(var(--primary) / 0.1) !important;\n border-left: 2px solid hsl(var(--primary)) !important;\n}\n\n:deep(.ag-row-selected:hover) {\n background-color: hsl(var(--primary) / 0.15) !important;\n}\n\n:deep(.ag-cell) {\n line-height: 1.5;\n padding: 0.5rem;\n border-bottom: 1px solid hsl(var(--border) / 0.5);\n}\n\n:deep(.ag-paging-panel) {\n background-color: hsl(var(--muted) / 0.5);\n border-top: 1px solid hsl(var(--border));\n}\n</style>\n"],"names":["ModuleRegistry","AllCommunityModule","AllEnterpriseModule","jTheme","themeQuartz","props","__props","emit","__emit","gridApi","ref","gridColumnApi","ActionButtonsCellRenderer","params","buttons","rowData","visibleButtons","btn","container","button","e","actionButtonsColumn","computed","processedColumnDefs","columns","gridOptions","data","__expose","onGridReady","onRowClicked","event","onRowDoubleClicked","onCellClicked","onSelectionChanged","onCellValueChanged","watch","_createElementBlock","_normalizeClass","_unref","cn","_createVNode","AgGridVue"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,IAAAA,EAAe,gBAAgB,CAACC,GAAoBC,CAAmB,CAAC;AAGxE,UAAMC,IAASC,EAAY,WAAW;AAAA,MACpC,oBAAoB;AAAA,MACpB,4BAA4B;AAAA,MAC5B,cAAc;AAAA,MACd,UAAU;AAAA,MACV,uBAAuB;AAAA,MACvB,kBAAkB;AAAA,MAClB,4BAA4B;AAAA,MAC5B,UAAU;AAAA,MACV,uBAAuB;AAAA,MACvB,yBAAyB;AAAA,IAAA,CAC1B,GAoBKC,IAAQC,GA4ERC,IAAOC,GAkBPC,IAAUC,EAAS,IAAI,GACvBC,IAAgBD,EAAS,IAAI,GAG7BE,IAA4B,CAACC,MAAgC;AACjE,YAAMC,IAAUT,EAAM,iBAAiB,CAAA,GACjCU,IAAUF,EAAO,MAGjBG,IAAiBF,EAAQ,OAAO,CAAAG,MAChCA,EAAI,OACCA,EAAI,KAAKF,CAAO,IAElB,EACR;AAED,UAAIC,EAAe,WAAW;AAC5B,eAAO;AAIT,YAAME,IAAY,SAAS,cAAc,KAAK;AAC9C,aAAAA,EAAU,YAAY,2BAGtBF,EAAe,QAAQ,CAACC,MAAQ;AAC9B,cAAME,IAAS,SAAS,cAAc,QAAQ;AAC9C,QAAAA,EAAO,YAAY,sDAGfF,EAAI,cAAc,WACpBE,EAAO,aAAa,wIAEpBA,EAAO,aAAa,+IAIlBF,EAAI,YACNE,EAAO,QAAQF,EAAI,UAIjBA,EAAI,QACNE,EAAO,cAAcF,EAAI,QAChBA,EAAI,SAETA,EAAI,SAAS,WACfE,EAAO,cAAc,OACZF,EAAI,SAAS,YAAYA,EAAI,SAAS,UAC/CE,EAAO,cAAc,OACZF,EAAI,SAAS,QACtBE,EAAO,cAAc,OACZF,EAAI,SAAS,SACtBE,EAAO,cAAc,OACZF,EAAI,SAAS,aACtBE,EAAO,cAAc,SACZF,EAAI,SAAS,YACtBE,EAAO,cAAc,SACZF,EAAI,SAAS,mBACtBE,EAAO,cAAc,QAErBA,EAAO,cAAcF,EAAI,OAK7BE,EAAO,iBAAiB,SAAS,CAACC,MAAM;AACtC,UAAAA,EAAE,gBAAA,GACFH,EAAI,QAAQF,CAAO;AAAA,QACrB,CAAC,GAEDG,EAAU,YAAYC,CAAM;AAAA,MAC9B,CAAC,GAEMD;AAAA,IACT,GAGMG,IAAsBC,EAAwB,MAC9C,CAACjB,EAAM,iBAAiBA,EAAM,cAAc,WAAW,IAClD,OAGF;AAAA,MACL,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,cAAc;AAAA,MACd,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,mBAAmB;AAAA,MACnB,0BAA0B;AAAA,MAC1B,cAAcO;AAAA,MACd,WAAW,EAAE,SAAS,QAAQ,gBAAgB,UAAU,YAAY,SAAA;AAAA,IAAS,CAEhF,GAGKW,IAAsBD,EAAS,MAAM;AACzC,YAAME,IAAoB,CAAA;AAG1B,aAAInB,EAAM,YACRmB,EAAQ,KAAK;AAAA,QACX,OAAO;AAAA,QACP,YAAY;AAAA;AAAA,QAEZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,yBAAyB;AAAA,QACzB,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,mBAAmB;AAAA,QACnB,0BAA0B;AAAA,QAC1B,WAAW,EAAE,SAAS,QAAQ,gBAAgB,UAAU,YAAY,SAAA;AAAA,MAAS,CAC9E,GAICH,EAAoB,SACtBG,EAAQ,KAAKH,EAAoB,KAAK,GAIxCG,EAAQ,KAAK,GAAGnB,EAAM,UAAU,GAEzBmB;AAAA,IACT,CAAC,GAGKC,IAAcH,EAAsB,OACX;AAAA,MAC3B,OAAOnB;AAAA,MACP,YAAYE,EAAM;AAAA,MAClB,cAAcA,EAAM,WAAW,aAAa;AAAA;AAAA;AAAA,MAG5C,2BAA2BA,EAAM;AAAA;AAAA,MAGjC,YAAYA,EAAM;AAAA;AAAA,MAGlB,sBAAsBA,EAAM;AAAA;AAAA,MAG5B,SAASA,EAAM,0BAA0BA,EAAM,kBAAkBA,EAAM,cAAc;AAAA,QACnF,YAAY;AAAA,UACV;AAAA,YACE,IAAI;AAAA,YACJ,cAAc;AAAA,YACd,UAAU;AAAA,YACV,SAAS;AAAA,YACT,WAAW;AAAA,YACX,iBAAiB;AAAA,cACf,mBAAmB,CAACA,EAAM;AAAA,cAC1B,gBAAgB,CAACA,EAAM;AAAA,cACvB,gBAAgB,CAACA,EAAM;AAAA,cACvB,mBAAmB,CAACA,EAAM;AAAA,YAAA;AAAA,UAC5B;AAAA,QACF;AAAA,QAEF,kBAAkB;AAAA;AAAA,MAAA,IAChB;AAAA;AAAA;AAAA,MAIJ,WAAYA,EAAM,aAAa,CAACA,EAAM,gBAAiB;AAAA,QACrD,cAAc;AAAA,UACZ,EAAE,aAAa,uCAAuC,OAAO,OAAA;AAAA,UAC7D,EAAE,aAAa,+BAA+B,OAAO,OAAA;AAAA,UACrD,EAAE,aAAa,0BAA0B,OAAO,QAAA;AAAA,QAAiB;AAAA,MACnE,IACE;AAAA;AAAA,MAGJ,mBAAmBA,EAAM,sBAAsB,UAAUA,EAAM,oBAAoB;AAAA;AAAA,MAGnF,gBAAgBA,EAAM,mBAAmB,UAAUA,EAAM,iBAAiB;AAAA;AAAA,MAG1E,WAAWA,EAAM;AAAA;AAAA,MAGjB,sBAAsBA,EAAM;AAAA,MAC5B,yBAAyB;AAAA;AAAA,MAGzB,UAAUA,EAAM,kBAAkB;AAAA,MAClC,aAAaA,EAAM,iBACdA,EAAM,gBAAgB,CAACqB,MAAcA,EAAK,QAAQ,CAAA,KACnD;AAAA,MACJ,oBAAoBrB,EAAM,kBAAkBA,EAAM,qBAC9CA,EAAM,qBACN;AAAA,IAAA,EAIP;AAYD,IAAAsB,EAAa;AAAA,MACX,SAAAlB;AAAA,MACA,eAAAE;AAAA,MACA,eAZoB,MAAM;AAC1B,QAAIF,EAAQ,SAASJ,EAAM,qBACzBI,EAAQ,MAAM,kBAAkB;AAAA,UAC9B,UAAU;AAAA,QAAA,CACX;AAAA,MAEL;AAAA,IAME,CACD;AAGD,UAAMmB,IAAc,CAACf,MAA2B;AAC9C,MAAAJ,EAAQ,QAAQI,EAAO,KACvBF,EAAc,QAAQE,EAAO,KAC7BN,EAAK,aAAaM,CAAM;AAAA,IAC1B,GAGMgB,IAAe,CAACC,MAA2B;AAC/C,MAAAvB,EAAK,cAAcuB,CAAK;AAAA,IAC1B,GAGMC,IAAqB,CAACD,MAAiC;AAC3D,MAAAvB,EAAK,oBAAoBuB,CAAK;AAAA,IAChC,GAGME,IAAgB,CAACF,MAA4B;AACjD,MAAAvB,EAAK,eAAeuB,CAAK;AAAA,IAC3B,GAGMG,IAAqB,CAACH,MAAiC;AAC3D,MAAAvB,EAAK,oBAAoBuB,CAAK,GAC9BvB,EAAK,uBAAuBuB,EAAM,IAAI,gBAAA,CAAiB;AAAA,IACzD,GAGMI,IAAqB,CAACJ,MAAiC;AAC3D,MAAAvB,EAAK,oBAAoBuB,CAAK;AAAA,IAChC;AAGA,WAAAK;AAAA,MACE,MAAM9B,EAAM;AAAA,MACZ,MAAM;AACJ,QAAII,EAAQ,SACVA,EAAQ,MAAM,cAAc,cAAcc,EAAoB,KAAK;AAAA,MAEvE;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAIfY;AAAA,MACE,MAAM9B,EAAM;AAAA,MACZ,MAAM;AACJ,QAAII,EAAQ,SACVA,EAAQ,MAAM,cAAc,WAAWJ,EAAM,OAAO;AAAA,MAExD;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,mBAKb+B,EAaM,OAAA;AAAA,MAbA,OAAKC,EAAEC,EAAAC,CAAA,EAAE,qBAAsBlC,EAAM,KAAK,CAAA;AAAA,IAAA;MAC9CmC,EAWEF,EAAAG,CAAA,GAAA;AAAA,QAVC,eAAalB,EAAA;AAAA,QACb,YAAUjB,EAAA;AAAA,QACV,gBAAcmB,EAAA;AAAA,QACf,OAAA,EAAA,QAAA,QAAA,OAAA,OAAA;AAAA,QACC,aAAAG;AAAA,QACA,cAAAC;AAAA,QACA,oBAAAE;AAAA,QACA,eAAAC;AAAA,QACA,oBAAAC;AAAA,QACA,oBAAAC;AAAA,MAAA;;;;"}
@@ -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 = '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
+ {"version":3,"file":"JIcon.vue.cjs","sources":["../../../../src/components/atoms/JIcon.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { \n House, \n User, \n Settings, \n Search, \n Plus, \n Minus, \n SquarePen, \n Trash2, \n Save, \n Download,\n Upload,\n Eye,\n EyeOff,\n Heart,\n Star,\n Check,\n X,\n CircleAlert,\n Info,\n ChevronDown,\n ChevronUp,\n ChevronLeft,\n ChevronRight,\n Menu,\n Ellipsis,\n EllipsisVertical,\n Palette,\n // WMS ํ•ต์‹ฌ ์•„์ด์ฝ˜๋“ค\n Package,\n PackageCheck,\n PackageX,\n Truck,\n Warehouse,\n Boxes,\n Archive,\n ClipboardList,\n ClipboardCheck,\n FileText,\n ChartBar,\n TrendingUp,\n TrendingDown,\n Calendar,\n Clock,\n MapPin,\n Table,\n List,\n ListFilter,\n ArrowUpWideNarrow,\n ArrowDownWideNarrow,\n Scale,\n // ์ถ”๊ฐ€ ์•„์ด์ฝ˜๋“ค\n Server,\n Database,\n Link,\n ArrowLeftRight,\n CircleQuestionMark,\n Monitor,\n Users,\n Code,\n FileKey,\n Cpu,\n Rocket,\n FileSpreadsheet,\n Activity,\n MessageCircle,\n Book,\n LogIn,\n LogOut,\n // ํŽธ์ง‘ ๊ด€๋ จ\n Copy,\n Clipboard,\n Undo2,\n Redo2,\n Pencil,\n // ํŒŒ์ผ/ํด๋” ๊ด€๋ จ\n Folder,\n FolderPlus,\n FolderOpen,\n FilePlus,\n FileSearch,\n FilePen,\n FileMinus,\n // ํ†ต์‹ /์•Œ๋ฆผ ๊ด€๋ จ\n Mail,\n Send,\n Phone,\n Bell,\n BellOff,\n MessageSquare,\n // ํ™”์‚ดํ‘œ/๋ฐฉํ–ฅ ๊ด€๋ จ\n ArrowUp,\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n RotateCw,\n RotateCcw,\n RefreshCw,\n Move,\n // ์ƒํƒœ/ํ”ผ๋“œ๋ฐฑ ๊ด€๋ จ\n CircleCheckBig,\n CircleX,\n Circle,\n // ๋ณด์•ˆ ๊ด€๋ จ\n Lock,\n LockOpen,\n Shield,\n ShieldCheck,\n ShieldAlert,\n // ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ด€๋ จ\n UserPlus,\n UserMinus,\n UserCheck,\n UserX,\n CircleUser,\n // ์•ก์…˜ ๊ด€๋ จ\n Power,\n Zap,\n Target,\n Flag,\n Funnel,\n // ์กฐ์ง/ํŒ€ ๊ด€๋ จ\n Building,\n Briefcase,\n Globe,\n // ๊ธฐํƒ€ ์œ ์šฉํ•œ ์•„์ด์ฝ˜\n Printer,\n Share2,\n ExternalLink,\n Maximize2,\n Minimize2,\n MoveVertical,\n MoveHorizontal,\n Sun,\n Moon,\n type LucideIcon\n} from 'lucide-vue-next'\n\n// ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„์ด์ฝ˜ ํƒ€์ž…\ntype BaseIconName = \n | 'house' | 'user' | 'settings' | 'search' | 'plus' | 'minus'\n | 'squarePen' | 'trash2' | 'save' | 'download' | 'upload'\n | 'eye' | 'eyeOff' | 'heart' | 'star' | 'check' | 'x'\n | 'circleAlert' | 'info' | 'chevronDown' | 'chevronUp'\n | 'chevronLeft' | 'chevronRight' | 'menu' | 'ellipsis' | 'ellipsisVertical'\n | 'palette'\n // WMS ํ•ต์‹ฌ ์•„์ด์ฝ˜๋“ค\n | 'package' | 'packageCheck' | 'packageX'\n | 'truck' | 'warehouse' | 'boxes'\n | 'archive' | 'clipboardList' | 'clipboardCheck'\n | 'fileText' | 'chartBar'\n | 'trendingUp' | 'trendingDown' | 'calendar' | 'clock'\n | 'mapPin' | 'table' | 'list' | 'listFilter'\n | 'arrowUpWideNarrow' | 'arrowDownWideNarrow' | 'scale'\n // ์ถ”๊ฐ€ ์•„์ด์ฝ˜๋“ค\n | 'server' | 'database' | 'link' | 'arrowLeftRight' | 'circleQuestionMark'\n | 'monitor' | 'users' | 'code' | 'fileKey' | 'cpu'\n | 'rocket' | 'fileSpreadsheet' | 'activity' | 'messageCircle' | 'book'\n // ์ธ์ฆ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'logIn' | 'logOut'\n // ํŽธ์ง‘ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'copy' | 'clipboard' | 'undo2' | 'redo2' | 'pencil'\n // ํŒŒ์ผ/ํด๋” ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'folder' | 'folderPlus' | 'folderOpen' | 'filePlus' | 'fileSearch' | 'filePen' | 'fileMinus'\n // ํ†ต์‹ /์•Œ๋ฆผ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'mail' | 'send' | 'phone' | 'bell' | 'bellOff' | 'messageSquare'\n // ํ™”์‚ดํ‘œ/๋ฐฉํ–ฅ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'arrowUp' | 'arrowDown' | 'arrowLeft' | 'arrowRight' | 'rotateCw' | 'rotateCcw' | 'refreshCw' | 'move'\n // ์ƒํƒœ/ํ”ผ๋“œ๋ฐฑ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'circleCheckBig' | 'circleX' | 'circle'\n // ๋ณด์•ˆ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'lock' | 'lockOpen' | 'shield' | 'shieldCheck' | 'shieldAlert'\n // ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'userPlus' | 'userMinus' | 'userCheck' | 'userX' | 'circleUser'\n // ์•ก์…˜ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'power' | 'zap' | 'target' | 'flag' | 'funnel'\n // ์กฐ์ง/ํŒ€ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n | 'building' | 'briefcase' | 'globe'\n // ๊ธฐํƒ€ ์œ ์šฉํ•œ ์•„์ด์ฝ˜๋“ค\n | 'printer' | 'share2' | 'externalLink' | 'maximize2' | 'minimize2' | 'moveVertical' | 'moveHorizontal'\n | 'sun' | 'moon'\n\n// ์ปค์Šคํ…€ ์•„์ด์ฝ˜ ํ™•์žฅ์„ ์œ„ํ•œ ํƒ€์ž…\ntype CustomIconName = string // ๋‚˜์ค‘์— ํ™•์žฅ ๊ฐ€๋Šฅ\n\ntype IconName = BaseIconName | CustomIconName\n\ntype StyleType =\n | 'default' // ๊ธฐ๋ณธ ์Šคํƒ€์ผ\n | 'primary' // ๊ฐ•์กฐ ์Šคํƒ€์ผ (ํŒŒ๋ž‘)\n | 'success' // ์„ฑ๊ณต ์Šคํƒ€์ผ (์ดˆ๋ก)\n | 'warning' // ๊ฒฝ๊ณ  ์Šคํƒ€์ผ (์ฃผํ™ฉ)\n | 'danger' // ์œ„ํ—˜ ์Šคํƒ€์ผ (๋นจ๊ฐ•)\n\ntype SizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nconst props = withDefaults(\n defineProps<{\n name: IconName\n size?: SizeType\n color?: string\n class?: string\n /** ์Šคํƒ€์ผ ํ”„๋ฆฌ์…‹ */\n styletype?: StyleType\n /** ์ ‘๊ทผ์„ฑ ๋ผ๋ฒจ */\n ariaLabel?: string\n /** ์ ‘๊ทผ์„ฑ ์—ญํ•  */\n role?: string\n }>(),\n {\n size: 'sm',\n styletype: 'default',\n role: 'img',\n },\n)\n\n/**\n * ๊ธฐ๋ณธ ์•„์ด์ฝ˜ ๋งคํ•‘ (ํƒ€์ž… ์•ˆ์ „)\n */\nconst baseIconMap: Record<BaseIconName, LucideIcon> = {\n house: House,\n user: User,\n settings: Settings,\n search: Search,\n plus: Plus,\n minus: Minus,\n squarePen: SquarePen,\n trash2: Trash2,\n save: Save,\n download: Download,\n upload: Upload,\n eye: Eye,\n eyeOff: EyeOff,\n heart: Heart,\n star: Star,\n check: Check,\n x: X,\n circleAlert: CircleAlert,\n info: Info,\n chevronDown: ChevronDown,\n chevronUp: ChevronUp,\n chevronLeft: ChevronLeft,\n chevronRight: ChevronRight,\n menu: Menu,\n ellipsis: Ellipsis,\n ellipsisVertical: EllipsisVertical,\n palette: Palette,\n // WMS ํ•ต์‹ฌ ์•„์ด์ฝ˜๋“ค\n package: Package,\n packageCheck: PackageCheck,\n packageX: PackageX,\n truck: Truck,\n warehouse: Warehouse,\n boxes: Boxes,\n archive: Archive,\n clipboardList: ClipboardList,\n clipboardCheck: ClipboardCheck,\n fileText: FileText,\n chartBar: ChartBar,\n trendingUp: TrendingUp,\n trendingDown: TrendingDown,\n calendar: Calendar,\n clock: Clock,\n mapPin: MapPin,\n table: Table,\n list: List,\n listFilter: ListFilter,\n arrowUpWideNarrow: ArrowUpWideNarrow,\n arrowDownWideNarrow: ArrowDownWideNarrow,\n scale: Scale,\n // ์ถ”๊ฐ€ ์•„์ด์ฝ˜๋“ค\n server: Server,\n database: Database,\n link: Link,\n arrowLeftRight: ArrowLeftRight,\n circleQuestionMark: CircleQuestionMark,\n monitor: Monitor,\n users: Users,\n code: Code,\n fileKey: FileKey,\n cpu: Cpu,\n rocket: Rocket,\n fileSpreadsheet: FileSpreadsheet,\n activity: Activity,\n messageCircle: MessageCircle,\n book: Book,\n // ์ธ์ฆ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n logIn: LogIn,\n logOut: LogOut,\n // ํŽธ์ง‘ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n copy: Copy,\n clipboard: Clipboard,\n undo2: Undo2,\n redo2: Redo2,\n pencil: Pencil,\n // ํŒŒ์ผ/ํด๋” ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n folder: Folder,\n folderPlus: FolderPlus,\n folderOpen: FolderOpen,\n filePlus: FilePlus,\n fileSearch: FileSearch,\n filePen: FilePen,\n fileMinus: FileMinus,\n // ํ†ต์‹ /์•Œ๋ฆผ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n mail: Mail,\n send: Send,\n phone: Phone,\n bell: Bell,\n bellOff: BellOff,\n messageSquare: MessageSquare,\n // ํ™”์‚ดํ‘œ/๋ฐฉํ–ฅ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n arrowUp: ArrowUp,\n arrowDown: ArrowDown,\n arrowLeft: ArrowLeft,\n arrowRight: ArrowRight,\n rotateCw: RotateCw,\n rotateCcw: RotateCcw,\n refreshCw: RefreshCw,\n move: Move,\n // ์ƒํƒœ/ํ”ผ๋“œ๋ฐฑ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n circleCheckBig: CircleCheckBig,\n circleX: CircleX,\n circle: Circle,\n // ๋ณด์•ˆ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n lock: Lock,\n lockOpen: LockOpen,\n shield: Shield,\n shieldCheck: ShieldCheck,\n shieldAlert: ShieldAlert,\n // ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n userPlus: UserPlus,\n userMinus: UserMinus,\n userCheck: UserCheck,\n userX: UserX,\n circleUser: CircleUser,\n // ์•ก์…˜ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n power: Power,\n zap: Zap,\n target: Target,\n flag: Flag,\n funnel: Funnel,\n // ์กฐ์ง/ํŒ€ ๊ด€๋ จ ์•„์ด์ฝ˜๋“ค\n building: Building,\n briefcase: Briefcase,\n globe: Globe,\n // ๊ธฐํƒ€ ์œ ์šฉํ•œ ์•„์ด์ฝ˜๋“ค\n printer: Printer,\n share2: Share2,\n externalLink: ExternalLink,\n maximize2: Maximize2,\n minimize2: Minimize2,\n moveVertical: MoveVertical,\n moveHorizontal: MoveHorizontal,\n sun: Sun,\n moon: Moon,\n}\n\n/**\n * ๋™์  ์•„์ด์ฝ˜ ๋กœ๋”ฉ์„ ์œ„ํ•œ ํ•จ์ˆ˜ (๋‚˜์ค‘์— ํ™•์žฅ ๊ฐ€๋Šฅ)\n * ํ˜„์žฌ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ํ–ฅํ›„ ์ปค์Šคํ…€ ์•„์ด์ฝ˜ ์ง€์›์„ ์œ„ํ•ด ์ค€๋น„\n */\n// const loadCustomIcon = async (iconName: string): Promise<LucideIcon | null> => {\n// try {\n// // ๋‚˜์ค‘์— ๋‹ค๋ฅธ ์•„์ด์ฝ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์ปค์Šคํ…€ ์•„์ด์ฝ˜์„ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Œ\n// // ์˜ˆ: const { [iconName]: IconComponent } = await import('@/assets/icons')\n// return null\n// } catch {\n// return null\n// }\n// }\n\n/**\n * size -> ์‹ค์ œ ํฌ๊ธฐ ๋งคํ•‘\n */\nconst SIZE_PRESETS: Record<SizeType, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n}\n\n/**\n * styletype -> color, class ๋งคํ•‘\n */\nconst STYLE_PRESETS: Record<StyleType, { color?: string; class: string }> = {\n default: { class: '' },\n primary: { \n color: '#3b82f6',\n class: '',\n },\n success: { \n color: '#10b981',\n class: '',\n },\n warning: { \n color: '#f59e0b',\n class: '',\n },\n danger: { \n color: '#ef4444',\n class: '',\n },\n}\n\n/** ์ตœ์ข… ๋ฐ”์ธ๋”ฉ: ์ง์ ‘ ๋„˜๊ธด props๊ฐ€ ์žˆ์œผ๋ฉด styletype ๊ธฐ๋ณธ๊ฐ’๊ณผ ๋ณ‘ํ•ฉ */\nconst mapped = computed(() => {\n const stylePreset = STYLE_PRESETS[props.styletype!]\n const sizePreset = SIZE_PRESETS[props.size!]\n const finalClass = [stylePreset.class, props.class].filter(Boolean).join(' ')\n const ariaLabel = props.ariaLabel || props.name\n \n return {\n size: sizePreset,\n color: props.color || stylePreset.color, // props.color๊ฐ€ ์žˆ์œผ๋ฉด ์šฐ์„  ์‚ฌ์šฉ, ์—†์œผ๋ฉด stylePreset.color ์‚ฌ์šฉ\n class: finalClass,\n 'aria-label': ariaLabel,\n 'aria-hidden': !ariaLabel,\n role: props.role,\n }\n})\n\n/** ํ˜„์žฌ ์•„์ด์ฝ˜ ์ปดํฌ๋„ŒํŠธ */\nconst IconComponent = computed(() => {\n // ๊ธฐ๋ณธ ์•„์ด์ฝ˜ ๋จผ์ € ํ™•์ธ\n if (props.name in baseIconMap) {\n return baseIconMap[props.name as BaseIconName]\n }\n \n // ์ปค์Šคํ…€ ์•„์ด์ฝ˜์€ ๋‚˜์ค‘์— ํ™•์žฅ\n // return loadCustomIcon(props.name)\n \n // ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ house ์•„์ด์ฝ˜ ๋ฐ˜ํ™˜\n return House\n})\n</script>\n\n<template>\n <component \n :is=\"IconComponent\" \n v-bind=\"mapped\"\n />\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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"}