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,43 @@
|
|
|
1
|
+
export type AlertBannerType = 'info' | 'success' | 'warning' | 'error';
|
|
2
|
+
export interface AlertBannerState {
|
|
3
|
+
message: string;
|
|
4
|
+
visible: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface AlertBannerCallbacks {
|
|
7
|
+
onClose?: () => void;
|
|
8
|
+
onAction?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface AlertBannerConfig {
|
|
11
|
+
message: string;
|
|
12
|
+
type?: AlertBannerType;
|
|
13
|
+
actionLabel?: string;
|
|
14
|
+
closable?: boolean;
|
|
15
|
+
visible?: boolean;
|
|
16
|
+
role?: 'alert' | 'status';
|
|
17
|
+
ariaLabel?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class AlertBanner {
|
|
20
|
+
private config;
|
|
21
|
+
private state;
|
|
22
|
+
private callbacks;
|
|
23
|
+
private container;
|
|
24
|
+
private closeHandler;
|
|
25
|
+
private actionHandler;
|
|
26
|
+
constructor(container: HTMLElement, config: AlertBannerConfig, callbacks?: AlertBannerCallbacks);
|
|
27
|
+
render(): void;
|
|
28
|
+
private renderContent;
|
|
29
|
+
private renderActionButton;
|
|
30
|
+
private renderCloseButton;
|
|
31
|
+
private handleAction;
|
|
32
|
+
private handleClose;
|
|
33
|
+
private cleanup;
|
|
34
|
+
setMessage(message: string): void;
|
|
35
|
+
setVisible(visible: boolean): void;
|
|
36
|
+
show(): void;
|
|
37
|
+
hide(): void;
|
|
38
|
+
getMessage(): string;
|
|
39
|
+
isVisible(): boolean;
|
|
40
|
+
getState(): Readonly<AlertBannerState>;
|
|
41
|
+
destroy(): void;
|
|
42
|
+
}
|
|
43
|
+
export declare function createAlertBanner(container: HTMLElement, config: AlertBannerConfig, callbacks?: AlertBannerCallbacks): AlertBanner;
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AppHeader Component
|
|
3
|
+
* アプリケーションヘッダーコンポーネント
|
|
4
|
+
*
|
|
5
|
+
* SmartHR Design System を参考に実装
|
|
6
|
+
* - Header(上部バー): ロゴ、テナント切替、各種ボタン
|
|
7
|
+
* - AppNavi(下部バー): アプリ名、ナビゲーション
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* テナント情報
|
|
11
|
+
*/
|
|
12
|
+
export interface Tenant {
|
|
13
|
+
/** テナントID */
|
|
14
|
+
id: string;
|
|
15
|
+
/** テナント名 */
|
|
16
|
+
name: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* ユーザー情報
|
|
20
|
+
*/
|
|
21
|
+
export interface UserInfo {
|
|
22
|
+
/** ユーザー名 */
|
|
23
|
+
name: string;
|
|
24
|
+
/** メールアドレス(オプション) */
|
|
25
|
+
email?: string;
|
|
26
|
+
/** アバターURL(オプション) */
|
|
27
|
+
avatarUrl?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* ナビゲーションアイテム
|
|
31
|
+
*/
|
|
32
|
+
export interface NavItem {
|
|
33
|
+
/** アイテムID */
|
|
34
|
+
id: string;
|
|
35
|
+
/** ラベル */
|
|
36
|
+
label: string;
|
|
37
|
+
/** リンク先URL */
|
|
38
|
+
href?: string;
|
|
39
|
+
/** アクティブ状態 */
|
|
40
|
+
active?: boolean;
|
|
41
|
+
/** 無効化 */
|
|
42
|
+
disabled?: boolean;
|
|
43
|
+
/** ドロップダウンメニュー */
|
|
44
|
+
dropdown?: NavDropdownItem[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* ドロップダウンメニューアイテム
|
|
48
|
+
*/
|
|
49
|
+
export interface NavDropdownItem {
|
|
50
|
+
/** アイテムID */
|
|
51
|
+
id: string;
|
|
52
|
+
/** ラベル */
|
|
53
|
+
label: string;
|
|
54
|
+
/** リンク先URL */
|
|
55
|
+
href?: string;
|
|
56
|
+
/** 区切り線 */
|
|
57
|
+
divider?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* アプリランチャーアイテム
|
|
61
|
+
*/
|
|
62
|
+
export interface AppLauncherItem {
|
|
63
|
+
/** アプリID */
|
|
64
|
+
id: string;
|
|
65
|
+
/** アプリ名 */
|
|
66
|
+
name: string;
|
|
67
|
+
/** アプリURL */
|
|
68
|
+
url: string;
|
|
69
|
+
/** アイコン(SVG HTML文字列) */
|
|
70
|
+
icon?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* AppHeaderの状態
|
|
74
|
+
*/
|
|
75
|
+
export interface AppHeaderState {
|
|
76
|
+
/** 現在のテナントID */
|
|
77
|
+
currentTenantId: string;
|
|
78
|
+
/** テナント切替ドロップダウンの開閉状態 */
|
|
79
|
+
tenantDropdownOpen: boolean;
|
|
80
|
+
/** ユーザードロップダウンの開閉状態 */
|
|
81
|
+
userDropdownOpen: boolean;
|
|
82
|
+
/** アプリランチャーの開閉状態 */
|
|
83
|
+
appLauncherOpen: boolean;
|
|
84
|
+
/** アクティブなナビゲーションID */
|
|
85
|
+
activeNavId: string | null;
|
|
86
|
+
/** ナビゲーションドロップダウンの開閉状態 */
|
|
87
|
+
navDropdownOpen: string | null;
|
|
88
|
+
/** モバイルメニューの開閉状態 */
|
|
89
|
+
mobileMenuOpen: boolean;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* AppHeaderのコールバック
|
|
93
|
+
*/
|
|
94
|
+
export interface AppHeaderCallbacks {
|
|
95
|
+
/** テナント変更時 */
|
|
96
|
+
onTenantChange?: (tenantId: string) => void;
|
|
97
|
+
/** ナビゲーションクリック時 */
|
|
98
|
+
onNavClick?: (navId: string, href?: string) => void;
|
|
99
|
+
/** ドロップダウンアイテムクリック時 */
|
|
100
|
+
onDropdownItemClick?: (navId: string, itemId: string, href?: string) => void;
|
|
101
|
+
/** ユーザーメニュー項目クリック時 */
|
|
102
|
+
onUserMenuClick?: (action: 'profile' | 'settings' | 'logout') => void;
|
|
103
|
+
/** アプリランチャークリック時 */
|
|
104
|
+
onAppLauncherClick?: (appId: string, url: string) => void;
|
|
105
|
+
/** ヘルプクリック時 */
|
|
106
|
+
onHelpClick?: () => void;
|
|
107
|
+
/** ロゴクリック時 */
|
|
108
|
+
onLogoClick?: () => void;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* AppHeaderの設定
|
|
112
|
+
*/
|
|
113
|
+
export interface AppHeaderConfig {
|
|
114
|
+
/** ロゴ(SVG HTML文字列) */
|
|
115
|
+
logo?: string;
|
|
116
|
+
/** ロゴの代替テキスト */
|
|
117
|
+
logoAlt?: string;
|
|
118
|
+
/** ロゴのリンク先 */
|
|
119
|
+
logoHref?: string;
|
|
120
|
+
/** システム名(既定ロゴのテキスト。logo 指定時は無視) */
|
|
121
|
+
systemName?: string;
|
|
122
|
+
/** アプリ名 */
|
|
123
|
+
appName: string;
|
|
124
|
+
/** テナント一覧 */
|
|
125
|
+
tenants?: Tenant[];
|
|
126
|
+
/** 現在のテナントID */
|
|
127
|
+
currentTenantId?: string;
|
|
128
|
+
/** ユーザー情報 */
|
|
129
|
+
userInfo: UserInfo;
|
|
130
|
+
/** ナビゲーション一覧 */
|
|
131
|
+
navigations?: NavItem[];
|
|
132
|
+
/** アプリランチャー一覧 */
|
|
133
|
+
appLauncher?: AppLauncherItem[];
|
|
134
|
+
/** ヘルプページURL */
|
|
135
|
+
helpPageUrl?: string;
|
|
136
|
+
/** リリースノート表示 */
|
|
137
|
+
showReleaseNote?: boolean;
|
|
138
|
+
/** リリースノートテキスト */
|
|
139
|
+
releaseNoteText?: string;
|
|
140
|
+
/** データ同期ボタン表示 */
|
|
141
|
+
showDataSync?: boolean;
|
|
142
|
+
/** データ同期中 */
|
|
143
|
+
dataSyncing?: boolean;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* AppHeaderコンポーネント
|
|
147
|
+
*/
|
|
148
|
+
export declare class AppHeader {
|
|
149
|
+
private config;
|
|
150
|
+
private state;
|
|
151
|
+
private callbacks;
|
|
152
|
+
private container;
|
|
153
|
+
private documentClickHandler;
|
|
154
|
+
constructor(container: HTMLElement, config: AppHeaderConfig, callbacks?: AppHeaderCallbacks);
|
|
155
|
+
/**
|
|
156
|
+
* ヘッダーをレンダリング
|
|
157
|
+
*/
|
|
158
|
+
render(): void;
|
|
159
|
+
/**
|
|
160
|
+
* テナントを切り替え
|
|
161
|
+
*/
|
|
162
|
+
setCurrentTenant(tenantId: string): void;
|
|
163
|
+
/**
|
|
164
|
+
* アクティブなナビゲーションを設定
|
|
165
|
+
*/
|
|
166
|
+
setActiveNav(navId: string | null): void;
|
|
167
|
+
/**
|
|
168
|
+
* 現在の状態を取得
|
|
169
|
+
*/
|
|
170
|
+
getState(): Readonly<AppHeaderState>;
|
|
171
|
+
/**
|
|
172
|
+
* コンポーネントを破棄
|
|
173
|
+
*/
|
|
174
|
+
destroy(): void;
|
|
175
|
+
/**
|
|
176
|
+
* 初期状態を作成
|
|
177
|
+
*/
|
|
178
|
+
private createInitialState;
|
|
179
|
+
/**
|
|
180
|
+
* Header(上部バー)をレンダリング
|
|
181
|
+
*/
|
|
182
|
+
private renderHeader;
|
|
183
|
+
/**
|
|
184
|
+
* ロゴをレンダリング
|
|
185
|
+
*/
|
|
186
|
+
private renderLogo;
|
|
187
|
+
/**
|
|
188
|
+
* デフォルトロゴをレンダリング
|
|
189
|
+
*/
|
|
190
|
+
private renderDefaultLogo;
|
|
191
|
+
/**
|
|
192
|
+
* テナント切替をレンダリング
|
|
193
|
+
*/
|
|
194
|
+
private renderTenantSwitcher;
|
|
195
|
+
/**
|
|
196
|
+
* テナントドロップダウンメニューをレンダリング
|
|
197
|
+
*/
|
|
198
|
+
private renderTenantDropdownMenu;
|
|
199
|
+
/**
|
|
200
|
+
* アプリランチャーをレンダリング
|
|
201
|
+
*/
|
|
202
|
+
private renderAppLauncher;
|
|
203
|
+
/**
|
|
204
|
+
* アプリランチャードロップダウンをレンダリング
|
|
205
|
+
*/
|
|
206
|
+
private renderAppLauncherDropdown;
|
|
207
|
+
/**
|
|
208
|
+
* ヘルプボタンをレンダリング
|
|
209
|
+
*/
|
|
210
|
+
private renderHelpButton;
|
|
211
|
+
/**
|
|
212
|
+
* ユーザーメニューをレンダリング
|
|
213
|
+
*/
|
|
214
|
+
private renderUserMenu;
|
|
215
|
+
/**
|
|
216
|
+
* ユーザードロップダウンメニューをレンダリング
|
|
217
|
+
*/
|
|
218
|
+
private renderUserDropdownMenu;
|
|
219
|
+
/**
|
|
220
|
+
* AppNavi(下部バー)をレンダリング
|
|
221
|
+
*/
|
|
222
|
+
private renderAppNavi;
|
|
223
|
+
/**
|
|
224
|
+
* ナビゲーションをレンダリング
|
|
225
|
+
*/
|
|
226
|
+
private renderNavigation;
|
|
227
|
+
/**
|
|
228
|
+
* ナビゲーションアイテムをレンダリング
|
|
229
|
+
*/
|
|
230
|
+
private renderNavItem;
|
|
231
|
+
/**
|
|
232
|
+
* ナビゲーションドロップダウンメニューをレンダリング
|
|
233
|
+
*/
|
|
234
|
+
private renderNavDropdownMenu;
|
|
235
|
+
/**
|
|
236
|
+
* データ同期ボタンをレンダリング
|
|
237
|
+
*/
|
|
238
|
+
private renderDataSyncButton;
|
|
239
|
+
/**
|
|
240
|
+
* リリースノートボタンをレンダリング
|
|
241
|
+
*/
|
|
242
|
+
private renderReleaseNoteButton;
|
|
243
|
+
/**
|
|
244
|
+
* モバイルメニューボタンをレンダリング
|
|
245
|
+
*/
|
|
246
|
+
private renderMobileMenuButton;
|
|
247
|
+
/**
|
|
248
|
+
* ドキュメントクリックハンドラーをセットアップ
|
|
249
|
+
*/
|
|
250
|
+
private setupDocumentClickHandler;
|
|
251
|
+
/**
|
|
252
|
+
* テナントドロップダウンを切り替え
|
|
253
|
+
*/
|
|
254
|
+
private toggleTenantDropdown;
|
|
255
|
+
/**
|
|
256
|
+
* ユーザードロップダウンを切り替え
|
|
257
|
+
*/
|
|
258
|
+
private toggleUserDropdown;
|
|
259
|
+
/**
|
|
260
|
+
* アプリランチャーを切り替え
|
|
261
|
+
*/
|
|
262
|
+
private toggleAppLauncher;
|
|
263
|
+
/**
|
|
264
|
+
* ナビゲーションドロップダウンを切り替え
|
|
265
|
+
*/
|
|
266
|
+
private toggleNavDropdown;
|
|
267
|
+
private renderChevronIcon;
|
|
268
|
+
private renderGridIcon;
|
|
269
|
+
private renderHelpIcon;
|
|
270
|
+
private renderSyncIcon;
|
|
271
|
+
private renderBellIcon;
|
|
272
|
+
private renderMenuIcon;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* AppHeaderを作成
|
|
276
|
+
*/
|
|
277
|
+
export declare function createAppHeader(container: HTMLElement, config: AppHeaderConfig, callbacks?: AppHeaderCallbacks): AppHeader;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AppNavi Component
|
|
3
|
+
* プロダクト内の主要な機能を切り替えるためのナビゲーションコンポーネント
|
|
4
|
+
*
|
|
5
|
+
* SmartHR Design System の AppNavi を参考に実装
|
|
6
|
+
* https://smarthr.design/products/components/app-navi/
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* ナビゲーションアイテムの基本型
|
|
10
|
+
*/
|
|
11
|
+
interface AppNaviItemBase {
|
|
12
|
+
/** アイテムID */
|
|
13
|
+
id: string;
|
|
14
|
+
/** 表示ラベル */
|
|
15
|
+
label: string;
|
|
16
|
+
/** アイコン(HTML文字列、SVGなど) */
|
|
17
|
+
icon?: string;
|
|
18
|
+
/** 無効化 */
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
/** 現在のページ/セクションを示す */
|
|
21
|
+
current?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* ボタンタイプのナビゲーションアイテム
|
|
25
|
+
*/
|
|
26
|
+
export interface AppNaviButtonItem extends AppNaviItemBase {
|
|
27
|
+
type: 'button';
|
|
28
|
+
/** クリック時のハンドラー */
|
|
29
|
+
onClick?: (id: string) => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* アンカー(リンク)タイプのナビゲーションアイテム
|
|
33
|
+
*/
|
|
34
|
+
export interface AppNaviAnchorItem extends AppNaviItemBase {
|
|
35
|
+
type: 'anchor';
|
|
36
|
+
/** リンク先URL */
|
|
37
|
+
href: string;
|
|
38
|
+
/** ターゲット属性 */
|
|
39
|
+
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* ドロップダウンのメニュー項目
|
|
43
|
+
*/
|
|
44
|
+
export interface AppNaviDropdownMenuItem {
|
|
45
|
+
/** アイテムID */
|
|
46
|
+
id: string;
|
|
47
|
+
/** 表示ラベル */
|
|
48
|
+
label: string;
|
|
49
|
+
/** アイコン(HTML文字列) */
|
|
50
|
+
icon?: string;
|
|
51
|
+
/** 無効化 */
|
|
52
|
+
disabled?: boolean;
|
|
53
|
+
/** リンク先URL(アンカー時) */
|
|
54
|
+
href?: string;
|
|
55
|
+
/** クリック時のハンドラー */
|
|
56
|
+
onClick?: (id: string) => void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* ドロップダウンタイプのナビゲーションアイテム
|
|
60
|
+
*/
|
|
61
|
+
export interface AppNaviDropdownItem extends AppNaviItemBase {
|
|
62
|
+
type: 'dropdown';
|
|
63
|
+
/** ドロップダウンメニュー項目 */
|
|
64
|
+
dropdownItems: AppNaviDropdownMenuItem[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* ナビゲーションアイテムのユニオン型
|
|
68
|
+
*/
|
|
69
|
+
export type AppNaviItem = AppNaviButtonItem | AppNaviAnchorItem | AppNaviDropdownItem;
|
|
70
|
+
/**
|
|
71
|
+
* AppNaviの状態
|
|
72
|
+
*/
|
|
73
|
+
export interface AppNaviState {
|
|
74
|
+
/** ナビゲーションアイテム */
|
|
75
|
+
items: AppNaviItem[];
|
|
76
|
+
/** 開いているドロップダウンのID(null = 全て閉じている) */
|
|
77
|
+
openDropdownId: string | null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* AppNaviのコールバック
|
|
81
|
+
*/
|
|
82
|
+
export interface AppNaviCallbacks {
|
|
83
|
+
/** アイテムクリック時 */
|
|
84
|
+
onItemClick?: (itemId: string, item: AppNaviItem) => void;
|
|
85
|
+
/** ドロップダウン開閉時 */
|
|
86
|
+
onDropdownToggle?: (itemId: string, isOpen: boolean) => void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* AppNaviの設定
|
|
90
|
+
*/
|
|
91
|
+
export interface AppNaviConfig {
|
|
92
|
+
/** ナビゲーションラベル(アクセシビリティ用) */
|
|
93
|
+
label?: string;
|
|
94
|
+
/** 追加の領域(右側に表示するカスタムコンテンツ) */
|
|
95
|
+
additionalArea?: HTMLElement | (() => HTMLElement);
|
|
96
|
+
/** ナビゲーションアイテム */
|
|
97
|
+
items: AppNaviItem[];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* AppNaviコンポーネント
|
|
101
|
+
*/
|
|
102
|
+
export declare class AppNavi {
|
|
103
|
+
private config;
|
|
104
|
+
private state;
|
|
105
|
+
private callbacks;
|
|
106
|
+
private container;
|
|
107
|
+
private instanceId;
|
|
108
|
+
private clickOutsideHandler;
|
|
109
|
+
constructor(container: HTMLElement, config: AppNaviConfig, callbacks?: AppNaviCallbacks);
|
|
110
|
+
/**
|
|
111
|
+
* ナビゲーションをレンダリング
|
|
112
|
+
*/
|
|
113
|
+
render(): void;
|
|
114
|
+
/**
|
|
115
|
+
* 現在の状態を取得
|
|
116
|
+
*/
|
|
117
|
+
getState(): AppNaviState;
|
|
118
|
+
/**
|
|
119
|
+
* 指定アイテムを現在のアイテムとして設定
|
|
120
|
+
*/
|
|
121
|
+
setCurrent(itemId: string): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* 全てのcurrentをリセット
|
|
124
|
+
*/
|
|
125
|
+
clearCurrent(): void;
|
|
126
|
+
/**
|
|
127
|
+
* ドロップダウンを開く
|
|
128
|
+
*/
|
|
129
|
+
openDropdown(itemId: string): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* ドロップダウンを閉じる
|
|
132
|
+
*/
|
|
133
|
+
closeDropdown(): void;
|
|
134
|
+
/**
|
|
135
|
+
* アイテムを追加
|
|
136
|
+
*/
|
|
137
|
+
addItem(item: AppNaviItem, index?: number): void;
|
|
138
|
+
/**
|
|
139
|
+
* アイテムを削除
|
|
140
|
+
*/
|
|
141
|
+
removeItem(itemId: string): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* アイテムを更新
|
|
144
|
+
*/
|
|
145
|
+
updateItem(itemId: string, updates: Partial<AppNaviItem>): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* コンポーネントを破棄
|
|
148
|
+
*/
|
|
149
|
+
destroy(): void;
|
|
150
|
+
private validateConfig;
|
|
151
|
+
private createInitialState;
|
|
152
|
+
private renderNavList;
|
|
153
|
+
private renderNavItem;
|
|
154
|
+
private renderButton;
|
|
155
|
+
private renderAnchor;
|
|
156
|
+
private renderDropdown;
|
|
157
|
+
private renderDropdownMenu;
|
|
158
|
+
private renderDropdownMenuItem;
|
|
159
|
+
private renderAdditionalArea;
|
|
160
|
+
private attachClickOutsideHandler;
|
|
161
|
+
private detachEventListeners;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* AppNaviコンポーネントを作成するファクトリー関数
|
|
165
|
+
*/
|
|
166
|
+
export declare function createAppNavi(container: HTMLElement, config: AppNaviConfig, callbacks?: AppNaviCallbacks): AppNavi;
|
|
167
|
+
export {};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Badge Component
|
|
3
|
+
* バッジコンポーネント
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* - カラーバリエーション(gray/blue/green/yellow/red)
|
|
7
|
+
* - サイズ(small/medium)
|
|
8
|
+
* - dot表示(数値なしの状態表示)
|
|
9
|
+
* - カウント表示(99+などの上限表示)
|
|
10
|
+
* - `data-color` / `data-size` for styling
|
|
11
|
+
* - `role="status"` with `aria-label` for accessibility
|
|
12
|
+
*/
|
|
13
|
+
import type { InputField } from '../../types/schema';
|
|
14
|
+
/**
|
|
15
|
+
* バッジの状態
|
|
16
|
+
*/
|
|
17
|
+
export interface BadgeState {
|
|
18
|
+
/** 表示する数値 */
|
|
19
|
+
count: number | null;
|
|
20
|
+
/** 表示するテキスト */
|
|
21
|
+
text: string | null;
|
|
22
|
+
/** dotモード */
|
|
23
|
+
dot: boolean;
|
|
24
|
+
/** 非表示状態 */
|
|
25
|
+
hidden: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* バッジのコールバック
|
|
29
|
+
*/
|
|
30
|
+
export interface BadgeCallbacks {
|
|
31
|
+
/** カウント変更時 */
|
|
32
|
+
onCountChange?: (count: number | null) => void;
|
|
33
|
+
/** クリック時 */
|
|
34
|
+
onClick?: (event: MouseEvent) => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* バッジの設定
|
|
38
|
+
*/
|
|
39
|
+
export interface BadgeConfig {
|
|
40
|
+
/** カラー */
|
|
41
|
+
color?: 'gray' | 'blue' | 'green' | 'yellow' | 'red';
|
|
42
|
+
/** サイズ */
|
|
43
|
+
size?: 'small' | 'medium';
|
|
44
|
+
/** dotモード(数値なしの状態表示) */
|
|
45
|
+
dot?: boolean;
|
|
46
|
+
/** 初期カウント */
|
|
47
|
+
count?: number;
|
|
48
|
+
/** カウント表示の上限(デフォルト: 99) */
|
|
49
|
+
maxCount?: number;
|
|
50
|
+
/** テキストコンテンツ(数値の代わりにテキストを表示) */
|
|
51
|
+
text?: string;
|
|
52
|
+
/** ラベル(アクセシビリティ用) */
|
|
53
|
+
label?: string;
|
|
54
|
+
/** クリック可能か */
|
|
55
|
+
clickable?: boolean;
|
|
56
|
+
/** 0の時に非表示にするか */
|
|
57
|
+
hideOnZero?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* バッジコンポーネント
|
|
61
|
+
*/
|
|
62
|
+
export declare class Badge {
|
|
63
|
+
private config;
|
|
64
|
+
private state;
|
|
65
|
+
private callbacks;
|
|
66
|
+
private container;
|
|
67
|
+
private clickHandler;
|
|
68
|
+
constructor(container: HTMLElement, config?: BadgeConfig, callbacks?: BadgeCallbacks);
|
|
69
|
+
/**
|
|
70
|
+
* バッジをレンダリング
|
|
71
|
+
*/
|
|
72
|
+
render(): void;
|
|
73
|
+
/**
|
|
74
|
+
* カウントを設定
|
|
75
|
+
*/
|
|
76
|
+
setCount(count: number): void;
|
|
77
|
+
/**
|
|
78
|
+
* テキストを設定
|
|
79
|
+
*/
|
|
80
|
+
setText(text: string): void;
|
|
81
|
+
/**
|
|
82
|
+
* dotモードを設定
|
|
83
|
+
*/
|
|
84
|
+
setDot(dot: boolean): void;
|
|
85
|
+
/**
|
|
86
|
+
* 非表示状態を設定
|
|
87
|
+
*/
|
|
88
|
+
setHidden(hidden: boolean): void;
|
|
89
|
+
/**
|
|
90
|
+
* 現在のカウントを取得
|
|
91
|
+
*/
|
|
92
|
+
getCount(): number | null;
|
|
93
|
+
/**
|
|
94
|
+
* 現在のテキストを取得
|
|
95
|
+
*/
|
|
96
|
+
getText(): string | null;
|
|
97
|
+
/**
|
|
98
|
+
* 現在の状態を取得
|
|
99
|
+
*/
|
|
100
|
+
getState(): Readonly<BadgeState>;
|
|
101
|
+
/**
|
|
102
|
+
* コンポーネントを破棄
|
|
103
|
+
*/
|
|
104
|
+
destroy(): void;
|
|
105
|
+
/**
|
|
106
|
+
* 初期状態を作成
|
|
107
|
+
*/
|
|
108
|
+
private createInitialState;
|
|
109
|
+
/**
|
|
110
|
+
* バッジ要素をレンダリング
|
|
111
|
+
*/
|
|
112
|
+
private renderBadge;
|
|
113
|
+
/**
|
|
114
|
+
* カウントをフォーマット
|
|
115
|
+
*/
|
|
116
|
+
private formatCount;
|
|
117
|
+
/**
|
|
118
|
+
* アクセシビリティ用のラベルを取得
|
|
119
|
+
*/
|
|
120
|
+
private getAriaLabel;
|
|
121
|
+
/**
|
|
122
|
+
* クリックイベントハンドラー
|
|
123
|
+
*/
|
|
124
|
+
private handleClick;
|
|
125
|
+
/**
|
|
126
|
+
* BadgeフィールドをHTMLとしてレンダリング(静的メソッド)
|
|
127
|
+
* SSR/初期レンダリング用
|
|
128
|
+
*/
|
|
129
|
+
static renderField(field: InputField): string;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* バッジを作成
|
|
133
|
+
*/
|
|
134
|
+
export declare function createBadge(container: HTMLElement, config?: BadgeConfig, callbacks?: BadgeCallbacks): Badge;
|