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,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repeater Component
|
|
3
|
+
* 動的フィールドグループ(リピーター)
|
|
4
|
+
*/
|
|
5
|
+
import type { RepeaterField, InputField } from '../../types';
|
|
6
|
+
/**
|
|
7
|
+
* リピーターアイテムの状態
|
|
8
|
+
*/
|
|
9
|
+
export interface RepeaterItem {
|
|
10
|
+
/** アイテムID */
|
|
11
|
+
id: string;
|
|
12
|
+
/** アイテムのデータ */
|
|
13
|
+
data: Record<string, unknown>;
|
|
14
|
+
/** 展開状態 */
|
|
15
|
+
expanded: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* リピーターの状態
|
|
19
|
+
*/
|
|
20
|
+
export interface RepeaterState {
|
|
21
|
+
/** アイテム一覧 */
|
|
22
|
+
items: RepeaterItem[];
|
|
23
|
+
/** ネストレベル */
|
|
24
|
+
nestLevel: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* リピーターのコールバック
|
|
28
|
+
*/
|
|
29
|
+
export interface RepeaterCallbacks {
|
|
30
|
+
/** アイテム追加時 */
|
|
31
|
+
onAdd?: (item: RepeaterItem, state: RepeaterState) => void;
|
|
32
|
+
/** アイテム削除時 */
|
|
33
|
+
onRemove?: (itemId: string, state: RepeaterState) => void;
|
|
34
|
+
/** 並べ替え時 */
|
|
35
|
+
onReorder?: (items: RepeaterItem[]) => void;
|
|
36
|
+
/** データ変更時 */
|
|
37
|
+
onChange?: (state: RepeaterState) => void;
|
|
38
|
+
/** フィールドレンダラー */
|
|
39
|
+
renderFields?: (fields: InputField[], container: HTMLElement, itemId: string, nestLevel: number) => void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* リピーターコンポーネント
|
|
43
|
+
*/
|
|
44
|
+
export declare class Repeater {
|
|
45
|
+
private config;
|
|
46
|
+
private state;
|
|
47
|
+
private callbacks;
|
|
48
|
+
private container;
|
|
49
|
+
/** 最大ネストレベル(2階層まで) */
|
|
50
|
+
private static readonly MAX_NEST_LEVEL;
|
|
51
|
+
constructor(config: RepeaterField, container: HTMLElement, callbacks?: RepeaterCallbacks, nestLevel?: number);
|
|
52
|
+
/**
|
|
53
|
+
* リピーターをレンダリング
|
|
54
|
+
*/
|
|
55
|
+
render(): void;
|
|
56
|
+
/**
|
|
57
|
+
* アイテムを追加
|
|
58
|
+
*/
|
|
59
|
+
addItem(withDummyData?: boolean): RepeaterItem | null;
|
|
60
|
+
/**
|
|
61
|
+
* アイテムを削除
|
|
62
|
+
*/
|
|
63
|
+
removeItem(itemId: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* アイテムデータを更新
|
|
66
|
+
*/
|
|
67
|
+
updateItemData(itemId: string, data: Record<string, unknown>): void;
|
|
68
|
+
/**
|
|
69
|
+
* アイテムの展開/折りたたみ
|
|
70
|
+
*/
|
|
71
|
+
toggleItemExpanded(itemId: string): void;
|
|
72
|
+
/**
|
|
73
|
+
* アイテムを上へ移動
|
|
74
|
+
*/
|
|
75
|
+
moveItemUp(itemId: string): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* アイテムを下へ移動
|
|
78
|
+
*/
|
|
79
|
+
moveItemDown(itemId: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* 現在の状態を取得
|
|
82
|
+
*/
|
|
83
|
+
getState(): RepeaterState;
|
|
84
|
+
/**
|
|
85
|
+
* 値を取得(フォーム送信用)
|
|
86
|
+
*/
|
|
87
|
+
getValue(): Record<string, unknown>[];
|
|
88
|
+
/**
|
|
89
|
+
* ダミーデータで初期化
|
|
90
|
+
*/
|
|
91
|
+
initWithDummyData(count?: number): void;
|
|
92
|
+
/**
|
|
93
|
+
* 初期状態を作成
|
|
94
|
+
*/
|
|
95
|
+
private createInitialState;
|
|
96
|
+
/**
|
|
97
|
+
* ヘッダーをレンダリング
|
|
98
|
+
*/
|
|
99
|
+
private renderHeader;
|
|
100
|
+
/**
|
|
101
|
+
* アイテムをレンダリング
|
|
102
|
+
*/
|
|
103
|
+
private renderItem;
|
|
104
|
+
/**
|
|
105
|
+
* フィールドプレースホルダーをレンダリング(renderFieldsコールバックがない場合)
|
|
106
|
+
*/
|
|
107
|
+
private renderFieldPlaceholder;
|
|
108
|
+
/**
|
|
109
|
+
* 簡易入力要素を作成
|
|
110
|
+
*/
|
|
111
|
+
private createSimpleInput;
|
|
112
|
+
/**
|
|
113
|
+
* フッター(追加ボタン)をレンダリング
|
|
114
|
+
*/
|
|
115
|
+
private renderFooter;
|
|
116
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResponseMessage Component
|
|
3
|
+
* レスポンスメッセージコンポーネント
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* https://smarthr.design/products/components/response-message/
|
|
7
|
+
*
|
|
8
|
+
* 機能:
|
|
9
|
+
* - タイプ(success/error/warning/info)
|
|
10
|
+
* - 詳細表示(折りたたみ)
|
|
11
|
+
* - 再試行ボタン
|
|
12
|
+
* - アイコン表示
|
|
13
|
+
*
|
|
14
|
+
* 用途:
|
|
15
|
+
* - フォーム送信結果
|
|
16
|
+
* - API呼び出し結果
|
|
17
|
+
* - バリデーションエラー表示
|
|
18
|
+
*/
|
|
19
|
+
import type { InputField } from '../../types/schema';
|
|
20
|
+
/**
|
|
21
|
+
* レスポンスメッセージのタイプ
|
|
22
|
+
* - success: 成功・完了
|
|
23
|
+
* - error: エラー・失敗
|
|
24
|
+
* - warning: 警告
|
|
25
|
+
* - info: 情報
|
|
26
|
+
*/
|
|
27
|
+
export type ResponseMessageType = 'success' | 'error' | 'warning' | 'info';
|
|
28
|
+
/**
|
|
29
|
+
* レスポンスメッセージの状態
|
|
30
|
+
*/
|
|
31
|
+
export interface ResponseMessageState {
|
|
32
|
+
/** 表示中かどうか */
|
|
33
|
+
visible: boolean;
|
|
34
|
+
/** 詳細展開状態 */
|
|
35
|
+
detailsExpanded: boolean;
|
|
36
|
+
/** ローディング状態(再試行中) */
|
|
37
|
+
loading: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* レスポンスメッセージのコールバック
|
|
41
|
+
*/
|
|
42
|
+
export interface ResponseMessageCallbacks {
|
|
43
|
+
/** 再試行ボタンクリック時 */
|
|
44
|
+
onRetry?: () => void | Promise<void>;
|
|
45
|
+
/** 詳細展開時 */
|
|
46
|
+
onExpandDetails?: () => void;
|
|
47
|
+
/** 詳細折りたたみ時 */
|
|
48
|
+
onCollapseDetails?: () => void;
|
|
49
|
+
/** 閉じるボタンクリック時 */
|
|
50
|
+
onClose?: () => void;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* レスポンスメッセージの設定
|
|
54
|
+
*/
|
|
55
|
+
export interface ResponseMessageConfig {
|
|
56
|
+
/** メインメッセージ */
|
|
57
|
+
message: string;
|
|
58
|
+
/** メッセージタイプ */
|
|
59
|
+
type?: ResponseMessageType;
|
|
60
|
+
/** 詳細メッセージ(折りたたみ表示) */
|
|
61
|
+
details?: string | string[];
|
|
62
|
+
/** 再試行ボタンを表示 */
|
|
63
|
+
showRetry?: boolean;
|
|
64
|
+
/** 再試行ボタンのラベル */
|
|
65
|
+
retryLabel?: string;
|
|
66
|
+
/** 閉じるボタンを表示 */
|
|
67
|
+
showClose?: boolean;
|
|
68
|
+
/** アイコンを非表示にする */
|
|
69
|
+
hideIcon?: boolean;
|
|
70
|
+
/** カスタムアイコン(SVG文字列) */
|
|
71
|
+
icon?: string;
|
|
72
|
+
/** 詳細セクションのラベル */
|
|
73
|
+
detailsLabel?: string;
|
|
74
|
+
/** ID属性 */
|
|
75
|
+
id?: string;
|
|
76
|
+
/** カスタムCSSクラス */
|
|
77
|
+
className?: string;
|
|
78
|
+
/** アクセシビリティ用ラベル */
|
|
79
|
+
ariaLabel?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* レスポンスメッセージコンポーネント
|
|
83
|
+
*/
|
|
84
|
+
export declare class ResponseMessage {
|
|
85
|
+
private config;
|
|
86
|
+
private state;
|
|
87
|
+
private callbacks;
|
|
88
|
+
private container;
|
|
89
|
+
private instanceId;
|
|
90
|
+
private detailsId;
|
|
91
|
+
private detailsToggleHandler;
|
|
92
|
+
private retryHandler;
|
|
93
|
+
private closeHandler;
|
|
94
|
+
constructor(container: HTMLElement, config: ResponseMessageConfig, callbacks?: ResponseMessageCallbacks);
|
|
95
|
+
/**
|
|
96
|
+
* コンポーネントをレンダリング
|
|
97
|
+
*/
|
|
98
|
+
render(): void;
|
|
99
|
+
/**
|
|
100
|
+
* メッセージを表示
|
|
101
|
+
*/
|
|
102
|
+
show(): void;
|
|
103
|
+
/**
|
|
104
|
+
* メッセージを非表示
|
|
105
|
+
*/
|
|
106
|
+
hide(): void;
|
|
107
|
+
/**
|
|
108
|
+
* 詳細を展開
|
|
109
|
+
*/
|
|
110
|
+
expandDetails(): void;
|
|
111
|
+
/**
|
|
112
|
+
* 詳細を折りたたむ
|
|
113
|
+
*/
|
|
114
|
+
collapseDetails(): void;
|
|
115
|
+
/**
|
|
116
|
+
* 詳細の展開/折りたたみを切り替え
|
|
117
|
+
*/
|
|
118
|
+
toggleDetails(): void;
|
|
119
|
+
/**
|
|
120
|
+
* ローディング状態を設定
|
|
121
|
+
*/
|
|
122
|
+
setLoading(loading: boolean): void;
|
|
123
|
+
/**
|
|
124
|
+
* メッセージを更新
|
|
125
|
+
*/
|
|
126
|
+
setMessage(message: string): void;
|
|
127
|
+
/**
|
|
128
|
+
* 詳細を更新
|
|
129
|
+
*/
|
|
130
|
+
setDetails(details: string | string[] | undefined): void;
|
|
131
|
+
/**
|
|
132
|
+
* タイプを更新
|
|
133
|
+
*/
|
|
134
|
+
setType(type: ResponseMessageType): void;
|
|
135
|
+
/**
|
|
136
|
+
* 設定を更新
|
|
137
|
+
*/
|
|
138
|
+
update(config: Partial<ResponseMessageConfig>): void;
|
|
139
|
+
/**
|
|
140
|
+
* 現在の状態を取得
|
|
141
|
+
*/
|
|
142
|
+
getState(): ResponseMessageState;
|
|
143
|
+
/**
|
|
144
|
+
* 表示中かどうかを取得
|
|
145
|
+
*/
|
|
146
|
+
isVisible(): boolean;
|
|
147
|
+
/**
|
|
148
|
+
* 詳細が展開中かどうかを取得
|
|
149
|
+
*/
|
|
150
|
+
isDetailsExpanded(): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* コンポーネントを破棄
|
|
153
|
+
*/
|
|
154
|
+
destroy(): void;
|
|
155
|
+
private createInitialState;
|
|
156
|
+
/**
|
|
157
|
+
* イベントリスナーをクリーンアップ
|
|
158
|
+
*/
|
|
159
|
+
private cleanupEventListeners;
|
|
160
|
+
private buildClassName;
|
|
161
|
+
private renderIcon;
|
|
162
|
+
private renderContent;
|
|
163
|
+
private renderActions;
|
|
164
|
+
private renderDetailsToggle;
|
|
165
|
+
private renderRetryButton;
|
|
166
|
+
private renderDetails;
|
|
167
|
+
private renderCloseButton;
|
|
168
|
+
private updateDetailsState;
|
|
169
|
+
private updateRetryButtonState;
|
|
170
|
+
private hasDetails;
|
|
171
|
+
/**
|
|
172
|
+
* カスタムSVGアイコンをサニタイズ
|
|
173
|
+
*/
|
|
174
|
+
private sanitizeSvgIcon;
|
|
175
|
+
static renderField(field: InputField): string;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* レスポンスメッセージを作成
|
|
179
|
+
*/
|
|
180
|
+
export declare function createResponseMessage(container: HTMLElement, config: ResponseMessageConfig, callbacks?: ResponseMessageCallbacks): ResponseMessage;
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SearchInput Component
|
|
3
|
+
* 検索専用の入力フィールドコンポーネント
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - 検索アイコン
|
|
7
|
+
* - プレースホルダー
|
|
8
|
+
* - クリアボタン
|
|
9
|
+
* - キーボードショートカット表示
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* 検索入力の状態
|
|
13
|
+
*/
|
|
14
|
+
export interface SearchInputState {
|
|
15
|
+
/** 現在の値 */
|
|
16
|
+
value: string;
|
|
17
|
+
/** 無効化状態 */
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
/** フォーカス状態 */
|
|
20
|
+
focused: boolean;
|
|
21
|
+
/** 検索中状態 */
|
|
22
|
+
loading: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 検索入力のコールバック
|
|
26
|
+
*/
|
|
27
|
+
export interface SearchInputCallbacks {
|
|
28
|
+
/** 値変更時 */
|
|
29
|
+
onChange?: (value: string, state: SearchInputState) => void;
|
|
30
|
+
/** 検索実行時(Enter押下またはdebounce後) */
|
|
31
|
+
onSearch?: (value: string, state: SearchInputState) => void;
|
|
32
|
+
/** クリアボタン押下時 */
|
|
33
|
+
onClear?: (state: SearchInputState) => void;
|
|
34
|
+
/** フォーカス時 */
|
|
35
|
+
onFocus?: (state: SearchInputState) => void;
|
|
36
|
+
/** ブラー時 */
|
|
37
|
+
onBlur?: (state: SearchInputState) => void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* キーボードショートカットの設定
|
|
41
|
+
*/
|
|
42
|
+
export interface KeyboardShortcut {
|
|
43
|
+
/** 修飾キー */
|
|
44
|
+
modifier?: 'cmd' | 'ctrl' | 'alt' | 'shift';
|
|
45
|
+
/** キー */
|
|
46
|
+
key: string;
|
|
47
|
+
/** 表示ラベル(省略時は自動生成) */
|
|
48
|
+
label?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 検索入力の設定
|
|
52
|
+
*/
|
|
53
|
+
export interface SearchInputConfig {
|
|
54
|
+
/** 初期値 */
|
|
55
|
+
defaultValue?: string;
|
|
56
|
+
/** プレースホルダー */
|
|
57
|
+
placeholder?: string;
|
|
58
|
+
/** 無効化 */
|
|
59
|
+
disabled?: boolean;
|
|
60
|
+
/** サイズ */
|
|
61
|
+
size?: 'small' | 'medium' | 'large';
|
|
62
|
+
/** クリアボタン表示 */
|
|
63
|
+
clearable?: boolean;
|
|
64
|
+
/** 検索アイコン表示 */
|
|
65
|
+
showSearchIcon?: boolean;
|
|
66
|
+
/** キーボードショートカット */
|
|
67
|
+
shortcut?: KeyboardShortcut;
|
|
68
|
+
/** 自動フォーカス */
|
|
69
|
+
autoFocus?: boolean;
|
|
70
|
+
/** デバウンス時間(ms)- 0の場合はデバウンスなし */
|
|
71
|
+
debounceMs?: number;
|
|
72
|
+
/** aria-label */
|
|
73
|
+
ariaLabel?: string;
|
|
74
|
+
/** ローディング状態 */
|
|
75
|
+
loading?: boolean;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 検索入力コンポーネント
|
|
79
|
+
*/
|
|
80
|
+
export declare class SearchInput {
|
|
81
|
+
private config;
|
|
82
|
+
private state;
|
|
83
|
+
private callbacks;
|
|
84
|
+
private container;
|
|
85
|
+
private instanceId;
|
|
86
|
+
private inputElement;
|
|
87
|
+
private debounceTimer;
|
|
88
|
+
private globalKeyHandler;
|
|
89
|
+
constructor(container: HTMLElement, config?: SearchInputConfig, callbacks?: SearchInputCallbacks);
|
|
90
|
+
/**
|
|
91
|
+
* 検索入力フィールドをレンダリング
|
|
92
|
+
*/
|
|
93
|
+
render(): void;
|
|
94
|
+
/**
|
|
95
|
+
* 値を設定
|
|
96
|
+
*/
|
|
97
|
+
setValue(value: string): void;
|
|
98
|
+
/**
|
|
99
|
+
* 値を取得
|
|
100
|
+
*/
|
|
101
|
+
getValue(): string;
|
|
102
|
+
/**
|
|
103
|
+
* ローディング状態を設定
|
|
104
|
+
*/
|
|
105
|
+
setLoading(loading: boolean): void;
|
|
106
|
+
/**
|
|
107
|
+
* 無効化状態を設定
|
|
108
|
+
*/
|
|
109
|
+
setDisabled(disabled: boolean): void;
|
|
110
|
+
/**
|
|
111
|
+
* フォーカス
|
|
112
|
+
*/
|
|
113
|
+
focus(): void;
|
|
114
|
+
/**
|
|
115
|
+
* ブラー
|
|
116
|
+
*/
|
|
117
|
+
blur(): void;
|
|
118
|
+
/**
|
|
119
|
+
* クリア
|
|
120
|
+
*/
|
|
121
|
+
clear(): void;
|
|
122
|
+
/**
|
|
123
|
+
* 状態を取得
|
|
124
|
+
*/
|
|
125
|
+
getState(): SearchInputState;
|
|
126
|
+
/**
|
|
127
|
+
* 破棄
|
|
128
|
+
*/
|
|
129
|
+
destroy(): void;
|
|
130
|
+
/**
|
|
131
|
+
* 初期状態を作成
|
|
132
|
+
*/
|
|
133
|
+
private createInitialState;
|
|
134
|
+
/**
|
|
135
|
+
* data-state属性の値を取得
|
|
136
|
+
*/
|
|
137
|
+
private getDataState;
|
|
138
|
+
/**
|
|
139
|
+
* 入力グループをレンダリング
|
|
140
|
+
*/
|
|
141
|
+
private renderInputGroup;
|
|
142
|
+
/**
|
|
143
|
+
* 検索アイコンをレンダリング
|
|
144
|
+
*/
|
|
145
|
+
private renderSearchIcon;
|
|
146
|
+
/**
|
|
147
|
+
* 検索アイコンを更新
|
|
148
|
+
*/
|
|
149
|
+
private updateSearchIcon;
|
|
150
|
+
/**
|
|
151
|
+
* 入力フィールドをレンダリング
|
|
152
|
+
*/
|
|
153
|
+
private renderInput;
|
|
154
|
+
/**
|
|
155
|
+
* クリアボタンをレンダリング
|
|
156
|
+
*/
|
|
157
|
+
private renderClearButton;
|
|
158
|
+
/**
|
|
159
|
+
* ショートカットバッジをレンダリング
|
|
160
|
+
*/
|
|
161
|
+
private renderShortcutBadge;
|
|
162
|
+
/**
|
|
163
|
+
* ショートカットラベルを取得
|
|
164
|
+
*/
|
|
165
|
+
private getShortcutLabel;
|
|
166
|
+
/**
|
|
167
|
+
* グローバルキーボードショートカットを登録
|
|
168
|
+
*/
|
|
169
|
+
private registerGlobalShortcut;
|
|
170
|
+
/**
|
|
171
|
+
* クリアボタンの表示/非表示を更新
|
|
172
|
+
*/
|
|
173
|
+
private updateClearButton;
|
|
174
|
+
/**
|
|
175
|
+
* 入力イベント
|
|
176
|
+
*/
|
|
177
|
+
private handleInput;
|
|
178
|
+
/**
|
|
179
|
+
* フォーカスイベント
|
|
180
|
+
*/
|
|
181
|
+
private handleFocus;
|
|
182
|
+
/**
|
|
183
|
+
* ブラーイベント
|
|
184
|
+
*/
|
|
185
|
+
private handleBlur;
|
|
186
|
+
/**
|
|
187
|
+
* キーダウンイベント
|
|
188
|
+
*/
|
|
189
|
+
private handleKeyDown;
|
|
190
|
+
/**
|
|
191
|
+
* クリアイベント
|
|
192
|
+
*/
|
|
193
|
+
private handleClear;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* 検索入力コンポーネントを作成
|
|
197
|
+
*/
|
|
198
|
+
export declare function createSearchInput(container: HTMLElement, config?: SearchInputConfig, callbacks?: SearchInputCallbacks): SearchInput;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section Navigation Component
|
|
3
|
+
* セクション間をスムーズスクロールで移動するナビゲーション
|
|
4
|
+
*/
|
|
5
|
+
import type { InputField } from '../../types/schema';
|
|
6
|
+
/**
|
|
7
|
+
* セクション定義
|
|
8
|
+
*/
|
|
9
|
+
export interface SectionDefinition {
|
|
10
|
+
/** セクションID(HTMLのid属性と一致させる) */
|
|
11
|
+
id: string;
|
|
12
|
+
/** セクション名 */
|
|
13
|
+
label: string;
|
|
14
|
+
/** アイコン(絵文字のみサポート、HTMLは安全のためテキストとして表示) */
|
|
15
|
+
icon?: string;
|
|
16
|
+
/** 無効化 */
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* セクションナビの状態
|
|
21
|
+
*/
|
|
22
|
+
export interface SectionNavState {
|
|
23
|
+
/** 現在アクティブなセクションID */
|
|
24
|
+
activeSectionId: string;
|
|
25
|
+
/** セクション一覧 */
|
|
26
|
+
sections: SectionDefinition[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* セクションナビのコールバック
|
|
30
|
+
*/
|
|
31
|
+
export interface SectionNavCallbacks {
|
|
32
|
+
/** セクション変更時(クリックによる遷移) */
|
|
33
|
+
onSectionChange?: (sectionId: string, state: SectionNavState) => void;
|
|
34
|
+
/** スクロールによるアクティブセクション変更時 */
|
|
35
|
+
onActiveChange?: (sectionId: string, state: SectionNavState) => void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* セクションナビの設定
|
|
39
|
+
*/
|
|
40
|
+
export interface SectionNavConfig {
|
|
41
|
+
/** セクション一覧 */
|
|
42
|
+
sections: SectionDefinition[];
|
|
43
|
+
/** 初期アクティブセクションID */
|
|
44
|
+
defaultActiveSection?: string;
|
|
45
|
+
/** スクロールオフセット(sticky headerの高さ考慮) */
|
|
46
|
+
scrollOffset?: number;
|
|
47
|
+
/** スクロール動作 */
|
|
48
|
+
scrollBehavior?: ScrollBehavior;
|
|
49
|
+
/** モバイル表示モード */
|
|
50
|
+
mobileMode?: 'scroll' | 'dropdown';
|
|
51
|
+
/** スティッキー位置(top値) */
|
|
52
|
+
stickyTop?: string;
|
|
53
|
+
/** Intersection Observer のルートマージン */
|
|
54
|
+
rootMargin?: string;
|
|
55
|
+
/** Intersection Observer の閾値 */
|
|
56
|
+
threshold?: number | number[];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* セクションナビゲーションコンポーネント
|
|
60
|
+
*/
|
|
61
|
+
export declare class SectionNav {
|
|
62
|
+
private config;
|
|
63
|
+
private state;
|
|
64
|
+
private callbacks;
|
|
65
|
+
private container;
|
|
66
|
+
private observer;
|
|
67
|
+
private isScrolling;
|
|
68
|
+
private scrollTimeout;
|
|
69
|
+
private documentClickHandler;
|
|
70
|
+
constructor(config: SectionNavConfig, container: HTMLElement, callbacks?: SectionNavCallbacks);
|
|
71
|
+
/**
|
|
72
|
+
* ナビゲーションをレンダリング
|
|
73
|
+
*/
|
|
74
|
+
render(): void;
|
|
75
|
+
/**
|
|
76
|
+
* 指定セクションにスクロール
|
|
77
|
+
* @param sectionId - スクロール先のセクションID
|
|
78
|
+
*/
|
|
79
|
+
scrollToSection(sectionId: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* アクティブセクションを設定(スクロールなし)
|
|
82
|
+
* @param sectionId - アクティブにするセクションID
|
|
83
|
+
*/
|
|
84
|
+
setActiveSection(sectionId: string): void;
|
|
85
|
+
/**
|
|
86
|
+
* 現在の状態を取得
|
|
87
|
+
* @returns 現在の状態のコピー
|
|
88
|
+
*/
|
|
89
|
+
getState(): SectionNavState;
|
|
90
|
+
/**
|
|
91
|
+
* 現在のアクティブセクションを取得
|
|
92
|
+
* @returns アクティブなセクション定義、またはundefined
|
|
93
|
+
*/
|
|
94
|
+
getActiveSection(): SectionDefinition | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* セクションを追加
|
|
97
|
+
* @param section - 追加するセクション定義
|
|
98
|
+
* @param index - 挿入位置(省略時は末尾に追加)
|
|
99
|
+
*/
|
|
100
|
+
addSection(section: SectionDefinition, index?: number): void;
|
|
101
|
+
/**
|
|
102
|
+
* セクションを削除
|
|
103
|
+
* @param sectionId - 削除するセクションID
|
|
104
|
+
* @returns 削除成功時true
|
|
105
|
+
*/
|
|
106
|
+
removeSection(sectionId: string): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* セクションを更新
|
|
109
|
+
* @param sectionId - 更新するセクションID
|
|
110
|
+
* @param updates - 更新内容
|
|
111
|
+
* @returns 更新成功時true
|
|
112
|
+
*/
|
|
113
|
+
updateSection(sectionId: string, updates: Partial<SectionDefinition>): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* クリーンアップ(Intersection Observerとイベントリスナーの解除)
|
|
116
|
+
*/
|
|
117
|
+
destroy(): void;
|
|
118
|
+
/**
|
|
119
|
+
* 設定を検証
|
|
120
|
+
*/
|
|
121
|
+
private validateConfig;
|
|
122
|
+
/**
|
|
123
|
+
* 初期状態を作成
|
|
124
|
+
*/
|
|
125
|
+
private createInitialState;
|
|
126
|
+
/**
|
|
127
|
+
* ナビゲーションリストをレンダリング
|
|
128
|
+
*/
|
|
129
|
+
private renderNavList;
|
|
130
|
+
/**
|
|
131
|
+
* ナビゲーションアイテムをレンダリング
|
|
132
|
+
*/
|
|
133
|
+
private renderNavItem;
|
|
134
|
+
/**
|
|
135
|
+
* モバイル用ドロップダウンをレンダリング
|
|
136
|
+
*/
|
|
137
|
+
private renderMobileDropdown;
|
|
138
|
+
/**
|
|
139
|
+
* Intersection Observerをセットアップ
|
|
140
|
+
*/
|
|
141
|
+
private setupIntersectionObserver;
|
|
142
|
+
/**
|
|
143
|
+
* Intersection Observerのコールバック
|
|
144
|
+
*/
|
|
145
|
+
private handleIntersection;
|
|
146
|
+
/**
|
|
147
|
+
* アクティブスタイルを更新
|
|
148
|
+
*/
|
|
149
|
+
private updateActiveStyles;
|
|
150
|
+
static renderField(field: InputField): string;
|
|
151
|
+
}
|