@j-solution/components 1.9.2 โ†’ 1.9.4

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 (66) hide show
  1. package/README.md +5 -6
  2. package/assets/jwms-portal-frontend-Bd12BmyZ.css +1 -0
  3. package/assets/styles/j-components.css +1 -1
  4. package/assets/styles/main.css +15 -5
  5. package/assets/styles/themes.css +46 -21
  6. package/components/atoms/JButton.vue.cjs +1 -1
  7. package/components/atoms/JButton.vue.js +1 -1
  8. package/components/atoms/JButton.vue2.cjs.map +1 -1
  9. package/components/atoms/JButton.vue2.js.map +1 -1
  10. package/components/atoms/JGrid.vue.cjs +1 -1
  11. package/components/atoms/JGrid.vue.js +2 -2
  12. package/components/atoms/JGrid.vue2.cjs +1 -1
  13. package/components/atoms/JGrid.vue2.cjs.map +1 -1
  14. package/components/atoms/JGrid.vue2.js +138 -119
  15. package/components/atoms/JGrid.vue2.js.map +1 -1
  16. package/components/atoms/JSplitter.vue.cjs +1 -1
  17. package/components/atoms/JSplitter.vue.js +2 -2
  18. package/components/atoms/JSplitter.vue2.cjs +1 -1
  19. package/components/atoms/JSplitter.vue2.cjs.map +1 -1
  20. package/components/atoms/JSplitter.vue2.js +17 -17
  21. package/components/atoms/JSplitter.vue2.js.map +1 -1
  22. package/components/molecules/JFormField.vue.cjs +1 -1
  23. package/components/molecules/JFormField.vue.js +2 -2
  24. package/components/molecules/JFormField.vue2.cjs +1 -1
  25. package/components/molecules/JFormField.vue2.cjs.map +1 -1
  26. package/components/molecules/JFormField.vue2.js +28 -28
  27. package/components/molecules/JFormField.vue2.js.map +1 -1
  28. package/components/molecules/JTabs.vue.cjs +1 -1
  29. package/components/molecules/JTabs.vue.js +2 -2
  30. package/components/molecules/JTabs.vue2.cjs +1 -1
  31. package/components/molecules/JTabs.vue2.cjs.map +1 -1
  32. package/components/molecules/JTabs.vue2.js +9 -9
  33. package/components/molecules/JTabs.vue2.js.map +1 -1
  34. package/components/organisms/JDynamicForm.vue.cjs +1 -1
  35. package/components/organisms/JDynamicForm.vue.js +2 -2
  36. package/components/organisms/JDynamicForm.vue2.cjs +1 -1
  37. package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
  38. package/components/organisms/JDynamicForm.vue2.js +5 -5
  39. package/components/organisms/JDynamicForm.vue2.js.map +1 -1
  40. package/components/organisms/JFilterBar.vue.cjs +1 -1
  41. package/components/organisms/JFilterBar.vue.js +2 -2
  42. package/components/organisms/JFilterBar.vue2.cjs +1 -1
  43. package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
  44. package/components/organisms/JFilterBar.vue2.js +2 -2
  45. package/components/organisms/JFilterBar.vue2.js.map +1 -1
  46. package/components/organisms/JPageContainer.vue.cjs +1 -1
  47. package/components/organisms/JPageContainer.vue.cjs.map +1 -1
  48. package/components/organisms/JPageContainer.vue.js +1 -1
  49. package/components/organisms/JPageContainer.vue.js.map +1 -1
  50. package/components/organisms/JSearchPanel.vue.cjs +1 -1
  51. package/components/organisms/JSearchPanel.vue.js +7 -7
  52. package/components/organisms/JSearchPanel.vue2.cjs +1 -1
  53. package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
  54. package/components/organisms/JSearchPanel.vue2.js +4 -4
  55. package/components/organisms/JSearchPanel.vue2.js.map +1 -1
  56. package/components/shadcn/index.cjs +1 -1
  57. package/components/shadcn/index.cjs.map +1 -1
  58. package/components/shadcn/index.js +6 -6
  59. package/components/shadcn/index.js.map +1 -1
  60. package/components/shadcn/resizable/ResizableHandle.vue.cjs +1 -1
  61. package/components/shadcn/resizable/ResizableHandle.vue.cjs.map +1 -1
  62. package/components/shadcn/resizable/ResizableHandle.vue.js +3 -3
  63. package/components/shadcn/resizable/ResizableHandle.vue.js.map +1 -1
  64. package/package.json +1 -1
  65. package/types/index.d.ts +41 -6
  66. package/assets/jwms-portal-frontend-DQAXe8y7.css +0 -1
@@ -1,4 +1,4 @@
1
- import { defineComponent as B, computed as d, ref as N, watch as x, createBlock as u, openBlock as s, unref as i, normalizeClass as v, withCtx as f, createVNode as y, createElementVNode as _, createElementBlock as m, Fragment as k, renderList as T, createCommentVNode as b, toDisplayString as $, renderSlot as j, resolveDynamicComponent as D, mergeProps as L, nextTick as P } from "vue";
1
+ import { defineComponent as B, computed as d, ref as N, watch as g, createBlock as u, openBlock as s, unref as i, normalizeClass as v, withCtx as f, createVNode as y, createElementVNode as _, createElementBlock as m, Fragment as k, renderList as T, createCommentVNode as b, toDisplayString as $, renderSlot as j, resolveDynamicComponent as D, mergeProps as L, nextTick as P } from "vue";
2
2
  import "../shadcn/index.js";
3
3
  import { X as F } from "lucide-vue-next";
4
4
  import { cn as C } from "../../lib/utils.js";
@@ -25,9 +25,9 @@ const Y = { class: "flex-1 truncate" }, q = ["aria-label", "onClick"], G = { cla
25
25
  n.activeTabId || (c.value.length > 0 ? c.value[0]?.id : "") || ""
26
26
  );
27
27
  let o = !1;
28
- x(() => n.activeTabId, (e) => {
28
+ g(() => n.activeTabId, (e) => {
29
29
  e !== void 0 && e !== a.value && (a.value = e);
30
- }, { immediate: !0 }), x(c, (e) => {
30
+ }, { immediate: !0 }), g(c, (e) => {
31
31
  !n.activeTabId && e.length > 0 && !e.find((l) => l.id === a.value) && e[0] && (a.value = e[0].id);
32
32
  });
33
33
  const E = (e) => {
@@ -44,14 +44,14 @@ const Y = { class: "flex-1 truncate" }, q = ["aria-label", "onClick"], G = { cla
44
44
  e.stopPropagation(), r("tabClose", l);
45
45
  }, w = d(() => C("flex flex-col w-full h-full", n.class)), h = {
46
46
  default: {
47
- tabPaddingClass: "px-2.5 py-1",
47
+ tabPaddingClass: "px-2 py-0.5",
48
48
  tabTextSizeClass: "text-xs",
49
- listPaddingClass: "p-0.5"
49
+ listPaddingClass: "px-1.5 py-0.5"
50
50
  },
51
51
  minimal: {
52
- tabPaddingClass: "px-2 py-0.5",
52
+ tabPaddingClass: "px-1.5 py-0.5",
53
53
  tabTextSizeClass: "text-xs",
54
- listPaddingClass: "p-0.5"
54
+ listPaddingClass: "px-1.5 py-0.5"
55
55
  }
56
56
  }, p = d(() => h[n.styletype] ?? h.default), A = d(() => C("w-full justify-start", p.value.listPaddingClass, n.listClass));
57
57
  return (e, l) => (s(), u(i(J), {
@@ -68,7 +68,7 @@ const Y = { class: "flex-1 truncate" }, q = ["aria-label", "onClick"], G = { cla
68
68
  (s(!0), m(k, null, T(c.value, (t) => (s(), u(i(U), {
69
69
  key: t.id,
70
70
  value: t.id,
71
- onClick: (g) => I(t.id),
71
+ onClick: (x) => I(t.id),
72
72
  class: v(i(C)("!flex !items-center !gap-2", p.value.tabPaddingClass, p.value.tabTextSizeClass))
73
73
  }, {
74
74
  default: f(() => [
@@ -84,7 +84,7 @@ const Y = { class: "flex-1 truncate" }, q = ["aria-label", "onClick"], G = { cla
84
84
  type: "button",
85
85
  class: "flex-shrink-0 h-3.5 w-3.5 rounded-sm hover:bg-destructive/10 hover:text-destructive transition-colors focus:outline-none focus:ring-2 focus:ring-ring flex items-center justify-center",
86
86
  "aria-label": `${t.label} ํƒญ ๋‹ซ๊ธฐ`,
87
- onClick: (g) => V(g, t.id)
87
+ onClick: (x) => V(x, t.id)
88
88
  }, [
89
89
  y(i(F), { class: "h-2.5 w-2.5" })
90
90
  ], 8, q)) : b("", !0)
@@ -1 +1 @@
1
- {"version":3,"file":"JTabs.vue2.js","sources":["../../../../src/components/molecules/JTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick } from 'vue'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/shadcn'\nimport type { JTabsProps, JTabsEmits } from '@/types/dynamic-tabs.types'\nimport { X } from 'lucide-vue-next'\nimport { cn } from '@/lib/utils'\nimport JIcon from '@/components/atoms/JIcon.vue'\n\n/**\n * JTabs - ๊ธฐ๋ณธ ํƒญ UI ์ปดํฌ๋„ŒํŠธ (molecules)\n * Basic Tabs UI Component\n * \n * @description\n * ์ •์ ์ธ ํƒญ ๋ชฉ๋ก์„ ๋ Œ๋”๋งํ•˜๋Š” ๊ธฐ๋ณธ ํƒญ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * ๋‹ซ๊ธฐ ๋ฒ„ํŠผ, ์•„์ด์ฝ˜ ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.\n * \n * @example\n * ```vue\n * <JTabs \n * :tabs=\"tabs\"\n * :active-tab-id=\"activeId\"\n * @tab-change=\"handleChange\"\n * @tab-close=\"handleClose\"\n * />\n * ```\n */\n\ntype StyleType = 'default' | 'minimal'\n\nconst props = withDefaults(defineProps<JTabsProps>(), {\n styletype: 'default',\n})\n\nconst emit = defineEmits<JTabsEmits>()\n\n/**\n * ์•ˆ์ „ํ•œ tabs ๋ฐฐ์—ด (undefined/null ์ฒดํฌ)\n * Safe tabs array (undefined/null check)\n */\nconst safeTabs = computed(() => {\n return Array.isArray(props.tabs) ? props.tabs : []\n})\n\n/**\n * ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ํƒญ ID (๋‚ด๋ถ€ ์ƒํƒœ)\n * Current active tab ID (internal state)\n */\nconst internalActiveId = ref<string>(\n props.activeTabId || (safeTabs.value.length > 0 ? safeTabs.value[0]?.id : '') || ''\n)\n\n/**\n * ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ค‘ ํ”Œ๋ž˜๊ทธ (์ค‘๋ณต ์ด๋ฒคํŠธ ๋ฐฉ์ง€)\n * Flag to prevent duplicate events\n */\nlet isHandlingEvent = false\n\n/**\n * props.activeTabId๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‚ด๋ถ€ ์ƒํƒœ ๋™๊ธฐํ™”\n * Sync internal state when props.activeTabId changes\n */\nwatch(() => props.activeTabId, (newValue) => {\n if (newValue !== undefined && newValue !== internalActiveId.value) {\n internalActiveId.value = newValue\n }\n}, { immediate: true })\n\n/**\n * props.tabs๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  activeTabId๊ฐ€ ์—†์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ํƒญ ํ™œ์„ฑํ™”\n * Activate first tab when tabs change and no activeTabId\n */\nwatch(safeTabs, (newTabs) => {\n if (!props.activeTabId && newTabs.length > 0 && !newTabs.find(t => t.id === internalActiveId.value) && newTabs[0]) {\n internalActiveId.value = newTabs[0].id\n }\n})\n\n/**\n * ํƒญ ๊ฐ’ ๋ณ€๊ฒฝ ํ•ธ๋“ค๋Ÿฌ (reka-ui TabsRoot์—์„œ ์ง์ ‘ ํ˜ธ์ถœ๋จ)\n * Tab value change handler (called directly from reka-ui TabsRoot)\n */\nconst handleTabValueChange = (value: string | number) => {\n if (isHandlingEvent) return\n \n const stringValue = String(value)\n if (stringValue !== internalActiveId.value) {\n isHandlingEvent = true\n internalActiveId.value = stringValue\n emit('update:activeTabId', stringValue)\n emit('tabChange', stringValue)\n // ๋‹ค์Œ tick์—์„œ ํ”Œ๋ž˜๊ทธ ๋ฆฌ์…‹\n nextTick(() => {\n isHandlingEvent = false\n })\n }\n}\n\n/**\n * ํƒญ ํด๋ฆญ ํ•ธ๋“ค๋Ÿฌ (๋ฐฑ์—… ๋ฐฉ์•ˆ - reka-ui ์ด๋ฒคํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ)\n * Tab click handler (backup - in case reka-ui events don't work)\n */\nconst handleTabClick = (tabId: string) => {\n // reka-ui ์ด๋ฒคํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ง์ ‘ ์ฒ˜๋ฆฌ\n // handleTabValueChange๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌํ–ˆ์œผ๋ฉด ์ค‘๋ณต ๋ฐฉ์ง€\n if (isHandlingEvent || tabId === internalActiveId.value) return\n \n isHandlingEvent = true\n internalActiveId.value = tabId\n emit('update:activeTabId', tabId)\n emit('tabChange', tabId)\n // ๋‹ค์Œ tick์—์„œ ํ”Œ๋ž˜๊ทธ ๋ฆฌ์…‹\n nextTick(() => {\n isHandlingEvent = false\n })\n}\n\n/**\n * ํƒญ ๋‹ซ๊ธฐ ํ•ธ๋“ค๋Ÿฌ\n * Tab close handler\n */\nconst handleCloseTab = (e: Event, tabId: string) => {\n e.stopPropagation() // ํƒญ ํด๋ฆญ ์ด๋ฒคํŠธ ์ „ํŒŒ ๋ฐฉ์ง€\n emit('tabClose', tabId)\n}\n\n/**\n * ๋ฃจํŠธ ํด๋ž˜์Šค\n * Root classes\n */\nconst rootClasses = computed(() => {\n return cn('flex flex-col w-full h-full', props.class)\n})\n\n/**\n * ์Šคํƒ€์ผ ํ”„๋ฆฌ์…‹\n */\nconst STYLE_PRESETS: Record<StyleType, {\n tabPaddingClass: string\n tabTextSizeClass: string\n listPaddingClass: string\n}> = {\n default: {\n tabPaddingClass: 'px-2.5 py-1',\n tabTextSizeClass: 'text-xs',\n listPaddingClass: 'p-0.5',\n },\n minimal: {\n tabPaddingClass: 'px-2 py-0.5',\n tabTextSizeClass: 'text-xs',\n listPaddingClass: 'p-0.5',\n },\n}\n\nconst preset = computed(() => {\n return STYLE_PRESETS[props.styletype] ?? STYLE_PRESETS.default\n})\n\n/**\n * ํƒญ ๋ฆฌ์ŠคํŠธ ํด๋ž˜์Šค\n * Tabs list classes\n */\nconst listClasses = computed(() => {\n return cn('w-full justify-start', preset.value.listPaddingClass, props.listClass)\n})\n</script>\n\n<template>\n <Tabs\n :model-value=\"internalActiveId\"\n @update:model-value=\"handleTabValueChange\"\n orientation=\"horizontal\"\n :class=\"rootClasses\"\n >\n <!-- ํƒญ ํ—ค๋” ์˜์—ญ / Tab Headers -->\n <TabsList :class=\"listClasses\">\n <TabsTrigger\n v-for=\"tab in safeTabs\"\n :key=\"tab.id\"\n :value=\"tab.id\"\n @click=\"handleTabClick(tab.id)\"\n :class=\"cn('!flex !items-center !gap-2', preset.tabPaddingClass, preset.tabTextSizeClass)\"\n >\n <!-- ํƒญ ์•„์ด์ฝ˜ (์žˆ์„ ๊ฒฝ์šฐ) / Tab Icon -->\n <JIcon \n v-if=\"tab.icon\" \n :name=\"tab.icon\" \n size=\"sm\"\n class=\"flex-shrink-0\"\n />\n \n <!-- ํƒญ ๋ ˆ์ด๋ธ” / Tab Label -->\n <span class=\"flex-1 truncate\">{{ tab.label }}</span>\n \n <!-- ๋‹ซ๊ธฐ ๋ฒ„ํŠผ / Close Button (ํ•ญ์ƒ ํ‘œ์‹œ) -->\n <button\n v-if=\"tab.closable\"\n type=\"button\"\n class=\"flex-shrink-0 h-3.5 w-3.5 rounded-sm hover:bg-destructive/10 hover:text-destructive transition-colors focus:outline-none focus:ring-2 focus:ring-ring flex items-center justify-center\"\n :aria-label=\"`${tab.label} ํƒญ ๋‹ซ๊ธฐ`\"\n @click=\"(e) => handleCloseTab(e, tab.id)\"\n >\n <X class=\"h-2.5 w-2.5\" />\n </button>\n </TabsTrigger>\n </TabsList>\n\n <!-- ํƒญ ์ฝ˜ํ…์ธ  ์˜์—ญ / Tab Contents -->\n <div class=\"flex-1 w-full overflow-auto\">\n <TabsContent\n v-for=\"tab in safeTabs\"\n :key=\"`content-${tab.id}`\"\n :value=\"tab.id\"\n class=\"h-full mt-0 data-[state=active]:flex data-[state=active]:flex-col\"\n >\n <!-- ์Šฌ๋กฏ ์šฐ์„  / Slot First -->\n <slot :name=\"`content-${tab.id}`\" :tab=\"tab\">\n <!-- ๋™์  ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง / Dynamic Component Rendering -->\n <component\n v-if=\"tab.component\"\n :is=\"tab.component\"\n v-bind=\"tab.props || {}\"\n />\n \n <!-- ๊ธฐ๋ณธ ์ฝ˜ํ…์ธ  / Default Content -->\n <div v-else class=\"p-4\">\n <p class=\"text-muted-foreground\">{{ tab.label }} ์ฝ˜ํ…์ธ </p>\n </div>\n </slot>\n </TabsContent>\n </div>\n </Tabs>\n</template>\n\n<style scoped>\n/**\n * ํƒญ ๋ฆฌ์ŠคํŠธ ์Šคํƒ€์ผ - ํ•˜๋‹จ ๋ณด๋” ์ œ๊ฑฐ\n * Tab list styles without bottom border\n */\n:deep([role=\"tablist\"]:not(.ag-side-buttons)) {\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.2) transparent;\n background: hsl(var(--background));\n padding: 0 0.5rem;\n padding-top: 0.25rem;\n gap: 0.25rem;\n}\n\n:deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar) {\n height: 6px;\n}\n\n:deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-track) {\n background: transparent;\n}\n\n:deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-thumb) {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n}\n\n:deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-thumb:hover) {\n background-color: rgba(0, 0, 0, 0.3);\n}\n\n/**\n * ๋‹คํฌ๋ชจ๋“œ์—์„œ ์Šคํฌ๋กค๋ฐ” ์Šคํƒ€์ผ\n * Scrollbar styles in dark mode\n */\n.dark :deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-thumb) {\n background-color: rgba(255, 255, 255, 0.2);\n}\n\n.dark :deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-thumb:hover) {\n background-color: rgba(255, 255, 255, 0.3);\n}\n\n.dark :deep([role=\"tablist\"]:not(.ag-side-buttons)) {\n scrollbar-color: rgba(255, 255, 255, 0.2) transparent;\n}\n\n/**\n * ํƒญ ๋ฒ„ํŠผ ์Šคํƒ€์ผ - ๋ช…ํ™•ํ•œ ๊ตฌ๋ถ„\n * Tab button styles - clear distinction\n */\n:deep([role=\"tab\"]) {\n position: relative;\n padding: 0.375rem 0.75rem;\n border-radius: 0.375rem 0.375rem 0 0;\n transition: all 0.2s ease;\n border: 1px solid transparent;\n border-bottom: none;\n}\n\n/**\n * Minimal ์Šคํƒ€์ผ ํƒญ ๋ฒ„ํŠผ - JSidebarAdvanced์™€ ๋†’์ด ๋งž์ถค\n */\n:deep([role=\"tablist\"][class*=\"p-0.5\"] [role=\"tab\"]) {\n padding: 0.25rem 0.5rem;\n}\n\n/**\n * ๋น„ํ™œ์„ฑ ํƒญ - ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„\n * Inactive tabs - clear distinction\n */\n:deep([role=\"tab\"][data-state=\"inactive\"]) {\n background: hsl(var(--muted) / 0.2);\n color: hsl(var(--muted-foreground));\n border-top: 1px solid hsl(var(--border) / 0.4);\n border-left: 1px solid hsl(var(--border) / 0.4);\n border-right: 1px solid hsl(var(--border) / 0.4);\n}\n\n:deep([role=\"tab\"][data-state=\"inactive\"]:hover) {\n background: hsl(var(--muted) / 0.4);\n color: hsl(var(--foreground));\n}\n\n/**\n * ๋‹คํฌ๋ชจ๋“œ์—์„œ ๋น„ํ™œ์„ฑ ํƒญ - ๋‹คํฌ ๋ฐฐ๊ฒฝ์ƒ‰ ์‚ฌ์šฉ\n * Inactive tabs in dark mode - use dark background\n */\n.dark :deep([role=\"tab\"][data-state=\"inactive\"]) {\n background: hsl(var(--secondary));\n color: hsl(var(--secondary-foreground));\n border-top: 1px solid hsl(var(--border) / 0.5);\n border-left: 1px solid hsl(var(--border) / 0.5);\n border-right: 1px solid hsl(var(--border) / 0.5);\n}\n\n.dark :deep([role=\"tab\"][data-state=\"inactive\"]:hover) {\n background: hsl(var(--muted));\n color: hsl(var(--muted-foreground));\n}\n\n/**\n * ํ™œ์„ฑ ํƒญ - ๊ฐ•์กฐ๋œ ์Šคํƒ€์ผ\n * Active tab - emphasized style\n */\n:deep([role=\"tab\"][data-state=\"active\"]) {\n background: hsl(var(--background));\n color: hsl(var(--foreground));\n font-weight: 500;\n border-top: 2px solid hsl(var(--primary));\n border-left: 1px solid hsl(var(--border));\n border-right: 1px solid hsl(var(--border));\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n z-index: 1;\n}\n\n/**\n * ๋‹คํฌ๋ชจ๋“œ์—์„œ ํ™œ์„ฑ ํƒญ - ๋ฐฐ๊ฒฝ์ƒ‰ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„\n * Active tab in dark mode - clear background distinction\n */\n.dark :deep([role=\"tab\"][data-state=\"active\"]) {\n background: hsl(var(--card));\n color: hsl(var(--card-foreground));\n border-top: 2px solid hsl(var(--primary));\n border-left: 1px solid hsl(var(--border));\n border-right: 1px solid hsl(var(--border));\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n}\n\n</style>\n\n"],"names":["props","__props","emit","__emit","safeTabs","computed","internalActiveId","ref","isHandlingEvent","watch","newValue","newTabs","t","handleTabValueChange","value","stringValue","nextTick","handleTabClick","tabId","handleCloseTab","rootClasses","cn","STYLE_PRESETS","preset","listClasses","_createBlock","_unref","Tabs","_createVNode","TabsList","_createElementBlock","_Fragment","_renderList","tab","TabsTrigger","$event","_normalizeClass","JIcon","_createElementVNode","_hoisted_1","_toDisplayString","e","X","_hoisted_3","TabsContent","_renderSlot","_ctx","_openBlock","_resolveDynamicComponent","_mergeProps","_hoisted_4","_hoisted_5"],"mappings":"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"}
1
+ {"version":3,"file":"JTabs.vue2.js","sources":["../../../../src/components/molecules/JTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick } from 'vue'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/shadcn'\nimport type { JTabsProps, JTabsEmits } from '@/types/dynamic-tabs.types'\nimport { X } from 'lucide-vue-next'\nimport { cn } from '@/lib/utils'\nimport JIcon from '@/components/atoms/JIcon.vue'\n\n/**\n * JTabs - ๊ธฐ๋ณธ ํƒญ UI ์ปดํฌ๋„ŒํŠธ (molecules)\n * Basic Tabs UI Component\n * \n * @description\n * ์ •์ ์ธ ํƒญ ๋ชฉ๋ก์„ ๋ Œ๋”๋งํ•˜๋Š” ๊ธฐ๋ณธ ํƒญ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * ๋‹ซ๊ธฐ ๋ฒ„ํŠผ, ์•„์ด์ฝ˜ ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.\n * \n * @example\n * ```vue\n * <JTabs \n * :tabs=\"tabs\"\n * :active-tab-id=\"activeId\"\n * @tab-change=\"handleChange\"\n * @tab-close=\"handleClose\"\n * />\n * ```\n */\n\ntype StyleType = 'default' | 'minimal'\n\nconst props = withDefaults(defineProps<JTabsProps>(), {\n styletype: 'default',\n})\n\nconst emit = defineEmits<JTabsEmits>()\n\n/**\n * ์•ˆ์ „ํ•œ tabs ๋ฐฐ์—ด (undefined/null ์ฒดํฌ)\n * Safe tabs array (undefined/null check)\n */\nconst safeTabs = computed(() => {\n return Array.isArray(props.tabs) ? props.tabs : []\n})\n\n/**\n * ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ํƒญ ID (๋‚ด๋ถ€ ์ƒํƒœ)\n * Current active tab ID (internal state)\n */\nconst internalActiveId = ref<string>(\n props.activeTabId || (safeTabs.value.length > 0 ? safeTabs.value[0]?.id : '') || ''\n)\n\n/**\n * ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ค‘ ํ”Œ๋ž˜๊ทธ (์ค‘๋ณต ์ด๋ฒคํŠธ ๋ฐฉ์ง€)\n * Flag to prevent duplicate events\n */\nlet isHandlingEvent = false\n\n/**\n * props.activeTabId๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‚ด๋ถ€ ์ƒํƒœ ๋™๊ธฐํ™”\n * Sync internal state when props.activeTabId changes\n */\nwatch(() => props.activeTabId, (newValue) => {\n if (newValue !== undefined && newValue !== internalActiveId.value) {\n internalActiveId.value = newValue\n }\n}, { immediate: true })\n\n/**\n * props.tabs๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  activeTabId๊ฐ€ ์—†์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ํƒญ ํ™œ์„ฑํ™”\n * Activate first tab when tabs change and no activeTabId\n */\nwatch(safeTabs, (newTabs) => {\n if (!props.activeTabId && newTabs.length > 0 && !newTabs.find(t => t.id === internalActiveId.value) && newTabs[0]) {\n internalActiveId.value = newTabs[0].id\n }\n})\n\n/**\n * ํƒญ ๊ฐ’ ๋ณ€๊ฒฝ ํ•ธ๋“ค๋Ÿฌ (reka-ui TabsRoot์—์„œ ์ง์ ‘ ํ˜ธ์ถœ๋จ)\n * Tab value change handler (called directly from reka-ui TabsRoot)\n */\nconst handleTabValueChange = (value: string | number) => {\n if (isHandlingEvent) return\n \n const stringValue = String(value)\n if (stringValue !== internalActiveId.value) {\n isHandlingEvent = true\n internalActiveId.value = stringValue\n emit('update:activeTabId', stringValue)\n emit('tabChange', stringValue)\n // ๋‹ค์Œ tick์—์„œ ํ”Œ๋ž˜๊ทธ ๋ฆฌ์…‹\n nextTick(() => {\n isHandlingEvent = false\n })\n }\n}\n\n/**\n * ํƒญ ํด๋ฆญ ํ•ธ๋“ค๋Ÿฌ (๋ฐฑ์—… ๋ฐฉ์•ˆ - reka-ui ์ด๋ฒคํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ)\n * Tab click handler (backup - in case reka-ui events don't work)\n */\nconst handleTabClick = (tabId: string) => {\n // reka-ui ์ด๋ฒคํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ง์ ‘ ์ฒ˜๋ฆฌ\n // handleTabValueChange๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌํ–ˆ์œผ๋ฉด ์ค‘๋ณต ๋ฐฉ์ง€\n if (isHandlingEvent || tabId === internalActiveId.value) return\n \n isHandlingEvent = true\n internalActiveId.value = tabId\n emit('update:activeTabId', tabId)\n emit('tabChange', tabId)\n // ๋‹ค์Œ tick์—์„œ ํ”Œ๋ž˜๊ทธ ๋ฆฌ์…‹\n nextTick(() => {\n isHandlingEvent = false\n })\n}\n\n/**\n * ํƒญ ๋‹ซ๊ธฐ ํ•ธ๋“ค๋Ÿฌ\n * Tab close handler\n */\nconst handleCloseTab = (e: Event, tabId: string) => {\n e.stopPropagation() // ํƒญ ํด๋ฆญ ์ด๋ฒคํŠธ ์ „ํŒŒ ๋ฐฉ์ง€\n emit('tabClose', tabId)\n}\n\n/**\n * ๋ฃจํŠธ ํด๋ž˜์Šค\n * Root classes\n */\nconst rootClasses = computed(() => {\n return cn('flex flex-col w-full h-full', props.class)\n})\n\n/**\n * ์Šคํƒ€์ผ ํ”„๋ฆฌ์…‹\n */\nconst STYLE_PRESETS: Record<StyleType, {\n tabPaddingClass: string\n tabTextSizeClass: string\n listPaddingClass: string\n}> = {\n default: {\n tabPaddingClass: 'px-2 py-0.5',\n tabTextSizeClass: 'text-xs',\n listPaddingClass: 'px-1.5 py-0.5',\n },\n minimal: {\n tabPaddingClass: 'px-1.5 py-0.5',\n tabTextSizeClass: 'text-xs',\n listPaddingClass: 'px-1.5 py-0.5',\n },\n}\n\nconst preset = computed(() => {\n return STYLE_PRESETS[props.styletype] ?? STYLE_PRESETS.default\n})\n\n/**\n * ํƒญ ๋ฆฌ์ŠคํŠธ ํด๋ž˜์Šค\n * Tabs list classes\n */\nconst listClasses = computed(() => {\n return cn('w-full justify-start', preset.value.listPaddingClass, props.listClass)\n})\n</script>\n\n<template>\n <Tabs\n :model-value=\"internalActiveId\"\n @update:model-value=\"handleTabValueChange\"\n orientation=\"horizontal\"\n :class=\"rootClasses\"\n >\n <!-- ํƒญ ํ—ค๋” ์˜์—ญ / Tab Headers -->\n <TabsList :class=\"listClasses\">\n <TabsTrigger\n v-for=\"tab in safeTabs\"\n :key=\"tab.id\"\n :value=\"tab.id\"\n @click=\"handleTabClick(tab.id)\"\n :class=\"cn('!flex !items-center !gap-2', preset.tabPaddingClass, preset.tabTextSizeClass)\"\n >\n <!-- ํƒญ ์•„์ด์ฝ˜ (์žˆ์„ ๊ฒฝ์šฐ) / Tab Icon -->\n <JIcon \n v-if=\"tab.icon\" \n :name=\"tab.icon\" \n size=\"sm\"\n class=\"flex-shrink-0\"\n />\n \n <!-- ํƒญ ๋ ˆ์ด๋ธ” / Tab Label -->\n <span class=\"flex-1 truncate\">{{ tab.label }}</span>\n \n <!-- ๋‹ซ๊ธฐ ๋ฒ„ํŠผ / Close Button (ํ•ญ์ƒ ํ‘œ์‹œ) -->\n <button\n v-if=\"tab.closable\"\n type=\"button\"\n class=\"flex-shrink-0 h-3.5 w-3.5 rounded-sm hover:bg-destructive/10 hover:text-destructive transition-colors focus:outline-none focus:ring-2 focus:ring-ring flex items-center justify-center\"\n :aria-label=\"`${tab.label} ํƒญ ๋‹ซ๊ธฐ`\"\n @click=\"(e) => handleCloseTab(e, tab.id)\"\n >\n <X class=\"h-2.5 w-2.5\" />\n </button>\n </TabsTrigger>\n </TabsList>\n\n <!-- ํƒญ ์ฝ˜ํ…์ธ  ์˜์—ญ / Tab Contents -->\n <div class=\"flex-1 w-full overflow-auto\">\n <TabsContent\n v-for=\"tab in safeTabs\"\n :key=\"`content-${tab.id}`\"\n :value=\"tab.id\"\n class=\"h-full mt-0 data-[state=active]:flex data-[state=active]:flex-col\"\n >\n <!-- ์Šฌ๋กฏ ์šฐ์„  / Slot First -->\n <slot :name=\"`content-${tab.id}`\" :tab=\"tab\">\n <!-- ๋™์  ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง / Dynamic Component Rendering -->\n <component\n v-if=\"tab.component\"\n :is=\"tab.component\"\n v-bind=\"tab.props || {}\"\n />\n \n <!-- ๊ธฐ๋ณธ ์ฝ˜ํ…์ธ  / Default Content -->\n <div v-else class=\"p-4\">\n <p class=\"text-muted-foreground\">{{ tab.label }} ์ฝ˜ํ…์ธ </p>\n </div>\n </slot>\n </TabsContent>\n </div>\n </Tabs>\n</template>\n\n<style scoped>\n/**\n * ํƒญ ๋ฆฌ์ŠคํŠธ ์Šคํƒ€์ผ - ํ•˜๋‹จ ๋ณด๋” ์ œ๊ฑฐ\n * Tab list styles without bottom border\n */\n:deep([role=\"tablist\"]:not(.ag-side-buttons)) {\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.2) transparent;\n background: hsl(var(--background));\n padding: 0.125rem 0.375rem 0;\n gap: 0.125rem;\n}\n\n:deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar) {\n height: 6px;\n}\n\n:deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-track) {\n background: transparent;\n}\n\n:deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-thumb) {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n}\n\n:deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-thumb:hover) {\n background-color: rgba(0, 0, 0, 0.3);\n}\n\n/**\n * ๋‹คํฌ๋ชจ๋“œ์—์„œ ์Šคํฌ๋กค๋ฐ” ์Šคํƒ€์ผ\n * Scrollbar styles in dark mode\n */\n.dark :deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-thumb) {\n background-color: rgba(255, 255, 255, 0.2);\n}\n\n.dark :deep([role=\"tablist\"]:not(.ag-side-buttons)::-webkit-scrollbar-thumb:hover) {\n background-color: rgba(255, 255, 255, 0.3);\n}\n\n.dark :deep([role=\"tablist\"]:not(.ag-side-buttons)) {\n scrollbar-color: rgba(255, 255, 255, 0.2) transparent;\n}\n\n/**\n * ํƒญ ๋ฒ„ํŠผ ์Šคํƒ€์ผ - ๋ช…ํ™•ํ•œ ๊ตฌ๋ถ„\n * Tab button styles - clear distinction\n */\n:deep([role=\"tab\"]) {\n position: relative;\n padding: 0.25rem 0.625rem;\n min-height: 1.75rem;\n border-radius: 0.375rem 0.375rem 0 0;\n transition: all 0.2s ease;\n border: 1px solid transparent;\n border-bottom: none;\n}\n\n/**\n * Minimal ์Šคํƒ€์ผ ํƒญ ๋ฒ„ํŠผ - JSidebarAdvanced์™€ ๋†’์ด ๋งž์ถค\n */\n:deep([role=\"tablist\"][class*=\"p-0.5\"] [role=\"tab\"]) {\n padding: 0.25rem 0.5rem;\n}\n\n/**\n * ๋น„ํ™œ์„ฑ ํƒญ - ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„\n * Inactive tabs - clear distinction\n */\n:deep([role=\"tab\"][data-state=\"inactive\"]) {\n background: hsl(var(--muted) / 0.2);\n color: hsl(var(--muted-foreground));\n border-top: 1px solid hsl(var(--border) / 0.4);\n border-left: 1px solid hsl(var(--border) / 0.4);\n border-right: 1px solid hsl(var(--border) / 0.4);\n}\n\n:deep([role=\"tab\"][data-state=\"inactive\"]:hover) {\n background: hsl(var(--muted) / 0.4);\n color: hsl(var(--foreground));\n}\n\n/**\n * ๋‹คํฌ๋ชจ๋“œ์—์„œ ๋น„ํ™œ์„ฑ ํƒญ - ๋‹คํฌ ๋ฐฐ๊ฒฝ์ƒ‰ ์‚ฌ์šฉ\n * Inactive tabs in dark mode - use dark background\n */\n.dark :deep([role=\"tab\"][data-state=\"inactive\"]) {\n background: hsl(var(--secondary));\n color: hsl(var(--secondary-foreground));\n border-top: 1px solid hsl(var(--border) / 0.5);\n border-left: 1px solid hsl(var(--border) / 0.5);\n border-right: 1px solid hsl(var(--border) / 0.5);\n}\n\n.dark :deep([role=\"tab\"][data-state=\"inactive\"]:hover) {\n background: hsl(var(--muted));\n color: hsl(var(--muted-foreground));\n}\n\n/**\n * ํ™œ์„ฑ ํƒญ - ๊ฐ•์กฐ๋œ ์Šคํƒ€์ผ\n * Active tab - emphasized style\n */\n:deep([role=\"tab\"][data-state=\"active\"]) {\n background: hsl(var(--background));\n color: hsl(var(--foreground));\n font-weight: 500;\n border-top: 2px solid hsl(var(--primary));\n border-left: 1px solid hsl(var(--border));\n border-right: 1px solid hsl(var(--border));\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n z-index: 1;\n}\n\n/**\n * ๋‹คํฌ๋ชจ๋“œ์—์„œ ํ™œ์„ฑ ํƒญ - ๋ฐฐ๊ฒฝ์ƒ‰ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„\n * Active tab in dark mode - clear background distinction\n */\n.dark :deep([role=\"tab\"][data-state=\"active\"]) {\n background: hsl(var(--card));\n color: hsl(var(--card-foreground));\n border-top: 2px solid hsl(var(--primary));\n border-left: 1px solid hsl(var(--border));\n border-right: 1px solid hsl(var(--border));\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n}\n\n</style>\n"],"names":["props","__props","emit","__emit","safeTabs","computed","internalActiveId","ref","isHandlingEvent","watch","newValue","newTabs","t","handleTabValueChange","value","stringValue","nextTick","handleTabClick","tabId","handleCloseTab","rootClasses","cn","STYLE_PRESETS","preset","listClasses","_createBlock","_unref","Tabs","_createVNode","TabsList","_createElementBlock","_Fragment","_renderList","tab","TabsTrigger","$event","_normalizeClass","JIcon","_createElementVNode","_hoisted_1","_toDisplayString","e","X","_hoisted_3","TabsContent","_renderSlot","_ctx","_openBlock","_resolveDynamicComponent","_mergeProps","_hoisted_4","_hoisted_5"],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  for (const [t_key, t_val] of t_opts)
4
4
  t_merged[t_key] = t_val;
5
5
  return t_merged;
6
- };,u=t(e.default,[["__scopeId","data-v-b5f7a935"]]);exports.default=u;
6
+ };,u=t(e.default,[["__scopeId","data-v-28a4818e"]]);exports.default=u;
7
7
  //# sourceMappingURL=JDynamicForm.vue.cjs.map
@@ -6,8 +6,8 @@ const m = (m_comp, m_opts) => {
6
6
  m_merged[m_key] = m_val;
7
7
  return m_merged;
8
8
  };
9
- const f = /* @__PURE__ */ m(o, [["__scopeId", "data-v-b5f7a935"]]);
9
+ const p = /* @__PURE__ */ m(o, [["__scopeId", "data-v-28a4818e"]]);
10
10
  export {
11
- f as default
11
+ p as default
12
12
  };
13
13
  //# sourceMappingURL=JDynamicForm.vue.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const l=require("vue"),A=require("../molecules/JFormField.vue.cjs");require("../shadcn/index.cjs");require("@vueuse/core");require("reka-ui");require("clsx");require("tailwind-merge");require("lucide-vue-next");;/* empty css */;/* empty css */;/* empty css */const W=require("../molecules/JCard.vue.cjs");;/* empty css */require("@internationalized/date");require("md-editor-v3");;/* empty css */;/* empty css */require("../shadcn/badge-variants.cjs");;/* empty css */require("../shadcn/avatar-variants.cjs");require("dompurify");;/* empty css */require("ag-grid-vue3");require("ag-grid-community");require("ag-grid-enterprise");;/* empty css */;/* empty css */;/* empty css */require("vue-sonner");;/* empty css */const M=require("../../lib/styleTypePreset.cjs"),D={key:1,class:"space-y-6"},R={key:2,class:"space-y-4"},Y={class:"font-semibold text-lg"},j={key:0,class:"text-muted-foreground text-sm mb-2"},J=l.defineComponent({__name:"JDynamicForm",props:{schema:{},modelValue:{}},emits:["update:modelValue","submit","change","error"],setup(u,{expose:F,emit:T}){const s=u,p=T,d=["checkbox","switch"],a=l.reactive({});l.watch(()=>s.modelValue,e=>{e&&Object.assign(a,e)},{immediate:!0,deep:!0});function y(e,r){return e.controlId||e.controlName||e.name||e.label||`field-${r}`}function h(e){return e.controlName||e.name||""}function b(e){return e.isRequired!==void 0?e.isRequired:e.required||!1}l.watch(()=>s.schema,e=>{const r=[];e.type==="simple"&&e.fields?r.push(...e.fields):e.type==="sectioned"&&e.sections?e.sections.forEach(t=>{t.fields&&r.push(...t.fields)}):e.type==="wizard"&&e.steps&&e.steps.forEach(t=>{t.fields&&r.push(...t.fields)}),r.forEach(t=>{const o=h(t);if(o&&a[o]===void 0)if(d.includes(t.type))a[o]="N";else if(t.type==="radio")a[o]=t.options?.[0]?.value??"";else if(t.type==="select"||t.type==="searchcombo"){const i=t.addAll!==void 0?t.addAll:t.allowAll||!1;a[o]=i?"ALL":"SELECT"}else a[o]=""})},{immediate:!0}),l.watch(a,e=>p("update:modelValue",e),{deep:!0});function N(){p("submit",{...a}),typeof s.schema.events?.onSubmit=="function"&&s.schema.events.onSubmit({...a})}function $(e,r){p("change",{field:e,value:r}),typeof s.schema.events?.onChange=="function"&&s.schema.events.onChange(e,r)}function z(e){p("error",e),typeof s.schema.events?.onError=="function"&&s.schema.events.onError(e)}function f(e){return e.filter(t=>t.isVisible!==!1).sort((t,o)=>{if(t.sortOrder!==void 0&&o.sortOrder!==void 0&&t.sortOrder!==o.sortOrder)return t.sortOrder-o.sortOrder;const i=t.controlName||t.name||t.label||"",g=o.controlName||o.name||o.label||"";return i.localeCompare(g)})}const w=l.computed(()=>{const e=s.schema.globalStyle?.colCount||(s.schema.layout?.columns?`row-${s.schema.layout.columns}`:"row-1"),r=_(e);let t="";switch(e){case"row-1":t=`flex flex-col ${r}`;break;case"row":case"row-2":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 auto-rows-min`;break;case"row-3":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-3 auto-rows-min`;break;case"row-4":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-4 auto-rows-min`;break;case"row-5":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 auto-rows-min`;break;case"row-6":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 auto-rows-min`;break;case"row-7":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7 auto-rows-min`;break;case"row-8":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-8 auto-rows-min`;break;default:t=`flex flex-col ${r}`}return t});function k(e){return d.includes(e.type)?"min-w-0 w-auto inline-flex items-center":"min-w-0 w-full"}function C(e){switch(e){case"row":case"row-2":return 2;case"row-3":return 3;case"row-4":return 4;case"row-5":return 5;case"row-6":return 6;case"row-7":return 7;case"row-8":return 8;default:return 1}}function _(e){switch(e){case"row-1":return"gap-6";case"row":case"row-2":return"gap-4";case"row-3":return"gap-4";case"row-4":return"gap-3";case"row-5":return"gap-2";case"row-6":return"gap-2";case"row-7":return"gap-2";case"row-8":return"gap-2";default:return"gap-6"}}function q(){const e=s.schema.globalStyle?.colCount||(s.schema.layout?.columns?`row-${s.schema.layout.columns}`:"row-1"),r=C(e);return r>=6?"6rem":r>=5?"7rem":"8rem"}function v(){return s.schema.globalStyle?.labelPosition||"horizontal"}function x(){return s.schema.globalStyle?.labelAlign||"left"}function E(e){const r=s.schema.globalStyle?.colCount||(s.schema.layout?.columns?`row-${s.schema.layout.columns}`:"row-1"),t=C(r);return{gridColumn:`span ${Math.min(t,Math.max(1,e.colSpan||1))}`}}function B(e){const r=h(e),t=e.isDisabled!==void 0?e.isDisabled:e.disabled||!1,o=e.isReadonly!==void 0?e.isReadonly:e.readonly||!1,i=d.includes(e.type)?"inline-flex items-center gap-2 w-auto":"w-full",g=M.resolveGlobalStyle(s.schema.globalStyle),P=s.schema.globalStyle?.colCount||(s.schema.layout?.columns?`row-${s.schema.layout.columns}`:"row-1"),S=C(P);let c=g.controlSize;S>=6||S>=5?c="sm":S>=4&&g.controlSize==="lg"&&(c="md");const m=(n,V)=>{if(r&&(a[r]=V,$(r,V)),e.events?.[n]){const U=e.events[n];console.log(`Event ${n}: Calling handler "${U}" with value:`,V)}};return d.includes(e.type)?{modelValue:a[r]==="Y"?"Y":"N",disabled:t,styleType:c,class:i,"onUpdate:modelValue":n=>{r&&(a[r]=n),m("onChange",n==="Y")}}:e.type==="radio"?{modelValue:String(a[r]??""),options:e.options??[],multiple:e.multiple,disabled:t,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:e.type==="select"||e.type==="combo"?{modelValue:String(a[r]??""),options:L(e),multiple:e.multiple,disabled:t,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:e.type==="searchcombo"?{modelValue:String(a[r]??""),options:L(e),disabled:t,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:e.type==="textarea"?{modelValue:String(a[r]??""),placeholder:e.placeholder??"",disabled:t,readonly:o,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:e.type==="datepicker"?{modelValue:String(a[r]??""),placeholder:e.placeholder??"",disabled:t,readonly:o,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:{modelValue:String(a[r]??""),inputType:e.inputType||(e.dataType==="number"?"number":"text"),placeholder:e.placeholder??"",disabled:t,readonly:o,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}}function L(e){const r=e.addAll!==void 0?e.addAll:e.allowAll||!1;return[{value:r?"ALL":"SELECT",label:r?"์ „์ฒด":"์„ ํƒ"},...e.options||[]]}function O(){Object.keys(a).forEach(r=>{delete a[r]});const e=[];s.schema.type==="simple"&&s.schema.fields?e.push(...s.schema.fields):s.schema.type==="sectioned"&&s.schema.sections?s.schema.sections.forEach(r=>{r.fields&&e.push(...r.fields)}):s.schema.type==="wizard"&&s.schema.steps&&s.schema.steps.forEach(r=>{r.fields&&e.push(...r.fields)}),e.forEach(r=>{const t=h(r);if(t)if(d.includes(r.type))a[t]="N";else if(r.type==="radio")a[t]=r.options?.[0]?.value??"";else if(r.type==="select"||r.type==="searchcombo"){const o=r.addAll!==void 0?r.addAll:r.allowAll||!1;a[t]=o?"ALL":"SELECT"}else a[t]=""})}return F({formState:a,submit:N,reset:O,handleError:z}),(e,r)=>(l.openBlock(),l.createElementBlock("form",{onSubmit:l.withModifiers(N,["prevent"]),class:l.normalizeClass(w.value)},[u.schema.type==="simple"?(l.openBlock(!0),l.createElementBlock(l.Fragment,{key:0},l.renderList(f(u.schema.fields||[]),(t,o)=>(l.openBlock(),l.createElementBlock("div",{key:y(t,o),class:l.normalizeClass(k(t)),style:l.normalizeStyle(E(t))},[l.createVNode(l.unref(A.default),l.mergeProps({label:t.label,required:b(t),orientation:v(),labelAlign:x(),labelWidth:q(),type:t.type==="searchcombo"?"searchCombo":t.type,"input-type":t.inputType,description:t.description,"inline-label":t.inlineLabel},{ref_for:!0},B(t)),null,16,["label","required","orientation","labelAlign","labelWidth","type","input-type","description","inline-label"])],6))),128)):u.schema.type==="sectioned"?(l.openBlock(),l.createElementBlock("div",D,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(u.schema.sections,t=>(l.openBlock(),l.createBlock(l.unref(W.default),{key:t.id,title:t.title,collapsible:t.collapsible,"default-collapsed":t.defaultCollapsed},{default:l.withCtx(()=>[l.createElementVNode("div",{class:l.normalizeClass(w.value)},[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(f(t.fields||[]),(o,i)=>(l.openBlock(),l.createElementBlock("div",{key:y(o,i),class:l.normalizeClass(k(o)),style:l.normalizeStyle(E(o))},[l.createVNode(l.unref(A.default),l.mergeProps({label:o.label,required:b(o),orientation:v(),labelAlign:x(),labelWidth:q(),type:o.type==="searchcombo"?"searchCombo":o.type,"input-type":o.inputType,description:o.description,"inline-label":o.inlineLabel},{ref_for:!0},B(o)),null,16,["label","required","orientation","labelAlign","labelWidth","type","input-type","description","inline-label"])],6))),128))],2)]),_:2},1032,["title","collapsible","default-collapsed"]))),128))])):u.schema.type==="wizard"?(l.openBlock(),l.createElementBlock("div",R,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(u.schema.steps,t=>(l.openBlock(),l.createElementBlock("div",{key:t.id,class:"p-4 border rounded-xl"},[l.createElementVNode("h3",Y,l.toDisplayString(t.title),1),t.description?(l.openBlock(),l.createElementBlock("p",j,l.toDisplayString(t.description),1)):l.createCommentVNode("",!0),l.createElementVNode("div",{class:l.normalizeClass(w.value)},[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(f(t.fields||[]),(o,i)=>(l.openBlock(),l.createElementBlock("div",{key:y(o,i),class:l.normalizeClass(k(o)),style:l.normalizeStyle(E(o))},[l.createVNode(l.unref(A.default),l.mergeProps({label:o.label,required:b(o),orientation:v(),labelAlign:x(),labelWidth:q(),type:o.type==="searchcombo"?"searchCombo":o.type,"input-type":o.inputType,description:o.description,"inline-label":o.inlineLabel},{ref_for:!0},B(o)),null,16,["label","required","orientation","labelAlign","labelWidth","type","input-type","description","inline-label"])],6))),128))],2)]))),128))])):l.createCommentVNode("",!0)],34))}});exports.default=J;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const l=require("vue"),A=require("../molecules/JFormField.vue.cjs");require("../shadcn/index.cjs");require("@vueuse/core");require("reka-ui");require("clsx");require("tailwind-merge");require("lucide-vue-next");;/* empty css */;/* empty css */;/* empty css */const W=require("../molecules/JCard.vue.cjs");;/* empty css */require("@internationalized/date");require("md-editor-v3");;/* empty css */;/* empty css */require("../shadcn/badge-variants.cjs");;/* empty css */require("../shadcn/avatar-variants.cjs");require("dompurify");;/* empty css */require("ag-grid-vue3");require("ag-grid-community");require("ag-grid-enterprise");;/* empty css */;/* empty css */;/* empty css */require("vue-sonner");;/* empty css */const M=require("../../lib/styleTypePreset.cjs"),D={key:1,class:"space-y-6"},R={key:2,class:"space-y-4"},Y={class:"font-semibold text-lg"},j={key:0,class:"text-muted-foreground text-sm mb-2"},J=l.defineComponent({__name:"JDynamicForm",props:{schema:{},modelValue:{}},emits:["update:modelValue","submit","change","error"],setup(u,{expose:F,emit:T}){const s=u,p=T,d=["checkbox","switch"],a=l.reactive({});l.watch(()=>s.modelValue,e=>{e&&Object.assign(a,e)},{immediate:!0,deep:!0});function y(e,r){return e.controlId||e.controlName||e.name||e.label||`field-${r}`}function h(e){return e.controlName||e.name||""}function b(e){return e.isRequired!==void 0?e.isRequired:e.required||!1}l.watch(()=>s.schema,e=>{const r=[];e.type==="simple"&&e.fields?r.push(...e.fields):e.type==="sectioned"&&e.sections?e.sections.forEach(t=>{t.fields&&r.push(...t.fields)}):e.type==="wizard"&&e.steps&&e.steps.forEach(t=>{t.fields&&r.push(...t.fields)}),r.forEach(t=>{const o=h(t);if(o&&a[o]===void 0)if(d.includes(t.type))a[o]="N";else if(t.type==="radio")a[o]=t.options?.[0]?.value??"";else if(t.type==="select"||t.type==="searchcombo"){const i=t.addAll!==void 0?t.addAll:t.allowAll||!1;a[o]=i?"ALL":"SELECT"}else a[o]=""})},{immediate:!0}),l.watch(a,e=>p("update:modelValue",e),{deep:!0});function N(){p("submit",{...a}),typeof s.schema.events?.onSubmit=="function"&&s.schema.events.onSubmit({...a})}function $(e,r){p("change",{field:e,value:r}),typeof s.schema.events?.onChange=="function"&&s.schema.events.onChange(e,r)}function z(e){p("error",e),typeof s.schema.events?.onError=="function"&&s.schema.events.onError(e)}function f(e){return e.filter(t=>t.isVisible!==!1).sort((t,o)=>{if(t.sortOrder!==void 0&&o.sortOrder!==void 0&&t.sortOrder!==o.sortOrder)return t.sortOrder-o.sortOrder;const i=t.controlName||t.name||t.label||"",g=o.controlName||o.name||o.label||"";return i.localeCompare(g)})}const w=l.computed(()=>{const e=s.schema.globalStyle?.colCount||(s.schema.layout?.columns?`row-${s.schema.layout.columns}`:"row-1"),r=_(e);let t="";switch(e){case"row-1":t=`flex flex-col ${r}`;break;case"row":case"row-2":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 auto-rows-min`;break;case"row-3":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-3 auto-rows-min`;break;case"row-4":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-4 auto-rows-min`;break;case"row-5":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 auto-rows-min`;break;case"row-6":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 auto-rows-min`;break;case"row-7":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7 auto-rows-min`;break;case"row-8":t=`flex flex-col md:grid md:grid-flow-row md:items-start ${r} md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-8 auto-rows-min`;break;default:t=`flex flex-col ${r}`}return t});function k(e){return d.includes(e.type)?"min-w-0 w-auto inline-flex items-center":"min-w-0 w-full"}function C(e){switch(e){case"row":case"row-2":return 2;case"row-3":return 3;case"row-4":return 4;case"row-5":return 5;case"row-6":return 6;case"row-7":return 7;case"row-8":return 8;default:return 1}}function _(e){switch(e){case"row-1":return"gap-3";case"row":case"row-2":return"gap-3";case"row-3":return"gap-3";case"row-4":return"gap-2";case"row-5":return"gap-2";case"row-6":return"gap-2";case"row-7":return"gap-2";case"row-8":return"gap-2";default:return"gap-3"}}function q(){const e=s.schema.globalStyle?.colCount||(s.schema.layout?.columns?`row-${s.schema.layout.columns}`:"row-1"),r=C(e);return r>=6?"6rem":r>=5?"7rem":"8rem"}function v(){return s.schema.globalStyle?.labelPosition||"horizontal"}function x(){return s.schema.globalStyle?.labelAlign||"left"}function E(e){const r=s.schema.globalStyle?.colCount||(s.schema.layout?.columns?`row-${s.schema.layout.columns}`:"row-1"),t=C(r);return{gridColumn:`span ${Math.min(t,Math.max(1,e.colSpan||1))}`}}function B(e){const r=h(e),t=e.isDisabled!==void 0?e.isDisabled:e.disabled||!1,o=e.isReadonly!==void 0?e.isReadonly:e.readonly||!1,i=d.includes(e.type)?"inline-flex items-center gap-2 w-auto":"w-full",g=M.resolveGlobalStyle(s.schema.globalStyle),P=s.schema.globalStyle?.colCount||(s.schema.layout?.columns?`row-${s.schema.layout.columns}`:"row-1"),S=C(P);let c=g.controlSize;S>=6||S>=5?c="sm":S>=4&&g.controlSize==="lg"&&(c="md");const m=(n,V)=>{if(r&&(a[r]=V,$(r,V)),e.events?.[n]){const U=e.events[n];console.log(`Event ${n}: Calling handler "${U}" with value:`,V)}};return d.includes(e.type)?{modelValue:a[r]==="Y"?"Y":"N",disabled:t,styleType:c,class:i,"onUpdate:modelValue":n=>{r&&(a[r]=n),m("onChange",n==="Y")}}:e.type==="radio"?{modelValue:String(a[r]??""),options:e.options??[],multiple:e.multiple,disabled:t,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:e.type==="select"||e.type==="combo"?{modelValue:String(a[r]??""),options:L(e),multiple:e.multiple,disabled:t,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:e.type==="searchcombo"?{modelValue:String(a[r]??""),options:L(e),disabled:t,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:e.type==="textarea"?{modelValue:String(a[r]??""),placeholder:e.placeholder??"",disabled:t,readonly:o,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:e.type==="datepicker"?{modelValue:String(a[r]??""),placeholder:e.placeholder??"",disabled:t,readonly:o,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}:{modelValue:String(a[r]??""),inputType:e.inputType||(e.dataType==="number"?"number":"text"),placeholder:e.placeholder??"",disabled:t,readonly:o,styleType:c,class:i,"onUpdate:modelValue":n=>{m("onChange",n)}}}function L(e){const r=e.addAll!==void 0?e.addAll:e.allowAll||!1;return[{value:r?"ALL":"SELECT",label:r?"์ „์ฒด":"์„ ํƒ"},...e.options||[]]}function O(){Object.keys(a).forEach(r=>{delete a[r]});const e=[];s.schema.type==="simple"&&s.schema.fields?e.push(...s.schema.fields):s.schema.type==="sectioned"&&s.schema.sections?s.schema.sections.forEach(r=>{r.fields&&e.push(...r.fields)}):s.schema.type==="wizard"&&s.schema.steps&&s.schema.steps.forEach(r=>{r.fields&&e.push(...r.fields)}),e.forEach(r=>{const t=h(r);if(t)if(d.includes(r.type))a[t]="N";else if(r.type==="radio")a[t]=r.options?.[0]?.value??"";else if(r.type==="select"||r.type==="searchcombo"){const o=r.addAll!==void 0?r.addAll:r.allowAll||!1;a[t]=o?"ALL":"SELECT"}else a[t]=""})}return F({formState:a,submit:N,reset:O,handleError:z}),(e,r)=>(l.openBlock(),l.createElementBlock("form",{onSubmit:l.withModifiers(N,["prevent"]),class:l.normalizeClass(w.value)},[u.schema.type==="simple"?(l.openBlock(!0),l.createElementBlock(l.Fragment,{key:0},l.renderList(f(u.schema.fields||[]),(t,o)=>(l.openBlock(),l.createElementBlock("div",{key:y(t,o),class:l.normalizeClass(k(t)),style:l.normalizeStyle(E(t))},[l.createVNode(l.unref(A.default),l.mergeProps({label:t.label,required:b(t),orientation:v(),labelAlign:x(),labelWidth:q(),type:t.type==="searchcombo"?"searchCombo":t.type,"input-type":t.inputType,description:t.description,"inline-label":t.inlineLabel},{ref_for:!0},B(t)),null,16,["label","required","orientation","labelAlign","labelWidth","type","input-type","description","inline-label"])],6))),128)):u.schema.type==="sectioned"?(l.openBlock(),l.createElementBlock("div",D,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(u.schema.sections,t=>(l.openBlock(),l.createBlock(l.unref(W.default),{key:t.id,title:t.title,collapsible:t.collapsible,"default-collapsed":t.defaultCollapsed},{default:l.withCtx(()=>[l.createElementVNode("div",{class:l.normalizeClass(w.value)},[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(f(t.fields||[]),(o,i)=>(l.openBlock(),l.createElementBlock("div",{key:y(o,i),class:l.normalizeClass(k(o)),style:l.normalizeStyle(E(o))},[l.createVNode(l.unref(A.default),l.mergeProps({label:o.label,required:b(o),orientation:v(),labelAlign:x(),labelWidth:q(),type:o.type==="searchcombo"?"searchCombo":o.type,"input-type":o.inputType,description:o.description,"inline-label":o.inlineLabel},{ref_for:!0},B(o)),null,16,["label","required","orientation","labelAlign","labelWidth","type","input-type","description","inline-label"])],6))),128))],2)]),_:2},1032,["title","collapsible","default-collapsed"]))),128))])):u.schema.type==="wizard"?(l.openBlock(),l.createElementBlock("div",R,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(u.schema.steps,t=>(l.openBlock(),l.createElementBlock("div",{key:t.id,class:"p-4 border rounded-xl"},[l.createElementVNode("h3",Y,l.toDisplayString(t.title),1),t.description?(l.openBlock(),l.createElementBlock("p",j,l.toDisplayString(t.description),1)):l.createCommentVNode("",!0),l.createElementVNode("div",{class:l.normalizeClass(w.value)},[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(f(t.fields||[]),(o,i)=>(l.openBlock(),l.createElementBlock("div",{key:y(o,i),class:l.normalizeClass(k(o)),style:l.normalizeStyle(E(o))},[l.createVNode(l.unref(A.default),l.mergeProps({label:o.label,required:b(o),orientation:v(),labelAlign:x(),labelWidth:q(),type:o.type==="searchcombo"?"searchCombo":o.type,"input-type":o.inputType,description:o.description,"inline-label":o.inlineLabel},{ref_for:!0},B(o)),null,16,["label","required","orientation","labelAlign","labelWidth","type","input-type","description","inline-label"])],6))),128))],2)]))),128))])):l.createCommentVNode("",!0)],34))}});exports.default=J;
2
2
  //# sourceMappingURL=JDynamicForm.vue2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JDynamicForm.vue2.cjs","sources":["../../../../src/components/organisms/JDynamicForm.vue"],"sourcesContent":["<template>\n <form @submit.prevent=\"handleSubmit\" :class=\"formClasses\">\n <!-- ๐Ÿงฑ ๋‹จ์ˆœํ˜• ํผ -->\n <template v-if=\"schema.type === 'simple'\">\n <div\n v-for=\"(field, index) in getOrderedFields(schema.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </template>\n\n <!-- ๐Ÿ“ฆ ์„น์…˜ํ˜• ํผ -->\n <template v-else-if=\"schema.type === 'sectioned'\">\n <div class=\"space-y-6\">\n <JCard\n v-for=\"section in schema.sections\"\n :key=\"section.id\"\n :title=\"section.title\"\n :collapsible=\"section.collapsible\"\n :default-collapsed=\"section.defaultCollapsed\"\n >\n <div :class=\"formClasses\">\n <div\n v-for=\"(field, index) in getOrderedFields(section.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </div>\n </JCard>\n </div>\n </template>\n\n <!-- ๐Ÿชœ ์Šคํ…ํ˜• (Wizard) -->\n <template v-else-if=\"schema.type === 'wizard'\">\n <div class=\"space-y-4\">\n <div\n v-for=\"step in schema.steps\"\n :key=\"step.id\"\n class=\"p-4 border rounded-xl\"\n >\n <h3 class=\"font-semibold text-lg\">{{ step.title }}</h3>\n <p v-if=\"step.description\" class=\"text-muted-foreground text-sm mb-2\">\n {{ step.description }}\n </p>\n <div :class=\"formClasses\">\n <div\n v-for=\"(field, index) in getOrderedFields(step.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </div>\n </div>\n </div>\n </template>\n\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, watch } from 'vue';\nimport { JFormField, JCard } from '@/components/molecules';\nimport type { FormSchema, DynamicFormField } from '@/types/dynamic-form';\nimport { resolveGlobalStyle } from '@/lib/styleTypePreset';\n\n// props\nconst props = defineProps<{\n schema: FormSchema;\n modelValue?: Record<string, any>;\n}>();\n\nconst emit = defineEmits(['update:modelValue', 'submit', 'change', 'error']);\n\nconst BOOLEAN_TYPES: Array<DynamicFormField['type']> = ['checkbox', 'switch'];\n\n// ํผ ์ƒํƒœ ๊ด€๋ฆฌ\nconst formState = reactive<Record<string, any>>({});\n\n// ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •\nwatch(\n () => props.modelValue,\n (newValues) => {\n if (newValues) {\n Object.assign(formState, newValues);\n }\n },\n { immediate: true, deep: true }\n);\n\n// ํ•„๋“œ ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ (controlId > controlName > name > label ์ˆœ์„œ)\nfunction getFieldKey(field: DynamicFormField, index: number): string {\n return field.controlId || field.controlName || (field as any).name || field.label || `field-${index}`;\n}\n\n// ํ•„๋“œ ์ด๋ฆ„ ๊ฐ€์ ธ์˜ค๊ธฐ (controlName > name ์ˆœ์„œ)\nfunction getFieldName(field: DynamicFormField): string {\n return field.controlName || (field as any).name || '';\n}\n\n// ํ•„๋“œ required ๊ฐ€์ ธ์˜ค๊ธฐ (isRequired > required ์ˆœ์„œ)\nfunction getFieldRequired(field: DynamicFormField): boolean {\n return field.isRequired !== undefined ? field.isRequired : ((field as any).required || false);\n}\n\n// ํ•„๋“œ ์ดˆ๊ธฐํ™”\nwatch(\n () => props.schema,\n (newSchema) => {\n const allFields: DynamicFormField[] = [];\n \n if (newSchema.type === 'simple' && newSchema.fields) {\n allFields.push(...newSchema.fields);\n } else if (newSchema.type === 'sectioned' && newSchema.sections) {\n newSchema.sections.forEach(section => {\n if (section.fields) allFields.push(...section.fields);\n });\n } else if (newSchema.type === 'wizard' && newSchema.steps) {\n newSchema.steps.forEach(step => {\n if (step.fields) allFields.push(...step.fields);\n });\n }\n \n allFields.forEach((field) => {\n const fieldName = getFieldName(field);\n if (fieldName && formState[fieldName] === undefined) {\n if (BOOLEAN_TYPES.includes(field.type)) {\n formState[fieldName] = 'N';\n } else if (field.type === 'radio') {\n formState[fieldName] = field.options?.[0]?.value ?? '';\n } else if (field.type === 'select' || field.type === 'searchcombo') {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n formState[fieldName] = addAll ? 'ALL' : 'SELECT';\n } else {\n formState[fieldName] = '';\n }\n }\n });\n },\n { immediate: true }\n);\n\n// ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ์ง€ โ†’ ์ƒ์œ„ emit\nwatch(formState, (val) => emit('update:modelValue', val), { deep: true });\n\n// ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nfunction handleSubmit() {\n emit('submit', { ...formState });\n if (typeof props.schema.events?.onSubmit === 'function') {\n props.schema.events.onSubmit({ ...formState });\n }\n}\n\nfunction handleChange(field: string, value: any) {\n emit('change', { field, value });\n if (typeof props.schema.events?.onChange === 'function') {\n props.schema.events.onChange(field, value);\n }\n}\n\nfunction handleError(errs: any) {\n emit('error', errs);\n if (typeof props.schema.events?.onError === 'function') {\n props.schema.events.onError(errs);\n }\n}\n\n// ์ •๋ ฌ๋œ ํ•„๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getOrderedFields(fields: DynamicFormField[]): DynamicFormField[] {\n const visibleFields = fields.filter((field) => field.isVisible !== false);\n return visibleFields.sort((a, b) => {\n // sortOrder ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ\n if (a.sortOrder !== undefined && b.sortOrder !== undefined) {\n if (a.sortOrder !== b.sortOrder) {\n return a.sortOrder - b.sortOrder;\n }\n }\n const aName = a.controlName || (a as any).name || a.label || '';\n const bName = b.controlName || (b as any).name || b.label || '';\n return aName.localeCompare(bName);\n });\n}\n\n// ํผ ํด๋ž˜์Šค ๊ณ„์‚ฐ\nconst formClasses = computed(() => {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const gapClass = getGapClass(colCount);\n \n // ๋ฐ˜์‘ํ˜•: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์—ด ์ˆ˜ ์ž๋™ ์กฐ์ •\n let classes = '';\n switch (colCount) {\n case 'row-1':\n classes = `flex flex-col ${gapClass}`;\n break;\n case 'row':\n case 'row-2':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 auto-rows-min`;\n break;\n case 'row-3':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 auto-rows-min`;\n break;\n case 'row-4':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-4 auto-rows-min`;\n break;\n case 'row-5':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 auto-rows-min`;\n break;\n case 'row-6':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 auto-rows-min`;\n break;\n case 'row-7':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7 auto-rows-min`;\n break;\n case 'row-8':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-8 auto-rows-min`;\n break;\n default:\n classes = `flex flex-col ${gapClass}`;\n }\n \n return classes;\n});\n\n// ํ•„๋“œ ๊ธฐ๋ณธ ํด๋ž˜์Šค\nfunction fieldBaseClass(field: DynamicFormField): string {\n return BOOLEAN_TYPES.includes(field.type)\n ? 'min-w-0 w-auto inline-flex items-center'\n : 'min-w-0 w-full';\n}\n\n// ์ตœ๋Œ€ ์—ด ์ˆ˜ ๊ณ„์‚ฐ\nfunction getMaxCols(colCount?: string): number {\n switch (colCount) {\n case 'row':\n case 'row-2': return 2;\n case 'row-3': return 3;\n case 'row-4': return 4;\n case 'row-5': return 5;\n case 'row-6': return 6;\n case 'row-7': return 7;\n case 'row-8': return 8;\n default: return 1;\n }\n}\n\n// ์—ด ์ˆ˜์— ๋”ฐ๋ฅธ gap ๊ณ„์‚ฐ\nfunction getGapClass(colCount: string): string {\n switch (colCount) {\n case 'row-1': return 'gap-6';\n case 'row':\n case 'row-2': return 'gap-4';\n case 'row-3': return 'gap-4';\n case 'row-4': return 'gap-3';\n case 'row-5': return 'gap-2';\n case 'row-6': return 'gap-2';\n case 'row-7': return 'gap-2';\n case 'row-8': return 'gap-2';\n default: return 'gap-6';\n }\n}\n\n// ์—ด ์ˆ˜์— ๋”ฐ๋ฅธ ๋ผ๋ฒจ ๋„ˆ๋น„ ๊ณ„์‚ฐ\nfunction getLabelWidth(): string {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n if (maxCols >= 6) return '6rem';\n if (maxCols >= 5) return '7rem';\n return '8rem';\n}\n\n// ๋ผ๋ฒจ ์œ„์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getLabelPosition(): 'horizontal' | 'vertical' {\n return props.schema.globalStyle?.labelPosition || 'horizontal';\n}\n\n// ๋ผ๋ฒจ ์ •๋ ฌ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getLabelAlign(): 'left' | 'middle' | 'right' {\n return props.schema.globalStyle?.labelAlign || 'left';\n}\n\n// ํ•„๋“œ ์Šคํƒ€์ผ ๊ณ„์‚ฐ\nfunction getFieldStyle(field: DynamicFormField): Record<string, string> {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n const span = Math.min(maxCols, Math.max(1, field.colSpan || 1));\n return {\n gridColumn: `span ${span}`\n };\n}\n\n// ํ•„๋“œ props ์ƒ์„ฑ\nfunction getFieldProps(field: DynamicFormField) {\n const fieldName = getFieldName(field);\n const disabled = field.isDisabled !== undefined ? field.isDisabled : ((field as any).disabled || false);\n const readonly = field.isReadonly !== undefined ? field.isReadonly : ((field as any).readonly || false);\n \n // baseClass ์กฐ์ •\n const baseClass = BOOLEAN_TYPES.includes(field.type)\n ? 'inline-flex items-center gap-2 w-auto'\n : 'w-full';\n \n // ์ „์—ญ ์Šคํƒ€์ผ ํ•ด๊ฒฐ\n const resolvedStyle = resolveGlobalStyle(props.schema.globalStyle);\n \n // ์—ด ์ˆ˜์— ๋”ฐ๋ผ ์ปจํŠธ๋กค ํฌ๊ธฐ ๋™์  ์กฐ์ •\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n let finalSize = resolvedStyle.controlSize;\n \n // 4์—ด ์ด์ƒ์ผ ๋•Œ ์ปจํŠธ๋กค ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์กฐ์ •\n if (maxCols >= 6) {\n finalSize = 'sm';\n } else if (maxCols >= 5) {\n finalSize = 'sm';\n } else if (maxCols >= 4) {\n if (resolvedStyle.controlSize === 'lg') {\n finalSize = 'md';\n }\n }\n\n const createEventHandler = (eventType: string, value: any) => {\n if (fieldName) {\n formState[fieldName] = value;\n handleChange(fieldName, value);\n }\n \n if (field.events?.[eventType as keyof typeof field.events]) {\n const handlerName = field.events[eventType as keyof typeof field.events];\n console.log(`Event ${eventType}: Calling handler \"${handlerName}\" with value:`, value);\n }\n };\n\n if (BOOLEAN_TYPES.includes(field.type)) {\n return {\n modelValue: formState[fieldName] === 'Y' ? 'Y' : 'N',\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n if (fieldName) {\n formState[fieldName] = value;\n }\n createEventHandler('onChange', value === 'Y');\n }\n };\n }\n\n if (field.type === 'radio') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: field.options ?? [],\n multiple: field.multiple,\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'select' || field.type === 'combo') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: getSelectOptions(field),\n multiple: field.multiple,\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'searchcombo') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: getSelectOptions(field),\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'textarea') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'datepicker') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n // ๊ธฐ๋ณธ input\n return {\n modelValue: String(formState[fieldName] ?? ''),\n inputType: field.inputType || (field.dataType === 'number' ? 'number' : 'text'),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string | number) => {\n createEventHandler('onChange', value);\n }\n };\n}\n\n// Select ์˜ต์…˜ ์ƒ์„ฑ\nfunction getSelectOptions(field: DynamicFormField) {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n const defaultOption = {\n value: addAll ? 'ALL' : 'SELECT',\n label: addAll ? '์ „์ฒด' : '์„ ํƒ'\n };\n return [defaultOption, ...(field.options || [])];\n}\n\n// ํผ ๋ฆฌ์…‹\nfunction reset() {\n Object.keys(formState).forEach(key => {\n delete formState[key];\n });\n \n // ๋ชจ๋“  ํ•„๋“œ ์ˆ˜์ง‘\n const allFields: DynamicFormField[] = [];\n \n if (props.schema.type === 'simple' && props.schema.fields) {\n allFields.push(...props.schema.fields);\n } else if (props.schema.type === 'sectioned' && props.schema.sections) {\n props.schema.sections.forEach(section => {\n if (section.fields) allFields.push(...section.fields);\n });\n } else if (props.schema.type === 'wizard' && props.schema.steps) {\n props.schema.steps.forEach(step => {\n if (step.fields) allFields.push(...step.fields);\n });\n }\n \n // ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •\n allFields.forEach((field) => {\n const fieldName = getFieldName(field);\n if (fieldName) {\n if (BOOLEAN_TYPES.includes(field.type)) {\n formState[fieldName] = 'N';\n } else if (field.type === 'radio') {\n formState[fieldName] = field.options?.[0]?.value ?? '';\n } else if (field.type === 'select' || field.type === 'searchcombo') {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n formState[fieldName] = addAll ? 'ALL' : 'SELECT';\n } else {\n formState[fieldName] = '';\n }\n }\n });\n}\n\n// ํผ ์ƒํƒœ ๋…ธ์ถœ\ndefineExpose({\n formState,\n submit: handleSubmit,\n reset,\n handleError\n});\n</script>\n\n<style scoped>\nform {\n width: 100%;\n}\n</style>\n"],"names":["props","__props","emit","__emit","BOOLEAN_TYPES","formState","reactive","watch","newValues","getFieldKey","field","index","getFieldName","getFieldRequired","newSchema","allFields","section","step","fieldName","addAll","val","handleSubmit","handleChange","value","handleError","errs","getOrderedFields","fields","a","b","aName","bName","formClasses","computed","colCount","gapClass","getGapClass","classes","fieldBaseClass","getMaxCols","getLabelWidth","maxCols","getLabelPosition","getLabelAlign","getFieldStyle","getFieldProps","disabled","readonly","baseClass","resolvedStyle","resolveGlobalStyle","finalSize","createEventHandler","eventType","handlerName","getSelectOptions","reset","key","__expose","_createElementBlock","_Fragment","_renderList","_normalizeClass","_normalizeStyle","_createVNode","_unref","_mergeProps","_openBlock","_hoisted_1","_createBlock","JCard","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4"],"mappings":"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"}
1
+ {"version":3,"file":"JDynamicForm.vue2.cjs","sources":["../../../../src/components/organisms/JDynamicForm.vue"],"sourcesContent":["<template>\n <form @submit.prevent=\"handleSubmit\" :class=\"formClasses\">\n <!-- ๐Ÿงฑ ๋‹จ์ˆœํ˜• ํผ -->\n <template v-if=\"schema.type === 'simple'\">\n <div\n v-for=\"(field, index) in getOrderedFields(schema.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </template>\n\n <!-- ๐Ÿ“ฆ ์„น์…˜ํ˜• ํผ -->\n <template v-else-if=\"schema.type === 'sectioned'\">\n <div class=\"space-y-6\">\n <JCard\n v-for=\"section in schema.sections\"\n :key=\"section.id\"\n :title=\"section.title\"\n :collapsible=\"section.collapsible\"\n :default-collapsed=\"section.defaultCollapsed\"\n >\n <div :class=\"formClasses\">\n <div\n v-for=\"(field, index) in getOrderedFields(section.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </div>\n </JCard>\n </div>\n </template>\n\n <!-- ๐Ÿชœ ์Šคํ…ํ˜• (Wizard) -->\n <template v-else-if=\"schema.type === 'wizard'\">\n <div class=\"space-y-4\">\n <div\n v-for=\"step in schema.steps\"\n :key=\"step.id\"\n class=\"p-4 border rounded-xl\"\n >\n <h3 class=\"font-semibold text-lg\">{{ step.title }}</h3>\n <p v-if=\"step.description\" class=\"text-muted-foreground text-sm mb-2\">\n {{ step.description }}\n </p>\n <div :class=\"formClasses\">\n <div\n v-for=\"(field, index) in getOrderedFields(step.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </div>\n </div>\n </div>\n </template>\n\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, watch } from 'vue';\nimport { JFormField, JCard } from '@/components/molecules';\nimport type { FormSchema, DynamicFormField } from '@/types/dynamic-form';\nimport { resolveGlobalStyle } from '@/lib/styleTypePreset';\n\n// props\nconst props = defineProps<{\n schema: FormSchema;\n modelValue?: Record<string, any>;\n}>();\n\nconst emit = defineEmits(['update:modelValue', 'submit', 'change', 'error']);\n\nconst BOOLEAN_TYPES: Array<DynamicFormField['type']> = ['checkbox', 'switch'];\n\n// ํผ ์ƒํƒœ ๊ด€๋ฆฌ\nconst formState = reactive<Record<string, any>>({});\n\n// ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •\nwatch(\n () => props.modelValue,\n (newValues) => {\n if (newValues) {\n Object.assign(formState, newValues);\n }\n },\n { immediate: true, deep: true }\n);\n\n// ํ•„๋“œ ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ (controlId > controlName > name > label ์ˆœ์„œ)\nfunction getFieldKey(field: DynamicFormField, index: number): string {\n return field.controlId || field.controlName || (field as any).name || field.label || `field-${index}`;\n}\n\n// ํ•„๋“œ ์ด๋ฆ„ ๊ฐ€์ ธ์˜ค๊ธฐ (controlName > name ์ˆœ์„œ)\nfunction getFieldName(field: DynamicFormField): string {\n return field.controlName || (field as any).name || '';\n}\n\n// ํ•„๋“œ required ๊ฐ€์ ธ์˜ค๊ธฐ (isRequired > required ์ˆœ์„œ)\nfunction getFieldRequired(field: DynamicFormField): boolean {\n return field.isRequired !== undefined ? field.isRequired : ((field as any).required || false);\n}\n\n// ํ•„๋“œ ์ดˆ๊ธฐํ™”\nwatch(\n () => props.schema,\n (newSchema) => {\n const allFields: DynamicFormField[] = [];\n \n if (newSchema.type === 'simple' && newSchema.fields) {\n allFields.push(...newSchema.fields);\n } else if (newSchema.type === 'sectioned' && newSchema.sections) {\n newSchema.sections.forEach(section => {\n if (section.fields) allFields.push(...section.fields);\n });\n } else if (newSchema.type === 'wizard' && newSchema.steps) {\n newSchema.steps.forEach(step => {\n if (step.fields) allFields.push(...step.fields);\n });\n }\n \n allFields.forEach((field) => {\n const fieldName = getFieldName(field);\n if (fieldName && formState[fieldName] === undefined) {\n if (BOOLEAN_TYPES.includes(field.type)) {\n formState[fieldName] = 'N';\n } else if (field.type === 'radio') {\n formState[fieldName] = field.options?.[0]?.value ?? '';\n } else if (field.type === 'select' || field.type === 'searchcombo') {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n formState[fieldName] = addAll ? 'ALL' : 'SELECT';\n } else {\n formState[fieldName] = '';\n }\n }\n });\n },\n { immediate: true }\n);\n\n// ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ์ง€ โ†’ ์ƒ์œ„ emit\nwatch(formState, (val) => emit('update:modelValue', val), { deep: true });\n\n// ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nfunction handleSubmit() {\n emit('submit', { ...formState });\n if (typeof props.schema.events?.onSubmit === 'function') {\n props.schema.events.onSubmit({ ...formState });\n }\n}\n\nfunction handleChange(field: string, value: any) {\n emit('change', { field, value });\n if (typeof props.schema.events?.onChange === 'function') {\n props.schema.events.onChange(field, value);\n }\n}\n\nfunction handleError(errs: any) {\n emit('error', errs);\n if (typeof props.schema.events?.onError === 'function') {\n props.schema.events.onError(errs);\n }\n}\n\n// ์ •๋ ฌ๋œ ํ•„๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getOrderedFields(fields: DynamicFormField[]): DynamicFormField[] {\n const visibleFields = fields.filter((field) => field.isVisible !== false);\n return visibleFields.sort((a, b) => {\n // sortOrder ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ\n if (a.sortOrder !== undefined && b.sortOrder !== undefined) {\n if (a.sortOrder !== b.sortOrder) {\n return a.sortOrder - b.sortOrder;\n }\n }\n const aName = a.controlName || (a as any).name || a.label || '';\n const bName = b.controlName || (b as any).name || b.label || '';\n return aName.localeCompare(bName);\n });\n}\n\n// ํผ ํด๋ž˜์Šค ๊ณ„์‚ฐ\nconst formClasses = computed(() => {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const gapClass = getGapClass(colCount);\n \n // ๋ฐ˜์‘ํ˜•: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์—ด ์ˆ˜ ์ž๋™ ์กฐ์ •\n let classes = '';\n switch (colCount) {\n case 'row-1':\n classes = `flex flex-col ${gapClass}`;\n break;\n case 'row':\n case 'row-2':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 auto-rows-min`;\n break;\n case 'row-3':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 auto-rows-min`;\n break;\n case 'row-4':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-4 auto-rows-min`;\n break;\n case 'row-5':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 auto-rows-min`;\n break;\n case 'row-6':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 auto-rows-min`;\n break;\n case 'row-7':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7 auto-rows-min`;\n break;\n case 'row-8':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-8 auto-rows-min`;\n break;\n default:\n classes = `flex flex-col ${gapClass}`;\n }\n \n return classes;\n});\n\n// ํ•„๋“œ ๊ธฐ๋ณธ ํด๋ž˜์Šค\nfunction fieldBaseClass(field: DynamicFormField): string {\n return BOOLEAN_TYPES.includes(field.type)\n ? 'min-w-0 w-auto inline-flex items-center'\n : 'min-w-0 w-full';\n}\n\n// ์ตœ๋Œ€ ์—ด ์ˆ˜ ๊ณ„์‚ฐ\nfunction getMaxCols(colCount?: string): number {\n switch (colCount) {\n case 'row':\n case 'row-2': return 2;\n case 'row-3': return 3;\n case 'row-4': return 4;\n case 'row-5': return 5;\n case 'row-6': return 6;\n case 'row-7': return 7;\n case 'row-8': return 8;\n default: return 1;\n }\n}\n\n// ์—ด ์ˆ˜์— ๋”ฐ๋ฅธ gap ๊ณ„์‚ฐ\nfunction getGapClass(colCount: string): string {\n switch (colCount) {\n case 'row-1': return 'gap-3';\n case 'row':\n case 'row-2': return 'gap-3';\n case 'row-3': return 'gap-3';\n case 'row-4': return 'gap-2';\n case 'row-5': return 'gap-2';\n case 'row-6': return 'gap-2';\n case 'row-7': return 'gap-2';\n case 'row-8': return 'gap-2';\n default: return 'gap-3';\n }\n}\n\n// ์—ด ์ˆ˜์— ๋”ฐ๋ฅธ ๋ผ๋ฒจ ๋„ˆ๋น„ ๊ณ„์‚ฐ\nfunction getLabelWidth(): string {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n if (maxCols >= 6) return '6rem';\n if (maxCols >= 5) return '7rem';\n return '8rem';\n}\n\n// ๋ผ๋ฒจ ์œ„์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getLabelPosition(): 'horizontal' | 'vertical' {\n return props.schema.globalStyle?.labelPosition || 'horizontal';\n}\n\n// ๋ผ๋ฒจ ์ •๋ ฌ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getLabelAlign(): 'left' | 'middle' | 'right' {\n return props.schema.globalStyle?.labelAlign || 'left';\n}\n\n// ํ•„๋“œ ์Šคํƒ€์ผ ๊ณ„์‚ฐ\nfunction getFieldStyle(field: DynamicFormField): Record<string, string> {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n const span = Math.min(maxCols, Math.max(1, field.colSpan || 1));\n return {\n gridColumn: `span ${span}`\n };\n}\n\n// ํ•„๋“œ props ์ƒ์„ฑ\nfunction getFieldProps(field: DynamicFormField) {\n const fieldName = getFieldName(field);\n const disabled = field.isDisabled !== undefined ? field.isDisabled : ((field as any).disabled || false);\n const readonly = field.isReadonly !== undefined ? field.isReadonly : ((field as any).readonly || false);\n \n // baseClass ์กฐ์ •\n const baseClass = BOOLEAN_TYPES.includes(field.type)\n ? 'inline-flex items-center gap-2 w-auto'\n : 'w-full';\n \n // ์ „์—ญ ์Šคํƒ€์ผ ํ•ด๊ฒฐ\n const resolvedStyle = resolveGlobalStyle(props.schema.globalStyle);\n \n // ์—ด ์ˆ˜์— ๋”ฐ๋ผ ์ปจํŠธ๋กค ํฌ๊ธฐ ๋™์  ์กฐ์ •\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n let finalSize = resolvedStyle.controlSize;\n \n // 4์—ด ์ด์ƒ์ผ ๋•Œ ์ปจํŠธ๋กค ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์กฐ์ •\n if (maxCols >= 6) {\n finalSize = 'sm';\n } else if (maxCols >= 5) {\n finalSize = 'sm';\n } else if (maxCols >= 4) {\n if (resolvedStyle.controlSize === 'lg') {\n finalSize = 'md';\n }\n }\n\n const createEventHandler = (eventType: string, value: any) => {\n if (fieldName) {\n formState[fieldName] = value;\n handleChange(fieldName, value);\n }\n \n if (field.events?.[eventType as keyof typeof field.events]) {\n const handlerName = field.events[eventType as keyof typeof field.events];\n console.log(`Event ${eventType}: Calling handler \"${handlerName}\" with value:`, value);\n }\n };\n\n if (BOOLEAN_TYPES.includes(field.type)) {\n return {\n modelValue: formState[fieldName] === 'Y' ? 'Y' : 'N',\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n if (fieldName) {\n formState[fieldName] = value;\n }\n createEventHandler('onChange', value === 'Y');\n }\n };\n }\n\n if (field.type === 'radio') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: field.options ?? [],\n multiple: field.multiple,\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'select' || field.type === 'combo') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: getSelectOptions(field),\n multiple: field.multiple,\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'searchcombo') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: getSelectOptions(field),\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'textarea') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'datepicker') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n // ๊ธฐ๋ณธ input\n return {\n modelValue: String(formState[fieldName] ?? ''),\n inputType: field.inputType || (field.dataType === 'number' ? 'number' : 'text'),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string | number) => {\n createEventHandler('onChange', value);\n }\n };\n}\n\n// Select ์˜ต์…˜ ์ƒ์„ฑ\nfunction getSelectOptions(field: DynamicFormField) {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n const defaultOption = {\n value: addAll ? 'ALL' : 'SELECT',\n label: addAll ? '์ „์ฒด' : '์„ ํƒ'\n };\n return [defaultOption, ...(field.options || [])];\n}\n\n// ํผ ๋ฆฌ์…‹\nfunction reset() {\n Object.keys(formState).forEach(key => {\n delete formState[key];\n });\n \n // ๋ชจ๋“  ํ•„๋“œ ์ˆ˜์ง‘\n const allFields: DynamicFormField[] = [];\n \n if (props.schema.type === 'simple' && props.schema.fields) {\n allFields.push(...props.schema.fields);\n } else if (props.schema.type === 'sectioned' && props.schema.sections) {\n props.schema.sections.forEach(section => {\n if (section.fields) allFields.push(...section.fields);\n });\n } else if (props.schema.type === 'wizard' && props.schema.steps) {\n props.schema.steps.forEach(step => {\n if (step.fields) allFields.push(...step.fields);\n });\n }\n \n // ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •\n allFields.forEach((field) => {\n const fieldName = getFieldName(field);\n if (fieldName) {\n if (BOOLEAN_TYPES.includes(field.type)) {\n formState[fieldName] = 'N';\n } else if (field.type === 'radio') {\n formState[fieldName] = field.options?.[0]?.value ?? '';\n } else if (field.type === 'select' || field.type === 'searchcombo') {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n formState[fieldName] = addAll ? 'ALL' : 'SELECT';\n } else {\n formState[fieldName] = '';\n }\n }\n });\n}\n\n// ํผ ์ƒํƒœ ๋…ธ์ถœ\ndefineExpose({\n formState,\n submit: handleSubmit,\n reset,\n handleError\n});\n</script>\n\n<style scoped>\nform {\n width: 100%;\n}\n</style>\n"],"names":["props","__props","emit","__emit","BOOLEAN_TYPES","formState","reactive","watch","newValues","getFieldKey","field","index","getFieldName","getFieldRequired","newSchema","allFields","section","step","fieldName","addAll","val","handleSubmit","handleChange","value","handleError","errs","getOrderedFields","fields","a","b","aName","bName","formClasses","computed","colCount","gapClass","getGapClass","classes","fieldBaseClass","getMaxCols","getLabelWidth","maxCols","getLabelPosition","getLabelAlign","getFieldStyle","getFieldProps","disabled","readonly","baseClass","resolvedStyle","resolveGlobalStyle","finalSize","createEventHandler","eventType","handlerName","getSelectOptions","reset","key","__expose","_createElementBlock","_Fragment","_renderList","_normalizeClass","_normalizeStyle","_createVNode","_unref","_mergeProps","_openBlock","_hoisted_1","_createBlock","JCard","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4"],"mappings":"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"}
@@ -165,14 +165,14 @@ const ae = {
165
165
  function H(e) {
166
166
  switch (e) {
167
167
  case "row-1":
168
- return "gap-6";
168
+ return "gap-3";
169
169
  case "row":
170
170
  case "row-2":
171
- return "gap-4";
171
+ return "gap-3";
172
172
  case "row-3":
173
- return "gap-4";
174
- case "row-4":
175
173
  return "gap-3";
174
+ case "row-4":
175
+ return "gap-2";
176
176
  case "row-5":
177
177
  return "gap-2";
178
178
  case "row-6":
@@ -182,7 +182,7 @@ const ae = {
182
182
  case "row-8":
183
183
  return "gap-2";
184
184
  default:
185
- return "gap-6";
185
+ return "gap-3";
186
186
  }
187
187
  }
188
188
  function V() {
@@ -1 +1 @@
1
- {"version":3,"file":"JDynamicForm.vue2.js","sources":["../../../../src/components/organisms/JDynamicForm.vue"],"sourcesContent":["<template>\n <form @submit.prevent=\"handleSubmit\" :class=\"formClasses\">\n <!-- ๐Ÿงฑ ๋‹จ์ˆœํ˜• ํผ -->\n <template v-if=\"schema.type === 'simple'\">\n <div\n v-for=\"(field, index) in getOrderedFields(schema.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </template>\n\n <!-- ๐Ÿ“ฆ ์„น์…˜ํ˜• ํผ -->\n <template v-else-if=\"schema.type === 'sectioned'\">\n <div class=\"space-y-6\">\n <JCard\n v-for=\"section in schema.sections\"\n :key=\"section.id\"\n :title=\"section.title\"\n :collapsible=\"section.collapsible\"\n :default-collapsed=\"section.defaultCollapsed\"\n >\n <div :class=\"formClasses\">\n <div\n v-for=\"(field, index) in getOrderedFields(section.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </div>\n </JCard>\n </div>\n </template>\n\n <!-- ๐Ÿชœ ์Šคํ…ํ˜• (Wizard) -->\n <template v-else-if=\"schema.type === 'wizard'\">\n <div class=\"space-y-4\">\n <div\n v-for=\"step in schema.steps\"\n :key=\"step.id\"\n class=\"p-4 border rounded-xl\"\n >\n <h3 class=\"font-semibold text-lg\">{{ step.title }}</h3>\n <p v-if=\"step.description\" class=\"text-muted-foreground text-sm mb-2\">\n {{ step.description }}\n </p>\n <div :class=\"formClasses\">\n <div\n v-for=\"(field, index) in getOrderedFields(step.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </div>\n </div>\n </div>\n </template>\n\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, watch } from 'vue';\nimport { JFormField, JCard } from '@/components/molecules';\nimport type { FormSchema, DynamicFormField } from '@/types/dynamic-form';\nimport { resolveGlobalStyle } from '@/lib/styleTypePreset';\n\n// props\nconst props = defineProps<{\n schema: FormSchema;\n modelValue?: Record<string, any>;\n}>();\n\nconst emit = defineEmits(['update:modelValue', 'submit', 'change', 'error']);\n\nconst BOOLEAN_TYPES: Array<DynamicFormField['type']> = ['checkbox', 'switch'];\n\n// ํผ ์ƒํƒœ ๊ด€๋ฆฌ\nconst formState = reactive<Record<string, any>>({});\n\n// ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •\nwatch(\n () => props.modelValue,\n (newValues) => {\n if (newValues) {\n Object.assign(formState, newValues);\n }\n },\n { immediate: true, deep: true }\n);\n\n// ํ•„๋“œ ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ (controlId > controlName > name > label ์ˆœ์„œ)\nfunction getFieldKey(field: DynamicFormField, index: number): string {\n return field.controlId || field.controlName || (field as any).name || field.label || `field-${index}`;\n}\n\n// ํ•„๋“œ ์ด๋ฆ„ ๊ฐ€์ ธ์˜ค๊ธฐ (controlName > name ์ˆœ์„œ)\nfunction getFieldName(field: DynamicFormField): string {\n return field.controlName || (field as any).name || '';\n}\n\n// ํ•„๋“œ required ๊ฐ€์ ธ์˜ค๊ธฐ (isRequired > required ์ˆœ์„œ)\nfunction getFieldRequired(field: DynamicFormField): boolean {\n return field.isRequired !== undefined ? field.isRequired : ((field as any).required || false);\n}\n\n// ํ•„๋“œ ์ดˆ๊ธฐํ™”\nwatch(\n () => props.schema,\n (newSchema) => {\n const allFields: DynamicFormField[] = [];\n \n if (newSchema.type === 'simple' && newSchema.fields) {\n allFields.push(...newSchema.fields);\n } else if (newSchema.type === 'sectioned' && newSchema.sections) {\n newSchema.sections.forEach(section => {\n if (section.fields) allFields.push(...section.fields);\n });\n } else if (newSchema.type === 'wizard' && newSchema.steps) {\n newSchema.steps.forEach(step => {\n if (step.fields) allFields.push(...step.fields);\n });\n }\n \n allFields.forEach((field) => {\n const fieldName = getFieldName(field);\n if (fieldName && formState[fieldName] === undefined) {\n if (BOOLEAN_TYPES.includes(field.type)) {\n formState[fieldName] = 'N';\n } else if (field.type === 'radio') {\n formState[fieldName] = field.options?.[0]?.value ?? '';\n } else if (field.type === 'select' || field.type === 'searchcombo') {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n formState[fieldName] = addAll ? 'ALL' : 'SELECT';\n } else {\n formState[fieldName] = '';\n }\n }\n });\n },\n { immediate: true }\n);\n\n// ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ์ง€ โ†’ ์ƒ์œ„ emit\nwatch(formState, (val) => emit('update:modelValue', val), { deep: true });\n\n// ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nfunction handleSubmit() {\n emit('submit', { ...formState });\n if (typeof props.schema.events?.onSubmit === 'function') {\n props.schema.events.onSubmit({ ...formState });\n }\n}\n\nfunction handleChange(field: string, value: any) {\n emit('change', { field, value });\n if (typeof props.schema.events?.onChange === 'function') {\n props.schema.events.onChange(field, value);\n }\n}\n\nfunction handleError(errs: any) {\n emit('error', errs);\n if (typeof props.schema.events?.onError === 'function') {\n props.schema.events.onError(errs);\n }\n}\n\n// ์ •๋ ฌ๋œ ํ•„๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getOrderedFields(fields: DynamicFormField[]): DynamicFormField[] {\n const visibleFields = fields.filter((field) => field.isVisible !== false);\n return visibleFields.sort((a, b) => {\n // sortOrder ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ\n if (a.sortOrder !== undefined && b.sortOrder !== undefined) {\n if (a.sortOrder !== b.sortOrder) {\n return a.sortOrder - b.sortOrder;\n }\n }\n const aName = a.controlName || (a as any).name || a.label || '';\n const bName = b.controlName || (b as any).name || b.label || '';\n return aName.localeCompare(bName);\n });\n}\n\n// ํผ ํด๋ž˜์Šค ๊ณ„์‚ฐ\nconst formClasses = computed(() => {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const gapClass = getGapClass(colCount);\n \n // ๋ฐ˜์‘ํ˜•: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์—ด ์ˆ˜ ์ž๋™ ์กฐ์ •\n let classes = '';\n switch (colCount) {\n case 'row-1':\n classes = `flex flex-col ${gapClass}`;\n break;\n case 'row':\n case 'row-2':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 auto-rows-min`;\n break;\n case 'row-3':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 auto-rows-min`;\n break;\n case 'row-4':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-4 auto-rows-min`;\n break;\n case 'row-5':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 auto-rows-min`;\n break;\n case 'row-6':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 auto-rows-min`;\n break;\n case 'row-7':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7 auto-rows-min`;\n break;\n case 'row-8':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-8 auto-rows-min`;\n break;\n default:\n classes = `flex flex-col ${gapClass}`;\n }\n \n return classes;\n});\n\n// ํ•„๋“œ ๊ธฐ๋ณธ ํด๋ž˜์Šค\nfunction fieldBaseClass(field: DynamicFormField): string {\n return BOOLEAN_TYPES.includes(field.type)\n ? 'min-w-0 w-auto inline-flex items-center'\n : 'min-w-0 w-full';\n}\n\n// ์ตœ๋Œ€ ์—ด ์ˆ˜ ๊ณ„์‚ฐ\nfunction getMaxCols(colCount?: string): number {\n switch (colCount) {\n case 'row':\n case 'row-2': return 2;\n case 'row-3': return 3;\n case 'row-4': return 4;\n case 'row-5': return 5;\n case 'row-6': return 6;\n case 'row-7': return 7;\n case 'row-8': return 8;\n default: return 1;\n }\n}\n\n// ์—ด ์ˆ˜์— ๋”ฐ๋ฅธ gap ๊ณ„์‚ฐ\nfunction getGapClass(colCount: string): string {\n switch (colCount) {\n case 'row-1': return 'gap-6';\n case 'row':\n case 'row-2': return 'gap-4';\n case 'row-3': return 'gap-4';\n case 'row-4': return 'gap-3';\n case 'row-5': return 'gap-2';\n case 'row-6': return 'gap-2';\n case 'row-7': return 'gap-2';\n case 'row-8': return 'gap-2';\n default: return 'gap-6';\n }\n}\n\n// ์—ด ์ˆ˜์— ๋”ฐ๋ฅธ ๋ผ๋ฒจ ๋„ˆ๋น„ ๊ณ„์‚ฐ\nfunction getLabelWidth(): string {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n if (maxCols >= 6) return '6rem';\n if (maxCols >= 5) return '7rem';\n return '8rem';\n}\n\n// ๋ผ๋ฒจ ์œ„์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getLabelPosition(): 'horizontal' | 'vertical' {\n return props.schema.globalStyle?.labelPosition || 'horizontal';\n}\n\n// ๋ผ๋ฒจ ์ •๋ ฌ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getLabelAlign(): 'left' | 'middle' | 'right' {\n return props.schema.globalStyle?.labelAlign || 'left';\n}\n\n// ํ•„๋“œ ์Šคํƒ€์ผ ๊ณ„์‚ฐ\nfunction getFieldStyle(field: DynamicFormField): Record<string, string> {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n const span = Math.min(maxCols, Math.max(1, field.colSpan || 1));\n return {\n gridColumn: `span ${span}`\n };\n}\n\n// ํ•„๋“œ props ์ƒ์„ฑ\nfunction getFieldProps(field: DynamicFormField) {\n const fieldName = getFieldName(field);\n const disabled = field.isDisabled !== undefined ? field.isDisabled : ((field as any).disabled || false);\n const readonly = field.isReadonly !== undefined ? field.isReadonly : ((field as any).readonly || false);\n \n // baseClass ์กฐ์ •\n const baseClass = BOOLEAN_TYPES.includes(field.type)\n ? 'inline-flex items-center gap-2 w-auto'\n : 'w-full';\n \n // ์ „์—ญ ์Šคํƒ€์ผ ํ•ด๊ฒฐ\n const resolvedStyle = resolveGlobalStyle(props.schema.globalStyle);\n \n // ์—ด ์ˆ˜์— ๋”ฐ๋ผ ์ปจํŠธ๋กค ํฌ๊ธฐ ๋™์  ์กฐ์ •\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n let finalSize = resolvedStyle.controlSize;\n \n // 4์—ด ์ด์ƒ์ผ ๋•Œ ์ปจํŠธ๋กค ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์กฐ์ •\n if (maxCols >= 6) {\n finalSize = 'sm';\n } else if (maxCols >= 5) {\n finalSize = 'sm';\n } else if (maxCols >= 4) {\n if (resolvedStyle.controlSize === 'lg') {\n finalSize = 'md';\n }\n }\n\n const createEventHandler = (eventType: string, value: any) => {\n if (fieldName) {\n formState[fieldName] = value;\n handleChange(fieldName, value);\n }\n \n if (field.events?.[eventType as keyof typeof field.events]) {\n const handlerName = field.events[eventType as keyof typeof field.events];\n console.log(`Event ${eventType}: Calling handler \"${handlerName}\" with value:`, value);\n }\n };\n\n if (BOOLEAN_TYPES.includes(field.type)) {\n return {\n modelValue: formState[fieldName] === 'Y' ? 'Y' : 'N',\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n if (fieldName) {\n formState[fieldName] = value;\n }\n createEventHandler('onChange', value === 'Y');\n }\n };\n }\n\n if (field.type === 'radio') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: field.options ?? [],\n multiple: field.multiple,\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'select' || field.type === 'combo') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: getSelectOptions(field),\n multiple: field.multiple,\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'searchcombo') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: getSelectOptions(field),\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'textarea') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'datepicker') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n // ๊ธฐ๋ณธ input\n return {\n modelValue: String(formState[fieldName] ?? ''),\n inputType: field.inputType || (field.dataType === 'number' ? 'number' : 'text'),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string | number) => {\n createEventHandler('onChange', value);\n }\n };\n}\n\n// Select ์˜ต์…˜ ์ƒ์„ฑ\nfunction getSelectOptions(field: DynamicFormField) {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n const defaultOption = {\n value: addAll ? 'ALL' : 'SELECT',\n label: addAll ? '์ „์ฒด' : '์„ ํƒ'\n };\n return [defaultOption, ...(field.options || [])];\n}\n\n// ํผ ๋ฆฌ์…‹\nfunction reset() {\n Object.keys(formState).forEach(key => {\n delete formState[key];\n });\n \n // ๋ชจ๋“  ํ•„๋“œ ์ˆ˜์ง‘\n const allFields: DynamicFormField[] = [];\n \n if (props.schema.type === 'simple' && props.schema.fields) {\n allFields.push(...props.schema.fields);\n } else if (props.schema.type === 'sectioned' && props.schema.sections) {\n props.schema.sections.forEach(section => {\n if (section.fields) allFields.push(...section.fields);\n });\n } else if (props.schema.type === 'wizard' && props.schema.steps) {\n props.schema.steps.forEach(step => {\n if (step.fields) allFields.push(...step.fields);\n });\n }\n \n // ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •\n allFields.forEach((field) => {\n const fieldName = getFieldName(field);\n if (fieldName) {\n if (BOOLEAN_TYPES.includes(field.type)) {\n formState[fieldName] = 'N';\n } else if (field.type === 'radio') {\n formState[fieldName] = field.options?.[0]?.value ?? '';\n } else if (field.type === 'select' || field.type === 'searchcombo') {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n formState[fieldName] = addAll ? 'ALL' : 'SELECT';\n } else {\n formState[fieldName] = '';\n }\n }\n });\n}\n\n// ํผ ์ƒํƒœ ๋…ธ์ถœ\ndefineExpose({\n formState,\n submit: handleSubmit,\n reset,\n handleError\n});\n</script>\n\n<style scoped>\nform {\n width: 100%;\n}\n</style>\n"],"names":["props","__props","emit","__emit","BOOLEAN_TYPES","formState","reactive","watch","newValues","getFieldKey","field","index","getFieldName","getFieldRequired","newSchema","allFields","section","step","fieldName","addAll","val","handleSubmit","handleChange","value","handleError","errs","getOrderedFields","fields","a","b","aName","bName","formClasses","computed","colCount","gapClass","getGapClass","classes","fieldBaseClass","getMaxCols","getLabelWidth","maxCols","getLabelPosition","getLabelAlign","getFieldStyle","getFieldProps","disabled","readonly","baseClass","resolvedStyle","resolveGlobalStyle","finalSize","createEventHandler","eventType","handlerName","getSelectOptions","reset","key","__expose","_createElementBlock","_Fragment","_renderList","_normalizeClass","_normalizeStyle","_createVNode","_unref","_mergeProps","_openBlock","_hoisted_1","_createBlock","JCard","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4"],"mappings":"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"}
1
+ {"version":3,"file":"JDynamicForm.vue2.js","sources":["../../../../src/components/organisms/JDynamicForm.vue"],"sourcesContent":["<template>\n <form @submit.prevent=\"handleSubmit\" :class=\"formClasses\">\n <!-- ๐Ÿงฑ ๋‹จ์ˆœํ˜• ํผ -->\n <template v-if=\"schema.type === 'simple'\">\n <div\n v-for=\"(field, index) in getOrderedFields(schema.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </template>\n\n <!-- ๐Ÿ“ฆ ์„น์…˜ํ˜• ํผ -->\n <template v-else-if=\"schema.type === 'sectioned'\">\n <div class=\"space-y-6\">\n <JCard\n v-for=\"section in schema.sections\"\n :key=\"section.id\"\n :title=\"section.title\"\n :collapsible=\"section.collapsible\"\n :default-collapsed=\"section.defaultCollapsed\"\n >\n <div :class=\"formClasses\">\n <div\n v-for=\"(field, index) in getOrderedFields(section.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </div>\n </JCard>\n </div>\n </template>\n\n <!-- ๐Ÿชœ ์Šคํ…ํ˜• (Wizard) -->\n <template v-else-if=\"schema.type === 'wizard'\">\n <div class=\"space-y-4\">\n <div\n v-for=\"step in schema.steps\"\n :key=\"step.id\"\n class=\"p-4 border rounded-xl\"\n >\n <h3 class=\"font-semibold text-lg\">{{ step.title }}</h3>\n <p v-if=\"step.description\" class=\"text-muted-foreground text-sm mb-2\">\n {{ step.description }}\n </p>\n <div :class=\"formClasses\">\n <div\n v-for=\"(field, index) in getOrderedFields(step.fields || [])\"\n :key=\"getFieldKey(field, index)\"\n :class=\"fieldBaseClass(field)\"\n :style=\"getFieldStyle(field)\"\n >\n <JFormField\n :label=\"field.label\"\n :required=\"getFieldRequired(field)\"\n :orientation=\"getLabelPosition()\"\n :labelAlign=\"getLabelAlign()\"\n :labelWidth=\"getLabelWidth()\"\n :type=\"(field.type === 'searchcombo' ? 'searchCombo' : field.type) as any\"\n :input-type=\"field.inputType\"\n :description=\"field.description\"\n :inline-label=\"field.inlineLabel\"\n v-bind=\"getFieldProps(field)\"\n />\n </div>\n </div>\n </div>\n </div>\n </template>\n\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, watch } from 'vue';\nimport { JFormField, JCard } from '@/components/molecules';\nimport type { FormSchema, DynamicFormField } from '@/types/dynamic-form';\nimport { resolveGlobalStyle } from '@/lib/styleTypePreset';\n\n// props\nconst props = defineProps<{\n schema: FormSchema;\n modelValue?: Record<string, any>;\n}>();\n\nconst emit = defineEmits(['update:modelValue', 'submit', 'change', 'error']);\n\nconst BOOLEAN_TYPES: Array<DynamicFormField['type']> = ['checkbox', 'switch'];\n\n// ํผ ์ƒํƒœ ๊ด€๋ฆฌ\nconst formState = reactive<Record<string, any>>({});\n\n// ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •\nwatch(\n () => props.modelValue,\n (newValues) => {\n if (newValues) {\n Object.assign(formState, newValues);\n }\n },\n { immediate: true, deep: true }\n);\n\n// ํ•„๋“œ ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ (controlId > controlName > name > label ์ˆœ์„œ)\nfunction getFieldKey(field: DynamicFormField, index: number): string {\n return field.controlId || field.controlName || (field as any).name || field.label || `field-${index}`;\n}\n\n// ํ•„๋“œ ์ด๋ฆ„ ๊ฐ€์ ธ์˜ค๊ธฐ (controlName > name ์ˆœ์„œ)\nfunction getFieldName(field: DynamicFormField): string {\n return field.controlName || (field as any).name || '';\n}\n\n// ํ•„๋“œ required ๊ฐ€์ ธ์˜ค๊ธฐ (isRequired > required ์ˆœ์„œ)\nfunction getFieldRequired(field: DynamicFormField): boolean {\n return field.isRequired !== undefined ? field.isRequired : ((field as any).required || false);\n}\n\n// ํ•„๋“œ ์ดˆ๊ธฐํ™”\nwatch(\n () => props.schema,\n (newSchema) => {\n const allFields: DynamicFormField[] = [];\n \n if (newSchema.type === 'simple' && newSchema.fields) {\n allFields.push(...newSchema.fields);\n } else if (newSchema.type === 'sectioned' && newSchema.sections) {\n newSchema.sections.forEach(section => {\n if (section.fields) allFields.push(...section.fields);\n });\n } else if (newSchema.type === 'wizard' && newSchema.steps) {\n newSchema.steps.forEach(step => {\n if (step.fields) allFields.push(...step.fields);\n });\n }\n \n allFields.forEach((field) => {\n const fieldName = getFieldName(field);\n if (fieldName && formState[fieldName] === undefined) {\n if (BOOLEAN_TYPES.includes(field.type)) {\n formState[fieldName] = 'N';\n } else if (field.type === 'radio') {\n formState[fieldName] = field.options?.[0]?.value ?? '';\n } else if (field.type === 'select' || field.type === 'searchcombo') {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n formState[fieldName] = addAll ? 'ALL' : 'SELECT';\n } else {\n formState[fieldName] = '';\n }\n }\n });\n },\n { immediate: true }\n);\n\n// ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ์ง€ โ†’ ์ƒ์œ„ emit\nwatch(formState, (val) => emit('update:modelValue', val), { deep: true });\n\n// ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ\nfunction handleSubmit() {\n emit('submit', { ...formState });\n if (typeof props.schema.events?.onSubmit === 'function') {\n props.schema.events.onSubmit({ ...formState });\n }\n}\n\nfunction handleChange(field: string, value: any) {\n emit('change', { field, value });\n if (typeof props.schema.events?.onChange === 'function') {\n props.schema.events.onChange(field, value);\n }\n}\n\nfunction handleError(errs: any) {\n emit('error', errs);\n if (typeof props.schema.events?.onError === 'function') {\n props.schema.events.onError(errs);\n }\n}\n\n// ์ •๋ ฌ๋œ ํ•„๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getOrderedFields(fields: DynamicFormField[]): DynamicFormField[] {\n const visibleFields = fields.filter((field) => field.isVisible !== false);\n return visibleFields.sort((a, b) => {\n // sortOrder ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ\n if (a.sortOrder !== undefined && b.sortOrder !== undefined) {\n if (a.sortOrder !== b.sortOrder) {\n return a.sortOrder - b.sortOrder;\n }\n }\n const aName = a.controlName || (a as any).name || a.label || '';\n const bName = b.controlName || (b as any).name || b.label || '';\n return aName.localeCompare(bName);\n });\n}\n\n// ํผ ํด๋ž˜์Šค ๊ณ„์‚ฐ\nconst formClasses = computed(() => {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const gapClass = getGapClass(colCount);\n \n // ๋ฐ˜์‘ํ˜•: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์—ด ์ˆ˜ ์ž๋™ ์กฐ์ •\n let classes = '';\n switch (colCount) {\n case 'row-1':\n classes = `flex flex-col ${gapClass}`;\n break;\n case 'row':\n case 'row-2':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 auto-rows-min`;\n break;\n case 'row-3':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 auto-rows-min`;\n break;\n case 'row-4':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-4 auto-rows-min`;\n break;\n case 'row-5':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 auto-rows-min`;\n break;\n case 'row-6':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 auto-rows-min`;\n break;\n case 'row-7':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7 auto-rows-min`;\n break;\n case 'row-8':\n classes = `flex flex-col md:grid md:grid-flow-row md:items-start ${gapClass} md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-8 auto-rows-min`;\n break;\n default:\n classes = `flex flex-col ${gapClass}`;\n }\n \n return classes;\n});\n\n// ํ•„๋“œ ๊ธฐ๋ณธ ํด๋ž˜์Šค\nfunction fieldBaseClass(field: DynamicFormField): string {\n return BOOLEAN_TYPES.includes(field.type)\n ? 'min-w-0 w-auto inline-flex items-center'\n : 'min-w-0 w-full';\n}\n\n// ์ตœ๋Œ€ ์—ด ์ˆ˜ ๊ณ„์‚ฐ\nfunction getMaxCols(colCount?: string): number {\n switch (colCount) {\n case 'row':\n case 'row-2': return 2;\n case 'row-3': return 3;\n case 'row-4': return 4;\n case 'row-5': return 5;\n case 'row-6': return 6;\n case 'row-7': return 7;\n case 'row-8': return 8;\n default: return 1;\n }\n}\n\n// ์—ด ์ˆ˜์— ๋”ฐ๋ฅธ gap ๊ณ„์‚ฐ\nfunction getGapClass(colCount: string): string {\n switch (colCount) {\n case 'row-1': return 'gap-3';\n case 'row':\n case 'row-2': return 'gap-3';\n case 'row-3': return 'gap-3';\n case 'row-4': return 'gap-2';\n case 'row-5': return 'gap-2';\n case 'row-6': return 'gap-2';\n case 'row-7': return 'gap-2';\n case 'row-8': return 'gap-2';\n default: return 'gap-3';\n }\n}\n\n// ์—ด ์ˆ˜์— ๋”ฐ๋ฅธ ๋ผ๋ฒจ ๋„ˆ๋น„ ๊ณ„์‚ฐ\nfunction getLabelWidth(): string {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n if (maxCols >= 6) return '6rem';\n if (maxCols >= 5) return '7rem';\n return '8rem';\n}\n\n// ๋ผ๋ฒจ ์œ„์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getLabelPosition(): 'horizontal' | 'vertical' {\n return props.schema.globalStyle?.labelPosition || 'horizontal';\n}\n\n// ๋ผ๋ฒจ ์ •๋ ฌ ๊ฐ€์ ธ์˜ค๊ธฐ\nfunction getLabelAlign(): 'left' | 'middle' | 'right' {\n return props.schema.globalStyle?.labelAlign || 'left';\n}\n\n// ํ•„๋“œ ์Šคํƒ€์ผ ๊ณ„์‚ฐ\nfunction getFieldStyle(field: DynamicFormField): Record<string, string> {\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n const span = Math.min(maxCols, Math.max(1, field.colSpan || 1));\n return {\n gridColumn: `span ${span}`\n };\n}\n\n// ํ•„๋“œ props ์ƒ์„ฑ\nfunction getFieldProps(field: DynamicFormField) {\n const fieldName = getFieldName(field);\n const disabled = field.isDisabled !== undefined ? field.isDisabled : ((field as any).disabled || false);\n const readonly = field.isReadonly !== undefined ? field.isReadonly : ((field as any).readonly || false);\n \n // baseClass ์กฐ์ •\n const baseClass = BOOLEAN_TYPES.includes(field.type)\n ? 'inline-flex items-center gap-2 w-auto'\n : 'w-full';\n \n // ์ „์—ญ ์Šคํƒ€์ผ ํ•ด๊ฒฐ\n const resolvedStyle = resolveGlobalStyle(props.schema.globalStyle);\n \n // ์—ด ์ˆ˜์— ๋”ฐ๋ผ ์ปจํŠธ๋กค ํฌ๊ธฐ ๋™์  ์กฐ์ •\n const colCount = props.schema.globalStyle?.colCount || \n (props.schema.layout?.columns ? `row-${props.schema.layout.columns}` : 'row-1');\n const maxCols = getMaxCols(colCount);\n let finalSize = resolvedStyle.controlSize;\n \n // 4์—ด ์ด์ƒ์ผ ๋•Œ ์ปจํŠธ๋กค ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์กฐ์ •\n if (maxCols >= 6) {\n finalSize = 'sm';\n } else if (maxCols >= 5) {\n finalSize = 'sm';\n } else if (maxCols >= 4) {\n if (resolvedStyle.controlSize === 'lg') {\n finalSize = 'md';\n }\n }\n\n const createEventHandler = (eventType: string, value: any) => {\n if (fieldName) {\n formState[fieldName] = value;\n handleChange(fieldName, value);\n }\n \n if (field.events?.[eventType as keyof typeof field.events]) {\n const handlerName = field.events[eventType as keyof typeof field.events];\n console.log(`Event ${eventType}: Calling handler \"${handlerName}\" with value:`, value);\n }\n };\n\n if (BOOLEAN_TYPES.includes(field.type)) {\n return {\n modelValue: formState[fieldName] === 'Y' ? 'Y' : 'N',\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n if (fieldName) {\n formState[fieldName] = value;\n }\n createEventHandler('onChange', value === 'Y');\n }\n };\n }\n\n if (field.type === 'radio') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: field.options ?? [],\n multiple: field.multiple,\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'select' || field.type === 'combo') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: getSelectOptions(field),\n multiple: field.multiple,\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'searchcombo') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n options: getSelectOptions(field),\n disabled,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'textarea') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n if (field.type === 'datepicker') {\n return {\n modelValue: String(formState[fieldName] ?? ''),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string) => {\n createEventHandler('onChange', value);\n }\n };\n }\n\n // ๊ธฐ๋ณธ input\n return {\n modelValue: String(formState[fieldName] ?? ''),\n inputType: field.inputType || (field.dataType === 'number' ? 'number' : 'text'),\n placeholder: field.placeholder ?? '',\n disabled,\n readonly,\n styleType: finalSize,\n class: baseClass,\n 'onUpdate:modelValue': (value: string | number) => {\n createEventHandler('onChange', value);\n }\n };\n}\n\n// Select ์˜ต์…˜ ์ƒ์„ฑ\nfunction getSelectOptions(field: DynamicFormField) {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n const defaultOption = {\n value: addAll ? 'ALL' : 'SELECT',\n label: addAll ? '์ „์ฒด' : '์„ ํƒ'\n };\n return [defaultOption, ...(field.options || [])];\n}\n\n// ํผ ๋ฆฌ์…‹\nfunction reset() {\n Object.keys(formState).forEach(key => {\n delete formState[key];\n });\n \n // ๋ชจ๋“  ํ•„๋“œ ์ˆ˜์ง‘\n const allFields: DynamicFormField[] = [];\n \n if (props.schema.type === 'simple' && props.schema.fields) {\n allFields.push(...props.schema.fields);\n } else if (props.schema.type === 'sectioned' && props.schema.sections) {\n props.schema.sections.forEach(section => {\n if (section.fields) allFields.push(...section.fields);\n });\n } else if (props.schema.type === 'wizard' && props.schema.steps) {\n props.schema.steps.forEach(step => {\n if (step.fields) allFields.push(...step.fields);\n });\n }\n \n // ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •\n allFields.forEach((field) => {\n const fieldName = getFieldName(field);\n if (fieldName) {\n if (BOOLEAN_TYPES.includes(field.type)) {\n formState[fieldName] = 'N';\n } else if (field.type === 'radio') {\n formState[fieldName] = field.options?.[0]?.value ?? '';\n } else if (field.type === 'select' || field.type === 'searchcombo') {\n const addAll = field.addAll !== undefined ? field.addAll : ((field as any).allowAll || false);\n formState[fieldName] = addAll ? 'ALL' : 'SELECT';\n } else {\n formState[fieldName] = '';\n }\n }\n });\n}\n\n// ํผ ์ƒํƒœ ๋…ธ์ถœ\ndefineExpose({\n formState,\n submit: handleSubmit,\n reset,\n handleError\n});\n</script>\n\n<style scoped>\nform {\n width: 100%;\n}\n</style>\n"],"names":["props","__props","emit","__emit","BOOLEAN_TYPES","formState","reactive","watch","newValues","getFieldKey","field","index","getFieldName","getFieldRequired","newSchema","allFields","section","step","fieldName","addAll","val","handleSubmit","handleChange","value","handleError","errs","getOrderedFields","fields","a","b","aName","bName","formClasses","computed","colCount","gapClass","getGapClass","classes","fieldBaseClass","getMaxCols","getLabelWidth","maxCols","getLabelPosition","getLabelAlign","getFieldStyle","getFieldProps","disabled","readonly","baseClass","resolvedStyle","resolveGlobalStyle","finalSize","createEventHandler","eventType","handlerName","getSelectOptions","reset","key","__expose","_createElementBlock","_Fragment","_renderList","_normalizeClass","_normalizeStyle","_createVNode","_unref","_mergeProps","_openBlock","_hoisted_1","_createBlock","JCard","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4"],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  for (const [t_key, t_val] of t_opts)
4
4
  t_merged[t_key] = t_val;
5
5
  return t_merged;
6
- };,r=t(e.default,[["__scopeId","data-v-9d1ef362"]]);exports.default=r;
6
+ };,r=t(e.default,[["__scopeId","data-v-8b9c476a"]]);exports.default=r;
7
7
  //# sourceMappingURL=JFilterBar.vue.cjs.map
@@ -6,8 +6,8 @@ const r = (r_comp, r_opts) => {
6
6
  r_merged[r_key] = r_val;
7
7
  return r_merged;
8
8
  };
9
- const f = /* @__PURE__ */ r(o, [["__scopeId", "data-v-9d1ef362"]]);
9
+ const p = /* @__PURE__ */ r(o, [["__scopeId", "data-v-8b9c476a"]]);
10
10
  export {
11
- f as default
11
+ p as default
12
12
  };
13
13
  //# sourceMappingURL=JFilterBar.vue.js.map