@bimatrix-aud-platform/aud_mcp_server 1.1.24 → 1.1.25

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.
@@ -386,6 +386,28 @@ function fixEnumAndRangeValues(doc, datas, fixes) {
386
386
  for (const form of forms) {
387
387
  const elements = form.Elements || [];
388
388
  walkElements(elements, (el, path) => {
389
+ // ---- AutoRefresh / DoRefresh / DoExport 필수 속성 보정 ----
390
+ const type = el.Type;
391
+ // AutoRefresh 대상: DataGrid, ComboBox, MultiComboBox, OlapGrid, Chart, PieChart, ScatterChart, PolygonChart, TreeGrid, iGrid, WebContainer
392
+ const hasAutoRefresh = ["DataGrid", "ComboBox", "MultiComboBox", "OlapGrid", "Chart", "PieChart", "ScatterChart", "PolygonChart", "TreeGrid", "iGrid", "WebContainer"];
393
+ if (hasAutoRefresh.includes(type) && !("AutoRefresh" in el)) {
394
+ const autoDefault = type === "ComboBox" ? true : false;
395
+ el.AutoRefresh = autoDefault;
396
+ fixes.push(`[Rule3] ${path}.AutoRefresh: 누락 → ${autoDefault}`);
397
+ }
398
+ // DoRefresh 대상: DataGrid, ComboBox, OlapGrid, Chart, PieChart, ScatterChart, PolygonChart, TreeGrid, iGrid, UserComponent, WebContainer
399
+ const hasDoRefresh = ["DataGrid", "ComboBox", "OlapGrid", "Chart", "PieChart", "ScatterChart", "PolygonChart", "TreeGrid", "iGrid", "UserComponent", "WebContainer"];
400
+ if (hasDoRefresh.includes(type) && !("DoRefresh" in el)) {
401
+ const isCombo = type === "ComboBox";
402
+ el.DoRefresh = isCombo ? false : true;
403
+ fixes.push(`[Rule3] ${path}.DoRefresh: 누락 → ${el.DoRefresh}`);
404
+ }
405
+ // DoExport 대상: DataGrid, OlapGrid, Chart, PieChart, ScatterChart, PolygonChart, TreeGrid, iGrid, UserComponent, Tab
406
+ const hasDoExport = ["DataGrid", "OlapGrid", "Chart", "PieChart", "ScatterChart", "PolygonChart", "TreeGrid", "iGrid", "UserComponent", "Tab"];
407
+ if (hasDoExport.includes(type) && !("DoExport" in el)) {
408
+ el.DoExport = true;
409
+ fixes.push(`[Rule3] ${path}.DoExport: 누락 → true`);
410
+ }
389
411
  // ---- Style.Border.LineType ----
390
412
  const border = el.Style?.Border;
391
413
  if (border) {
@@ -412,6 +434,34 @@ function fixEnumAndRangeValues(doc, datas, fixes) {
412
434
  if (bg.Color)
413
435
  clampColorRGBA(bg.Color, `${path}.Style.Background.Color`, fixes);
414
436
  }
437
+ // ---- DataGrid: ColumnHeaderHeight / RowHeight / ShowHeader 필수 ----
438
+ if (el.Type === "DataGrid") {
439
+ if (!("ColumnHeaderHeight" in el)) {
440
+ el.ColumnHeaderHeight = 28;
441
+ fixes.push(`[Rule3] ${path}.ColumnHeaderHeight: 누락 → 28`);
442
+ }
443
+ if (!("RowHeight" in el)) {
444
+ el.RowHeight = 24;
445
+ fixes.push(`[Rule3] ${path}.RowHeight: 누락 → 24`);
446
+ }
447
+ if (!("ShowHeader" in el)) {
448
+ el.ShowHeader = 3;
449
+ fixes.push(`[Rule3] ${path}.ShowHeader: 누락 → 3 (Row&Column)`);
450
+ }
451
+ fixIntRange(el, "ShowHeader", 0, 3, 3, path, fixes); // 0:None, 1:Row, 2:Column, 3:Row&Column
452
+ if (!("SelectRule" in el)) {
453
+ el.SelectRule = 2;
454
+ fixes.push(`[Rule3] ${path}.SelectRule: 누락 → 2 (SingleRange)`);
455
+ }
456
+ fixIntRange(el, "SelectRule", 0, 3, 2, path, fixes); // 0:SingleRow, 1:MultiRow, 2:SingleRange, 3:SingleCell
457
+ }
458
+ // ---- TreeGrid: ToggleBtnSize 필수 ----
459
+ if (el.Type === "TreeGrid") {
460
+ if (!("ToggleBtnSize" in el)) {
461
+ el.ToggleBtnSize = 10;
462
+ fixes.push(`[Rule3] ${path}.ToggleBtnSize: 누락 → 10`);
463
+ }
464
+ }
415
465
  // ---- DataGrid / TreeGrid Columns ----
416
466
  if ((el.Type === "DataGrid" || el.Type === "TreeGrid") && Array.isArray(el.Columns)) {
417
467
  for (let i = 0; i < el.Columns.length; i++) {
@@ -427,6 +477,61 @@ function fixEnumAndRangeValues(doc, datas, fixes) {
427
477
  fixIntRange(col, "DataType", 0, 2, 0, colPath, fixes); // 기본값: 1(String)
428
478
  }
429
479
  }
480
+ // ---- FileUploadButton: Value / Cursor 필수 ----
481
+ if (el.Type === "FileUploadButton") {
482
+ if (!("Value" in el)) {
483
+ el.Value = "upload";
484
+ fixes.push(`[Rule3] ${path}.Value: 누락 → "upload"`);
485
+ }
486
+ if (!("Cursor" in el)) {
487
+ el.Cursor = "pointer";
488
+ fixes.push(`[Rule3] ${path}.Cursor: 누락 → "pointer"`);
489
+ }
490
+ }
491
+ // ---- Chart: PlotOptions 필수 ----
492
+ const isChart = ["Chart", "PieChart", "ScatterChart", "PolygonChart"].includes(type);
493
+ if (isChart) {
494
+ if (!el.PlotOptions || typeof el.PlotOptions !== "object") {
495
+ el.PlotOptions = { Animation: 1000, EnableMouseTracking: true, DataLabels: {}, ConnectNulls: false, AllowOverlap: false };
496
+ fixes.push(`[Rule3] ${path}.PlotOptions: 누락 → 기본값 생성`);
497
+ }
498
+ else {
499
+ const po = el.PlotOptions;
500
+ if (!("Animation" in po)) {
501
+ po.Animation = 1000;
502
+ fixes.push(`[Rule3] ${path}.PlotOptions.Animation: 누락 → 1000`);
503
+ }
504
+ if (!("EnableMouseTracking" in po)) {
505
+ po.EnableMouseTracking = true;
506
+ fixes.push(`[Rule3] ${path}.PlotOptions.EnableMouseTracking: 누락 → true`);
507
+ }
508
+ if (!("DataLabels" in po) || typeof po.DataLabels !== "object") {
509
+ po.DataLabels = {};
510
+ fixes.push(`[Rule3] ${path}.PlotOptions.DataLabels: 누락 → {}`);
511
+ }
512
+ if (!("ConnectNulls" in po)) {
513
+ po.ConnectNulls = false;
514
+ fixes.push(`[Rule3] ${path}.PlotOptions.ConnectNulls: 누락 → false`);
515
+ }
516
+ if (!("AllowOverlap" in po)) {
517
+ po.AllowOverlap = false;
518
+ fixes.push(`[Rule3] ${path}.PlotOptions.AllowOverlap: 누락 → false`);
519
+ }
520
+ }
521
+ }
522
+ // ---- MultiComboBox: InitType / RefreshType 필수 + enum 범위 ----
523
+ if (el.Type === "MultiComboBox") {
524
+ if (!("InitType" in el)) {
525
+ el.InitType = 0;
526
+ fixes.push(`[Rule3] ${path}.InitType: 누락 → 0 (CurrentValue)`);
527
+ }
528
+ fixIntRange(el, "InitType", 0, 2, 0, path, fixes); // 0:CurrentValue, 1:InitValue, 2:없음
529
+ if (!("RefreshType" in el)) {
530
+ el.RefreshType = 1;
531
+ fixes.push(`[Rule3] ${path}.RefreshType: 누락 → 1 (FirstTime)`);
532
+ }
533
+ fixIntRange(el, "RefreshType", 0, 2, 1, path, fixes); // 0:None, 1:FirstTime, 2:EveryTime
534
+ }
430
535
  // ---- OlapGrid Fields ----
431
536
  if (el.Type === "OlapGrid") {
432
537
  const fields = el.iOLAPView?.Fields;
@@ -533,6 +638,10 @@ function fixTabItemChildElements(doc, fixes) {
533
638
  if (el.Type !== "Tab" && el.ChildElements && Array.isArray(el.ChildElements)) {
534
639
  walk(el.ChildElements, path);
535
640
  }
641
+ // iGrid의 Controls 재귀 순회
642
+ if (el.Type === "iGrid" && el.Controls && Array.isArray(el.Controls)) {
643
+ walk(el.Controls, path);
644
+ }
536
645
  }
537
646
  }
538
647
  walk(elements, "");
@@ -549,6 +658,10 @@ function walkElements(elements, callback, parentPath = "") {
549
658
  if (el.Type !== "Tab" && el.ChildElements && Array.isArray(el.ChildElements)) {
550
659
  walkElements(el.ChildElements, callback, path);
551
660
  }
661
+ // iGrid의 Controls 재귀 순회
662
+ if (el.Type === "iGrid" && el.Controls && Array.isArray(el.Controls)) {
663
+ walkElements(el.Controls, callback, path);
664
+ }
552
665
  // Tab > TabItems > Controls 또는 ChildElements 재귀 순회
553
666
  if (el.Type === "Tab" && el.TabItems && Array.isArray(el.TabItems)) {
554
667
  for (let i = 0; i < el.TabItems.length; i++) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bimatrix-aud-platform/aud_mcp_server",
3
- "version": "1.1.24",
3
+ "version": "1.1.25",
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",
@@ -551,21 +551,21 @@ export interface IDataGridElement extends IBaseElement {
551
551
  DataSource?: string;
552
552
  /** 셀 내부 여백 (예: "2,2,2,2") */
553
553
  CellMargin: string;
554
- /** 보고서 로딩 시 데이터 조회 여부 */
554
+ /** 보고서 로딩 시 데이터 조회 여부, 기본값: false */
555
555
  AutoRefresh: boolean;
556
- /** 수동 새로고침 버튼 표시 여부 */
556
+ /** 수동 새로고침 버튼 표시 여부, 기본값: true */
557
557
  DoRefresh: boolean;
558
- /** 파일 내보내기(다운로드) 가능 여부 */
559
- DoExport?: boolean;
560
- /** 헤더 표시 방식 (0: 표시, 1: 숨김 ) */
561
- ShowHeader?: number;
562
- /** 선택 규칙 (0: Single, 1: Multiple ) */
563
- SelectRule?: number;
558
+ /** 파일 내보내기(다운로드) 가능 여부, 기본값: true */
559
+ DoExport: boolean;
560
+ /** 헤더 표시 방식 (0: None-숨김, 1: Row헤더만 표시, 2:Column헤더만 표시, 3:Row&Column 헤더 표시), 기본값 : 3 */
561
+ ShowHeader: number;
562
+ /** 마우스로 영역 선택 규칙 (0: SingleRow, 1: MultiRow, 2:SingleRange, 3:SingleCell), 기본값 : 2 */
563
+ SelectRule: number;
564
564
  /** NaN 셀에 표시할 텍스트 */
565
565
  NaNCellText?: string;
566
- /** 헤더 행 높이 (픽셀) */
566
+ /** 헤더 행 높이 (픽셀) , 기본값 : 28*/
567
567
  ColumnHeaderHeight: number;
568
- /** 데이터 행 높이 (픽셀) */
568
+ /** 데이터 행 높이 (픽셀) , 기본값 : 24*/
569
569
  RowHeight: number;
570
570
  /** 행 헤더 너비 (행 번호 표시 영역) */
571
571
  RowHeaderWidth?: number;
@@ -866,9 +866,9 @@ export interface IComboBoxElement extends IBaseElement {
866
866
  SelectedValue?: string;
867
867
  /** 고정 항목 목록 (JSON 형식, 데이터소스 대신 사용) */
868
868
  DefinedItems?: string;
869
- /** 보고서 로딩 시 데이터 조회 여부 */
869
+ /** 보고서 로딩 시 데이터 조회 여부 , 기본값: true */
870
870
  AutoRefresh: boolean;
871
- /** 수동 새로고침 버튼 표시 여부 */
871
+ /** 수동 새로고침 버튼 표시 여부,, 기본값: false */
872
872
  DoRefresh: boolean;
873
873
  }
874
874
 
@@ -889,17 +889,17 @@ export interface IMultiComboBoxElement extends IBaseElement {
889
889
  EditValue?: string;
890
890
  /** 캡션 텍스트 (선택된 항목 요약 표시) */
891
891
  CaptionText?: string;
892
- /** 초기화 타입 (0: 없음, 1: 초기값 사용) */
893
- InitType?: number;
892
+ /** 데이터 조회 후 초기값 설정 방식(0: CurrentValue, 1: InitValue로 초기화, 2:없음), 기본값 : 0 */
893
+ InitType: number;
894
894
  /** 초기값 */
895
895
  InitValue?: string;
896
- /** 새로고침 타입 */
897
- RefreshType?: number;
896
+ /** 새로고침 타입 ( 0:None-클릭 시 조회 하지 않음, 1:FirstTime-클릭 시 최초 한번만 조회, 2:EveryTime-클릭할 때마다 조회, 기본값:1 */
897
+ RefreshType: number;
898
898
  /** 읽기 전용 여부 */
899
899
  IsReadOnly?: boolean;
900
900
  /** 정렬 타입 */
901
901
  SortType?: number;
902
- /** 보고서 로딩 시 데이터 조회 여부 */
902
+ /** 보고서 로딩 시 데이터 조회 여부, 기본값: false */
903
903
  AutoRefresh: boolean;
904
904
  /** 새로고침 후 호출할 함수명 */
905
905
  AfterRefesh?: string;
@@ -1053,11 +1053,11 @@ export interface IOlapGridElement extends IBaseElement {
1053
1053
  DataSource: string;
1054
1054
  /** 서버 스크립트 이름 */
1055
1055
  ServerScript?: string;
1056
- /** 데이터 보고서 로딩 시 데이터 조회 여부 */
1056
+ /** 데이터 보고서 로딩 시 데이터 조회 여부, 기본값: false */
1057
1057
  AutoRefresh: boolean;
1058
- /** 수동 새로고침 버튼 표시 여부 */
1058
+ /** 수동 새로고침 버튼 표시 여부, 기본값: true */
1059
1059
  DoRefresh: boolean;
1060
- /** 파일 내보내기(다운로드) 가능 여부 */
1060
+ /** 파일 내보내기(다운로드) 가능 여부, 기본값: true */
1061
1061
  DoExport: boolean;
1062
1062
  /** iOLAP 뷰 모델 직렬화 데이터 */
1063
1063
  iOLAPView: IOlapViewModel;
@@ -2521,6 +2521,400 @@ export interface ICalendarElement extends IBaseElement {
2521
2521
  MxBinding?: string;
2522
2522
  }
2523
2523
 
2524
+ // ============================================
2525
+ // Chart Series
2526
+ // ============================================
2527
+
2528
+ /**
2529
+ * 차트 시리즈 인터페이스
2530
+ * @see src/control/chart/Series.ts - Serialize()
2531
+ */
2532
+ export interface IChartSeriesItem {
2533
+ /** 시리즈 이름 */
2534
+ Name: string;
2535
+ /** 시리즈 라벨 (범례 표시명) */
2536
+ Label: string;
2537
+ /** 차트 타입 (enChartType, 0:Default=메인 차트 유형 따름) */
2538
+ Type: number;
2539
+ /** 시리즈 배경색 */
2540
+ BackgroundColor: string;
2541
+ /** 사용 축 (0:Y1Axis, 1:Y2Axis) */
2542
+ Axis: number;
2543
+ /** 값 필드명 */
2544
+ ValueField: string;
2545
+ /** 데이터 타입 (0:Dimension, 1:Measure) */
2546
+ DataType: number;
2547
+ /** 필드 리스트에서 사용 여부 */
2548
+ UsedNumberSeries: boolean;
2549
+ /** 생성 타입 (0:Data, 1:Custom) */
2550
+ CreateType: number;
2551
+ /** 표시 포맷 */
2552
+ Format: string;
2553
+ /** 테두리 두께 (bar/column) */
2554
+ BorderWidth: string;
2555
+ /** 테두리 색상 (bar/column) */
2556
+ BorderColor: string;
2557
+ /** 단위 */
2558
+ Unit: number;
2559
+ /** X 오프셋 */
2560
+ X: number;
2561
+ /** Y 오프셋 */
2562
+ Y: number;
2563
+ /** Cursor Pointer 사용 여부, 기본값: false */
2564
+ UsePointer: boolean;
2565
+ /** 범례 표시 여부, 기본값: true */
2566
+ ShowInLegend: boolean;
2567
+ /** 한 계열에 대한 단일 색상 지정, 기본값: false */
2568
+ ColorByPoint: boolean;
2569
+ /** 표시 여부 (false일 때만 저장) */
2570
+ Visible?: boolean;
2571
+ /** 심볼 유형 (Line계열, 기본값: "circle") */
2572
+ SymbolType?: string;
2573
+ /** 심볼 크기 (Line계열) */
2574
+ SymbolRadius?: number;
2575
+ /** 심볼 색 (Line계열) */
2576
+ SymbolColor?: string;
2577
+ /** 대시 스타일 (Line/Spline) */
2578
+ DashStyle?: number;
2579
+ /** 라인 두께 (Line/Spline) */
2580
+ LineWidth?: number;
2581
+ /** 정렬 */
2582
+ Align?: number;
2583
+ /** 다국어 코드 */
2584
+ LanguageCode?: string;
2585
+ /** 데이터 라벨 필드 */
2586
+ DataLabelField?: string;
2587
+ /** X2축 사용 (bar 차트) */
2588
+ X2Axis?: boolean;
2589
+ /** 표시 순서 */
2590
+ Sequence?: number;
2591
+ /** 데이터 라벨 표시 여부 */
2592
+ DataLabelsVisible?: boolean;
2593
+ /** 데이터 라벨 테두리 색상을 계열 색상으로 */
2594
+ DataLabelsColorBySeries?: boolean;
2595
+ /** 데이터 라벨 수식 */
2596
+ DataLabelsFormula?: string;
2597
+ /** 막대 너비 (column/bar) */
2598
+ PointWidth?: number;
2599
+ /** 심볼 테두리 두께 (Line) */
2600
+ SymbolLineWidth?: number;
2601
+ /** 심볼 테두리 색 (Line) */
2602
+ SymbolLineColor?: string;
2603
+ /** 데이터 라벨 스타일 */
2604
+ DataLabels?: {
2605
+ Style?: string;
2606
+ };
2607
+ }
2608
+
2609
+ // ============================================
2610
+ // Chart Axis
2611
+ // ============================================
2612
+
2613
+ /**
2614
+ * 축 라벨 설정
2615
+ */
2616
+ export interface IChartAxisLabel {
2617
+ FontSize?: number;
2618
+ FontFamily?: string;
2619
+ FontBold?: boolean;
2620
+ FontItalic?: boolean;
2621
+ FontColor?: string;
2622
+ LabelAngle?: string;
2623
+ LabelsX?: number;
2624
+ LabelsY?: number;
2625
+ AnnoFormat?: string;
2626
+ }
2627
+
2628
+ /**
2629
+ * 차트 축 공통 속성
2630
+ * @see src/control/chart/XAxis.ts - Serialize()
2631
+ * @see src/control/chart/YAxis.ts - Serialize()
2632
+ */
2633
+ export interface IChartAxisBase {
2634
+ /** 축 제목 텍스트 */
2635
+ Text: string;
2636
+ /** 축 표시 여부 */
2637
+ Visible: boolean;
2638
+ /** 축 이름 */
2639
+ Name?: string;
2640
+ /** 주 눈금 자동 간격 여부 */
2641
+ AutoTickInterval?: boolean;
2642
+ /** 주 눈금 간격 값 */
2643
+ TickInterval?: string;
2644
+ /** 보조 눈금 사용 여부 */
2645
+ UseMinorTickInterval?: boolean;
2646
+ /** 보조 눈금 자동 간격 여부 */
2647
+ AutoMinorTickInterval?: boolean;
2648
+ /** 보조 눈금 간격 값 */
2649
+ MinorTickInterval?: string;
2650
+ /** 최대값 자동 여부 */
2651
+ AutoMax?: boolean;
2652
+ /** 최소값 자동 여부 */
2653
+ AutoMin?: boolean;
2654
+ /** 최대값 */
2655
+ MaxValue?: number;
2656
+ /** 최소값 */
2657
+ MinValue?: number;
2658
+ /** 주 눈금선 색 */
2659
+ GridLineColor?: string;
2660
+ /** 주 눈금선 두께 */
2661
+ GridLineWidth?: number;
2662
+ /** 주 눈금선 스타일 */
2663
+ GridLineStyle?: number;
2664
+ /** 보조 눈금선 색 */
2665
+ MinorGridLineColor?: string;
2666
+ /** 보조 눈금선 두께 */
2667
+ MinorGridLineWidth?: number;
2668
+ /** 보조 눈금선 스타일 */
2669
+ MinorGridLineStyle?: number;
2670
+ /** 사용자 지정 카테고리 */
2671
+ Categories?: string[];
2672
+ /** 사용자 지정 항목 (JSON 문자열) */
2673
+ DefinedItems?: string;
2674
+ /** 다국어 코드 */
2675
+ LanguageCode?: string;
2676
+ /** 레이블 포맷 */
2677
+ AnnoFormat?: string;
2678
+ /** 라벨 설정 */
2679
+ Label?: IChartAxisLabel;
2680
+ /** PlotLines 선 두께 */
2681
+ PlotLinesWidth?: number;
2682
+ /** PlotLines 선 색 */
2683
+ PlotLinesColor?: string;
2684
+ /** PlotLines 기준 값 */
2685
+ PlotLinesValue?: number;
2686
+ /** PlotLines 선 스타일 */
2687
+ PlotLinesDashStyle?: string;
2688
+ /** PlotLines 값 표시 여부 */
2689
+ PlotLinesValueVisibled?: boolean;
2690
+ /** 축 캡션 */
2691
+ Caption?: string;
2692
+ /** 축 제목 라벨 각도 */
2693
+ TitleLabelAngle?: number;
2694
+ /** PlotBands 배열 (@see IAxis.ts IPlotBand) */
2695
+ PlotBands?: { color: string; from: number; to: number }[];
2696
+ /** 눈금 색상 */
2697
+ TickColor?: string;
2698
+ /** 눈금 두께 */
2699
+ TickWidth?: number;
2700
+ }
2701
+
2702
+ /**
2703
+ * X축 (@see XAxis.ts Serialize)
2704
+ */
2705
+ export interface IChartXAxis extends IChartAxisBase {
2706
+ /** 그룹 필드명 */
2707
+ GroupField?: string;
2708
+ /** 그룹 폰트 색상 */
2709
+ GroupFontColor?: string;
2710
+ /** 그룹 폰트 크기 */
2711
+ GroupFontSize?: number;
2712
+ /** 그룹 폰트 패밀리 */
2713
+ GroupFontFamily?: string;
2714
+ /** 그룹 폰트 기울임 */
2715
+ GroupFontItalic?: boolean;
2716
+ /** 그룹 폰트 굵게 */
2717
+ GroupFontBold?: boolean;
2718
+ }
2719
+
2720
+ /**
2721
+ * Y축 (@see YAxis.ts Serialize)
2722
+ */
2723
+ export interface IChartYAxis extends IChartAxisBase {
2724
+ /** 축 반대편 배치 여부 (Y2: true) */
2725
+ Opposite?: boolean;
2726
+ /** 그리드 라인 보간 (polygon용) */
2727
+ GridLineInterpolation?: string;
2728
+ }
2729
+
2730
+ /**
2731
+ * 차트 Axis 구조 (Chart.ts Serialize에서 Axis 항목)
2732
+ */
2733
+ export interface IChartAxis {
2734
+ XAxis: IChartXAxis;
2735
+ Y1Axis: IChartYAxis;
2736
+ Y2Axis: IChartYAxis;
2737
+ }
2738
+
2739
+ // ============================================
2740
+ // Chart Legend
2741
+ // ============================================
2742
+
2743
+ /**
2744
+ * 차트 Legend 인터페이스
2745
+ * 모든 속성은 기본값과 다를 때만 Serialize에 포함됨
2746
+ * @see src/control/chart/Legend.ts - Serialize()
2747
+ */
2748
+ export interface IChartLegend {
2749
+ /** 수평 정렬 ("left"|"center"|"right"), 기본값: "center" */
2750
+ Align?: 'left' | 'center' | 'right';
2751
+ /** 수직 정렬 ("top"|"middle"|"bottom"), 기본값: "bottom" */
2752
+ VerticalAlign?: 'top' | 'middle' | 'bottom';
2753
+ /** 범례 레이아웃 ("horizontal"|"vertical"), 기본값: "horizontal" */
2754
+ Layout?: 'horizontal' | 'vertical';
2755
+ /** 범례 표시 여부, 기본값: true */
2756
+ Enabled?: boolean;
2757
+ /** 테두리 두께 (문자열) */
2758
+ BorderWidth?: string;
2759
+ /** 테두리 색상 */
2760
+ BorderColor?: string;
2761
+ /** 폰트 스타일 사용 여부, 기본값: false */
2762
+ UseFontStyle?: boolean;
2763
+ /** 폰트 패밀리, 기본값: "default" */
2764
+ FontFamily?: string;
2765
+ /** 폰트 크기, 기본값: 11 */
2766
+ FontSize?: number;
2767
+ /** 폰트 굵게, 기본값: false */
2768
+ FontBold?: boolean;
2769
+ /** 폰트 기울임, 기본값: false */
2770
+ FontItalic?: boolean;
2771
+ /** 폰트 색상, 기본값: "rgb(0,0,0)" */
2772
+ FontColor?: string;
2773
+ /** 배경 색상 */
2774
+ BackgroundColor?: string;
2775
+ /** 부유(Floating) 여부, 기본값: false */
2776
+ Floating?: boolean;
2777
+ /** X 오프셋, 기본값: 0 */
2778
+ X?: number;
2779
+ /** Y 오프셋, 기본값: 0 */
2780
+ Y?: number;
2781
+ /** 범례 순서 역방향, 기본값: false */
2782
+ Reversed?: boolean;
2783
+ /** 범례 항목 상단 여백, 기본값: 2 */
2784
+ MarginTop?: number;
2785
+ /** 범례 항목 간격, 기본값: 20 */
2786
+ Distance?: number;
2787
+ }
2788
+
2789
+ // ============================================
2790
+ // Chart Title
2791
+ // ============================================
2792
+
2793
+ /**
2794
+ * 차트 Title 인터페이스
2795
+ * @see src/control/chart/Title.ts - Serialize()
2796
+ */
2797
+ export interface IChartTitle {
2798
+ /** 제목 텍스트, 기본값: "" */
2799
+ Text: string;
2800
+ /** 다국어 코드, 기본값: "" */
2801
+ LanguageCode: string;
2802
+ /** 폰트 스타일 (값이 있는 항목만 저장됨) */
2803
+ Style?: {
2804
+ FontFamily?: string;
2805
+ FontSize?: number;
2806
+ FontStyle?: string;
2807
+ FontWeight?: string;
2808
+ FontColor?: string;
2809
+ };
2810
+ }
2811
+
2812
+ // ============================================
2813
+ // Chart PlotOptions
2814
+ // ============================================
2815
+
2816
+ /**
2817
+ * 차트 PlotOptions 인터페이스
2818
+ * @see src/control/chart/PlotOptions.ts - Serialize()
2819
+ */
2820
+ export interface IChartPlotOptions {
2821
+ /** 애니메이션 시간 (ms), 기본값: 1000 */
2822
+ Animation: number;
2823
+ /** 마우스 추적 활성화 여부, 기본값: true */
2824
+ EnableMouseTracking: boolean;
2825
+ /** 데이터 라벨 설정 */
2826
+ DataLabels: {
2827
+ /** 스태킹 방식 ("normal" | "percent"), Serialize에서 Stacking이 여기 포함됨 */
2828
+ Stacking?: string;
2829
+ /** 데이터 라벨 타입 (0:None, 1:Value, 2:ValueLabel) */
2830
+ Type?: number;
2831
+ };
2832
+ /** Null 값 연결 여부, 기본값: false */
2833
+ ConnectNulls: boolean;
2834
+ /** 데이터 라벨 겹침 허용 여부, 기본값: false */
2835
+ AllowOverlap: boolean;
2836
+ }
2837
+
2838
+ // ============================================
2839
+ // Chart Options (ChartOptions.ts Serialize 기준)
2840
+ // ============================================
2841
+
2842
+ /** 3D 옵션 (chartType=100일 때 Serialize에서 Options3d 객체로 저장) */
2843
+ export interface IChartOptions3d {
2844
+ Enabled: boolean;
2845
+ Alpha: number;
2846
+ Beta: number;
2847
+ Depth: number;
2848
+ }
2849
+
2850
+ /**
2851
+ * 차트 옵션 인터페이스 (@see ChartOptions.ts Serialize)
2852
+ * ChartType, 폰트, 테두리, 팔레트, 툴팁, 3D 등 차트 전체 설정
2853
+ */
2854
+ export interface IChartOptions {
2855
+ // --- 항상 저장되는 속성 (required) ---
2856
+ /** 차트 타입 enChartType (0:Bar, 1:StackedBar, 2:StackedPercentBar, 3:Column, 4:StackedColumn, 5:StackedPercentColumn, 6:Line, 7:Spline, 8:StackedLine, 9:StackedPercentLine, 10:Area, 11:StackedArea, 12:StackedPercentArea, 13:AreaSpline, 14:Pie, 15:BorderWidthPie, 16:DonutPie, 17:BorderWidthDonutPie, 18:Polar, 20:AreaPolar, 21:AreaRange, 22:AreaSplineRange, 23:BoxPlot, 24:Bubble, 25:ColumnRange, 26:ErrorBar, 27:Funnel, 28:Gauge, 29:HeatMap, 30:Polygon, 31:Pyramid, 32:Scatter, 33:SolidGauge, 34:TreeMap, 35:Waterfall, 36:Pie3D, 37:BorderWidthPie3D, 38:DonutPie3D, 39:BorderWidthDonutPie3D, 100:Default) */
2857
+ ChartType: number;
2858
+ /** 폰트 패밀리, 기본값: "default" */
2859
+ FontFamily: string;
2860
+ /** 폰트 색상, 기본값: "rgb(0,0,0)" */
2861
+ FontColor: string;
2862
+ /** 배경 색상, 기본값: "rgb(255,255,255)" */
2863
+ BackgroundColor: string;
2864
+ /** 테두리 색상, 기본값: "" */
2865
+ BorderColor: string;
2866
+ /** 테두리 두께 (Serialize에서 toString()으로 저장), 기본값: "3" */
2867
+ BorderWidth: string;
2868
+ /** 테두리 둥글기, 기본값: 10 */
2869
+ BorderRadius: number;
2870
+ /** 팔레트 타입 enPaletteType (-1:Custom, 0:Default, 1:Standard, 2:Office, 3:GrayScale, 4:Apex, 5:Aspect, 6:Civic, 7:Concourse, 8:Equity, 9:Flow, 10:Foundry, 11:Median, 12:Metro, 13:Module, 14:Opulent, 15:Oriel, 16:Origin, 17:Paper, 18:Solstice, 19:Technic, 20:Trek, 21:Urban, 22:Verve, 99999:None), 기본값: 0 */
2871
+ Palette: number;
2872
+ /** 툴팁 배경색, 기본값: "rgba(255, 255, 255, 0.7)" */
2873
+ TooltipBGColor: string;
2874
+ /** 계열과 범례 전환 속성, 기본값: false */
2875
+ SwitchSeriesLegend: boolean;
2876
+
2877
+ // --- 조건부 저장 속성 (optional) ---
2878
+ /** 줌 활성화 (polygon18 제외), 기본값: false */
2879
+ Zoom?: boolean;
2880
+ /** 폰트 크기 (11이 아닐 때만 저장), 기본값: 11 */
2881
+ FontSize?: number;
2882
+ /** 폰트 기울임 (true일 때만 저장), 기본값: false */
2883
+ FontItalic?: boolean;
2884
+ /** 폰트 굵게 (true일 때만 저장), 기본값: false */
2885
+ FontBold?: boolean;
2886
+ /** 툴팁 사용 여부, 기본값: true */
2887
+ Tooltip?: boolean;
2888
+ /** 축 반전 (line 계열만), 기본값: false */
2889
+ Inverted?: boolean;
2890
+ /** 툴팁 포매터 (빈 문자열이 아닐 때만 저장) */
2891
+ TooltipFormatter?: string;
2892
+ /** 툴팁 공유 여부 (chartType 100/18일 때), 기본값: false */
2893
+ TooltipShared?: boolean;
2894
+ /** 툴팁 공유 유형 (0:default, 1:crosshairs, 2:split, 3:split-crosshairs) */
2895
+ TooltipSharedType?: number;
2896
+ /** 차트 유형 변경 메뉴 사용 여부 (chartType 100/18일 때), 기본값: true */
2897
+ UseChartTypeMenu?: boolean;
2898
+ /** 차트 마진 (CSV 형식 "top,right,bottom,left") */
2899
+ Margin?: string;
2900
+ /** 3D 옵션 (chartType 100일 때만) */
2901
+ Options3d?: IChartOptions3d;
2902
+ /** 차트 팔레트 메뉴 사용 여부, 기본값: true */
2903
+ UseChartPaletteMenu?: boolean;
2904
+ /** 디자인 메뉴 사용 여부, 기본값: false */
2905
+ UseDesignMenu?: boolean;
2906
+ /** 엑셀 내보내기 사용 여부, 기본값: true */
2907
+ UseExcelExport?: boolean;
2908
+ /** HML 내보내기 사용 여부, 기본값: true */
2909
+ UseHMLExport?: boolean;
2910
+ /** PPT 내보내기 사용 여부, 기본값: true */
2911
+ UsePPTExport?: boolean;
2912
+ /** DOC 내보내기 사용 여부, 기본값: true */
2913
+ UseDOCExport?: boolean;
2914
+ /** 사용자 정의 팔레트 (CSV 문자열로 저장) */
2915
+ CustomPalatte?: string;
2916
+ }
2917
+
2524
2918
  // ============================================
2525
2919
  // Chart Element (Chart, PieChart, ScatterChart, PolygonChart 공통)
2526
2920
  // ============================================
@@ -2535,28 +2929,28 @@ export interface IChartElement extends IBaseElement {
2535
2929
  Type: 'Chart' | 'PieChart' | 'ScatterChart' | 'PolygonChart';
2536
2930
  /** 바인딩할 데이터소스 이름 */
2537
2931
  DataSource?: string;
2538
- /** 보고서 로딩 시 데이터 조회 여부 */
2539
- AutoRefresh?: boolean;
2540
- /** 수동 새로고침 버튼 표시 여부 */
2541
- DoRefresh?: boolean;
2542
- /** 파일 내보내기(다운로드) 가능 여부 */
2543
- DoExport?: boolean;
2932
+ /** 보고서 로딩 시 데이터 조회 여부, 기본값: false */
2933
+ AutoRefresh: boolean;
2934
+ /** 수동 새로고침 버튼 표시 여부, 기본값: true */
2935
+ DoRefresh: boolean;
2936
+ /** 파일 내보내기(다운로드) 가능 여부, 기본값: true */
2937
+ DoExport: boolean;
2544
2938
  /** 연결된 피벗 그리드 컨트롤 이름 */
2545
2939
  PivotGrid?: string;
2546
2940
  /** 연결된 데이터 그리드 컨트롤 이름 */
2547
2941
  DataGrid?: string;
2548
- /** 차트 옵션 (ChartType, SubChartType 등) */
2549
- Chart?: object;
2550
- /** 축 설정 (XAxis, Y1Axis, Y2Axis) */
2551
- Axis?: object;
2552
- /** 플롯 옵션 */
2553
- PlotOptions?: object;
2554
- /** 차트 제목 설정 */
2555
- Title?: object;
2556
- /** 범례 설정 */
2557
- Legend?: object;
2558
- /** 시리즈 배열 */
2559
- SeriesSet?: any[];
2942
+ /** 차트 옵션 (@see ChartOptions.ts Serialize: ChartType, 폰트, 테두리, 팔레트, 툴팁 등) */
2943
+ Chart?: IChartOptions;
2944
+ /** 축 설정 (@see Chart.ts Serialize: { XAxis, Y1Axis, Y2Axis }) */
2945
+ Axis?: IChartAxis;
2946
+ /** 플롯 옵션 (Serialize: Animation, EnableMouseTracking, DataLabels, ConnectNulls, AllowOverlap) */
2947
+ PlotOptions: IChartPlotOptions;
2948
+ /** 차트 제목 설정 (@see Title.ts Serialize: Text, LanguageCode, Style?) */
2949
+ Title?: IChartTitle;
2950
+ /** 범례 설정 (@see Legend.ts Serialize: 기본값과 다른 속성만 저장) */
2951
+ Legend?: IChartLegend;
2952
+ /** 시리즈 배열 (@see Series.ts Serialize) */
2953
+ SeriesSet?: IChartSeriesItem[];
2560
2954
  }
2561
2955
 
2562
2956
  // ============================================
@@ -2576,18 +2970,16 @@ export interface ITreeGridElement extends IBaseElement {
2576
2970
  Columns?: IGridColumn[];
2577
2971
  /** 바인딩할 데이터소스 이름 */
2578
2972
  DataSource?: string;
2579
- /** 보고서 로딩 시 데이터 조회 여부 */
2580
- AutoRefresh?: boolean;
2581
- /** 수동 새로고침 버튼 표시 여부 */
2582
- DoRefresh?: boolean;
2583
- /** 파일 내보내기(다운로드) 가능 여부 */
2584
- DoExport?: boolean;
2973
+ /** 보고서 로딩 시 데이터 조회 여부, 기본값: false */
2974
+ AutoRefresh: boolean;
2975
+ /** 수동 새로고침 버튼 표시 여부, 기본값: true */
2976
+ DoRefresh: boolean;
2977
+ /** 파일 내보내기(다운로드) 가능 여부, 기본값: true */
2978
+ DoExport: boolean;
2585
2979
  /** 트리 들여쓰기 여백 (px) */
2586
2980
  TreeMargin?: number;
2587
- /** 토글 버튼 크기 (px) */
2588
- ToggleBtnSize?: number;
2589
- /** 트리 설정 (계층 구조 정의) */
2590
- TreeInfo?: object;
2981
+ /** 확장/축소 버튼 크기 (px), 기본값 : 10 */
2982
+ ToggleBtnSize: number;
2591
2983
  /** 자동 확장 레벨 */
2592
2984
  AutoExpandLevel?: number;
2593
2985
  /** 들여쓰기 폭 (px) */
@@ -2629,8 +3021,8 @@ export interface IiGridElement extends IBaseElement {
2629
3021
  /** 고정 열 수 */
2630
3022
  FreezeColumn?: number;
2631
3023
  /** 자식 컨트롤 배열 */
2632
- Controls?: any[];
2633
- }
3024
+ Controls?: IElement[];
3025
+ }
2634
3026
 
2635
3027
  // ============================================
2636
3028
  // TableLayout Element
@@ -2791,8 +3183,8 @@ export interface ITabElement extends IBaseElement {
2791
3183
  Type: 'Tab';
2792
3184
  /** 탭 속성 (버튼 위치, 스타일, 내보내기 설정 등) */
2793
3185
  Property: ITabProperty;
2794
- /** 파일 내보내기(다운로드) 가능 여부 */
2795
- DoExport?: boolean;
3186
+ /** 파일 내보내기(다운로드) 가능 여부, 기본값: true */
3187
+ DoExport: boolean;
2796
3188
  /** 탭 아이템 배열 (각 탭 페이지와 자식 컨트롤) */
2797
3189
  TabItems: ITabItem[];
2798
3190
  }
@@ -2861,10 +3253,10 @@ export interface IColorSelectorElement extends IBaseElement {
2861
3253
  */
2862
3254
  export interface IFileUploadButtonElement extends IBaseElement {
2863
3255
  Type: 'FileUploadButton';
2864
- /** 버튼 텍스트 */
2865
- Value?: string;
2866
- /** 마우스 커서 스타일 */
2867
- Cursor?: string;
3256
+ /** 버튼 텍스트, 기본값 : upload */
3257
+ Value: string;
3258
+ /** 마우스 커서 스타일 기본값 : "pointer" */
3259
+ Cursor: string;
2868
3260
  /** 허용 파일 확장자 (예: ".xlsx,.csv") */
2869
3261
  AllowExt?: string;
2870
3262
  /** 업로드 크기 제한 (bytes) */
@@ -2906,10 +3298,10 @@ export interface IWebContainerElement extends IBaseElement {
2906
3298
  Type: 'WebContainer';
2907
3299
  /** 대상 URL */
2908
3300
  TargetURL?: string;
2909
- /** 보고서 로딩 시 자동 로딩 여부 */
2910
- AutoRefresh?: boolean;
2911
- /** 수동 새로고침 버튼 표시 여부 */
2912
- DoRefresh?: boolean;
3301
+ /** 보고서 로딩 시 자동 로딩 여부, 기본값: false */
3302
+ AutoRefresh: boolean;
3303
+ /** 수동 새로고침 버튼 표시 여부, 기본값: true */
3304
+ DoRefresh: boolean;
2913
3305
  }
2914
3306
 
2915
3307
  // ============================================
@@ -379,7 +379,7 @@
379
379
  "DataGridElement": {
380
380
  "type": "object",
381
381
  "description": "데이터 그리드 컨트롤",
382
- "required": ["CellMargin", "Columns", "UsePPTExport"],
382
+ "required": ["CellMargin", "Columns", "UsePPTExport", "AutoRefresh", "DoRefresh", "DoExport", "ColumnHeaderHeight", "RowHeight", "ShowHeader", "SelectRule"],
383
383
  "properties": {
384
384
  "CellMargin": { "type": "string", "description": "셀 내부 여백" },
385
385
  "Columns": { "type": "array", "items": { "$ref": "#/$defs/GridColumn" } },
@@ -390,11 +390,11 @@
390
390
  "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 (기본값: true)" },
391
391
  "DoExport": { "type": "boolean", "description": "내보내기 버튼 (기본값: true)" },
392
392
  "HoldSize": { "type": "boolean", "description": "크기 유지 (기본값: false)" },
393
- "ShowHeader": { "type": "integer", "description": "헤더 표시 방식 (기본값: enHeaderType.All)" },
393
+ "ShowHeader": { "type": "integer", "enum": [0, 1, 2, 3], "description": "헤더 표시 방식 (0:None-숨김, 1:Row헤더만, 2:Column헤더만, 3:Row&Column 헤더, 기본값: 3)" },
394
394
  "RowHeaderPosition": { "type": "string", "description": "행 헤더 텍스트 정렬" },
395
395
  "ShowHorizontalScrollBar": { "type": "integer", "description": "가로 스크롤바 (기본값: Auto)" },
396
396
  "ShowVerticalScrollBar": { "type": "integer", "description": "세로 스크롤바 (기본값: Auto)" },
397
- "SelectRule": { "type": "integer", "description": " 선택 규칙 (기본값: SingleRow)" },
397
+ "SelectRule": { "type": "integer", "enum": [0, 1, 2, 3], "description": "마우스 영역 선택 규칙 (0:SingleRow, 1:MultiRow, 2:SingleRange, 3:SingleCell, 기본값: 2)" },
398
398
  "ViewLineNumber": { "type": "boolean", "description": "행 번호 표시 (기본값: true)" },
399
399
  "EnterKeyDirection": { "type": "integer", "description": "Enter 키 이동 방향" },
400
400
  "UseClipboard": { "type": "boolean", "description": "클립보드 사용 (기본값: true)" },
@@ -403,8 +403,8 @@
403
403
  "UseTooltip": { "type": "boolean", "description": "툴팁 사용 (기본값: true)" },
404
404
  "NaNCellText": { "type": "string", "description": "NaN 셀 텍스트 (기본값: NaN)" },
405
405
  "RowHeaderWidth": { "type": "number", "description": "행 헤더 너비 (기본값: 0)" },
406
- "ColumnHeaderHeight": { "type": "number", "description": "헤더 행 높이 (기본값: 0)" },
407
- "RowHeight": { "type": "number", "description": "데이터 행 높이 (기본값: 0)" },
406
+ "ColumnHeaderHeight": { "type": "number", "description": "헤더 행 높이 (픽셀, 기본값: 28)" },
407
+ "RowHeight": { "type": "number", "description": "데이터 행 높이 (픽셀, 기본값: 24)" },
408
408
  "TopRowDataSource": { "type": "string", "description": "상단 행 데이터소스" },
409
409
  "UseTopRowStyle": { "type": "boolean", "description": "상단 행 스타일 사용 (기본값: false)" },
410
410
  "BottomRowDataSource": { "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", "AfterRefresh", "UseAllItems", "UseAllItemsText", "DisplayType", "DataSourceInfo", "InitValue"],
518
+ "required": ["DataSource", "Value", "Text", "InitType", "RefreshType", "IsReadOnly", "SortType", "AutoRefresh", "DoRefresh", "AfterRefresh", "UseAllItems", "UseAllItemsText", "DisplayType", "DataSourceInfo", "InitValue"],
519
519
  "properties": {
520
520
  "DataSource": { "type": "string", "description": "데이터소스 이름" },
521
521
  "Value": { "type": "string", "description": "선택된 값" },
@@ -524,7 +524,8 @@
524
524
  "RefreshType": { "type": "integer", "description": "새로고침 타입" },
525
525
  "IsReadOnly": { "type": "boolean", "description": "읽기 전용" },
526
526
  "SortType": { "type": "integer", "description": "정렬 타입" },
527
- "AutoRefresh": { "type": "boolean", "description": "자동 새로고침" },
527
+ "AutoRefresh": { "type": "boolean", "description": "자동 새로고침 (기본값: true)" },
528
+ "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 (기본값: false)" },
528
529
  "AfterRefresh": { "type": "string", "description": "새로고침 후 호출 함수" },
529
530
  "UseAllItems": { "type": "boolean", "description": "전체 항목 사용" },
530
531
  "UseAllItemsText": { "type": "string", "description": "전체 항목 텍스트" },
@@ -578,8 +579,8 @@
578
579
  "description": "보고서 컨테이너 컨트롤 (Type='UserComponent'로 저장)",
579
580
  "required": ["DoRefresh", "DoExport", "ReportInfo", "ExternalReportInfo"],
580
581
  "properties": {
581
- "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 표시" },
582
- "DoExport": { "type": "boolean", "description": "내보내기 버튼 표시" },
582
+ "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 표시 (기본값: true)" },
583
+ "DoExport": { "type": "boolean", "description": "내보내기 버튼 표시 (기본값: true)" },
583
584
  "ReportInfo": { "$ref": "#/$defs/ContainerReportInfo", "description": "포함된 보고서 정보" },
584
585
  "ExternalReportInfo": { "description": "외부 보고서 정보" }
585
586
  }
@@ -587,12 +588,13 @@
587
588
  "OlapGridElement": {
588
589
  "type": "object",
589
590
  "description": "OLAP 피벗 그리드 컨트롤",
591
+ "required": ["AutoRefresh", "DoRefresh", "DoExport"],
590
592
  "properties": {
591
593
  "DataSource": { "type": "string", "description": "바인딩할 데이터소스 이름" },
592
594
  "ServerScript": { "type": "string", "description": "서버 스크립트 이름" },
593
- "AutoRefresh": { "type": "boolean", "description": "보고서 로딩 시 데이터 조회 여부" },
594
- "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 표시 여부" },
595
- "DoExport": { "type": "boolean", "description": "파일 내보내기(다운로드) 가능 여부" },
595
+ "AutoRefresh": { "type": "boolean", "description": "보고서 로딩 시 데이터 조회 여부 (기본값: false)" },
596
+ "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 표시 여부 (기본값: true)" },
597
+ "DoExport": { "type": "boolean", "description": "파일 내보내기(다운로드) 가능 여부 (기본값: true)" },
596
598
  "iOLAPView": { "$ref": "#/$defs/OlapViewModel", "description": "iOLAP 뷰 모델 직렬화 데이터" },
597
599
  "ExtraOption": { "$ref": "#/$defs/OlapGridExtraOption", "description": "OLAP 그리드 추가 옵션" }
598
600
  }
@@ -627,16 +629,17 @@
627
629
  "MultiComboBoxElement": {
628
630
  "type": "object",
629
631
  "description": "다중 선택 콤보박스 컨트롤",
632
+ "required": ["InitType", "RefreshType", "AutoRefresh"],
630
633
  "properties": {
631
634
  "DataSource": { "type": "string", "description": "데이터소스 이름" },
632
635
  "EditValue": { "type": "string", "description": "선택된 값 (쉼표 구분)" },
633
636
  "CaptionText": { "type": "string", "description": "캡션 텍스트" },
634
- "InitType": { "description": "초기화 타입" },
637
+ "InitType": { "type": "integer", "enum": [0, 1, 2], "description": "데이터 조회 후 초기값 설정 방식 (0:CurrentValue, 1:InitValue로 초기화, 2:없음, 기본값: 0)" },
635
638
  "InitValue": { "type": "string", "description": "초기값" },
636
- "RefreshType": { "description": "새로고침 타입" },
639
+ "RefreshType": { "type": "integer", "enum": [0, 1, 2], "description": "새로고침 타입 (0:None-클릭 시 조회 안함, 1:FirstTime-최초 한번만 조회, 2:EveryTime-클릭할 때마다 조회, 기본값: 1)" },
637
640
  "IsReadOnly": { "type": "boolean", "description": "읽기 전용" },
638
641
  "SortType": { "description": "정렬 타입" },
639
- "AutoRefresh": { "type": "boolean", "description": "자동 새로고침" },
642
+ "AutoRefresh": { "type": "boolean", "description": "보고서 로딩 시 데이터 조회 여부 (기본값: false)" },
640
643
  "AfterRefresh": { "type": "string", "description": "새로고침 후 호출 함수" },
641
644
  "IsMultiSelect": { "type": "boolean", "description": "다중 선택 여부" },
642
645
  "AutoExpandLevel": { "type": "number", "description": "트리 자동 확장 레벨" },
@@ -751,10 +754,10 @@
751
754
  "TabElement": {
752
755
  "type": "object",
753
756
  "description": "탭 컨테이너 컨트롤",
754
- "required": ["Property", "TabItems"],
757
+ "required": ["Property", "TabItems", "DoExport"],
755
758
  "properties": {
756
759
  "Property": { "$ref": "#/$defs/TabProperty", "description": "탭 속성 (버튼 위치, 스타일, 내보내기 설정 등)" },
757
- "DoExport": { "type": "boolean", "description": "내보내기 버튼 표시" },
760
+ "DoExport": { "type": "boolean", "description": "내보내기 버튼 표시 (기본값: true)" },
758
761
  "TabItems": {
759
762
  "type": "array",
760
763
  "description": "탭 아이템 배열 (각 탭 페이지와 자식 컨트롤)",
@@ -780,34 +783,296 @@
780
783
  "ChartElement": {
781
784
  "type": "object",
782
785
  "description": "차트 컨트롤 (Chart, PieChart, ScatterChart, PolygonChart 공통)",
786
+ "required": ["AutoRefresh", "DoRefresh", "DoExport", "PlotOptions"],
783
787
  "properties": {
784
788
  "DataSource": { "type": "string", "description": "데이터소스 코드" },
785
- "AutoRefresh": { "type": "boolean", "description": "자동 새로고침" },
786
- "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼" },
787
- "DoExport": { "type": "boolean", "description": "내보내기 버튼" },
789
+ "AutoRefresh": { "type": "boolean", "description": "자동 새로고침 (기본값: false)" },
790
+ "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 (기본값: true)" },
791
+ "DoExport": { "type": "boolean", "description": "내보내기 버튼 (기본값: true)" },
788
792
  "PivotGrid": { "type": "string", "description": "피벗 그리드 컨트롤 이름" },
789
793
  "DataGrid": { "type": "string", "description": "데이터 그리드 컨트롤 이름" },
790
- "Chart": { "type": "object", "description": "차트 옵션 (ChartType 등)" },
791
- "Axis": { "type": "object", "description": "축 설정 (XAxis, Y1Axis, Y2Axis)" },
792
- "PlotOptions": { "type": "object", "description": "플롯 옵션" },
793
- "Title": { "type": "object", "description": "차트 제목" },
794
- "Legend": { "type": "object", "description": "범례 설정" },
795
- "SeriesSet": { "type": "array", "description": "시리즈 배열" }
794
+ "Chart": {
795
+ "type": "object",
796
+ "description": "차트 옵션 (ChartOptions.ts Serialize 기준)",
797
+ "required": ["ChartType", "FontFamily", "FontColor", "BackgroundColor", "BorderColor", "BorderWidth", "BorderRadius", "Palette", "TooltipBGColor", "SwitchSeriesLegend"],
798
+ "properties": {
799
+ "ChartType": { "type": "integer", "enum": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,100], "description": "차트 타입 enChartType (0:Bar, 3:Column, 6:Line, 7:Spline, 10:Area, 14:Pie, 18:Polar, 24:Bubble, 32:Scatter, 100:Default)" },
800
+ "FontFamily": { "type": "string", "description": "폰트 패밀리 (기본값: default)" },
801
+ "FontColor": { "type": "string", "description": "폰트 색상 (기본값: rgb(0,0,0))" },
802
+ "BackgroundColor": { "type": "string", "description": "배경 색상 (기본값: rgb(255,255,255))" },
803
+ "BorderColor": { "type": "string", "description": "테두리 색상 (기본값: \"\")" },
804
+ "BorderWidth": { "type": "string", "description": "테두리 두께, toString()으로 저장 (기본값: \"3\")" },
805
+ "BorderRadius": { "type": "number", "description": "테두리 둥글기 (기본값: 10)" },
806
+ "Palette": { "type": "integer", "enum": [-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,99999], "description": "팔레트 타입 enPaletteType (-1:Custom, 0:Default, 1:Standard, 2:Office, ..., 22:Verve, 99999:None)" },
807
+ "TooltipBGColor": { "type": "string", "description": "툴팁 배경색 (기본값: rgba(255, 255, 255, 0.7))" },
808
+ "SwitchSeriesLegend": { "type": "boolean", "description": "계열과 범례 전환 속성 (기본값: false)" },
809
+ "Zoom": { "type": "boolean", "description": "줌 활성화, polygon 제외 (기본값: false)" },
810
+ "FontSize": { "type": "number", "description": "폰트 크기, 11이 아닐 때만 저장 (기본값: 11)" },
811
+ "FontItalic": { "type": "boolean", "description": "폰트 기울임 (기본값: false)" },
812
+ "FontBold": { "type": "boolean", "description": "폰트 굵게 (기본값: false)" },
813
+ "Tooltip": { "type": "boolean", "description": "툴팁 사용 여부 (기본값: true)" },
814
+ "Inverted": { "type": "boolean", "description": "축 반전, line 계열만 (기본값: false)" },
815
+ "TooltipFormatter": { "type": "string", "description": "툴팁 포매터 문자열" },
816
+ "TooltipShared": { "type": "boolean", "description": "툴팁 공유 여부 (기본값: false)" },
817
+ "TooltipSharedType": { "type": "integer", "enum": [0, 1, 2, 3], "description": "툴팁 공유 유형 (0:default, 1:crosshairs, 2:split, 3:split-crosshairs)" },
818
+ "UseChartTypeMenu": { "type": "boolean", "description": "차트 유형 메뉴 사용 여부 (기본값: true)" },
819
+ "Margin": { "type": "string", "description": "차트 마진 CSV (top,right,bottom,left)" },
820
+ "Options3d": {
821
+ "type": "object",
822
+ "description": "3D 옵션 (chartType=100일 때만)",
823
+ "required": ["Enabled", "Alpha", "Beta", "Depth"],
824
+ "properties": {
825
+ "Enabled": { "type": "boolean", "description": "3D 활성화" },
826
+ "Alpha": { "type": "number", "description": "3D 알파 각도 (기본값: 15)" },
827
+ "Beta": { "type": "number", "description": "3D 베타 각도 (기본값: 15)" },
828
+ "Depth": { "type": "number", "description": "3D 깊이 (기본값: 50)" }
829
+ }
830
+ },
831
+ "UseChartPaletteMenu": { "type": "boolean", "description": "팔레트 메뉴 사용 여부 (기본값: true)" },
832
+ "UseDesignMenu": { "type": "boolean", "description": "디자인 메뉴 사용 여부 (기본값: false)" },
833
+ "UseExcelExport": { "type": "boolean", "description": "엑셀 내보내기 (기본값: true)" },
834
+ "UseHMLExport": { "type": "boolean", "description": "HML 내보내기 (기본값: true)" },
835
+ "UsePPTExport": { "type": "boolean", "description": "PPT 내보내기 (기본값: true)" },
836
+ "UseDOCExport": { "type": "boolean", "description": "DOC 내보내기 (기본값: true)" },
837
+ "CustomPalatte": { "type": "string", "description": "사용자 정의 팔레트 (CSV 문자열)" }
838
+ }
839
+ },
840
+ "Axis": {
841
+ "type": "object",
842
+ "description": "축 설정 (Chart.ts Serialize: { XAxis, Y1Axis, Y2Axis })",
843
+ "required": ["XAxis", "Y1Axis", "Y2Axis"],
844
+ "properties": {
845
+ "XAxis": { "$ref": "#/$defs/ChartXAxis" },
846
+ "Y1Axis": { "$ref": "#/$defs/ChartYAxis" },
847
+ "Y2Axis": { "$ref": "#/$defs/ChartYAxis" }
848
+ }
849
+ },
850
+ "PlotOptions": {
851
+ "type": "object",
852
+ "description": "플롯 옵션 (PlotOptions.ts Serialize 기준)",
853
+ "required": ["Animation", "EnableMouseTracking", "DataLabels", "ConnectNulls", "AllowOverlap"],
854
+ "properties": {
855
+ "Animation": { "type": "number", "description": "애니메이션 시간 (ms, 기본값: 1000)" },
856
+ "EnableMouseTracking": { "type": "boolean", "description": "마우스 추적 활성화 (기본값: true)" },
857
+ "DataLabels": {
858
+ "type": "object",
859
+ "description": "데이터 라벨 설정",
860
+ "properties": {
861
+ "Stacking": { "type": "string", "enum": ["normal", "percent"], "description": "스태킹 방식" },
862
+ "Type": { "type": "integer", "enum": [0, 1, 2], "description": "데이터 라벨 타입 (0:None, 1:Value, 2:ValueLabel)" }
863
+ }
864
+ },
865
+ "ConnectNulls": { "type": "boolean", "description": "Null 값 연결 여부 (기본값: false)" },
866
+ "AllowOverlap": { "type": "boolean", "description": "데이터 라벨 겹침 허용 (기본값: false)" }
867
+ }
868
+ },
869
+ "Title": {
870
+ "type": "object",
871
+ "description": "차트 제목 (Title.ts Serialize 기준)",
872
+ "required": ["Text", "LanguageCode"],
873
+ "properties": {
874
+ "Text": { "type": "string", "description": "제목 텍스트 (기본값: \"\")" },
875
+ "LanguageCode": { "type": "string", "description": "다국어 코드 (기본값: \"\")" },
876
+ "Style": {
877
+ "type": "object",
878
+ "description": "폰트 스타일 (값이 있는 항목만 저장됨)",
879
+ "properties": {
880
+ "FontFamily": { "type": "string", "description": "폰트 패밀리" },
881
+ "FontSize": { "type": "number", "description": "폰트 크기" },
882
+ "FontStyle": { "type": "string", "description": "폰트 스타일 (italic 등)" },
883
+ "FontWeight": { "type": "string", "description": "폰트 굵기 (bold 등)" },
884
+ "FontColor": { "type": "string", "description": "폰트 색상" }
885
+ }
886
+ }
887
+ }
888
+ },
889
+ "Legend": {
890
+ "type": "object",
891
+ "description": "범례 설정 (Legend.ts Serialize 기준, 기본값과 다른 속성만 저장)",
892
+ "properties": {
893
+ "Align": { "type": "string", "enum": ["left", "center", "right"], "description": "수평 정렬 (기본값: center)" },
894
+ "VerticalAlign": { "type": "string", "enum": ["top", "middle", "bottom"], "description": "수직 정렬 (기본값: bottom)" },
895
+ "Layout": { "type": "string", "enum": ["horizontal", "vertical"], "description": "범례 레이아웃 (기본값: horizontal)" },
896
+ "Enabled": { "type": "boolean", "description": "범례 표시 여부 (기본값: true)" },
897
+ "BorderWidth": { "type": "string", "description": "테두리 두께" },
898
+ "BorderColor": { "type": "string", "description": "테두리 색상" },
899
+ "UseFontStyle": { "type": "boolean", "description": "폰트 스타일 사용 여부 (기본값: false)" },
900
+ "FontFamily": { "type": "string", "description": "폰트 패밀리 (기본값: default)" },
901
+ "FontSize": { "type": "number", "description": "폰트 크기 (기본값: 11)" },
902
+ "FontBold": { "type": "boolean", "description": "폰트 굵게 (기본값: false)" },
903
+ "FontItalic": { "type": "boolean", "description": "폰트 기울임 (기본값: false)" },
904
+ "FontColor": { "type": "string", "description": "폰트 색상 (기본값: rgb(0,0,0))" },
905
+ "BackgroundColor": { "type": "string", "description": "배경 색상" },
906
+ "Floating": { "type": "boolean", "description": "부유 여부 (기본값: false)" },
907
+ "X": { "type": "number", "description": "X 오프셋 (기본값: 0)" },
908
+ "Y": { "type": "number", "description": "Y 오프셋 (기본값: 0)" },
909
+ "Reversed": { "type": "boolean", "description": "범례 순서 역방향 (기본값: false)" },
910
+ "MarginTop": { "type": "number", "description": "범례 항목 상단 여백 (기본값: 2)" },
911
+ "Distance": { "type": "number", "description": "범례 항목 간격 (기본값: 20)" }
912
+ }
913
+ },
914
+ "SeriesSet": { "type": "array", "description": "시리즈 배열", "items": { "$ref": "#/$defs/ChartSeriesItem" } }
915
+ }
916
+ },
917
+ "ChartSeriesItem": {
918
+ "type": "object",
919
+ "description": "차트 시리즈 항목 (Series.ts Serialize 기준)",
920
+ "required": ["Name", "Label", "Type", "BackgroundColor", "Axis", "ValueField", "DataType", "UsedNumberSeries", "CreateType", "Format", "BorderWidth", "BorderColor", "Unit", "X", "Y", "UsePointer", "ShowInLegend", "ColorByPoint"],
921
+ "properties": {
922
+ "Name": { "type": "string", "description": "시리즈 이름" },
923
+ "Label": { "type": "string", "description": "시리즈 라벨 (범례 표시명)" },
924
+ "Type": { "type": "integer", "description": "차트 타입 (enChartType, 0:Default=메인 차트 유형 따름)" },
925
+ "BackgroundColor": { "type": "string", "description": "시리즈 배경색" },
926
+ "Axis": { "type": "integer", "description": "사용 축 (0:Y1Axis, 1:Y2Axis)" },
927
+ "ValueField": { "type": "string", "description": "값 필드명" },
928
+ "DataType": { "type": "integer", "description": "데이터 타입 (0:Dimension, 1:Measure)" },
929
+ "UsedNumberSeries": { "type": "boolean", "description": "필드 리스트 사용 여부" },
930
+ "CreateType": { "type": "integer", "description": "생성 타입 (0:Data, 1:Custom)" },
931
+ "Format": { "type": "string", "description": "표시 포맷" },
932
+ "BorderWidth": { "type": "string", "description": "테두리 두께 (bar/column)" },
933
+ "BorderColor": { "type": "string", "description": "테두리 색상 (bar/column)" },
934
+ "Unit": { "type": "number", "description": "단위" },
935
+ "X": { "type": "number", "description": "X 오프셋" },
936
+ "Y": { "type": "number", "description": "Y 오프셋" },
937
+ "UsePointer": { "type": "boolean", "description": "Cursor Pointer 사용 (기본값: false)" },
938
+ "ShowInLegend": { "type": "boolean", "description": "범례 표시 (기본값: true)" },
939
+ "ColorByPoint": { "type": "boolean", "description": "단일 색상 지정 (기본값: false)" },
940
+ "Visible": { "type": "boolean", "description": "표시 여부 (false일 때만 저장)" },
941
+ "SymbolType": { "type": "string", "description": "심볼 유형 (Line계열, 기본값: circle)" },
942
+ "SymbolRadius": { "type": "number", "description": "심볼 크기" },
943
+ "SymbolColor": { "type": "string", "description": "심볼 색" },
944
+ "DashStyle": { "type": "integer", "description": "대시 스타일 (Line/Spline)" },
945
+ "LineWidth": { "type": "number", "description": "라인 두께" },
946
+ "Align": { "type": "integer", "description": "정렬" },
947
+ "LanguageCode": { "type": "string", "description": "다국어 코드" },
948
+ "DataLabelField": { "type": "string", "description": "데이터 라벨 필드" },
949
+ "X2Axis": { "type": "boolean", "description": "X2축 사용 (bar)" },
950
+ "Sequence": { "type": "integer", "description": "표시 순서" },
951
+ "DataLabelsVisible": { "type": "boolean", "description": "데이터 라벨 표시" },
952
+ "DataLabelsColorBySeries": { "type": "boolean", "description": "데이터 라벨 테두리 색상을 계열 색상으로" },
953
+ "DataLabelsFormula": { "type": "string", "description": "데이터 라벨 수식" },
954
+ "PointWidth": { "type": "number", "description": "막대 너비 (column/bar)" },
955
+ "SymbolLineWidth": { "type": "number", "description": "심볼 테두리 두께" },
956
+ "SymbolLineColor": { "type": "string", "description": "심볼 테두리 색" },
957
+ "DataLabels": {
958
+ "type": "object",
959
+ "description": "데이터 라벨 스타일",
960
+ "properties": {
961
+ "Style": { "type": "string", "description": "스타일 (JSON 문자열)" }
962
+ }
963
+ }
796
964
  }
797
965
  },
966
+ "ChartAxisLabel": {
967
+ "type": "object",
968
+ "description": "축 라벨 설정",
969
+ "properties": {
970
+ "FontSize": { "type": "number", "description": "폰트 크기" },
971
+ "FontFamily": { "type": "string", "description": "폰트 패밀리" },
972
+ "FontBold": { "type": "boolean", "description": "폰트 굵게" },
973
+ "FontItalic": { "type": "boolean", "description": "폰트 기울임" },
974
+ "FontColor": { "type": "string", "description": "폰트 색상" },
975
+ "LabelAngle": { "type": "string", "description": "라벨 표시 각도" },
976
+ "LabelsX": { "type": "number", "description": "라벨 X 좌표" },
977
+ "LabelsY": { "type": "number", "description": "라벨 Y 좌표" },
978
+ "AnnoFormat": { "type": "string", "description": "라벨 포맷" }
979
+ }
980
+ },
981
+ "ChartAxisBase": {
982
+ "type": "object",
983
+ "description": "차트 축 공통 속성",
984
+ "required": ["Text", "Visible"],
985
+ "properties": {
986
+ "Text": { "type": "string", "description": "축 제목 텍스트" },
987
+ "Visible": { "type": "boolean", "description": "축 표시 여부" },
988
+ "Name": { "type": "string", "description": "축 이름" },
989
+ "AutoTickInterval": { "type": "boolean", "description": "주 눈금 자동 간격" },
990
+ "TickInterval": { "type": "string", "description": "주 눈금 간격 값" },
991
+ "UseMinorTickInterval": { "type": "boolean", "description": "보조 눈금 사용 여부" },
992
+ "AutoMinorTickInterval": { "type": "boolean", "description": "보조 눈금 자동 간격" },
993
+ "MinorTickInterval": { "type": "string", "description": "보조 눈금 간격 값" },
994
+ "AutoMax": { "type": "boolean", "description": "최대값 자동" },
995
+ "AutoMin": { "type": "boolean", "description": "최소값 자동" },
996
+ "MaxValue": { "type": "number", "description": "최대값" },
997
+ "MinValue": { "type": "number", "description": "최소값" },
998
+ "GridLineColor": { "type": "string", "description": "주 눈금선 색" },
999
+ "GridLineWidth": { "type": "number", "description": "주 눈금선 두께" },
1000
+ "GridLineStyle": { "type": "number", "description": "주 눈금선 스타일" },
1001
+ "MinorGridLineColor": { "type": "string", "description": "보조 눈금선 색" },
1002
+ "MinorGridLineWidth": { "type": "number", "description": "보조 눈금선 두께" },
1003
+ "MinorGridLineStyle": { "type": "number", "description": "보조 눈금선 스타일" },
1004
+ "Categories": { "type": "array", "items": { "type": "string" }, "description": "사용자 지정 카테고리" },
1005
+ "DefinedItems": { "type": "string", "description": "사용자 지정 항목" },
1006
+ "LanguageCode": { "type": "string", "description": "다국어 코드" },
1007
+ "AnnoFormat": { "type": "string", "description": "레이블 포맷" },
1008
+ "Label": { "$ref": "#/$defs/ChartAxisLabel" },
1009
+ "PlotLinesWidth": { "type": "number", "description": "PlotLines 선 두께" },
1010
+ "PlotLinesColor": { "type": "string", "description": "PlotLines 선 색" },
1011
+ "PlotLinesValue": { "type": "number", "description": "PlotLines 기준 값" },
1012
+ "PlotLinesDashStyle": { "type": "string", "description": "PlotLines 선 스타일" },
1013
+ "PlotLinesValueVisibled": { "type": "boolean", "description": "PlotLines 값 표시 여부" },
1014
+ "Caption": { "type": "string", "description": "축 캡션" },
1015
+ "TitleLabelAngle": { "type": "number", "description": "축 제목 라벨 각도" },
1016
+ "PlotBands": {
1017
+ "type": "array",
1018
+ "description": "PlotBands 배열 (IPlotBand)",
1019
+ "items": {
1020
+ "type": "object",
1021
+ "required": ["color", "from", "to"],
1022
+ "properties": {
1023
+ "color": { "type": "string", "description": "영역 색상" },
1024
+ "from": { "type": "number", "description": "시작 값" },
1025
+ "to": { "type": "number", "description": "끝 값" }
1026
+ }
1027
+ }
1028
+ },
1029
+ "TickColor": { "type": "string", "description": "눈금 색상" },
1030
+ "TickWidth": { "type": "number", "description": "눈금 두께" }
1031
+ }
1032
+ },
1033
+ "ChartXAxis": {
1034
+ "description": "X축 (XAxis.ts Serialize 기준)",
1035
+ "allOf": [
1036
+ { "$ref": "#/$defs/ChartAxisBase" },
1037
+ {
1038
+ "type": "object",
1039
+ "properties": {
1040
+ "GroupField": { "type": "string", "description": "그룹 필드명" },
1041
+ "GroupFontColor": { "type": "string", "description": "그룹 폰트 색상" },
1042
+ "GroupFontSize": { "type": "number", "description": "그룹 폰트 크기" },
1043
+ "GroupFontFamily": { "type": "string", "description": "그룹 폰트 패밀리" },
1044
+ "GroupFontItalic": { "type": "boolean", "description": "그룹 폰트 기울임" },
1045
+ "GroupFontBold": { "type": "boolean", "description": "그룹 폰트 굵게" }
1046
+ }
1047
+ }
1048
+ ]
1049
+ },
1050
+ "ChartYAxis": {
1051
+ "description": "Y축 (YAxis.ts Serialize 기준)",
1052
+ "allOf": [
1053
+ { "$ref": "#/$defs/ChartAxisBase" },
1054
+ {
1055
+ "type": "object",
1056
+ "properties": {
1057
+ "Opposite": { "type": "boolean", "description": "축 반대편 배치 (Y2: true)" },
1058
+ "GridLineInterpolation": { "type": "string", "description": "그리드 라인 보간 (polygon용)" }
1059
+ }
1060
+ }
1061
+ ]
1062
+ },
798
1063
  "TreeGridElement": {
799
1064
  "type": "object",
800
1065
  "description": "트리 구조 그리드 컨트롤",
1066
+ "required": ["AutoRefresh", "DoRefresh", "DoExport", "ToggleBtnSize"],
801
1067
  "properties": {
802
1068
  "CellMargin": { "type": "string", "description": "셀 내부 여백" },
803
1069
  "Columns": { "type": "array", "items": { "$ref": "#/$defs/GridColumn" } },
804
1070
  "DataSource": { "type": "string", "description": "바인딩할 데이터소스" },
805
- "AutoRefresh": { "type": "boolean", "description": "자동 새로고침" },
806
- "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼" },
807
- "DoExport": { "type": "boolean", "description": "내보내기 버튼" },
1071
+ "AutoRefresh": { "type": "boolean", "description": "자동 새로고침 (기본값: false)" },
1072
+ "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 (기본값: true)" },
1073
+ "DoExport": { "type": "boolean", "description": "내보내기 버튼 (기본값: true)" },
808
1074
  "TreeMargin": { "type": "number", "description": "트리 들여쓰기 여백" },
809
- "ToggleBtnSize": { "type": "number", "description": "토글 버튼 크기" },
810
- "TreeInfo": { "type": "object", "description": "트리 설정 (계층 구조 정의)" },
1075
+ "ToggleBtnSize": { "type": "number", "description": "확장/축소 버튼 크기 (px, 기본값: 10)" },
811
1076
  "AutoExpandLevel": { "type": "number", "description": "자동 확장 레벨" },
812
1077
  "IndentWidth": { "type": "number", "description": "들여쓰기 폭" },
813
1078
  "MaxLevel": { "type": "number", "description": "최대 레벨 수" },
@@ -817,18 +1082,23 @@
817
1082
  "iGridElement": {
818
1083
  "type": "object",
819
1084
  "description": "인터랙티브 그리드 (MXGrid) 컨트롤",
1085
+ "required": ["AutoRefresh", "DoRefresh", "DoExport"],
820
1086
  "properties": {
821
1087
  "ServerScript": { "type": "string", "description": "서버 스크립트 이름" },
822
- "AutoRefresh": { "type": "boolean", "description": "자동 새로고침" },
823
- "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼" },
824
- "DoExport": { "type": "boolean", "description": "내보내기 버튼" },
1088
+ "AutoRefresh": { "type": "boolean", "description": "자동 새로고침 (기본값: false)" },
1089
+ "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 (기본값: true)" },
1090
+ "DoExport": { "type": "boolean", "description": "내보내기 버튼 (기본값: true)" },
825
1091
  "TemplateCode": { "type": "string", "description": "템플릿 코드" },
826
1092
  "ActiveSheet": { "type": "string", "description": "활성 시트" },
827
1093
  "UseMultiSheet": { "type": "boolean", "description": "다중 시트 사용" },
828
1094
  "EnableZoom": { "type": "boolean", "description": "줌 활성화" },
829
1095
  "FreezeRow": { "type": "number", "description": "고정 행 수" },
830
1096
  "FreezeColumn": { "type": "number", "description": "고정 열 수" },
831
- "Controls": { "type": "array", "description": "자식 컨트롤 배열" }
1097
+ "Controls": {
1098
+ "type": "array",
1099
+ "items": { "$ref": "#/$defs/Element" },
1100
+ "description": "자식 컨트롤 배열 (IElement[])"
1101
+ }
832
1102
  }
833
1103
  },
834
1104
  "TableLayoutElement": {
@@ -847,10 +1117,11 @@
847
1117
  "WebContainerElement": {
848
1118
  "type": "object",
849
1119
  "description": "웹 브라우저 컨테이너 컨트롤",
1120
+ "required": ["AutoRefresh", "DoRefresh"],
850
1121
  "properties": {
851
1122
  "TargetURL": { "type": "string", "description": "대상 URL" },
852
- "AutoRefresh": { "type": "boolean", "description": "자동 새로고침" },
853
- "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼" }
1123
+ "AutoRefresh": { "type": "boolean", "description": "보고서 로딩 시 자동 로딩 여부 (기본값: false)" },
1124
+ "DoRefresh": { "type": "boolean", "description": "수동 새로고침 버튼 표시 여부 (기본값: true)" }
854
1125
  }
855
1126
  },
856
1127
  "SliderElement": {
@@ -890,10 +1161,11 @@
890
1161
  "FileUploadButtonElement": {
891
1162
  "type": "object",
892
1163
  "description": "파일 업로드 버튼 컨트롤",
1164
+ "required": ["Value", "Cursor"],
893
1165
  "properties": {
894
1166
  "LanguageCode": { "type": "string", "description": "다국어 키 코드" },
895
- "Value": { "type": "string", "description": "버튼 텍스트" },
896
- "Cursor": { "type": "string", "description": "마우스 커서 스타일" },
1167
+ "Value": { "type": "string", "description": "버튼 텍스트 (기본값: upload)" },
1168
+ "Cursor": { "type": "string", "description": "마우스 커서 스타일 (기본값: pointer)" },
897
1169
  "AllowExt": { "type": "string", "description": "허용 파일 확장자" },
898
1170
  "SaveLimitSize": { "type": "number", "description": "업로드 크기 제한" },
899
1171
  "SaveFolderName": { "type": "string", "description": "저장 폴더명" }