@opsnow-mcp/opsnow-mcp-common-ui-server 1.0.21 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/build/components/data/icon-names.js +129 -0
  2. package/build/components/examples/opsnow-common-calendar-examples-data.js +48 -0
  3. package/build/components/examples/opsnow-common-chart-examples-data.js +6843 -0
  4. package/build/components/examples/opsnow-common-data-status-examples-data.js +65 -0
  5. package/build/components/examples/opsnow-common-file-upload-examples-data.js +95 -0
  6. package/build/components/examples/opsnow-common-forms-examples-data.js +1715 -0
  7. package/build/components/examples/opsnow-common-grid-examples-data.js +2389 -0
  8. package/build/components/examples/opsnow-common-icons-examples-data.js +72 -0
  9. package/build/components/examples/opsnow-common-layout-examples-data.js +97 -0
  10. package/build/components/examples/opsnow-common-notification-examples-data.js +78 -0
  11. package/build/components/examples/opsnow-common-pagination-examples-data.js +82 -0
  12. package/build/components/examples/opsnow-common-popup-examples-data.js +205 -0
  13. package/build/components/examples/opsnow-common-progress-examples-data.js +86 -0
  14. package/build/components/examples/opsnow-common-select-examples-data.js +131 -0
  15. package/build/components/examples/opsnow-common-stepper-examples-data.js +180 -0
  16. package/build/components/examples/opsnow-common-storage-examples-data.js +8 -0
  17. package/build/components/examples/opsnow-common-tab-examples-data.js +87 -0
  18. package/build/components/examples/opsnow-common-toast-popup-examples-data.js +129 -0
  19. package/build/components/examples/opsnow-common-tooltip-examples-data.js +80 -0
  20. package/build/components/examples/opsnow-common-typography-examples-data.js +366 -0
  21. package/build/components/opsnow-common-calendar.js +228 -0
  22. package/build/components/opsnow-common-chart.js +1643 -0
  23. package/build/components/opsnow-common-data-status.js +116 -0
  24. package/build/components/opsnow-common-examples.js +109 -0
  25. package/build/components/opsnow-common-file-upload.js +57 -0
  26. package/build/components/opsnow-common-forms.js +1009 -0
  27. package/build/components/opsnow-common-grid.js +352 -0
  28. package/build/components/opsnow-common-icons.js +139 -0
  29. package/build/components/opsnow-common-layout.js +141 -0
  30. package/build/components/opsnow-common-notification.js +110 -0
  31. package/build/components/opsnow-common-pagination.js +164 -0
  32. package/build/components/opsnow-common-popup.js +71 -0
  33. package/build/components/opsnow-common-progress.js +177 -0
  34. package/build/components/opsnow-common-select.js +135 -0
  35. package/build/components/opsnow-common-stepper.js +72 -0
  36. package/build/components/opsnow-common-tab.js +111 -0
  37. package/build/components/opsnow-common-toast-popup.js +135 -0
  38. package/build/components/opsnow-common-tooltip.js +204 -0
  39. package/build/components/opsnow-common-typography.js +93 -0
  40. package/build/index.js +135 -0
  41. package/package.json +1 -1
@@ -0,0 +1,116 @@
1
+ import { z } from "zod";
2
+ import { IconNamesMap, generateIconDescription } from "./data/icon-names.js";
3
+ // DataStatus 컴포넌트 관련 스키마 정의
4
+ export const DataStatusSchema = z.object({
5
+ headline: z
6
+ .string()
7
+ .optional()
8
+ .describe("데이터 상태 아이콘 위에 크게 보이는 헤드라인 메시지"),
9
+ type: z
10
+ .enum(["loading", "noData", "noSearchResults", "withAction", "error"])
11
+ .describe("데이터 상태 및 화면에 노출 되어야하는 데이터 상태 타입"),
12
+ title: z
13
+ .string()
14
+ .optional()
15
+ .describe("데이터 상태 아이콘 아래에서 크게 보이는 제목 메시지"),
16
+ useMuiIcon: z.boolean().default(false).describe("MUI 아이콘 사용 여부"),
17
+ description: z
18
+ .string()
19
+ .optional()
20
+ .describe("제목 아래 작게 보이는 자세한 설명(데이터 상태 메시지)"),
21
+ iconName: z.string().optional().describe("아이콘 이름"),
22
+ buttonProps: z
23
+ .object({
24
+ label: z.string().describe("버튼 라벨"),
25
+ disabled: z.boolean().default(true).describe("버튼 활성화 여부"),
26
+ action: z
27
+ .string()
28
+ .optional()
29
+ .describe("버튼 클릭 시 실행할 함수(기존 onConfirm () => void 오버라이드)"),
30
+ size: z
31
+ .enum(["small", "medium", "large"])
32
+ .default("large")
33
+ .describe("버튼 크기"),
34
+ muiIconName: z.string().optional().describe("MUI 아이콘 이름"),
35
+ iconName: z
36
+ .enum(Object.keys(IconNamesMap))
37
+ .describe(generateIconDescription({ format: "nested" }))
38
+ .optional()
39
+ .describe("아이콘 이름"),
40
+ iconPosition: z.enum(["right", "left"]).describe("버튼 위치"),
41
+ })
42
+ .optional()
43
+ .describe("버튼 속성"),
44
+ }).describe("데이터 상태 컴포넌트 - createIconsComponent에서 iconName을 반드시 참조하여 string으로 입력");
45
+ // DataStatus 컴포넌트 함수 - 배열 반환
46
+ export function createDataStatusComponent() {
47
+ return [
48
+ {
49
+ name: "createDataStatus",
50
+ description: `데이터 상태 컴포넌트 - 로딩, 성공, 에러, no Data, 검색 결과 없음 상태 표시
51
+ **style 적용 시:**
52
+ div에 style 적용 보다는 mui/material의 Box, Stack, Typography 컴포넌트를 사용하여 스타일을 적용하는 것을 권장합니다.
53
+ **버튼 액션 적용 시:**
54
+ 버튼 클릭 시 실행할 onConfirm 함수를 미리 정의한 후, buttonProps에서 참조하여 사용합니다.
55
+ onConfirm은 콜백 함수이므로 사용자가 직접 구현해서 전달해야 합니다.
56
+ 사용 예시: buttonProps={{onConfirm, label: "Add AWS Account", iconName: "ArrowRight"}}
57
+ **import:**
58
+ \`\`\`javascript
59
+ import { useCommonComponents } from '@opsnow-common/opsnow-finops-common-ui-loader';
60
+ const { OpsnowCommonDataStatus } = useCommonComponents();
61
+ \`\`\``,
62
+ parameters: DataStatusSchema,
63
+ handler: async (args) => {
64
+ // 데이터 상태 컴포넌트 로직 구현
65
+ let functionDefinitions = "";
66
+ if (args.type === "withAction") {
67
+ functionDefinitions += `
68
+ const onConfirm = () => {
69
+ ${args.buttonProps?.action ? args.buttonProps.action : ""}
70
+ }`;
71
+ }
72
+ // OpsnowCommonDataStatus Props 생성
73
+ const dataStatusProps = [];
74
+ if (args.type)
75
+ dataStatusProps.push(`type="${args.type}"`);
76
+ if (args.title)
77
+ dataStatusProps.push(`title="${args.title}"`);
78
+ if (args.description)
79
+ dataStatusProps.push(`description={${args.description}}`);
80
+ if (args.iconName)
81
+ dataStatusProps.push(`iconName="${args.iconName}"`);
82
+ if (args.buttonProps) {
83
+ const buttonProps = [];
84
+ if (args.buttonProps.action) {
85
+ buttonProps.push(`onConfirm`);
86
+ }
87
+ if (args.buttonProps.label)
88
+ buttonProps.push(`label: "${args.buttonProps.label}"`);
89
+ if (args.buttonProps.size)
90
+ buttonProps.push(`size: "${args.buttonProps.size}"`);
91
+ if (!args.buttonProps.disabled)
92
+ buttonProps.push(`disabled: ${!args.buttonProps.disabled}`);
93
+ if (args.buttonProps.muiIconName)
94
+ buttonProps.push(`muiIconName: "${args.buttonProps.muiIconName}"`);
95
+ if (args.buttonProps.iconName)
96
+ buttonProps.push(`iconName: "${args.buttonProps.iconName}"`);
97
+ if (args.buttonProps.iconPosition)
98
+ buttonProps.push(`iconPosition: "${args.buttonProps.iconPosition}"`);
99
+ if (buttonProps.length > 0) {
100
+ dataStatusProps.push(`buttonProps={{${buttonProps.join(", ")}}}`);
101
+ }
102
+ }
103
+ let dataStatusCode = `<OpsnowCommonDataStatus ${dataStatusProps.join(" ")} />`;
104
+ const code = `${functionDefinitions}\n${dataStatusCode}`;
105
+ return {
106
+ content: [
107
+ {
108
+ type: "text",
109
+ text: `\`\`\`jsx\n${code}\n\`\`\``,
110
+ },
111
+ ],
112
+ };
113
+ },
114
+ },
115
+ ];
116
+ }
@@ -0,0 +1,109 @@
1
+ import { ButtonExamples, BadgeExamples, TextareaExamples, SwitchExamples, ChipExamples, TextFieldExamples, AvatarExamples, CheckboxExamples, RadioGroupExamples, CollapseExamples, SliderExamples, LinkExamples, TreeViewExamples, InsightCardExamples, InsightContentExamples, ToggleButtonExamples } from "./examples/opsnow-common-forms-examples-data.js";
2
+ import { IconExamples, MuiIconExamples } from "./examples/opsnow-common-icons-examples-data.js";
3
+ import { CalendarExamples } from "./examples/opsnow-common-calendar-examples-data.js";
4
+ import { GaugeChartExamples, PieChartExamples, BarChartExamples, LineChartExamples, StackChartExamples, XyMultiChartExamples } from "./examples/opsnow-common-chart-examples-data.js";
5
+ import { TooltipExamples } from "./examples/opsnow-common-tooltip-examples-data.js";
6
+ import { DataGridExamples } from "./examples/opsnow-common-grid-examples-data.js";
7
+ import { PopupExamples } from "./examples/opsnow-common-popup-examples-data.js";
8
+ import { StepperExamples } from "./examples/opsnow-common-stepper-examples-data.js";
9
+ import { StorageExamples } from "./examples/opsnow-common-storage-examples-data.js";
10
+ import { SelectExamples } from "./examples/opsnow-common-select-examples-data.js";
11
+ import { FileUploaderExamples } from "./examples/opsnow-common-file-upload-examples-data.js";
12
+ import { NotificationExamples } from "./examples/opsnow-common-notification-examples-data.js";
13
+ import { PaginationExamples } from "./examples/opsnow-common-pagination-examples-data.js";
14
+ import { DataStatusExamples } from "./examples/opsnow-common-data-status-examples-data.js";
15
+ import { ProgressExamples } from "./examples/opsnow-common-progress-examples-data.js";
16
+ import { TabExamples } from "./examples/opsnow-common-tab-examples-data.js";
17
+ import { GridLayoutExamples, MegaFilterExamples } from "./examples/opsnow-common-layout-examples-data.js";
18
+ import { TypographyExamples } from "./examples/opsnow-common-typography-examples-data.js";
19
+ import { AutocompleteExamples } from "./examples/opsnow-common-select-examples-data.js";
20
+ import { z } from "zod";
21
+ const EXAMPLES_MAP = {
22
+ Button: ButtonExamples,
23
+ Badge: BadgeExamples,
24
+ Textarea: TextareaExamples,
25
+ Switch: SwitchExamples,
26
+ Chip: ChipExamples,
27
+ TextField: TextFieldExamples,
28
+ Avatar: AvatarExamples,
29
+ Checkbox: CheckboxExamples,
30
+ RadioGroup: RadioGroupExamples,
31
+ Collapse: CollapseExamples,
32
+ Slider: SliderExamples,
33
+ Link: LinkExamples,
34
+ TreeView: TreeViewExamples,
35
+ InsightCard: InsightCardExamples,
36
+ InsightContent: InsightContentExamples,
37
+ ToggleButtonGroup: ToggleButtonExamples,
38
+ Icon: IconExamples,
39
+ MuiIcon: MuiIconExamples,
40
+ Calendar: CalendarExamples,
41
+ GaugeChart: GaugeChartExamples,
42
+ PieChart: PieChartExamples,
43
+ BarChart: BarChartExamples,
44
+ LineChart: LineChartExamples,
45
+ StackChart: StackChartExamples,
46
+ XyMultiChart: XyMultiChartExamples,
47
+ Tooltip: TooltipExamples,
48
+ DataGrid: DataGridExamples,
49
+ Popup: PopupExamples,
50
+ Stepper: StepperExamples,
51
+ Storage: StorageExamples,
52
+ Select: SelectExamples,
53
+ FileUploader: FileUploaderExamples,
54
+ Notification: NotificationExamples,
55
+ Pagination: PaginationExamples,
56
+ DataStatus: DataStatusExamples,
57
+ Progress: ProgressExamples,
58
+ Tab: TabExamples,
59
+ GridLayout: GridLayoutExamples,
60
+ MegaFilter: MegaFilterExamples,
61
+ Typography: TypographyExamples,
62
+ Autocomplete: AutocompleteExamples,
63
+ };
64
+ export const UIExamplesSchema = z.object({
65
+ uiType: z
66
+ .enum(Object.keys(EXAMPLES_MAP))
67
+ .describe(`UI 컴포넌트 예제명 (예: 'Button', 'Icon') 호출 가능한 예제 항목: ${Object.keys(EXAMPLES_MAP).join(", ")}`)
68
+ });
69
+ export function createCommonExamplesComponent() {
70
+ return [
71
+ {
72
+ name: "getUIExamples",
73
+ description: `OpsNow 공통 UI 컴포넌트 예제 목록을 반환합니다.
74
+ uiType: string (예: 'Button', 'Icon')
75
+ 호출 가능한 예제 항목: ${Object.keys(EXAMPLES_MAP).join(', ')}
76
+ uiType은 필수값입니다.`,
77
+ parameters: UIExamplesSchema,
78
+ handler: async (args) => {
79
+ // 허용된 key만 있는지 검사
80
+ const allowedKeys = ["uiType"];
81
+ const extraKeys = Object.keys(args).filter(k => !allowedKeys.includes(k));
82
+ if (extraKeys.length > 0) {
83
+ return { content: [], error: `허용되지 않은 파라미터가 포함되어 있습니다: ${extraKeys.join(", ")}` };
84
+ }
85
+ const type = args.uiType;
86
+ if (!type) {
87
+ return { content: [] };
88
+ }
89
+ // 단일 예제만 반환
90
+ const result = [];
91
+ const examples = EXAMPLES_MAP[type];
92
+ if (examples) {
93
+ for (const example of examples) {
94
+ result.push({
95
+ type: "text",
96
+ text: `**${example.title}** 예제:\n` +
97
+ "```jsx\n" +
98
+ `${example.code}\n` +
99
+ "```\n" +
100
+ `${'code_props_usage' in example && example.code_props_usage ? `\n**속성 사용 예제:**\n\`\`\`jsx\n${example.code_props_usage}\n\`\`\`\n` : ''}` +
101
+ `${example.description}`,
102
+ });
103
+ }
104
+ }
105
+ return { content: result };
106
+ }
107
+ }
108
+ ];
109
+ }
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ // FileUploader 컴포넌트 관련 스키마 정의
3
+ export const FileUploaderSchema = z.object({
4
+ accept: z.record(z.string(), z.array(z.string())).optional().describe("허용할 파일 타입 (예: { 'application/pdf': ['.pdf'] })"),
5
+ multiple: z.boolean().optional().default(false).describe("다중 파일 업로드 가능 여부"),
6
+ targetUrl: z.string().optional().describe("업로드 대상 URL"),
7
+ disabled: z.boolean().optional().default(false).describe("비활성화 여부"),
8
+ helperText: z.string().optional().describe("도움말 텍스트"),
9
+ fileNotSelectedText: z.string().optional().describe("파일 미선택 시 텍스트"),
10
+ fileSizeEmptyText: z.string().optional().describe("파일 크기 없음 텍스트"),
11
+ fileUploadFailText: z.string().optional().describe("업로드 실패 텍스트"),
12
+ invalidFileFormatText: z.string().optional().describe("잘못된 포맷 텍스트"),
13
+ loadingText: z.string().optional().describe("로딩 텍스트"),
14
+ browseText: z.string().optional().describe("찾아보기 버튼 텍스트"),
15
+ placeholder: z.string().optional().describe("플레이스홀더 텍스트"),
16
+ onChange: z.string().optional().describe("onChange 핸들러 함수명"),
17
+ });
18
+ // FileUploader MCP 툴 함수 - Stepper MCP 툴 구조 참고
19
+ export function createFileUploaderComponent() {
20
+ return [
21
+ {
22
+ name: "createFileUploader",
23
+ description: `파일 업로더 컴포넌트 - 파일 선택 및 업로드 기능
24
+
25
+ **import 예시(React의 모든 훅(useState, useEffect, useCommonComponents 등)은 반드시 함수 컴포넌트 내부에서 호출):**
26
+ \`\`\`javascript
27
+ import { useCommonComponents } from '@opsnow-common/opsnow-finops-common-ui-loader';
28
+ const { OpsnowCommonFileUploader } = useCommonComponents();
29
+ \`\`\``,
30
+ parameters: FileUploaderSchema,
31
+ handler: async (args) => {
32
+ // props 변환
33
+ const propList = Object.entries(args)
34
+ .filter(([_, v]) => v !== undefined)
35
+ .map(([k, v]) => {
36
+ if (typeof v === 'string')
37
+ return `${k}="${v}"`;
38
+ if (typeof v === 'boolean')
39
+ return v ? `${k}` : '';
40
+ if (typeof v === 'object')
41
+ return `${k}={${JSON.stringify(v)}}`;
42
+ return '';
43
+ })
44
+ .filter(Boolean);
45
+ const code = `<OpsnowCommonFileUploader\n ${propList.join('\n ')}\n/>`;
46
+ return {
47
+ content: [
48
+ {
49
+ type: "text",
50
+ text: `\`\`\`jsx\n${code}\n\`\`\``
51
+ }
52
+ ]
53
+ };
54
+ }
55
+ }
56
+ ];
57
+ }