mokkun 0.1.5 → 0.1.6
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 +2 -2
- package/dist/mokkun.css +1 -1
- package/dist/mokkun.esm.js +4898 -2913
- package/dist/mokkun.esm.js.map +1 -1
- package/dist/mokkun.js +359 -322
- package/dist/mokkun.js.map +1 -1
- package/dist/types/lib.d.ts +80 -0
- package/dist/types/loader/file-loader.d.ts +114 -0
- package/dist/types/loader/index.d.ts +4 -0
- package/dist/types/parser/index.d.ts +4 -0
- package/dist/types/parser/key-normalizer.d.ts +24 -0
- package/dist/types/parser/yaml-parser.d.ts +58 -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 +53 -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/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 +6 -0
- package/dist/types/types/schema.d.ts +1701 -0
- package/dist/types/types/theme.d.ts +111 -0
- package/package.json +3 -1
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DefinitionList Component
|
|
3
|
+
* 定義リストコンポーネント
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* - 水平/垂直レイアウト
|
|
7
|
+
* - ラベル幅調整
|
|
8
|
+
* - グループ化
|
|
9
|
+
* - レスポンシブ対応
|
|
10
|
+
* - maxColumns設定
|
|
11
|
+
* - セマンティックHTML(dl/dt/dd)
|
|
12
|
+
*/
|
|
13
|
+
import type { InputField } from '../../types/schema';
|
|
14
|
+
/**
|
|
15
|
+
* 定義リストのアイテム
|
|
16
|
+
*/
|
|
17
|
+
export interface DefinitionListItem {
|
|
18
|
+
/** 用語(ラベル/キー) */
|
|
19
|
+
term: string;
|
|
20
|
+
/** 説明(値) */
|
|
21
|
+
description: string | string[] | null;
|
|
22
|
+
/** アイテム固有の全幅表示 */
|
|
23
|
+
fullWidth?: boolean;
|
|
24
|
+
/** アイテム固有のカラム数 */
|
|
25
|
+
maxColumns?: number;
|
|
26
|
+
/** カスタムクラス */
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 定義リストのグループ
|
|
31
|
+
*/
|
|
32
|
+
export interface DefinitionListGroup {
|
|
33
|
+
/** グループタイトル */
|
|
34
|
+
title: string;
|
|
35
|
+
/** グループ内のアイテム */
|
|
36
|
+
items: DefinitionListItem[];
|
|
37
|
+
/** グループ固有のレイアウト */
|
|
38
|
+
layout?: 'horizontal' | 'vertical';
|
|
39
|
+
/** グループ固有のカラム数 */
|
|
40
|
+
maxColumns?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 定義リストの状態
|
|
44
|
+
*/
|
|
45
|
+
export interface DefinitionListState {
|
|
46
|
+
/** 現在のアイテム */
|
|
47
|
+
items: DefinitionListItem[];
|
|
48
|
+
/** 現在のグループ(グループ化時) */
|
|
49
|
+
groups: DefinitionListGroup[];
|
|
50
|
+
/** グループ化モード */
|
|
51
|
+
isGrouped: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 定義リストのコールバック
|
|
55
|
+
*/
|
|
56
|
+
export interface DefinitionListCallbacks {
|
|
57
|
+
/** アイテムクリック時 */
|
|
58
|
+
onItemClick?: (item: DefinitionListItem, index: number) => void;
|
|
59
|
+
/** グループクリック時 */
|
|
60
|
+
onGroupClick?: (group: DefinitionListGroup, index: number) => void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 用語のスタイルタイプ
|
|
64
|
+
*/
|
|
65
|
+
export type TermStyleType = 'blockTitle' | 'subBlockTitle' | 'subSubBlockTitle';
|
|
66
|
+
/**
|
|
67
|
+
* 定義リストの設定
|
|
68
|
+
*/
|
|
69
|
+
export interface DefinitionListConfig {
|
|
70
|
+
/** アイテム配列(フラットリスト用) */
|
|
71
|
+
items?: DefinitionListItem[];
|
|
72
|
+
/** グループ配列(グループ化リスト用) */
|
|
73
|
+
groups?: DefinitionListGroup[];
|
|
74
|
+
/** レイアウト方向(デフォルト: horizontal) */
|
|
75
|
+
layout?: 'horizontal' | 'vertical';
|
|
76
|
+
/** 最大カラム数(デフォルト: 自動) */
|
|
77
|
+
maxColumns?: 1 | 2 | 3 | 4;
|
|
78
|
+
/** 用語(ラベル)の幅 */
|
|
79
|
+
termWidth?: string | number;
|
|
80
|
+
/** 用語のスタイルタイプ */
|
|
81
|
+
termStyleType?: TermStyleType;
|
|
82
|
+
/** アイテム間のギャップ */
|
|
83
|
+
gap?: string | number;
|
|
84
|
+
/** ボーダーを表示 */
|
|
85
|
+
bordered?: boolean;
|
|
86
|
+
/** ストライプ表示 */
|
|
87
|
+
striped?: boolean;
|
|
88
|
+
/** コンパクト表示 */
|
|
89
|
+
compact?: boolean;
|
|
90
|
+
/** クリック可能 */
|
|
91
|
+
clickable?: boolean;
|
|
92
|
+
/** 空の値の表示テキスト */
|
|
93
|
+
emptyText?: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 定義リストコンポーネント
|
|
97
|
+
*/
|
|
98
|
+
export declare class DefinitionList {
|
|
99
|
+
private config;
|
|
100
|
+
private state;
|
|
101
|
+
private callbacks;
|
|
102
|
+
private container;
|
|
103
|
+
constructor(container: HTMLElement, config?: DefinitionListConfig, callbacks?: DefinitionListCallbacks);
|
|
104
|
+
/**
|
|
105
|
+
* 定義リストをレンダリング
|
|
106
|
+
*/
|
|
107
|
+
render(): void;
|
|
108
|
+
/**
|
|
109
|
+
* アイテムを設定
|
|
110
|
+
*/
|
|
111
|
+
setItems(items: DefinitionListItem[]): void;
|
|
112
|
+
/**
|
|
113
|
+
* グループを設定
|
|
114
|
+
*/
|
|
115
|
+
setGroups(groups: DefinitionListGroup[]): void;
|
|
116
|
+
/**
|
|
117
|
+
* アイテムを追加
|
|
118
|
+
*/
|
|
119
|
+
addItem(item: DefinitionListItem): void;
|
|
120
|
+
/**
|
|
121
|
+
* アイテムを削除
|
|
122
|
+
*/
|
|
123
|
+
removeItem(index: number): void;
|
|
124
|
+
/**
|
|
125
|
+
* アイテムを更新
|
|
126
|
+
*/
|
|
127
|
+
updateItem(index: number, item: Partial<DefinitionListItem>): void;
|
|
128
|
+
/**
|
|
129
|
+
* 現在の状態を取得
|
|
130
|
+
*/
|
|
131
|
+
getState(): Readonly<DefinitionListState>;
|
|
132
|
+
/**
|
|
133
|
+
* コンポーネントを破棄
|
|
134
|
+
*/
|
|
135
|
+
destroy(): void;
|
|
136
|
+
/**
|
|
137
|
+
* 初期状態を作成
|
|
138
|
+
*/
|
|
139
|
+
private createInitialState;
|
|
140
|
+
/**
|
|
141
|
+
* カスタムスタイルを適用
|
|
142
|
+
*/
|
|
143
|
+
private applyCustomStyles;
|
|
144
|
+
/**
|
|
145
|
+
* グループをレンダリング
|
|
146
|
+
*/
|
|
147
|
+
private renderGroups;
|
|
148
|
+
/**
|
|
149
|
+
* 単一のグループをレンダリング
|
|
150
|
+
*/
|
|
151
|
+
private renderGroup;
|
|
152
|
+
/**
|
|
153
|
+
* アイテムリストをレンダリング
|
|
154
|
+
*/
|
|
155
|
+
private renderItems;
|
|
156
|
+
/**
|
|
157
|
+
* 単一のアイテムをレンダリング(dt + dd のペア)
|
|
158
|
+
*/
|
|
159
|
+
private renderItem;
|
|
160
|
+
static renderField(field: InputField): string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 定義リストを作成
|
|
164
|
+
*/
|
|
165
|
+
export declare function createDefinitionList(container: HTMLElement, config?: DefinitionListConfig, callbacks?: DefinitionListCallbacks): DefinitionList;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delete Confirm Dialog Component
|
|
3
|
+
* 削除確認ダイアログ - 依存データの影響を表示
|
|
4
|
+
*/
|
|
5
|
+
import type { InputField } from '../../types/schema';
|
|
6
|
+
/**
|
|
7
|
+
* 依存データの情報
|
|
8
|
+
*/
|
|
9
|
+
export interface DependencyInfo {
|
|
10
|
+
/** 依存データのタイプ(例:spaces, reservations) */
|
|
11
|
+
type: string;
|
|
12
|
+
/** 表示ラベル */
|
|
13
|
+
label: string;
|
|
14
|
+
/** 件数 */
|
|
15
|
+
count: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 削除確認ダイアログの設定
|
|
19
|
+
*/
|
|
20
|
+
export interface DeleteConfirmDialogConfig {
|
|
21
|
+
/** ダイアログタイトル */
|
|
22
|
+
title: string;
|
|
23
|
+
/** 削除対象の名前(例:施設名) */
|
|
24
|
+
targetName: string;
|
|
25
|
+
/** 削除対象のタイプ(例:施設) */
|
|
26
|
+
targetType?: string;
|
|
27
|
+
/** 依存データの情報 */
|
|
28
|
+
dependencies?: DependencyInfo[];
|
|
29
|
+
/** 警告メッセージ */
|
|
30
|
+
warningMessage?: string;
|
|
31
|
+
/** 確認ボタンのラベル */
|
|
32
|
+
confirmLabel?: string;
|
|
33
|
+
/** キャンセルボタンのラベル */
|
|
34
|
+
cancelLabel?: string;
|
|
35
|
+
/** 危険なアクションとしてスタイリング */
|
|
36
|
+
danger?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* ダイアログのコールバック
|
|
40
|
+
*/
|
|
41
|
+
export interface DeleteConfirmDialogCallbacks {
|
|
42
|
+
/** 削除確認時 */
|
|
43
|
+
onConfirm?: () => void;
|
|
44
|
+
/** キャンセル時 */
|
|
45
|
+
onCancel?: () => void;
|
|
46
|
+
/** ダイアログクローズ時 */
|
|
47
|
+
onClose?: () => void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* ダイアログの状態
|
|
51
|
+
*/
|
|
52
|
+
export interface DeleteConfirmDialogState {
|
|
53
|
+
/** ダイアログが開いているか */
|
|
54
|
+
isOpen: boolean;
|
|
55
|
+
/** フォーカスを戻す要素 */
|
|
56
|
+
previouslyFocusedElement: Element | null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 削除確認ダイアログコンポーネント
|
|
60
|
+
*/
|
|
61
|
+
export declare class DeleteConfirmDialog {
|
|
62
|
+
private config;
|
|
63
|
+
private callbacks;
|
|
64
|
+
private state;
|
|
65
|
+
private dialogElement;
|
|
66
|
+
private overlayElement;
|
|
67
|
+
private readonly dialogId;
|
|
68
|
+
private boundKeydownHandler;
|
|
69
|
+
constructor(config: DeleteConfirmDialogConfig, callbacks?: DeleteConfirmDialogCallbacks);
|
|
70
|
+
/**
|
|
71
|
+
* ダイアログを開く
|
|
72
|
+
*/
|
|
73
|
+
open(): void;
|
|
74
|
+
/**
|
|
75
|
+
* ダイアログを閉じる
|
|
76
|
+
*/
|
|
77
|
+
close(): void;
|
|
78
|
+
/**
|
|
79
|
+
* 設定を更新
|
|
80
|
+
*/
|
|
81
|
+
updateConfig(config: Partial<DeleteConfirmDialogConfig>): void;
|
|
82
|
+
/**
|
|
83
|
+
* 現在の状態を取得
|
|
84
|
+
*/
|
|
85
|
+
getState(): DeleteConfirmDialogState;
|
|
86
|
+
/**
|
|
87
|
+
* ダイアログ要素を取得(テスト用)
|
|
88
|
+
*/
|
|
89
|
+
getDialogElement(): HTMLElement | null;
|
|
90
|
+
/**
|
|
91
|
+
* ダイアログをレンダリング
|
|
92
|
+
*/
|
|
93
|
+
private render;
|
|
94
|
+
/**
|
|
95
|
+
* ヘッダーをレンダリング
|
|
96
|
+
*/
|
|
97
|
+
private renderHeader;
|
|
98
|
+
/**
|
|
99
|
+
* ボディをレンダリング
|
|
100
|
+
*/
|
|
101
|
+
private renderBody;
|
|
102
|
+
/**
|
|
103
|
+
* 依存データセクションをレンダリング
|
|
104
|
+
*/
|
|
105
|
+
private renderDependencies;
|
|
106
|
+
/**
|
|
107
|
+
* フッターをレンダリング
|
|
108
|
+
*/
|
|
109
|
+
private renderFooter;
|
|
110
|
+
/**
|
|
111
|
+
* イベントリスナーを設定
|
|
112
|
+
*/
|
|
113
|
+
private setupEventListeners;
|
|
114
|
+
/**
|
|
115
|
+
* イベントリスナーを削除
|
|
116
|
+
*/
|
|
117
|
+
private removeEventListeners;
|
|
118
|
+
/**
|
|
119
|
+
* キーボードイベントハンドラ
|
|
120
|
+
*/
|
|
121
|
+
private handleKeydown;
|
|
122
|
+
/**
|
|
123
|
+
* Tab キーの処理(フォーカストラップ)
|
|
124
|
+
*/
|
|
125
|
+
private handleTabKey;
|
|
126
|
+
/**
|
|
127
|
+
* フォーカス可能な要素を取得
|
|
128
|
+
*/
|
|
129
|
+
private getFocusableElements;
|
|
130
|
+
/**
|
|
131
|
+
* フォーカスをダイアログ内に設定
|
|
132
|
+
*/
|
|
133
|
+
private trapFocus;
|
|
134
|
+
/**
|
|
135
|
+
* 確認ボタンクリック時
|
|
136
|
+
*/
|
|
137
|
+
private handleConfirm;
|
|
138
|
+
/**
|
|
139
|
+
* キャンセルボタンクリック時
|
|
140
|
+
*/
|
|
141
|
+
private handleCancel;
|
|
142
|
+
/**
|
|
143
|
+
* ダイアログ要素を破棄
|
|
144
|
+
*/
|
|
145
|
+
private destroy;
|
|
146
|
+
/**
|
|
147
|
+
* HTML特殊文字をエスケープ
|
|
148
|
+
*/
|
|
149
|
+
private escapeHtml;
|
|
150
|
+
static renderField(field: InputField): string;
|
|
151
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Dialog Component
|
|
3
|
+
* ユーザーアクション確認用ダイアログ
|
|
4
|
+
*
|
|
5
|
+
* 機能:
|
|
6
|
+
* - 確認/キャンセルボタン
|
|
7
|
+
* - デンジャーモード(危険なアクションの強調)
|
|
8
|
+
* - アイコン表示
|
|
9
|
+
* - サブアクションエリア
|
|
10
|
+
*/
|
|
11
|
+
import { BaseDialog } from './base-dialog';
|
|
12
|
+
import type { ActionDialogConfig, ActionDialogCallbacks } from './dialog-types';
|
|
13
|
+
/**
|
|
14
|
+
* アクションダイアログコンポーネント
|
|
15
|
+
* ユーザーに確認・キャンセルの選択を求めるダイアログ
|
|
16
|
+
*/
|
|
17
|
+
export declare class ActionDialog extends BaseDialog {
|
|
18
|
+
protected config: Required<Omit<ActionDialogConfig, 'customIcon' | 'message' | 'subActionContent'>> & Pick<ActionDialogConfig, 'customIcon' | 'message' | 'subActionContent'>;
|
|
19
|
+
protected callbacks: ActionDialogCallbacks;
|
|
20
|
+
constructor(config: ActionDialogConfig, callbacks?: ActionDialogCallbacks);
|
|
21
|
+
/**
|
|
22
|
+
* ダイアログのクラス名を取得
|
|
23
|
+
*/
|
|
24
|
+
protected getDialogClassName(): string;
|
|
25
|
+
/**
|
|
26
|
+
* ARIA role を取得(アクション確認なので alertdialog)
|
|
27
|
+
*/
|
|
28
|
+
protected getAriaRole(): string;
|
|
29
|
+
/**
|
|
30
|
+
* ダイアログのコンテンツをレンダリング
|
|
31
|
+
*/
|
|
32
|
+
protected renderContent(): HTMLElement;
|
|
33
|
+
/**
|
|
34
|
+
* ヘッダーをレンダリング
|
|
35
|
+
*/
|
|
36
|
+
private renderHeader;
|
|
37
|
+
/**
|
|
38
|
+
* アイコンをレンダリング
|
|
39
|
+
*/
|
|
40
|
+
private renderIcon;
|
|
41
|
+
/**
|
|
42
|
+
* アイコンのSVGを取得
|
|
43
|
+
*/
|
|
44
|
+
private getIconSVG;
|
|
45
|
+
/**
|
|
46
|
+
* ボディをレンダリング
|
|
47
|
+
*/
|
|
48
|
+
private renderBody;
|
|
49
|
+
/**
|
|
50
|
+
* フッターをレンダリング
|
|
51
|
+
*/
|
|
52
|
+
private renderFooter;
|
|
53
|
+
/**
|
|
54
|
+
* 確認ボタンクリック時
|
|
55
|
+
*/
|
|
56
|
+
private handleConfirm;
|
|
57
|
+
/**
|
|
58
|
+
* キャンセルボタンクリック時
|
|
59
|
+
*/
|
|
60
|
+
private handleCancel;
|
|
61
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Dialog Component
|
|
3
|
+
* すべてのダイアログバリアントの基盤となるクラス
|
|
4
|
+
*
|
|
5
|
+
* 機能:
|
|
6
|
+
* - オーバーレイ管理
|
|
7
|
+
* - フォーカストラップ
|
|
8
|
+
* - キーボードイベント処理(Escape, Tab)
|
|
9
|
+
* - ARIA属性管理
|
|
10
|
+
* - open/closeライフサイクル
|
|
11
|
+
* - bodyスクロール防止
|
|
12
|
+
* - フォーカス復元
|
|
13
|
+
*/
|
|
14
|
+
import type { BaseDialogConfig, BaseDialogCallbacks, BaseDialogState } from './dialog-types';
|
|
15
|
+
/**
|
|
16
|
+
* ベースダイアログコンポーネント
|
|
17
|
+
* すべてのダイアログタイプの共通ロジックを提供
|
|
18
|
+
*/
|
|
19
|
+
export declare class BaseDialog {
|
|
20
|
+
protected config: BaseDialogConfig;
|
|
21
|
+
protected callbacks: BaseDialogCallbacks;
|
|
22
|
+
protected state: BaseDialogState;
|
|
23
|
+
protected dialogElement: HTMLElement | null;
|
|
24
|
+
protected overlayElement: HTMLElement | null;
|
|
25
|
+
protected readonly dialogId: string;
|
|
26
|
+
private boundKeydownHandler;
|
|
27
|
+
constructor(config?: BaseDialogConfig, callbacks?: BaseDialogCallbacks);
|
|
28
|
+
/**
|
|
29
|
+
* ダイアログを開く
|
|
30
|
+
*/
|
|
31
|
+
open(): void;
|
|
32
|
+
/**
|
|
33
|
+
* ダイアログを閉じる
|
|
34
|
+
*/
|
|
35
|
+
close(): void;
|
|
36
|
+
/**
|
|
37
|
+
* 設定を更新
|
|
38
|
+
*/
|
|
39
|
+
updateConfig(config: Partial<BaseDialogConfig>): void;
|
|
40
|
+
/**
|
|
41
|
+
* 現在の状態を取得
|
|
42
|
+
*/
|
|
43
|
+
getState(): BaseDialogState;
|
|
44
|
+
/**
|
|
45
|
+
* ダイアログ要素を取得(テスト用)
|
|
46
|
+
*/
|
|
47
|
+
getDialogElement(): HTMLElement | null;
|
|
48
|
+
/**
|
|
49
|
+
* オーバーレイ要素を取得(テスト用)
|
|
50
|
+
*/
|
|
51
|
+
getOverlayElement(): HTMLElement | null;
|
|
52
|
+
/**
|
|
53
|
+
* ダイアログをレンダリング
|
|
54
|
+
* 継承クラスでオーバーライドして独自のコンテンツを追加
|
|
55
|
+
*/
|
|
56
|
+
protected render(): void;
|
|
57
|
+
/**
|
|
58
|
+
* ダイアログのコンテンツをレンダリング
|
|
59
|
+
* 継承クラスで必ずオーバーライドすること
|
|
60
|
+
*/
|
|
61
|
+
protected renderContent(): HTMLElement | null;
|
|
62
|
+
/**
|
|
63
|
+
* ダイアログのクラス名を取得
|
|
64
|
+
* 継承クラスでオーバーライドしてタイプ固有のクラスを追加
|
|
65
|
+
*/
|
|
66
|
+
protected getDialogClassName(): string;
|
|
67
|
+
/**
|
|
68
|
+
* ダイアログのARIA role を取得
|
|
69
|
+
* 継承クラスでオーバーライド可能(例: ActionDialog → alertdialog)
|
|
70
|
+
*/
|
|
71
|
+
protected getAriaRole(): string;
|
|
72
|
+
/**
|
|
73
|
+
* 初期フォーカス要素を取得
|
|
74
|
+
* 継承クラスでオーバーライドして特定の要素を返すことができる
|
|
75
|
+
*/
|
|
76
|
+
protected getFirstFocusElement(): HTMLElement | null;
|
|
77
|
+
/**
|
|
78
|
+
* オーバーレイを作成
|
|
79
|
+
*/
|
|
80
|
+
private createOverlay;
|
|
81
|
+
/**
|
|
82
|
+
* ダイアログコンテナを作成
|
|
83
|
+
*/
|
|
84
|
+
private createDialogContainer;
|
|
85
|
+
/**
|
|
86
|
+
* イベントリスナーを設定
|
|
87
|
+
*/
|
|
88
|
+
private setupEventListeners;
|
|
89
|
+
/**
|
|
90
|
+
* イベントリスナーを削除
|
|
91
|
+
*/
|
|
92
|
+
private removeEventListeners;
|
|
93
|
+
/**
|
|
94
|
+
* キーボードイベントハンドラ
|
|
95
|
+
*/
|
|
96
|
+
private handleKeydown;
|
|
97
|
+
/**
|
|
98
|
+
* Escapeキー処理
|
|
99
|
+
*/
|
|
100
|
+
private handleEscapeKey;
|
|
101
|
+
/**
|
|
102
|
+
* オーバーレイクリック処理
|
|
103
|
+
*/
|
|
104
|
+
private handleOverlayClick;
|
|
105
|
+
/**
|
|
106
|
+
* Tab キーの処理(フォーカストラップ)
|
|
107
|
+
*/
|
|
108
|
+
private handleTabKey;
|
|
109
|
+
/**
|
|
110
|
+
* フォーカス可能な要素を取得
|
|
111
|
+
*/
|
|
112
|
+
private getFocusableElements;
|
|
113
|
+
/**
|
|
114
|
+
* フォーカスをダイアログ内に設定
|
|
115
|
+
*/
|
|
116
|
+
private trapFocus;
|
|
117
|
+
/**
|
|
118
|
+
* ダイアログ要素を破棄
|
|
119
|
+
*/
|
|
120
|
+
private destroy;
|
|
121
|
+
/**
|
|
122
|
+
* HTML特殊文字をエスケープ
|
|
123
|
+
*/
|
|
124
|
+
protected escapeHtml(text: string): string;
|
|
125
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dialog Types
|
|
3
|
+
* ダイアログシステムの共通型定義
|
|
4
|
+
*/
|
|
5
|
+
export type DialogSize = 'XS' | 'S' | 'M' | 'L' | 'XL' | 'XXL' | 'FULL';
|
|
6
|
+
export interface BaseDialogConfig {
|
|
7
|
+
isOpen?: boolean;
|
|
8
|
+
size?: DialogSize;
|
|
9
|
+
ariaLabel?: string;
|
|
10
|
+
ariaLabelledby?: string;
|
|
11
|
+
ariaDescribedby?: string;
|
|
12
|
+
firstFocusTarget?: 'first' | 'confirm' | 'cancel';
|
|
13
|
+
onClickOverlay?: () => void | boolean;
|
|
14
|
+
onPressEscape?: () => void | boolean;
|
|
15
|
+
closeOnOverlayClick?: boolean;
|
|
16
|
+
closeOnEscape?: boolean;
|
|
17
|
+
contentPadding?: 'normal' | 'compact' | 'none';
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface BaseDialogCallbacks {
|
|
21
|
+
onOpen?: () => void;
|
|
22
|
+
onClose?: () => void;
|
|
23
|
+
onAfterClose?: () => void;
|
|
24
|
+
}
|
|
25
|
+
export interface BaseDialogState {
|
|
26
|
+
isOpen: boolean;
|
|
27
|
+
previouslyFocusedElement: Element | null;
|
|
28
|
+
}
|
|
29
|
+
export type DialogIcon = 'warning' | 'error' | 'info' | 'success' | 'custom';
|
|
30
|
+
export interface ActionDialogConfig extends BaseDialogConfig {
|
|
31
|
+
title: string;
|
|
32
|
+
message?: string;
|
|
33
|
+
icon?: DialogIcon;
|
|
34
|
+
customIcon?: string;
|
|
35
|
+
confirmLabel?: string;
|
|
36
|
+
cancelLabel?: string;
|
|
37
|
+
confirmDisabled?: boolean;
|
|
38
|
+
danger?: boolean;
|
|
39
|
+
showSubActionArea?: boolean;
|
|
40
|
+
subActionContent?: HTMLElement | string;
|
|
41
|
+
}
|
|
42
|
+
export interface ActionDialogCallbacks extends BaseDialogCallbacks {
|
|
43
|
+
onConfirm?: () => void | Promise<void>;
|
|
44
|
+
onCancel?: () => void;
|
|
45
|
+
}
|
|
46
|
+
export interface MessageDialogConfig extends BaseDialogConfig {
|
|
47
|
+
title: string;
|
|
48
|
+
message: string;
|
|
49
|
+
icon?: Exclude<DialogIcon, 'custom'> | 'custom';
|
|
50
|
+
customIcon?: string;
|
|
51
|
+
closeLabel?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface MessageDialogCallbacks extends BaseDialogCallbacks {
|
|
54
|
+
onAcknowledge?: () => void;
|
|
55
|
+
}
|
|
56
|
+
export interface ModelessDialogPosition {
|
|
57
|
+
top: number;
|
|
58
|
+
left: number;
|
|
59
|
+
}
|
|
60
|
+
export interface ModelessDialogConfig extends Omit<BaseDialogConfig, 'closeOnOverlayClick'> {
|
|
61
|
+
title: string;
|
|
62
|
+
position?: 'auto' | ModelessDialogPosition;
|
|
63
|
+
draggable?: boolean;
|
|
64
|
+
width?: number | string;
|
|
65
|
+
height?: number | string;
|
|
66
|
+
}
|
|
67
|
+
export interface ModelessDialogCallbacks extends BaseDialogCallbacks {
|
|
68
|
+
onMove?: (position: ModelessDialogPosition) => void;
|
|
69
|
+
}
|
|
70
|
+
export interface FormDialogConfig extends BaseDialogConfig {
|
|
71
|
+
title: string;
|
|
72
|
+
submitLabel?: string;
|
|
73
|
+
cancelLabel?: string;
|
|
74
|
+
preventCloseOnSubmit?: boolean;
|
|
75
|
+
warnOnUnsavedChanges?: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface FormDialogCallbacks extends BaseDialogCallbacks {
|
|
78
|
+
onSubmit?: (formData: FormData) => void | Promise<void>;
|
|
79
|
+
onCancel?: () => void;
|
|
80
|
+
onFormChange?: (isDirty: boolean) => void;
|
|
81
|
+
}
|
|
82
|
+
export interface DependencyInfo {
|
|
83
|
+
type: string;
|
|
84
|
+
label: string;
|
|
85
|
+
count: number;
|
|
86
|
+
}
|
|
87
|
+
export interface DeleteConfirmDialogConfig extends ActionDialogConfig {
|
|
88
|
+
targetName: string;
|
|
89
|
+
targetType?: string;
|
|
90
|
+
dependencies?: DependencyInfo[];
|
|
91
|
+
warningMessage?: string;
|
|
92
|
+
}
|
|
93
|
+
export interface DeleteConfirmDialogCallbacks extends ActionDialogCallbacks {
|
|
94
|
+
}
|
|
95
|
+
export interface DeleteConfirmDialogState extends BaseDialogState {
|
|
96
|
+
}
|