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,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SegmentedControl Component
|
|
3
|
+
* セグメントコントロールコンポーネント
|
|
4
|
+
*
|
|
5
|
+
* Button group component for selecting one option from multiple choices:
|
|
6
|
+
* - Size variations (small/medium)
|
|
7
|
+
* - Icon support for options
|
|
8
|
+
* - Disabled state (group and per-option)
|
|
9
|
+
* - Full-width display
|
|
10
|
+
* - Full ARIA compliance with keyboard navigation
|
|
11
|
+
*
|
|
12
|
+
* Use cases:
|
|
13
|
+
* - View switching (list/grid)
|
|
14
|
+
* - Filter switching
|
|
15
|
+
* - Tab alternative
|
|
16
|
+
*/
|
|
17
|
+
import type { InputField } from '../../types/schema';
|
|
18
|
+
/**
|
|
19
|
+
* セグメントコントロールのオプション
|
|
20
|
+
*/
|
|
21
|
+
export interface SegmentedControlOption {
|
|
22
|
+
/** 値 */
|
|
23
|
+
value: string;
|
|
24
|
+
/** ラベル */
|
|
25
|
+
label: string;
|
|
26
|
+
/** アイコン(SVG文字列) */
|
|
27
|
+
icon?: string;
|
|
28
|
+
/** 無効化 */
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* セグメントコントロールの状態
|
|
33
|
+
*/
|
|
34
|
+
export interface SegmentedControlState {
|
|
35
|
+
/** 選択された値 */
|
|
36
|
+
selectedValue: string;
|
|
37
|
+
/** 無効化状態 */
|
|
38
|
+
disabled: boolean;
|
|
39
|
+
/** フォーカスされているオプションのインデックス */
|
|
40
|
+
focusedIndex: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* セグメントコントロールのコールバック
|
|
44
|
+
*/
|
|
45
|
+
export interface SegmentedControlCallbacks {
|
|
46
|
+
/** 値変更時(値と状態を受け取る) */
|
|
47
|
+
onChange?: (value: string, state: SegmentedControlState) => void;
|
|
48
|
+
/** 値変更時(値のみを受け取る) - */
|
|
49
|
+
onClickOption?: (value: string) => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* セグメントコントロールの設定
|
|
53
|
+
*/
|
|
54
|
+
export interface SegmentedControlConfig {
|
|
55
|
+
/** オプション配列(必須) */
|
|
56
|
+
options: SegmentedControlOption[];
|
|
57
|
+
/** 初期選択値 */
|
|
58
|
+
value?: string;
|
|
59
|
+
/** サイズ: 's' (small) または 'default' (medium) - */
|
|
60
|
+
size?: 's' | 'default';
|
|
61
|
+
/** 無効化(グループ全体) */
|
|
62
|
+
disabled?: boolean;
|
|
63
|
+
/** フル幅表示 */
|
|
64
|
+
fullWidth?: boolean;
|
|
65
|
+
/** 幅(カスタム指定) */
|
|
66
|
+
width?: string | number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* セグメントコントロールコンポーネント
|
|
70
|
+
*/
|
|
71
|
+
export declare class SegmentedControl {
|
|
72
|
+
private config;
|
|
73
|
+
private state;
|
|
74
|
+
private callbacks;
|
|
75
|
+
private container;
|
|
76
|
+
private optionElements;
|
|
77
|
+
constructor(container: HTMLElement, config: SegmentedControlConfig, callbacks?: SegmentedControlCallbacks);
|
|
78
|
+
/**
|
|
79
|
+
* セグメントコントロールをレンダリング
|
|
80
|
+
*/
|
|
81
|
+
render(): void;
|
|
82
|
+
/**
|
|
83
|
+
* 値を設定
|
|
84
|
+
*/
|
|
85
|
+
setValue(value: string): void;
|
|
86
|
+
/**
|
|
87
|
+
* 無効化状態を設定
|
|
88
|
+
*/
|
|
89
|
+
setDisabled(disabled: boolean): void;
|
|
90
|
+
/**
|
|
91
|
+
* 現在の状態を取得
|
|
92
|
+
*/
|
|
93
|
+
getState(): SegmentedControlState;
|
|
94
|
+
/**
|
|
95
|
+
* 現在の値を取得
|
|
96
|
+
*/
|
|
97
|
+
getValue(): string;
|
|
98
|
+
/**
|
|
99
|
+
* 無効化されているかどうかを取得
|
|
100
|
+
*/
|
|
101
|
+
isDisabled(): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* 初期状態を作成
|
|
104
|
+
*/
|
|
105
|
+
private createInitialState;
|
|
106
|
+
/**
|
|
107
|
+
* オプションをレンダリング
|
|
108
|
+
*/
|
|
109
|
+
private renderOption;
|
|
110
|
+
/**
|
|
111
|
+
* オプションクリックを処理
|
|
112
|
+
*/
|
|
113
|
+
private handleOptionClick;
|
|
114
|
+
/**
|
|
115
|
+
* キーボードナビゲーションを処理
|
|
116
|
+
*/
|
|
117
|
+
private handleKeyboardNavigation;
|
|
118
|
+
/**
|
|
119
|
+
* 次のオプションにフォーカス
|
|
120
|
+
*/
|
|
121
|
+
private focusNextOption;
|
|
122
|
+
/**
|
|
123
|
+
* 前のオプションにフォーカス
|
|
124
|
+
*/
|
|
125
|
+
private focusPreviousOption;
|
|
126
|
+
/**
|
|
127
|
+
* 最初の有効なオプションにフォーカス
|
|
128
|
+
*/
|
|
129
|
+
private focusFirstOption;
|
|
130
|
+
/**
|
|
131
|
+
* 最後の有効なオプションにフォーカス
|
|
132
|
+
*/
|
|
133
|
+
private focusLastOption;
|
|
134
|
+
/**
|
|
135
|
+
* 指定されたインデックスのオプションにフォーカス
|
|
136
|
+
*/
|
|
137
|
+
private focusOption;
|
|
138
|
+
static renderField(field: InputField): string;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* SegmentedControlを作成するファクトリ関数
|
|
142
|
+
*/
|
|
143
|
+
export declare function createSegmentedControl(container: HTMLElement, config: SegmentedControlConfig, callbacks?: SegmentedControlCallbacks): SegmentedControl;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Select Component
|
|
3
|
+
* セレクトコンポーネント
|
|
4
|
+
*
|
|
5
|
+
* Native <select> based component:
|
|
6
|
+
* - Size variants: 's' | 'default'
|
|
7
|
+
* - State variants: default, disabled, error
|
|
8
|
+
* - Support for optgroup (option grouping)
|
|
9
|
+
* - Placeholder and blank options
|
|
10
|
+
* - Full accessibility with ARIA attributes
|
|
11
|
+
*/
|
|
12
|
+
import type { SelectConfig, SelectState, SelectCallbacks, SelectField, MultiSelectField } from '../../types/schema';
|
|
13
|
+
/**
|
|
14
|
+
* セレクトコンポーネント
|
|
15
|
+
*/
|
|
16
|
+
export declare class Select {
|
|
17
|
+
private config;
|
|
18
|
+
private state;
|
|
19
|
+
private callbacks;
|
|
20
|
+
private container;
|
|
21
|
+
private instanceId;
|
|
22
|
+
private selectElement;
|
|
23
|
+
constructor(container: HTMLElement, config: SelectConfig, callbacks?: SelectCallbacks);
|
|
24
|
+
/**
|
|
25
|
+
* セレクトをレンダリング
|
|
26
|
+
*/
|
|
27
|
+
render(): void;
|
|
28
|
+
/**
|
|
29
|
+
* 値を設定
|
|
30
|
+
*/
|
|
31
|
+
setValue(value: string | number | null): void;
|
|
32
|
+
/**
|
|
33
|
+
* 無効化状態を設定
|
|
34
|
+
*/
|
|
35
|
+
setDisabled(disabled: boolean): void;
|
|
36
|
+
/**
|
|
37
|
+
* エラー状態を設定
|
|
38
|
+
*/
|
|
39
|
+
setError(error: boolean): void;
|
|
40
|
+
/**
|
|
41
|
+
* 現在の状態を取得
|
|
42
|
+
*/
|
|
43
|
+
getState(): SelectState;
|
|
44
|
+
/**
|
|
45
|
+
* 現在の値を取得
|
|
46
|
+
*/
|
|
47
|
+
getValue(): string | number | null;
|
|
48
|
+
/**
|
|
49
|
+
* 無効化されているかどうかを取得
|
|
50
|
+
*/
|
|
51
|
+
isDisabled(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* エラー状態かどうかを取得
|
|
54
|
+
*/
|
|
55
|
+
hasError(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* 初期状態を作成
|
|
58
|
+
*/
|
|
59
|
+
private createInitialState;
|
|
60
|
+
/**
|
|
61
|
+
* セレクト要素をレンダリング
|
|
62
|
+
*/
|
|
63
|
+
private renderSelect;
|
|
64
|
+
/**
|
|
65
|
+
* オプションを追加
|
|
66
|
+
*/
|
|
67
|
+
private appendOptions;
|
|
68
|
+
/**
|
|
69
|
+
* オプションを作成
|
|
70
|
+
*/
|
|
71
|
+
private createOption;
|
|
72
|
+
/**
|
|
73
|
+
* オプショングループを作成
|
|
74
|
+
*/
|
|
75
|
+
private createOptgroup;
|
|
76
|
+
/**
|
|
77
|
+
* セレクトフィールドをHTMLとしてレンダリング(静的メソッド)
|
|
78
|
+
* SSR/初期レンダリング用
|
|
79
|
+
*
|
|
80
|
+
* @param field - セレクトフィールド定義(select, multi_select)
|
|
81
|
+
* @returns 生成されたHTML文字列
|
|
82
|
+
*/
|
|
83
|
+
static renderField(field: SelectField | MultiSelectField): string;
|
|
84
|
+
/**
|
|
85
|
+
* 単一セレクトフィールドをHTMLとしてレンダリング
|
|
86
|
+
* @internal renderFieldから呼び出される内部メソッド
|
|
87
|
+
*/
|
|
88
|
+
private static renderSelectField;
|
|
89
|
+
/**
|
|
90
|
+
* マルチセレクトフィールドをHTMLとしてレンダリング
|
|
91
|
+
* @internal renderFieldから呼び出される内部メソッド
|
|
92
|
+
*/
|
|
93
|
+
private static renderMultiSelectField;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Selectを作成するファクトリ関数
|
|
97
|
+
*/
|
|
98
|
+
export declare function createSelect(container: HTMLElement, config: SelectConfig, callbacks?: SelectCallbacks): Select;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StatusLabel Component
|
|
3
|
+
* ステータスラベルコンポーネント
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* - タイプ(grey/blue/green/yellow/red/warning/error)
|
|
7
|
+
* - 強調表示(bold)
|
|
8
|
+
* - サイズ(small/medium)
|
|
9
|
+
* - アイコン付き
|
|
10
|
+
* - `data-type` / `data-size` / `data-bold` for styling
|
|
11
|
+
* - `role="status"` with `aria-label` for accessibility
|
|
12
|
+
*
|
|
13
|
+
* @see https://smarthr.design/products/components/status-label/
|
|
14
|
+
*/
|
|
15
|
+
import type { InputField } from '../../types/schema';
|
|
16
|
+
/**
|
|
17
|
+
* ステータスラベルのタイプ
|
|
18
|
+
* - grey: 中立的な状態
|
|
19
|
+
* - blue: 情報・進行中
|
|
20
|
+
* - green: 成功・完了
|
|
21
|
+
* - yellow: 注意
|
|
22
|
+
* - red: エラー・緊急
|
|
23
|
+
* - warning: 警告(黄色背景)
|
|
24
|
+
* - error: エラー(赤背景)
|
|
25
|
+
*/
|
|
26
|
+
export type StatusLabelType = 'grey' | 'blue' | 'green' | 'yellow' | 'red' | 'warning' | 'error';
|
|
27
|
+
/**
|
|
28
|
+
* ステータスラベルのサイズ
|
|
29
|
+
*/
|
|
30
|
+
export type StatusLabelSize = 'small' | 'medium';
|
|
31
|
+
/**
|
|
32
|
+
* ビルトインアイコンタイプ
|
|
33
|
+
*/
|
|
34
|
+
export type StatusLabelIconType = 'check' | 'warning' | 'error' | 'info' | 'clock' | 'circle' | 'dot';
|
|
35
|
+
/**
|
|
36
|
+
* ステータスラベルの状態
|
|
37
|
+
*/
|
|
38
|
+
export interface StatusLabelState {
|
|
39
|
+
/** 表示テキスト */
|
|
40
|
+
text: string;
|
|
41
|
+
/** 強調表示(背景と文字色を反転) */
|
|
42
|
+
bold: boolean;
|
|
43
|
+
/** 非表示状態 */
|
|
44
|
+
hidden: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* ステータスラベルのコールバック
|
|
48
|
+
*/
|
|
49
|
+
export interface StatusLabelCallbacks {
|
|
50
|
+
/** クリック時 */
|
|
51
|
+
onClick?: (event: MouseEvent) => void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* ステータスラベルの設定
|
|
55
|
+
*/
|
|
56
|
+
export interface StatusLabelConfig {
|
|
57
|
+
/** ラベルテキスト */
|
|
58
|
+
text: string;
|
|
59
|
+
/** タイプ(カラー) */
|
|
60
|
+
type?: StatusLabelType;
|
|
61
|
+
/** サイズ */
|
|
62
|
+
size?: StatusLabelSize;
|
|
63
|
+
/** 強調表示 */
|
|
64
|
+
bold?: boolean;
|
|
65
|
+
/** アイコン(ビルトインタイプまたはカスタムSVG) */
|
|
66
|
+
icon?: StatusLabelIconType | string;
|
|
67
|
+
/** アイコンの位置 */
|
|
68
|
+
iconPosition?: 'left' | 'right';
|
|
69
|
+
/** ラベル(アクセシビリティ用) */
|
|
70
|
+
label?: string;
|
|
71
|
+
/** クリック可能か */
|
|
72
|
+
clickable?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* ステータスラベルコンポーネント
|
|
76
|
+
*/
|
|
77
|
+
export declare class StatusLabel {
|
|
78
|
+
private config;
|
|
79
|
+
private state;
|
|
80
|
+
private callbacks;
|
|
81
|
+
private container;
|
|
82
|
+
private clickHandler;
|
|
83
|
+
constructor(container: HTMLElement, config: StatusLabelConfig, callbacks?: StatusLabelCallbacks);
|
|
84
|
+
/**
|
|
85
|
+
* ステータスラベルをレンダリング
|
|
86
|
+
*/
|
|
87
|
+
render(): void;
|
|
88
|
+
/**
|
|
89
|
+
* テキストを設定
|
|
90
|
+
*/
|
|
91
|
+
setText(text: string): void;
|
|
92
|
+
/**
|
|
93
|
+
* 強調表示を設定
|
|
94
|
+
*/
|
|
95
|
+
setBold(bold: boolean): void;
|
|
96
|
+
/**
|
|
97
|
+
* 非表示状態を設定
|
|
98
|
+
*/
|
|
99
|
+
setHidden(hidden: boolean): void;
|
|
100
|
+
/**
|
|
101
|
+
* 現在のテキストを取得
|
|
102
|
+
*/
|
|
103
|
+
getText(): string;
|
|
104
|
+
/**
|
|
105
|
+
* 強調表示状態を取得
|
|
106
|
+
*/
|
|
107
|
+
isBold(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* 現在の状態を取得
|
|
110
|
+
*/
|
|
111
|
+
getState(): Readonly<StatusLabelState>;
|
|
112
|
+
/**
|
|
113
|
+
* コンポーネントを破棄
|
|
114
|
+
*/
|
|
115
|
+
destroy(): void;
|
|
116
|
+
/**
|
|
117
|
+
* 初期状態を作成
|
|
118
|
+
*/
|
|
119
|
+
private createInitialState;
|
|
120
|
+
/**
|
|
121
|
+
* ラベル要素をレンダリング
|
|
122
|
+
*/
|
|
123
|
+
private renderLabel;
|
|
124
|
+
/**
|
|
125
|
+
* アイコン要素をレンダリング
|
|
126
|
+
*/
|
|
127
|
+
private renderIcon;
|
|
128
|
+
/**
|
|
129
|
+
* カスタムSVGアイコンをサニタイズ
|
|
130
|
+
* XSS攻撃を防ぐため、SVG要素のみを許可し、危険な属性を削除する
|
|
131
|
+
*/
|
|
132
|
+
private sanitizeSvgIcon;
|
|
133
|
+
/**
|
|
134
|
+
* アクセシビリティ用のラベルを取得
|
|
135
|
+
*/
|
|
136
|
+
private getAriaLabel;
|
|
137
|
+
/**
|
|
138
|
+
* クリックイベントハンドラー
|
|
139
|
+
*/
|
|
140
|
+
private handleClick;
|
|
141
|
+
static renderField(field: InputField): string;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* ステータスラベルを作成
|
|
145
|
+
*/
|
|
146
|
+
export declare function createStatusLabel(container: HTMLElement, config: StatusLabelConfig, callbacks?: StatusLabelCallbacks): StatusLabel;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stepper Component
|
|
3
|
+
*
|
|
4
|
+
*
|
|
5
|
+
* 連続する操作をステップごとにグルーピングするコンポーネント
|
|
6
|
+
* ステップの進行状況に応じて現在地や完了のステータスを表現
|
|
7
|
+
*/
|
|
8
|
+
import type { InputField } from '../../types/schema';
|
|
9
|
+
/**
|
|
10
|
+
* ステップのステータス
|
|
11
|
+
* - completed: 完了(チェックアイコン)
|
|
12
|
+
* - closed: 中断(×アイコン)
|
|
13
|
+
*/
|
|
14
|
+
export type StepperStatus = 'completed' | 'closed';
|
|
15
|
+
/**
|
|
16
|
+
* 拡張ステータス(カスタムテキスト付き)
|
|
17
|
+
*/
|
|
18
|
+
export interface StepperStatusWithText {
|
|
19
|
+
type: StepperStatus;
|
|
20
|
+
text: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 基本ステップ定義
|
|
24
|
+
*/
|
|
25
|
+
export interface Step {
|
|
26
|
+
/** ステップのラベル */
|
|
27
|
+
label: string;
|
|
28
|
+
/** ステータス(オプション) */
|
|
29
|
+
status?: StepperStatus | StepperStatusWithText;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 水平ステップ(HorizontalStepper用)
|
|
33
|
+
*/
|
|
34
|
+
export type HorizontalStep = Step;
|
|
35
|
+
/**
|
|
36
|
+
* 垂直ステップ(VerticalStepper用)- 子要素を持てる
|
|
37
|
+
*/
|
|
38
|
+
export interface VerticalStep extends Step {
|
|
39
|
+
/** 子要素のHTML */
|
|
40
|
+
children?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stepperの設定
|
|
44
|
+
*/
|
|
45
|
+
export interface StepperConfig {
|
|
46
|
+
/** レイアウトタイプ */
|
|
47
|
+
type: 'horizontal' | 'vertical';
|
|
48
|
+
/** ステップ配列 */
|
|
49
|
+
steps: HorizontalStep[] | VerticalStep[];
|
|
50
|
+
/** 現在のステップインデックス(0始まり) */
|
|
51
|
+
activeIndex?: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Stepperの状態
|
|
55
|
+
*/
|
|
56
|
+
export interface StepperState {
|
|
57
|
+
/** 現在のステップインデックス */
|
|
58
|
+
activeIndex: number;
|
|
59
|
+
/** レイアウトタイプ */
|
|
60
|
+
type: 'horizontal' | 'vertical';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Stepperのコールバック
|
|
64
|
+
*/
|
|
65
|
+
export interface StepperCallbacks {
|
|
66
|
+
/** ステップクリック時(過去のステップのみ) */
|
|
67
|
+
onStepClick?: (index: number) => void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Stepperコンポーネント
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
73
|
+
export declare class Stepper {
|
|
74
|
+
private config;
|
|
75
|
+
private container;
|
|
76
|
+
private state;
|
|
77
|
+
constructor(config: StepperConfig, container: HTMLElement, _callbacks?: StepperCallbacks);
|
|
78
|
+
/**
|
|
79
|
+
* 初期状態を作成
|
|
80
|
+
*/
|
|
81
|
+
private createInitialState;
|
|
82
|
+
/**
|
|
83
|
+
* 状態を取得
|
|
84
|
+
*/
|
|
85
|
+
getState(): StepperState;
|
|
86
|
+
/**
|
|
87
|
+
* 現在のステップを設定
|
|
88
|
+
*/
|
|
89
|
+
setActiveIndex(index: number): void;
|
|
90
|
+
/**
|
|
91
|
+
* レンダリング
|
|
92
|
+
*/
|
|
93
|
+
render(): void;
|
|
94
|
+
/**
|
|
95
|
+
* 水平レイアウトをレンダリング
|
|
96
|
+
*/
|
|
97
|
+
private renderHorizontal;
|
|
98
|
+
/**
|
|
99
|
+
* 水平ステップアイテムをレンダリング
|
|
100
|
+
*/
|
|
101
|
+
private renderHorizontalStep;
|
|
102
|
+
/**
|
|
103
|
+
* 垂直レイアウトをレンダリング
|
|
104
|
+
*/
|
|
105
|
+
private renderVertical;
|
|
106
|
+
/**
|
|
107
|
+
* 垂直ステップアイテムをレンダリング
|
|
108
|
+
*/
|
|
109
|
+
private renderVerticalStep;
|
|
110
|
+
/**
|
|
111
|
+
* ステップカウンターをレンダリング
|
|
112
|
+
*/
|
|
113
|
+
private renderStepCounter;
|
|
114
|
+
/**
|
|
115
|
+
* クリーンアップ
|
|
116
|
+
*/
|
|
117
|
+
destroy(): void;
|
|
118
|
+
static renderField(field: InputField): string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Stepperを作成するファクトリ関数
|
|
122
|
+
*/
|
|
123
|
+
export declare function createStepper(config: StepperConfig, container: HTMLElement, callbacks?: StepperCallbacks): Stepper;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tabs Component
|
|
3
|
+
* タブUIコンポーネント
|
|
4
|
+
*/
|
|
5
|
+
import type { InputField } from '../../types';
|
|
6
|
+
/**
|
|
7
|
+
* 遅延読み込み関数の型
|
|
8
|
+
*/
|
|
9
|
+
export type LazyLoadFn = (tabId: string) => Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* タブ定義
|
|
12
|
+
*/
|
|
13
|
+
export interface TabDefinition {
|
|
14
|
+
/** タブID(英数字、ハイフン、アンダースコアのみ推奨) */
|
|
15
|
+
id: string;
|
|
16
|
+
/** タブラベル */
|
|
17
|
+
label: string;
|
|
18
|
+
/**
|
|
19
|
+
* タブアイコン(オプション)
|
|
20
|
+
* @security HTML文字列として設定されるため、信頼されたソースからのみ使用すること
|
|
21
|
+
*/
|
|
22
|
+
icon?: string;
|
|
23
|
+
/** アイコンの代替テキスト(アクセシビリティ用) */
|
|
24
|
+
iconLabel?: string;
|
|
25
|
+
/** 無効化 */
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
/** バッジ(通知数等) */
|
|
28
|
+
badge?: string | number;
|
|
29
|
+
/** タブ内のフィールド */
|
|
30
|
+
fields?: InputField[];
|
|
31
|
+
/**
|
|
32
|
+
* タブ内のカスタムコンテンツ(HTML文字列)
|
|
33
|
+
* @security HTML文字列として設定されるため、信頼されたソースからのみ使用すること
|
|
34
|
+
*/
|
|
35
|
+
content?: string;
|
|
36
|
+
/**
|
|
37
|
+
* 遅延読み込み関数
|
|
38
|
+
* @security 戻り値はHTML文字列として設定されるため、信頼されたソースからのみ使用すること
|
|
39
|
+
*/
|
|
40
|
+
lazyLoad?: LazyLoadFn;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* タブの状態
|
|
44
|
+
*/
|
|
45
|
+
export interface TabsState {
|
|
46
|
+
/** 現在のアクティブタブID */
|
|
47
|
+
activeTabId: string;
|
|
48
|
+
/** タブ一覧 */
|
|
49
|
+
tabs: TabDefinition[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* タブのコールバック
|
|
53
|
+
*/
|
|
54
|
+
export interface TabsCallbacks {
|
|
55
|
+
/** タブ変更時 */
|
|
56
|
+
onTabChange?: (tabId: string, state: TabsState) => void;
|
|
57
|
+
/** フィールドレンダラー */
|
|
58
|
+
renderFields?: (fields: InputField[], container: HTMLElement) => void;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* タブの設定
|
|
62
|
+
*/
|
|
63
|
+
export interface TabsConfig {
|
|
64
|
+
/** タブ一覧 */
|
|
65
|
+
tabs: TabDefinition[];
|
|
66
|
+
/** 初期アクティブタブID */
|
|
67
|
+
defaultActiveTab?: string;
|
|
68
|
+
/** タブの配置 */
|
|
69
|
+
position?: 'top' | 'bottom' | 'left' | 'right';
|
|
70
|
+
/** タブのスタイル */
|
|
71
|
+
variant?: 'default' | 'pills' | 'underline' | 'bordered' | 'segmented';
|
|
72
|
+
/** ボーダー表示 */
|
|
73
|
+
bordered?: boolean;
|
|
74
|
+
/** スクロール有効化(タブが多い場合) */
|
|
75
|
+
scrollable?: boolean;
|
|
76
|
+
/** URLハッシュとの同期 */
|
|
77
|
+
syncWithHash?: boolean;
|
|
78
|
+
/** ハッシュのプレフィックス(例: "section-") */
|
|
79
|
+
hashPrefix?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* タブコンポーネント
|
|
83
|
+
*/
|
|
84
|
+
export declare class Tabs {
|
|
85
|
+
private config;
|
|
86
|
+
private state;
|
|
87
|
+
private callbacks;
|
|
88
|
+
private container;
|
|
89
|
+
private instanceId;
|
|
90
|
+
private hashChangeHandler;
|
|
91
|
+
private lazyLoadCache;
|
|
92
|
+
private loadingTabs;
|
|
93
|
+
constructor(config: TabsConfig, container: HTMLElement, callbacks?: TabsCallbacks);
|
|
94
|
+
/**
|
|
95
|
+
* タブをレンダリング
|
|
96
|
+
*/
|
|
97
|
+
render(): void;
|
|
98
|
+
/**
|
|
99
|
+
* タブを切り替え
|
|
100
|
+
*/
|
|
101
|
+
setActiveTab(tabId: string): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* 次のタブへ移動
|
|
104
|
+
*/
|
|
105
|
+
nextTab(): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* 前のタブへ移動
|
|
108
|
+
*/
|
|
109
|
+
previousTab(): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* 現在の状態を取得
|
|
112
|
+
*/
|
|
113
|
+
getState(): TabsState;
|
|
114
|
+
/**
|
|
115
|
+
* 現在のアクティブタブを取得
|
|
116
|
+
*/
|
|
117
|
+
getActiveTab(): TabDefinition | undefined;
|
|
118
|
+
/**
|
|
119
|
+
* タブを追加
|
|
120
|
+
*/
|
|
121
|
+
addTab(tab: TabDefinition, index?: number): void;
|
|
122
|
+
/**
|
|
123
|
+
* タブを削除
|
|
124
|
+
*/
|
|
125
|
+
removeTab(tabId: string): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* タブを更新
|
|
128
|
+
*/
|
|
129
|
+
updateTab(tabId: string, updates: Partial<TabDefinition>): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* 初期状態を作成
|
|
132
|
+
*/
|
|
133
|
+
private createInitialState;
|
|
134
|
+
/**
|
|
135
|
+
* タブリストをレンダリング
|
|
136
|
+
*/
|
|
137
|
+
private renderTabList;
|
|
138
|
+
/**
|
|
139
|
+
* タブボタンをレンダリング
|
|
140
|
+
*/
|
|
141
|
+
private renderTabButton;
|
|
142
|
+
/**
|
|
143
|
+
* パネルをレンダリング
|
|
144
|
+
*/
|
|
145
|
+
private renderPanels;
|
|
146
|
+
/**
|
|
147
|
+
* 個別パネルをレンダリング
|
|
148
|
+
*/
|
|
149
|
+
private renderPanel;
|
|
150
|
+
/**
|
|
151
|
+
* キーボードイベントを処理
|
|
152
|
+
*/
|
|
153
|
+
private handleKeyDown;
|
|
154
|
+
/**
|
|
155
|
+
* URLハッシュ同期をセットアップ
|
|
156
|
+
*/
|
|
157
|
+
private setupHashSync;
|
|
158
|
+
/**
|
|
159
|
+
* ハッシュからタブIDを取得
|
|
160
|
+
*/
|
|
161
|
+
private getTabIdFromHash;
|
|
162
|
+
/**
|
|
163
|
+
* URLハッシュを更新
|
|
164
|
+
*/
|
|
165
|
+
private updateHash;
|
|
166
|
+
/**
|
|
167
|
+
* 遅延読み込みコンテンツを読み込む
|
|
168
|
+
*/
|
|
169
|
+
private loadLazyContent;
|
|
170
|
+
/**
|
|
171
|
+
* クリーンアップ(イベントリスナーの削除)
|
|
172
|
+
*/
|
|
173
|
+
destroy(): void;
|
|
174
|
+
/**
|
|
175
|
+
* タブコンテンツを強制再読み込み
|
|
176
|
+
*/
|
|
177
|
+
refreshTabContent(tabId: string): Promise<void>;
|
|
178
|
+
static renderField(field: InputField): string;
|
|
179
|
+
private static renderDummy;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 静的出力(Tabs.renderField)のタブ切替を有効化する。クリックと矢印キーに対応。
|
|
183
|
+
* @returns クリーンアップ関数
|
|
184
|
+
*/
|
|
185
|
+
export declare function attachTabsBehavior(container: HTMLElement): () => void;
|