mokkun 0.1.5 → 0.2.0
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/README.md +18 -6
- package/bin/cli.mjs +6 -6
- package/bin/viewer.html +78 -3
- package/dist/example.html +225 -0
- package/dist/mokkun.css +1 -1
- package/dist/mokkun.esm.js +14476 -9626
- package/dist/mokkun.esm.js.map +1 -1
- package/dist/mokkun.js +761 -363
- package/dist/mokkun.js.map +1 -1
- package/dist/types/lib.d.ts +109 -0
- package/dist/types/loader/file-loader.d.ts +118 -0
- package/dist/types/loader/index.d.ts +4 -0
- package/dist/types/parser/index.d.ts +5 -0
- package/dist/types/parser/key-normalizer.d.ts +24 -0
- package/dist/types/parser/v2/compile-expand.d.ts +23 -0
- package/dist/types/parser/v2/compile-field.d.ts +28 -0
- package/dist/types/parser/v2/compile-section.d.ts +6 -0
- package/dist/types/parser/v2/compile-v2.d.ts +14 -0
- package/dist/types/parser/v2/compile-warnings.d.ts +17 -0
- package/dist/types/parser/v2/file-spec.d.ts +24 -0
- package/dist/types/parser/v2/index.d.ts +5 -0
- package/dist/types/parser/v2/iso-date.d.ts +10 -0
- package/dist/types/parser/v2/parse-v2.d.ts +24 -0
- package/dist/types/parser/v2/validate-action.d.ts +11 -0
- package/dist/types/parser/v2/validate-app.d.ts +9 -0
- package/dist/types/parser/v2/validate-context.d.ts +41 -0
- package/dist/types/parser/v2/validate-field.d.ts +17 -0
- package/dist/types/parser/v2/validate-keys.d.ts +29 -0
- package/dist/types/parser/v2/validate-list.d.ts +5 -0
- package/dist/types/parser/v2/validate-v2.d.ts +6 -0
- package/dist/types/parser/v2/validate-view.d.ts +6 -0
- package/dist/types/parser/yaml-parser.d.ts +68 -0
- package/dist/types/renderer/action-handler.d.ts +76 -0
- package/dist/types/renderer/components/accordion-panel.d.ts +144 -0
- package/dist/types/renderer/components/action-buttons.d.ts +183 -0
- package/dist/types/renderer/components/alert-banner.d.ts +43 -0
- package/dist/types/renderer/components/app-header.d.ts +277 -0
- package/dist/types/renderer/components/app-navi.d.ts +167 -0
- package/dist/types/renderer/components/badge.d.ts +134 -0
- package/dist/types/renderer/components/browser.d.ts +134 -0
- package/dist/types/renderer/components/calendar.d.ts +198 -0
- package/dist/types/renderer/components/checkbox.d.ts +132 -0
- package/dist/types/renderer/components/chip.d.ts +120 -0
- package/dist/types/renderer/components/combobox.d.ts +217 -0
- package/dist/types/renderer/components/data-table.d.ts +186 -0
- package/dist/types/renderer/components/date-range-picker.d.ts +203 -0
- package/dist/types/renderer/components/definition-list.d.ts +165 -0
- package/dist/types/renderer/components/delete-confirm-dialog.d.ts +151 -0
- package/dist/types/renderer/components/dialog/action-dialog.d.ts +61 -0
- package/dist/types/renderer/components/dialog/base-dialog.d.ts +125 -0
- package/dist/types/renderer/components/dialog/dialog-types.d.ts +96 -0
- package/dist/types/renderer/components/disclosure.d.ts +118 -0
- package/dist/types/renderer/components/dropdown.d.ts +220 -0
- package/dist/types/renderer/components/duration-input.d.ts +154 -0
- package/dist/types/renderer/components/duration-picker.d.ts +108 -0
- package/dist/types/renderer/components/field-renderer.d.ts +22 -0
- package/dist/types/renderer/components/float-area.d.ts +196 -0
- package/dist/types/renderer/components/form-fields.d.ts +94 -0
- package/dist/types/renderer/components/form-section.d.ts +118 -0
- package/dist/types/renderer/components/google-map-embed.d.ts +88 -0
- package/dist/types/renderer/components/heading.d.ts +119 -0
- package/dist/types/renderer/components/image-uploader.d.ts +271 -0
- package/dist/types/renderer/components/index.d.ts +48 -0
- package/dist/types/renderer/components/information-panel.d.ts +139 -0
- package/dist/types/renderer/components/input.d.ts +222 -0
- package/dist/types/renderer/components/layout.d.ts +71 -0
- package/dist/types/renderer/components/line-clamp.d.ts +170 -0
- package/dist/types/renderer/components/loader.d.ts +104 -0
- package/dist/types/renderer/components/notification-bar.d.ts +251 -0
- package/dist/types/renderer/components/pagination.d.ts +167 -0
- package/dist/types/renderer/components/photo-manager-renderer.d.ts +9 -0
- package/dist/types/renderer/components/radio-button-panel.d.ts +152 -0
- package/dist/types/renderer/components/radio.d.ts +117 -0
- package/dist/types/renderer/components/repeater.d.ts +116 -0
- package/dist/types/renderer/components/response-message.d.ts +180 -0
- package/dist/types/renderer/components/search-input.d.ts +198 -0
- package/dist/types/renderer/components/section-nav.d.ts +151 -0
- package/dist/types/renderer/components/segmented-control.d.ts +143 -0
- package/dist/types/renderer/components/select.d.ts +98 -0
- package/dist/types/renderer/components/status-label.d.ts +146 -0
- package/dist/types/renderer/components/stepper.d.ts +123 -0
- package/dist/types/renderer/components/tabs.d.ts +185 -0
- package/dist/types/renderer/components/textarea.d.ts +173 -0
- package/dist/types/renderer/components/timeline.d.ts +146 -0
- package/dist/types/renderer/components/toggle.d.ts +109 -0
- package/dist/types/renderer/components/tooltip.d.ts +158 -0
- package/dist/types/renderer/components/wizard.d.ts +118 -0
- package/dist/types/renderer/layouts/index.d.ts +5 -0
- package/dist/types/renderer/layouts/shell.d.ts +7 -0
- package/dist/types/renderer/layouts/types.d.ts +34 -0
- package/dist/types/renderer/screen-renderer.d.ts +57 -0
- package/dist/types/renderer/utils/dom.d.ts +29 -0
- package/dist/types/renderer/utils/dummy-data.d.ts +13 -0
- package/dist/types/renderer/utils/field-helpers.d.ts +90 -0
- package/dist/types/renderer/utils/icons.d.ts +13 -0
- package/dist/types/renderer/utils/index.d.ts +6 -0
- package/dist/types/renderer-v2/actions.d.ts +30 -0
- package/dist/types/renderer-v2/app-shell.d.ts +15 -0
- package/dist/types/renderer-v2/condition.d.ts +19 -0
- package/dist/types/renderer-v2/context.d.ts +37 -0
- package/dist/types/renderer-v2/fields/choice.d.ts +12 -0
- package/dist/types/renderer-v2/fields/control-label.d.ts +57 -0
- package/dist/types/renderer-v2/fields/date.d.ts +6 -0
- package/dist/types/renderer-v2/fields/display.d.ts +22 -0
- package/dist/types/renderer-v2/fields/file-support.d.ts +15 -0
- package/dist/types/renderer-v2/fields/file.d.ts +9 -0
- package/dist/types/renderer-v2/fields/index.d.ts +20 -0
- package/dist/types/renderer-v2/fields/select.d.ts +17 -0
- package/dist/types/renderer-v2/fields/text.d.ts +26 -0
- package/dist/types/renderer-v2/fields/textarea.d.ts +5 -0
- package/dist/types/renderer-v2/fields/toggle.d.ts +6 -0
- package/dist/types/renderer-v2/icons.d.ts +35 -0
- package/dist/types/renderer-v2/index.d.ts +45 -0
- package/dist/types/renderer-v2/list-cells.d.ts +6 -0
- package/dist/types/renderer-v2/list-data.d.ts +53 -0
- package/dist/types/renderer-v2/mount-parts.d.ts +19 -0
- package/dist/types/renderer-v2/mount-repeat.d.ts +8 -0
- package/dist/types/renderer-v2/mount-section.d.ts +10 -0
- package/dist/types/renderer-v2/mount-visibility.d.ts +13 -0
- package/dist/types/renderer-v2/mount.d.ts +9 -0
- package/dist/types/renderer-v2/role.d.ts +15 -0
- package/dist/types/renderer-v2/section-fields.d.ts +11 -0
- package/dist/types/renderer-v2/section-list.d.ts +8 -0
- package/dist/types/renderer-v2/section-readonly.d.ts +8 -0
- package/dist/types/renderer-v2/section.d.ts +15 -0
- package/dist/types/renderer-v2/styles.d.ts +13 -0
- package/dist/types/renderer-v2/util.d.ts +28 -0
- package/dist/types/renderer-v2/view-state.d.ts +25 -0
- package/dist/types/renderer-v2/view.d.ts +8 -0
- package/dist/types/theme/index.d.ts +6 -0
- package/dist/types/theme/theme-manager.d.ts +102 -0
- package/dist/types/types/field-renderable.d.ts +40 -0
- package/dist/types/types/index.d.ts +7 -0
- package/dist/types/types/schema-v2.d.ts +270 -0
- package/dist/types/types/schema.d.ts +1712 -0
- package/dist/types/types/theme.d.ts +111 -0
- package/package.json +3 -1
|
@@ -0,0 +1,1712 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mokkun YAML Schema Type Definitions
|
|
3
|
+
* YAML構造のTypeScript型定義
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* YAMLファイルのルート構造(正規化後)
|
|
7
|
+
*/
|
|
8
|
+
export interface MokkunSchema {
|
|
9
|
+
/** ビュー/画面定義のマップ */
|
|
10
|
+
view: Record<string, ScreenDefinition>;
|
|
11
|
+
/** 共通コンポーネント定義 */
|
|
12
|
+
common_components?: Record<string, CommonComponent>;
|
|
13
|
+
/** 共通バリデーション定義 */
|
|
14
|
+
validations?: Record<string, ValidationRule>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* YAMLファイルの生データ構造(配列形式もサポート)
|
|
18
|
+
*/
|
|
19
|
+
export interface MokkunSchemaRaw {
|
|
20
|
+
/** ビュー/画面定義(オブジェクト形式または配列形式) */
|
|
21
|
+
view: Record<string, ScreenDefinitionRaw> | ScreenDefinitionRaw[];
|
|
22
|
+
/** 共通コンポーネント定義(オブジェクト形式または配列形式) */
|
|
23
|
+
common_components?: Record<string, CommonComponent> | CommonComponentRaw[];
|
|
24
|
+
/** 共通バリデーション定義(オブジェクト形式または配列形式) */
|
|
25
|
+
validations?: Record<string, ValidationRule> | ValidationRuleRaw[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 画面定義(配列形式用、nameプロパティを持つ)
|
|
29
|
+
*/
|
|
30
|
+
export interface ScreenDefinitionRaw extends Omit<ScreenDefinition, 'fields' | 'app_header' | 'app_navi'> {
|
|
31
|
+
/** 画面名(配列形式の場合のキー) */
|
|
32
|
+
name?: string;
|
|
33
|
+
/** アクター(この画面を使用するユーザー種別) */
|
|
34
|
+
actor?: string;
|
|
35
|
+
/** 画面の目的 */
|
|
36
|
+
purpose?: string;
|
|
37
|
+
/** ナビゲーション設定 */
|
|
38
|
+
navigation?: NavigationSetting;
|
|
39
|
+
/** アプリケーションヘッダー設定 */
|
|
40
|
+
app_header?: AppHeaderConfigSchema;
|
|
41
|
+
/** アプリケーションナビゲーション設定 */
|
|
42
|
+
app_navi?: AppNaviConfigSchema;
|
|
43
|
+
/** セクション(統合フォーム用) */
|
|
44
|
+
sections?: FormSection[];
|
|
45
|
+
/** 入力フィールドのリスト(配列形式でも対応) */
|
|
46
|
+
fields?: InputFieldRaw[];
|
|
47
|
+
/** 入力フィールド(配列形式の別名) */
|
|
48
|
+
input_fields?: InputFieldRaw[];
|
|
49
|
+
/** 表示フィールド */
|
|
50
|
+
display_fields?: string[];
|
|
51
|
+
/** フィルター */
|
|
52
|
+
filters?: string[];
|
|
53
|
+
/** タブ設定 */
|
|
54
|
+
tabs?: string[];
|
|
55
|
+
/** 連携サービス */
|
|
56
|
+
integration?: string[];
|
|
57
|
+
/** 関連モデル */
|
|
58
|
+
related_models?: string[];
|
|
59
|
+
/** 関連ユースケース */
|
|
60
|
+
related_usecases?: string[];
|
|
61
|
+
/** バリデーション(画面固有) */
|
|
62
|
+
validations?: ScreenValidation[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* ナビゲーション設定
|
|
66
|
+
*/
|
|
67
|
+
export interface NavigationSetting {
|
|
68
|
+
/** ナビゲーションタイプ */
|
|
69
|
+
type: string;
|
|
70
|
+
/** 説明 */
|
|
71
|
+
description?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* フォームセクション
|
|
75
|
+
*/
|
|
76
|
+
export interface FormSection {
|
|
77
|
+
/** セクション名 */
|
|
78
|
+
section_name: string;
|
|
79
|
+
/** アイコン */
|
|
80
|
+
icon?: string;
|
|
81
|
+
/** 公開トグル */
|
|
82
|
+
publish_toggle?: boolean;
|
|
83
|
+
/** 入力フィールド */
|
|
84
|
+
input_fields?: InputFieldRaw[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 入力フィールド(配列形式用、field_nameプロパティを持つ)
|
|
88
|
+
*/
|
|
89
|
+
export interface InputFieldRaw {
|
|
90
|
+
/** フィールド名(配列形式のIDとして使用) */
|
|
91
|
+
field_name?: string;
|
|
92
|
+
/** フィールドID */
|
|
93
|
+
id?: string;
|
|
94
|
+
/** フィールドタイプ */
|
|
95
|
+
type: string;
|
|
96
|
+
/** ラベル */
|
|
97
|
+
label?: string;
|
|
98
|
+
/** 説明 */
|
|
99
|
+
description?: string;
|
|
100
|
+
/** 必須かどうか */
|
|
101
|
+
required?: boolean;
|
|
102
|
+
/** バリデーション(文字列形式) */
|
|
103
|
+
validation?: string;
|
|
104
|
+
/** プレースホルダー */
|
|
105
|
+
placeholder?: string;
|
|
106
|
+
/** 選択肢(配列形式:文字列の配列) */
|
|
107
|
+
options?: string[] | SelectOption[];
|
|
108
|
+
/** 単位 */
|
|
109
|
+
unit?: string;
|
|
110
|
+
/** 許可するファイルタイプ(文字列形式) */
|
|
111
|
+
accepted_types?: string;
|
|
112
|
+
/** ストレージパス */
|
|
113
|
+
storage?: string;
|
|
114
|
+
/** その他のプロパティ */
|
|
115
|
+
[key: string]: unknown;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 画面固有バリデーション
|
|
119
|
+
*/
|
|
120
|
+
export interface ScreenValidation {
|
|
121
|
+
/** フィールド名 */
|
|
122
|
+
field: string;
|
|
123
|
+
/** ルール */
|
|
124
|
+
rule: string;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 共通コンポーネント(配列形式用)
|
|
128
|
+
*/
|
|
129
|
+
export interface CommonComponentRaw {
|
|
130
|
+
/** コンポーネント名 */
|
|
131
|
+
component_name?: string;
|
|
132
|
+
/** コンポーネント名(name形式) */
|
|
133
|
+
name?: string;
|
|
134
|
+
/** 説明 */
|
|
135
|
+
description?: string;
|
|
136
|
+
/** 使用箇所 */
|
|
137
|
+
used_in?: string[];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* バリデーションルール(配列形式用)
|
|
141
|
+
*/
|
|
142
|
+
export interface ValidationRuleRaw {
|
|
143
|
+
/** フィールド名 */
|
|
144
|
+
field: string;
|
|
145
|
+
/** ルール */
|
|
146
|
+
rule: string;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 画面定義
|
|
150
|
+
*/
|
|
151
|
+
export interface ScreenDefinition {
|
|
152
|
+
/** 画面タイトル */
|
|
153
|
+
title: string;
|
|
154
|
+
/** 画面の説明 */
|
|
155
|
+
description?: string;
|
|
156
|
+
/** 画面の目的(v2 の goal など) */
|
|
157
|
+
purpose?: string;
|
|
158
|
+
/** アプリケーションヘッダー設定 */
|
|
159
|
+
app_header?: AppHeaderConfigSchema;
|
|
160
|
+
/** アプリケーションナビゲーション設定 */
|
|
161
|
+
app_navi?: AppNaviConfigSchema;
|
|
162
|
+
/** ウィザード設定(複数ステップの場合) */
|
|
163
|
+
wizard?: WizardConfig;
|
|
164
|
+
/** セクション(統合フォーム用、SectionNavで表示) */
|
|
165
|
+
sections?: FormSection[];
|
|
166
|
+
/** 入力フィールドのリスト */
|
|
167
|
+
fields?: InputField[];
|
|
168
|
+
/** 画面上のアクション */
|
|
169
|
+
actions?: Action[];
|
|
170
|
+
/** レイアウト設定 */
|
|
171
|
+
layout?: LayoutConfig;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* テナント情報
|
|
175
|
+
*/
|
|
176
|
+
export interface TenantSchema {
|
|
177
|
+
/** テナントID */
|
|
178
|
+
id: string;
|
|
179
|
+
/** テナント名 */
|
|
180
|
+
name: string;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* ユーザー情報
|
|
184
|
+
*/
|
|
185
|
+
export interface UserInfoSchema {
|
|
186
|
+
/** ユーザー名 */
|
|
187
|
+
name: string;
|
|
188
|
+
/** メールアドレス(オプション) */
|
|
189
|
+
email?: string;
|
|
190
|
+
/** アバターURL(オプション) */
|
|
191
|
+
avatarUrl?: string;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* ナビゲーションドロップダウンアイテム
|
|
195
|
+
*/
|
|
196
|
+
export interface HeaderNavDropdownItemSchema {
|
|
197
|
+
/** アイテムID */
|
|
198
|
+
id: string;
|
|
199
|
+
/** ラベル */
|
|
200
|
+
label: string;
|
|
201
|
+
/** リンク先URL */
|
|
202
|
+
href?: string;
|
|
203
|
+
/** 区切り線 */
|
|
204
|
+
divider?: boolean;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* ナビゲーションアイテム
|
|
208
|
+
*/
|
|
209
|
+
export interface HeaderNavItemSchema {
|
|
210
|
+
/** アイテムID */
|
|
211
|
+
id: string;
|
|
212
|
+
/** ラベル */
|
|
213
|
+
label: string;
|
|
214
|
+
/** リンク先URL */
|
|
215
|
+
href?: string;
|
|
216
|
+
/** アクティブ状態 */
|
|
217
|
+
active?: boolean;
|
|
218
|
+
/** 無効化 */
|
|
219
|
+
disabled?: boolean;
|
|
220
|
+
/** ドロップダウンメニュー */
|
|
221
|
+
dropdown?: HeaderNavDropdownItemSchema[];
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* アプリランチャーアイテム
|
|
225
|
+
*/
|
|
226
|
+
export interface AppLauncherItemSchema {
|
|
227
|
+
/** アプリID */
|
|
228
|
+
id: string;
|
|
229
|
+
/** アプリ名 */
|
|
230
|
+
name: string;
|
|
231
|
+
/** アプリURL */
|
|
232
|
+
url: string;
|
|
233
|
+
/** アイコン(SVG HTML文字列) */
|
|
234
|
+
icon?: string;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* AppHeader設定
|
|
238
|
+
*/
|
|
239
|
+
export interface AppHeaderConfigSchema {
|
|
240
|
+
/** ロゴ(SVG HTML文字列) */
|
|
241
|
+
logo?: string;
|
|
242
|
+
/** ロゴの代替テキスト */
|
|
243
|
+
logoAlt?: string;
|
|
244
|
+
/** ロゴのリンク先 */
|
|
245
|
+
logoHref?: string;
|
|
246
|
+
/** システム名(既定ロゴのテキスト。logo 指定時は無視) */
|
|
247
|
+
systemName?: string;
|
|
248
|
+
/** アプリ名 */
|
|
249
|
+
appName: string;
|
|
250
|
+
/** テナント一覧 */
|
|
251
|
+
tenants?: TenantSchema[];
|
|
252
|
+
/** 現在のテナントID */
|
|
253
|
+
currentTenantId?: string;
|
|
254
|
+
/** ユーザー情報 */
|
|
255
|
+
userInfo: UserInfoSchema;
|
|
256
|
+
/** ナビゲーション一覧 */
|
|
257
|
+
navigations?: HeaderNavItemSchema[];
|
|
258
|
+
/** アプリランチャー一覧 */
|
|
259
|
+
appLauncher?: AppLauncherItemSchema[];
|
|
260
|
+
/** ヘルプページURL */
|
|
261
|
+
helpPageUrl?: string;
|
|
262
|
+
/** リリースノート表示 */
|
|
263
|
+
showReleaseNote?: boolean;
|
|
264
|
+
/** リリースノートテキスト */
|
|
265
|
+
releaseNoteText?: string;
|
|
266
|
+
/** データ同期ボタン表示 */
|
|
267
|
+
showDataSync?: boolean;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* ドロップダウンメニューアイテム
|
|
271
|
+
*/
|
|
272
|
+
export interface AppNaviDropdownMenuItemSchema {
|
|
273
|
+
/** アイテムID */
|
|
274
|
+
id: string;
|
|
275
|
+
/** 表示ラベル */
|
|
276
|
+
label: string;
|
|
277
|
+
/** アイコン(HTML文字列) */
|
|
278
|
+
icon?: string;
|
|
279
|
+
/** 無効化 */
|
|
280
|
+
disabled?: boolean;
|
|
281
|
+
/** リンク先URL */
|
|
282
|
+
href?: string;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* ナビゲーションアイテム
|
|
286
|
+
*/
|
|
287
|
+
export interface AppNaviItemSchema {
|
|
288
|
+
/** アイテムID */
|
|
289
|
+
id: string;
|
|
290
|
+
/** 表示ラベル */
|
|
291
|
+
label: string;
|
|
292
|
+
/** タイプ(button, anchor, dropdown) */
|
|
293
|
+
type: 'button' | 'anchor' | 'dropdown';
|
|
294
|
+
/** アイコン(HTML文字列) */
|
|
295
|
+
icon?: string;
|
|
296
|
+
/** 無効化 */
|
|
297
|
+
disabled?: boolean;
|
|
298
|
+
/** 現在のページ/セクションを示す */
|
|
299
|
+
current?: boolean;
|
|
300
|
+
/** リンク先URL(anchorタイプ用) */
|
|
301
|
+
href?: string;
|
|
302
|
+
/** ターゲット属性(anchorタイプ用) */
|
|
303
|
+
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
304
|
+
/** ドロップダウンメニュー項目(dropdownタイプ用) */
|
|
305
|
+
dropdownItems?: AppNaviDropdownMenuItemSchema[];
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* AppNavi設定(YAML用)
|
|
309
|
+
*/
|
|
310
|
+
export interface AppNaviConfigSchema {
|
|
311
|
+
/** ナビゲーションラベル(アクセシビリティ用) */
|
|
312
|
+
label?: string;
|
|
313
|
+
/** ナビゲーションアイテム */
|
|
314
|
+
items: AppNaviItemSchema[];
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* ウィザード/ステッパーのレイアウトタイプ
|
|
318
|
+
*
|
|
319
|
+
*/
|
|
320
|
+
export type StepperLayoutType = 'horizontal' | 'vertical';
|
|
321
|
+
/**
|
|
322
|
+
* ステップのステータス
|
|
323
|
+
*
|
|
324
|
+
*/
|
|
325
|
+
export type StepStatus = 'pending' | 'completed' | 'error' | 'warning' | 'closed';
|
|
326
|
+
/**
|
|
327
|
+
* 拡張ステップステータス(テキスト付き)
|
|
328
|
+
*
|
|
329
|
+
*/
|
|
330
|
+
export interface StepStatusWithText {
|
|
331
|
+
type: StepStatus;
|
|
332
|
+
text: string;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* ウィザード設定
|
|
336
|
+
*
|
|
337
|
+
*/
|
|
338
|
+
export interface WizardConfig {
|
|
339
|
+
/** ウィザードのステップ */
|
|
340
|
+
steps: WizardStep[];
|
|
341
|
+
/** レイアウトタイプ(水平/垂直) */
|
|
342
|
+
layout?: StepperLayoutType;
|
|
343
|
+
/** ステップ間でのバリデーション */
|
|
344
|
+
validate_on_step?: boolean;
|
|
345
|
+
/** 戻るボタンを許可するか */
|
|
346
|
+
allow_back?: boolean;
|
|
347
|
+
/** プログレスバーを表示するか */
|
|
348
|
+
show_progress?: boolean;
|
|
349
|
+
/** クリック可能なステップ(過去ステップへの戻り) */
|
|
350
|
+
clickable_steps?: boolean;
|
|
351
|
+
/** 現在のステップインデックス(0始まり) */
|
|
352
|
+
activeIndex?: number;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* ウィザードのステップ
|
|
356
|
+
*
|
|
357
|
+
*/
|
|
358
|
+
export interface WizardStep {
|
|
359
|
+
/** ステップID */
|
|
360
|
+
id: string;
|
|
361
|
+
/** ステップ名(メインラベル) */
|
|
362
|
+
title: string;
|
|
363
|
+
/** サブタイトル(補足テキスト) */
|
|
364
|
+
subtitle?: string;
|
|
365
|
+
/** ステップの説明 */
|
|
366
|
+
description?: string;
|
|
367
|
+
/** このステップの入力フィールド */
|
|
368
|
+
fields: InputField[];
|
|
369
|
+
/** 次のステップに進む条件 */
|
|
370
|
+
next_condition?: Condition;
|
|
371
|
+
/** ステップのステータス */
|
|
372
|
+
status?: StepStatus | StepStatusWithText;
|
|
373
|
+
/** スキップ可能か */
|
|
374
|
+
skippable?: boolean;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* レイアウト設定
|
|
378
|
+
*/
|
|
379
|
+
export interface LayoutConfig {
|
|
380
|
+
/** カラム数 */
|
|
381
|
+
columns?: number;
|
|
382
|
+
/** レイアウトタイプ */
|
|
383
|
+
type?: 'form' | 'grid' | 'stack' | 'tabs';
|
|
384
|
+
/** 余白 */
|
|
385
|
+
gap?: string;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* 入力フィールドの基本インターフェース
|
|
389
|
+
*/
|
|
390
|
+
interface BaseInputField {
|
|
391
|
+
/** フィールドID */
|
|
392
|
+
id: string;
|
|
393
|
+
/** ラベル */
|
|
394
|
+
label: string;
|
|
395
|
+
/** 説明/ヘルプテキスト */
|
|
396
|
+
description?: string;
|
|
397
|
+
/** 必須かどうか */
|
|
398
|
+
required?: boolean;
|
|
399
|
+
/** 無効化 */
|
|
400
|
+
disabled?: boolean;
|
|
401
|
+
/** 読み取り専用 */
|
|
402
|
+
readonly?: boolean;
|
|
403
|
+
/** プレースホルダー */
|
|
404
|
+
placeholder?: string;
|
|
405
|
+
/** デフォルト値 */
|
|
406
|
+
default?: unknown;
|
|
407
|
+
/** バリデーションルール */
|
|
408
|
+
validation?: FieldValidation | string;
|
|
409
|
+
/** 表示条件 */
|
|
410
|
+
visible_when?: Condition;
|
|
411
|
+
/** CSSクラス */
|
|
412
|
+
class?: string;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* テキスト入力フィールド
|
|
416
|
+
*/
|
|
417
|
+
export interface TextField extends BaseInputField {
|
|
418
|
+
type: 'text';
|
|
419
|
+
/** 最小文字数 */
|
|
420
|
+
min_length?: number;
|
|
421
|
+
/** 最大文字数 */
|
|
422
|
+
max_length?: number;
|
|
423
|
+
/** 入力パターン(正規表現) */
|
|
424
|
+
pattern?: string;
|
|
425
|
+
/** 入力タイプ(email, url, tel等) */
|
|
426
|
+
input_type?: 'text' | 'email' | 'url' | 'tel' | 'password';
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* 数値入力フィールド
|
|
430
|
+
*/
|
|
431
|
+
export interface NumberField extends BaseInputField {
|
|
432
|
+
type: 'number';
|
|
433
|
+
/** 最小値 */
|
|
434
|
+
min?: number;
|
|
435
|
+
/** 最大値 */
|
|
436
|
+
max?: number;
|
|
437
|
+
/** ステップ */
|
|
438
|
+
step?: number;
|
|
439
|
+
/** 単位表示 */
|
|
440
|
+
unit?: string;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* テキストエリアフィールド
|
|
444
|
+
*/
|
|
445
|
+
export interface TextareaField extends BaseInputField {
|
|
446
|
+
type: 'textarea';
|
|
447
|
+
/** 行数 */
|
|
448
|
+
rows?: number;
|
|
449
|
+
/** 最小文字数 */
|
|
450
|
+
min_length?: number;
|
|
451
|
+
/** 最大文字数 */
|
|
452
|
+
max_length?: number;
|
|
453
|
+
/** リサイズ可能か */
|
|
454
|
+
resizable?: boolean;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* セレクトフィールド(単一選択)
|
|
458
|
+
*/
|
|
459
|
+
export interface SelectField extends BaseInputField {
|
|
460
|
+
type: 'select';
|
|
461
|
+
/** 選択肢 */
|
|
462
|
+
options: SelectOption[] | string;
|
|
463
|
+
/** 検索可能か */
|
|
464
|
+
searchable?: boolean;
|
|
465
|
+
/** クリア可能か */
|
|
466
|
+
clearable?: boolean;
|
|
467
|
+
/** サイズ (s/default) */
|
|
468
|
+
size?: 's' | 'default';
|
|
469
|
+
/** name属性(フォーム用) */
|
|
470
|
+
name?: string;
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* マルチセレクトフィールド(複数選択)
|
|
474
|
+
*/
|
|
475
|
+
export interface MultiSelectField extends BaseInputField {
|
|
476
|
+
type: 'multi_select';
|
|
477
|
+
/** 選択肢 */
|
|
478
|
+
options: SelectOption[] | string;
|
|
479
|
+
/** 最小選択数 */
|
|
480
|
+
min_selections?: number;
|
|
481
|
+
/** 最大選択数 */
|
|
482
|
+
max_selections?: number;
|
|
483
|
+
/** 検索可能か */
|
|
484
|
+
searchable?: boolean;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* コンボボックスフィールド(検索可能な単一/複数選択)
|
|
488
|
+
*/
|
|
489
|
+
export interface ComboboxField extends BaseInputField {
|
|
490
|
+
type: 'combobox';
|
|
491
|
+
/** 選択モード */
|
|
492
|
+
mode?: 'single' | 'multi';
|
|
493
|
+
/** 静的選択肢 */
|
|
494
|
+
options?: SelectOption[] | string;
|
|
495
|
+
/** 検索可能か(デフォルトtrue、teamkit互換) */
|
|
496
|
+
searchable?: boolean;
|
|
497
|
+
/** 非同期ローダーエンドポイント */
|
|
498
|
+
async_loader?: string;
|
|
499
|
+
/** 最小検索文字数 */
|
|
500
|
+
min_search_length?: number;
|
|
501
|
+
/** デバウンス遅延(ms) */
|
|
502
|
+
debounce_ms?: number;
|
|
503
|
+
/** クリア可能か */
|
|
504
|
+
clearable?: boolean;
|
|
505
|
+
/** 最大選択数(multiモード) */
|
|
506
|
+
max_selections?: number;
|
|
507
|
+
/** オプションなしメッセージ */
|
|
508
|
+
no_options_message?: string;
|
|
509
|
+
/** ローディングメッセージ */
|
|
510
|
+
loading_message?: string;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* ラジオグループフィールド
|
|
514
|
+
*/
|
|
515
|
+
export interface RadioGroupField extends BaseInputField {
|
|
516
|
+
type: 'radio_group';
|
|
517
|
+
/** 選択肢 */
|
|
518
|
+
options: SelectOption[] | string;
|
|
519
|
+
/** レイアウト方向 */
|
|
520
|
+
direction?: 'horizontal' | 'vertical';
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* チェックボックスグループフィールド
|
|
524
|
+
*/
|
|
525
|
+
export interface CheckboxGroupField extends BaseInputField {
|
|
526
|
+
type: 'checkbox_group';
|
|
527
|
+
/** 選択肢 */
|
|
528
|
+
options: SelectOption[] | string;
|
|
529
|
+
/** 最小選択数 */
|
|
530
|
+
min_selections?: number;
|
|
531
|
+
/** 最大選択数 */
|
|
532
|
+
max_selections?: number;
|
|
533
|
+
/** レイアウト方向 */
|
|
534
|
+
direction?: 'horizontal' | 'vertical';
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* 日付選択フィールド
|
|
538
|
+
*/
|
|
539
|
+
export interface DatePickerField extends BaseInputField {
|
|
540
|
+
type: 'date_picker';
|
|
541
|
+
/** 日付フォーマット */
|
|
542
|
+
format?: string;
|
|
543
|
+
/** 最小日付 */
|
|
544
|
+
min_date?: string;
|
|
545
|
+
/** 最大日付 */
|
|
546
|
+
max_date?: string;
|
|
547
|
+
/** 時間も含めるか */
|
|
548
|
+
include_time?: boolean;
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* 時間選択フィールド
|
|
552
|
+
*/
|
|
553
|
+
export interface TimePickerField extends BaseInputField {
|
|
554
|
+
type: 'time_picker';
|
|
555
|
+
/** 時間フォーマット */
|
|
556
|
+
format?: string;
|
|
557
|
+
/** 分のステップ */
|
|
558
|
+
minute_step?: number;
|
|
559
|
+
/** 24時間表記か */
|
|
560
|
+
use_24_hour?: boolean;
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* 期間選択フィールド(ドロップダウン)
|
|
564
|
+
*/
|
|
565
|
+
export interface DurationPickerField extends BaseInputField {
|
|
566
|
+
type: 'duration_picker';
|
|
567
|
+
/** 選択可能な単位 */
|
|
568
|
+
units?: ('hours' | 'minutes' | 'seconds' | 'days')[];
|
|
569
|
+
/** 最小期間(秒) */
|
|
570
|
+
min_duration?: number;
|
|
571
|
+
/** 最大期間(秒) */
|
|
572
|
+
max_duration?: number;
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* 期間入力フィールド(テキスト入力)
|
|
576
|
+
*/
|
|
577
|
+
export interface DurationInputField extends BaseInputField {
|
|
578
|
+
type: 'duration_input';
|
|
579
|
+
/** 表示単位 */
|
|
580
|
+
display_unit?: 'hours' | 'minutes' | 'seconds';
|
|
581
|
+
/** 入力フォーマット */
|
|
582
|
+
format?: string;
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* ファイルアップロードフィールド
|
|
586
|
+
*/
|
|
587
|
+
export interface FileUploadField extends BaseInputField {
|
|
588
|
+
type: 'file_upload';
|
|
589
|
+
/** 許可するファイルタイプ */
|
|
590
|
+
accept?: string[];
|
|
591
|
+
/** 最大ファイルサイズ(バイト) */
|
|
592
|
+
max_size?: number;
|
|
593
|
+
/** 複数ファイル許可 */
|
|
594
|
+
multiple?: boolean;
|
|
595
|
+
/** 最大ファイル数 */
|
|
596
|
+
max_files?: number;
|
|
597
|
+
/** ドラッグ&ドロップ許可 */
|
|
598
|
+
drag_drop?: boolean;
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* リピーターフィールド(動的配列)
|
|
602
|
+
*/
|
|
603
|
+
export interface RepeaterField extends BaseInputField {
|
|
604
|
+
type: 'repeater';
|
|
605
|
+
/** 繰り返す入力フィールド群 */
|
|
606
|
+
item_fields: InputField[];
|
|
607
|
+
/** 最小アイテム数 */
|
|
608
|
+
min_items?: number;
|
|
609
|
+
/** 最大アイテム数 */
|
|
610
|
+
max_items?: number;
|
|
611
|
+
/** 追加ボタンのラベル */
|
|
612
|
+
add_button_label?: string;
|
|
613
|
+
/** 削除ボタンを表示 */
|
|
614
|
+
show_remove_button?: boolean;
|
|
615
|
+
/** 並べ替え可能 */
|
|
616
|
+
sortable?: boolean;
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* データテーブルのカラム定義
|
|
620
|
+
*/
|
|
621
|
+
export interface DataTableColumn {
|
|
622
|
+
/** カラムID */
|
|
623
|
+
id: string;
|
|
624
|
+
/** カラムヘッダーラベル */
|
|
625
|
+
label: string;
|
|
626
|
+
/** データフィールドキー(省略時はidを使用) */
|
|
627
|
+
field?: string;
|
|
628
|
+
/** カラム幅(px, %、またはauto) */
|
|
629
|
+
width?: string;
|
|
630
|
+
/** 最小カラム幅(リサイズ時、px) */
|
|
631
|
+
min_width?: string;
|
|
632
|
+
/** 最大カラム幅(リサイズ時、px) */
|
|
633
|
+
max_width?: string;
|
|
634
|
+
/** リサイズ可能か */
|
|
635
|
+
resizable?: boolean;
|
|
636
|
+
/** ソート可能か */
|
|
637
|
+
sortable?: boolean;
|
|
638
|
+
/** フィルタリング可能か */
|
|
639
|
+
filterable?: boolean;
|
|
640
|
+
/** 表示フォーマット */
|
|
641
|
+
format?: 'text' | 'number' | 'date' | 'datetime' | 'currency' | 'status';
|
|
642
|
+
/** ステータスフォーマット用のマッピング */
|
|
643
|
+
status_map?: Record<string, {
|
|
644
|
+
label: string;
|
|
645
|
+
color: 'success' | 'warning' | 'danger' | 'info' | 'default';
|
|
646
|
+
}>;
|
|
647
|
+
/** 通貨フォーマット用の設定 */
|
|
648
|
+
currency_format?: {
|
|
649
|
+
locale?: string;
|
|
650
|
+
currency?: string;
|
|
651
|
+
};
|
|
652
|
+
/** テキストの配置 */
|
|
653
|
+
align?: 'left' | 'center' | 'right';
|
|
654
|
+
/** 固定カラム */
|
|
655
|
+
fixed?: 'left' | 'right';
|
|
656
|
+
/** ヘッダーセルの結合数(colspan) */
|
|
657
|
+
colspan?: number;
|
|
658
|
+
/** ヘッダーセルの行結合数(rowspan) */
|
|
659
|
+
rowspan?: number;
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* データテーブルの行アクション
|
|
663
|
+
*/
|
|
664
|
+
export interface DataTableRowAction {
|
|
665
|
+
/** アクションID */
|
|
666
|
+
id: string;
|
|
667
|
+
/** アクションラベル */
|
|
668
|
+
label: string;
|
|
669
|
+
/** アイコン(オプション) */
|
|
670
|
+
icon?: string;
|
|
671
|
+
/** スタイル */
|
|
672
|
+
style?: 'primary' | 'secondary' | 'danger' | 'link';
|
|
673
|
+
/** 確認ダイアログ */
|
|
674
|
+
confirm?: ConfirmConfig;
|
|
675
|
+
/** ハンドラー名(カスタムアクション用) */
|
|
676
|
+
handler?: string;
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* データテーブルのソート設定
|
|
680
|
+
*/
|
|
681
|
+
export interface DataTableSortConfig {
|
|
682
|
+
/** ソートするカラムID */
|
|
683
|
+
column: string;
|
|
684
|
+
/** ソート方向 */
|
|
685
|
+
direction: 'asc' | 'desc';
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* データテーブルのページネーション設定
|
|
689
|
+
*/
|
|
690
|
+
export interface DataTablePaginationConfig {
|
|
691
|
+
/** ページネーションを有効にするか */
|
|
692
|
+
enabled?: boolean;
|
|
693
|
+
/** 1ページあたりの行数 */
|
|
694
|
+
page_size?: number;
|
|
695
|
+
/** ページサイズの選択肢 */
|
|
696
|
+
page_size_options?: number[];
|
|
697
|
+
/** 現在のページ(0始まり) */
|
|
698
|
+
current_page?: number;
|
|
699
|
+
/** 総件数(サーバーサイドページング用) */
|
|
700
|
+
total_count?: number;
|
|
701
|
+
}
|
|
702
|
+
/**
|
|
703
|
+
* データテーブルのフィルター設定
|
|
704
|
+
*/
|
|
705
|
+
export interface DataTableFilterConfig {
|
|
706
|
+
/** フィルターを有効にするか */
|
|
707
|
+
enabled?: boolean;
|
|
708
|
+
/** キーワード検索を表示するか */
|
|
709
|
+
show_search?: boolean;
|
|
710
|
+
/** フィルターフィールド */
|
|
711
|
+
fields?: DataTableFilterField[];
|
|
712
|
+
/** フィルターのレイアウト */
|
|
713
|
+
layout?: 'inline' | 'stacked';
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* データテーブルのフィルターフィールド
|
|
717
|
+
*/
|
|
718
|
+
export interface DataTableFilterField {
|
|
719
|
+
/** フィルターID */
|
|
720
|
+
id: string;
|
|
721
|
+
/** フィルターラベル */
|
|
722
|
+
label: string;
|
|
723
|
+
/** 対象のカラムID */
|
|
724
|
+
column: string;
|
|
725
|
+
/** フィルタータイプ */
|
|
726
|
+
type: 'text' | 'select' | 'date_range' | 'number_range';
|
|
727
|
+
/** 選択肢(selectタイプ用) */
|
|
728
|
+
options?: SelectOption[];
|
|
729
|
+
/** プレースホルダー */
|
|
730
|
+
placeholder?: string;
|
|
731
|
+
}
|
|
732
|
+
/**
|
|
733
|
+
* データテーブル行のデータ
|
|
734
|
+
*/
|
|
735
|
+
export interface DataTableRow {
|
|
736
|
+
/** 行ID(ユニーク) */
|
|
737
|
+
id: string | number;
|
|
738
|
+
/** 行グループ名(グループ化用) */
|
|
739
|
+
_group?: string;
|
|
740
|
+
/** セル結合設定(カラムID -> 結合設定) */
|
|
741
|
+
_cellMerge?: Record<string, DataTableCellMerge>;
|
|
742
|
+
/** 行データ */
|
|
743
|
+
[key: string]: unknown;
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* セル結合の設定
|
|
747
|
+
*/
|
|
748
|
+
export interface DataTableCellMerge {
|
|
749
|
+
/** 列方向の結合数 */
|
|
750
|
+
colspan?: number;
|
|
751
|
+
/** 行方向の結合数 */
|
|
752
|
+
rowspan?: number;
|
|
753
|
+
/** このセルが他のセルに結合されている(非表示) */
|
|
754
|
+
hidden?: boolean;
|
|
755
|
+
}
|
|
756
|
+
/**
|
|
757
|
+
* データテーブルの空状態設定
|
|
758
|
+
*/
|
|
759
|
+
export interface DataTableEmptyState {
|
|
760
|
+
/** 空状態のタイトル */
|
|
761
|
+
title?: string;
|
|
762
|
+
/** 空状態の説明 */
|
|
763
|
+
description?: string;
|
|
764
|
+
/** 空状態のアイコン */
|
|
765
|
+
icon?: string;
|
|
766
|
+
/** 空状態のアクション */
|
|
767
|
+
action?: {
|
|
768
|
+
label: string;
|
|
769
|
+
handler: string;
|
|
770
|
+
};
|
|
771
|
+
}
|
|
772
|
+
/**
|
|
773
|
+
* 行グループ化の設定
|
|
774
|
+
*/
|
|
775
|
+
export interface DataTableGroupConfig {
|
|
776
|
+
/** グループ化を有効にするか */
|
|
777
|
+
enabled?: boolean;
|
|
778
|
+
/** グループのフィールドキー(行データの_groupまたは指定フィールド) */
|
|
779
|
+
field?: string;
|
|
780
|
+
/** グループヘッダーをカスタマイズする関数名(ハンドラー) */
|
|
781
|
+
header_renderer?: string;
|
|
782
|
+
/** グループの初期展開状態 */
|
|
783
|
+
default_expanded?: boolean;
|
|
784
|
+
/** 折りたたみ可能か */
|
|
785
|
+
collapsible?: boolean;
|
|
786
|
+
}
|
|
787
|
+
/**
|
|
788
|
+
* 固定ヘッダーの設定
|
|
789
|
+
*/
|
|
790
|
+
export interface DataTableFixedHeaderConfig {
|
|
791
|
+
/** 固定ヘッダーを有効にするか */
|
|
792
|
+
enabled?: boolean;
|
|
793
|
+
/** 固定時のオフセット(px)- スティッキーポジション用 */
|
|
794
|
+
offset?: number;
|
|
795
|
+
}
|
|
796
|
+
/**
|
|
797
|
+
* 列リサイズの設定
|
|
798
|
+
*/
|
|
799
|
+
export interface DataTableResizeConfig {
|
|
800
|
+
/** 列リサイズを有効にするか */
|
|
801
|
+
enabled?: boolean;
|
|
802
|
+
/** 最小カラム幅(px、デフォルト: 50) */
|
|
803
|
+
min_width?: number;
|
|
804
|
+
/** 最大カラム幅(px、デフォルト: 500) */
|
|
805
|
+
max_width?: number;
|
|
806
|
+
/** リサイズ時にコールバックを呼ぶか */
|
|
807
|
+
on_resize?: string;
|
|
808
|
+
}
|
|
809
|
+
/**
|
|
810
|
+
* データテーブルフィールド
|
|
811
|
+
*/
|
|
812
|
+
export interface DataTableField extends Omit<BaseInputField, 'placeholder'> {
|
|
813
|
+
type: 'data_table';
|
|
814
|
+
/** カラム定義 */
|
|
815
|
+
columns: DataTableColumn[];
|
|
816
|
+
/** 静的データ(指定しない場合は動的データソースを想定) */
|
|
817
|
+
data?: DataTableRow[];
|
|
818
|
+
/** 行選択モード */
|
|
819
|
+
selection?: 'none' | 'single' | 'multiple';
|
|
820
|
+
/** 行アクション */
|
|
821
|
+
row_actions?: DataTableRowAction[];
|
|
822
|
+
/** デフォルトのソート設定 */
|
|
823
|
+
default_sort?: DataTableSortConfig;
|
|
824
|
+
/** ページネーション設定 */
|
|
825
|
+
pagination?: DataTablePaginationConfig;
|
|
826
|
+
/** フィルター設定 */
|
|
827
|
+
filters?: DataTableFilterConfig;
|
|
828
|
+
/** 空状態の設定 */
|
|
829
|
+
empty_state?: DataTableEmptyState;
|
|
830
|
+
/** テーブルの高さ(スクロール用) */
|
|
831
|
+
height?: string;
|
|
832
|
+
/** ストライプ行を有効にするか */
|
|
833
|
+
striped?: boolean;
|
|
834
|
+
/** ホバー効果を有効にするか */
|
|
835
|
+
hoverable?: boolean;
|
|
836
|
+
/** 枠線を表示するか */
|
|
837
|
+
bordered?: boolean;
|
|
838
|
+
/** コンパクトモード */
|
|
839
|
+
compact?: boolean;
|
|
840
|
+
/** レスポンシブモード(モバイルでカード表示) */
|
|
841
|
+
responsive?: boolean;
|
|
842
|
+
/** 固定ヘッダー設定 */
|
|
843
|
+
fixed_header?: DataTableFixedHeaderConfig | boolean;
|
|
844
|
+
/** 行グループ化設定 */
|
|
845
|
+
grouping?: DataTableGroupConfig;
|
|
846
|
+
/** 列リサイズ設定 */
|
|
847
|
+
column_resize?: DataTableResizeConfig | boolean;
|
|
848
|
+
/** テーブルのレイアウト(auto: 内容に応じて幅決定、fixed: 均等幅) */
|
|
849
|
+
layout?: 'auto' | 'fixed';
|
|
850
|
+
}
|
|
851
|
+
/**
|
|
852
|
+
* Googleマップ埋め込みフィールド
|
|
853
|
+
*/
|
|
854
|
+
export interface GoogleMapEmbedField extends BaseInputField {
|
|
855
|
+
type: 'google_map_embed';
|
|
856
|
+
/** 埋め込みの高さ */
|
|
857
|
+
height?: string;
|
|
858
|
+
/** 埋め込みの幅(デフォルト: 100%) */
|
|
859
|
+
width?: string;
|
|
860
|
+
/** 「Googleマップで開く」リンクを表示 */
|
|
861
|
+
show_open_link?: boolean;
|
|
862
|
+
/** ズームレベル(デフォルト: 15) */
|
|
863
|
+
zoom?: number;
|
|
864
|
+
}
|
|
865
|
+
/**
|
|
866
|
+
* チェックボックスフィールド
|
|
867
|
+
*
|
|
868
|
+
*
|
|
869
|
+
* - indeterminate状態(一部選択)をサポート
|
|
870
|
+
* - `data-state="checked|unchecked|indeterminate"` for styling
|
|
871
|
+
*/
|
|
872
|
+
export interface CheckboxField extends BaseInputField {
|
|
873
|
+
type: 'checkbox';
|
|
874
|
+
/** チェック時のラベル */
|
|
875
|
+
checked_label?: string;
|
|
876
|
+
/** 非チェック時のラベル */
|
|
877
|
+
unchecked_label?: string;
|
|
878
|
+
/** サイズ */
|
|
879
|
+
size?: 'small' | 'medium' | 'large';
|
|
880
|
+
/** name属性(フォーム用) */
|
|
881
|
+
name?: string;
|
|
882
|
+
/** ラベル位置 */
|
|
883
|
+
label_position?: 'left' | 'right';
|
|
884
|
+
}
|
|
885
|
+
/**
|
|
886
|
+
* トグルフィールド
|
|
887
|
+
*
|
|
888
|
+
* API follows standard conventions from Headless UI and Radix UI:
|
|
889
|
+
* - `checked_label` / `unchecked_label` for labels
|
|
890
|
+
* - `data-state="checked|unchecked"` for styling
|
|
891
|
+
*/
|
|
892
|
+
export interface ToggleField extends BaseInputField {
|
|
893
|
+
type: 'toggle';
|
|
894
|
+
/** チェック時のラベル(Radix UI/Headless UI互換) */
|
|
895
|
+
checked_label?: string;
|
|
896
|
+
/** 非チェック時のラベル(Radix UI/Headless UI互換) */
|
|
897
|
+
unchecked_label?: string;
|
|
898
|
+
/** サイズ ( small/medium) */
|
|
899
|
+
size?: 'small' | 'medium' | 'large';
|
|
900
|
+
/** name属性(フォーム用) */
|
|
901
|
+
name?: string;
|
|
902
|
+
/** ラベル位置 () */
|
|
903
|
+
label_position?: 'left' | 'right';
|
|
904
|
+
}
|
|
905
|
+
/**
|
|
906
|
+
* 写真管理フィールド
|
|
907
|
+
*/
|
|
908
|
+
export interface PhotoManagerField extends BaseInputField {
|
|
909
|
+
type: 'photo_manager';
|
|
910
|
+
/** 写真リスト */
|
|
911
|
+
photos?: PhotoConfig[];
|
|
912
|
+
/** 最大写真枚数 */
|
|
913
|
+
max_photos?: number;
|
|
914
|
+
/** 最大ファイルサイズ(MB) */
|
|
915
|
+
max_file_size?: number;
|
|
916
|
+
/** 対応フォーマット */
|
|
917
|
+
accepted_formats?: string[];
|
|
918
|
+
/** グリッドのカラム数 */
|
|
919
|
+
columns?: number;
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* 写真設定
|
|
923
|
+
*/
|
|
924
|
+
export interface PhotoConfig {
|
|
925
|
+
/** 写真ID */
|
|
926
|
+
id: string;
|
|
927
|
+
/** 画像URL */
|
|
928
|
+
src: string;
|
|
929
|
+
/** 代替テキスト */
|
|
930
|
+
alt?: string;
|
|
931
|
+
/** メイン写真かどうか */
|
|
932
|
+
is_main?: boolean;
|
|
933
|
+
}
|
|
934
|
+
/**
|
|
935
|
+
* 画像アップローダーフィールド(複数画像のアップロード・並び替え・削除)
|
|
936
|
+
*/
|
|
937
|
+
export interface ImageUploaderField extends BaseInputField {
|
|
938
|
+
type: 'image_uploader';
|
|
939
|
+
/** 許可するファイルタイプ(デフォルト: ['image/jpeg', 'image/png', 'image/webp']) */
|
|
940
|
+
accepted_formats?: string[];
|
|
941
|
+
/** 最大ファイルサイズ(バイト、デフォルト: 5MB) */
|
|
942
|
+
max_file_size?: number;
|
|
943
|
+
/** 最大ファイル数(デフォルト: 10) */
|
|
944
|
+
max_files?: number;
|
|
945
|
+
/** 最小ファイル数(デフォルト: 0) */
|
|
946
|
+
min_files?: number;
|
|
947
|
+
}
|
|
948
|
+
/**
|
|
949
|
+
* ツールチップの位置
|
|
950
|
+
*/
|
|
951
|
+
export type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
952
|
+
/**
|
|
953
|
+
* ツールチップフィールド
|
|
954
|
+
*
|
|
955
|
+
* 機能:
|
|
956
|
+
* - 位置指定(top/bottom/left/right)
|
|
957
|
+
* - 遅延表示(デフォルト300ms)
|
|
958
|
+
* - リッチコンテンツ対応(HTML/テキスト)
|
|
959
|
+
* - 矢印表示
|
|
960
|
+
*/
|
|
961
|
+
export interface TooltipField extends Omit<BaseInputField, 'placeholder'> {
|
|
962
|
+
type: 'tooltip';
|
|
963
|
+
/** ツールチップのコンテンツ(テキストまたはHTML) */
|
|
964
|
+
content: string;
|
|
965
|
+
/** 位置(デフォルト: top) */
|
|
966
|
+
position?: TooltipPosition;
|
|
967
|
+
/** 遅延表示時間(ミリ秒、デフォルト: 300) */
|
|
968
|
+
delay?: number;
|
|
969
|
+
/** 矢印を表示するか(デフォルト: true) */
|
|
970
|
+
show_arrow?: boolean;
|
|
971
|
+
/** HTMLコンテンツとして解釈するか(デフォルト: false) */
|
|
972
|
+
is_html?: boolean;
|
|
973
|
+
/** 最大幅(デフォルト: 200px) */
|
|
974
|
+
max_width?: string;
|
|
975
|
+
}
|
|
976
|
+
/**
|
|
977
|
+
* バッジフィールド(ステータスや数量表示用の小さなラベル)
|
|
978
|
+
*
|
|
979
|
+
* 機能:
|
|
980
|
+
* - カラーバリエーション(gray/blue/green/yellow/red)
|
|
981
|
+
* - サイズ(small/medium)
|
|
982
|
+
* - dot表示(数値なしの状態表示)
|
|
983
|
+
* - カウント表示(99+などの上限表示)
|
|
984
|
+
*/
|
|
985
|
+
export interface BadgeField extends BaseInputField {
|
|
986
|
+
type: 'badge';
|
|
987
|
+
/** 表示値(指定時はラベルの代わりに表示する) */
|
|
988
|
+
value?: string | number;
|
|
989
|
+
/** バッジのカラー */
|
|
990
|
+
color?: 'gray' | 'blue' | 'green' | 'yellow' | 'red';
|
|
991
|
+
/** サイズ */
|
|
992
|
+
size?: 'small' | 'medium';
|
|
993
|
+
/** dot表示モード(数値なしの状態表示) */
|
|
994
|
+
dot?: boolean;
|
|
995
|
+
/** 表示する数値 */
|
|
996
|
+
count?: number;
|
|
997
|
+
/** カウント表示の上限(デフォルト: 99) */
|
|
998
|
+
max_count?: number;
|
|
999
|
+
/** テキストコンテンツ(数値の代わりにテキストを表示) */
|
|
1000
|
+
text?: string;
|
|
1001
|
+
}
|
|
1002
|
+
/**
|
|
1003
|
+
* 見出しフィールド
|
|
1004
|
+
*
|
|
1005
|
+
* セマンティックな見出しコンポーネント。
|
|
1006
|
+
* 機能:
|
|
1007
|
+
* - セマンティックレベル(h1-h6)と視覚的サイズの分離
|
|
1008
|
+
* - アクセシビリティを考慮した構造
|
|
1009
|
+
* - カラーバリエーション対応
|
|
1010
|
+
*/
|
|
1011
|
+
export interface HeadingField extends BaseInputField {
|
|
1012
|
+
type: 'heading';
|
|
1013
|
+
/** 見出しレベル(セマンティクス) */
|
|
1014
|
+
level: 1 | 2 | 3 | 4 | 5 | 6;
|
|
1015
|
+
/** 見出しテキスト */
|
|
1016
|
+
text: string;
|
|
1017
|
+
/** サイズバリアント(視覚的サイズ、levelから独立) */
|
|
1018
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
1019
|
+
/** テキスト配置 */
|
|
1020
|
+
align?: 'left' | 'center' | 'right';
|
|
1021
|
+
/** カラーバリエーション */
|
|
1022
|
+
color?: 'default' | 'primary' | 'secondary' | 'muted' | 'danger' | 'success' | 'warning';
|
|
1023
|
+
/** アイコン(オプション) */
|
|
1024
|
+
icon?: string;
|
|
1025
|
+
}
|
|
1026
|
+
/**
|
|
1027
|
+
* ページネーションフィールド
|
|
1028
|
+
*
|
|
1029
|
+
* 機能:
|
|
1030
|
+
* - ページ番号表示
|
|
1031
|
+
* - 前後ボタン
|
|
1032
|
+
* - 最初/最後へのジャンプ
|
|
1033
|
+
* - ページサイズ選択
|
|
1034
|
+
* - 表示件数表示
|
|
1035
|
+
* - コンパクト表示モード
|
|
1036
|
+
*/
|
|
1037
|
+
export interface PaginationField extends Omit<BaseInputField, 'placeholder'> {
|
|
1038
|
+
type: 'pagination';
|
|
1039
|
+
/** 総アイテム数 */
|
|
1040
|
+
total_items: number;
|
|
1041
|
+
/** 現在のページ(1始まり) */
|
|
1042
|
+
current_page?: number;
|
|
1043
|
+
/** 1ページあたりのアイテム数(デフォルト: 10) */
|
|
1044
|
+
page_size?: number;
|
|
1045
|
+
/** ページサイズの選択肢(デフォルト: [10, 25, 50, 100]) */
|
|
1046
|
+
page_size_options?: number[];
|
|
1047
|
+
/** ページサイズ選択を表示するか(デフォルト: true) */
|
|
1048
|
+
show_page_size_selector?: boolean;
|
|
1049
|
+
/** 表示件数を表示するか(デフォルト: true) */
|
|
1050
|
+
show_item_count?: boolean;
|
|
1051
|
+
/** 最初/最後へのジャンプボタンを表示するか(デフォルト: true) */
|
|
1052
|
+
show_jump_buttons?: boolean;
|
|
1053
|
+
/** ページ番号ボタンの最大表示数(デフォルト: 7) */
|
|
1054
|
+
max_page_buttons?: number;
|
|
1055
|
+
/** コンパクトモード(デフォルト: false) */
|
|
1056
|
+
compact?: boolean;
|
|
1057
|
+
/** 位置(デフォルト: 'center') */
|
|
1058
|
+
align?: 'left' | 'center' | 'right';
|
|
1059
|
+
}
|
|
1060
|
+
/**
|
|
1061
|
+
* フローティング領域の位置
|
|
1062
|
+
*/
|
|
1063
|
+
export type FloatAreaPosition = 'top' | 'bottom';
|
|
1064
|
+
/**
|
|
1065
|
+
* フローティング領域のコンテンツ配置
|
|
1066
|
+
*/
|
|
1067
|
+
export type FloatAreaAlignment = 'left' | 'center' | 'right' | 'space-between';
|
|
1068
|
+
/**
|
|
1069
|
+
* フローティング領域フィールド
|
|
1070
|
+
*
|
|
1071
|
+
* 機能:
|
|
1072
|
+
* - 位置指定(top/bottom)
|
|
1073
|
+
* - 影・ボーダー表示
|
|
1074
|
+
* - レスポンシブ対応
|
|
1075
|
+
* - z-index管理
|
|
1076
|
+
*
|
|
1077
|
+
* 用途:
|
|
1078
|
+
* - フォーム送信ボタンの固定表示
|
|
1079
|
+
* - ナビゲーションの固定表示
|
|
1080
|
+
* - アクションバー
|
|
1081
|
+
*/
|
|
1082
|
+
export interface FloatAreaField extends Omit<BaseInputField, 'placeholder'> {
|
|
1083
|
+
type: 'float_area';
|
|
1084
|
+
/** 位置(デフォルト: bottom) */
|
|
1085
|
+
position?: FloatAreaPosition;
|
|
1086
|
+
/** 影を表示するか(デフォルト: true) */
|
|
1087
|
+
show_shadow?: boolean;
|
|
1088
|
+
/** ボーダーを表示するか(デフォルト: false) */
|
|
1089
|
+
show_border?: boolean;
|
|
1090
|
+
/** z-index(デフォルト: 100) */
|
|
1091
|
+
z_index?: number;
|
|
1092
|
+
/** レスポンシブ対応(デフォルト: false) */
|
|
1093
|
+
responsive?: boolean;
|
|
1094
|
+
/** sticky配置を使用(デフォルト: false = fixed) */
|
|
1095
|
+
sticky?: boolean;
|
|
1096
|
+
/** コンテンツの配置(デフォルト: center) */
|
|
1097
|
+
align?: FloatAreaAlignment;
|
|
1098
|
+
/** コンテンツのパディング */
|
|
1099
|
+
padding?: string;
|
|
1100
|
+
/** コンテンツ間のギャップ */
|
|
1101
|
+
gap?: string;
|
|
1102
|
+
/** アクセシビリティ用ラベル */
|
|
1103
|
+
aria_label?: string;
|
|
1104
|
+
}
|
|
1105
|
+
/**
|
|
1106
|
+
* Loader size variants
|
|
1107
|
+
*/
|
|
1108
|
+
export type LoaderSize = 'small' | 'medium' | 'large';
|
|
1109
|
+
/**
|
|
1110
|
+
* Loader color type
|
|
1111
|
+
*/
|
|
1112
|
+
export type LoaderType = 'primary' | 'light';
|
|
1113
|
+
/**
|
|
1114
|
+
* Loader state
|
|
1115
|
+
*/
|
|
1116
|
+
export interface LoaderState {
|
|
1117
|
+
/** Visibility state */
|
|
1118
|
+
isVisible: boolean;
|
|
1119
|
+
/** Current progress (0-100, undefined = indeterminate) */
|
|
1120
|
+
progress?: number;
|
|
1121
|
+
/** Loading message */
|
|
1122
|
+
text?: string;
|
|
1123
|
+
}
|
|
1124
|
+
/**
|
|
1125
|
+
* Loader callbacks
|
|
1126
|
+
*/
|
|
1127
|
+
export interface LoaderCallbacks {
|
|
1128
|
+
/** Called when loader is shown */
|
|
1129
|
+
onShow?: () => void;
|
|
1130
|
+
/** Called when loader is hidden */
|
|
1131
|
+
onHide?: () => void;
|
|
1132
|
+
/** Called when progress updates */
|
|
1133
|
+
onProgressUpdate?: (progress: number) => void;
|
|
1134
|
+
}
|
|
1135
|
+
/**
|
|
1136
|
+
* Loader configuration
|
|
1137
|
+
*/
|
|
1138
|
+
export interface LoaderConfig {
|
|
1139
|
+
/** Size variant */
|
|
1140
|
+
size?: LoaderSize;
|
|
1141
|
+
/** Color type */
|
|
1142
|
+
type?: LoaderType;
|
|
1143
|
+
/** Fullscreen overlay mode */
|
|
1144
|
+
overlay?: boolean;
|
|
1145
|
+
/** Progress value (0-100, enables progress bar) */
|
|
1146
|
+
progress?: number;
|
|
1147
|
+
/** Loading text message */
|
|
1148
|
+
text?: string;
|
|
1149
|
+
/** Alternative text for accessibility */
|
|
1150
|
+
ariaLabel?: string;
|
|
1151
|
+
/** Auto-show on creation */
|
|
1152
|
+
autoShow?: boolean;
|
|
1153
|
+
}
|
|
1154
|
+
/**
|
|
1155
|
+
* Loader field for YAML schema
|
|
1156
|
+
*
|
|
1157
|
+
* 機能:
|
|
1158
|
+
* - サイズバリエーション (small/medium/large)
|
|
1159
|
+
* - インライン表示
|
|
1160
|
+
* - フルスクリーン表示(オーバーレイ)
|
|
1161
|
+
* - テキスト付き表示
|
|
1162
|
+
* - 進捗率表示(プログレスバー)
|
|
1163
|
+
*/
|
|
1164
|
+
export interface LoaderField extends BaseInputField {
|
|
1165
|
+
type: 'loader';
|
|
1166
|
+
/** Size variant */
|
|
1167
|
+
size?: LoaderSize;
|
|
1168
|
+
/** Color type */
|
|
1169
|
+
loaderType?: LoaderType;
|
|
1170
|
+
/** Fullscreen overlay */
|
|
1171
|
+
overlay?: boolean;
|
|
1172
|
+
/** Show progress bar */
|
|
1173
|
+
showProgress?: boolean;
|
|
1174
|
+
/** Initial progress value */
|
|
1175
|
+
initialProgress?: number;
|
|
1176
|
+
}
|
|
1177
|
+
/**
|
|
1178
|
+
* Browserアイテムの定義
|
|
1179
|
+
*/
|
|
1180
|
+
export interface BrowserItemSchema {
|
|
1181
|
+
/** アイテムの値(一意) */
|
|
1182
|
+
value: string;
|
|
1183
|
+
/** 表示ラベル */
|
|
1184
|
+
label: string;
|
|
1185
|
+
/** 子アイテム */
|
|
1186
|
+
children?: BrowserItemSchema[];
|
|
1187
|
+
/** 無効化 */
|
|
1188
|
+
disabled?: boolean;
|
|
1189
|
+
}
|
|
1190
|
+
/**
|
|
1191
|
+
* Browser field for YAML schema
|
|
1192
|
+
*
|
|
1193
|
+
* 機能:
|
|
1194
|
+
* - 階層的なデータの表示
|
|
1195
|
+
* - 複数カラム表示(最大3列)
|
|
1196
|
+
* - キーボードナビゲーション
|
|
1197
|
+
* - 単一選択
|
|
1198
|
+
*/
|
|
1199
|
+
export interface BrowserField extends BaseInputField {
|
|
1200
|
+
type: 'browser';
|
|
1201
|
+
/** アイテムの配列 */
|
|
1202
|
+
items: BrowserItemSchema[];
|
|
1203
|
+
/** 初期選択値 */
|
|
1204
|
+
default?: string;
|
|
1205
|
+
/** 最大カラム数(デフォルト: 3) */
|
|
1206
|
+
maxColumns?: number;
|
|
1207
|
+
/** 高さ(デフォルト: 'auto') */
|
|
1208
|
+
height?: string;
|
|
1209
|
+
}
|
|
1210
|
+
/**
|
|
1211
|
+
* Calendar field for YAML schema
|
|
1212
|
+
*
|
|
1213
|
+
* 機能:
|
|
1214
|
+
* - 月表示カレンダー
|
|
1215
|
+
* - 日付選択
|
|
1216
|
+
* - 選択可能な日付範囲の制限 (from/to)
|
|
1217
|
+
* - 月移動ナビゲーション
|
|
1218
|
+
* - キーボードナビゲーション
|
|
1219
|
+
*/
|
|
1220
|
+
export interface CalendarField extends BaseInputField {
|
|
1221
|
+
type: 'calendar';
|
|
1222
|
+
/** 初期選択日付(ISO 8601形式: YYYY-MM-DD) */
|
|
1223
|
+
default?: string;
|
|
1224
|
+
/** 選択可能な日付範囲の開始日(ISO 8601形式) */
|
|
1225
|
+
from?: string;
|
|
1226
|
+
/** 選択可能な日付範囲の終了日(ISO 8601形式) */
|
|
1227
|
+
to?: string;
|
|
1228
|
+
/** 週の開始曜日 (0: 日曜, 1: 月曜) */
|
|
1229
|
+
weekStartsOn?: 0 | 1;
|
|
1230
|
+
/** ロケール(デフォルト: 'ja-JP') */
|
|
1231
|
+
locale?: string;
|
|
1232
|
+
}
|
|
1233
|
+
/**
|
|
1234
|
+
* 通知バーフィールド
|
|
1235
|
+
*/
|
|
1236
|
+
export interface NotificationBarField extends BaseInputField {
|
|
1237
|
+
type: 'notification_bar';
|
|
1238
|
+
/** バリアント */
|
|
1239
|
+
variant?: 'info' | 'success' | 'warning' | 'error';
|
|
1240
|
+
/** 閉じるボタンを表示 */
|
|
1241
|
+
dismissible?: boolean;
|
|
1242
|
+
}
|
|
1243
|
+
/**
|
|
1244
|
+
* レスポンスメッセージフィールド
|
|
1245
|
+
*/
|
|
1246
|
+
export interface ResponseMessageField extends BaseInputField {
|
|
1247
|
+
type: 'response_message';
|
|
1248
|
+
/** バリアント */
|
|
1249
|
+
variant?: 'success' | 'error' | 'warning' | 'info';
|
|
1250
|
+
}
|
|
1251
|
+
/**
|
|
1252
|
+
* タイムラインフィールド
|
|
1253
|
+
*/
|
|
1254
|
+
export interface TimelineField extends BaseInputField {
|
|
1255
|
+
type: 'timeline';
|
|
1256
|
+
/** タイムラインアイテム */
|
|
1257
|
+
items?: Array<{
|
|
1258
|
+
time: string;
|
|
1259
|
+
title: string;
|
|
1260
|
+
description?: string;
|
|
1261
|
+
}>;
|
|
1262
|
+
}
|
|
1263
|
+
/**
|
|
1264
|
+
* チップフィールド
|
|
1265
|
+
*/
|
|
1266
|
+
export interface ChipField extends BaseInputField {
|
|
1267
|
+
type: 'chip';
|
|
1268
|
+
/** 表示テキスト(未指定時は label) */
|
|
1269
|
+
value?: string | number;
|
|
1270
|
+
/** バリアント */
|
|
1271
|
+
variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';
|
|
1272
|
+
/** 削除可能 */
|
|
1273
|
+
removable?: boolean;
|
|
1274
|
+
}
|
|
1275
|
+
/**
|
|
1276
|
+
* ステータスラベルフィールド
|
|
1277
|
+
*/
|
|
1278
|
+
export interface StatusLabelField extends BaseInputField {
|
|
1279
|
+
type: 'status_label';
|
|
1280
|
+
/** 表示テキスト(未指定時は label) */
|
|
1281
|
+
value?: string | number;
|
|
1282
|
+
/** バリアント */
|
|
1283
|
+
variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
|
|
1284
|
+
}
|
|
1285
|
+
/**
|
|
1286
|
+
* セグメンテッドコントロールフィールド
|
|
1287
|
+
*/
|
|
1288
|
+
export interface SegmentedControlField extends BaseInputField {
|
|
1289
|
+
type: 'segmented_control';
|
|
1290
|
+
/** 選択肢 */
|
|
1291
|
+
options?: SelectOption[];
|
|
1292
|
+
/** デフォルト値 */
|
|
1293
|
+
default?: string;
|
|
1294
|
+
}
|
|
1295
|
+
/**
|
|
1296
|
+
* タブフィールド
|
|
1297
|
+
*/
|
|
1298
|
+
export interface TabsField extends BaseInputField {
|
|
1299
|
+
type: 'tabs';
|
|
1300
|
+
/** タブアイテム(items と tabs は同義。items を優先) */
|
|
1301
|
+
items?: TabsFieldItem[];
|
|
1302
|
+
tabs?: TabsFieldItem[];
|
|
1303
|
+
/** 初期アクティブタブID */
|
|
1304
|
+
default?: string;
|
|
1305
|
+
active?: string;
|
|
1306
|
+
/** タブの配置 */
|
|
1307
|
+
position?: 'top' | 'bottom' | 'left' | 'right';
|
|
1308
|
+
/** タブのスタイル */
|
|
1309
|
+
variant?: 'default' | 'pills' | 'underline' | 'bordered' | 'segmented';
|
|
1310
|
+
}
|
|
1311
|
+
export interface TabsFieldItem {
|
|
1312
|
+
id?: string;
|
|
1313
|
+
label?: string;
|
|
1314
|
+
icon?: string;
|
|
1315
|
+
badge?: string | number;
|
|
1316
|
+
disabled?: boolean;
|
|
1317
|
+
/** プレーンテキスト(エスケープして表示) */
|
|
1318
|
+
content?: string;
|
|
1319
|
+
fields?: InputField[];
|
|
1320
|
+
}
|
|
1321
|
+
/**
|
|
1322
|
+
* ラインクランプフィールド
|
|
1323
|
+
*/
|
|
1324
|
+
export interface LineClampField extends BaseInputField {
|
|
1325
|
+
type: 'line_clamp';
|
|
1326
|
+
/** クランプする行数 */
|
|
1327
|
+
lines?: number;
|
|
1328
|
+
/** テキスト */
|
|
1329
|
+
text?: string;
|
|
1330
|
+
}
|
|
1331
|
+
/**
|
|
1332
|
+
* ディスクロージャーフィールド
|
|
1333
|
+
*/
|
|
1334
|
+
export interface DisclosureField extends BaseInputField {
|
|
1335
|
+
type: 'disclosure';
|
|
1336
|
+
/** 初期状態で開く */
|
|
1337
|
+
defaultOpen?: boolean;
|
|
1338
|
+
}
|
|
1339
|
+
/**
|
|
1340
|
+
* アコーディオンパネルフィールド
|
|
1341
|
+
*/
|
|
1342
|
+
export interface AccordionPanelField extends BaseInputField {
|
|
1343
|
+
type: 'accordion_panel';
|
|
1344
|
+
/** 初期状態で開く */
|
|
1345
|
+
defaultOpen?: boolean;
|
|
1346
|
+
/** パネル内に表示するフィールド(静的レンダリング用) */
|
|
1347
|
+
fields?: InputField[];
|
|
1348
|
+
}
|
|
1349
|
+
/**
|
|
1350
|
+
* セクションナビフィールド
|
|
1351
|
+
*/
|
|
1352
|
+
export interface SectionNavField extends BaseInputField {
|
|
1353
|
+
type: 'section_nav';
|
|
1354
|
+
/** ナビゲーションアイテム */
|
|
1355
|
+
items?: Array<{
|
|
1356
|
+
id: string;
|
|
1357
|
+
label: string;
|
|
1358
|
+
href?: string;
|
|
1359
|
+
}>;
|
|
1360
|
+
}
|
|
1361
|
+
/**
|
|
1362
|
+
* 定義リストフィールド
|
|
1363
|
+
*/
|
|
1364
|
+
export interface DefinitionListField extends BaseInputField {
|
|
1365
|
+
type: 'definition_list';
|
|
1366
|
+
/** 定義アイテム */
|
|
1367
|
+
items?: Array<{
|
|
1368
|
+
term: string;
|
|
1369
|
+
description: string;
|
|
1370
|
+
}>;
|
|
1371
|
+
}
|
|
1372
|
+
/**
|
|
1373
|
+
* ステッパーフィールド
|
|
1374
|
+
*/
|
|
1375
|
+
export interface StepperField extends BaseInputField {
|
|
1376
|
+
type: 'stepper';
|
|
1377
|
+
/** ステップ */
|
|
1378
|
+
steps?: Array<{
|
|
1379
|
+
id: string;
|
|
1380
|
+
label: string;
|
|
1381
|
+
completed?: boolean;
|
|
1382
|
+
status?: StepStatus | StepStatusWithText;
|
|
1383
|
+
}>;
|
|
1384
|
+
/** 現在のステップ */
|
|
1385
|
+
currentStep?: number;
|
|
1386
|
+
}
|
|
1387
|
+
/**
|
|
1388
|
+
* インフォメーションパネルフィールド
|
|
1389
|
+
*/
|
|
1390
|
+
export interface InformationPanelField extends BaseInputField {
|
|
1391
|
+
type: 'information_panel';
|
|
1392
|
+
/** バリアント */
|
|
1393
|
+
variant?: 'info' | 'success' | 'warning' | 'error';
|
|
1394
|
+
}
|
|
1395
|
+
/**
|
|
1396
|
+
* ドロップダウンフィールド
|
|
1397
|
+
*/
|
|
1398
|
+
export interface DropdownFieldType extends BaseInputField {
|
|
1399
|
+
type: 'dropdown';
|
|
1400
|
+
/** 選択肢 */
|
|
1401
|
+
options?: SelectOption[];
|
|
1402
|
+
}
|
|
1403
|
+
/**
|
|
1404
|
+
* 削除確認ダイアログフィールド
|
|
1405
|
+
*/
|
|
1406
|
+
export interface DeleteConfirmDialogField extends BaseInputField {
|
|
1407
|
+
type: 'delete_confirm_dialog';
|
|
1408
|
+
/** 確認メッセージ */
|
|
1409
|
+
message?: string;
|
|
1410
|
+
}
|
|
1411
|
+
/**
|
|
1412
|
+
* 全ての入力フィールドのユニオン型
|
|
1413
|
+
*/
|
|
1414
|
+
export type InputField = TextField | NumberField | TextareaField | SelectField | MultiSelectField | ComboboxField | RadioGroupField | CheckboxField | CheckboxGroupField | DatePickerField | TimePickerField | DurationPickerField | DurationInputField | FileUploadField | RepeaterField | DataTableField | GoogleMapEmbedField | PhotoManagerField | ToggleField | ImageUploaderField | BadgeField | BrowserField | CalendarField | HeadingField | TooltipField | PaginationField | FloatAreaField | LoaderField | NotificationBarField | ResponseMessageField | TimelineField | ChipField | StatusLabelField | SegmentedControlField | TabsField | LineClampField | DisclosureField | AccordionPanelField | SectionNavField | DefinitionListField | StepperField | InformationPanelField | DropdownFieldType | DeleteConfirmDialogField;
|
|
1415
|
+
/**
|
|
1416
|
+
* 入力フィールドのタイプ
|
|
1417
|
+
*/
|
|
1418
|
+
export type InputFieldType = InputField['type'];
|
|
1419
|
+
/**
|
|
1420
|
+
* 選択肢
|
|
1421
|
+
*/
|
|
1422
|
+
export interface SelectOption {
|
|
1423
|
+
/** 値 */
|
|
1424
|
+
value: string | number;
|
|
1425
|
+
/** 表示ラベル */
|
|
1426
|
+
label: string;
|
|
1427
|
+
/** 無効化 */
|
|
1428
|
+
disabled?: boolean;
|
|
1429
|
+
/** グループ */
|
|
1430
|
+
group?: string;
|
|
1431
|
+
/** アイコン */
|
|
1432
|
+
icon?: string;
|
|
1433
|
+
/** 説明 */
|
|
1434
|
+
description?: string;
|
|
1435
|
+
}
|
|
1436
|
+
/**
|
|
1437
|
+
* セレクトオプショングループ(optgroup用)
|
|
1438
|
+
*/
|
|
1439
|
+
export interface SelectOptionGroup {
|
|
1440
|
+
/** グループラベル */
|
|
1441
|
+
label: string;
|
|
1442
|
+
/** グループ内のオプション */
|
|
1443
|
+
options: SelectOption[];
|
|
1444
|
+
/** 無効化 */
|
|
1445
|
+
disabled?: boolean;
|
|
1446
|
+
}
|
|
1447
|
+
/**
|
|
1448
|
+
* セレクトコンポーネントの状態
|
|
1449
|
+
*/
|
|
1450
|
+
export interface SelectState {
|
|
1451
|
+
/** 選択値 */
|
|
1452
|
+
value: string | number | null;
|
|
1453
|
+
/** 無効化状態 */
|
|
1454
|
+
disabled: boolean;
|
|
1455
|
+
/** エラー状態 */
|
|
1456
|
+
error: boolean;
|
|
1457
|
+
/** 開閉状態(カスタムセレクトの場合) */
|
|
1458
|
+
isOpen?: boolean;
|
|
1459
|
+
}
|
|
1460
|
+
/**
|
|
1461
|
+
* セレクトコンポーネントのコールバック
|
|
1462
|
+
*/
|
|
1463
|
+
export interface SelectCallbacks {
|
|
1464
|
+
/** 値変更時 */
|
|
1465
|
+
onChange?: (value: string | number | null, state: SelectState) => void;
|
|
1466
|
+
}
|
|
1467
|
+
/**
|
|
1468
|
+
* セレクトコンポーネントの設定
|
|
1469
|
+
*/
|
|
1470
|
+
export interface SelectConfig {
|
|
1471
|
+
/** 選択肢(混在可能) */
|
|
1472
|
+
options: Array<SelectOption | SelectOptionGroup>;
|
|
1473
|
+
/** 初期値 */
|
|
1474
|
+
defaultValue?: string | number;
|
|
1475
|
+
/** 無効化 */
|
|
1476
|
+
disabled?: boolean;
|
|
1477
|
+
/** エラー状態 */
|
|
1478
|
+
error?: boolean;
|
|
1479
|
+
/** プレースホルダー */
|
|
1480
|
+
placeholder?: string;
|
|
1481
|
+
/** 空オプションを表示 */
|
|
1482
|
+
hasBlank?: boolean;
|
|
1483
|
+
/** 空オプションのラベル */
|
|
1484
|
+
blankLabel?: string;
|
|
1485
|
+
/** サイズ (s/default) */
|
|
1486
|
+
size?: 's' | 'default';
|
|
1487
|
+
/** 幅 */
|
|
1488
|
+
width?: string | number;
|
|
1489
|
+
/** name属性(フォーム用) */
|
|
1490
|
+
name?: string;
|
|
1491
|
+
/** 必須 */
|
|
1492
|
+
required?: boolean;
|
|
1493
|
+
/** クリア可能 */
|
|
1494
|
+
clearable?: boolean;
|
|
1495
|
+
}
|
|
1496
|
+
/**
|
|
1497
|
+
* フィールドバリデーション
|
|
1498
|
+
*/
|
|
1499
|
+
export interface FieldValidation {
|
|
1500
|
+
/** 必須 */
|
|
1501
|
+
required?: boolean | string;
|
|
1502
|
+
/** 最小長/最小値 */
|
|
1503
|
+
min?: number | string;
|
|
1504
|
+
/** 最大長/最大値 */
|
|
1505
|
+
max?: number | string;
|
|
1506
|
+
/** パターン(正規表現) */
|
|
1507
|
+
pattern?: string | {
|
|
1508
|
+
regex: string;
|
|
1509
|
+
message: string;
|
|
1510
|
+
};
|
|
1511
|
+
/** カスタムバリデーター */
|
|
1512
|
+
custom?: string;
|
|
1513
|
+
/** エラーメッセージ */
|
|
1514
|
+
message?: string;
|
|
1515
|
+
}
|
|
1516
|
+
/**
|
|
1517
|
+
* 共通バリデーションルール(再利用可能)
|
|
1518
|
+
*/
|
|
1519
|
+
export interface ValidationRule {
|
|
1520
|
+
/** ルール名 */
|
|
1521
|
+
name: string;
|
|
1522
|
+
/** バリデーション定義 */
|
|
1523
|
+
rules: FieldValidation;
|
|
1524
|
+
/** エラーメッセージ */
|
|
1525
|
+
message?: string;
|
|
1526
|
+
}
|
|
1527
|
+
/**
|
|
1528
|
+
* アクションの基本インターフェース
|
|
1529
|
+
*/
|
|
1530
|
+
interface BaseAction {
|
|
1531
|
+
/** アクションID */
|
|
1532
|
+
id: string;
|
|
1533
|
+
/** ラベル */
|
|
1534
|
+
label: string;
|
|
1535
|
+
/** アイコン */
|
|
1536
|
+
icon?: string;
|
|
1537
|
+
/** スタイル */
|
|
1538
|
+
style?: 'primary' | 'secondary' | 'danger' | 'link';
|
|
1539
|
+
/** 無効化条件 */
|
|
1540
|
+
disabled_when?: Condition;
|
|
1541
|
+
/** 確認ダイアログ */
|
|
1542
|
+
confirm?: ConfirmConfig;
|
|
1543
|
+
}
|
|
1544
|
+
/**
|
|
1545
|
+
* 送信アクション
|
|
1546
|
+
*/
|
|
1547
|
+
export interface SubmitAction extends BaseAction {
|
|
1548
|
+
type: 'submit';
|
|
1549
|
+
/** 送信先URL */
|
|
1550
|
+
url?: string;
|
|
1551
|
+
/** HTTPメソッド */
|
|
1552
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
1553
|
+
/** 成功時の遷移先 */
|
|
1554
|
+
on_success?: NavigationConfig;
|
|
1555
|
+
/** 失敗時のアクション */
|
|
1556
|
+
on_error?: ErrorHandlerConfig;
|
|
1557
|
+
}
|
|
1558
|
+
/**
|
|
1559
|
+
* ナビゲーションアクション
|
|
1560
|
+
*/
|
|
1561
|
+
export interface NavigateAction extends BaseAction {
|
|
1562
|
+
type: 'navigate';
|
|
1563
|
+
/** 遷移先 */
|
|
1564
|
+
to: string;
|
|
1565
|
+
/** パラメータ */
|
|
1566
|
+
params?: Record<string, string>;
|
|
1567
|
+
}
|
|
1568
|
+
/**
|
|
1569
|
+
* カスタムアクション
|
|
1570
|
+
*/
|
|
1571
|
+
export interface CustomAction extends BaseAction {
|
|
1572
|
+
type: 'custom';
|
|
1573
|
+
/** カスタムハンドラー名 */
|
|
1574
|
+
handler: string;
|
|
1575
|
+
/** パラメータ */
|
|
1576
|
+
params?: Record<string, unknown>;
|
|
1577
|
+
}
|
|
1578
|
+
/**
|
|
1579
|
+
* リセットアクション
|
|
1580
|
+
*/
|
|
1581
|
+
export interface ResetAction extends BaseAction {
|
|
1582
|
+
type: 'reset';
|
|
1583
|
+
/** リセット対象のフィールド(未指定なら全て) */
|
|
1584
|
+
fields?: string[];
|
|
1585
|
+
}
|
|
1586
|
+
/**
|
|
1587
|
+
* 全てのアクションのユニオン型
|
|
1588
|
+
*/
|
|
1589
|
+
export type Action = SubmitAction | NavigateAction | CustomAction | ResetAction;
|
|
1590
|
+
/**
|
|
1591
|
+
* 確認ダイアログ設定
|
|
1592
|
+
*/
|
|
1593
|
+
export interface ConfirmConfig {
|
|
1594
|
+
/** タイトル */
|
|
1595
|
+
title: string;
|
|
1596
|
+
/** メッセージ */
|
|
1597
|
+
message: string;
|
|
1598
|
+
/** 確認ボタンのラベル */
|
|
1599
|
+
confirm_label?: string;
|
|
1600
|
+
/** キャンセルボタンのラベル */
|
|
1601
|
+
cancel_label?: string;
|
|
1602
|
+
}
|
|
1603
|
+
/**
|
|
1604
|
+
* ナビゲーション設定
|
|
1605
|
+
*/
|
|
1606
|
+
export interface NavigationConfig {
|
|
1607
|
+
/** 遷移先 */
|
|
1608
|
+
to: string;
|
|
1609
|
+
/** パラメータ */
|
|
1610
|
+
params?: Record<string, string>;
|
|
1611
|
+
/** メッセージ */
|
|
1612
|
+
message?: string;
|
|
1613
|
+
}
|
|
1614
|
+
/**
|
|
1615
|
+
* エラーハンドラー設定
|
|
1616
|
+
*/
|
|
1617
|
+
export interface ErrorHandlerConfig {
|
|
1618
|
+
/** エラーメッセージ */
|
|
1619
|
+
message?: string;
|
|
1620
|
+
/** リトライ可能か */
|
|
1621
|
+
retry?: boolean;
|
|
1622
|
+
/** リダイレクト先 */
|
|
1623
|
+
redirect?: string;
|
|
1624
|
+
}
|
|
1625
|
+
/**
|
|
1626
|
+
* 共通コンポーネント
|
|
1627
|
+
*/
|
|
1628
|
+
export interface CommonComponent {
|
|
1629
|
+
/** コンポーネント名 */
|
|
1630
|
+
name: string;
|
|
1631
|
+
/** 説明 */
|
|
1632
|
+
description?: string;
|
|
1633
|
+
/** コンポーネントタイプ */
|
|
1634
|
+
type: 'field_group' | 'action_group' | 'layout' | 'template';
|
|
1635
|
+
/** フィールド定義(field_groupの場合) */
|
|
1636
|
+
fields?: InputField[];
|
|
1637
|
+
/** アクション定義(action_groupの場合) */
|
|
1638
|
+
actions?: Action[];
|
|
1639
|
+
/** レイアウト設定(layoutの場合) */
|
|
1640
|
+
layout?: LayoutConfig;
|
|
1641
|
+
/** テンプレート(templateの場合) */
|
|
1642
|
+
template?: string;
|
|
1643
|
+
/** パラメータ定義 */
|
|
1644
|
+
params?: ComponentParam[];
|
|
1645
|
+
}
|
|
1646
|
+
/**
|
|
1647
|
+
* コンポーネントパラメータ
|
|
1648
|
+
*/
|
|
1649
|
+
export interface ComponentParam {
|
|
1650
|
+
/** パラメータ名 */
|
|
1651
|
+
name: string;
|
|
1652
|
+
/** 型 */
|
|
1653
|
+
type: 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
1654
|
+
/** 必須か */
|
|
1655
|
+
required?: boolean;
|
|
1656
|
+
/** デフォルト値 */
|
|
1657
|
+
default?: unknown;
|
|
1658
|
+
}
|
|
1659
|
+
/**
|
|
1660
|
+
* 条件式
|
|
1661
|
+
*/
|
|
1662
|
+
export type Condition = SimpleCondition | AndCondition | OrCondition | NotCondition;
|
|
1663
|
+
/**
|
|
1664
|
+
* シンプル条件
|
|
1665
|
+
*/
|
|
1666
|
+
export interface SimpleCondition {
|
|
1667
|
+
/** 対象フィールド */
|
|
1668
|
+
field: string;
|
|
1669
|
+
/** 演算子 */
|
|
1670
|
+
operator: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'not_in' | 'contains' | 'empty' | 'not_empty';
|
|
1671
|
+
/** 比較値 */
|
|
1672
|
+
value?: unknown;
|
|
1673
|
+
}
|
|
1674
|
+
/**
|
|
1675
|
+
* AND条件
|
|
1676
|
+
*/
|
|
1677
|
+
export interface AndCondition {
|
|
1678
|
+
and: Condition[];
|
|
1679
|
+
}
|
|
1680
|
+
/**
|
|
1681
|
+
* OR条件
|
|
1682
|
+
*/
|
|
1683
|
+
export interface OrCondition {
|
|
1684
|
+
or: Condition[];
|
|
1685
|
+
}
|
|
1686
|
+
/**
|
|
1687
|
+
* NOT条件
|
|
1688
|
+
*/
|
|
1689
|
+
export interface NotCondition {
|
|
1690
|
+
not: Condition;
|
|
1691
|
+
}
|
|
1692
|
+
/**
|
|
1693
|
+
* 条件がAND条件かどうか
|
|
1694
|
+
*/
|
|
1695
|
+
export declare function isAndCondition(condition: Condition): condition is AndCondition;
|
|
1696
|
+
/**
|
|
1697
|
+
* 条件がOR条件かどうか
|
|
1698
|
+
*/
|
|
1699
|
+
export declare function isOrCondition(condition: Condition): condition is OrCondition;
|
|
1700
|
+
/**
|
|
1701
|
+
* 条件がNOT条件かどうか
|
|
1702
|
+
*/
|
|
1703
|
+
export declare function isNotCondition(condition: Condition): condition is NotCondition;
|
|
1704
|
+
/**
|
|
1705
|
+
* 条件がシンプル条件かどうか
|
|
1706
|
+
*/
|
|
1707
|
+
export declare function isSimpleCondition(condition: Condition): condition is SimpleCondition;
|
|
1708
|
+
/**
|
|
1709
|
+
* 入力フィールドが特定のタイプかどうか確認
|
|
1710
|
+
*/
|
|
1711
|
+
export declare function isFieldType<T extends InputField>(field: InputField, type: T['type']): field is T;
|
|
1712
|
+
export {};
|