@bimatrix-aud-platform/aud_mcp_server 1.1.38 → 1.1.40

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.
@@ -4,10 +4,23 @@ export declare function defaultColor(): {
4
4
  B: number;
5
5
  A: number;
6
6
  };
7
- export declare function defaultBackground(): {};
7
+ export declare function defaultBackground(): {
8
+ Color: {
9
+ R: number;
10
+ G: number;
11
+ B: number;
12
+ A: number;
13
+ };
14
+ };
8
15
  export declare function defaultBorder(): {
16
+ Color: {
17
+ R: number;
18
+ G: number;
19
+ B: number;
20
+ A: number;
21
+ };
9
22
  CornerRadius: string;
10
- LineType: "none";
23
+ LineType: "solid";
11
24
  Thickness: string;
12
25
  };
13
26
  export declare function defaultFont(): {
@@ -56,12 +69,40 @@ export declare function defaultPosition(): {
56
69
  export declare function defaultStyle(): {
57
70
  Type: number;
58
71
  BoxStyle: string;
59
- Background: {};
72
+ Background: {
73
+ Color: {
74
+ R: number;
75
+ G: number;
76
+ B: number;
77
+ A: number;
78
+ };
79
+ };
60
80
  Border: {
81
+ Color: {
82
+ R: number;
83
+ G: number;
84
+ B: number;
85
+ A: number;
86
+ };
61
87
  CornerRadius: string;
62
- LineType: "none";
88
+ LineType: "solid";
63
89
  Thickness: string;
64
90
  };
91
+ Font: {
92
+ Color: {
93
+ R: number;
94
+ G: number;
95
+ B: number;
96
+ A: number;
97
+ };
98
+ Size: number;
99
+ Family: string;
100
+ Bold: boolean;
101
+ Italic: boolean;
102
+ UnderLine: boolean;
103
+ HorizontalAlignment: "left";
104
+ VerticalAlignment: "middle";
105
+ };
65
106
  };
66
107
  export declare function defaultValidator(): {
67
108
  ValidateType: number;
@@ -88,26 +129,47 @@ export declare function buttonDefaults(): {
88
129
  Cursor: string;
89
130
  HasNewRadius: boolean;
90
131
  };
91
- export declare function dataGridDefaults(): {
92
- CellMargin: string;
93
- Columns: any[];
94
- UsePPTExport: boolean;
132
+ export declare function textBoxDefaults(): {
133
+ LanguageCode: string;
134
+ Value: string;
135
+ Text: string;
136
+ IsReadOnly: boolean;
137
+ MaxLength: number;
138
+ Formula: string;
139
+ MxBinding: string;
140
+ MxBindingUseStyle: boolean;
95
141
  };
96
- export declare function groupDefaults(): {
97
- ChildElements: any[];
142
+ export declare function numberBoxDefaults(): {
143
+ Format: string;
144
+ Formula: string;
145
+ Value: number;
146
+ Text: string;
147
+ IsReadOnly: boolean;
148
+ Maximum: number;
149
+ Minimum: number;
150
+ MxBinding: string;
151
+ MxBindingUseStyle: boolean;
98
152
  };
99
- export declare function checkBoxDefaults(): {
100
- LanguageCode: string;
153
+ export declare function maskTextBoxDefaults(): {
154
+ Format: string;
155
+ Formula: string;
156
+ IsReadOnly: boolean;
157
+ Text: string;
158
+ Value: string;
159
+ MxBinding: string;
160
+ };
161
+ export declare function richTextBoxDefaults(): {
162
+ Formula: string;
163
+ IsReadOnly: boolean;
164
+ MaxLength: number;
165
+ LineSpacing: number;
166
+ HasLineSpacing: boolean;
167
+ MxBinding: string;
168
+ MxBindingUseStyle: boolean;
169
+ Value: string;
101
170
  Text: string;
102
- TextPosition: string;
103
- GroupName: string;
104
- CheckedValue: string;
105
- UnCheckedValue: string;
106
- Checked: boolean;
107
- ViewType: number;
108
171
  };
109
172
  export declare function comboBoxDefaults(): {
110
- DataSource: string;
111
173
  Value: string;
112
174
  Text: string;
113
175
  InitType: number;
@@ -115,25 +177,52 @@ export declare function comboBoxDefaults(): {
115
177
  IsReadOnly: boolean;
116
178
  SortType: number;
117
179
  AutoRefresh: boolean;
180
+ DoRefresh: boolean;
118
181
  AfterRefresh: string;
119
182
  UseAllItems: boolean;
120
183
  UseAllItemsText: string;
121
184
  DisplayType: number;
122
- DataSourceInfo: {
123
- LabelField: string;
124
- ValueField: string;
125
- };
126
185
  InitValue: string;
127
186
  };
128
- export declare function textBoxDefaults(): Record<string, any>;
129
- export declare function numberBoxDefaults(): {
130
- Format: string;
131
- Formula: string;
132
- Value: number;
187
+ export declare function multiComboBoxDefaults(): {
188
+ InitType: number;
189
+ RefreshType: number;
190
+ AutoRefresh: boolean;
191
+ EditValue: string;
192
+ CaptionText: string;
193
+ };
194
+ export declare function checkBoxDefaults(): {
195
+ LanguageCode: string;
196
+ Text: string;
197
+ TextPosition: string;
198
+ GroupName: string;
199
+ CheckedValue: string;
200
+ UnCheckedValue: string;
201
+ Checked: boolean;
202
+ ViewType: number;
203
+ };
204
+ export declare function radioButtonDefaults(): {
205
+ LanguageCode: string;
206
+ Text: string;
207
+ TextPosition: string;
208
+ GroupName: string;
209
+ CheckedValue: string;
210
+ Checked: boolean;
211
+ };
212
+ export declare function pickListDefaults(): {
213
+ IsReadOnly: boolean;
214
+ };
215
+ export declare function calendarDefaults(): {
216
+ LanguageCode: string;
217
+ Value: string;
133
218
  Text: string;
219
+ InitType: number;
134
220
  IsReadOnly: boolean;
135
- Maximum: number;
136
- Minimum: number;
221
+ CalendarType: number;
222
+ UseButton: boolean;
223
+ AutoRefresh: boolean;
224
+ AfterRefresh: string;
225
+ DataSource: string;
137
226
  MxBinding: string;
138
227
  MxBindingUseStyle: boolean;
139
228
  };
@@ -144,20 +233,119 @@ export declare function imageDefaults(): {
144
233
  SaveName: string;
145
234
  };
146
235
  };
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;
236
+ export declare function colorSelectorDefaults(): {
237
+ ColorValue: string;
238
+ ShowButton: boolean;
239
+ };
240
+ export declare function fileUploadButtonDefaults(): {
155
241
  Value: string;
156
- Text: string;
242
+ Cursor: string;
243
+ };
244
+ export declare function dataGridDefaults(): {
245
+ CellMargin: string;
246
+ Columns: any[];
247
+ AutoRefresh: boolean;
248
+ DoRefresh: boolean;
249
+ DoExport: boolean;
250
+ ColumnHeaderHeight: number;
251
+ RowHeight: number;
252
+ ShowHeader: number;
253
+ SelectRule: number;
254
+ FontFamily: string;
255
+ FontSize: number;
256
+ };
257
+ export declare function compactDataGridDefaults(): {
258
+ CellMargin: string;
259
+ Columns: any[];
260
+ AutoRefresh: boolean;
261
+ DoRefresh: boolean;
262
+ DoExport: boolean;
263
+ ColumnHeaderHeight: number;
264
+ RowHeight: number;
265
+ ShowHeader: number;
266
+ SelectRule: number;
267
+ FontFamily: string;
268
+ FontSize: number;
269
+ };
270
+ export declare function treeGridDefaults(): {
271
+ CellMargin: string;
272
+ Columns: any[];
273
+ AutoRefresh: boolean;
274
+ DoRefresh: boolean;
275
+ DoExport: boolean;
276
+ ColumnHeaderHeight: number;
277
+ RowHeight: number;
278
+ SelectRule: number;
279
+ FontFamily: string;
280
+ FontSize: number;
281
+ ToggleBtnSize: number;
282
+ };
283
+ export declare function iGridDefaults(): {
284
+ AutoRefresh: boolean;
285
+ DoRefresh: boolean;
286
+ DoExport: boolean;
287
+ ServerScript: string;
288
+ TemplateCode: string;
289
+ };
290
+ export declare function olapGridDefaults(): {
291
+ AutoRefresh: boolean;
292
+ DoRefresh: boolean;
293
+ DoExport: boolean;
294
+ iOLAPView: Record<string, any>;
295
+ ExtraOption: Record<string, any>;
296
+ };
297
+ export declare function chartDefaults(): {
298
+ AutoRefresh: boolean;
299
+ DoRefresh: boolean;
300
+ DoExport: boolean;
301
+ PlotOptions: {
302
+ Animation: number;
303
+ EnableMouseTracking: boolean;
304
+ DataLabels: {};
305
+ ConnectNulls: boolean;
306
+ AllowOverlap: boolean;
307
+ };
308
+ Axis: {
309
+ XAxis: {
310
+ Text: string;
311
+ Visible: boolean;
312
+ };
313
+ Y1Axis: {
314
+ Text: string;
315
+ Visible: boolean;
316
+ };
317
+ Y2Axis: {
318
+ Text: string;
319
+ Visible: boolean;
320
+ };
321
+ };
322
+ SeriesSet: any[];
323
+ };
324
+ export declare function emptyDefaults(): Record<string, any>;
325
+ export declare function groupDefaults(): {
326
+ ChildElements: any[];
327
+ };
328
+ export declare function tabDefaults(): {
329
+ Property: {
330
+ TabButtonPosition: number;
331
+ };
332
+ TabItems: any[];
333
+ DoExport: boolean;
334
+ };
335
+ export declare function tableLayoutDefaults(): {
336
+ Cols: any[];
337
+ Rows: any[];
338
+ MergeCellList: any[];
157
339
  };
158
340
  export declare function userComponentDefaults(): {
159
341
  DoRefresh: boolean;
160
342
  DoExport: boolean;
161
343
  ReportInfo: {};
344
+ ExternalReportInfo: {};
345
+ };
346
+ export declare function webContainerDefaults(): {
347
+ AutoRefresh: boolean;
348
+ DoRefresh: boolean;
349
+ TargetURL: string;
162
350
  };
163
351
  export declare const ELEMENT_DEFAULTS_MAP: Record<string, () => Record<string, any>>;
@@ -1,22 +1,25 @@
1
1
  // ---- Base structural defaults ----
2
2
  export function defaultColor() {
3
- return { R: 0, G: 0, B: 0, A: 255 };
3
+ return { R: 48, G: 48, B: 49, A: 1 };
4
4
  }
5
5
  export function defaultBackground() {
6
- return {};
6
+ return {
7
+ Color: { R: 255, G: 255, B: 255, A: 1 },
8
+ };
7
9
  }
8
10
  export function defaultBorder() {
9
11
  return {
12
+ Color: { R: 204, G: 204, B: 204, A: 1 },
10
13
  CornerRadius: "0,0,0,0",
11
- LineType: "none",
12
- Thickness: "0,0,0,0",
14
+ LineType: "solid",
15
+ Thickness: "1,1,1,1",
13
16
  };
14
17
  }
15
18
  export function defaultFont() {
16
19
  return {
17
- Color: { R: 0, G: 0, B: 0, A: 255 },
20
+ Color: { R: 48, G: 48, B: 49, A: 1 },
18
21
  Size: 12,
19
- Family: "Malgun Gothic",
22
+ Family: "inherit",
20
23
  Bold: false,
21
24
  Italic: false,
22
25
  UnderLine: false,
@@ -53,6 +56,7 @@ export function defaultStyle() {
53
56
  BoxStyle: "",
54
57
  Background: defaultBackground(),
55
58
  Border: defaultBorder(),
59
+ Font: defaultFont(),
56
60
  };
57
61
  }
58
62
  export function defaultValidator() {
@@ -65,6 +69,8 @@ export function defaultValidator() {
65
69
  };
66
70
  }
67
71
  // ---- Element 타입별 기본값 ----
72
+ // 실제 i-AUD Designer(all_controls_report.mtsd)의 기본값을 기준으로 설정
73
+ // -- 기본 컨트롤 --
68
74
  export function labelDefaults() {
69
75
  return {
70
76
  LanguageCode: "",
@@ -73,8 +79,8 @@ export function labelDefaults() {
73
79
  Formula: "",
74
80
  UseTextOverflow: false,
75
81
  UseAutoLineBreak: false,
76
- LineSpacing: 0,
77
- HasLineSpacing: false,
82
+ LineSpacing: 1.2,
83
+ HasLineSpacing: true,
78
84
  MxBinding: "",
79
85
  MxBindingUseStyle: false,
80
86
  };
@@ -84,104 +90,313 @@ export function buttonDefaults() {
84
90
  LanguageCode: "",
85
91
  Value: "",
86
92
  Cursor: "pointer",
87
- HasNewRadius: false,
93
+ HasNewRadius: true,
88
94
  };
89
95
  }
90
- export function dataGridDefaults() {
96
+ // -- 입력 컨트롤 --
97
+ export function textBoxDefaults() {
91
98
  return {
92
- CellMargin: "2",
93
- Columns: [],
94
- UsePPTExport: false,
99
+ LanguageCode: "",
100
+ Value: "",
101
+ Text: "",
102
+ IsReadOnly: false,
103
+ MaxLength: 0,
104
+ Formula: "",
105
+ MxBinding: "",
106
+ MxBindingUseStyle: false,
95
107
  };
96
108
  }
97
- export function groupDefaults() {
109
+ export function numberBoxDefaults() {
98
110
  return {
99
- ChildElements: [],
111
+ Format: "#,##0",
112
+ Formula: "",
113
+ Value: 0,
114
+ Text: "",
115
+ IsReadOnly: false,
116
+ Maximum: 999999999,
117
+ Minimum: -999999999,
118
+ MxBinding: "",
119
+ MxBindingUseStyle: false,
100
120
  };
101
121
  }
102
- export function checkBoxDefaults() {
122
+ export function maskTextBoxDefaults() {
103
123
  return {
104
- LanguageCode: "",
124
+ Format: "",
125
+ Formula: "",
126
+ IsReadOnly: false,
105
127
  Text: "",
106
- TextPosition: "right",
107
- GroupName: "",
108
- CheckedValue: "Y",
109
- UnCheckedValue: "N",
110
- Checked: false,
111
- ViewType: 0,
128
+ Value: "",
129
+ MxBinding: "",
112
130
  };
113
131
  }
132
+ export function richTextBoxDefaults() {
133
+ return {
134
+ Formula: "",
135
+ IsReadOnly: false,
136
+ MaxLength: 0,
137
+ LineSpacing: 1.2,
138
+ HasLineSpacing: true,
139
+ MxBinding: "",
140
+ MxBindingUseStyle: false,
141
+ Value: "",
142
+ Text: "",
143
+ };
144
+ }
145
+ // -- 선택 컨트롤 --
114
146
  export function comboBoxDefaults() {
115
147
  return {
116
- DataSource: "",
117
148
  Value: "",
118
149
  Text: "",
119
150
  InitType: 0,
120
- RefreshType: 0,
151
+ RefreshType: 1,
121
152
  IsReadOnly: false,
122
153
  SortType: 0,
123
154
  AutoRefresh: false,
155
+ DoRefresh: false,
124
156
  AfterRefresh: "",
125
157
  UseAllItems: false,
126
158
  UseAllItemsText: "",
127
159
  DisplayType: 0,
128
- DataSourceInfo: { LabelField: "", ValueField: "" },
129
160
  InitValue: "",
130
161
  };
131
162
  }
132
- export function textBoxDefaults() {
133
- return {};
163
+ export function multiComboBoxDefaults() {
164
+ return {
165
+ InitType: 0,
166
+ RefreshType: 1,
167
+ AutoRefresh: false,
168
+ EditValue: "",
169
+ CaptionText: "",
170
+ };
134
171
  }
135
- export function numberBoxDefaults() {
172
+ export function checkBoxDefaults() {
136
173
  return {
137
- Format: "#,##0",
138
- Formula: "",
139
- Value: 0,
174
+ LanguageCode: "",
140
175
  Text: "",
176
+ TextPosition: "back",
177
+ GroupName: "",
178
+ CheckedValue: "Y",
179
+ UnCheckedValue: "N",
180
+ Checked: false,
181
+ ViewType: 0,
182
+ };
183
+ }
184
+ export function radioButtonDefaults() {
185
+ return {
186
+ LanguageCode: "",
187
+ Text: "",
188
+ TextPosition: "back",
189
+ GroupName: "",
190
+ CheckedValue: "",
191
+ Checked: false,
192
+ };
193
+ }
194
+ export function pickListDefaults() {
195
+ return {
141
196
  IsReadOnly: false,
142
- Maximum: 999999999,
143
- Minimum: -999999999,
197
+ };
198
+ }
199
+ // -- 날짜 컨트롤 --
200
+ export function calendarDefaults() {
201
+ return {
202
+ LanguageCode: "",
203
+ Value: "",
204
+ Text: "",
205
+ InitType: 0,
206
+ IsReadOnly: false,
207
+ CalendarType: 0,
208
+ UseButton: true,
209
+ AutoRefresh: false,
210
+ AfterRefresh: "",
211
+ DataSource: "",
144
212
  MxBinding: "",
145
213
  MxBindingUseStyle: false,
146
214
  };
147
215
  }
216
+ // -- 이미지/색상/파일 --
148
217
  export function imageDefaults() {
149
218
  return {
150
219
  Cursor: "default",
151
220
  Image: { FolderCode: "", SaveName: "" },
152
221
  };
153
222
  }
154
- export function richTextBoxDefaults() {
223
+ export function colorSelectorDefaults() {
224
+ return {
225
+ ColorValue: "",
226
+ ShowButton: true,
227
+ };
228
+ }
229
+ export function fileUploadButtonDefaults() {
155
230
  return {
156
- Formula: "",
157
- IsReadOnly: false,
158
- MaxLength: 0,
159
- LineSpacing: 0,
160
- HasLineSpacing: false,
161
- MxBinding: "",
162
- MxBindingUseStyle: false,
163
231
  Value: "",
164
- Text: "",
232
+ Cursor: "pointer",
233
+ };
234
+ }
235
+ // -- 그리드 컨트롤 --
236
+ export function dataGridDefaults() {
237
+ return {
238
+ CellMargin: "5,5,5,5",
239
+ Columns: [],
240
+ AutoRefresh: false,
241
+ DoRefresh: true,
242
+ DoExport: true,
243
+ ColumnHeaderHeight: 28,
244
+ RowHeight: 24,
245
+ ShowHeader: 3,
246
+ SelectRule: 2,
247
+ FontFamily: "inherit",
248
+ FontSize: 12,
249
+ };
250
+ }
251
+ export function compactDataGridDefaults() {
252
+ return dataGridDefaults();
253
+ }
254
+ export function treeGridDefaults() {
255
+ return {
256
+ CellMargin: "5,5,5,5",
257
+ Columns: [],
258
+ AutoRefresh: false,
259
+ DoRefresh: true,
260
+ DoExport: true,
261
+ ColumnHeaderHeight: 28,
262
+ RowHeight: 24,
263
+ SelectRule: 2,
264
+ FontFamily: "inherit",
265
+ FontSize: 12,
266
+ ToggleBtnSize: 10,
267
+ };
268
+ }
269
+ export function iGridDefaults() {
270
+ return {
271
+ AutoRefresh: false,
272
+ DoRefresh: true,
273
+ DoExport: true,
274
+ ServerScript: "",
275
+ TemplateCode: "",
276
+ };
277
+ }
278
+ export function olapGridDefaults() {
279
+ return {
280
+ AutoRefresh: false,
281
+ DoRefresh: true,
282
+ DoExport: true,
283
+ iOLAPView: {},
284
+ ExtraOption: {},
285
+ };
286
+ }
287
+ // -- 차트 컨트롤 --
288
+ function defaultChartAxis() {
289
+ return {
290
+ XAxis: { Text: "", Visible: true },
291
+ Y1Axis: { Text: "", Visible: true },
292
+ Y2Axis: { Text: "", Visible: false },
293
+ };
294
+ }
295
+ function defaultPlotOptions() {
296
+ return {
297
+ Animation: 1000,
298
+ EnableMouseTracking: true,
299
+ DataLabels: {},
300
+ ConnectNulls: false,
301
+ AllowOverlap: false,
302
+ };
303
+ }
304
+ export function chartDefaults() {
305
+ return {
306
+ AutoRefresh: false,
307
+ DoRefresh: true,
308
+ DoExport: true,
309
+ PlotOptions: defaultPlotOptions(),
310
+ Axis: defaultChartAxis(),
311
+ SeriesSet: [],
312
+ };
313
+ }
314
+ // -- 트리 컨트롤 --
315
+ export function emptyDefaults() {
316
+ return {};
317
+ }
318
+ // -- 컨테이너/레이아웃 --
319
+ export function groupDefaults() {
320
+ return {
321
+ ChildElements: [],
322
+ };
323
+ }
324
+ export function tabDefaults() {
325
+ return {
326
+ Property: { TabButtonPosition: 0 },
327
+ TabItems: [],
328
+ DoExport: true,
329
+ };
330
+ }
331
+ export function tableLayoutDefaults() {
332
+ return {
333
+ Cols: [],
334
+ Rows: [],
335
+ MergeCellList: [],
165
336
  };
166
337
  }
167
338
  export function userComponentDefaults() {
168
339
  return {
169
- DoRefresh: false,
170
- DoExport: false,
340
+ DoRefresh: true,
341
+ DoExport: true,
171
342
  ReportInfo: {},
343
+ ExternalReportInfo: {},
344
+ };
345
+ }
346
+ export function webContainerDefaults() {
347
+ return {
348
+ AutoRefresh: true,
349
+ DoRefresh: true,
350
+ TargetURL: "",
172
351
  };
173
352
  }
174
353
  // Type → defaults 팩토리 매핑
175
354
  export const ELEMENT_DEFAULTS_MAP = {
355
+ // 기본 컨트롤
176
356
  Label: labelDefaults,
177
357
  Button: buttonDefaults,
178
- DataGrid: dataGridDefaults,
179
- Group: groupDefaults,
180
- CheckBox: checkBoxDefaults,
181
- ComboBox: comboBoxDefaults,
358
+ // 입력 컨트롤
182
359
  TextBox: textBoxDefaults,
183
360
  NumberBox: numberBoxDefaults,
184
- Image: imageDefaults,
361
+ MaskTextBox: maskTextBoxDefaults,
185
362
  RichTextBox: richTextBoxDefaults,
363
+ // 선택 컨트롤
364
+ ComboBox: comboBoxDefaults,
365
+ MultiComboBox: multiComboBoxDefaults,
366
+ CheckBox: checkBoxDefaults,
367
+ RadioButton: radioButtonDefaults,
368
+ PickList: pickListDefaults,
369
+ // 날짜 컨트롤
370
+ Calendar: calendarDefaults,
371
+ CalendarYear: calendarDefaults,
372
+ CalendarYM: calendarDefaults,
373
+ // 이미지/색상/파일
374
+ Image: imageDefaults,
375
+ ColorSelector: colorSelectorDefaults,
376
+ FileUploadButton: fileUploadButtonDefaults,
377
+ // 그리드 컨트롤
378
+ DataGrid: dataGridDefaults,
379
+ CompactDataGrid: compactDataGridDefaults,
380
+ TreeGrid: treeGridDefaults,
381
+ iGrid: iGridDefaults,
382
+ OlapGrid: olapGridDefaults,
383
+ // 차트 컨트롤
384
+ Chart: chartDefaults,
385
+ PieChart: chartDefaults,
386
+ ScatterChart: chartDefaults,
387
+ PolygonChart: chartDefaults,
388
+ // 트리 컨트롤
389
+ Tree: emptyDefaults,
390
+ TreeView: emptyDefaults,
391
+ // 컨테이너/레이아웃
392
+ Group: groupDefaults,
393
+ Tab: tabDefaults,
394
+ TableLayout: tableLayoutDefaults,
186
395
  UserComponent: userComponentDefaults,
396
+ WebContainer: webContainerDefaults,
397
+ // 기타
398
+ Slider: emptyDefaults,
399
+ DiagramControl: emptyDefaults,
400
+ Slicer: emptyDefaults,
401
+ AddIn: emptyDefaults,
187
402
  };
@@ -8,45 +8,42 @@ 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
  // ============================================================
14
15
  function emptyBg() {
15
16
  return {
16
- Color: { R: 0, G: 0, B: 0, A: 0 },
17
- ColorR: 0, ColorG: 0, ColorB: 0, ColorA: 0,
17
+ Color: { R: 255, G: 255, B: 255, A: 1 },
18
18
  };
19
19
  }
20
20
  function fullBg(hex) {
21
21
  const c = parseHexColor(hex);
22
22
  return {
23
- Color: { R: c.R, G: c.G, B: c.B, A: 1 },
24
- ColorR: c.R, ColorG: c.G, ColorB: c.B, ColorA: 1,
23
+ Color: { R: c.R, G: c.G, B: c.B, A: c.A > 0 ? 1 : 0 },
25
24
  };
26
25
  }
27
26
  function emptyBorder() {
28
27
  return {
29
- Color: { R: 0, G: 0, B: 0, A: 0 },
30
- ColorR: 0, ColorG: 0, ColorB: 0, ColorA: 0,
28
+ Color: { R: 204, G: 204, B: 204, A: 1 },
31
29
  CornerRadius: "0,0,0,0",
32
- LineType: "none",
33
- Thickness: "0,0,0,0",
30
+ LineType: "solid",
31
+ Thickness: "1,1,1,1",
34
32
  };
35
33
  }
36
34
  function fullBorder(opts = {}) {
37
- const c = opts.color ? parseHexColor(opts.color) : { R: 224, G: 224, B: 224, A: 255 };
35
+ const c = opts.color ? parseHexColor(opts.color) : { R: 204, G: 204, B: 204, A: 1 };
38
36
  return {
39
- Color: { R: c.R, G: c.G, B: c.B, A: 1 },
40
- ColorR: c.R, ColorG: c.G, ColorB: c.B, ColorA: 1,
37
+ Color: { R: c.R, G: c.G, B: c.B, A: c.A > 1 ? 1 : c.A },
41
38
  CornerRadius: opts.radius || "0,0,0,0",
42
39
  LineType: opts.lineType || "solid",
43
40
  Thickness: opts.thickness || "1,1,1,1",
44
41
  };
45
42
  }
46
43
  function fullFont(opts = {}) {
47
- const c = opts.color ? parseHexColor(opts.color) : { R: 0, G: 0, B: 0, A: 255 };
44
+ const c = opts.color ? parseHexColor(opts.color) : { R: 48, G: 48, B: 49, A: 1 };
48
45
  return {
49
- Color: { R: c.R, G: c.G, B: c.B, A: 1 },
46
+ Color: { R: c.R, G: c.G, B: c.B, A: c.A > 1 ? 1 : c.A },
50
47
  Size: opts.size ?? 12,
51
48
  Family: opts.family ?? "inherit",
52
49
  Bold: opts.bold ?? false,
@@ -143,6 +140,11 @@ const COMMON_OPTS = new Set([
143
140
  "bg", "border", "font", "color", "visible", "style",
144
141
  "dataSource",
145
142
  ]);
143
+ /** defaults.ts의 ELEMENT_DEFAULTS_MAP에서 타입별 기본값을 가져온다 */
144
+ function getTypeDefaults(type) {
145
+ const factory = ELEMENT_DEFAULTS_MAP[type];
146
+ return factory ? factory() : {};
147
+ }
146
148
  // ============================================================
147
149
  // DataGridBuilder
148
150
  // ============================================================
@@ -190,10 +192,8 @@ class ElementContainer {
190
192
  Type: "Label", Id: id, Name: name,
191
193
  Position: buildPosition({ width: 200, height: 30, ...opts }),
192
194
  Style: buildStyle(opts),
193
- LanguageCode: "", Text: text, Cursor: "default", Formula: "",
194
- UseTextOverflow: false, UseAutoLineBreak: false,
195
- LineSpacing: 0, HasLineSpacing: false,
196
- MxBinding: "", MxBindingUseStyle: false,
195
+ ...getTypeDefaults("Label"),
196
+ Text: text,
197
197
  };
198
198
  this._applyPassThrough(element, opts);
199
199
  this._addElement(element);
@@ -205,7 +205,8 @@ class ElementContainer {
205
205
  Type: "Button", Id: id, Name: name,
206
206
  Position: buildPosition({ width: 80, height: 30, ...opts }),
207
207
  Style: buildStyle(opts),
208
- LanguageCode: "", Value: text, Cursor: "pointer", HasNewRadius: false,
208
+ ...getTypeDefaults("Button"),
209
+ Value: text,
209
210
  };
210
211
  this._applyPassThrough(element, opts);
211
212
  this._addElement(element);
@@ -217,10 +218,7 @@ class ElementContainer {
217
218
  Type: "Calendar", Id: id, Name: name,
218
219
  Position: buildPosition({ width: 130, height: 28, ...opts }),
219
220
  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,
221
+ ...getTypeDefaults("Calendar"),
224
222
  };
225
223
  this._applyPassThrough(element, opts);
226
224
  this._addElement(element);
@@ -232,9 +230,7 @@ class ElementContainer {
232
230
  Type: "TextBox", Id: id, Name: name,
233
231
  Position: buildPosition({ width: 200, height: 28, ...opts }),
234
232
  Style: buildStyle(opts),
235
- LanguageCode: "", Value: "", Text: "",
236
- IsReadOnly: false, Formula: "", MaxLength: 0,
237
- MxBinding: "", MxBindingUseStyle: false,
233
+ ...getTypeDefaults("TextBox"),
238
234
  };
239
235
  this._applyPassThrough(element, opts);
240
236
  this._addElement(element);
@@ -246,12 +242,11 @@ class ElementContainer {
246
242
  Type: "NumberBox", Id: id, Name: name,
247
243
  Position: buildPosition({ width: 150, height: 28, ...opts }),
248
244
  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,
245
+ ...getTypeDefaults("NumberBox"),
246
+ ...(opts.format !== undefined ? { Format: opts.format } : {}),
247
+ ...(opts.value !== undefined ? { Value: opts.value } : {}),
248
+ ...(opts.max !== undefined ? { Maximum: opts.max } : {}),
249
+ ...(opts.min !== undefined ? { Minimum: opts.min } : {}),
255
250
  };
256
251
  this._applyPassThrough(element, opts);
257
252
  this._addElement(element);
@@ -263,16 +258,12 @@ class ElementContainer {
263
258
  Type: "ComboBox", Id: id, Name: name,
264
259
  Position: buildPosition({ width: 150, height: 28, ...opts }),
265
260
  Style: buildStyle(opts),
261
+ ...getTypeDefaults("ComboBox"),
266
262
  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
263
  DataSourceInfo: {
272
264
  LabelField: opts.labelField || "",
273
265
  ValueField: opts.valueField || "",
274
266
  },
275
- InitValue: "",
276
267
  };
277
268
  this._applyPassThrough(element, opts);
278
269
  this._addElement(element);
@@ -284,12 +275,11 @@ class ElementContainer {
284
275
  Type: "CheckBox", Id: id, Name: name,
285
276
  Position: buildPosition({ width: 100, height: 25, ...opts }),
286
277
  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,
278
+ ...getTypeDefaults("CheckBox"),
279
+ Text: text,
280
+ ...(opts.checkedValue !== undefined ? { CheckedValue: opts.checkedValue } : {}),
281
+ ...(opts.uncheckedValue !== undefined ? { UnCheckedValue: opts.uncheckedValue } : {}),
282
+ ...(opts.checked !== undefined ? { Checked: opts.checked } : {}),
293
283
  };
294
284
  this._applyPassThrough(element, opts);
295
285
  this._addElement(element);
@@ -301,8 +291,7 @@ class ElementContainer {
301
291
  Type: "Image", Id: id, Name: name,
302
292
  Position: buildPosition({ width: 100, height: 100, ...opts }),
303
293
  Style: buildStyle(opts),
304
- Cursor: "default",
305
- Image: { FolderCode: "", SaveName: "" },
294
+ ...getTypeDefaults("Image"),
306
295
  };
307
296
  this._applyPassThrough(element, opts);
308
297
  this._addElement(element);
@@ -314,9 +303,8 @@ class ElementContainer {
314
303
  Type: "Chart", Id: id, Name: name,
315
304
  Position: buildPosition({ width: 600, height: 400, ...opts }),
316
305
  Style: buildStyle(opts),
306
+ ...getTypeDefaults("Chart"),
317
307
  DataSource: opts.dataSource || "",
318
- AutoRefresh: false, DoRefresh: false, DoExport: false,
319
- PlotOptions: {},
320
308
  };
321
309
  this._applyPassThrough(element, opts);
322
310
  this._addElement(element);
@@ -328,8 +316,8 @@ class ElementContainer {
328
316
  Type: "OlapGrid", Id: id, Name: name,
329
317
  Position: buildPosition({ width: 800, height: 400, ...opts }),
330
318
  Style: buildStyle(opts),
319
+ ...getTypeDefaults("OlapGrid"),
331
320
  DataSource: opts.dataSource || "",
332
- AutoRefresh: false, DoRefresh: false, DoExport: false,
333
321
  };
334
322
  this._applyPassThrough(element, opts);
335
323
  this._addElement(element);
@@ -342,9 +330,8 @@ class ElementContainer {
342
330
  Type: "MaskTextBox", Id: id, Name: name,
343
331
  Position: buildPosition({ width: 200, height: 28, ...opts }),
344
332
  Style: buildStyle(opts),
345
- Format: opts.format ?? "", Formula: "",
346
- IsReadOnly: false, Text: "", Value: "",
347
- MxBinding: "",
333
+ ...getTypeDefaults("MaskTextBox"),
334
+ ...(opts.format !== undefined ? { Format: opts.format } : {}),
348
335
  };
349
336
  this._applyPassThrough(element, opts);
350
337
  this._addElement(element);
@@ -356,10 +343,7 @@ class ElementContainer {
356
343
  Type: "RichTextBox", Id: id, Name: name,
357
344
  Position: buildPosition({ width: 400, height: 200, ...opts }),
358
345
  Style: buildStyle(opts),
359
- Formula: "", IsReadOnly: false, MaxLength: 0,
360
- LineSpacing: 0, HasLineSpacing: false,
361
- MxBinding: "", MxBindingUseStyle: false,
362
- Value: "", Text: "",
346
+ ...getTypeDefaults("RichTextBox"),
363
347
  };
364
348
  this._applyPassThrough(element, opts);
365
349
  this._addElement(element);
@@ -371,9 +355,8 @@ class ElementContainer {
371
355
  Type: "MultiComboBox", Id: id, Name: name,
372
356
  Position: buildPosition({ width: 200, height: 28, ...opts }),
373
357
  Style: buildStyle(opts),
358
+ ...getTypeDefaults("MultiComboBox"),
374
359
  DataSource: opts.dataSource || "",
375
- InitType: 0, RefreshType: 0, AutoRefresh: false,
376
- EditValue: "", CaptionText: "",
377
360
  DataSourceInfo: {
378
361
  LabelField: opts.labelField || "",
379
362
  ValueField: opts.valueField || "",
@@ -389,7 +372,7 @@ class ElementContainer {
389
372
  Type: "PickList", Id: id, Name: name,
390
373
  Position: buildPosition({ width: 200, height: 28, ...opts }),
391
374
  Style: buildStyle(opts),
392
- IsReadOnly: false,
375
+ ...getTypeDefaults("PickList"),
393
376
  };
394
377
  this._applyPassThrough(element, opts);
395
378
  this._addElement(element);
@@ -401,10 +384,11 @@ class ElementContainer {
401
384
  Type: "RadioButton", Id: id, Name: name,
402
385
  Position: buildPosition({ width: 100, height: 25, ...opts }),
403
386
  Style: buildStyle(opts),
404
- LanguageCode: "", Text: text, TextPosition: "back",
405
- GroupName: opts.groupName || "",
406
- CheckedValue: opts.checkedValue ?? "Y",
407
- Checked: opts.checked ?? false,
387
+ ...getTypeDefaults("RadioButton"),
388
+ Text: text,
389
+ ...(opts.groupName !== undefined ? { GroupName: opts.groupName } : {}),
390
+ ...(opts.checkedValue !== undefined ? { CheckedValue: opts.checkedValue } : {}),
391
+ ...(opts.checked !== undefined ? { Checked: opts.checked } : {}),
408
392
  };
409
393
  this._applyPassThrough(element, opts);
410
394
  this._addElement(element);
@@ -416,6 +400,7 @@ class ElementContainer {
416
400
  Type: "Tree", Id: id, Name: name,
417
401
  Position: buildPosition({ width: 200, height: 300, ...opts }),
418
402
  Style: buildStyle(opts),
403
+ ...getTypeDefaults("Tree"),
419
404
  DataSource: opts.dataSource || "",
420
405
  };
421
406
  this._applyPassThrough(element, opts);
@@ -428,7 +413,7 @@ class ElementContainer {
428
413
  Type: "ColorSelector", Id: id, Name: name,
429
414
  Position: buildPosition({ width: 100, height: 28, ...opts }),
430
415
  Style: buildStyle(opts),
431
- ColorValue: "", ShowButton: true,
416
+ ...getTypeDefaults("ColorSelector"),
432
417
  };
433
418
  this._applyPassThrough(element, opts);
434
419
  this._addElement(element);
@@ -440,6 +425,7 @@ class ElementContainer {
440
425
  Type: "Slider", Id: id, Name: name,
441
426
  Position: buildPosition({ width: 200, height: 30, ...opts }),
442
427
  Style: buildStyle(opts),
428
+ ...getTypeDefaults("Slider"),
443
429
  DataSource: opts.dataSource || "",
444
430
  };
445
431
  this._applyPassThrough(element, opts);
@@ -453,10 +439,7 @@ class ElementContainer {
453
439
  Type: "CalendarYear", Id: id, Name: name,
454
440
  Position: buildPosition({ width: 100, height: 28, ...opts }),
455
441
  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,
442
+ ...getTypeDefaults("CalendarYear"),
460
443
  };
461
444
  this._applyPassThrough(element, opts);
462
445
  this._addElement(element);
@@ -468,10 +451,7 @@ class ElementContainer {
468
451
  Type: "CalendarYM", Id: id, Name: name,
469
452
  Position: buildPosition({ width: 120, height: 28, ...opts }),
470
453
  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,
454
+ ...getTypeDefaults("CalendarYM"),
475
455
  };
476
456
  this._applyPassThrough(element, opts);
477
457
  this._addElement(element);
@@ -484,7 +464,8 @@ class ElementContainer {
484
464
  Type: "FileUploadButton", Id: id, Name: name,
485
465
  Position: buildPosition({ width: 100, height: 30, ...opts }),
486
466
  Style: buildStyle(opts),
487
- Value: text, Cursor: "pointer",
467
+ ...getTypeDefaults("FileUploadButton"),
468
+ Value: text,
488
469
  };
489
470
  if (opts.allowExt)
490
471
  element.AllowExt = opts.allowExt;
@@ -501,10 +482,8 @@ class ElementContainer {
501
482
  Type: "TreeGrid", Id: id, Name: name,
502
483
  Position: buildPosition({ width: 800, height: 400, ...opts }),
503
484
  Style: buildStyle(opts),
485
+ ...getTypeDefaults("TreeGrid"),
504
486
  DataSource: opts.dataSource || "",
505
- CellMargin: "2", Columns: [],
506
- AutoRefresh: false, DoRefresh: false, DoExport: false,
507
- ToggleBtnSize: 10,
508
487
  };
509
488
  this._applyPassThrough(element, opts);
510
489
  this._addElement(element);
@@ -518,9 +497,9 @@ class ElementContainer {
518
497
  Type: "iGrid", Id: id, Name: name,
519
498
  Position: buildPosition({ width: 800, height: 400, ...opts }),
520
499
  Style: buildStyle(opts),
521
- AutoRefresh: false, DoRefresh: false, DoExport: false,
522
- ServerScript: opts.serverScript || "",
523
- TemplateCode: opts.templateCode || "",
500
+ ...getTypeDefaults("iGrid"),
501
+ ...(opts.serverScript !== undefined ? { ServerScript: opts.serverScript } : {}),
502
+ ...(opts.templateCode !== undefined ? { TemplateCode: opts.templateCode } : {}),
524
503
  };
525
504
  this._applyPassThrough(element, opts);
526
505
  this._addElement(element);
@@ -532,11 +511,8 @@ class ElementContainer {
532
511
  Type: "CompactDataGrid", Id: id, Name: name,
533
512
  Position: buildPosition({ width: 800, height: 300, ...opts }),
534
513
  Style: buildStyle(opts),
514
+ ...getTypeDefaults("CompactDataGrid"),
535
515
  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
516
  };
541
517
  this._applyPassThrough(element, opts);
542
518
  this._addElement(element);
@@ -550,6 +526,7 @@ class ElementContainer {
550
526
  Type: "TreeView", Id: id, Name: name,
551
527
  Position: buildPosition({ width: 250, height: 400, ...opts }),
552
528
  Style: buildStyle(opts),
529
+ ...getTypeDefaults("TreeView"),
553
530
  DataSource: opts.dataSource || "",
554
531
  };
555
532
  this._applyPassThrough(element, opts);
@@ -563,9 +540,8 @@ class ElementContainer {
563
540
  Type: "PieChart", Id: id, Name: name,
564
541
  Position: buildPosition({ width: 400, height: 400, ...opts }),
565
542
  Style: buildStyle(opts),
543
+ ...getTypeDefaults("PieChart"),
566
544
  DataSource: opts.dataSource || "",
567
- AutoRefresh: false, DoRefresh: false, DoExport: false,
568
- PlotOptions: {},
569
545
  };
570
546
  this._applyPassThrough(element, opts);
571
547
  this._addElement(element);
@@ -577,9 +553,8 @@ class ElementContainer {
577
553
  Type: "ScatterChart", Id: id, Name: name,
578
554
  Position: buildPosition({ width: 600, height: 400, ...opts }),
579
555
  Style: buildStyle(opts),
556
+ ...getTypeDefaults("ScatterChart"),
580
557
  DataSource: opts.dataSource || "",
581
- AutoRefresh: false, DoRefresh: false, DoExport: false,
582
- PlotOptions: {},
583
558
  };
584
559
  this._applyPassThrough(element, opts);
585
560
  this._addElement(element);
@@ -591,9 +566,8 @@ class ElementContainer {
591
566
  Type: "PolygonChart", Id: id, Name: name,
592
567
  Position: buildPosition({ width: 400, height: 400, ...opts }),
593
568
  Style: buildStyle(opts),
569
+ ...getTypeDefaults("PolygonChart"),
594
570
  DataSource: opts.dataSource || "",
595
- AutoRefresh: false, DoRefresh: false, DoExport: false,
596
- PlotOptions: {},
597
571
  };
598
572
  this._applyPassThrough(element, opts);
599
573
  this._addElement(element);
@@ -606,7 +580,7 @@ class ElementContainer {
606
580
  Type: "Tab", Id: id, Name: name,
607
581
  Position: buildPosition({ width: 800, height: 400, ...opts }),
608
582
  Style: buildStyle(opts),
609
- Property: { TabButtonPosition: 0 }, TabItems: [], DoExport: false,
583
+ ...getTypeDefaults("Tab"),
610
584
  };
611
585
  this._applyPassThrough(element, opts);
612
586
  this._addElement(element);
@@ -618,7 +592,7 @@ class ElementContainer {
618
592
  Type: "TableLayout", Id: id, Name: name,
619
593
  Position: buildPosition({ width: 800, height: 400, ...opts }),
620
594
  Style: buildStyle(opts),
621
- Cols: [], Rows: [], MergeCellList: [],
595
+ ...getTypeDefaults("TableLayout"),
622
596
  };
623
597
  this._applyPassThrough(element, opts);
624
598
  this._addElement(element);
@@ -631,6 +605,7 @@ class ElementContainer {
631
605
  Type: "AddIn", Id: id, Name: name,
632
606
  Position: buildPosition({ width: 400, height: 300, ...opts }),
633
607
  Style: buildStyle(opts),
608
+ ...getTypeDefaults("AddIn"),
634
609
  };
635
610
  this._applyPassThrough(element, opts);
636
611
  this._addElement(element);
@@ -642,9 +617,8 @@ class ElementContainer {
642
617
  Type: "UserComponent", Id: id, Name: name,
643
618
  Position: buildPosition({ width: 800, height: 400, ...opts }),
644
619
  Style: buildStyle(opts),
645
- DoRefresh: false, DoExport: false,
620
+ ...getTypeDefaults("UserComponent"),
646
621
  ReportInfo: { ReportCode: opts.reportCode || "", FolderCode: "" },
647
- ExternalReportInfo: {},
648
622
  };
649
623
  this._applyPassThrough(element, opts);
650
624
  this._addElement(element);
@@ -656,8 +630,8 @@ class ElementContainer {
656
630
  Type: "WebContainer", Id: id, Name: name,
657
631
  Position: buildPosition({ width: 800, height: 400, ...opts }),
658
632
  Style: buildStyle(opts),
659
- AutoRefresh: false, DoRefresh: false,
660
- TargetURL: opts.url || "",
633
+ ...getTypeDefaults("WebContainer"),
634
+ ...(opts.url !== undefined ? { TargetURL: opts.url } : {}),
661
635
  };
662
636
  this._applyPassThrough(element, opts);
663
637
  this._addElement(element);
@@ -669,6 +643,7 @@ class ElementContainer {
669
643
  Type: "DiagramControl", Id: id, Name: name,
670
644
  Position: buildPosition({ width: 800, height: 400, ...opts }),
671
645
  Style: buildStyle(opts),
646
+ ...getTypeDefaults("DiagramControl"),
672
647
  };
673
648
  this._applyPassThrough(element, opts);
674
649
  this._addElement(element);
@@ -680,6 +655,7 @@ class ElementContainer {
680
655
  Type: "Slicer", Id: id, Name: name,
681
656
  Position: buildPosition({ width: 200, height: 300, ...opts }),
682
657
  Style: buildStyle(opts),
658
+ ...getTypeDefaults("Slicer"),
683
659
  };
684
660
  this._applyPassThrough(element, opts);
685
661
  this._addElement(element);
@@ -691,7 +667,7 @@ class ElementContainer {
691
667
  Type: "Group", Id: id, Name: name,
692
668
  Position: buildPosition({ width: 800, height: 50, ...opts }),
693
669
  Style: buildStyle(opts),
694
- ChildElements: [],
670
+ ...getTypeDefaults("Group"),
695
671
  };
696
672
  this._applyPassThrough(element, opts);
697
673
  this._addElement(element);
@@ -703,11 +679,8 @@ class ElementContainer {
703
679
  Type: "DataGrid", Id: id, Name: name,
704
680
  Position: buildPosition({ width: 800, height: 400, ...opts }),
705
681
  Style: buildStyle(opts),
682
+ ...getTypeDefaults("DataGrid"),
706
683
  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
684
  };
712
685
  this._applyPassThrough(element, opts);
713
686
  this._addElement(element);
@@ -722,6 +695,7 @@ class ElementContainer {
722
695
  Type: type, Id: id, Name: name,
723
696
  Position: buildPosition(opts),
724
697
  Style: buildStyle(opts),
698
+ ...getTypeDefaults(type),
725
699
  };
726
700
  this._applyPassThrough(element, opts);
727
701
  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.40",
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)" },