@opsnow-mcp/opsnow-mcp-common-ui-server 1.0.39 → 1.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/all-component-tools.js +2 -0
- package/build/components/data/icon-names.generated.js +341 -0
- package/build/components/data/icon-names.js +32 -16
- package/build/components/examples/opsnow-common-chart-examples-data.js +73 -78
- package/build/components/examples/opsnow-common-forms-examples-data.js +1 -11
- package/build/components/examples/opsnow-common-grid-examples-data.js +271 -20
- package/build/components/examples/opsnow-common-layout-examples-data.js +12 -13
- package/build/components/examples/opsnow-common-popup-examples-data.js +14 -28
- package/build/components/examples/opsnow-common-progress-examples-data.js +0 -5
- package/build/components/examples/opsnow-common-stepper-examples-data.js +2 -3
- package/build/components/examples/opsnow-common-storage-examples-data.js +23 -4
- package/build/components/examples/opsnow-common-tooltip-examples-data.js +1 -21
- package/build/components/opsnow-common-calendar.js +36 -15
- package/build/components/opsnow-common-chart.js +213 -132
- package/build/components/opsnow-common-coach-mark.js +3 -2
- package/build/components/opsnow-common-data-status.js +17 -11
- package/build/components/opsnow-common-dropdown.js +80 -0
- package/build/components/opsnow-common-examples.js +4 -2
- package/build/components/opsnow-common-file-upload.js +4 -1
- package/build/components/opsnow-common-forms.js +73 -36
- package/build/components/opsnow-common-grid.js +72 -29
- package/build/components/opsnow-common-icons.js +23 -39
- package/build/components/opsnow-common-jsx-helper.js +36 -0
- package/build/components/opsnow-common-layout.js +66 -25
- package/build/components/opsnow-common-notification.js +3 -2
- package/build/components/opsnow-common-pagination.js +4 -4
- package/build/components/opsnow-common-popup.js +12 -11
- package/build/components/opsnow-common-progress.js +10 -16
- package/build/components/opsnow-common-select.js +26 -13
- package/build/components/opsnow-common-stepper.js +30 -7
- package/build/components/opsnow-common-tab.js +5 -3
- package/build/components/opsnow-common-toast-popup.js +1 -0
- package/build/components/opsnow-common-tooltip.js +44 -46
- package/build/components/opsnow-common-typography.js +11 -5
- package/build/components/opsnow-common-validate-props.js +0 -0
- package/build/index.js +2 -0
- package/package.json +2 -1
|
@@ -3,12 +3,12 @@ import { z } from "zod";
|
|
|
3
3
|
export const CalendarSchema = z.object({
|
|
4
4
|
// 캘린더 관련 파라미터들
|
|
5
5
|
type: z
|
|
6
|
-
.enum(["date", "dateRange", "dateTime", "dateTimeRange"])
|
|
7
|
-
.describe("단일 날짜, 날짜 범위, 날짜 +
|
|
6
|
+
.enum(["date", "dateRange", "dateTime", "dateTimeRange", "time"])
|
|
7
|
+
.describe("단일 날짜, 날짜 범위, 날짜 + 시간, 시간만(time — TimePicker) 중 선택"),
|
|
8
8
|
views: z
|
|
9
9
|
.array(z.enum(["month", "year", "day", "hours", "minutes", "seconds"]))
|
|
10
10
|
.optional()
|
|
11
|
-
.describe("캘린더 뷰 타입 (여러개 선택 가능)"),
|
|
11
|
+
.describe("캘린더 뷰 타입 (여러개 선택 가능). date·dateRange·dateTimeRange는 day/month/year만, time은 hours/minutes/seconds만 유효. 월 단위 레인지는 type: 'dateRange' + views: ['year', 'month']"),
|
|
12
12
|
activate: z
|
|
13
13
|
.boolean()
|
|
14
14
|
.describe("캘린더 전체 활성화/비활성화 (false시 전체 캘린더 사용 불가)"),
|
|
@@ -16,8 +16,17 @@ export const CalendarSchema = z.object({
|
|
|
16
16
|
.array(z.string())
|
|
17
17
|
.optional()
|
|
18
18
|
.describe("캘린더는 활성화된 상태에서 특정 날짜만 비활성화 (YYYY-MM-DD 형식 배열)"),
|
|
19
|
-
minDate: z.string().optional().describe("최소 날짜 (YYYY-MM-DD 형식)"),
|
|
20
|
-
maxDate: z.string().optional().describe("최대 날짜 (YYYY-MM-DD 형식)"),
|
|
19
|
+
minDate: z.string().optional().describe("최소 날짜 (YYYY-MM-DD 형식) — 생성기 입력. 실제 prop 타입은 Dayjs이므로 직접 작성 시 minDate={dayjs('2026-01-01')}"),
|
|
20
|
+
maxDate: z.string().optional().describe("최대 날짜 (YYYY-MM-DD 형식) — 생성기 입력. 실제 prop 타입은 Dayjs이므로 직접 작성 시 maxDate={dayjs('2026-12-31')}"),
|
|
21
|
+
// 이하 실제 DatePicker prop
|
|
22
|
+
value: z.string().optional().describe("선택값 상태 변수명. 단일 타입은 Dayjs | null, range 타입은 [Dayjs | null, Dayjs | null]"),
|
|
23
|
+
disabled: z.boolean().optional().describe("캘린더 전체 비활성화"),
|
|
24
|
+
shouldDisableDate: z.string().optional().describe("특정 날짜 비활성화 함수명 ((date: Dayjs) => boolean)"),
|
|
25
|
+
format: z.string().optional().describe("입력 표시 포맷 (예: 'YYYY-MM-DD')"),
|
|
26
|
+
disablePast: z.boolean().optional().describe("오늘 이전 날짜 선택 불가"),
|
|
27
|
+
disableFuture: z.boolean().optional().describe("오늘 이후 날짜 선택 불가"),
|
|
28
|
+
readOnly: z.boolean().optional().describe("읽기 전용"),
|
|
29
|
+
size: z.enum(["small", "medium"]).optional().describe("입력 필드 크기"),
|
|
21
30
|
// useShortcusts 부분
|
|
22
31
|
useShortcuts: z
|
|
23
32
|
.boolean()
|
|
@@ -54,9 +63,10 @@ export const CalendarSchema = z.object({
|
|
|
54
63
|
message: "Reset일 때는 num, direction 없이 사용하고, Months/Weeks/Days 때는 num과 direction을 모두 설정하세요.",
|
|
55
64
|
}))
|
|
56
65
|
.optional()
|
|
57
|
-
.describe("커스텀 쇼트컷 - 기본 쇼트컷 대신 사용자가 원하는 날짜 범위 버튼들을 직접 설정 (예: {num: 2, date: 'Months', direction: 'Last'}, {date: 'Reset'}). ⚠️ type이 'dateRange'일 때만 동작 (다른 타입에서는 무시됨)"),
|
|
66
|
+
.describe("커스텀 쇼트컷 - 기본 쇼트컷 대신 사용자가 원하는 날짜 범위 버튼들을 직접 설정 (예: {num: 2, date: 'Months', direction: 'Last'}, {date: 'Reset'}). ⚠️ type이 'dateRange'일 때만 동작 (다른 타입에서는 무시됨). ⚠️ 이 {num, date, direction} 형식은 생성기 입력이고, 실제 prop은 [{ label: string, getValue: () => [Dayjs, Dayjs] }] — 직접 작성 시 이 형식으로"),
|
|
58
67
|
locale: z.enum(["ko", "en", "ja", "zh"]).optional().describe("달력 표시 언어 로케일 ('ko' | 'en' | 'ja' | 'zh'). 생성 코드는 항상 i18n.getLocale()과 연동된 locale 상태를 자동 전달하므로 보통 지정 불필요. 특정 언어로 고정하려면 생성된 코드의 locale 값을 직접 수정"),
|
|
59
68
|
onChange: z.string().optional().describe("날짜 선택(변경) 시 호출되는 콜백 - 라이브러리 prop으로 (newValue, context) 인자를 받음. 생성 코드에 setSelectedDate 기반 onChange 핸들러가 항상 자동 포함되므로 보통 지정 불필요. 추가 로직은 생성된 onChange 내부에 덧붙이면 됨"),
|
|
69
|
+
copilotId: z.string().optional().describe("Copilot 연동 ID — Copilot 매니페스트의 bind.copilotId와 매칭되어 AI가 이 컨트롤을 조작할 수 있게 함. useCommonComponents()로 받은 컴포넌트에서만 동작(로더 HOC가 소비 후 제거)"),
|
|
60
70
|
});
|
|
61
71
|
// Calendar 컴포넌트 함수 - 배열 반환
|
|
62
72
|
export function createCalendarComponent() {
|
|
@@ -83,6 +93,7 @@ export function createCalendarComponent() {
|
|
|
83
93
|
\`\`\`javascript
|
|
84
94
|
import { useCommonComponents } from '@opsnow-common/opsnow-finops-common-ui-loader';
|
|
85
95
|
import i18n from '@opsnow-common/opsnow-finops-common-i18n'
|
|
96
|
+
import dayjs from 'dayjs' // calendar 2.x의 peer 의존성 — 앱 package.json에 dayjs 설치 필요
|
|
86
97
|
const { OpsnowCommonDatePicker } = useCommonComponents();
|
|
87
98
|
\`\`\``,
|
|
88
99
|
parameters: CalendarSchema,
|
|
@@ -157,10 +168,13 @@ export function createCalendarComponent() {
|
|
|
157
168
|
functionDefinitions += `]\n\n`;
|
|
158
169
|
}
|
|
159
170
|
// Props 생성
|
|
171
|
+
const isRangeType = !!args.type && args.type.includes("Range");
|
|
172
|
+
const valueVar = isRangeType ? "selectedDateRange" : "selectedDate";
|
|
173
|
+
const setValueFn = isRangeType ? "setSelectedDateRange" : "setSelectedDate";
|
|
160
174
|
const props = [];
|
|
161
175
|
if (args.type)
|
|
162
176
|
props.push(`type="${args.type}"`);
|
|
163
|
-
props.push(`value={
|
|
177
|
+
props.push(`value={${valueVar}}`);
|
|
164
178
|
if (!args.activate) {
|
|
165
179
|
props.push(`disabled={${!args.activate}}`);
|
|
166
180
|
props.push(`onChange={(newValue) => {
|
|
@@ -171,13 +185,13 @@ export function createCalendarComponent() {
|
|
|
171
185
|
props.push(`shouldDisableDate={disableSpecificDates}`);
|
|
172
186
|
props.push(`onChange={(newValue) => {
|
|
173
187
|
console.log('Selected Date with specific disabled dates:', newValue)
|
|
174
|
-
|
|
188
|
+
${setValueFn}(newValue)
|
|
175
189
|
}}`);
|
|
176
190
|
}
|
|
177
191
|
else {
|
|
178
192
|
props.push(`onChange={(newValue) => {
|
|
179
193
|
console.log('Selected ${args.type}:', newValue)
|
|
180
|
-
|
|
194
|
+
${setValueFn}(newValue)
|
|
181
195
|
}}`);
|
|
182
196
|
}
|
|
183
197
|
if (args.minDate)
|
|
@@ -191,8 +205,15 @@ export function createCalendarComponent() {
|
|
|
191
205
|
if (isDateRangeType && args.customShortcuts)
|
|
192
206
|
props.push(`customShortcuts={customShortcuts}`);
|
|
193
207
|
props.push(`locale={locale}`);
|
|
194
|
-
|
|
195
|
-
|
|
208
|
+
// range·date 타입은 day/month/year 뷰만 허용
|
|
209
|
+
const dayOnlyViews = isRangeType || args.type === "date";
|
|
210
|
+
const views = dayOnlyViews
|
|
211
|
+
? args.views?.filter((view) => ["day", "month", "year"].includes(view))
|
|
212
|
+
: args.type === "time"
|
|
213
|
+
? args.views?.filter((view) => ["hours", "minutes", "seconds"].includes(view))
|
|
214
|
+
: args.views;
|
|
215
|
+
if (views && views.length > 0)
|
|
216
|
+
props.push(`views={[${views.map((view) => `'${view}'`).join(", ")}]}`);
|
|
196
217
|
const datePickerCode = `<OpsnowCommonDatePicker ${props.join(" ")} />`;
|
|
197
218
|
// OpsnowCommonDatePicker 아래 <p> 태그 생성
|
|
198
219
|
const generateSelectedDateCode = () => {
|
|
@@ -200,21 +221,21 @@ export function createCalendarComponent() {
|
|
|
200
221
|
return "";
|
|
201
222
|
const isTime = args.type.includes("Time");
|
|
202
223
|
const isRange = args.type.includes("Range");
|
|
203
|
-
const format = isTime ? "YYYY-MM-DD HH:mm" : "YYYY-MM-DD";
|
|
224
|
+
const format = args.type === "time" ? "HH:mm" : isTime ? "YYYY-MM-DD HH:mm" : "YYYY-MM-DD";
|
|
204
225
|
if (isRange) {
|
|
205
226
|
const label = isTime
|
|
206
227
|
? "Selected DateTime Range"
|
|
207
228
|
: "Selected Date Range";
|
|
208
229
|
return `<p>
|
|
209
|
-
${label}:
|
|
230
|
+
${label}: {selectedDateRange[0] && selectedDateRange[1]
|
|
210
231
|
? \`\${selectedDateRange[0].format('${format}')} ~ \${selectedDateRange[1].format('${format}')}\`
|
|
211
232
|
: 'None'}
|
|
212
233
|
</p>`;
|
|
213
234
|
}
|
|
214
235
|
else {
|
|
215
|
-
const label = isTime ? "Selected DateTime" : "Selected Date";
|
|
236
|
+
const label = args.type === "time" ? "Selected Time" : isTime ? "Selected DateTime" : "Selected Date";
|
|
216
237
|
return `<p>
|
|
217
|
-
${label}:
|
|
238
|
+
${label}: {selectedDate ? selectedDate.format('${format}') : 'None'}
|
|
218
239
|
</p>`;
|
|
219
240
|
}
|
|
220
241
|
};
|