@bimatrix-aud-platform/aud_mcp_server 1.1.38 → 1.1.39

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.
@@ -88,26 +88,47 @@ export declare function buttonDefaults(): {
88
88
  Cursor: string;
89
89
  HasNewRadius: boolean;
90
90
  };
91
- export declare function dataGridDefaults(): {
92
- CellMargin: string;
93
- Columns: any[];
94
- UsePPTExport: boolean;
91
+ export declare function textBoxDefaults(): {
92
+ LanguageCode: string;
93
+ Value: string;
94
+ Text: string;
95
+ IsReadOnly: boolean;
96
+ MaxLength: number;
97
+ Formula: string;
98
+ MxBinding: string;
99
+ MxBindingUseStyle: boolean;
95
100
  };
96
- export declare function groupDefaults(): {
97
- ChildElements: any[];
101
+ export declare function numberBoxDefaults(): {
102
+ Format: string;
103
+ Formula: string;
104
+ Value: number;
105
+ Text: string;
106
+ IsReadOnly: boolean;
107
+ Maximum: number;
108
+ Minimum: number;
109
+ MxBinding: string;
110
+ MxBindingUseStyle: boolean;
98
111
  };
99
- export declare function checkBoxDefaults(): {
100
- LanguageCode: string;
112
+ export declare function maskTextBoxDefaults(): {
113
+ Format: string;
114
+ Formula: string;
115
+ IsReadOnly: boolean;
116
+ Text: string;
117
+ Value: string;
118
+ MxBinding: string;
119
+ };
120
+ export declare function richTextBoxDefaults(): {
121
+ Formula: string;
122
+ IsReadOnly: boolean;
123
+ MaxLength: number;
124
+ LineSpacing: number;
125
+ HasLineSpacing: boolean;
126
+ MxBinding: string;
127
+ MxBindingUseStyle: boolean;
128
+ Value: string;
101
129
  Text: string;
102
- TextPosition: string;
103
- GroupName: string;
104
- CheckedValue: string;
105
- UnCheckedValue: string;
106
- Checked: boolean;
107
- ViewType: number;
108
130
  };
109
131
  export declare function comboBoxDefaults(): {
110
- DataSource: string;
111
132
  Value: string;
112
133
  Text: string;
113
134
  InitType: number;
@@ -115,25 +136,52 @@ export declare function comboBoxDefaults(): {
115
136
  IsReadOnly: boolean;
116
137
  SortType: number;
117
138
  AutoRefresh: boolean;
139
+ DoRefresh: boolean;
118
140
  AfterRefresh: string;
119
141
  UseAllItems: boolean;
120
142
  UseAllItemsText: string;
121
143
  DisplayType: number;
122
- DataSourceInfo: {
123
- LabelField: string;
124
- ValueField: string;
125
- };
126
144
  InitValue: string;
127
145
  };
128
- export declare function textBoxDefaults(): Record<string, any>;
129
- export declare function numberBoxDefaults(): {
130
- Format: string;
131
- Formula: string;
132
- Value: number;
146
+ export declare function multiComboBoxDefaults(): {
147
+ InitType: number;
148
+ RefreshType: number;
149
+ AutoRefresh: boolean;
150
+ EditValue: string;
151
+ CaptionText: string;
152
+ };
153
+ export declare function checkBoxDefaults(): {
154
+ LanguageCode: string;
133
155
  Text: string;
156
+ TextPosition: string;
157
+ GroupName: string;
158
+ CheckedValue: string;
159
+ UnCheckedValue: string;
160
+ Checked: boolean;
161
+ ViewType: number;
162
+ };
163
+ export declare function radioButtonDefaults(): {
164
+ LanguageCode: string;
165
+ Text: string;
166
+ TextPosition: string;
167
+ GroupName: string;
168
+ CheckedValue: string;
169
+ Checked: boolean;
170
+ };
171
+ export declare function pickListDefaults(): {
134
172
  IsReadOnly: boolean;
135
- Maximum: number;
136
- Minimum: number;
173
+ };
174
+ export declare function calendarDefaults(): {
175
+ LanguageCode: string;
176
+ Value: string;
177
+ Text: string;
178
+ InitType: number;
179
+ IsReadOnly: boolean;
180
+ CalendarType: number;
181
+ UseButton: boolean;
182
+ AutoRefresh: boolean;
183
+ AfterRefresh: string;
184
+ DataSource: string;
137
185
  MxBinding: string;
138
186
  MxBindingUseStyle: boolean;
139
187
  };
@@ -144,20 +192,119 @@ export declare function imageDefaults(): {
144
192
  SaveName: string;
145
193
  };
146
194
  };
147
- export declare function richTextBoxDefaults(): {
148
- Formula: string;
149
- IsReadOnly: boolean;
150
- MaxLength: number;
151
- LineSpacing: number;
152
- HasLineSpacing: boolean;
153
- MxBinding: string;
154
- MxBindingUseStyle: boolean;
195
+ export declare function colorSelectorDefaults(): {
196
+ ColorValue: string;
197
+ ShowButton: boolean;
198
+ };
199
+ export declare function fileUploadButtonDefaults(): {
155
200
  Value: string;
156
- Text: string;
201
+ Cursor: string;
202
+ };
203
+ export declare function dataGridDefaults(): {
204
+ CellMargin: string;
205
+ Columns: any[];
206
+ AutoRefresh: boolean;
207
+ DoRefresh: boolean;
208
+ DoExport: boolean;
209
+ ColumnHeaderHeight: number;
210
+ RowHeight: number;
211
+ ShowHeader: number;
212
+ SelectRule: number;
213
+ FontFamily: string;
214
+ FontSize: number;
215
+ };
216
+ export declare function compactDataGridDefaults(): {
217
+ CellMargin: string;
218
+ Columns: any[];
219
+ AutoRefresh: boolean;
220
+ DoRefresh: boolean;
221
+ DoExport: boolean;
222
+ ColumnHeaderHeight: number;
223
+ RowHeight: number;
224
+ ShowHeader: number;
225
+ SelectRule: number;
226
+ FontFamily: string;
227
+ FontSize: number;
228
+ };
229
+ export declare function treeGridDefaults(): {
230
+ CellMargin: string;
231
+ Columns: any[];
232
+ AutoRefresh: boolean;
233
+ DoRefresh: boolean;
234
+ DoExport: boolean;
235
+ ColumnHeaderHeight: number;
236
+ RowHeight: number;
237
+ SelectRule: number;
238
+ FontFamily: string;
239
+ FontSize: number;
240
+ ToggleBtnSize: number;
241
+ };
242
+ export declare function iGridDefaults(): {
243
+ AutoRefresh: boolean;
244
+ DoRefresh: boolean;
245
+ DoExport: boolean;
246
+ ServerScript: string;
247
+ TemplateCode: string;
248
+ };
249
+ export declare function olapGridDefaults(): {
250
+ AutoRefresh: boolean;
251
+ DoRefresh: boolean;
252
+ DoExport: boolean;
253
+ iOLAPView: Record<string, any>;
254
+ ExtraOption: Record<string, any>;
255
+ };
256
+ export declare function chartDefaults(): {
257
+ AutoRefresh: boolean;
258
+ DoRefresh: boolean;
259
+ DoExport: boolean;
260
+ PlotOptions: {
261
+ Animation: number;
262
+ EnableMouseTracking: boolean;
263
+ DataLabels: {};
264
+ ConnectNulls: boolean;
265
+ AllowOverlap: boolean;
266
+ };
267
+ Axis: {
268
+ XAxis: {
269
+ Text: string;
270
+ Visible: boolean;
271
+ };
272
+ Y1Axis: {
273
+ Text: string;
274
+ Visible: boolean;
275
+ };
276
+ Y2Axis: {
277
+ Text: string;
278
+ Visible: boolean;
279
+ };
280
+ };
281
+ SeriesSet: any[];
282
+ };
283
+ export declare function emptyDefaults(): Record<string, any>;
284
+ export declare function groupDefaults(): {
285
+ ChildElements: any[];
286
+ };
287
+ export declare function tabDefaults(): {
288
+ Property: {
289
+ TabButtonPosition: number;
290
+ };
291
+ TabItems: any[];
292
+ DoExport: boolean;
293
+ };
294
+ export declare function tableLayoutDefaults(): {
295
+ Cols: any[];
296
+ Rows: any[];
297
+ MergeCellList: any[];
157
298
  };
158
299
  export declare function userComponentDefaults(): {
159
300
  DoRefresh: boolean;
160
301
  DoExport: boolean;
161
302
  ReportInfo: {};
303
+ ExternalReportInfo: {};
304
+ };
305
+ export declare function webContainerDefaults(): {
306
+ AutoRefresh: boolean;
307
+ DoRefresh: boolean;
308
+ TargetURL: string;
162
309
  };
163
310
  export declare const ELEMENT_DEFAULTS_MAP: Record<string, () => Record<string, any>>;
@@ -65,6 +65,8 @@ export function defaultValidator() {
65
65
  };
66
66
  }
67
67
  // ---- Element 타입별 기본값 ----
68
+ // 실제 i-AUD Designer(all_controls_report.mtsd)의 기본값을 기준으로 설정
69
+ // -- 기본 컨트롤 --
68
70
  export function labelDefaults() {
69
71
  return {
70
72
  LanguageCode: "",
@@ -73,8 +75,8 @@ export function labelDefaults() {
73
75
  Formula: "",
74
76
  UseTextOverflow: false,
75
77
  UseAutoLineBreak: false,
76
- LineSpacing: 0,
77
- HasLineSpacing: false,
78
+ LineSpacing: 1.2,
79
+ HasLineSpacing: true,
78
80
  MxBinding: "",
79
81
  MxBindingUseStyle: false,
80
82
  };
@@ -84,104 +86,313 @@ export function buttonDefaults() {
84
86
  LanguageCode: "",
85
87
  Value: "",
86
88
  Cursor: "pointer",
87
- HasNewRadius: false,
89
+ HasNewRadius: true,
88
90
  };
89
91
  }
90
- export function dataGridDefaults() {
92
+ // -- 입력 컨트롤 --
93
+ export function textBoxDefaults() {
91
94
  return {
92
- CellMargin: "2",
93
- Columns: [],
94
- UsePPTExport: false,
95
+ LanguageCode: "",
96
+ Value: "",
97
+ Text: "",
98
+ IsReadOnly: false,
99
+ MaxLength: 0,
100
+ Formula: "",
101
+ MxBinding: "",
102
+ MxBindingUseStyle: false,
95
103
  };
96
104
  }
97
- export function groupDefaults() {
105
+ export function numberBoxDefaults() {
98
106
  return {
99
- ChildElements: [],
107
+ Format: "#,##0",
108
+ Formula: "",
109
+ Value: 0,
110
+ Text: "",
111
+ IsReadOnly: false,
112
+ Maximum: 999999999,
113
+ Minimum: -999999999,
114
+ MxBinding: "",
115
+ MxBindingUseStyle: false,
100
116
  };
101
117
  }
102
- export function checkBoxDefaults() {
118
+ export function maskTextBoxDefaults() {
103
119
  return {
104
- LanguageCode: "",
120
+ Format: "",
121
+ Formula: "",
122
+ IsReadOnly: false,
123
+ Text: "",
124
+ Value: "",
125
+ MxBinding: "",
126
+ };
127
+ }
128
+ export function richTextBoxDefaults() {
129
+ return {
130
+ Formula: "",
131
+ IsReadOnly: false,
132
+ MaxLength: 0,
133
+ LineSpacing: 1.2,
134
+ HasLineSpacing: true,
135
+ MxBinding: "",
136
+ MxBindingUseStyle: false,
137
+ Value: "",
105
138
  Text: "",
106
- TextPosition: "right",
107
- GroupName: "",
108
- CheckedValue: "Y",
109
- UnCheckedValue: "N",
110
- Checked: false,
111
- ViewType: 0,
112
139
  };
113
140
  }
141
+ // -- 선택 컨트롤 --
114
142
  export function comboBoxDefaults() {
115
143
  return {
116
- DataSource: "",
117
144
  Value: "",
118
145
  Text: "",
119
146
  InitType: 0,
120
- RefreshType: 0,
147
+ RefreshType: 1,
121
148
  IsReadOnly: false,
122
149
  SortType: 0,
123
150
  AutoRefresh: false,
151
+ DoRefresh: false,
124
152
  AfterRefresh: "",
125
153
  UseAllItems: false,
126
154
  UseAllItemsText: "",
127
155
  DisplayType: 0,
128
- DataSourceInfo: { LabelField: "", ValueField: "" },
129
156
  InitValue: "",
130
157
  };
131
158
  }
132
- export function textBoxDefaults() {
133
- return {};
159
+ export function multiComboBoxDefaults() {
160
+ return {
161
+ InitType: 0,
162
+ RefreshType: 1,
163
+ AutoRefresh: false,
164
+ EditValue: "",
165
+ CaptionText: "",
166
+ };
134
167
  }
135
- export function numberBoxDefaults() {
168
+ export function checkBoxDefaults() {
136
169
  return {
137
- Format: "#,##0",
138
- Formula: "",
139
- Value: 0,
170
+ LanguageCode: "",
140
171
  Text: "",
172
+ TextPosition: "back",
173
+ GroupName: "",
174
+ CheckedValue: "Y",
175
+ UnCheckedValue: "N",
176
+ Checked: false,
177
+ ViewType: 0,
178
+ };
179
+ }
180
+ export function radioButtonDefaults() {
181
+ return {
182
+ LanguageCode: "",
183
+ Text: "",
184
+ TextPosition: "back",
185
+ GroupName: "",
186
+ CheckedValue: "",
187
+ Checked: false,
188
+ };
189
+ }
190
+ export function pickListDefaults() {
191
+ return {
141
192
  IsReadOnly: false,
142
- Maximum: 999999999,
143
- Minimum: -999999999,
193
+ };
194
+ }
195
+ // -- 날짜 컨트롤 --
196
+ export function calendarDefaults() {
197
+ return {
198
+ LanguageCode: "",
199
+ Value: "",
200
+ Text: "",
201
+ InitType: 0,
202
+ IsReadOnly: false,
203
+ CalendarType: 0,
204
+ UseButton: true,
205
+ AutoRefresh: false,
206
+ AfterRefresh: "",
207
+ DataSource: "",
144
208
  MxBinding: "",
145
209
  MxBindingUseStyle: false,
146
210
  };
147
211
  }
212
+ // -- 이미지/색상/파일 --
148
213
  export function imageDefaults() {
149
214
  return {
150
215
  Cursor: "default",
151
216
  Image: { FolderCode: "", SaveName: "" },
152
217
  };
153
218
  }
154
- export function richTextBoxDefaults() {
219
+ export function colorSelectorDefaults() {
220
+ return {
221
+ ColorValue: "",
222
+ ShowButton: true,
223
+ };
224
+ }
225
+ export function fileUploadButtonDefaults() {
155
226
  return {
156
- Formula: "",
157
- IsReadOnly: false,
158
- MaxLength: 0,
159
- LineSpacing: 0,
160
- HasLineSpacing: false,
161
- MxBinding: "",
162
- MxBindingUseStyle: false,
163
227
  Value: "",
164
- Text: "",
228
+ Cursor: "pointer",
229
+ };
230
+ }
231
+ // -- 그리드 컨트롤 --
232
+ export function dataGridDefaults() {
233
+ return {
234
+ CellMargin: "5,5,5,5",
235
+ Columns: [],
236
+ AutoRefresh: false,
237
+ DoRefresh: true,
238
+ DoExport: true,
239
+ ColumnHeaderHeight: 28,
240
+ RowHeight: 24,
241
+ ShowHeader: 3,
242
+ SelectRule: 2,
243
+ FontFamily: "inherit",
244
+ FontSize: 12,
245
+ };
246
+ }
247
+ export function compactDataGridDefaults() {
248
+ return dataGridDefaults();
249
+ }
250
+ export function treeGridDefaults() {
251
+ return {
252
+ CellMargin: "5,5,5,5",
253
+ Columns: [],
254
+ AutoRefresh: false,
255
+ DoRefresh: true,
256
+ DoExport: true,
257
+ ColumnHeaderHeight: 28,
258
+ RowHeight: 24,
259
+ SelectRule: 2,
260
+ FontFamily: "inherit",
261
+ FontSize: 12,
262
+ ToggleBtnSize: 10,
263
+ };
264
+ }
265
+ export function iGridDefaults() {
266
+ return {
267
+ AutoRefresh: false,
268
+ DoRefresh: true,
269
+ DoExport: true,
270
+ ServerScript: "",
271
+ TemplateCode: "",
272
+ };
273
+ }
274
+ export function olapGridDefaults() {
275
+ return {
276
+ AutoRefresh: false,
277
+ DoRefresh: true,
278
+ DoExport: true,
279
+ iOLAPView: {},
280
+ ExtraOption: {},
281
+ };
282
+ }
283
+ // -- 차트 컨트롤 --
284
+ function defaultChartAxis() {
285
+ return {
286
+ XAxis: { Text: "", Visible: true },
287
+ Y1Axis: { Text: "", Visible: true },
288
+ Y2Axis: { Text: "", Visible: false },
289
+ };
290
+ }
291
+ function defaultPlotOptions() {
292
+ return {
293
+ Animation: 1000,
294
+ EnableMouseTracking: true,
295
+ DataLabels: {},
296
+ ConnectNulls: false,
297
+ AllowOverlap: false,
298
+ };
299
+ }
300
+ export function chartDefaults() {
301
+ return {
302
+ AutoRefresh: false,
303
+ DoRefresh: true,
304
+ DoExport: true,
305
+ PlotOptions: defaultPlotOptions(),
306
+ Axis: defaultChartAxis(),
307
+ SeriesSet: [],
308
+ };
309
+ }
310
+ // -- 트리 컨트롤 --
311
+ export function emptyDefaults() {
312
+ return {};
313
+ }
314
+ // -- 컨테이너/레이아웃 --
315
+ export function groupDefaults() {
316
+ return {
317
+ ChildElements: [],
318
+ };
319
+ }
320
+ export function tabDefaults() {
321
+ return {
322
+ Property: { TabButtonPosition: 0 },
323
+ TabItems: [],
324
+ DoExport: true,
325
+ };
326
+ }
327
+ export function tableLayoutDefaults() {
328
+ return {
329
+ Cols: [],
330
+ Rows: [],
331
+ MergeCellList: [],
165
332
  };
166
333
  }
167
334
  export function userComponentDefaults() {
168
335
  return {
169
- DoRefresh: false,
170
- DoExport: false,
336
+ DoRefresh: true,
337
+ DoExport: true,
171
338
  ReportInfo: {},
339
+ ExternalReportInfo: {},
340
+ };
341
+ }
342
+ export function webContainerDefaults() {
343
+ return {
344
+ AutoRefresh: true,
345
+ DoRefresh: true,
346
+ TargetURL: "",
172
347
  };
173
348
  }
174
349
  // Type → defaults 팩토리 매핑
175
350
  export const ELEMENT_DEFAULTS_MAP = {
351
+ // 기본 컨트롤
176
352
  Label: labelDefaults,
177
353
  Button: buttonDefaults,
178
- DataGrid: dataGridDefaults,
179
- Group: groupDefaults,
180
- CheckBox: checkBoxDefaults,
181
- ComboBox: comboBoxDefaults,
354
+ // 입력 컨트롤
182
355
  TextBox: textBoxDefaults,
183
356
  NumberBox: numberBoxDefaults,
184
- Image: imageDefaults,
357
+ MaskTextBox: maskTextBoxDefaults,
185
358
  RichTextBox: richTextBoxDefaults,
359
+ // 선택 컨트롤
360
+ ComboBox: comboBoxDefaults,
361
+ MultiComboBox: multiComboBoxDefaults,
362
+ CheckBox: checkBoxDefaults,
363
+ RadioButton: radioButtonDefaults,
364
+ PickList: pickListDefaults,
365
+ // 날짜 컨트롤
366
+ Calendar: calendarDefaults,
367
+ CalendarYear: calendarDefaults,
368
+ CalendarYM: calendarDefaults,
369
+ // 이미지/색상/파일
370
+ Image: imageDefaults,
371
+ ColorSelector: colorSelectorDefaults,
372
+ FileUploadButton: fileUploadButtonDefaults,
373
+ // 그리드 컨트롤
374
+ DataGrid: dataGridDefaults,
375
+ CompactDataGrid: compactDataGridDefaults,
376
+ TreeGrid: treeGridDefaults,
377
+ iGrid: iGridDefaults,
378
+ OlapGrid: olapGridDefaults,
379
+ // 차트 컨트롤
380
+ Chart: chartDefaults,
381
+ PieChart: chartDefaults,
382
+ ScatterChart: chartDefaults,
383
+ PolygonChart: chartDefaults,
384
+ // 트리 컨트롤
385
+ Tree: emptyDefaults,
386
+ TreeView: emptyDefaults,
387
+ // 컨테이너/레이아웃
388
+ Group: groupDefaults,
389
+ Tab: tabDefaults,
390
+ TableLayout: tableLayoutDefaults,
186
391
  UserComponent: userComponentDefaults,
392
+ WebContainer: webContainerDefaults,
393
+ // 기타
394
+ Slider: emptyDefaults,
395
+ DiagramControl: emptyDefaults,
396
+ Slicer: emptyDefaults,
397
+ AddIn: emptyDefaults,
187
398
  };
@@ -8,6 +8,7 @@ import { generateId } from "../utils/uuid.js";
8
8
  import { parseHexColor } from "../utils/color.js";
9
9
  import { parseDocking } from "../utils/docking.js";
10
10
  import { generateGridColumns } from "./grid-column.js";
11
+ import { ELEMENT_DEFAULTS_MAP } from "./defaults.js";
11
12
  // ============================================================
12
13
  // Schema-Compliant Style Helpers (internal)
13
14
  // ============================================================
@@ -143,6 +144,11 @@ const COMMON_OPTS = new Set([
143
144
  "bg", "border", "font", "color", "visible", "style",
144
145
  "dataSource",
145
146
  ]);
147
+ /** defaults.ts의 ELEMENT_DEFAULTS_MAP에서 타입별 기본값을 가져온다 */
148
+ function getTypeDefaults(type) {
149
+ const factory = ELEMENT_DEFAULTS_MAP[type];
150
+ return factory ? factory() : {};
151
+ }
146
152
  // ============================================================
147
153
  // DataGridBuilder
148
154
  // ============================================================
@@ -190,10 +196,8 @@ class ElementContainer {
190
196
  Type: "Label", Id: id, Name: name,
191
197
  Position: buildPosition({ width: 200, height: 30, ...opts }),
192
198
  Style: buildStyle(opts),
193
- LanguageCode: "", Text: text, Cursor: "default", Formula: "",
194
- UseTextOverflow: false, UseAutoLineBreak: false,
195
- LineSpacing: 0, HasLineSpacing: false,
196
- MxBinding: "", MxBindingUseStyle: false,
199
+ ...getTypeDefaults("Label"),
200
+ Text: text,
197
201
  };
198
202
  this._applyPassThrough(element, opts);
199
203
  this._addElement(element);
@@ -205,7 +209,8 @@ class ElementContainer {
205
209
  Type: "Button", Id: id, Name: name,
206
210
  Position: buildPosition({ width: 80, height: 30, ...opts }),
207
211
  Style: buildStyle(opts),
208
- LanguageCode: "", Value: text, Cursor: "pointer", HasNewRadius: false,
212
+ ...getTypeDefaults("Button"),
213
+ Value: text,
209
214
  };
210
215
  this._applyPassThrough(element, opts);
211
216
  this._addElement(element);
@@ -217,10 +222,7 @@ class ElementContainer {
217
222
  Type: "Calendar", Id: id, Name: name,
218
223
  Position: buildPosition({ width: 130, height: 28, ...opts }),
219
224
  Style: buildStyle(opts),
220
- LanguageCode: "", Value: "", Text: "", InitType: 0,
221
- IsReadOnly: false, CalendarType: 0, UseButton: true,
222
- AutoRefresh: false, AfterRefresh: "", DataSource: "",
223
- MxBinding: "", MxBindingUseStyle: false,
225
+ ...getTypeDefaults("Calendar"),
224
226
  };
225
227
  this._applyPassThrough(element, opts);
226
228
  this._addElement(element);
@@ -232,9 +234,7 @@ class ElementContainer {
232
234
  Type: "TextBox", Id: id, Name: name,
233
235
  Position: buildPosition({ width: 200, height: 28, ...opts }),
234
236
  Style: buildStyle(opts),
235
- LanguageCode: "", Value: "", Text: "",
236
- IsReadOnly: false, Formula: "", MaxLength: 0,
237
- MxBinding: "", MxBindingUseStyle: false,
237
+ ...getTypeDefaults("TextBox"),
238
238
  };
239
239
  this._applyPassThrough(element, opts);
240
240
  this._addElement(element);
@@ -246,12 +246,11 @@ class ElementContainer {
246
246
  Type: "NumberBox", Id: id, Name: name,
247
247
  Position: buildPosition({ width: 150, height: 28, ...opts }),
248
248
  Style: buildStyle(opts),
249
- Format: opts.format ?? "#,##0",
250
- Formula: "", Value: opts.value ?? 0, Text: "",
251
- IsReadOnly: false,
252
- Maximum: opts.max ?? 999999999,
253
- Minimum: opts.min ?? -999999999,
254
- MxBinding: "", MxBindingUseStyle: false,
249
+ ...getTypeDefaults("NumberBox"),
250
+ ...(opts.format !== undefined ? { Format: opts.format } : {}),
251
+ ...(opts.value !== undefined ? { Value: opts.value } : {}),
252
+ ...(opts.max !== undefined ? { Maximum: opts.max } : {}),
253
+ ...(opts.min !== undefined ? { Minimum: opts.min } : {}),
255
254
  };
256
255
  this._applyPassThrough(element, opts);
257
256
  this._addElement(element);
@@ -263,16 +262,12 @@ class ElementContainer {
263
262
  Type: "ComboBox", Id: id, Name: name,
264
263
  Position: buildPosition({ width: 150, height: 28, ...opts }),
265
264
  Style: buildStyle(opts),
265
+ ...getTypeDefaults("ComboBox"),
266
266
  DataSource: opts.dataSource || "",
267
- Value: "", Text: "", InitType: 0, RefreshType: 0,
268
- IsReadOnly: false, SortType: 0,
269
- AutoRefresh: false, AfterRefresh: "",
270
- UseAllItems: false, UseAllItemsText: "", DisplayType: 0,
271
267
  DataSourceInfo: {
272
268
  LabelField: opts.labelField || "",
273
269
  ValueField: opts.valueField || "",
274
270
  },
275
- InitValue: "",
276
271
  };
277
272
  this._applyPassThrough(element, opts);
278
273
  this._addElement(element);
@@ -284,12 +279,11 @@ class ElementContainer {
284
279
  Type: "CheckBox", Id: id, Name: name,
285
280
  Position: buildPosition({ width: 100, height: 25, ...opts }),
286
281
  Style: buildStyle(opts),
287
- LanguageCode: "", Text: text, TextPosition: "right",
288
- GroupName: "",
289
- CheckedValue: opts.checkedValue ?? "Y",
290
- UnCheckedValue: opts.uncheckedValue ?? "N",
291
- Checked: opts.checked ?? false,
292
- ViewType: 0,
282
+ ...getTypeDefaults("CheckBox"),
283
+ Text: text,
284
+ ...(opts.checkedValue !== undefined ? { CheckedValue: opts.checkedValue } : {}),
285
+ ...(opts.uncheckedValue !== undefined ? { UnCheckedValue: opts.uncheckedValue } : {}),
286
+ ...(opts.checked !== undefined ? { Checked: opts.checked } : {}),
293
287
  };
294
288
  this._applyPassThrough(element, opts);
295
289
  this._addElement(element);
@@ -301,8 +295,7 @@ class ElementContainer {
301
295
  Type: "Image", Id: id, Name: name,
302
296
  Position: buildPosition({ width: 100, height: 100, ...opts }),
303
297
  Style: buildStyle(opts),
304
- Cursor: "default",
305
- Image: { FolderCode: "", SaveName: "" },
298
+ ...getTypeDefaults("Image"),
306
299
  };
307
300
  this._applyPassThrough(element, opts);
308
301
  this._addElement(element);
@@ -314,9 +307,8 @@ class ElementContainer {
314
307
  Type: "Chart", Id: id, Name: name,
315
308
  Position: buildPosition({ width: 600, height: 400, ...opts }),
316
309
  Style: buildStyle(opts),
310
+ ...getTypeDefaults("Chart"),
317
311
  DataSource: opts.dataSource || "",
318
- AutoRefresh: false, DoRefresh: false, DoExport: false,
319
- PlotOptions: {},
320
312
  };
321
313
  this._applyPassThrough(element, opts);
322
314
  this._addElement(element);
@@ -328,8 +320,8 @@ class ElementContainer {
328
320
  Type: "OlapGrid", Id: id, Name: name,
329
321
  Position: buildPosition({ width: 800, height: 400, ...opts }),
330
322
  Style: buildStyle(opts),
323
+ ...getTypeDefaults("OlapGrid"),
331
324
  DataSource: opts.dataSource || "",
332
- AutoRefresh: false, DoRefresh: false, DoExport: false,
333
325
  };
334
326
  this._applyPassThrough(element, opts);
335
327
  this._addElement(element);
@@ -342,9 +334,8 @@ class ElementContainer {
342
334
  Type: "MaskTextBox", Id: id, Name: name,
343
335
  Position: buildPosition({ width: 200, height: 28, ...opts }),
344
336
  Style: buildStyle(opts),
345
- Format: opts.format ?? "", Formula: "",
346
- IsReadOnly: false, Text: "", Value: "",
347
- MxBinding: "",
337
+ ...getTypeDefaults("MaskTextBox"),
338
+ ...(opts.format !== undefined ? { Format: opts.format } : {}),
348
339
  };
349
340
  this._applyPassThrough(element, opts);
350
341
  this._addElement(element);
@@ -356,10 +347,7 @@ class ElementContainer {
356
347
  Type: "RichTextBox", Id: id, Name: name,
357
348
  Position: buildPosition({ width: 400, height: 200, ...opts }),
358
349
  Style: buildStyle(opts),
359
- Formula: "", IsReadOnly: false, MaxLength: 0,
360
- LineSpacing: 0, HasLineSpacing: false,
361
- MxBinding: "", MxBindingUseStyle: false,
362
- Value: "", Text: "",
350
+ ...getTypeDefaults("RichTextBox"),
363
351
  };
364
352
  this._applyPassThrough(element, opts);
365
353
  this._addElement(element);
@@ -371,9 +359,8 @@ class ElementContainer {
371
359
  Type: "MultiComboBox", Id: id, Name: name,
372
360
  Position: buildPosition({ width: 200, height: 28, ...opts }),
373
361
  Style: buildStyle(opts),
362
+ ...getTypeDefaults("MultiComboBox"),
374
363
  DataSource: opts.dataSource || "",
375
- InitType: 0, RefreshType: 0, AutoRefresh: false,
376
- EditValue: "", CaptionText: "",
377
364
  DataSourceInfo: {
378
365
  LabelField: opts.labelField || "",
379
366
  ValueField: opts.valueField || "",
@@ -389,7 +376,7 @@ class ElementContainer {
389
376
  Type: "PickList", Id: id, Name: name,
390
377
  Position: buildPosition({ width: 200, height: 28, ...opts }),
391
378
  Style: buildStyle(opts),
392
- IsReadOnly: false,
379
+ ...getTypeDefaults("PickList"),
393
380
  };
394
381
  this._applyPassThrough(element, opts);
395
382
  this._addElement(element);
@@ -401,10 +388,11 @@ class ElementContainer {
401
388
  Type: "RadioButton", Id: id, Name: name,
402
389
  Position: buildPosition({ width: 100, height: 25, ...opts }),
403
390
  Style: buildStyle(opts),
404
- LanguageCode: "", Text: text, TextPosition: "back",
405
- GroupName: opts.groupName || "",
406
- CheckedValue: opts.checkedValue ?? "Y",
407
- Checked: opts.checked ?? false,
391
+ ...getTypeDefaults("RadioButton"),
392
+ Text: text,
393
+ ...(opts.groupName !== undefined ? { GroupName: opts.groupName } : {}),
394
+ ...(opts.checkedValue !== undefined ? { CheckedValue: opts.checkedValue } : {}),
395
+ ...(opts.checked !== undefined ? { Checked: opts.checked } : {}),
408
396
  };
409
397
  this._applyPassThrough(element, opts);
410
398
  this._addElement(element);
@@ -416,6 +404,7 @@ class ElementContainer {
416
404
  Type: "Tree", Id: id, Name: name,
417
405
  Position: buildPosition({ width: 200, height: 300, ...opts }),
418
406
  Style: buildStyle(opts),
407
+ ...getTypeDefaults("Tree"),
419
408
  DataSource: opts.dataSource || "",
420
409
  };
421
410
  this._applyPassThrough(element, opts);
@@ -428,7 +417,7 @@ class ElementContainer {
428
417
  Type: "ColorSelector", Id: id, Name: name,
429
418
  Position: buildPosition({ width: 100, height: 28, ...opts }),
430
419
  Style: buildStyle(opts),
431
- ColorValue: "", ShowButton: true,
420
+ ...getTypeDefaults("ColorSelector"),
432
421
  };
433
422
  this._applyPassThrough(element, opts);
434
423
  this._addElement(element);
@@ -440,6 +429,7 @@ class ElementContainer {
440
429
  Type: "Slider", Id: id, Name: name,
441
430
  Position: buildPosition({ width: 200, height: 30, ...opts }),
442
431
  Style: buildStyle(opts),
432
+ ...getTypeDefaults("Slider"),
443
433
  DataSource: opts.dataSource || "",
444
434
  };
445
435
  this._applyPassThrough(element, opts);
@@ -453,10 +443,7 @@ class ElementContainer {
453
443
  Type: "CalendarYear", Id: id, Name: name,
454
444
  Position: buildPosition({ width: 100, height: 28, ...opts }),
455
445
  Style: buildStyle(opts),
456
- LanguageCode: "", Value: "", Text: "", InitType: 0,
457
- IsReadOnly: false, CalendarType: 0, UseButton: true,
458
- AutoRefresh: false, AfterRefresh: "", DataSource: "",
459
- MxBinding: "", MxBindingUseStyle: false,
446
+ ...getTypeDefaults("CalendarYear"),
460
447
  };
461
448
  this._applyPassThrough(element, opts);
462
449
  this._addElement(element);
@@ -468,10 +455,7 @@ class ElementContainer {
468
455
  Type: "CalendarYM", Id: id, Name: name,
469
456
  Position: buildPosition({ width: 120, height: 28, ...opts }),
470
457
  Style: buildStyle(opts),
471
- LanguageCode: "", Value: "", Text: "", InitType: 0,
472
- IsReadOnly: false, CalendarType: 0, UseButton: true,
473
- AutoRefresh: false, AfterRefresh: "", DataSource: "",
474
- MxBinding: "", MxBindingUseStyle: false,
458
+ ...getTypeDefaults("CalendarYM"),
475
459
  };
476
460
  this._applyPassThrough(element, opts);
477
461
  this._addElement(element);
@@ -484,7 +468,8 @@ class ElementContainer {
484
468
  Type: "FileUploadButton", Id: id, Name: name,
485
469
  Position: buildPosition({ width: 100, height: 30, ...opts }),
486
470
  Style: buildStyle(opts),
487
- Value: text, Cursor: "pointer",
471
+ ...getTypeDefaults("FileUploadButton"),
472
+ Value: text,
488
473
  };
489
474
  if (opts.allowExt)
490
475
  element.AllowExt = opts.allowExt;
@@ -501,10 +486,8 @@ class ElementContainer {
501
486
  Type: "TreeGrid", Id: id, Name: name,
502
487
  Position: buildPosition({ width: 800, height: 400, ...opts }),
503
488
  Style: buildStyle(opts),
489
+ ...getTypeDefaults("TreeGrid"),
504
490
  DataSource: opts.dataSource || "",
505
- CellMargin: "2", Columns: [],
506
- AutoRefresh: false, DoRefresh: false, DoExport: false,
507
- ToggleBtnSize: 10,
508
491
  };
509
492
  this._applyPassThrough(element, opts);
510
493
  this._addElement(element);
@@ -518,9 +501,9 @@ class ElementContainer {
518
501
  Type: "iGrid", Id: id, Name: name,
519
502
  Position: buildPosition({ width: 800, height: 400, ...opts }),
520
503
  Style: buildStyle(opts),
521
- AutoRefresh: false, DoRefresh: false, DoExport: false,
522
- ServerScript: opts.serverScript || "",
523
- TemplateCode: opts.templateCode || "",
504
+ ...getTypeDefaults("iGrid"),
505
+ ...(opts.serverScript !== undefined ? { ServerScript: opts.serverScript } : {}),
506
+ ...(opts.templateCode !== undefined ? { TemplateCode: opts.templateCode } : {}),
524
507
  };
525
508
  this._applyPassThrough(element, opts);
526
509
  this._addElement(element);
@@ -532,11 +515,8 @@ class ElementContainer {
532
515
  Type: "CompactDataGrid", Id: id, Name: name,
533
516
  Position: buildPosition({ width: 800, height: 300, ...opts }),
534
517
  Style: buildStyle(opts),
518
+ ...getTypeDefaults("CompactDataGrid"),
535
519
  DataSource: opts.dataSource || "",
536
- CellMargin: "2", Columns: [], UsePPTExport: false,
537
- AutoRefresh: false, DoRefresh: false, DoExport: false,
538
- ColumnHeaderHeight: 30, RowHeight: 26,
539
- ShowHeader: 1, SelectRule: 0,
540
520
  };
541
521
  this._applyPassThrough(element, opts);
542
522
  this._addElement(element);
@@ -550,6 +530,7 @@ class ElementContainer {
550
530
  Type: "TreeView", Id: id, Name: name,
551
531
  Position: buildPosition({ width: 250, height: 400, ...opts }),
552
532
  Style: buildStyle(opts),
533
+ ...getTypeDefaults("TreeView"),
553
534
  DataSource: opts.dataSource || "",
554
535
  };
555
536
  this._applyPassThrough(element, opts);
@@ -563,9 +544,8 @@ class ElementContainer {
563
544
  Type: "PieChart", Id: id, Name: name,
564
545
  Position: buildPosition({ width: 400, height: 400, ...opts }),
565
546
  Style: buildStyle(opts),
547
+ ...getTypeDefaults("PieChart"),
566
548
  DataSource: opts.dataSource || "",
567
- AutoRefresh: false, DoRefresh: false, DoExport: false,
568
- PlotOptions: {},
569
549
  };
570
550
  this._applyPassThrough(element, opts);
571
551
  this._addElement(element);
@@ -577,9 +557,8 @@ class ElementContainer {
577
557
  Type: "ScatterChart", Id: id, Name: name,
578
558
  Position: buildPosition({ width: 600, height: 400, ...opts }),
579
559
  Style: buildStyle(opts),
560
+ ...getTypeDefaults("ScatterChart"),
580
561
  DataSource: opts.dataSource || "",
581
- AutoRefresh: false, DoRefresh: false, DoExport: false,
582
- PlotOptions: {},
583
562
  };
584
563
  this._applyPassThrough(element, opts);
585
564
  this._addElement(element);
@@ -591,9 +570,8 @@ class ElementContainer {
591
570
  Type: "PolygonChart", Id: id, Name: name,
592
571
  Position: buildPosition({ width: 400, height: 400, ...opts }),
593
572
  Style: buildStyle(opts),
573
+ ...getTypeDefaults("PolygonChart"),
594
574
  DataSource: opts.dataSource || "",
595
- AutoRefresh: false, DoRefresh: false, DoExport: false,
596
- PlotOptions: {},
597
575
  };
598
576
  this._applyPassThrough(element, opts);
599
577
  this._addElement(element);
@@ -606,7 +584,7 @@ class ElementContainer {
606
584
  Type: "Tab", Id: id, Name: name,
607
585
  Position: buildPosition({ width: 800, height: 400, ...opts }),
608
586
  Style: buildStyle(opts),
609
- Property: { TabButtonPosition: 0 }, TabItems: [], DoExport: false,
587
+ ...getTypeDefaults("Tab"),
610
588
  };
611
589
  this._applyPassThrough(element, opts);
612
590
  this._addElement(element);
@@ -618,7 +596,7 @@ class ElementContainer {
618
596
  Type: "TableLayout", Id: id, Name: name,
619
597
  Position: buildPosition({ width: 800, height: 400, ...opts }),
620
598
  Style: buildStyle(opts),
621
- Cols: [], Rows: [], MergeCellList: [],
599
+ ...getTypeDefaults("TableLayout"),
622
600
  };
623
601
  this._applyPassThrough(element, opts);
624
602
  this._addElement(element);
@@ -631,6 +609,7 @@ class ElementContainer {
631
609
  Type: "AddIn", Id: id, Name: name,
632
610
  Position: buildPosition({ width: 400, height: 300, ...opts }),
633
611
  Style: buildStyle(opts),
612
+ ...getTypeDefaults("AddIn"),
634
613
  };
635
614
  this._applyPassThrough(element, opts);
636
615
  this._addElement(element);
@@ -642,9 +621,8 @@ class ElementContainer {
642
621
  Type: "UserComponent", Id: id, Name: name,
643
622
  Position: buildPosition({ width: 800, height: 400, ...opts }),
644
623
  Style: buildStyle(opts),
645
- DoRefresh: false, DoExport: false,
624
+ ...getTypeDefaults("UserComponent"),
646
625
  ReportInfo: { ReportCode: opts.reportCode || "", FolderCode: "" },
647
- ExternalReportInfo: {},
648
626
  };
649
627
  this._applyPassThrough(element, opts);
650
628
  this._addElement(element);
@@ -656,8 +634,8 @@ class ElementContainer {
656
634
  Type: "WebContainer", Id: id, Name: name,
657
635
  Position: buildPosition({ width: 800, height: 400, ...opts }),
658
636
  Style: buildStyle(opts),
659
- AutoRefresh: false, DoRefresh: false,
660
- TargetURL: opts.url || "",
637
+ ...getTypeDefaults("WebContainer"),
638
+ ...(opts.url !== undefined ? { TargetURL: opts.url } : {}),
661
639
  };
662
640
  this._applyPassThrough(element, opts);
663
641
  this._addElement(element);
@@ -669,6 +647,7 @@ class ElementContainer {
669
647
  Type: "DiagramControl", Id: id, Name: name,
670
648
  Position: buildPosition({ width: 800, height: 400, ...opts }),
671
649
  Style: buildStyle(opts),
650
+ ...getTypeDefaults("DiagramControl"),
672
651
  };
673
652
  this._applyPassThrough(element, opts);
674
653
  this._addElement(element);
@@ -680,6 +659,7 @@ class ElementContainer {
680
659
  Type: "Slicer", Id: id, Name: name,
681
660
  Position: buildPosition({ width: 200, height: 300, ...opts }),
682
661
  Style: buildStyle(opts),
662
+ ...getTypeDefaults("Slicer"),
683
663
  };
684
664
  this._applyPassThrough(element, opts);
685
665
  this._addElement(element);
@@ -691,7 +671,7 @@ class ElementContainer {
691
671
  Type: "Group", Id: id, Name: name,
692
672
  Position: buildPosition({ width: 800, height: 50, ...opts }),
693
673
  Style: buildStyle(opts),
694
- ChildElements: [],
674
+ ...getTypeDefaults("Group"),
695
675
  };
696
676
  this._applyPassThrough(element, opts);
697
677
  this._addElement(element);
@@ -703,11 +683,8 @@ class ElementContainer {
703
683
  Type: "DataGrid", Id: id, Name: name,
704
684
  Position: buildPosition({ width: 800, height: 400, ...opts }),
705
685
  Style: buildStyle(opts),
686
+ ...getTypeDefaults("DataGrid"),
706
687
  DataSource: opts.dataSource || "",
707
- CellMargin: "2", Columns: [], UsePPTExport: false,
708
- AutoRefresh: false, DoRefresh: false, DoExport: false,
709
- ColumnHeaderHeight: 30, RowHeight: 26,
710
- ShowHeader: 1, SelectRule: 0,
711
688
  };
712
689
  this._applyPassThrough(element, opts);
713
690
  this._addElement(element);
@@ -722,6 +699,7 @@ class ElementContainer {
722
699
  Type: type, Id: id, Name: name,
723
700
  Position: buildPosition(opts),
724
701
  Style: buildStyle(opts),
702
+ ...getTypeDefaults(type),
725
703
  };
726
704
  this._applyPassThrough(element, opts);
727
705
  this._addElement(element);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bimatrix-aud-platform/aud_mcp_server",
3
- "version": "1.1.38",
3
+ "version": "1.1.39",
4
4
  "description": "MCP Server for i-AUD MTSD document validation, generation, schema querying, control info extraction, and database operations",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -2942,7 +2942,7 @@ export interface IChartElement extends IBaseElement {
2942
2942
  /** 차트 옵션 (@see ChartOptions.ts Serialize: ChartType, 폰트, 테두리, 팔레트, 툴팁 등) */
2943
2943
  Chart?: IChartOptions;
2944
2944
  /** 축 설정 (@see Chart.ts Serialize: { XAxis, Y1Axis, Y2Axis }) */
2945
- Axis?: IChartAxis;
2945
+ Axis: IChartAxis;
2946
2946
  /** 플롯 옵션 (Serialize: Animation, EnableMouseTracking, DataLabels, ConnectNulls, AllowOverlap) */
2947
2947
  PlotOptions: IChartPlotOptions;
2948
2948
  /** 차트 제목 설정 (@see Title.ts Serialize: Text, LanguageCode, Style?) */
@@ -2950,7 +2950,7 @@ export interface IChartElement extends IBaseElement {
2950
2950
  /** 범례 설정 (@see Legend.ts Serialize: 기본값과 다른 속성만 저장) */
2951
2951
  Legend?: IChartLegend;
2952
2952
  /** 시리즈 배열 (@see Series.ts Serialize) */
2953
- SeriesSet?: IChartSeriesItem[];
2953
+ SeriesSet: IChartSeriesItem[];
2954
2954
  }
2955
2955
 
2956
2956
  // ============================================
@@ -379,7 +379,7 @@
379
379
  "DataGridElement": {
380
380
  "type": "object",
381
381
  "description": "데이터 그리드 컨트롤",
382
- "required": ["CellMargin", "Columns", "UsePPTExport", "AutoRefresh", "DoRefresh", "DoExport", "ColumnHeaderHeight", "RowHeight", "ShowHeader", "SelectRule"],
382
+ "required": ["CellMargin", "Columns", "AutoRefresh", "DoRefresh", "DoExport", "ColumnHeaderHeight", "RowHeight", "ShowHeader", "SelectRule", "FontFamily", "FontSize"],
383
383
  "properties": {
384
384
  "CellMargin": { "type": "string", "description": "셀 내부 여백" },
385
385
  "Columns": { "type": "array", "items": { "$ref": "#/$defs/GridColumn" } },
@@ -482,7 +482,7 @@
482
482
  "RichTextBoxElement": {
483
483
  "type": "object",
484
484
  "description": "리치 텍스트 박스 컨트롤",
485
- "required": ["Formula", "IsReadOnly", "MaxLength", "LineSpacing", "HasLineSpacing", "MxBinding", "MxBindingUseStyle", "Value", "Text"],
485
+ "required": ["Value", "Text"],
486
486
  "properties": {
487
487
  "Formula": { "type": "string", "description": "동적 수식" },
488
488
  "IsReadOnly": { "type": "boolean", "description": "읽기 전용" },
@@ -499,7 +499,7 @@
499
499
  "CheckBoxElement": {
500
500
  "type": "object",
501
501
  "description": "체크박스 컨트롤",
502
- "required": ["LanguageCode", "Text", "TextPosition", "GroupName", "CheckedValue", "UnCheckedValue", "Checked", "ViewType"],
502
+ "required": ["Text"],
503
503
  "properties": {
504
504
  "LanguageCode": { "type": "string", "description": "다국어 키 코드" },
505
505
  "Text": { "type": "string", "description": "체크박스 옆 텍스트" },
@@ -515,7 +515,7 @@
515
515
  "ComboBoxElement": {
516
516
  "type": "object",
517
517
  "description": "콤보박스 컨트롤",
518
- "required": ["DataSource", "Value", "Text", "InitType", "RefreshType", "IsReadOnly", "SortType", "AutoRefresh", "DoRefresh", "AfterRefresh", "UseAllItems", "UseAllItemsText", "DisplayType", "DataSourceInfo", "InitValue"],
518
+ "required": ["AutoRefresh", "DoRefresh"],
519
519
  "properties": {
520
520
  "DataSource": { "type": "string", "description": "데이터소스 이름" },
521
521
  "Value": { "type": "string", "description": "선택된 값" },
@@ -559,7 +559,6 @@
559
559
  "NumberBoxElement": {
560
560
  "type": "object",
561
561
  "description": "숫자 입력 박스 컨트롤",
562
- "required": ["Format", "Formula", "Value", "Text", "IsReadOnly", "Maximum", "Minimum", "MxBinding", "MxBindingUseStyle"],
563
562
  "properties": {
564
563
  "Format": { "type": "string", "description": "숫자 포맷" },
565
564
  "Formula": { "type": "string", "description": "동적 수식" },
@@ -588,7 +587,7 @@
588
587
  "OlapGridElement": {
589
588
  "type": "object",
590
589
  "description": "OLAP 피벗 그리드 컨트롤",
591
- "required": ["AutoRefresh", "DoRefresh", "DoExport"],
590
+ "required": ["DataSource", "AutoRefresh", "DoRefresh", "DoExport", "iOLAPView", "ExtraOption"],
592
591
  "properties": {
593
592
  "DataSource": { "type": "string", "description": "바인딩할 데이터소스 이름" },
594
593
  "ServerScript": { "type": "string", "description": "서버 스크립트 이름" },
@@ -602,7 +601,7 @@
602
601
  "RadioButtonElement": {
603
602
  "type": "object",
604
603
  "description": "라디오 버튼 컨트롤",
605
- "required": ["LanguageCode", "Text", "TextPosition", "GroupName", "CheckedValue", "Checked"],
604
+ "required": ["Text", "GroupName", "CheckedValue", "Checked"],
606
605
  "properties": {
607
606
  "LanguageCode": { "type": "string", "description": "다국어 키 코드" },
608
607
  "Text": { "type": "string", "description": "라디오 버튼 옆 텍스트" },
@@ -783,7 +782,7 @@
783
782
  "ChartElement": {
784
783
  "type": "object",
785
784
  "description": "차트 컨트롤 (Chart, PieChart, ScatterChart, PolygonChart 공통)",
786
- "required": ["AutoRefresh", "DoRefresh", "DoExport", "PlotOptions"],
785
+ "required": ["AutoRefresh", "DoRefresh", "DoExport", "PlotOptions", "Axis", "SeriesSet"],
787
786
  "properties": {
788
787
  "DataSource": { "type": "string", "description": "데이터소스 코드" },
789
788
  "AutoRefresh": { "type": "boolean", "description": "자동 새로고침 (기본값: false)" },