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,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;
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Browser Component
3
+ * 階層構造を持つデータの中から項目を単一選択するコンポーネント
4
+ *
5
+ * https://smarthr.design/products/components/browser/
6
+ *
7
+ * 機能:
8
+ * - 階層的なデータの表示
9
+ * - 複数カラム表示(最大3列)
10
+ * - キーボードナビゲーション
11
+ * - 単一選択
12
+ * - アクセシビリティ対応(ARIA属性)
13
+ *
14
+ * 用途:
15
+ * - カテゴリ選択
16
+ * - ファイルブラウジング
17
+ * - 組織階層の選択
18
+ */
19
+ import type { InputField } from '../../types/schema';
20
+ /**
21
+ * Browserアイテムの定義
22
+ */
23
+ export interface BrowserItem {
24
+ /** アイテムの値(一意) */
25
+ value: string;
26
+ /** 表示ラベル */
27
+ label: string;
28
+ /** 子アイテム */
29
+ children?: BrowserItem[];
30
+ /** 無効化 */
31
+ disabled?: boolean;
32
+ }
33
+ /**
34
+ * Browserの状態
35
+ */
36
+ export interface BrowserState {
37
+ /** 選択中のアイテムのvalue */
38
+ selectedValue: string | null;
39
+ /** 選択パス(ルートからのvalue配列) */
40
+ selectedPath: string[];
41
+ /** フォーカス中のカラムインデックス */
42
+ focusedColumnIndex: number;
43
+ /** 各カラムでフォーカス中のアイテムのインデックス */
44
+ focusedItemIndexes: number[];
45
+ }
46
+ /**
47
+ * Browserのコールバック
48
+ */
49
+ export interface BrowserCallbacks {
50
+ /** アイテム選択時 */
51
+ onSelect?: (value: string, path: string[], item: BrowserItem) => void;
52
+ /** 選択変更時 */
53
+ onChange?: (value: string | null, path: string[]) => void;
54
+ }
55
+ /**
56
+ * Browserの設定
57
+ */
58
+ export interface BrowserConfig {
59
+ /** アイテムの配列 */
60
+ items: BrowserItem[];
61
+ /** 初期選択値 */
62
+ defaultValue?: string;
63
+ /** ID属性 */
64
+ id?: string;
65
+ /** カスタムCSSクラス */
66
+ className?: string;
67
+ /** 最大カラム数(デフォルト: 3) */
68
+ maxColumns?: number;
69
+ /** 高さ(デフォルト: 'auto') */
70
+ height?: string;
71
+ }
72
+ /**
73
+ * Browserコンポーネント
74
+ */
75
+ export declare class Browser {
76
+ private config;
77
+ private state;
78
+ private callbacks;
79
+ private container;
80
+ private instanceId;
81
+ private columnsWrapper;
82
+ private itemsMap;
83
+ private parentMap;
84
+ constructor(container: HTMLElement, config: BrowserConfig, callbacks?: BrowserCallbacks);
85
+ /**
86
+ * Browserをレンダリング
87
+ */
88
+ render(): void;
89
+ /**
90
+ * 値を選択
91
+ */
92
+ selectValue(value: string): void;
93
+ /**
94
+ * 選択をクリア
95
+ */
96
+ clearSelection(): void;
97
+ /**
98
+ * 現在の選択値を取得
99
+ */
100
+ getValue(): string | null;
101
+ /**
102
+ * 現在の選択パスを取得
103
+ */
104
+ getPath(): string[];
105
+ /**
106
+ * 現在の状態を取得
107
+ */
108
+ getState(): BrowserState;
109
+ /**
110
+ * アイテムを更新
111
+ */
112
+ setItems(items: BrowserItem[]): void;
113
+ /**
114
+ * コンポーネントを破棄
115
+ */
116
+ destroy(): void;
117
+ private buildItemsMap;
118
+ private getPathToValue;
119
+ private getColumnsData;
120
+ private renderColumns;
121
+ private renderColumn;
122
+ private renderItem;
123
+ private renderArrowIcon;
124
+ private handleItemSelect;
125
+ private handleKeyDown;
126
+ private moveFocus;
127
+ private selectFocusedOrMoveRight;
128
+ private focusCurrentItem;
129
+ static renderField(field: InputField): string;
130
+ }
131
+ /**
132
+ * Browserを作成
133
+ */
134
+ export declare function createBrowser(container: HTMLElement, config: BrowserConfig, callbacks?: BrowserCallbacks): Browser;