@j-solution/components 1.1.1 โ 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/USAGE_GUIDE.md +1068 -61
- package/assets/jwms-portal-frontend-D8DdrheA.css +1 -0
- package/assets/styles/j-components.css +1 -1
- package/components/atoms/JEditor.vue.cjs +7 -0
- package/components/atoms/JEditor.vue.cjs.map +1 -0
- package/components/atoms/JEditor.vue.js +13 -0
- package/components/atoms/JEditor.vue.js.map +1 -0
- package/components/atoms/JEditor.vue2.cjs +2 -0
- package/components/atoms/JEditor.vue2.cjs.map +1 -0
- package/components/atoms/JEditor.vue2.js +43 -0
- package/components/atoms/JEditor.vue2.js.map +1 -0
- package/components/atoms/JPreview.vue.cjs +7 -0
- package/components/atoms/JPreview.vue.cjs.map +1 -0
- package/components/atoms/JPreview.vue.js +13 -0
- package/components/atoms/JPreview.vue.js.map +1 -0
- package/components/atoms/JPreview.vue2.cjs +2 -0
- package/components/atoms/JPreview.vue2.cjs.map +1 -0
- package/components/atoms/JPreview.vue2.js +121 -0
- package/components/atoms/JPreview.vue2.js.map +1 -0
- package/components/molecules/JAlert.vue.cjs +1 -1
- package/components/molecules/JAlert.vue.cjs.map +1 -1
- package/components/molecules/JAlert.vue.js +24 -19
- package/components/molecules/JAlert.vue.js.map +1 -1
- package/components/molecules/JFormField.vue.cjs +1 -1
- package/components/molecules/JFormField.vue.cjs.map +1 -1
- package/components/molecules/JFormField.vue.js +7 -2
- package/components/molecules/JFormField.vue.js.map +1 -1
- package/components/molecules/JTitlebar.vue.cjs +1 -1
- package/components/molecules/JTitlebar.vue.cjs.map +1 -1
- package/components/molecules/JTitlebar.vue.js +20 -15
- package/components/molecules/JTitlebar.vue.js.map +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
- package/components/organisms/JDynamicForm.vue2.js +7 -2
- package/components/organisms/JDynamicForm.vue2.js.map +1 -1
- package/components/organisms/JFormModal.vue.cjs +1 -1
- package/components/organisms/JFormModal.vue.cjs.map +1 -1
- package/components/organisms/JFormModal.vue.js +20 -15
- package/components/organisms/JFormModal.vue.js.map +1 -1
- package/components/organisms/JModal.vue.cjs +1 -1
- package/components/organisms/JModal.vue.cjs.map +1 -1
- package/components/organisms/JModal.vue.js +7 -2
- package/components/organisms/JModal.vue.js.map +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
- package/components/organisms/JSearchPanel.vue2.js +31 -26
- package/components/organisms/JSearchPanel.vue2.js.map +1 -1
- package/index.cjs +1 -1
- package/index.js +82 -78
- package/package.json +3 -1
- package/tailwind.config.js +2 -1
- package/types/index.d.ts +137 -89
- package/assets/jwms-portal-frontend-BqyV9oqF.css +0 -1
|
@@ -12,9 +12,14 @@ import "lucide-vue-next";
|
|
|
12
12
|
/* empty css */
|
|
13
13
|
import re from "../molecules/JCard.vue.js";
|
|
14
14
|
import "@internationalized/date";
|
|
15
|
+
import "md-editor-v3";
|
|
16
|
+
/* empty css */
|
|
17
|
+
/* empty css */
|
|
15
18
|
import "../shadcn/badge-variants.js";
|
|
16
19
|
/* empty css */
|
|
17
20
|
import "../shadcn/avatar-variants.js";
|
|
21
|
+
import "dompurify";
|
|
22
|
+
/* empty css */
|
|
18
23
|
import "ag-grid-vue3";
|
|
19
24
|
import "ag-grid-community";
|
|
20
25
|
import "ag-grid-enterprise";
|
|
@@ -33,7 +38,7 @@ const ae = {
|
|
|
33
38
|
}, ie = { class: "font-semibold text-lg" }, ce = {
|
|
34
39
|
key: 0,
|
|
35
40
|
class: "text-muted-foreground text-sm mb-2"
|
|
36
|
-
},
|
|
41
|
+
}, Re = /* @__PURE__ */ X({
|
|
37
42
|
__name: "JDynamicForm",
|
|
38
43
|
props: {
|
|
39
44
|
schema: {},
|
|
@@ -397,6 +402,6 @@ const ae = {
|
|
|
397
402
|
}
|
|
398
403
|
});
|
|
399
404
|
export {
|
|
400
|
-
|
|
405
|
+
Re as default
|
|
401
406
|
};
|
|
402
407
|
//# sourceMappingURL=JDynamicForm.vue2.js.map
|
|
@@ -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-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,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const i=require("../atoms/JButton.vue.cjs");require("lucide-vue-next");require("clsx");require("tailwind-merge");require("@internationalized/date");require("../shadcn/badge-variants.cjs");require("@vueuse/core");require("reka-ui");;/* empty css */require("../shadcn/avatar-variants.cjs");require("ag-grid-vue3");require("ag-grid-community");require("ag-grid-enterprise");;/* empty css */;/* empty css */;/* empty css */;/* empty css */require("vue-sonner");;/* empty css */;/* empty css */;/* empty css */;/* empty css */const x=require("./JDynamicForm.vue.cjs");;/* empty css */require("vue-router");;/* empty css */;/* empty css */const h=require("../shadcn/Dialog.vue.cjs"),y=require("../shadcn/DialogContent.vue.cjs"),C=require("../shadcn/DialogHeader.vue.cjs"),V=require("../shadcn/DialogTitle.vue.cjs"),b=require("../shadcn/DialogBody.vue.cjs"),k=require("../shadcn/DialogFooter.vue.cjs"),w={class:"space-y-4"},D={key:0,class:"text-sm text-muted-foreground"},N=e.defineComponent({__name:"JFormModal",props:{open:{type:Boolean,default:!1},title:{},description:{},schema:{},modelValue:{},size:{default:"lg"},buttonType:{default:"OkCancel"},confirmText:{default:"ํ์ธ"},cancelText:{default:"์ทจ์"},confirmVariant:{default:"default"},confirmDisabled:{type:Boolean,default:!1}},emits:["update:open","update:modelValue","confirm","cancel","submit","change","error"],setup(r,{expose:d,emit:s}){const o=r,
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const i=require("../atoms/JButton.vue.cjs");require("lucide-vue-next");require("clsx");require("tailwind-merge");require("@internationalized/date");require("md-editor-v3");;/* empty css */;/* empty css */require("../shadcn/badge-variants.cjs");require("@vueuse/core");require("reka-ui");;/* 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 */;/* empty css */require("vue-sonner");;/* empty css */;/* empty css */;/* empty css */;/* empty css */const x=require("./JDynamicForm.vue.cjs");;/* empty css */require("vue-router");;/* empty css */;/* empty css */const h=require("../shadcn/Dialog.vue.cjs"),y=require("../shadcn/DialogContent.vue.cjs"),C=require("../shadcn/DialogHeader.vue.cjs"),V=require("../shadcn/DialogTitle.vue.cjs"),b=require("../shadcn/DialogBody.vue.cjs"),k=require("../shadcn/DialogFooter.vue.cjs"),w={class:"space-y-4"},D={key:0,class:"text-sm text-muted-foreground"},N=e.defineComponent({__name:"JFormModal",props:{open:{type:Boolean,default:!1},title:{},description:{},schema:{},modelValue:{},size:{default:"lg"},buttonType:{default:"OkCancel"},confirmText:{default:"ํ์ธ"},cancelText:{default:"์ทจ์"},confirmVariant:{default:"default"},confirmDisabled:{type:Boolean,default:!1}},emits:["update:open","update:modelValue","confirm","cancel","submit","change","error"],setup(r,{expose:d,emit:s}){const o=r,u=s,a=e.ref(null),l=e.ref(o.modelValue||{}),n=e.ref(!1),m=e.computed(()=>({sm:"!max-w-sm",md:"!max-w-md",lg:"!max-w-2xl",xl:"!max-w-4xl","2xl":"!max-w-6xl",full:"!max-w-[95vw]"})[o.size]);e.watch(()=>o.modelValue,t=>{t!=null?l.value={...t}:l.value={}},{deep:!0});const f=t=>{l.value=t,u("update:modelValue",t)},v=t=>{u("change",t)},q=t=>{u("submit",t),n.value&&(u("confirm",t),n.value=!1)},_=t=>{u("error",t),n.value=!1},p=t=>{u("update:open",t)},c=()=>{n.value=!0,a.value&&a.value.submit()},g=()=>{u("cancel"),a.value&&a.value.reset()};return d({reset:()=>a.value?.reset(),submit:()=>a.value?.submit(),formState:e.computed(()=>a.value?.formState)}),(t,B)=>(e.openBlock(),e.createBlock(e.unref(h.default),{open:r.open,"onUpdate:open":p,class:e.normalizeClass(m.value)},{default:e.withCtx(()=>[e.createVNode(e.unref(y.default),null,{default:e.withCtx(()=>[r.title?(e.openBlock(),e.createBlock(e.unref(C.default),{key:0,class:"bg-muted/50 border-b"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.default),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.title),1)]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(b.default),{class:"max-h-[70vh] overflow-y-auto"},{default:e.withCtx(()=>[e.createElementVNode("div",w,[r.description?(e.openBlock(),e.createElementBlock("p",D,e.toDisplayString(r.description),1)):e.createCommentVNode("",!0),e.createVNode(e.unref(x.default),{ref_key:"dynamicFormRef",ref:a,schema:r.schema,"model-value":l.value,"onUpdate:modelValue":f,onSubmit:q,onChange:v,onError:_},null,8,["schema","model-value"]),e.renderSlot(t.$slots,"body")])]),_:3}),e.createVNode(e.unref(k.default),null,{default:e.withCtx(()=>[r.buttonType==="OkCancel"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(e.unref(i.default),{variant:"outline",onClick:g},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.cancelText),1)]),_:1}),e.createVNode(e.unref(i.default),{variant:r.confirmVariant,disabled:r.confirmDisabled,onClick:c},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.confirmText),1)]),_:1},8,["variant","disabled"])],64)):r.buttonType==="Ok"?(e.openBlock(),e.createBlock(e.unref(i.default),{key:1,variant:r.confirmVariant,disabled:r.confirmDisabled,onClick:c,class:"w-full"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.confirmText),1)]),_:1},8,["variant","disabled"])):e.createCommentVNode("",!0),e.renderSlot(t.$slots,"footer")]),_:3})]),_:3})]),_:3},8,["open","class"]))}});exports.default=N;
|
|
2
2
|
//# sourceMappingURL=JFormModal.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JFormModal.vue.cjs","sources":["../../../../src/components/organisms/JFormModal.vue"],"sourcesContent":["<template>\r\n <Dialog\r\n :open=\"open\"\r\n @update:open=\"onOpenChange\"\r\n :class=\"sizeClass\"\r\n >\r\n <DialogContent>\r\n <!-- Header -->\r\n <DialogHeader v-if=\"title\" class=\"bg-muted/50 border-b\">\r\n <DialogTitle>\r\n {{ title }}\r\n </DialogTitle>\r\n </DialogHeader>\r\n\r\n <!-- Body -->\r\n <DialogBody class=\"max-h-[70vh] overflow-y-auto\">\r\n <div class=\"space-y-4\">\r\n <!-- Description -->\r\n <p v-if=\"description\" class=\"text-sm text-muted-foreground\">\r\n {{ description }}\r\n </p>\r\n\r\n <!-- JDynamicForm -->\r\n <JDynamicForm\r\n ref=\"dynamicFormRef\"\r\n :schema=\"schema\"\r\n :model-value=\"internalFormValue\"\r\n @update:model-value=\"handleFormChange\"\r\n @submit=\"handleFormSubmit\"\r\n @change=\"handleFieldChange\"\r\n @error=\"handleFormError\"\r\n />\r\n\r\n <!-- ์ปค์คํ
์ปจํ
์ธ ์ฌ๋กฏ -->\r\n <slot name=\"body\" />\r\n </div>\r\n </DialogBody>\r\n\r\n <!-- Footer -->\r\n <DialogFooter>\r\n <!-- ํ์ธ/์ทจ์ ๋ฒํผ -->\r\n <template v-if=\"buttonType === 'OkCancel'\">\r\n <JButton\r\n variant=\"outline\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText }}\r\n </JButton>\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n \r\n <!-- ํ์ธ ๋ฒํผ๋ง -->\r\n <template v-else-if=\"buttonType === 'Ok'\">\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n class=\"w-full\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n\r\n <!-- ์ปค์คํ
ํธํฐ ์ฌ๋กฏ -->\r\n <slot name=\"footer\" />\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/shadcn'\r\nimport { JButton } from '@/components/atoms'\r\nimport { JDynamicForm } from '@/components/organisms'\r\nimport type { FormSchema } from '@/types/dynamic-form'\r\n\r\nexport interface JFormModalProps {\r\n // ๋ชจ๋ฌ ํ์ ์ฌ๋ถ\r\n open: boolean\r\n // ํค๋\r\n title?: string\r\n description?: string\r\n // ๋ค์ด๋๋ฏน ํผ ์คํค๋ง (ํ์)\r\n schema: FormSchema\r\n // ํผ ๊ฐ\r\n modelValue?: Record<string, any>\r\n // ๋ชจ๋ฌ ์ฌ์ด์ฆ (์ ๋์ )\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\r\n // ๋ฒํผ ์ค์ \r\n buttonType?: 'Ok' | 'OkCancel'\r\n confirmText?: string\r\n cancelText?: string\r\n confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\r\n confirmDisabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<JFormModalProps>(), {\r\n open: false,\r\n size: 'lg',\r\n buttonType: 'OkCancel',\r\n confirmText: 'ํ์ธ',\r\n cancelText: '์ทจ์',\r\n confirmVariant: 'default',\r\n confirmDisabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:open': [value: boolean]\r\n 'update:modelValue': [value: Record<string, any>]\r\n 'confirm': [value: Record<string, any>]\r\n 'cancel': []\r\n 'submit': [value: Record<string, any>]\r\n 'change': [data: { field: string; value: any }]\r\n 'error': [errors: any]\r\n}>()\r\n\r\n// ๋ค์ด๋๋ฏน ํผ ref\r\nconst dynamicFormRef = ref<InstanceType<typeof JDynamicForm> | null>(null)\r\n\r\n// ๋ด๋ถ ํผ ๊ฐ ๊ด๋ฆฌ\r\nconst internalFormValue = ref<Record<string, any>>(props.modelValue || {})\r\n// ํ์ธ ๋ฒํผ ํด๋ฆญ ์ดํ ๊ฒ์ฆ ์ฑ๊ณต ์์ ์๋ง confirm ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๊ธฐ ์ํ ํ๋๊ทธ\r\nconst isConfirming = ref<boolean>(false)\r\n\r\n// ์ฌ์ด์ฆ ํด๋์ค ๊ณ์ฐ\r\nconst sizeClass = computed(() => {\r\n // Dialog.vue์ ๊ธฐ๋ณธ max-w-lg๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด !max-w-*๋ก ์ค๋ฒ๋ผ์ด๋\r\n const sizeMap: Record<NonNullable<JFormModalProps['size']>, string> = {\r\n 'sm': '!max-w-sm',\r\n 'md': '!max-w-md',\r\n 'lg': '!max-w-2xl',\r\n 'xl': '!max-w-4xl',\r\n '2xl': '!max-w-6xl',\r\n 'full': '!max-w-[95vw]'\r\n }\r\n return sizeMap[props.size]\r\n})\r\n\r\n// props.modelValue ๋ณ๊ฒฝ ๊ฐ์ง\r\nwatch(() => props.modelValue, (newValue) => {\r\n if (newValue != null) {\r\n internalFormValue.value = { ...newValue }\r\n } else {\r\n internalFormValue.value = {}\r\n }\r\n}, { deep: true })\r\n\r\n// ํผ ๋ณ๊ฒฝ ํธ๋ค๋ฌ\r\nconst handleFormChange = (value: Record<string, any>) => {\r\n internalFormValue.value = value\r\n emit('update:modelValue', value)\r\n}\r\n\r\n// ํ๋ ๋ณ๊ฒฝ ํธ๋ค๋ฌ\r\nconst handleFieldChange = (data: { field: string; value: any }) => {\r\n emit('change', data)\r\n}\r\n\r\n// ํผ ์ ์ถ ํธ๋ค๋ฌ\r\nconst handleFormSubmit = (value: Record<string, any>) => {\r\n emit('submit', value)\r\n if (isConfirming.value) {\r\n emit('confirm', value)\r\n isConfirming.value = false\r\n }\r\n}\r\n\r\n// ํผ ์๋ฌ ํธ๋ค๋ฌ\r\nconst handleFormError = (errors: any) => {\r\n emit('error', errors)\r\n // ๊ฒ์ฆ ์คํจ ์ confirm ๋ฐฉ์ถ์ ์ฐจ๋จ\r\n isConfirming.value = false\r\n}\r\n\r\n// ๋ชจ๋ฌ ์ด๊ธฐ/๋ซ๊ธฐ ํธ๋ค๋ฌ\r\nconst onOpenChange = (value: boolean) => {\r\n emit('update:open', value)\r\n}\r\n\r\n// ํ์ธ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleConfirm = () => {\r\n // ํผ ์ ์ถ ํธ๋ฆฌ๊ฑฐ (๊ฒ์ฆ ์ฑ๊ณต ์์ ์ handleFormSubmit์์ confirm ๋ฐฉ์ถ)\r\n isConfirming.value = true\r\n if (dynamicFormRef.value) {\r\n dynamicFormRef.value.submit()\r\n }\r\n}\r\n\r\n// ์ทจ์ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleCancel = () => {\r\n emit('cancel')\r\n // ํผ ๋ฆฌ์
\r\n if (dynamicFormRef.value) {\r\n dynamicFormRef.value.reset()\r\n }\r\n}\r\n\r\n// ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ์๋\r\ndefineExpose({\r\n reset: () => dynamicFormRef.value?.reset(),\r\n submit: () => dynamicFormRef.value?.submit(),\r\n formState: computed(() => dynamicFormRef.value?.formState),\r\n})\r\n</script>\r\n"],"names":["props","__props","emit","__emit","dynamicFormRef","ref","internalFormValue","isConfirming","sizeClass","computed","watch","newValue","handleFormChange","value","handleFieldChange","data","handleFormSubmit","handleFormError","errors","onOpenChange","handleConfirm","handleCancel","__expose","_createBlock","_unref","Dialog","_createVNode","DialogContent","DialogHeader","DialogTitle","DialogBody","_createElementVNode","_hoisted_1","_createElementBlock","_hoisted_2","_toDisplayString","JDynamicForm","_renderSlot","_ctx","DialogFooter","_Fragment","JButton"],"mappings":"
|
|
1
|
+
{"version":3,"file":"JFormModal.vue.cjs","sources":["../../../../src/components/organisms/JFormModal.vue"],"sourcesContent":["<template>\r\n <Dialog\r\n :open=\"open\"\r\n @update:open=\"onOpenChange\"\r\n :class=\"sizeClass\"\r\n >\r\n <DialogContent>\r\n <!-- Header -->\r\n <DialogHeader v-if=\"title\" class=\"bg-muted/50 border-b\">\r\n <DialogTitle>\r\n {{ title }}\r\n </DialogTitle>\r\n </DialogHeader>\r\n\r\n <!-- Body -->\r\n <DialogBody class=\"max-h-[70vh] overflow-y-auto\">\r\n <div class=\"space-y-4\">\r\n <!-- Description -->\r\n <p v-if=\"description\" class=\"text-sm text-muted-foreground\">\r\n {{ description }}\r\n </p>\r\n\r\n <!-- JDynamicForm -->\r\n <JDynamicForm\r\n ref=\"dynamicFormRef\"\r\n :schema=\"schema\"\r\n :model-value=\"internalFormValue\"\r\n @update:model-value=\"handleFormChange\"\r\n @submit=\"handleFormSubmit\"\r\n @change=\"handleFieldChange\"\r\n @error=\"handleFormError\"\r\n />\r\n\r\n <!-- ์ปค์คํ
์ปจํ
์ธ ์ฌ๋กฏ -->\r\n <slot name=\"body\" />\r\n </div>\r\n </DialogBody>\r\n\r\n <!-- Footer -->\r\n <DialogFooter>\r\n <!-- ํ์ธ/์ทจ์ ๋ฒํผ -->\r\n <template v-if=\"buttonType === 'OkCancel'\">\r\n <JButton\r\n variant=\"outline\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText }}\r\n </JButton>\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n \r\n <!-- ํ์ธ ๋ฒํผ๋ง -->\r\n <template v-else-if=\"buttonType === 'Ok'\">\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n class=\"w-full\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n\r\n <!-- ์ปค์คํ
ํธํฐ ์ฌ๋กฏ -->\r\n <slot name=\"footer\" />\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/shadcn'\r\nimport { JButton } from '@/components/atoms'\r\nimport { JDynamicForm } from '@/components/organisms'\r\nimport type { FormSchema } from '@/types/dynamic-form'\r\n\r\nexport interface JFormModalProps {\r\n // ๋ชจ๋ฌ ํ์ ์ฌ๋ถ\r\n open: boolean\r\n // ํค๋\r\n title?: string\r\n description?: string\r\n // ๋ค์ด๋๋ฏน ํผ ์คํค๋ง (ํ์)\r\n schema: FormSchema\r\n // ํผ ๊ฐ\r\n modelValue?: Record<string, any>\r\n // ๋ชจ๋ฌ ์ฌ์ด์ฆ (์ ๋์ )\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\r\n // ๋ฒํผ ์ค์ \r\n buttonType?: 'Ok' | 'OkCancel'\r\n confirmText?: string\r\n cancelText?: string\r\n confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\r\n confirmDisabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<JFormModalProps>(), {\r\n open: false,\r\n size: 'lg',\r\n buttonType: 'OkCancel',\r\n confirmText: 'ํ์ธ',\r\n cancelText: '์ทจ์',\r\n confirmVariant: 'default',\r\n confirmDisabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:open': [value: boolean]\r\n 'update:modelValue': [value: Record<string, any>]\r\n 'confirm': [value: Record<string, any>]\r\n 'cancel': []\r\n 'submit': [value: Record<string, any>]\r\n 'change': [data: { field: string; value: any }]\r\n 'error': [errors: any]\r\n}>()\r\n\r\n// ๋ค์ด๋๋ฏน ํผ ref\r\nconst dynamicFormRef = ref<InstanceType<typeof JDynamicForm> | null>(null)\r\n\r\n// ๋ด๋ถ ํผ ๊ฐ ๊ด๋ฆฌ\r\nconst internalFormValue = ref<Record<string, any>>(props.modelValue || {})\r\n// ํ์ธ ๋ฒํผ ํด๋ฆญ ์ดํ ๊ฒ์ฆ ์ฑ๊ณต ์์ ์๋ง confirm ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๊ธฐ ์ํ ํ๋๊ทธ\r\nconst isConfirming = ref<boolean>(false)\r\n\r\n// ์ฌ์ด์ฆ ํด๋์ค ๊ณ์ฐ\r\nconst sizeClass = computed(() => {\r\n // Dialog.vue์ ๊ธฐ๋ณธ max-w-lg๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด !max-w-*๋ก ์ค๋ฒ๋ผ์ด๋\r\n const sizeMap: Record<NonNullable<JFormModalProps['size']>, string> = {\r\n 'sm': '!max-w-sm',\r\n 'md': '!max-w-md',\r\n 'lg': '!max-w-2xl',\r\n 'xl': '!max-w-4xl',\r\n '2xl': '!max-w-6xl',\r\n 'full': '!max-w-[95vw]'\r\n }\r\n return sizeMap[props.size]\r\n})\r\n\r\n// props.modelValue ๋ณ๊ฒฝ ๊ฐ์ง\r\nwatch(() => props.modelValue, (newValue) => {\r\n if (newValue != null) {\r\n internalFormValue.value = { ...newValue }\r\n } else {\r\n internalFormValue.value = {}\r\n }\r\n}, { deep: true })\r\n\r\n// ํผ ๋ณ๊ฒฝ ํธ๋ค๋ฌ\r\nconst handleFormChange = (value: Record<string, any>) => {\r\n internalFormValue.value = value\r\n emit('update:modelValue', value)\r\n}\r\n\r\n// ํ๋ ๋ณ๊ฒฝ ํธ๋ค๋ฌ\r\nconst handleFieldChange = (data: { field: string; value: any }) => {\r\n emit('change', data)\r\n}\r\n\r\n// ํผ ์ ์ถ ํธ๋ค๋ฌ\r\nconst handleFormSubmit = (value: Record<string, any>) => {\r\n emit('submit', value)\r\n if (isConfirming.value) {\r\n emit('confirm', value)\r\n isConfirming.value = false\r\n }\r\n}\r\n\r\n// ํผ ์๋ฌ ํธ๋ค๋ฌ\r\nconst handleFormError = (errors: any) => {\r\n emit('error', errors)\r\n // ๊ฒ์ฆ ์คํจ ์ confirm ๋ฐฉ์ถ์ ์ฐจ๋จ\r\n isConfirming.value = false\r\n}\r\n\r\n// ๋ชจ๋ฌ ์ด๊ธฐ/๋ซ๊ธฐ ํธ๋ค๋ฌ\r\nconst onOpenChange = (value: boolean) => {\r\n emit('update:open', value)\r\n}\r\n\r\n// ํ์ธ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleConfirm = () => {\r\n // ํผ ์ ์ถ ํธ๋ฆฌ๊ฑฐ (๊ฒ์ฆ ์ฑ๊ณต ์์ ์ handleFormSubmit์์ confirm ๋ฐฉ์ถ)\r\n isConfirming.value = true\r\n if (dynamicFormRef.value) {\r\n dynamicFormRef.value.submit()\r\n }\r\n}\r\n\r\n// ์ทจ์ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleCancel = () => {\r\n emit('cancel')\r\n // ํผ ๋ฆฌ์
\r\n if (dynamicFormRef.value) {\r\n dynamicFormRef.value.reset()\r\n }\r\n}\r\n\r\n// ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ์๋\r\ndefineExpose({\r\n reset: () => dynamicFormRef.value?.reset(),\r\n submit: () => dynamicFormRef.value?.submit(),\r\n formState: computed(() => dynamicFormRef.value?.formState),\r\n})\r\n</script>\r\n"],"names":["props","__props","emit","__emit","dynamicFormRef","ref","internalFormValue","isConfirming","sizeClass","computed","watch","newValue","handleFormChange","value","handleFieldChange","data","handleFormSubmit","handleFormError","errors","onOpenChange","handleConfirm","handleCancel","__expose","_createBlock","_unref","Dialog","_createVNode","DialogContent","DialogHeader","DialogTitle","DialogBody","_createElementVNode","_hoisted_1","_createElementBlock","_hoisted_2","_toDisplayString","JDynamicForm","_renderSlot","_ctx","DialogFooter","_Fragment","JButton"],"mappings":"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"}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
import { defineComponent as B, ref as f, computed as b, watch as D, createBlock as p, openBlock as
|
|
1
|
+
import { defineComponent as B, ref as f, computed as b, watch as D, createBlock as p, openBlock as n, unref as a, normalizeClass as E, withCtx as o, createVNode as i, createCommentVNode as v, createTextVNode as u, toDisplayString as r, createElementVNode as N, createElementBlock as y, renderSlot as C, Fragment as O } from "vue";
|
|
2
2
|
import "../shadcn/index.js";
|
|
3
3
|
import h from "../atoms/JButton.vue.js";
|
|
4
4
|
import "lucide-vue-next";
|
|
5
5
|
import "clsx";
|
|
6
6
|
import "tailwind-merge";
|
|
7
7
|
import "@internationalized/date";
|
|
8
|
+
import "md-editor-v3";
|
|
9
|
+
/* empty css */
|
|
10
|
+
/* empty css */
|
|
8
11
|
import "../shadcn/badge-variants.js";
|
|
9
12
|
import "@vueuse/core";
|
|
10
13
|
import "reka-ui";
|
|
11
14
|
/* empty css */
|
|
12
15
|
import "../shadcn/avatar-variants.js";
|
|
16
|
+
import "dompurify";
|
|
17
|
+
/* empty css */
|
|
13
18
|
import "ag-grid-vue3";
|
|
14
19
|
import "ag-grid-community";
|
|
15
20
|
import "ag-grid-enterprise";
|
|
@@ -36,7 +41,7 @@ import q from "../shadcn/DialogFooter.vue.js";
|
|
|
36
41
|
const A = { class: "space-y-4" }, G = {
|
|
37
42
|
key: 0,
|
|
38
43
|
class: "text-sm text-muted-foreground"
|
|
39
|
-
},
|
|
44
|
+
}, De = /* @__PURE__ */ B({
|
|
40
45
|
__name: "JFormModal",
|
|
41
46
|
props: {
|
|
42
47
|
open: { type: Boolean, default: !1 },
|
|
@@ -83,20 +88,20 @@ const A = { class: "space-y-4" }, G = {
|
|
|
83
88
|
reset: () => l.value?.reset(),
|
|
84
89
|
submit: () => l.value?.submit(),
|
|
85
90
|
formState: b(() => l.value?.formState)
|
|
86
|
-
}), (e, H) => (
|
|
91
|
+
}), (e, H) => (n(), p(a(J), {
|
|
87
92
|
open: t.open,
|
|
88
93
|
"onUpdate:open": z,
|
|
89
94
|
class: E(V.value)
|
|
90
95
|
}, {
|
|
91
96
|
default: o(() => [
|
|
92
|
-
|
|
97
|
+
i(a(R), null, {
|
|
93
98
|
default: o(() => [
|
|
94
|
-
t.title ? (
|
|
99
|
+
t.title ? (n(), p(a(U), {
|
|
95
100
|
key: 0,
|
|
96
101
|
class: "bg-muted/50 border-b"
|
|
97
102
|
}, {
|
|
98
103
|
default: o(() => [
|
|
99
|
-
|
|
104
|
+
i(a(_), null, {
|
|
100
105
|
default: o(() => [
|
|
101
106
|
u(r(t.title), 1)
|
|
102
107
|
]),
|
|
@@ -105,11 +110,11 @@ const A = { class: "space-y-4" }, G = {
|
|
|
105
110
|
]),
|
|
106
111
|
_: 1
|
|
107
112
|
})) : v("", !0),
|
|
108
|
-
|
|
113
|
+
i(a(j), { class: "max-h-[70vh] overflow-y-auto" }, {
|
|
109
114
|
default: o(() => [
|
|
110
115
|
N("div", A, [
|
|
111
|
-
t.description ? (
|
|
112
|
-
|
|
116
|
+
t.description ? (n(), y("p", G, r(t.description), 1)) : v("", !0),
|
|
117
|
+
i(a(M), {
|
|
113
118
|
ref_key: "dynamicFormRef",
|
|
114
119
|
ref: l,
|
|
115
120
|
schema: t.schema,
|
|
@@ -124,10 +129,10 @@ const A = { class: "space-y-4" }, G = {
|
|
|
124
129
|
]),
|
|
125
130
|
_: 3
|
|
126
131
|
}),
|
|
127
|
-
|
|
132
|
+
i(a(q), null, {
|
|
128
133
|
default: o(() => [
|
|
129
|
-
t.buttonType === "OkCancel" ? (
|
|
130
|
-
|
|
134
|
+
t.buttonType === "OkCancel" ? (n(), y(O, { key: 0 }, [
|
|
135
|
+
i(a(h), {
|
|
131
136
|
variant: "outline",
|
|
132
137
|
onClick: S
|
|
133
138
|
}, {
|
|
@@ -136,7 +141,7 @@ const A = { class: "space-y-4" }, G = {
|
|
|
136
141
|
]),
|
|
137
142
|
_: 1
|
|
138
143
|
}),
|
|
139
|
-
|
|
144
|
+
i(a(h), {
|
|
140
145
|
variant: t.confirmVariant,
|
|
141
146
|
disabled: t.confirmDisabled,
|
|
142
147
|
onClick: x
|
|
@@ -146,7 +151,7 @@ const A = { class: "space-y-4" }, G = {
|
|
|
146
151
|
]),
|
|
147
152
|
_: 1
|
|
148
153
|
}, 8, ["variant", "disabled"])
|
|
149
|
-
], 64)) : t.buttonType === "Ok" ? (
|
|
154
|
+
], 64)) : t.buttonType === "Ok" ? (n(), p(a(h), {
|
|
150
155
|
key: 1,
|
|
151
156
|
variant: t.confirmVariant,
|
|
152
157
|
disabled: t.confirmDisabled,
|
|
@@ -171,6 +176,6 @@ const A = { class: "space-y-4" }, G = {
|
|
|
171
176
|
}
|
|
172
177
|
});
|
|
173
178
|
export {
|
|
174
|
-
|
|
179
|
+
De as default
|
|
175
180
|
};
|
|
176
181
|
//# sourceMappingURL=JFormModal.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JFormModal.vue.js","sources":["../../../../src/components/organisms/JFormModal.vue"],"sourcesContent":["<template>\r\n <Dialog\r\n :open=\"open\"\r\n @update:open=\"onOpenChange\"\r\n :class=\"sizeClass\"\r\n >\r\n <DialogContent>\r\n <!-- Header -->\r\n <DialogHeader v-if=\"title\" class=\"bg-muted/50 border-b\">\r\n <DialogTitle>\r\n {{ title }}\r\n </DialogTitle>\r\n </DialogHeader>\r\n\r\n <!-- Body -->\r\n <DialogBody class=\"max-h-[70vh] overflow-y-auto\">\r\n <div class=\"space-y-4\">\r\n <!-- Description -->\r\n <p v-if=\"description\" class=\"text-sm text-muted-foreground\">\r\n {{ description }}\r\n </p>\r\n\r\n <!-- JDynamicForm -->\r\n <JDynamicForm\r\n ref=\"dynamicFormRef\"\r\n :schema=\"schema\"\r\n :model-value=\"internalFormValue\"\r\n @update:model-value=\"handleFormChange\"\r\n @submit=\"handleFormSubmit\"\r\n @change=\"handleFieldChange\"\r\n @error=\"handleFormError\"\r\n />\r\n\r\n <!-- ์ปค์คํ
์ปจํ
์ธ ์ฌ๋กฏ -->\r\n <slot name=\"body\" />\r\n </div>\r\n </DialogBody>\r\n\r\n <!-- Footer -->\r\n <DialogFooter>\r\n <!-- ํ์ธ/์ทจ์ ๋ฒํผ -->\r\n <template v-if=\"buttonType === 'OkCancel'\">\r\n <JButton\r\n variant=\"outline\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText }}\r\n </JButton>\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n \r\n <!-- ํ์ธ ๋ฒํผ๋ง -->\r\n <template v-else-if=\"buttonType === 'Ok'\">\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n class=\"w-full\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n\r\n <!-- ์ปค์คํ
ํธํฐ ์ฌ๋กฏ -->\r\n <slot name=\"footer\" />\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/shadcn'\r\nimport { JButton } from '@/components/atoms'\r\nimport { JDynamicForm } from '@/components/organisms'\r\nimport type { FormSchema } from '@/types/dynamic-form'\r\n\r\nexport interface JFormModalProps {\r\n // ๋ชจ๋ฌ ํ์ ์ฌ๋ถ\r\n open: boolean\r\n // ํค๋\r\n title?: string\r\n description?: string\r\n // ๋ค์ด๋๋ฏน ํผ ์คํค๋ง (ํ์)\r\n schema: FormSchema\r\n // ํผ ๊ฐ\r\n modelValue?: Record<string, any>\r\n // ๋ชจ๋ฌ ์ฌ์ด์ฆ (์ ๋์ )\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\r\n // ๋ฒํผ ์ค์ \r\n buttonType?: 'Ok' | 'OkCancel'\r\n confirmText?: string\r\n cancelText?: string\r\n confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\r\n confirmDisabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<JFormModalProps>(), {\r\n open: false,\r\n size: 'lg',\r\n buttonType: 'OkCancel',\r\n confirmText: 'ํ์ธ',\r\n cancelText: '์ทจ์',\r\n confirmVariant: 'default',\r\n confirmDisabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:open': [value: boolean]\r\n 'update:modelValue': [value: Record<string, any>]\r\n 'confirm': [value: Record<string, any>]\r\n 'cancel': []\r\n 'submit': [value: Record<string, any>]\r\n 'change': [data: { field: string; value: any }]\r\n 'error': [errors: any]\r\n}>()\r\n\r\n// ๋ค์ด๋๋ฏน ํผ ref\r\nconst dynamicFormRef = ref<InstanceType<typeof JDynamicForm> | null>(null)\r\n\r\n// ๋ด๋ถ ํผ ๊ฐ ๊ด๋ฆฌ\r\nconst internalFormValue = ref<Record<string, any>>(props.modelValue || {})\r\n// ํ์ธ ๋ฒํผ ํด๋ฆญ ์ดํ ๊ฒ์ฆ ์ฑ๊ณต ์์ ์๋ง confirm ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๊ธฐ ์ํ ํ๋๊ทธ\r\nconst isConfirming = ref<boolean>(false)\r\n\r\n// ์ฌ์ด์ฆ ํด๋์ค ๊ณ์ฐ\r\nconst sizeClass = computed(() => {\r\n // Dialog.vue์ ๊ธฐ๋ณธ max-w-lg๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด !max-w-*๋ก ์ค๋ฒ๋ผ์ด๋\r\n const sizeMap: Record<NonNullable<JFormModalProps['size']>, string> = {\r\n 'sm': '!max-w-sm',\r\n 'md': '!max-w-md',\r\n 'lg': '!max-w-2xl',\r\n 'xl': '!max-w-4xl',\r\n '2xl': '!max-w-6xl',\r\n 'full': '!max-w-[95vw]'\r\n }\r\n return sizeMap[props.size]\r\n})\r\n\r\n// props.modelValue ๋ณ๊ฒฝ ๊ฐ์ง\r\nwatch(() => props.modelValue, (newValue) => {\r\n if (newValue != null) {\r\n internalFormValue.value = { ...newValue }\r\n } else {\r\n internalFormValue.value = {}\r\n }\r\n}, { deep: true })\r\n\r\n// ํผ ๋ณ๊ฒฝ ํธ๋ค๋ฌ\r\nconst handleFormChange = (value: Record<string, any>) => {\r\n internalFormValue.value = value\r\n emit('update:modelValue', value)\r\n}\r\n\r\n// ํ๋ ๋ณ๊ฒฝ ํธ๋ค๋ฌ\r\nconst handleFieldChange = (data: { field: string; value: any }) => {\r\n emit('change', data)\r\n}\r\n\r\n// ํผ ์ ์ถ ํธ๋ค๋ฌ\r\nconst handleFormSubmit = (value: Record<string, any>) => {\r\n emit('submit', value)\r\n if (isConfirming.value) {\r\n emit('confirm', value)\r\n isConfirming.value = false\r\n }\r\n}\r\n\r\n// ํผ ์๋ฌ ํธ๋ค๋ฌ\r\nconst handleFormError = (errors: any) => {\r\n emit('error', errors)\r\n // ๊ฒ์ฆ ์คํจ ์ confirm ๋ฐฉ์ถ์ ์ฐจ๋จ\r\n isConfirming.value = false\r\n}\r\n\r\n// ๋ชจ๋ฌ ์ด๊ธฐ/๋ซ๊ธฐ ํธ๋ค๋ฌ\r\nconst onOpenChange = (value: boolean) => {\r\n emit('update:open', value)\r\n}\r\n\r\n// ํ์ธ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleConfirm = () => {\r\n // ํผ ์ ์ถ ํธ๋ฆฌ๊ฑฐ (๊ฒ์ฆ ์ฑ๊ณต ์์ ์ handleFormSubmit์์ confirm ๋ฐฉ์ถ)\r\n isConfirming.value = true\r\n if (dynamicFormRef.value) {\r\n dynamicFormRef.value.submit()\r\n }\r\n}\r\n\r\n// ์ทจ์ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleCancel = () => {\r\n emit('cancel')\r\n // ํผ ๋ฆฌ์
\r\n if (dynamicFormRef.value) {\r\n dynamicFormRef.value.reset()\r\n }\r\n}\r\n\r\n// ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ์๋\r\ndefineExpose({\r\n reset: () => dynamicFormRef.value?.reset(),\r\n submit: () => dynamicFormRef.value?.submit(),\r\n formState: computed(() => dynamicFormRef.value?.formState),\r\n})\r\n</script>\r\n"],"names":["props","__props","emit","__emit","dynamicFormRef","ref","internalFormValue","isConfirming","sizeClass","computed","watch","newValue","handleFormChange","value","handleFieldChange","data","handleFormSubmit","handleFormError","errors","onOpenChange","handleConfirm","handleCancel","__expose","_createBlock","_unref","Dialog","_createVNode","DialogContent","DialogHeader","DialogTitle","DialogBody","_createElementVNode","_hoisted_1","_createElementBlock","_hoisted_2","_toDisplayString","JDynamicForm","_renderSlot","_ctx","DialogFooter","_Fragment","JButton"],"mappings":"
|
|
1
|
+
{"version":3,"file":"JFormModal.vue.js","sources":["../../../../src/components/organisms/JFormModal.vue"],"sourcesContent":["<template>\r\n <Dialog\r\n :open=\"open\"\r\n @update:open=\"onOpenChange\"\r\n :class=\"sizeClass\"\r\n >\r\n <DialogContent>\r\n <!-- Header -->\r\n <DialogHeader v-if=\"title\" class=\"bg-muted/50 border-b\">\r\n <DialogTitle>\r\n {{ title }}\r\n </DialogTitle>\r\n </DialogHeader>\r\n\r\n <!-- Body -->\r\n <DialogBody class=\"max-h-[70vh] overflow-y-auto\">\r\n <div class=\"space-y-4\">\r\n <!-- Description -->\r\n <p v-if=\"description\" class=\"text-sm text-muted-foreground\">\r\n {{ description }}\r\n </p>\r\n\r\n <!-- JDynamicForm -->\r\n <JDynamicForm\r\n ref=\"dynamicFormRef\"\r\n :schema=\"schema\"\r\n :model-value=\"internalFormValue\"\r\n @update:model-value=\"handleFormChange\"\r\n @submit=\"handleFormSubmit\"\r\n @change=\"handleFieldChange\"\r\n @error=\"handleFormError\"\r\n />\r\n\r\n <!-- ์ปค์คํ
์ปจํ
์ธ ์ฌ๋กฏ -->\r\n <slot name=\"body\" />\r\n </div>\r\n </DialogBody>\r\n\r\n <!-- Footer -->\r\n <DialogFooter>\r\n <!-- ํ์ธ/์ทจ์ ๋ฒํผ -->\r\n <template v-if=\"buttonType === 'OkCancel'\">\r\n <JButton\r\n variant=\"outline\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText }}\r\n </JButton>\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n \r\n <!-- ํ์ธ ๋ฒํผ๋ง -->\r\n <template v-else-if=\"buttonType === 'Ok'\">\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n class=\"w-full\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n\r\n <!-- ์ปค์คํ
ํธํฐ ์ฌ๋กฏ -->\r\n <slot name=\"footer\" />\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/shadcn'\r\nimport { JButton } from '@/components/atoms'\r\nimport { JDynamicForm } from '@/components/organisms'\r\nimport type { FormSchema } from '@/types/dynamic-form'\r\n\r\nexport interface JFormModalProps {\r\n // ๋ชจ๋ฌ ํ์ ์ฌ๋ถ\r\n open: boolean\r\n // ํค๋\r\n title?: string\r\n description?: string\r\n // ๋ค์ด๋๋ฏน ํผ ์คํค๋ง (ํ์)\r\n schema: FormSchema\r\n // ํผ ๊ฐ\r\n modelValue?: Record<string, any>\r\n // ๋ชจ๋ฌ ์ฌ์ด์ฆ (์ ๋์ )\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\r\n // ๋ฒํผ ์ค์ \r\n buttonType?: 'Ok' | 'OkCancel'\r\n confirmText?: string\r\n cancelText?: string\r\n confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\r\n confirmDisabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<JFormModalProps>(), {\r\n open: false,\r\n size: 'lg',\r\n buttonType: 'OkCancel',\r\n confirmText: 'ํ์ธ',\r\n cancelText: '์ทจ์',\r\n confirmVariant: 'default',\r\n confirmDisabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:open': [value: boolean]\r\n 'update:modelValue': [value: Record<string, any>]\r\n 'confirm': [value: Record<string, any>]\r\n 'cancel': []\r\n 'submit': [value: Record<string, any>]\r\n 'change': [data: { field: string; value: any }]\r\n 'error': [errors: any]\r\n}>()\r\n\r\n// ๋ค์ด๋๋ฏน ํผ ref\r\nconst dynamicFormRef = ref<InstanceType<typeof JDynamicForm> | null>(null)\r\n\r\n// ๋ด๋ถ ํผ ๊ฐ ๊ด๋ฆฌ\r\nconst internalFormValue = ref<Record<string, any>>(props.modelValue || {})\r\n// ํ์ธ ๋ฒํผ ํด๋ฆญ ์ดํ ๊ฒ์ฆ ์ฑ๊ณต ์์ ์๋ง confirm ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๊ธฐ ์ํ ํ๋๊ทธ\r\nconst isConfirming = ref<boolean>(false)\r\n\r\n// ์ฌ์ด์ฆ ํด๋์ค ๊ณ์ฐ\r\nconst sizeClass = computed(() => {\r\n // Dialog.vue์ ๊ธฐ๋ณธ max-w-lg๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด !max-w-*๋ก ์ค๋ฒ๋ผ์ด๋\r\n const sizeMap: Record<NonNullable<JFormModalProps['size']>, string> = {\r\n 'sm': '!max-w-sm',\r\n 'md': '!max-w-md',\r\n 'lg': '!max-w-2xl',\r\n 'xl': '!max-w-4xl',\r\n '2xl': '!max-w-6xl',\r\n 'full': '!max-w-[95vw]'\r\n }\r\n return sizeMap[props.size]\r\n})\r\n\r\n// props.modelValue ๋ณ๊ฒฝ ๊ฐ์ง\r\nwatch(() => props.modelValue, (newValue) => {\r\n if (newValue != null) {\r\n internalFormValue.value = { ...newValue }\r\n } else {\r\n internalFormValue.value = {}\r\n }\r\n}, { deep: true })\r\n\r\n// ํผ ๋ณ๊ฒฝ ํธ๋ค๋ฌ\r\nconst handleFormChange = (value: Record<string, any>) => {\r\n internalFormValue.value = value\r\n emit('update:modelValue', value)\r\n}\r\n\r\n// ํ๋ ๋ณ๊ฒฝ ํธ๋ค๋ฌ\r\nconst handleFieldChange = (data: { field: string; value: any }) => {\r\n emit('change', data)\r\n}\r\n\r\n// ํผ ์ ์ถ ํธ๋ค๋ฌ\r\nconst handleFormSubmit = (value: Record<string, any>) => {\r\n emit('submit', value)\r\n if (isConfirming.value) {\r\n emit('confirm', value)\r\n isConfirming.value = false\r\n }\r\n}\r\n\r\n// ํผ ์๋ฌ ํธ๋ค๋ฌ\r\nconst handleFormError = (errors: any) => {\r\n emit('error', errors)\r\n // ๊ฒ์ฆ ์คํจ ์ confirm ๋ฐฉ์ถ์ ์ฐจ๋จ\r\n isConfirming.value = false\r\n}\r\n\r\n// ๋ชจ๋ฌ ์ด๊ธฐ/๋ซ๊ธฐ ํธ๋ค๋ฌ\r\nconst onOpenChange = (value: boolean) => {\r\n emit('update:open', value)\r\n}\r\n\r\n// ํ์ธ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleConfirm = () => {\r\n // ํผ ์ ์ถ ํธ๋ฆฌ๊ฑฐ (๊ฒ์ฆ ์ฑ๊ณต ์์ ์ handleFormSubmit์์ confirm ๋ฐฉ์ถ)\r\n isConfirming.value = true\r\n if (dynamicFormRef.value) {\r\n dynamicFormRef.value.submit()\r\n }\r\n}\r\n\r\n// ์ทจ์ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleCancel = () => {\r\n emit('cancel')\r\n // ํผ ๋ฆฌ์
\r\n if (dynamicFormRef.value) {\r\n dynamicFormRef.value.reset()\r\n }\r\n}\r\n\r\n// ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ์๋\r\ndefineExpose({\r\n reset: () => dynamicFormRef.value?.reset(),\r\n submit: () => dynamicFormRef.value?.submit(),\r\n formState: computed(() => dynamicFormRef.value?.formState),\r\n})\r\n</script>\r\n"],"names":["props","__props","emit","__emit","dynamicFormRef","ref","internalFormValue","isConfirming","sizeClass","computed","watch","newValue","handleFormChange","value","handleFieldChange","data","handleFormSubmit","handleFormError","errors","onOpenChange","handleConfirm","handleCancel","__expose","_createBlock","_unref","Dialog","_createVNode","DialogContent","DialogHeader","DialogTitle","DialogBody","_createElementVNode","_hoisted_1","_createElementBlock","_hoisted_2","_toDisplayString","JDynamicForm","_renderSlot","_ctx","DialogFooter","_Fragment","JButton"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8GA,UAAMA,IAAQC,GAURC,IAAOC,GAWPC,IAAiBC,EAA8C,IAAI,GAGnEC,IAAoBD,EAAyBL,EAAM,cAAc,CAAA,CAAE,GAEnEO,IAAeF,EAAa,EAAK,GAGjCG,IAAYC,EAAS,OAE6C;AAAA,MACpE,IAAM;AAAA,MACN,IAAM;AAAA,MACN,IAAM;AAAA,MACN,IAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAQ;AAAA,IAAA,GAEKT,EAAM,IAAI,CAC1B;AAGD,IAAAU,EAAM,MAAMV,EAAM,YAAY,CAACW,MAAa;AAC1C,MAAIA,KAAY,OACdL,EAAkB,QAAQ,EAAE,GAAGK,EAAA,IAE/BL,EAAkB,QAAQ,CAAA;AAAA,IAE9B,GAAG,EAAE,MAAM,IAAM;AAGjB,UAAMM,IAAmB,CAACC,MAA+B;AACvD,MAAAP,EAAkB,QAAQO,GAC1BX,EAAK,qBAAqBW,CAAK;AAAA,IACjC,GAGMC,IAAoB,CAACC,MAAwC;AACjE,MAAAb,EAAK,UAAUa,CAAI;AAAA,IACrB,GAGMC,IAAmB,CAACH,MAA+B;AACvD,MAAAX,EAAK,UAAUW,CAAK,GAChBN,EAAa,UACfL,EAAK,WAAWW,CAAK,GACrBN,EAAa,QAAQ;AAAA,IAEzB,GAGMU,IAAkB,CAACC,MAAgB;AACvC,MAAAhB,EAAK,SAASgB,CAAM,GAEpBX,EAAa,QAAQ;AAAA,IACvB,GAGMY,IAAe,CAACN,MAAmB;AACvC,MAAAX,EAAK,eAAeW,CAAK;AAAA,IAC3B,GAGMO,IAAgB,MAAM;AAE1B,MAAAb,EAAa,QAAQ,IACjBH,EAAe,SACjBA,EAAe,MAAM,OAAA;AAAA,IAEzB,GAGMiB,IAAe,MAAM;AACzB,MAAAnB,EAAK,QAAQ,GAETE,EAAe,SACjBA,EAAe,MAAM,MAAA;AAAA,IAEzB;AAGA,WAAAkB,EAAa;AAAA,MACX,OAAO,MAAMlB,EAAe,OAAO,MAAA;AAAA,MACnC,QAAQ,MAAMA,EAAe,OAAO,OAAA;AAAA,MACpC,WAAWK,EAAS,MAAML,EAAe,OAAO,SAAS;AAAA,IAAA,CAC1D,mBAvNCmB,EAwESC,EAAAC,CAAA,GAAA;AAAA,MAvEN,MAAMxB,EAAA;AAAA,MACN,iBAAakB;AAAA,MACb,SAAOX,EAAA,KAAS;AAAA,IAAA;iBAEjB,MAkEgB;AAAA,QAlEhBkB,EAkEgBF,EAAAG,CAAA,GAAA,MAAA;AAAA,qBAhEd,MAIe;AAAA,YAJK1B,EAAA,cAApBsB,EAIeC,EAAAI,CAAA,GAAA;AAAA;cAJY,OAAM;AAAA,YAAA;yBAC/B,MAEc;AAAA,gBAFdF,EAEcF,EAAAK,CAAA,GAAA,MAAA;AAAA,6BADZ,MAAW;AAAA,wBAAR5B,EAAA,KAAK,GAAA,CAAA;AAAA,kBAAA;;;;;;YAKZyB,EAqBaF,EAAAM,CAAA,GAAA,EArBD,OAAM,kCAA8B;AAAA,yBAC9C,MAmBM;AAAA,gBAnBNC,EAmBM,OAnBNC,GAmBM;AAAA,kBAjBK/B,EAAA,oBAATgC,EAEI,KAFJC,GAEIC,EADClC,EAAA,WAAW,GAAA,CAAA;kBAIhByB,EAQEF,EAAAY,CAAA,GAAA;AAAA,6BAPI;AAAA,oBAAJ,KAAIhC;AAAA,oBACH,QAAQH,EAAA;AAAA,oBACR,eAAaK,EAAA;AAAA,oBACb,uBAAoBM;AAAA,oBACpB,UAAQI;AAAA,oBACR,UAAQF;AAAA,oBACR,SAAOG;AAAA,kBAAA;kBAIVoB,EAAoBC,EAAA,QAAA,MAAA;AAAA,gBAAA;;;;YAKxBZ,EAgCeF,EAAAe,CAAA,GAAA,MAAA;AAAA,yBA9Bb,MAcW;AAAA,gBAdKtC,EAAA,eAAU,mBAA1BgC,EAcWO,GAAA,EAAA,KAAA,KAAA;AAAA,kBAbTd,EAKUF,EAAAiB,CAAA,GAAA;AAAA,oBAJR,SAAQ;AAAA,oBACP,SAAOpB;AAAA,kBAAA;+BAER,MAAgB;AAAA,0BAAbpB,EAAA,UAAU,GAAA,CAAA;AAAA,oBAAA;;;kBAEfyB,EAMUF,EAAAiB,CAAA,GAAA;AAAA,oBALP,SAASxC,EAAA;AAAA,oBACT,UAAUA,EAAA;AAAA,oBACV,SAAOmB;AAAA,kBAAA;+BAER,MAAiB;AAAA,0BAAdnB,EAAA,WAAW,GAAA,CAAA;AAAA,oBAAA;;;0BAKGA,EAAA,eAAU,aAC7BsB,EAOUC,EAAAiB,CAAA,GAAA;AAAA;kBANP,SAASxC,EAAA;AAAA,kBACT,UAAUA,EAAA;AAAA,kBACV,SAAOmB;AAAA,kBACR,OAAM;AAAA,gBAAA;6BAEN,MAAiB;AAAA,wBAAdnB,EAAA,WAAW,GAAA,CAAA;AAAA,kBAAA;;;gBAKlBoC,EAAsBC,EAAA,QAAA,QAAA;AAAA,cAAA;;;;;;;;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const i=require("../atoms/JButton.vue.cjs");require("lucide-vue-next");require("clsx");require("tailwind-merge");require("@internationalized/date");require("../shadcn/badge-variants.cjs");require("@vueuse/core");require("reka-ui");;/* empty css */require("../shadcn/avatar-variants.cjs");require("ag-grid-vue3");require("ag-grid-community");require("ag-grid-enterprise");;/* empty css */;/* empty css */;/* empty css */;/* empty css */require("vue-sonner");const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const i=require("../atoms/JButton.vue.cjs");require("lucide-vue-next");require("clsx");require("tailwind-merge");require("@internationalized/date");require("md-editor-v3");;/* empty css */;/* empty css */require("../shadcn/badge-variants.cjs");require("@vueuse/core");require("reka-ui");;/* 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 */;/* empty css */require("vue-sonner");const q=require("../molecules/JFormField.vue.cjs");;/* empty css */;/* empty css */;/* empty css */;/* empty css */const y=require("../shadcn/Dialog.vue.cjs"),v=require("../shadcn/DialogContent.vue.cjs"),x=require("../shadcn/DialogHeader.vue.cjs"),_=require("../shadcn/DialogTitle.vue.cjs"),g=require("../shadcn/DialogBody.vue.cjs"),F=require("../shadcn/DialogFooter.vue.cjs"),V={class:"space-y-4"},b={key:0,class:"text-sm text-muted-foreground"},C={key:1},h=e.defineComponent({__name:"JModal",props:{open:{type:Boolean,default:!1},title:{},description:{},size:{default:"md"},showFormField:{type:Boolean,default:!1},formFieldLabel:{},formFieldError:{},formFieldRequired:{type:Boolean},formFieldInputType:{default:"text"},formFieldInputPlaceholder:{},formFieldValue:{},formFieldType:{default:"input"},buttonType:{default:"OkCancel"},confirmText:{default:"ํ์ธ"},cancelText:{default:"์ทจ์"},confirmVariant:{default:"default"},confirmDisabled:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},emits:["update:open","confirm","cancel"],setup(t,{emit:d}){const l=t,u=d,a=e.ref(l.formFieldValue||""),c=e.computed(()=>`modal-input-${Math.random().toString(36).substr(2,9)}`),s=e.computed(()=>({sm:"!max-w-sm",md:"!max-w-md",lg:"!max-w-2xl",xl:"!max-w-4xl","2xl":"!max-w-6xl",full:"!max-w-[95vw]"})[l.size]);e.watch(()=>l.formFieldValue,r=>{r!==void 0&&(a.value=r)});const f=r=>{u("update:open",r)},o=()=>{const r=l.showFormField?a.value:void 0;u("confirm",r)},m=()=>{u("cancel"),a.value=l.formFieldValue||""};return(r,n)=>(e.openBlock(),e.createBlock(e.unref(y.default),{open:t.open,"onUpdate:open":f,class:e.normalizeClass(s.value)},{default:e.withCtx(()=>[e.createVNode(e.unref(v.default),null,{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createBlock(e.unref(x.default),{key:0,class:"bg-muted/50 border-b"},{default:e.withCtx(()=>[e.createVNode(e.unref(_.default),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.title),1)]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(g.default),null,{default:e.withCtx(()=>[e.createElementVNode("div",V,[t.description?(e.openBlock(),e.createElementBlock("p",b,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0),t.showFormField?(e.openBlock(),e.createElementBlock("div",C,[e.createVNode(e.unref(q.default),{label:t.formFieldLabel,"error-msg":t.formFieldError,required:t.formFieldRequired,type:t.formFieldType,id:c.value,modelValue:a.value,"onUpdate:modelValue":n[0]||(n[0]=p=>a.value=p),"input-type":t.formFieldInputType,placeholder:t.formFieldInputPlaceholder,disabled:t.disabled},null,8,["label","error-msg","required","type","id","modelValue","input-type","placeholder","disabled"])])):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"body")])]),_:3}),e.createVNode(e.unref(F.default),null,{default:e.withCtx(()=>[t.buttonType==="OkCancel"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(e.unref(i.default),{variant:"outline",onClick:m},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.cancelText),1)]),_:1}),e.createVNode(e.unref(i.default),{variant:t.confirmVariant,disabled:t.confirmDisabled,onClick:o},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.confirmText),1)]),_:1},8,["variant","disabled"])],64)):t.buttonType==="Ok"?(e.openBlock(),e.createBlock(e.unref(i.default),{key:1,variant:t.confirmVariant,disabled:t.confirmDisabled,onClick:o,class:"w-full"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.confirmText),1)]),_:1},8,["variant","disabled"])):e.createCommentVNode("",!0)]),_:1})]),_:3})]),_:3},8,["open","class"]))}});exports.default=h;
|
|
2
2
|
//# sourceMappingURL=JModal.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JModal.vue.cjs","sources":["../../../../src/components/organisms/JModal.vue"],"sourcesContent":["<template>\r\n <Dialog\r\n :open=\"open\"\r\n @update:open=\"onOpenChange\"\r\n :class=\"sizeClass\"\r\n >\r\n <DialogContent>\r\n <!-- Header -->\r\n <DialogHeader v-if=\"title\" class=\"bg-muted/50 border-b\">\r\n <DialogTitle>\r\n {{ title }}\r\n </DialogTitle>\r\n </DialogHeader>\r\n\r\n <!-- Body -->\r\n <DialogBody>\r\n <div class=\"space-y-4\">\r\n <!-- Description -->\r\n <p v-if=\"description\" class=\"text-sm text-muted-foreground\">\r\n {{ description }}\r\n </p>\r\n\r\n <!-- JFormField๊ฐ ์๋ ๊ฒฝ์ฐ -->\r\n <div v-if=\"showFormField\">\r\n <JFormField\r\n :label=\"formFieldLabel\"\r\n :error-msg=\"formFieldError\"\r\n :required=\"formFieldRequired\"\r\n :type=\"formFieldType\"\r\n :id=\"inputId\"\r\n v-model=\"inputValue\"\r\n :input-type=\"formFieldInputType\"\r\n :placeholder=\"formFieldInputPlaceholder\"\r\n :disabled=\"disabled\"\r\n />\r\n </div>\r\n\r\n <!-- ์ปค์คํ
์ปจํ
์ธ ์ฌ๋กฏ -->\r\n <slot name=\"body\" />\r\n </div>\r\n </DialogBody>\r\n\r\n <!-- Footer -->\r\n <DialogFooter>\r\n <!-- ํ์ธ/์ทจ์ ๋ฒํผ -->\r\n <template v-if=\"buttonType === 'OkCancel'\">\r\n <JButton\r\n variant=\"outline\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText }}\r\n </JButton>\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n \r\n <!-- ํ์ธ ๋ฒํผ๋ง -->\r\n <template v-else-if=\"buttonType === 'Ok'\">\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n class=\"w-full\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/shadcn'\r\nimport { JButton } from '@/components/atoms'\r\nimport { JFormField } from '@/components/molecules'\r\n\r\nexport interface JModalProps {\r\n // ๋ชจ๋ฌ ํ์ ์ฌ๋ถ\r\n open: boolean\r\n // ํค๋\r\n title?: string\r\n description?: string\r\n // ๋ชจ๋ฌ ์ฌ์ด์ฆ\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\r\n // ํผ ํ๋ (JFormField)\r\n showFormField?: boolean\r\n formFieldLabel?: string\r\n formFieldError?: string\r\n formFieldRequired?: boolean\r\n // ์
๋ ฅ ํ๋ ์ค์ \r\n formFieldInputType?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'\r\n formFieldInputPlaceholder?: string\r\n formFieldValue?: string\r\n formFieldType?: 'input' | 'textarea' | 'checkbox' | 'switch' | 'combo' | 'radio' | 'searchCombo' | 'datepicker'\r\n // ๋ฒํผ ์ค์ \r\n buttonType?: 'Ok' | 'OkCancel'\r\n confirmText?: string\r\n cancelText?: string\r\n confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\r\n confirmDisabled?: boolean\r\n // ๊ธฐํ\r\n disabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<JModalProps>(), {\r\n open: false,\r\n size: 'md',\r\n showFormField: false,\r\n formFieldInputType: 'text',\r\n formFieldType: 'input',\r\n buttonType: 'OkCancel',\r\n confirmText: 'ํ์ธ',\r\n cancelText: '์ทจ์',\r\n confirmVariant: 'default',\r\n confirmDisabled: false,\r\n disabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:open': [value: boolean]\r\n 'confirm': [value?: string]\r\n 'cancel': []\r\n}>()\r\n\r\n// ์
๋ ฅ๊ฐ ๊ด๋ฆฌ\r\nconst inputValue = ref(props.formFieldValue || '')\r\n\r\n// ์
๋ ฅ ํ๋ ID ์์ฑ\r\nconst inputId = computed(() => `modal-input-${Math.random().toString(36).substr(2, 9)}`)\r\n\r\n// ์ฌ์ด์ฆ ํด๋์ค ๊ณ์ฐ\r\nconst sizeClass = computed(() => {\r\n // Dialog.vue์ ๊ธฐ๋ณธ max-w-lg๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด !max-w-*๋ก ์ค๋ฒ๋ผ์ด๋\r\n const sizeMap: Record<NonNullable<JModalProps['size']>, string> = {\r\n 'sm': '!max-w-sm',\r\n 'md': '!max-w-md',\r\n 'lg': '!max-w-2xl',\r\n 'xl': '!max-w-4xl',\r\n '2xl': '!max-w-6xl',\r\n 'full': '!max-w-[95vw]'\r\n }\r\n return sizeMap[props.size]\r\n})\r\n\r\n// props.formFieldValue ๋ณ๊ฒฝ ๊ฐ์ง\r\nwatch(() => props.formFieldValue, (newValue) => {\r\n if (newValue !== undefined) {\r\n inputValue.value = newValue\r\n }\r\n})\r\n\r\n// ๋ชจ๋ฌ ์ด๊ธฐ/๋ซ๊ธฐ ํธ๋ค๋ฌ\r\nconst onOpenChange = (value: boolean) => {\r\n emit('update:open', value)\r\n}\r\n\r\n// ํ์ธ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleConfirm = () => {\r\n const value = props.showFormField ? inputValue.value : undefined\r\n emit('confirm', value)\r\n}\r\n\r\n// ์ทจ์ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleCancel = () => {\r\n emit('cancel')\r\n // ์
๋ ฅ๊ฐ ์ด๊ธฐํ\r\n inputValue.value = props.formFieldValue || ''\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","inputValue","ref","inputId","computed","sizeClass","watch","newValue","onOpenChange","value","handleConfirm","handleCancel","_createBlock","_unref","Dialog","_createVNode","DialogContent","DialogHeader","DialogTitle","DialogBody","_createElementVNode","_hoisted_1","_createElementBlock","_hoisted_2","_toDisplayString","_hoisted_3","JFormField","$event","_renderSlot","_ctx","DialogFooter","_Fragment","JButton"],"mappings":"
|
|
1
|
+
{"version":3,"file":"JModal.vue.cjs","sources":["../../../../src/components/organisms/JModal.vue"],"sourcesContent":["<template>\r\n <Dialog\r\n :open=\"open\"\r\n @update:open=\"onOpenChange\"\r\n :class=\"sizeClass\"\r\n >\r\n <DialogContent>\r\n <!-- Header -->\r\n <DialogHeader v-if=\"title\" class=\"bg-muted/50 border-b\">\r\n <DialogTitle>\r\n {{ title }}\r\n </DialogTitle>\r\n </DialogHeader>\r\n\r\n <!-- Body -->\r\n <DialogBody>\r\n <div class=\"space-y-4\">\r\n <!-- Description -->\r\n <p v-if=\"description\" class=\"text-sm text-muted-foreground\">\r\n {{ description }}\r\n </p>\r\n\r\n <!-- JFormField๊ฐ ์๋ ๊ฒฝ์ฐ -->\r\n <div v-if=\"showFormField\">\r\n <JFormField\r\n :label=\"formFieldLabel\"\r\n :error-msg=\"formFieldError\"\r\n :required=\"formFieldRequired\"\r\n :type=\"formFieldType\"\r\n :id=\"inputId\"\r\n v-model=\"inputValue\"\r\n :input-type=\"formFieldInputType\"\r\n :placeholder=\"formFieldInputPlaceholder\"\r\n :disabled=\"disabled\"\r\n />\r\n </div>\r\n\r\n <!-- ์ปค์คํ
์ปจํ
์ธ ์ฌ๋กฏ -->\r\n <slot name=\"body\" />\r\n </div>\r\n </DialogBody>\r\n\r\n <!-- Footer -->\r\n <DialogFooter>\r\n <!-- ํ์ธ/์ทจ์ ๋ฒํผ -->\r\n <template v-if=\"buttonType === 'OkCancel'\">\r\n <JButton\r\n variant=\"outline\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText }}\r\n </JButton>\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n \r\n <!-- ํ์ธ ๋ฒํผ๋ง -->\r\n <template v-else-if=\"buttonType === 'Ok'\">\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n class=\"w-full\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/shadcn'\r\nimport { JButton } from '@/components/atoms'\r\nimport { JFormField } from '@/components/molecules'\r\n\r\nexport interface JModalProps {\r\n // ๋ชจ๋ฌ ํ์ ์ฌ๋ถ\r\n open: boolean\r\n // ํค๋\r\n title?: string\r\n description?: string\r\n // ๋ชจ๋ฌ ์ฌ์ด์ฆ\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\r\n // ํผ ํ๋ (JFormField)\r\n showFormField?: boolean\r\n formFieldLabel?: string\r\n formFieldError?: string\r\n formFieldRequired?: boolean\r\n // ์
๋ ฅ ํ๋ ์ค์ \r\n formFieldInputType?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'\r\n formFieldInputPlaceholder?: string\r\n formFieldValue?: string\r\n formFieldType?: 'input' | 'textarea' | 'checkbox' | 'switch' | 'combo' | 'radio' | 'searchCombo' | 'datepicker'\r\n // ๋ฒํผ ์ค์ \r\n buttonType?: 'Ok' | 'OkCancel'\r\n confirmText?: string\r\n cancelText?: string\r\n confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\r\n confirmDisabled?: boolean\r\n // ๊ธฐํ\r\n disabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<JModalProps>(), {\r\n open: false,\r\n size: 'md',\r\n showFormField: false,\r\n formFieldInputType: 'text',\r\n formFieldType: 'input',\r\n buttonType: 'OkCancel',\r\n confirmText: 'ํ์ธ',\r\n cancelText: '์ทจ์',\r\n confirmVariant: 'default',\r\n confirmDisabled: false,\r\n disabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:open': [value: boolean]\r\n 'confirm': [value?: string]\r\n 'cancel': []\r\n}>()\r\n\r\n// ์
๋ ฅ๊ฐ ๊ด๋ฆฌ\r\nconst inputValue = ref(props.formFieldValue || '')\r\n\r\n// ์
๋ ฅ ํ๋ ID ์์ฑ\r\nconst inputId = computed(() => `modal-input-${Math.random().toString(36).substr(2, 9)}`)\r\n\r\n// ์ฌ์ด์ฆ ํด๋์ค ๊ณ์ฐ\r\nconst sizeClass = computed(() => {\r\n // Dialog.vue์ ๊ธฐ๋ณธ max-w-lg๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด !max-w-*๋ก ์ค๋ฒ๋ผ์ด๋\r\n const sizeMap: Record<NonNullable<JModalProps['size']>, string> = {\r\n 'sm': '!max-w-sm',\r\n 'md': '!max-w-md',\r\n 'lg': '!max-w-2xl',\r\n 'xl': '!max-w-4xl',\r\n '2xl': '!max-w-6xl',\r\n 'full': '!max-w-[95vw]'\r\n }\r\n return sizeMap[props.size]\r\n})\r\n\r\n// props.formFieldValue ๋ณ๊ฒฝ ๊ฐ์ง\r\nwatch(() => props.formFieldValue, (newValue) => {\r\n if (newValue !== undefined) {\r\n inputValue.value = newValue\r\n }\r\n})\r\n\r\n// ๋ชจ๋ฌ ์ด๊ธฐ/๋ซ๊ธฐ ํธ๋ค๋ฌ\r\nconst onOpenChange = (value: boolean) => {\r\n emit('update:open', value)\r\n}\r\n\r\n// ํ์ธ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleConfirm = () => {\r\n const value = props.showFormField ? inputValue.value : undefined\r\n emit('confirm', value)\r\n}\r\n\r\n// ์ทจ์ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleCancel = () => {\r\n emit('cancel')\r\n // ์
๋ ฅ๊ฐ ์ด๊ธฐํ\r\n inputValue.value = props.formFieldValue || ''\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","inputValue","ref","inputId","computed","sizeClass","watch","newValue","onOpenChange","value","handleConfirm","handleCancel","_createBlock","_unref","Dialog","_createVNode","DialogContent","DialogHeader","DialogTitle","DialogBody","_createElementVNode","_hoisted_1","_createElementBlock","_hoisted_2","_toDisplayString","_hoisted_3","JFormField","$event","_renderSlot","_ctx","DialogFooter","_Fragment","JButton"],"mappings":"61EAsHA,MAAMA,EAAQC,EAcRC,EAAOC,EAOPC,EAAaC,EAAAA,IAAIL,EAAM,gBAAkB,EAAE,EAG3CM,EAAUC,EAAAA,SAAS,IAAM,eAAe,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,OAAO,EAAG,CAAC,CAAC,EAAE,EAGjFC,EAAYD,EAAAA,SAAS,KAEyC,CAChE,GAAM,YACN,GAAM,YACN,GAAM,aACN,GAAM,aACN,MAAO,aACP,KAAQ,eAAA,GAEKP,EAAM,IAAI,CAC1B,EAGDS,EAAAA,MAAM,IAAMT,EAAM,eAAiBU,GAAa,CAC1CA,IAAa,SACfN,EAAW,MAAQM,EAEvB,CAAC,EAGD,MAAMC,EAAgBC,GAAmB,CACvCV,EAAK,cAAeU,CAAK,CAC3B,EAGMC,EAAgB,IAAM,CAC1B,MAAMD,EAAQZ,EAAM,cAAgBI,EAAW,MAAQ,OACvDF,EAAK,UAAWU,CAAK,CACvB,EAGME,EAAe,IAAM,CACzBZ,EAAK,QAAQ,EAEbE,EAAW,MAAQJ,EAAM,gBAAkB,EAC7C,8BApLEe,EAAAA,YAyESC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CAxEN,KAAMhB,EAAA,KACN,gBAAaU,EACb,uBAAOH,EAAA,KAAS,CAAA,qBAEjB,IAmEgB,CAnEhBU,EAAAA,YAmEgBF,EAAAA,MAAAG,SAAA,EAAA,KAAA,mBAjEd,IAIe,CAJKlB,EAAA,qBAApBc,EAAAA,YAIeC,EAAAA,MAAAI,EAAAA,OAAA,EAAA,OAJY,MAAM,sBAAA,qBAC/B,IAEc,CAFdF,EAAAA,YAEcF,EAAAA,MAAAK,SAAA,EAAA,KAAA,mBADZ,IAAW,qCAARpB,EAAA,KAAK,EAAA,CAAA,CAAA,8CAKZiB,EAAAA,YAyBaF,EAAAA,MAAAM,SAAA,EAAA,KAAA,mBAxBX,IAuBM,CAvBNC,EAAAA,mBAuBM,MAvBNC,EAuBM,CArBKvB,EAAA,2BAATwB,EAAAA,mBAEI,IAFJC,EAEIC,EAAAA,gBADC1B,EAAA,WAAW,EAAA,CAAA,+BAILA,EAAA,6BAAXwB,EAAAA,mBAYM,MAAAG,EAAA,CAXJV,cAUEF,EAAAA,MAAAa,EAAAA,OAAA,EAAA,CATC,MAAO5B,EAAA,eACP,YAAWA,EAAA,eACX,SAAUA,EAAA,kBACV,KAAMA,EAAA,cACN,GAAIK,EAAA,iBACIF,EAAA,2CAAAA,EAAU,MAAA0B,GAClB,aAAY7B,EAAA,mBACZ,YAAaA,EAAA,0BACb,SAAUA,EAAA,QAAA,yIAKf8B,aAAoBC,EAAA,OAAA,MAAA,CAAA,WAKxBd,EAAAA,YA6BeF,EAAAA,MAAAiB,SAAA,EAAA,KAAA,mBA3Bb,IAcW,CAdKhC,EAAA,aAAU,0BAA1BwB,EAAAA,mBAcWS,WAAA,CAAA,IAAA,GAAA,CAbThB,cAKUF,EAAAA,MAAAmB,EAAAA,OAAA,EAAA,CAJR,QAAQ,UACP,QAAOrB,CAAA,qBAER,IAAgB,qCAAbb,EAAA,UAAU,EAAA,CAAA,CAAA,SAEfiB,cAMUF,EAAAA,MAAAmB,EAAAA,OAAA,EAAA,CALP,QAASlC,EAAA,eACT,SAAUA,EAAA,gBACV,QAAOY,CAAA,qBAER,IAAiB,qCAAdZ,EAAA,WAAW,EAAA,CAAA,CAAA,wCAKGA,EAAA,aAAU,oBAC7Bc,EAAAA,YAOUC,QAAAmB,EAAAA,OAAA,EAAA,OANP,QAASlC,EAAA,eACT,SAAUA,EAAA,gBACV,QAAOY,EACR,MAAM,QAAA,qBAEN,IAAiB,qCAAdZ,EAAA,WAAW,EAAA,CAAA,CAAA"}
|
|
@@ -5,11 +5,16 @@ import "lucide-vue-next";
|
|
|
5
5
|
import "clsx";
|
|
6
6
|
import "tailwind-merge";
|
|
7
7
|
import "@internationalized/date";
|
|
8
|
+
import "md-editor-v3";
|
|
9
|
+
/* empty css */
|
|
10
|
+
/* empty css */
|
|
8
11
|
import "../shadcn/badge-variants.js";
|
|
9
12
|
import "@vueuse/core";
|
|
10
13
|
import "reka-ui";
|
|
11
14
|
/* empty css */
|
|
12
15
|
import "../shadcn/avatar-variants.js";
|
|
16
|
+
import "dompurify";
|
|
17
|
+
/* empty css */
|
|
13
18
|
import "ag-grid-vue3";
|
|
14
19
|
import "ag-grid-community";
|
|
15
20
|
import "ag-grid-enterprise";
|
|
@@ -32,7 +37,7 @@ import S from "../shadcn/DialogFooter.vue.js";
|
|
|
32
37
|
const L = { class: "space-y-4" }, P = {
|
|
33
38
|
key: 0,
|
|
34
39
|
class: "text-sm text-muted-foreground"
|
|
35
|
-
}, R = { key: 1 },
|
|
40
|
+
}, R = { key: 1 }, Ce = /* @__PURE__ */ T({
|
|
36
41
|
__name: "JModal",
|
|
37
42
|
props: {
|
|
38
43
|
open: { type: Boolean, default: !1 },
|
|
@@ -166,6 +171,6 @@ const L = { class: "space-y-4" }, P = {
|
|
|
166
171
|
}
|
|
167
172
|
});
|
|
168
173
|
export {
|
|
169
|
-
|
|
174
|
+
Ce as default
|
|
170
175
|
};
|
|
171
176
|
//# sourceMappingURL=JModal.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JModal.vue.js","sources":["../../../../src/components/organisms/JModal.vue"],"sourcesContent":["<template>\r\n <Dialog\r\n :open=\"open\"\r\n @update:open=\"onOpenChange\"\r\n :class=\"sizeClass\"\r\n >\r\n <DialogContent>\r\n <!-- Header -->\r\n <DialogHeader v-if=\"title\" class=\"bg-muted/50 border-b\">\r\n <DialogTitle>\r\n {{ title }}\r\n </DialogTitle>\r\n </DialogHeader>\r\n\r\n <!-- Body -->\r\n <DialogBody>\r\n <div class=\"space-y-4\">\r\n <!-- Description -->\r\n <p v-if=\"description\" class=\"text-sm text-muted-foreground\">\r\n {{ description }}\r\n </p>\r\n\r\n <!-- JFormField๊ฐ ์๋ ๊ฒฝ์ฐ -->\r\n <div v-if=\"showFormField\">\r\n <JFormField\r\n :label=\"formFieldLabel\"\r\n :error-msg=\"formFieldError\"\r\n :required=\"formFieldRequired\"\r\n :type=\"formFieldType\"\r\n :id=\"inputId\"\r\n v-model=\"inputValue\"\r\n :input-type=\"formFieldInputType\"\r\n :placeholder=\"formFieldInputPlaceholder\"\r\n :disabled=\"disabled\"\r\n />\r\n </div>\r\n\r\n <!-- ์ปค์คํ
์ปจํ
์ธ ์ฌ๋กฏ -->\r\n <slot name=\"body\" />\r\n </div>\r\n </DialogBody>\r\n\r\n <!-- Footer -->\r\n <DialogFooter>\r\n <!-- ํ์ธ/์ทจ์ ๋ฒํผ -->\r\n <template v-if=\"buttonType === 'OkCancel'\">\r\n <JButton\r\n variant=\"outline\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText }}\r\n </JButton>\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n \r\n <!-- ํ์ธ ๋ฒํผ๋ง -->\r\n <template v-else-if=\"buttonType === 'Ok'\">\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n class=\"w-full\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/shadcn'\r\nimport { JButton } from '@/components/atoms'\r\nimport { JFormField } from '@/components/molecules'\r\n\r\nexport interface JModalProps {\r\n // ๋ชจ๋ฌ ํ์ ์ฌ๋ถ\r\n open: boolean\r\n // ํค๋\r\n title?: string\r\n description?: string\r\n // ๋ชจ๋ฌ ์ฌ์ด์ฆ\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\r\n // ํผ ํ๋ (JFormField)\r\n showFormField?: boolean\r\n formFieldLabel?: string\r\n formFieldError?: string\r\n formFieldRequired?: boolean\r\n // ์
๋ ฅ ํ๋ ์ค์ \r\n formFieldInputType?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'\r\n formFieldInputPlaceholder?: string\r\n formFieldValue?: string\r\n formFieldType?: 'input' | 'textarea' | 'checkbox' | 'switch' | 'combo' | 'radio' | 'searchCombo' | 'datepicker'\r\n // ๋ฒํผ ์ค์ \r\n buttonType?: 'Ok' | 'OkCancel'\r\n confirmText?: string\r\n cancelText?: string\r\n confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\r\n confirmDisabled?: boolean\r\n // ๊ธฐํ\r\n disabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<JModalProps>(), {\r\n open: false,\r\n size: 'md',\r\n showFormField: false,\r\n formFieldInputType: 'text',\r\n formFieldType: 'input',\r\n buttonType: 'OkCancel',\r\n confirmText: 'ํ์ธ',\r\n cancelText: '์ทจ์',\r\n confirmVariant: 'default',\r\n confirmDisabled: false,\r\n disabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:open': [value: boolean]\r\n 'confirm': [value?: string]\r\n 'cancel': []\r\n}>()\r\n\r\n// ์
๋ ฅ๊ฐ ๊ด๋ฆฌ\r\nconst inputValue = ref(props.formFieldValue || '')\r\n\r\n// ์
๋ ฅ ํ๋ ID ์์ฑ\r\nconst inputId = computed(() => `modal-input-${Math.random().toString(36).substr(2, 9)}`)\r\n\r\n// ์ฌ์ด์ฆ ํด๋์ค ๊ณ์ฐ\r\nconst sizeClass = computed(() => {\r\n // Dialog.vue์ ๊ธฐ๋ณธ max-w-lg๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด !max-w-*๋ก ์ค๋ฒ๋ผ์ด๋\r\n const sizeMap: Record<NonNullable<JModalProps['size']>, string> = {\r\n 'sm': '!max-w-sm',\r\n 'md': '!max-w-md',\r\n 'lg': '!max-w-2xl',\r\n 'xl': '!max-w-4xl',\r\n '2xl': '!max-w-6xl',\r\n 'full': '!max-w-[95vw]'\r\n }\r\n return sizeMap[props.size]\r\n})\r\n\r\n// props.formFieldValue ๋ณ๊ฒฝ ๊ฐ์ง\r\nwatch(() => props.formFieldValue, (newValue) => {\r\n if (newValue !== undefined) {\r\n inputValue.value = newValue\r\n }\r\n})\r\n\r\n// ๋ชจ๋ฌ ์ด๊ธฐ/๋ซ๊ธฐ ํธ๋ค๋ฌ\r\nconst onOpenChange = (value: boolean) => {\r\n emit('update:open', value)\r\n}\r\n\r\n// ํ์ธ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleConfirm = () => {\r\n const value = props.showFormField ? inputValue.value : undefined\r\n emit('confirm', value)\r\n}\r\n\r\n// ์ทจ์ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleCancel = () => {\r\n emit('cancel')\r\n // ์
๋ ฅ๊ฐ ์ด๊ธฐํ\r\n inputValue.value = props.formFieldValue || ''\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","inputValue","ref","inputId","computed","sizeClass","watch","newValue","onOpenChange","value","handleConfirm","handleCancel","_createBlock","_unref","Dialog","_createVNode","DialogContent","DialogHeader","DialogTitle","DialogBody","_createElementVNode","_hoisted_1","_createElementBlock","_hoisted_2","_toDisplayString","_hoisted_3","JFormField","$event","_renderSlot","_ctx","DialogFooter","_Fragment","JButton"],"mappings":"
|
|
1
|
+
{"version":3,"file":"JModal.vue.js","sources":["../../../../src/components/organisms/JModal.vue"],"sourcesContent":["<template>\r\n <Dialog\r\n :open=\"open\"\r\n @update:open=\"onOpenChange\"\r\n :class=\"sizeClass\"\r\n >\r\n <DialogContent>\r\n <!-- Header -->\r\n <DialogHeader v-if=\"title\" class=\"bg-muted/50 border-b\">\r\n <DialogTitle>\r\n {{ title }}\r\n </DialogTitle>\r\n </DialogHeader>\r\n\r\n <!-- Body -->\r\n <DialogBody>\r\n <div class=\"space-y-4\">\r\n <!-- Description -->\r\n <p v-if=\"description\" class=\"text-sm text-muted-foreground\">\r\n {{ description }}\r\n </p>\r\n\r\n <!-- JFormField๊ฐ ์๋ ๊ฒฝ์ฐ -->\r\n <div v-if=\"showFormField\">\r\n <JFormField\r\n :label=\"formFieldLabel\"\r\n :error-msg=\"formFieldError\"\r\n :required=\"formFieldRequired\"\r\n :type=\"formFieldType\"\r\n :id=\"inputId\"\r\n v-model=\"inputValue\"\r\n :input-type=\"formFieldInputType\"\r\n :placeholder=\"formFieldInputPlaceholder\"\r\n :disabled=\"disabled\"\r\n />\r\n </div>\r\n\r\n <!-- ์ปค์คํ
์ปจํ
์ธ ์ฌ๋กฏ -->\r\n <slot name=\"body\" />\r\n </div>\r\n </DialogBody>\r\n\r\n <!-- Footer -->\r\n <DialogFooter>\r\n <!-- ํ์ธ/์ทจ์ ๋ฒํผ -->\r\n <template v-if=\"buttonType === 'OkCancel'\">\r\n <JButton\r\n variant=\"outline\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText }}\r\n </JButton>\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n \r\n <!-- ํ์ธ ๋ฒํผ๋ง -->\r\n <template v-else-if=\"buttonType === 'Ok'\">\r\n <JButton\r\n :variant=\"confirmVariant\"\r\n :disabled=\"confirmDisabled\"\r\n @click=\"handleConfirm\"\r\n class=\"w-full\"\r\n >\r\n {{ confirmText }}\r\n </JButton>\r\n </template>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/shadcn'\r\nimport { JButton } from '@/components/atoms'\r\nimport { JFormField } from '@/components/molecules'\r\n\r\nexport interface JModalProps {\r\n // ๋ชจ๋ฌ ํ์ ์ฌ๋ถ\r\n open: boolean\r\n // ํค๋\r\n title?: string\r\n description?: string\r\n // ๋ชจ๋ฌ ์ฌ์ด์ฆ\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\r\n // ํผ ํ๋ (JFormField)\r\n showFormField?: boolean\r\n formFieldLabel?: string\r\n formFieldError?: string\r\n formFieldRequired?: boolean\r\n // ์
๋ ฅ ํ๋ ์ค์ \r\n formFieldInputType?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'\r\n formFieldInputPlaceholder?: string\r\n formFieldValue?: string\r\n formFieldType?: 'input' | 'textarea' | 'checkbox' | 'switch' | 'combo' | 'radio' | 'searchCombo' | 'datepicker'\r\n // ๋ฒํผ ์ค์ \r\n buttonType?: 'Ok' | 'OkCancel'\r\n confirmText?: string\r\n cancelText?: string\r\n confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\r\n confirmDisabled?: boolean\r\n // ๊ธฐํ\r\n disabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<JModalProps>(), {\r\n open: false,\r\n size: 'md',\r\n showFormField: false,\r\n formFieldInputType: 'text',\r\n formFieldType: 'input',\r\n buttonType: 'OkCancel',\r\n confirmText: 'ํ์ธ',\r\n cancelText: '์ทจ์',\r\n confirmVariant: 'default',\r\n confirmDisabled: false,\r\n disabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:open': [value: boolean]\r\n 'confirm': [value?: string]\r\n 'cancel': []\r\n}>()\r\n\r\n// ์
๋ ฅ๊ฐ ๊ด๋ฆฌ\r\nconst inputValue = ref(props.formFieldValue || '')\r\n\r\n// ์
๋ ฅ ํ๋ ID ์์ฑ\r\nconst inputId = computed(() => `modal-input-${Math.random().toString(36).substr(2, 9)}`)\r\n\r\n// ์ฌ์ด์ฆ ํด๋์ค ๊ณ์ฐ\r\nconst sizeClass = computed(() => {\r\n // Dialog.vue์ ๊ธฐ๋ณธ max-w-lg๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด !max-w-*๋ก ์ค๋ฒ๋ผ์ด๋\r\n const sizeMap: Record<NonNullable<JModalProps['size']>, string> = {\r\n 'sm': '!max-w-sm',\r\n 'md': '!max-w-md',\r\n 'lg': '!max-w-2xl',\r\n 'xl': '!max-w-4xl',\r\n '2xl': '!max-w-6xl',\r\n 'full': '!max-w-[95vw]'\r\n }\r\n return sizeMap[props.size]\r\n})\r\n\r\n// props.formFieldValue ๋ณ๊ฒฝ ๊ฐ์ง\r\nwatch(() => props.formFieldValue, (newValue) => {\r\n if (newValue !== undefined) {\r\n inputValue.value = newValue\r\n }\r\n})\r\n\r\n// ๋ชจ๋ฌ ์ด๊ธฐ/๋ซ๊ธฐ ํธ๋ค๋ฌ\r\nconst onOpenChange = (value: boolean) => {\r\n emit('update:open', value)\r\n}\r\n\r\n// ํ์ธ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleConfirm = () => {\r\n const value = props.showFormField ? inputValue.value : undefined\r\n emit('confirm', value)\r\n}\r\n\r\n// ์ทจ์ ๋ฒํผ ํธ๋ค๋ฌ\r\nconst handleCancel = () => {\r\n emit('cancel')\r\n // ์
๋ ฅ๊ฐ ์ด๊ธฐํ\r\n inputValue.value = props.formFieldValue || ''\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","inputValue","ref","inputId","computed","sizeClass","watch","newValue","onOpenChange","value","handleConfirm","handleCancel","_createBlock","_unref","Dialog","_createVNode","DialogContent","DialogHeader","DialogTitle","DialogBody","_createElementVNode","_hoisted_1","_createElementBlock","_hoisted_2","_toDisplayString","_hoisted_3","JFormField","$event","_renderSlot","_ctx","DialogFooter","_Fragment","JButton"],"mappings":"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"}
|