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,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combobox Component
|
|
3
|
+
* コンボボックスコンポーネント
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Single and multi-selection modes
|
|
7
|
+
* - Search/filter functionality
|
|
8
|
+
* - Async option loading with debounce
|
|
9
|
+
* - Grouped options support
|
|
10
|
+
* - Custom option rendering
|
|
11
|
+
* - Full keyboard navigation
|
|
12
|
+
* - ARIA accessibility
|
|
13
|
+
*
|
|
14
|
+
* API follows standard conventions from Headless UI and Radix UI:
|
|
15
|
+
* - `role="combobox"` with `aria-haspopup="listbox"`
|
|
16
|
+
* - `aria-expanded` for dropdown state
|
|
17
|
+
* - `aria-activedescendant` for keyboard navigation
|
|
18
|
+
* - `data-state="open|closed"` for styling
|
|
19
|
+
*/
|
|
20
|
+
import type { ComboboxField } from '../../types/schema';
|
|
21
|
+
/**
|
|
22
|
+
* コンボボックスの選択肢
|
|
23
|
+
*/
|
|
24
|
+
export interface ComboboxOption {
|
|
25
|
+
/** 値 */
|
|
26
|
+
value: string | number;
|
|
27
|
+
/** ラベル */
|
|
28
|
+
label: string;
|
|
29
|
+
/** 無効化 */
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
/** グループ名 */
|
|
32
|
+
group?: string;
|
|
33
|
+
/** アイコンHTML */
|
|
34
|
+
icon?: string;
|
|
35
|
+
/** 説明 */
|
|
36
|
+
description?: string;
|
|
37
|
+
/** カスタムデータ */
|
|
38
|
+
data?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* コンボボックスの状態
|
|
42
|
+
*/
|
|
43
|
+
export interface ComboboxState {
|
|
44
|
+
/** 選択された値 */
|
|
45
|
+
selectedValues: (string | number)[];
|
|
46
|
+
/** 入力テキスト */
|
|
47
|
+
inputValue: string;
|
|
48
|
+
/** ドロップダウン開閉状態 */
|
|
49
|
+
isOpen: boolean;
|
|
50
|
+
/** ハイライト中のオプションインデックス */
|
|
51
|
+
highlightedIndex: number;
|
|
52
|
+
/** フィルタリング/ロード済みオプション */
|
|
53
|
+
filteredOptions: ComboboxOption[];
|
|
54
|
+
/** グループ化されたオプション */
|
|
55
|
+
groupedOptions: Map<string, ComboboxOption[]>;
|
|
56
|
+
/** ローディング状態 */
|
|
57
|
+
isLoading: boolean;
|
|
58
|
+
/** エラーメッセージ */
|
|
59
|
+
error: string | null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* コンボボックスのコールバック
|
|
63
|
+
*/
|
|
64
|
+
export interface ComboboxCallbacks {
|
|
65
|
+
/** 選択変更時 */
|
|
66
|
+
onChange?: (values: (string | number)[], state: ComboboxState) => void;
|
|
67
|
+
/** 入力変更時 */
|
|
68
|
+
onInputChange?: (value: string, state: ComboboxState) => void;
|
|
69
|
+
/** ドロップダウン開閉時 */
|
|
70
|
+
onOpen?: (state: ComboboxState) => void;
|
|
71
|
+
/** ドロップダウン閉じる時 */
|
|
72
|
+
onClose?: (state: ComboboxState) => void;
|
|
73
|
+
/** オプションハイライト時 */
|
|
74
|
+
onHighlight?: (option: ComboboxOption | null, state: ComboboxState) => void;
|
|
75
|
+
/** 非同期ロードエラー時 */
|
|
76
|
+
onError?: (error: Error, state: ComboboxState) => void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* コンボボックスの設定
|
|
80
|
+
*/
|
|
81
|
+
export interface ComboboxConfig {
|
|
82
|
+
/** コンポーネントID */
|
|
83
|
+
id: string;
|
|
84
|
+
/** プレースホルダー */
|
|
85
|
+
placeholder?: string;
|
|
86
|
+
/** 選択モード */
|
|
87
|
+
mode: 'single' | 'multi';
|
|
88
|
+
/** 静的オプション */
|
|
89
|
+
options?: ComboboxOption[];
|
|
90
|
+
/** 非同期ローダー関数 */
|
|
91
|
+
loadOptions?: (query: string) => Promise<ComboboxOption[]>;
|
|
92
|
+
/** デバウンス遅延(ms) */
|
|
93
|
+
debounceMs?: number;
|
|
94
|
+
/** クリア可能 */
|
|
95
|
+
clearable?: boolean;
|
|
96
|
+
/** 無効化 */
|
|
97
|
+
disabled?: boolean;
|
|
98
|
+
/** 必須フィールド */
|
|
99
|
+
required?: boolean;
|
|
100
|
+
/** 非同期ロード最小検索文字数 */
|
|
101
|
+
minSearchLength?: number;
|
|
102
|
+
/** 最大選択数(multiモード) */
|
|
103
|
+
maxSelections?: number;
|
|
104
|
+
/** カスタムオプションレンダラー */
|
|
105
|
+
renderOption?: (option: ComboboxOption) => string;
|
|
106
|
+
/** カスタム選択値レンダラー */
|
|
107
|
+
renderSelected?: (option: ComboboxOption) => string;
|
|
108
|
+
/** オプションなしメッセージ */
|
|
109
|
+
noOptionsMessage?: string;
|
|
110
|
+
/** ローディングメッセージ */
|
|
111
|
+
loadingMessage?: string;
|
|
112
|
+
/** name属性(フォーム用) */
|
|
113
|
+
name?: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* コンボボックスコンポーネント
|
|
117
|
+
*/
|
|
118
|
+
export declare class Combobox {
|
|
119
|
+
private config;
|
|
120
|
+
private state;
|
|
121
|
+
private callbacks;
|
|
122
|
+
private container;
|
|
123
|
+
private instanceId;
|
|
124
|
+
private debounceTimer;
|
|
125
|
+
private inputRef;
|
|
126
|
+
private listboxRef;
|
|
127
|
+
private documentClickHandler;
|
|
128
|
+
private abortController;
|
|
129
|
+
constructor(container: HTMLElement, config: ComboboxConfig, callbacks?: ComboboxCallbacks, initialValues?: (string | number)[]);
|
|
130
|
+
/**
|
|
131
|
+
* コンボボックスをレンダリング
|
|
132
|
+
*/
|
|
133
|
+
render(): void;
|
|
134
|
+
/**
|
|
135
|
+
* 値を取得
|
|
136
|
+
*/
|
|
137
|
+
getValue(): (string | number)[];
|
|
138
|
+
/**
|
|
139
|
+
* 値を設定
|
|
140
|
+
*/
|
|
141
|
+
setValue(values: (string | number)[]): void;
|
|
142
|
+
/**
|
|
143
|
+
* 選択されたオプションを取得
|
|
144
|
+
*/
|
|
145
|
+
getSelectedOptions(): ComboboxOption[];
|
|
146
|
+
/**
|
|
147
|
+
* ドロップダウンを開く
|
|
148
|
+
*/
|
|
149
|
+
open(): void;
|
|
150
|
+
/**
|
|
151
|
+
* ドロップダウンを閉じる
|
|
152
|
+
*/
|
|
153
|
+
close(): void;
|
|
154
|
+
/**
|
|
155
|
+
* ドロップダウンの開閉状態をトグル
|
|
156
|
+
*/
|
|
157
|
+
toggle(): void;
|
|
158
|
+
/**
|
|
159
|
+
* ドロップダウンが開いているか
|
|
160
|
+
*/
|
|
161
|
+
isOpenState(): boolean;
|
|
162
|
+
/**
|
|
163
|
+
* オプションを設定
|
|
164
|
+
*/
|
|
165
|
+
setOptions(options: ComboboxOption[]): void;
|
|
166
|
+
/**
|
|
167
|
+
* オプションを追加
|
|
168
|
+
*/
|
|
169
|
+
addOption(option: ComboboxOption): void;
|
|
170
|
+
/**
|
|
171
|
+
* オプションを削除
|
|
172
|
+
*/
|
|
173
|
+
removeOption(value: string | number): void;
|
|
174
|
+
/**
|
|
175
|
+
* 状態を取得
|
|
176
|
+
*/
|
|
177
|
+
getState(): ComboboxState;
|
|
178
|
+
/**
|
|
179
|
+
* クリーンアップ
|
|
180
|
+
*/
|
|
181
|
+
destroy(): void;
|
|
182
|
+
private createInitialState;
|
|
183
|
+
private setState;
|
|
184
|
+
private updateFilteredOptions;
|
|
185
|
+
private filterOptions;
|
|
186
|
+
private groupOptions;
|
|
187
|
+
private loadOptionsAsync;
|
|
188
|
+
private renderInputArea;
|
|
189
|
+
private createInputElement;
|
|
190
|
+
private renderTags;
|
|
191
|
+
private renderIndicators;
|
|
192
|
+
private renderDropdown;
|
|
193
|
+
private renderOption;
|
|
194
|
+
private setupEventListeners;
|
|
195
|
+
private handleInputFocus;
|
|
196
|
+
private handleInput;
|
|
197
|
+
private handleKeyDown;
|
|
198
|
+
private handleClear;
|
|
199
|
+
private handleOptionClick;
|
|
200
|
+
private handleOptionHover;
|
|
201
|
+
private selectOption;
|
|
202
|
+
private deselectOption;
|
|
203
|
+
private clearSelection;
|
|
204
|
+
private selectHighlighted;
|
|
205
|
+
private removeLastSelected;
|
|
206
|
+
private highlightNext;
|
|
207
|
+
private highlightPrevious;
|
|
208
|
+
private highlightOption;
|
|
209
|
+
/**
|
|
210
|
+
* コンボボックスフィールドをHTMLとしてレンダリング(静的メソッド)
|
|
211
|
+
* SSR/初期レンダリング用
|
|
212
|
+
*
|
|
213
|
+
* @param field - コンボボックスフィールド定義
|
|
214
|
+
* @returns 生成されたHTML文字列
|
|
215
|
+
*/
|
|
216
|
+
static renderField(field: ComboboxField): string;
|
|
217
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Table Component
|
|
3
|
+
* データテーブル(一覧表示)コンポーネント
|
|
4
|
+
*/
|
|
5
|
+
import type { DataTableField, DataTableRow, DataTableSortConfig } from '../../types/schema';
|
|
6
|
+
/**
|
|
7
|
+
* データテーブルの状態
|
|
8
|
+
*/
|
|
9
|
+
export interface DataTableState {
|
|
10
|
+
/** 現在のデータ */
|
|
11
|
+
data: DataTableRow[];
|
|
12
|
+
/** 元のデータ(フィルタリング・ソート前) */
|
|
13
|
+
originalData: DataTableRow[];
|
|
14
|
+
/** 現在のソート設定 */
|
|
15
|
+
sort: DataTableSortConfig | null;
|
|
16
|
+
/** 現在のフィルター値 */
|
|
17
|
+
filterValues: Record<string, unknown>;
|
|
18
|
+
/** 選択された行ID */
|
|
19
|
+
selectedRowIds: Set<string | number>;
|
|
20
|
+
/** 現在のページ(0始まり) */
|
|
21
|
+
currentPage: number;
|
|
22
|
+
/** 1ページあたりの行数 */
|
|
23
|
+
pageSize: number;
|
|
24
|
+
/** 総件数 */
|
|
25
|
+
totalCount: number;
|
|
26
|
+
/** ローディング状態 */
|
|
27
|
+
isLoading: boolean;
|
|
28
|
+
/** 折りたたまれたグループ名のセット */
|
|
29
|
+
collapsedGroups: Set<string>;
|
|
30
|
+
/** カラム幅の状態(リサイズ用) */
|
|
31
|
+
columnWidths: Record<string, number>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* データテーブルのコールバック
|
|
35
|
+
*/
|
|
36
|
+
export interface DataTableCallbacks {
|
|
37
|
+
/** ソート変更時 */
|
|
38
|
+
onSortChange?: (sort: DataTableSortConfig, state: DataTableState) => void;
|
|
39
|
+
/** フィルター変更時 */
|
|
40
|
+
onFilterChange?: (filters: Record<string, unknown>, state: DataTableState) => void;
|
|
41
|
+
/** 行選択時 */
|
|
42
|
+
onSelectionChange?: (selectedIds: Set<string | number>, state: DataTableState) => void;
|
|
43
|
+
/** 行アクション実行時 */
|
|
44
|
+
onRowAction?: (actionId: string, row: DataTableRow, state: DataTableState) => void;
|
|
45
|
+
/** ページ変更時 */
|
|
46
|
+
onPageChange?: (page: number, state: DataTableState) => void;
|
|
47
|
+
/** ページサイズ変更時 */
|
|
48
|
+
onPageSizeChange?: (pageSize: number, state: DataTableState) => void;
|
|
49
|
+
/** グループ展開/折りたたみ時 */
|
|
50
|
+
onGroupToggle?: (groupName: string, isExpanded: boolean, state: DataTableState) => void;
|
|
51
|
+
/** 列リサイズ時 */
|
|
52
|
+
onColumnResize?: (columnId: string, width: number, state: DataTableState) => void;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* データテーブルコンポーネント
|
|
56
|
+
*/
|
|
57
|
+
export declare class DataTable {
|
|
58
|
+
private config;
|
|
59
|
+
private container;
|
|
60
|
+
private callbacks;
|
|
61
|
+
private state;
|
|
62
|
+
private tableId;
|
|
63
|
+
private boundHandleClick;
|
|
64
|
+
private boundHandleChange;
|
|
65
|
+
private boundHandleKeypress;
|
|
66
|
+
private boundHandleMouseDown;
|
|
67
|
+
private boundHandleMouseMove;
|
|
68
|
+
private boundHandleMouseUp;
|
|
69
|
+
private resizingColumnId;
|
|
70
|
+
private resizeStartX;
|
|
71
|
+
private resizeStartWidth;
|
|
72
|
+
constructor(config: DataTableField, container: HTMLElement, callbacks?: DataTableCallbacks);
|
|
73
|
+
/**
|
|
74
|
+
* 現在の状態を取得
|
|
75
|
+
*/
|
|
76
|
+
getState(): DataTableState;
|
|
77
|
+
/**
|
|
78
|
+
* データを設定
|
|
79
|
+
*/
|
|
80
|
+
setData(data: DataTableRow[], totalCount?: number): void;
|
|
81
|
+
/**
|
|
82
|
+
* データ変換(フィルター、ソート、ページネーション)を適用
|
|
83
|
+
*/
|
|
84
|
+
private applyDataTransformations;
|
|
85
|
+
/**
|
|
86
|
+
* ソートを設定
|
|
87
|
+
*/
|
|
88
|
+
setSort(column: string, direction: 'asc' | 'desc'): void;
|
|
89
|
+
/**
|
|
90
|
+
* フィルター値を設定
|
|
91
|
+
*/
|
|
92
|
+
setFilterValues(values: Record<string, unknown>): void;
|
|
93
|
+
/**
|
|
94
|
+
* フィルターをリセット
|
|
95
|
+
*/
|
|
96
|
+
resetFilters(): void;
|
|
97
|
+
/**
|
|
98
|
+
* 行を選択
|
|
99
|
+
*/
|
|
100
|
+
selectRow(rowId: string | number): void;
|
|
101
|
+
/**
|
|
102
|
+
* 全行を選択/解除
|
|
103
|
+
*/
|
|
104
|
+
selectAll(selected: boolean): void;
|
|
105
|
+
/**
|
|
106
|
+
* 選択された行を取得
|
|
107
|
+
*/
|
|
108
|
+
getSelectedRows(): DataTableRow[];
|
|
109
|
+
/**
|
|
110
|
+
* ページを変更
|
|
111
|
+
*/
|
|
112
|
+
setPage(page: number): void;
|
|
113
|
+
/**
|
|
114
|
+
* ページサイズを変更
|
|
115
|
+
*/
|
|
116
|
+
setPageSize(pageSize: number): void;
|
|
117
|
+
/**
|
|
118
|
+
* ローディング状態を設定
|
|
119
|
+
*/
|
|
120
|
+
setLoading(isLoading: boolean): void;
|
|
121
|
+
/**
|
|
122
|
+
* コンポーネントをレンダリング
|
|
123
|
+
*/
|
|
124
|
+
render(): void;
|
|
125
|
+
/**
|
|
126
|
+
* イベントリスナーを削除(メモリリーク防止)
|
|
127
|
+
*/
|
|
128
|
+
private detachEventListeners;
|
|
129
|
+
/**
|
|
130
|
+
* イベントリスナーをアタッチ(イベント委譲パターン)
|
|
131
|
+
*/
|
|
132
|
+
private attachEventListeners;
|
|
133
|
+
/**
|
|
134
|
+
* クリックイベントハンドラー(イベント委譲)
|
|
135
|
+
*/
|
|
136
|
+
private handleClick;
|
|
137
|
+
/**
|
|
138
|
+
* 変更イベントハンドラー(イベント委譲)
|
|
139
|
+
*/
|
|
140
|
+
private handleChange;
|
|
141
|
+
/**
|
|
142
|
+
* キープレスイベントハンドラー(イベント委譲)
|
|
143
|
+
*/
|
|
144
|
+
private handleKeypress;
|
|
145
|
+
/**
|
|
146
|
+
* グループを展開/折りたたみ
|
|
147
|
+
*/
|
|
148
|
+
toggleGroup(groupName: string): void;
|
|
149
|
+
/**
|
|
150
|
+
* 全グループを展開
|
|
151
|
+
*/
|
|
152
|
+
expandAllGroups(): void;
|
|
153
|
+
/**
|
|
154
|
+
* 全グループを折りたたむ
|
|
155
|
+
*/
|
|
156
|
+
collapseAllGroups(): void;
|
|
157
|
+
/**
|
|
158
|
+
* カラム幅を設定
|
|
159
|
+
*/
|
|
160
|
+
setColumnWidth(columnId: string, width: number): void;
|
|
161
|
+
/**
|
|
162
|
+
* マウスダウンイベントハンドラー(リサイズ開始)
|
|
163
|
+
*/
|
|
164
|
+
private handleMouseDown;
|
|
165
|
+
/**
|
|
166
|
+
* マウスムーブイベントハンドラー(リサイズ中)
|
|
167
|
+
*/
|
|
168
|
+
private handleMouseMove;
|
|
169
|
+
/**
|
|
170
|
+
* マウスアップイベントハンドラー(リサイズ終了)
|
|
171
|
+
*/
|
|
172
|
+
private handleMouseUp;
|
|
173
|
+
/**
|
|
174
|
+
* コンポーネントを破棄(クリーンアップ)
|
|
175
|
+
*/
|
|
176
|
+
destroy(): void;
|
|
177
|
+
/**
|
|
178
|
+
* 入力からフィルター値を適用
|
|
179
|
+
*/
|
|
180
|
+
private applyFiltersFromInputs;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* データテーブルフィールドを静的HTMLとしてレンダリング
|
|
184
|
+
* form-fields.ts から呼び出される
|
|
185
|
+
*/
|
|
186
|
+
export declare function renderDataTableField(field: DataTableField): string;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DateRangePicker Component
|
|
3
|
+
* 日付範囲を選択するためのコンポーネント
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - 開始日・終了日の選択
|
|
7
|
+
* - プリセット (Last 7 days, Last 30 days等)
|
|
8
|
+
* - カレンダーUI(デュアルカレンダー表示)
|
|
9
|
+
* - キーボードナビゲーション
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* 日付範囲
|
|
13
|
+
*/
|
|
14
|
+
export interface DateRange {
|
|
15
|
+
/** 開始日 */
|
|
16
|
+
from: Date | null;
|
|
17
|
+
/** 終了日 */
|
|
18
|
+
to: Date | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* プリセット項目
|
|
22
|
+
*/
|
|
23
|
+
export interface DateRangePreset {
|
|
24
|
+
/** プリセットID */
|
|
25
|
+
id: string;
|
|
26
|
+
/** 表示ラベル */
|
|
27
|
+
label: string;
|
|
28
|
+
/** 範囲を計算する関数 */
|
|
29
|
+
getRange: () => DateRange;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* DateRangePickerの状態
|
|
33
|
+
*/
|
|
34
|
+
export interface DateRangePickerState {
|
|
35
|
+
/** 現在選択されている日付範囲 */
|
|
36
|
+
value: DateRange;
|
|
37
|
+
/** ドロップダウンの開閉状態 */
|
|
38
|
+
isOpen: boolean;
|
|
39
|
+
/** 左カレンダーの表示月 */
|
|
40
|
+
leftDisplayedMonth: Date;
|
|
41
|
+
/** 右カレンダーの表示月 */
|
|
42
|
+
rightDisplayedMonth: Date;
|
|
43
|
+
/** 範囲選択中の仮開始日 */
|
|
44
|
+
selectionStart: Date | null;
|
|
45
|
+
/** ホバー中の日付 */
|
|
46
|
+
hoveredDate: Date | null;
|
|
47
|
+
/** 無効化状態 */
|
|
48
|
+
disabled: boolean;
|
|
49
|
+
/** 選択中のプリセットID */
|
|
50
|
+
selectedPresetId: string | null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* DateRangePickerのコールバック
|
|
54
|
+
*/
|
|
55
|
+
export interface DateRangePickerCallbacks {
|
|
56
|
+
/** 日付範囲変更時 */
|
|
57
|
+
onChange: (range: DateRange, presetId: string | null, state: DateRangePickerState) => void;
|
|
58
|
+
/** ドロップダウン開閉時 */
|
|
59
|
+
onOpenChange?: (isOpen: boolean, state: DateRangePickerState) => void;
|
|
60
|
+
/** 適用ボタンクリック時 */
|
|
61
|
+
onApply?: (range: DateRange, state: DateRangePickerState) => void;
|
|
62
|
+
/** キャンセルボタンクリック時 */
|
|
63
|
+
onCancel?: (state: DateRangePickerState) => void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* DateRangePickerの設定
|
|
67
|
+
*/
|
|
68
|
+
export interface DateRangePickerConfig {
|
|
69
|
+
/** 初期選択日付範囲 */
|
|
70
|
+
value?: DateRange;
|
|
71
|
+
/** 選択可能な日付範囲の開始日 */
|
|
72
|
+
minDate?: Date;
|
|
73
|
+
/** 選択可能な日付範囲の終了日 */
|
|
74
|
+
maxDate?: Date;
|
|
75
|
+
/** 無効化 */
|
|
76
|
+
disabled?: boolean;
|
|
77
|
+
/** プリセット一覧 */
|
|
78
|
+
presets?: DateRangePreset[];
|
|
79
|
+
/** プリセットを表示するかどうか */
|
|
80
|
+
showPresets?: boolean;
|
|
81
|
+
/** 週の開始曜日 (0: 日曜, 1: 月曜) */
|
|
82
|
+
weekStartsOn?: 0 | 1;
|
|
83
|
+
/** ロケール */
|
|
84
|
+
locale?: string;
|
|
85
|
+
/** トリガーのプレースホルダー */
|
|
86
|
+
placeholder?: string;
|
|
87
|
+
/** 日付フォーマット関数 */
|
|
88
|
+
formatDate?: (date: Date) => string;
|
|
89
|
+
/** 適用ボタンを表示するか */
|
|
90
|
+
showApplyButton?: boolean;
|
|
91
|
+
/** キャンセルボタンを表示するか */
|
|
92
|
+
showCancelButton?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* デフォルトのプリセット
|
|
96
|
+
*/
|
|
97
|
+
export declare function getDefaultPresets(): DateRangePreset[];
|
|
98
|
+
/**
|
|
99
|
+
* DateRangePickerコンポーネント
|
|
100
|
+
*/
|
|
101
|
+
export declare class DateRangePicker {
|
|
102
|
+
private config;
|
|
103
|
+
private state;
|
|
104
|
+
private callbacks;
|
|
105
|
+
private container;
|
|
106
|
+
private instanceId;
|
|
107
|
+
private triggerElement;
|
|
108
|
+
private dropdownElement;
|
|
109
|
+
private clickOutsideHandler;
|
|
110
|
+
private keyboardHandler;
|
|
111
|
+
private savedValue;
|
|
112
|
+
constructor(container: HTMLElement, config: DateRangePickerConfig | undefined, callbacks: DateRangePickerCallbacks);
|
|
113
|
+
/**
|
|
114
|
+
* コンポーネントをレンダリング
|
|
115
|
+
*/
|
|
116
|
+
render(): void;
|
|
117
|
+
/**
|
|
118
|
+
* 日付範囲を設定
|
|
119
|
+
*/
|
|
120
|
+
setValue(value: DateRange): void;
|
|
121
|
+
/**
|
|
122
|
+
* 日付範囲を取得
|
|
123
|
+
*/
|
|
124
|
+
getValue(): DateRange;
|
|
125
|
+
/**
|
|
126
|
+
* 開閉状態を切り替え
|
|
127
|
+
*/
|
|
128
|
+
toggle(): void;
|
|
129
|
+
/**
|
|
130
|
+
* 開く
|
|
131
|
+
*/
|
|
132
|
+
open(): void;
|
|
133
|
+
/**
|
|
134
|
+
* 閉じる
|
|
135
|
+
*/
|
|
136
|
+
close(): void;
|
|
137
|
+
/**
|
|
138
|
+
* 開閉状態を設定
|
|
139
|
+
*/
|
|
140
|
+
setOpen(isOpen: boolean): void;
|
|
141
|
+
/**
|
|
142
|
+
* 無効化状態を設定
|
|
143
|
+
*/
|
|
144
|
+
setDisabled(disabled: boolean): void;
|
|
145
|
+
/**
|
|
146
|
+
* 状態を取得
|
|
147
|
+
*/
|
|
148
|
+
getState(): DateRangePickerState;
|
|
149
|
+
/**
|
|
150
|
+
* 破棄
|
|
151
|
+
*/
|
|
152
|
+
destroy(): void;
|
|
153
|
+
private createInitialState;
|
|
154
|
+
private updateDisplayedMonths;
|
|
155
|
+
private renderTrigger;
|
|
156
|
+
private renderDropdown;
|
|
157
|
+
private renderPresets;
|
|
158
|
+
private renderCalendar;
|
|
159
|
+
private renderCalendarHeader;
|
|
160
|
+
private renderCalendarGrid;
|
|
161
|
+
private renderWeekdayHeader;
|
|
162
|
+
private renderWeekRow;
|
|
163
|
+
private renderDateCell;
|
|
164
|
+
private renderFooter;
|
|
165
|
+
private handlePresetClick;
|
|
166
|
+
private handleDateClick;
|
|
167
|
+
private handleDateHover;
|
|
168
|
+
private handleDateLeave;
|
|
169
|
+
private updateHoverStyles;
|
|
170
|
+
private handlePrevMonth;
|
|
171
|
+
private handleNextMonth;
|
|
172
|
+
private handleApply;
|
|
173
|
+
private handleCancel;
|
|
174
|
+
private handleClickOutside;
|
|
175
|
+
private handleKeyboard;
|
|
176
|
+
private attachEventListeners;
|
|
177
|
+
private detachEventListeners;
|
|
178
|
+
private normalizeDate;
|
|
179
|
+
private getFirstDayOfMonth;
|
|
180
|
+
private getCalendarWeeks;
|
|
181
|
+
private getWeekdayLabels;
|
|
182
|
+
private formatMonthYear;
|
|
183
|
+
private formatDateFull;
|
|
184
|
+
private formatDateISO;
|
|
185
|
+
private formatDate;
|
|
186
|
+
private formatRangeLabel;
|
|
187
|
+
private isToday;
|
|
188
|
+
private isDateDisabled;
|
|
189
|
+
private isDateSelected;
|
|
190
|
+
private isRangeStart;
|
|
191
|
+
private isRangeEnd;
|
|
192
|
+
private isInRange;
|
|
193
|
+
private isHovered;
|
|
194
|
+
private isInHoverRange;
|
|
195
|
+
private getCalendarIcon;
|
|
196
|
+
private getChevronLeftIcon;
|
|
197
|
+
private getChevronRightIcon;
|
|
198
|
+
private getChevronDownIcon;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* DateRangePickerコンポーネントを作成
|
|
202
|
+
*/
|
|
203
|
+
export declare function createDateRangePicker(container: HTMLElement, config: DateRangePickerConfig | undefined, callbacks: DateRangePickerCallbacks): DateRangePicker;
|