@opsnow-mcp/opsnow-mcp-common-ui-server 1.0.31 → 1.0.32
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.
|
@@ -59,6 +59,21 @@ export const SelectExamples = [
|
|
|
59
59
|
title: 'outlined, size=small, label + placeholder, multiple (다중 선택)',
|
|
60
60
|
code: `<OpsnowCommonSelect items={[{ value: '1', label: 'Option 1' }, { value: '2', label: 'Option 2' }, { value: '3', label: 'Option 3' }]} size="small" variant="outlined" multiple label="항목" placeholder="항목을 선택하세요" value={value} onChange={e => setValue(e.target.value)} />`,
|
|
61
61
|
description: 'outlined variant, small 사이즈, label과 placeholder를 함께 사용하는 다중 선택 셀렉트 예제입니다.'
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
title: '필터 여러 개 배치 (간격 규칙: 필터 행 gap 24px, 라벨-필터 gap 8px)',
|
|
65
|
+
code: `<Stack sx={{ flexDirection: 'row', gap: '24px' }}>
|
|
66
|
+
<OpsnowCommonSelect items={vendorItems} size="small" variant="outlined" placeholder="벤더" value={vendor} onChange={e => setVendor(e.target.value)} />
|
|
67
|
+
<Stack sx={{ flexDirection: 'row', gap: '8px' }}>
|
|
68
|
+
<OpsnowCommonTypography variant="e-m8">계정 :</OpsnowCommonTypography>
|
|
69
|
+
<OpsnowCommonSelect items={accountItems} size="small" variant="outlined" placeholder="계정 선택" value={account} onChange={e => setAccount(e.target.value)} />
|
|
70
|
+
</Stack>
|
|
71
|
+
<Stack sx={{ flexDirection: 'row', gap: '8px' }}>
|
|
72
|
+
<OpsnowCommonTypography variant="e-m8">리전 :</OpsnowCommonTypography>
|
|
73
|
+
<OpsnowCommonSelect items={regionItems} size="small" variant="outlined" placeholder="리전 선택" value={region} onChange={e => setRegion(e.target.value)} />
|
|
74
|
+
</Stack>
|
|
75
|
+
</Stack>`,
|
|
76
|
+
description: '한 화면에 필터를 여러 개 배치할 때의 간격 규칙 예제입니다. 필터 행 컨테이너의 gap은 무조건 24px, 라벨이 있는 필터는 라벨+필터를 gap 8px Stack으로 감싸며, 그 묶음과 앞 필터 사이는 동일하게 24px입니다. 간격은 spacing prop 대신 gap으로 지정합니다.'
|
|
62
77
|
}
|
|
63
78
|
];
|
|
64
79
|
// Autocomplete(오토컴플리트) 컴포넌트 예제 데이터
|
|
@@ -148,5 +163,24 @@ export const AutocompleteExamples = [
|
|
|
148
163
|
<OpsnowCommonAutocomplete items={[{ value: '1', label: 'azure-subscription-9f8e7d6c-5b4a-3210-fedc-ba0987654321-management-group' }, { value: '2', label: 'Short option' }]} multiple disableCloseOnSelect value={value} onChange={setValue} useCheckboxOption useSelectAll dropdownMaxWidth={360} />
|
|
149
164
|
</FormControl>`,
|
|
150
165
|
description: 'dropdownMaxWidth prop으로 확장 최대 너비(px)를 지정하는 예제입니다. 드롭다운이 입력 필드보다 넓게 확장되되 지정한 너비(360px)로 제한되고, 그보다 긴 라벨은 줄바꿈됩니다.'
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
title: 'Autocomplete - 필터 여러 개 배치 (간격 규칙: 필터 행 gap 24px, 라벨-필터 gap 8px)',
|
|
169
|
+
code: `<Stack sx={{ flexDirection: 'row', gap: '24px' }}>
|
|
170
|
+
<OpsnowCommonAutocomplete items={vendorItems} multiple value={vendors} onChange={setVendors} useCheckboxOption useSelectAll label="벤더" />
|
|
171
|
+
<Stack sx={{ flexDirection: 'row', gap: '8px' }}>
|
|
172
|
+
<OpsnowCommonTypography variant="e-m8">계정 :</OpsnowCommonTypography>
|
|
173
|
+
<Box sx={{ minWidth: 200 }}>
|
|
174
|
+
<OpsnowCommonAutocomplete items={accountItems} multiple value={accounts} onChange={setAccounts} useCheckboxOption useSelectAll />
|
|
175
|
+
</Box>
|
|
176
|
+
</Stack>
|
|
177
|
+
<Stack sx={{ flexDirection: 'row', gap: '8px' }}>
|
|
178
|
+
<OpsnowCommonTypography variant="e-m8">서비스 :</OpsnowCommonTypography>
|
|
179
|
+
<Box sx={{ minWidth: 200 }}>
|
|
180
|
+
<OpsnowCommonAutocomplete items={serviceItems} value={service} onChange={setService} />
|
|
181
|
+
</Box>
|
|
182
|
+
</Stack>
|
|
183
|
+
</Stack>`,
|
|
184
|
+
description: '한 화면에 필터를 여러 개 배치할 때의 간격 규칙 예제입니다. 필터 행 컨테이너의 gap은 무조건 24px, 라벨이 있는 필터는 라벨+필터를 gap 8px Stack으로 감싸며, 그 묶음과 앞 필터 사이는 동일하게 24px입니다. 간격은 spacing prop 대신 gap으로 지정하고, Autocomplete는 Box(minWidth)로 최소 폭을 확보합니다. Select와 Autocomplete를 섞어 배치할 때도 같은 규칙이 적용됩니다.'
|
|
151
185
|
}
|
|
152
186
|
];
|
|
@@ -55,6 +55,15 @@ export function createSelectComponent() {
|
|
|
55
55
|
- multiple, placeholder, variant, size, error, disabled 등 다양한 props 지원
|
|
56
56
|
- value/onChange는 단일/다중 선택에 따라 배열 또는 단일 값
|
|
57
57
|
|
|
58
|
+
**필터 배치 간격 규칙 (한 화면에 필터 여러 개 배치 시 무조건 적용):**
|
|
59
|
+
- 필터를 감싸는 행(row) 컨테이너의 gap은 무조건 24px:
|
|
60
|
+
<Stack sx={{ flexDirection: 'row', gap: '24px' }}>
|
|
61
|
+
- "계정 : <필터>"처럼 라벨이 붙는 경우 라벨+필터를 gap 8px Stack으로 감쌈:
|
|
62
|
+
<Stack sx={{ flexDirection: 'row', gap: '8px' }}>
|
|
63
|
+
- 라벨이 있는 필터도 앞 필터와의 간격은 동일하게 24px (라벨+필터 묶음 전체가 하나의 필터로 취급됨)
|
|
64
|
+
- 간격은 spacing prop이 아니라 gap으로 지정
|
|
65
|
+
- 필터가 많아 화면 폭을 넘칠 수 있으면 행 컨테이너에 flexWrap: 'wrap' 추가 (선택)
|
|
66
|
+
|
|
58
67
|
**import:**
|
|
59
68
|
\`\`\`javascript
|
|
60
69
|
import { useCommonComponents } from '@opsnow-common/opsnow-finops-common-ui-loader';
|
|
@@ -99,6 +108,15 @@ export function createSelectComponent() {
|
|
|
99
108
|
- multiple, useCheckboxOption, useSelectAll, disableCloseOnSelect, loading 등 다양한 props 지원
|
|
100
109
|
- value/onChange는 단일/다중 선택에 따라 배열 또는 단일 값
|
|
101
110
|
|
|
111
|
+
**필터 배치 간격 규칙 (한 화면에 필터 여러 개 배치 시 무조건 적용):**
|
|
112
|
+
- 필터를 감싸는 행(row) 컨테이너의 gap은 무조건 24px:
|
|
113
|
+
<Stack sx={{ flexDirection: 'row', gap: '24px' }}>
|
|
114
|
+
- "계정 : <필터>"처럼 라벨이 붙는 경우 라벨+필터를 gap 8px Stack으로 감쌈:
|
|
115
|
+
<Stack sx={{ flexDirection: 'row', gap: '8px' }}>
|
|
116
|
+
- 라벨이 있는 필터도 앞 필터와의 간격은 동일하게 24px (라벨+필터 묶음 전체가 하나의 필터로 취급됨)
|
|
117
|
+
- 간격은 spacing prop이 아니라 gap으로 지정
|
|
118
|
+
- 필터가 많아 화면 폭을 넘칠 수 있으면 행 컨테이너에 flexWrap: 'wrap' 추가 (선택)
|
|
119
|
+
|
|
102
120
|
**import:**
|
|
103
121
|
\`\`\`javascript
|
|
104
122
|
import { useCommonComponents } from '@opsnow-common/opsnow-finops-common-ui-loader';
|
package/build/index.js
CHANGED
|
@@ -84,6 +84,29 @@ Before implementing OpsnowCommonDataGrid, you MUST use getUIExamples tool with '
|
|
|
84
84
|
|
|
85
85
|
Reference example: "Search + Pagination"
|
|
86
86
|
|
|
87
|
+
**CRITICAL: Filter Layout Spacing Rules (Select/Autocomplete)**
|
|
88
|
+
|
|
89
|
+
When placing multiple filters (Select/Autocomplete) in one row, the gap values are MANDATORY:
|
|
90
|
+
|
|
91
|
+
[CORRECT] Row container MUST have gap 24px, label+filter group MUST have gap 8px:
|
|
92
|
+
<Stack sx={{ flexDirection: 'row', gap: '24px' }}>
|
|
93
|
+
<OpsnowCommonSelect ... />
|
|
94
|
+
<Stack sx={{ flexDirection: 'row', gap: '8px' }}>
|
|
95
|
+
<OpsnowCommonTypography variant="e-m8">계정 :</OpsnowCommonTypography>
|
|
96
|
+
<OpsnowCommonAutocomplete ... />
|
|
97
|
+
</Stack>
|
|
98
|
+
</Stack>
|
|
99
|
+
|
|
100
|
+
[FORBIDDEN] DO NOT place filters without gap:
|
|
101
|
+
<Stack direction="row"> <- gap 누락 금지!
|
|
102
|
+
<OpsnowCommonSelect ... />
|
|
103
|
+
<OpsnowCommonSelect ... />
|
|
104
|
+
</Stack>
|
|
105
|
+
|
|
106
|
+
- Adjacent filters: 24px gap (gap style, NOT spacing prop)
|
|
107
|
+
- Label and its filter: 8px gap (wrap label+filter in one Stack)
|
|
108
|
+
- A labeled group counts as ONE filter — still 24px from the previous filter
|
|
109
|
+
|
|
87
110
|
WARNING: Violating these rules will cause the UI to malfunction.`
|
|
88
111
|
});
|
|
89
112
|
// createXxx 툴 정의 수집 (등록 여부는 모드에 따라 결정)
|