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.
Files changed (137) hide show
  1. package/README.md +18 -6
  2. package/bin/cli.mjs +6 -6
  3. package/bin/viewer.html +78 -3
  4. package/dist/example.html +225 -0
  5. package/dist/mokkun.css +1 -1
  6. package/dist/mokkun.esm.js +14476 -9626
  7. package/dist/mokkun.esm.js.map +1 -1
  8. package/dist/mokkun.js +761 -363
  9. package/dist/mokkun.js.map +1 -1
  10. package/dist/types/lib.d.ts +109 -0
  11. package/dist/types/loader/file-loader.d.ts +118 -0
  12. package/dist/types/loader/index.d.ts +4 -0
  13. package/dist/types/parser/index.d.ts +5 -0
  14. package/dist/types/parser/key-normalizer.d.ts +24 -0
  15. package/dist/types/parser/v2/compile-expand.d.ts +23 -0
  16. package/dist/types/parser/v2/compile-field.d.ts +28 -0
  17. package/dist/types/parser/v2/compile-section.d.ts +6 -0
  18. package/dist/types/parser/v2/compile-v2.d.ts +14 -0
  19. package/dist/types/parser/v2/compile-warnings.d.ts +17 -0
  20. package/dist/types/parser/v2/file-spec.d.ts +24 -0
  21. package/dist/types/parser/v2/index.d.ts +5 -0
  22. package/dist/types/parser/v2/iso-date.d.ts +10 -0
  23. package/dist/types/parser/v2/parse-v2.d.ts +24 -0
  24. package/dist/types/parser/v2/validate-action.d.ts +11 -0
  25. package/dist/types/parser/v2/validate-app.d.ts +9 -0
  26. package/dist/types/parser/v2/validate-context.d.ts +41 -0
  27. package/dist/types/parser/v2/validate-field.d.ts +17 -0
  28. package/dist/types/parser/v2/validate-keys.d.ts +29 -0
  29. package/dist/types/parser/v2/validate-list.d.ts +5 -0
  30. package/dist/types/parser/v2/validate-v2.d.ts +6 -0
  31. package/dist/types/parser/v2/validate-view.d.ts +6 -0
  32. package/dist/types/parser/yaml-parser.d.ts +68 -0
  33. package/dist/types/renderer/action-handler.d.ts +76 -0
  34. package/dist/types/renderer/components/accordion-panel.d.ts +144 -0
  35. package/dist/types/renderer/components/action-buttons.d.ts +183 -0
  36. package/dist/types/renderer/components/alert-banner.d.ts +43 -0
  37. package/dist/types/renderer/components/app-header.d.ts +277 -0
  38. package/dist/types/renderer/components/app-navi.d.ts +167 -0
  39. package/dist/types/renderer/components/badge.d.ts +134 -0
  40. package/dist/types/renderer/components/browser.d.ts +134 -0
  41. package/dist/types/renderer/components/calendar.d.ts +198 -0
  42. package/dist/types/renderer/components/checkbox.d.ts +132 -0
  43. package/dist/types/renderer/components/chip.d.ts +120 -0
  44. package/dist/types/renderer/components/combobox.d.ts +217 -0
  45. package/dist/types/renderer/components/data-table.d.ts +186 -0
  46. package/dist/types/renderer/components/date-range-picker.d.ts +203 -0
  47. package/dist/types/renderer/components/definition-list.d.ts +165 -0
  48. package/dist/types/renderer/components/delete-confirm-dialog.d.ts +151 -0
  49. package/dist/types/renderer/components/dialog/action-dialog.d.ts +61 -0
  50. package/dist/types/renderer/components/dialog/base-dialog.d.ts +125 -0
  51. package/dist/types/renderer/components/dialog/dialog-types.d.ts +96 -0
  52. package/dist/types/renderer/components/disclosure.d.ts +118 -0
  53. package/dist/types/renderer/components/dropdown.d.ts +220 -0
  54. package/dist/types/renderer/components/duration-input.d.ts +154 -0
  55. package/dist/types/renderer/components/duration-picker.d.ts +108 -0
  56. package/dist/types/renderer/components/field-renderer.d.ts +22 -0
  57. package/dist/types/renderer/components/float-area.d.ts +196 -0
  58. package/dist/types/renderer/components/form-fields.d.ts +94 -0
  59. package/dist/types/renderer/components/form-section.d.ts +118 -0
  60. package/dist/types/renderer/components/google-map-embed.d.ts +88 -0
  61. package/dist/types/renderer/components/heading.d.ts +119 -0
  62. package/dist/types/renderer/components/image-uploader.d.ts +271 -0
  63. package/dist/types/renderer/components/index.d.ts +48 -0
  64. package/dist/types/renderer/components/information-panel.d.ts +139 -0
  65. package/dist/types/renderer/components/input.d.ts +222 -0
  66. package/dist/types/renderer/components/layout.d.ts +71 -0
  67. package/dist/types/renderer/components/line-clamp.d.ts +170 -0
  68. package/dist/types/renderer/components/loader.d.ts +104 -0
  69. package/dist/types/renderer/components/notification-bar.d.ts +251 -0
  70. package/dist/types/renderer/components/pagination.d.ts +167 -0
  71. package/dist/types/renderer/components/photo-manager-renderer.d.ts +9 -0
  72. package/dist/types/renderer/components/radio-button-panel.d.ts +152 -0
  73. package/dist/types/renderer/components/radio.d.ts +117 -0
  74. package/dist/types/renderer/components/repeater.d.ts +116 -0
  75. package/dist/types/renderer/components/response-message.d.ts +180 -0
  76. package/dist/types/renderer/components/search-input.d.ts +198 -0
  77. package/dist/types/renderer/components/section-nav.d.ts +151 -0
  78. package/dist/types/renderer/components/segmented-control.d.ts +143 -0
  79. package/dist/types/renderer/components/select.d.ts +98 -0
  80. package/dist/types/renderer/components/status-label.d.ts +146 -0
  81. package/dist/types/renderer/components/stepper.d.ts +123 -0
  82. package/dist/types/renderer/components/tabs.d.ts +185 -0
  83. package/dist/types/renderer/components/textarea.d.ts +173 -0
  84. package/dist/types/renderer/components/timeline.d.ts +146 -0
  85. package/dist/types/renderer/components/toggle.d.ts +109 -0
  86. package/dist/types/renderer/components/tooltip.d.ts +158 -0
  87. package/dist/types/renderer/components/wizard.d.ts +118 -0
  88. package/dist/types/renderer/layouts/index.d.ts +5 -0
  89. package/dist/types/renderer/layouts/shell.d.ts +7 -0
  90. package/dist/types/renderer/layouts/types.d.ts +34 -0
  91. package/dist/types/renderer/screen-renderer.d.ts +57 -0
  92. package/dist/types/renderer/utils/dom.d.ts +29 -0
  93. package/dist/types/renderer/utils/dummy-data.d.ts +13 -0
  94. package/dist/types/renderer/utils/field-helpers.d.ts +90 -0
  95. package/dist/types/renderer/utils/icons.d.ts +13 -0
  96. package/dist/types/renderer/utils/index.d.ts +6 -0
  97. package/dist/types/renderer-v2/actions.d.ts +30 -0
  98. package/dist/types/renderer-v2/app-shell.d.ts +15 -0
  99. package/dist/types/renderer-v2/condition.d.ts +19 -0
  100. package/dist/types/renderer-v2/context.d.ts +37 -0
  101. package/dist/types/renderer-v2/fields/choice.d.ts +12 -0
  102. package/dist/types/renderer-v2/fields/control-label.d.ts +57 -0
  103. package/dist/types/renderer-v2/fields/date.d.ts +6 -0
  104. package/dist/types/renderer-v2/fields/display.d.ts +22 -0
  105. package/dist/types/renderer-v2/fields/file-support.d.ts +15 -0
  106. package/dist/types/renderer-v2/fields/file.d.ts +9 -0
  107. package/dist/types/renderer-v2/fields/index.d.ts +20 -0
  108. package/dist/types/renderer-v2/fields/select.d.ts +17 -0
  109. package/dist/types/renderer-v2/fields/text.d.ts +26 -0
  110. package/dist/types/renderer-v2/fields/textarea.d.ts +5 -0
  111. package/dist/types/renderer-v2/fields/toggle.d.ts +6 -0
  112. package/dist/types/renderer-v2/icons.d.ts +35 -0
  113. package/dist/types/renderer-v2/index.d.ts +45 -0
  114. package/dist/types/renderer-v2/list-cells.d.ts +6 -0
  115. package/dist/types/renderer-v2/list-data.d.ts +53 -0
  116. package/dist/types/renderer-v2/mount-parts.d.ts +19 -0
  117. package/dist/types/renderer-v2/mount-repeat.d.ts +8 -0
  118. package/dist/types/renderer-v2/mount-section.d.ts +10 -0
  119. package/dist/types/renderer-v2/mount-visibility.d.ts +13 -0
  120. package/dist/types/renderer-v2/mount.d.ts +9 -0
  121. package/dist/types/renderer-v2/role.d.ts +15 -0
  122. package/dist/types/renderer-v2/section-fields.d.ts +11 -0
  123. package/dist/types/renderer-v2/section-list.d.ts +8 -0
  124. package/dist/types/renderer-v2/section-readonly.d.ts +8 -0
  125. package/dist/types/renderer-v2/section.d.ts +15 -0
  126. package/dist/types/renderer-v2/styles.d.ts +13 -0
  127. package/dist/types/renderer-v2/util.d.ts +28 -0
  128. package/dist/types/renderer-v2/view-state.d.ts +25 -0
  129. package/dist/types/renderer-v2/view.d.ts +8 -0
  130. package/dist/types/theme/index.d.ts +6 -0
  131. package/dist/types/theme/theme-manager.d.ts +102 -0
  132. package/dist/types/types/field-renderable.d.ts +40 -0
  133. package/dist/types/types/index.d.ts +7 -0
  134. package/dist/types/types/schema-v2.d.ts +270 -0
  135. package/dist/types/types/schema.d.ts +1712 -0
  136. package/dist/types/types/theme.d.ts +111 -0
  137. package/package.json +3 -1
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Calendar Component
3
+ * カレンダーを表示し日付を選択するためのコンポーネント
4
+ *
5
+ * Features:
6
+ * - 月表示カレンダー
7
+ * - 日付選択
8
+ * - 選択可能な日付範囲の制限 (from/to)
9
+ * - 月移動ナビゲーション
10
+ * - 今日の日付ハイライト
11
+ * - キーボードナビゲーション
12
+ */
13
+ import type { InputField } from '../../types/schema';
14
+ /**
15
+ * カレンダーの状態
16
+ */
17
+ export interface CalendarState {
18
+ /** 現在選択されている日付 */
19
+ value: Date | null;
20
+ /** 表示中の年月 */
21
+ displayedMonth: Date;
22
+ /** フォーカスされている日付 */
23
+ focusedDate: Date | null;
24
+ /** 無効化状態 */
25
+ disabled: boolean;
26
+ }
27
+ /**
28
+ * カレンダーのコールバック
29
+ */
30
+ export interface CalendarCallbacks {
31
+ /** 日付選択時 */
32
+ onSelectDate: (event: MouseEvent, date: Date, state: CalendarState) => void;
33
+ /** 月変更時 */
34
+ onMonthChange?: (date: Date, state: CalendarState) => void;
35
+ }
36
+ /**
37
+ * カレンダーの設定
38
+ */
39
+ export interface CalendarConfig {
40
+ /** 初期選択日付 */
41
+ value?: Date;
42
+ /** 選択可能な日付範囲の開始日 */
43
+ from?: Date;
44
+ /** 選択可能な日付範囲の終了日 */
45
+ to?: Date;
46
+ /** 無効化 */
47
+ disabled?: boolean;
48
+ /** 週の開始曜日 (0: 日曜, 1: 月曜) */
49
+ weekStartsOn?: 0 | 1;
50
+ /** ロケール */
51
+ locale?: string;
52
+ /** aria-label */
53
+ ariaLabel?: string;
54
+ }
55
+ /**
56
+ * カレンダーコンポーネント
57
+ */
58
+ export declare class Calendar {
59
+ private config;
60
+ private state;
61
+ private callbacks;
62
+ private container;
63
+ private calendarElement;
64
+ constructor(container: HTMLElement, config: CalendarConfig | undefined, callbacks: CalendarCallbacks);
65
+ /**
66
+ * カレンダーをレンダリング
67
+ */
68
+ render(): void;
69
+ /**
70
+ * 選択日付を設定
71
+ */
72
+ setValue(value: Date | null): void;
73
+ /**
74
+ * 選択日付を取得
75
+ */
76
+ getValue(): Date | null;
77
+ /**
78
+ * 表示月を設定
79
+ */
80
+ setDisplayedMonth(date: Date): void;
81
+ /**
82
+ * 無効化状態を設定
83
+ */
84
+ setDisabled(disabled: boolean): void;
85
+ /**
86
+ * 選択可能範囲を設定
87
+ */
88
+ setRange(from?: Date, to?: Date): void;
89
+ /**
90
+ * 状態を取得
91
+ */
92
+ getState(): CalendarState;
93
+ /**
94
+ * 破棄
95
+ */
96
+ destroy(): void;
97
+ /**
98
+ * 初期状態を作成
99
+ */
100
+ private createInitialState;
101
+ /**
102
+ * ヘッダーをレンダリング
103
+ */
104
+ private renderHeader;
105
+ /**
106
+ * カレンダーグリッドをレンダリング
107
+ */
108
+ private renderGrid;
109
+ /**
110
+ * 曜日ヘッダーをレンダリング
111
+ */
112
+ private renderWeekdayHeader;
113
+ /**
114
+ * 週の行をレンダリング
115
+ */
116
+ private renderWeekRow;
117
+ /**
118
+ * 日付セルをレンダリング
119
+ */
120
+ private renderDateCell;
121
+ /**
122
+ * キーボードナビゲーションを設定
123
+ */
124
+ private setupKeyboardNavigation;
125
+ /**
126
+ * 日付にフォーカス
127
+ */
128
+ private focusDate;
129
+ /**
130
+ * 前月クリック
131
+ */
132
+ private handlePrevMonth;
133
+ /**
134
+ * 次月クリック
135
+ */
136
+ private handleNextMonth;
137
+ /**
138
+ * 日付クリック
139
+ */
140
+ private handleDateClick;
141
+ /**
142
+ * 日付を正規化(時刻を0時0分0秒に)
143
+ */
144
+ private normalizeDate;
145
+ /**
146
+ * 月の最初の日を取得
147
+ */
148
+ private getFirstDayOfMonth;
149
+ /**
150
+ * カレンダーの週を取得
151
+ */
152
+ private getCalendarWeeks;
153
+ /**
154
+ * 曜日ラベルを取得
155
+ */
156
+ private getWeekdayLabels;
157
+ /**
158
+ * 年月をフォーマット
159
+ */
160
+ private formatMonthYear;
161
+ /**
162
+ * 日付をフルフォーマット
163
+ */
164
+ private formatDateFull;
165
+ /**
166
+ * 今日かどうか
167
+ */
168
+ private isToday;
169
+ /**
170
+ * 選択されているかどうか
171
+ */
172
+ private isSelected;
173
+ /**
174
+ * 日付が無効化されているかどうか
175
+ */
176
+ private isDateDisabled;
177
+ /**
178
+ * 日付が範囲内かどうか
179
+ */
180
+ private isDateInRange;
181
+ /**
182
+ * 日数を加算
183
+ */
184
+ private addDays;
185
+ /**
186
+ * 左矢印アイコン
187
+ */
188
+ private getChevronLeftIcon;
189
+ /**
190
+ * 右矢印アイコン
191
+ */
192
+ private getChevronRightIcon;
193
+ static renderField(field: InputField): string;
194
+ }
195
+ /**
196
+ * カレンダーコンポーネントを作成
197
+ */
198
+ export declare function createCalendar(container: HTMLElement, config: CalendarConfig | undefined, callbacks: CalendarCallbacks): Calendar;
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Checkbox Component
3
+ * チェックボックスコンポーネント
4
+ *
5
+ *
6
+ * - `checked` / `defaultChecked` for state
7
+ * - `indeterminate` state support (一部選択)
8
+ * - `data-state="checked|unchecked|indeterminate"` for styling
9
+ * - `error` state with error messages
10
+ * - `role="checkbox"` with `aria-checked` for accessibility
11
+ */
12
+ import type { InputField } from '../../types/schema';
13
+ /**
14
+ * チェックボックスの状態
15
+ */
16
+ export interface CheckboxState {
17
+ /** チェック状態 */
18
+ checked: boolean;
19
+ /** 中間状態(一部選択) */
20
+ indeterminate: boolean;
21
+ /** 無効化状態 */
22
+ disabled: boolean;
23
+ }
24
+ /**
25
+ * チェックボックスのコールバック
26
+ */
27
+ export interface CheckboxCallbacks {
28
+ /** 状態変更時 */
29
+ onChange?: (checked: boolean, state: CheckboxState) => void;
30
+ /** チェック状態変更時 */
31
+ onCheckedChange?: (checked: boolean) => void;
32
+ }
33
+ /**
34
+ * チェックボックスの設定
35
+ */
36
+ export interface CheckboxConfig {
37
+ /** 初期チェック状態 */
38
+ defaultChecked?: boolean;
39
+ /** 初期中間状態 */
40
+ defaultIndeterminate?: boolean;
41
+ /** 無効化 */
42
+ disabled?: boolean;
43
+ /** チェック時ラベル */
44
+ checkedLabel?: string;
45
+ /** 非チェック時ラベル */
46
+ uncheckedLabel?: string;
47
+ /** サイズ */
48
+ size?: 'small' | 'medium' | 'large';
49
+ /** name属性(フォーム用) */
50
+ name?: string;
51
+ /** ラベル位置 */
52
+ labelPosition?: 'left' | 'right';
53
+ }
54
+ /**
55
+ * チェックボックスコンポーネント
56
+ */
57
+ export declare class Checkbox {
58
+ private config;
59
+ private state;
60
+ private callbacks;
61
+ private container;
62
+ private instanceId;
63
+ constructor(container: HTMLElement, config?: CheckboxConfig, callbacks?: CheckboxCallbacks);
64
+ /**
65
+ * チェックボックスをレンダリング
66
+ */
67
+ render(): void;
68
+ /**
69
+ * チェック状態を設定
70
+ */
71
+ setChecked(checked: boolean): void;
72
+ /**
73
+ * 中間状態を設定
74
+ */
75
+ setIndeterminate(indeterminate: boolean): void;
76
+ /**
77
+ * 状態をトグル
78
+ */
79
+ toggle(): void;
80
+ /**
81
+ * 無効化状態を設定
82
+ */
83
+ setDisabled(disabled: boolean): void;
84
+ /**
85
+ * 現在の状態を取得
86
+ */
87
+ getState(): CheckboxState;
88
+ /**
89
+ * チェック状態を取得
90
+ */
91
+ isChecked(): boolean;
92
+ /**
93
+ * 中間状態かどうかを取得
94
+ */
95
+ isIndeterminate(): boolean;
96
+ /**
97
+ * 無効化されているかどうかを取得
98
+ */
99
+ isDisabled(): boolean;
100
+ /**
101
+ * 初期状態を作成
102
+ */
103
+ private createInitialState;
104
+ /**
105
+ * チェックボックスをレンダリング
106
+ */
107
+ private renderCheckbox;
108
+ /**
109
+ * ラベルをレンダリング
110
+ */
111
+ private renderLabel;
112
+ /**
113
+ * チェックボックスグループフィールドをHTMLとしてレンダリング(静的メソッド)
114
+ * SSR/初期レンダリング用
115
+ *
116
+ * @param field - チェックボックスグループフィールド定義
117
+ * @returns 生成されたHTML文字列
118
+ */
119
+ static renderField(field: InputField): string;
120
+ /**
121
+ * 単一チェックボックスをレンダリング
122
+ */
123
+ private static renderSingleCheckbox;
124
+ /**
125
+ * チェックボックスグループをレンダリング
126
+ */
127
+ private static renderCheckboxGroup;
128
+ }
129
+ /**
130
+ * Checkboxを作成するファクトリ関数
131
+ */
132
+ export declare function createCheckbox(container: HTMLElement, config?: CheckboxConfig, callbacks?: CheckboxCallbacks): Checkbox;
@@ -0,0 +1,120 @@
1
+ import type { InputField } from '../../types/schema';
2
+ /**
3
+ * Chip component state
4
+ */
5
+ export interface ChipState {
6
+ /** Whether the chip is selected */
7
+ selected: boolean;
8
+ /** Whether the chip is disabled */
9
+ disabled: boolean;
10
+ }
11
+ /**
12
+ * Chip component callbacks
13
+ */
14
+ export interface ChipCallbacks {
15
+ /** Called when chip is clicked (selection toggle) */
16
+ onClick?: (selected: boolean, state: ChipState) => void;
17
+ /** Called when delete button is clicked */
18
+ onDelete?: (state: ChipState) => void;
19
+ }
20
+ /**
21
+ * Chip component configuration
22
+ */
23
+ export interface ChipConfig {
24
+ /** Label text for the chip */
25
+ label: string;
26
+ /** Icon to display before the label (emoji, SVG path, or HTML string) */
27
+ icon?: string;
28
+ /** Whether to show delete button */
29
+ deletable?: boolean;
30
+ /** Whether the chip is selected by default */
31
+ selected?: boolean;
32
+ /** Whether the chip is disabled */
33
+ disabled?: boolean;
34
+ /** Size variant */
35
+ size?: 'small' | 'medium' | 'large';
36
+ /** Color variant */
37
+ color?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
38
+ /** Accessible label for screen readers */
39
+ ariaLabel?: string;
40
+ }
41
+ /**
42
+ * Chip component
43
+ *
44
+ * A small UI element for displaying tags, filter conditions, or categories.
45
+ * Supports selection toggle, delete button, icons, and color variations.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const chip = createChip(container, {
50
+ * label: 'JavaScript',
51
+ * icon: '🚀',
52
+ * deletable: true,
53
+ * color: 'primary'
54
+ * }, {
55
+ * onClick: (selected) => console.log('Selected:', selected),
56
+ * onDelete: () => console.log('Deleted')
57
+ * })
58
+ * ```
59
+ */
60
+ export declare class Chip {
61
+ private config;
62
+ private state;
63
+ private callbacks;
64
+ private container;
65
+ constructor(container: HTMLElement, config: ChipConfig, callbacks?: ChipCallbacks);
66
+ /**
67
+ * Create initial component state
68
+ */
69
+ private createInitialState;
70
+ /**
71
+ * Render the chip component
72
+ */
73
+ render(): void;
74
+ /**
75
+ * Render the chip element
76
+ */
77
+ private renderChip;
78
+ /**
79
+ * Render the delete button
80
+ */
81
+ private renderDeleteButton;
82
+ /**
83
+ * Handle chip click (selection toggle)
84
+ */
85
+ private handleChipClick;
86
+ /**
87
+ * Handle delete button click
88
+ */
89
+ private handleDelete;
90
+ /**
91
+ * Set the selected state
92
+ */
93
+ setSelected(selected: boolean): void;
94
+ /**
95
+ * Set the disabled state
96
+ */
97
+ setDisabled(disabled: boolean): void;
98
+ /**
99
+ * Update component state
100
+ */
101
+ private setState;
102
+ /**
103
+ * Get current component state
104
+ */
105
+ getState(): ChipState;
106
+ /**
107
+ * Update chip configuration
108
+ */
109
+ updateConfig(config: Partial<ChipConfig>): void;
110
+ static renderField(field: InputField): string;
111
+ }
112
+ /**
113
+ * Factory function to create a Chip component
114
+ *
115
+ * @param container - HTMLElement to render the chip into
116
+ * @param config - Chip configuration
117
+ * @param callbacks - Event callbacks
118
+ * @returns Chip instance
119
+ */
120
+ export declare function createChip(container: HTMLElement, config: ChipConfig, callbacks?: ChipCallbacks): Chip;
@@ -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
+ }