@aiquants/auth-react-router 0.11.0 → 0.12.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/dist/admin.d.mts CHANGED
@@ -1,3 +1,4 @@
1
+ import * as react_router from 'react-router';
1
2
  import { AuthUser, AuthGroup, AuthGroupMember, AuthAllowlistEntry, AuthDirectoryMembershipMode, AuthDirectoryStatus } from '@aiquants/auth-core';
2
3
  import React__default from 'react';
3
4
 
@@ -12,60 +13,123 @@ import React__default from 'react';
12
13
  */
13
14
  type UserAdminLabels = {
14
15
  title: string;
16
+ /**
17
+ * BCP 47 locale used to format dates. 日付整形に使う BCP 47 ロケール。
18
+ *
19
+ * 実行環境任せにするとサーバーとブラウザで別の文字列になり、水和が壊れる。
20
+ */
21
+ locale: string;
22
+ /** IANA time zone used to format dates. 日付整形に使う IANA タイムゾーン。 */
23
+ timeZone: string;
24
+ /**
25
+ * Strings shared by more than one view. 複数のビューが共有する文言。
26
+ *
27
+ * ビューごとに同じ語を持たせると、ある画面の「削除」だけを言い換えることが **できなく
28
+ * なる** (実装がどのビューのキーを読んでいるかは呼び出し側から見えない)。共有する語は
29
+ * ここ 1 か所に置く。
30
+ */
31
+ common: {
32
+ add: string;
33
+ create: string;
34
+ edit: string;
35
+ delete: string;
36
+ save: string;
37
+ cancel: string;
38
+ actions: string;
39
+ status: string;
40
+ id: string;
41
+ /** 変更不能な供給元 (環境変数など) 由来の行に出す表示。 */
42
+ readOnly: string;
43
+ /** 上流所有のグループに出す編集不可の表示。 */
44
+ managedUpstream: string;
45
+ /** `#{id}` の表示。記号の位置は言語で変わる。 */
46
+ idTemplate: string;
47
+ /** 値が無いことの表示 (説明欄など)。 */
48
+ none: string;
49
+ };
50
+ /** アクションが拒否・失敗したときの文言。 */
51
+ errors: {
52
+ /**
53
+ * Shown when the actor lacks permission for the attempted operation.
54
+ * 操作の権限が無いときに出す文言。
55
+ *
56
+ * ガードの例外メッセージをそのまま返してはならない。テナント ID・アプリキー・
57
+ * 拒否理由といった内部の語彙が、権限を持たない相手にそのまま渡る。
58
+ */
59
+ forbidden: string;
60
+ };
15
61
  /** シェル (タブ枠) の見出し。 */
16
62
  heading: string;
63
+ /** シェルが描く自己権限バッジの文言。 */
64
+ permissions: {
65
+ label: string;
66
+ canWrite: string;
67
+ canRead: string;
68
+ none: string;
69
+ /** 未結線・取得失敗・付与ゼロのいずれも「不明」であり、許可ではない。 */
70
+ unknown: string;
71
+ };
17
72
  tabs: {
18
73
  users: string;
19
74
  groups: string;
20
75
  groupMembers: string;
21
76
  allowlist: string;
77
+ directory: string;
22
78
  };
23
79
  usersView: {
24
80
  title: string;
25
81
  searchPlaceholder: string;
82
+ /** 検索欄の読み上げ名。プレースホルダは入力すると消えるため名前にならない。 */
83
+ searchLabel: string;
26
84
  addUser: string;
27
85
  editUser: string;
28
- id: string;
29
86
  displayName: string;
30
87
  email: string;
31
- status: string;
32
88
  active: string;
33
89
  inactive: string;
34
- actions: string;
35
- edit: string;
36
90
  activate: string;
37
91
  deactivate: string;
92
+ /** 行ごとの読み上げ名。`{user}` を利用者名へ置換する。 */
93
+ editUserAria: string;
94
+ activateAria: string;
95
+ deactivateAria: string;
96
+ /** 無効化はサインインを止める。確認を取る。 */
97
+ confirmDeactivate: string;
38
98
  empty: string;
39
- save: string;
40
- cancel: string;
41
99
  };
42
100
  groupsView: {
101
+ /** 検索語に一致しないときの説明。空状態と混ぜると「消えた」と誤読される。 */
102
+ emptyFiltered: string;
43
103
  title: string;
44
104
  searchPlaceholder: string;
105
+ searchLabel: string;
45
106
  addGroup: string;
46
107
  editGroup: string;
47
- id: string;
48
108
  groupKey: string;
49
109
  name: string;
50
110
  description: string;
51
- memberCount: string;
52
- status: string;
53
- actions: string;
54
- edit: string;
55
- delete: string;
111
+ /** 所属人数。`{count}` を人数へ置換する。 */
112
+ memberCountTemplate: string;
56
113
  confirmDelete: string;
57
114
  noDescription: string;
58
115
  groupKeyPlaceholder: string;
59
116
  namePlaceholder: string;
60
117
  empty: string;
61
- save: string;
62
- cancel: string;
63
118
  };
64
119
  groupMembersView: {
120
+ title: string;
65
121
  selectGroup: string;
66
122
  selectPrompt: string;
67
123
  actionAdd: string;
68
124
  actionRemove: string;
125
+ /** 行ごとの読み上げ名。`{user}` を利用者名へ置換する。 */
126
+ actionAddAria: string;
127
+ actionRemoveAria: string;
128
+ /** 上流所有グループで編集を出さない理由。押せない理由を書かないと故障に見える。 */
129
+ upstreamNotice: string;
130
+ /** 見出し。`{group}` をグループ名へ置換する。語順が言語で変わるため位置指定にする。 */
131
+ membersOfTemplate: string;
132
+ groupKeyLabel: string;
69
133
  };
70
134
  allowlistView: {
71
135
  title: string;
@@ -82,30 +146,26 @@ type UserAdminLabels = {
82
146
  /** 対象列の見出し。パターンとグループが混在するため「パターン」ではない。 */
83
147
  target: string;
84
148
  description: string;
85
- actions: string;
86
- /** 変更不能な供給元 (環境変数など) 由来の行に出す表示。 */
87
- readOnly: string;
88
149
  /** 配備全体が所有する行 (環境変数由来) の所有者表示。 */
89
150
  deploymentOwner: string;
90
- delete: string;
151
+ /** 許可の取り消しはサインインを止める。確認を取る。 */
152
+ confirmDelete: string;
153
+ /** 行ごとの読み上げ名。`{target}` を対象へ置換する。 */
154
+ deleteAria: string;
91
155
  empty: string;
92
- save: string;
93
- cancel: string;
94
156
  };
95
157
  directoryView: {
96
158
  title: string;
97
159
  /** 出所列。ローカル管理か、どの上流かを示す。 */
98
160
  source: string;
99
161
  localSource: string;
100
- /** 上流所有のグループに出す編集不可の表示。 */
101
- managedUpstream: string;
102
162
  membershipMode: string;
103
163
  directMode: string;
104
164
  transitiveMode: string;
105
165
  lastSynced: string;
106
166
  neverSynced: string;
107
- /** 上流に居るがローカルユーザーへ解決できていない人数。 */
108
- unresolved: string;
167
+ /** 上流に居るがローカルユーザーへ解決できていない人数。`{count}` を人数へ置換する。 */
168
+ unresolvedTemplate: string;
109
169
  syncPaused: string;
110
170
  syncEnabled: string;
111
171
  syncNow: string;
@@ -113,10 +173,53 @@ type UserAdminLabels = {
113
173
  /** 同期が滞っていることの警告。停止はセキュリティ事象である。 */
114
174
  staleWarning: string;
115
175
  disabledWarning: string;
176
+ /** 停止件数。`{paused}` / `{total}` を件数へ置換する。 */
177
+ pausedTemplate: string;
178
+ /** 失敗したグループの列挙。`{groups}` を名前の並びへ置換する。 */
179
+ erroredTemplate: string;
180
+ /** 失敗理由付きの 1 件。`{group}` / `{reason}`。 */
181
+ erroredItemTemplate: string;
182
+ /** 列挙の区切り。言語で変わる。 */
183
+ listSeparator: string;
184
+ /** 滞留警告に添える最終成功時刻。`{at}`。 */
185
+ oldestSyncedTemplate: string;
186
+ /** 未処理の同期要求。`{count}`。 */
187
+ pendingTemplate: string;
188
+ /** 連携先が 1 つも残っていないときの説明。 */
189
+ nothingToLink: string;
190
+ /** 未結線の配備で操作を出さない理由。 */
191
+ notWiredNotice: string;
192
+ /** 行ごとの読み上げ名。`{group}` をグループ名へ置換する。 */
193
+ syncNowAria: string;
194
+ pauseAria: string;
195
+ resumeAria: string;
196
+ allowGroupAria: string;
197
+ disallowGroupAria: string;
198
+ unlinkAria: string;
199
+ /** グループ単位のサインイン許可を外す確認。 */
200
+ confirmDisallow: string;
116
201
  link: string;
117
202
  unlink: string;
118
203
  externalKey: string;
119
204
  empty: string;
205
+ /** 直近の同期が失敗したグループの見出し。件数だけでは何が起きたか判らない。 */
206
+ erroredWarning: string;
207
+ /** 同期有効なリンクのうち最も古い成功時刻。滞留の実際の深さを示す。 */
208
+ oldestSyncedAt: string;
209
+ /** 連携するグループを選ぶ欄。 */
210
+ selectGroup: string;
211
+ /** 上流グループのアドレス入力。 */
212
+ externalKeyPlaceholder: string;
213
+ /** 連携解除の確認。台帳と許可設定が消える。 */
214
+ confirmUnlink: string;
215
+ /** 同期の一時停止・再開。 */
216
+ pause: string;
217
+ resume: string;
218
+ /** 許可グループに加える / 外す。 */
219
+ allowGroup: string;
220
+ disallowGroup: string;
221
+ /** グループ名と鍵の併記。`{name}` / `{key}`。 */
222
+ groupOptionTemplate: string;
120
223
  };
121
224
  };
122
225
  /**
@@ -132,7 +235,12 @@ declare const jaUserAdminLabels: UserAdminLabels;
132
235
  /** セクション単位の部分上書き。 */
133
236
  type PartialUserAdminLabels = {
134
237
  title?: string;
238
+ locale?: string;
239
+ timeZone?: string;
240
+ common?: Partial<UserAdminLabels["common"]>;
241
+ errors?: Partial<UserAdminLabels["errors"]>;
135
242
  heading?: string;
243
+ permissions?: Partial<UserAdminLabels["permissions"]>;
136
244
  tabs?: Partial<UserAdminLabels["tabs"]>;
137
245
  usersView?: Partial<UserAdminLabels["usersView"]>;
138
246
  groupsView?: Partial<UserAdminLabels["groupsView"]>;
@@ -261,6 +369,17 @@ type UserAdminGuards = {
261
369
  action: UserAdminAccess;
262
370
  intent: string;
263
371
  }) => Promise<void> | void;
372
+ /**
373
+ * Observes a denial that was converted into an in-page error. 画面内エラーへ変換した拒否の観測点。
374
+ *
375
+ * 拒否を画面内に返すと、既定のエラー経路が拾っていたログが消える。管理面への総当たりが
376
+ * 200 番台の列に紛れて見えなくなるため、宿主が記録できる口を開けておく。
377
+ */
378
+ onDenied?: (context: {
379
+ intent: string;
380
+ actions: readonly UserAdminAccess[];
381
+ error: unknown;
382
+ }) => void;
264
383
  };
265
384
  /**
266
385
  * Neutral per-resource permission summary the admin shell renders in its header badge.
@@ -318,7 +437,10 @@ declare function createUserAdminApp(config: UserAdminAppConfig): {
318
437
  myPermissions: Record<string, UserAdminPermission | undefined> | null;
319
438
  labels: UserAdminLabels;
320
439
  }>;
321
- action: ({ request }: RouteArgs) => Promise<{
440
+ action: ({ request }: RouteArgs) => Promise<react_router.UNSAFE_DataWithResponseInit<{
441
+ ok: boolean;
442
+ error: string;
443
+ }> | {
322
444
  ok: boolean;
323
445
  error?: undefined;
324
446
  } | {
@@ -350,6 +472,10 @@ type UserAdminLoaderData = {
350
472
  labels?: UserAdminLabels;
351
473
  };
352
474
  declare function UsersView(): React__default.JSX.Element;
475
+ /**
476
+ * View for managing user groups (create, edit, delete).
477
+ * ユーザーグループ管理ビュー (作成・編集・削除)。
478
+ */
353
479
  declare function GroupsView(): React__default.JSX.Element;
354
480
  /**
355
481
  * View for managing group member assignments.
@@ -361,6 +487,15 @@ declare function GroupMembersView(): React__default.JSX.Element;
361
487
  * アクセス許可リスト (Allowlist) 管理ビュー。
362
488
  */
363
489
  declare function AllowlistView(): React__default.JSX.Element;
490
+ /**
491
+ * View for the upstream directory: what is linked, how fresh it is, and the controls that change it.
492
+ * 上流ディレクトリのビュー。何が連携され、どれだけ新しく、それを変える操作を提供する。
493
+ *
494
+ * このタブが無いと、連携の作成・解除・一時停止・即時同期・グループ単位のサインイン許可という
495
+ * 5 つの操作にどこからも到達できない。実装されているのに押せる場所が無い状態は、実装が無いのと
496
+ * 変わらないうえ、「許可を消せるが作れない」という片肺の運用を強いる。
497
+ */
498
+ declare function DirectoryView(): React__default.JSX.Element;
364
499
  type AuthUserAdminAppViewProps = UserAdminShellProps;
365
500
  /**
366
501
  * Top-level application view component for the user administration UI (`/users/*`).
@@ -368,4 +503,4 @@ type AuthUserAdminAppViewProps = UserAdminShellProps;
368
503
  */
369
504
  declare function AuthUserAdminAppView({ renderHeader }?: AuthUserAdminAppViewProps): React__default.JSX.Element;
370
505
 
371
- export { AllowlistView, AuthUserAdminAppView, type AuthUserAdminAppViewProps, GroupMembersView, GroupsView, type PartialUserAdminLabels, type UserAdminAccess, type UserAdminAppConfig, type UserAdminGuards, type UserAdminLabels, type UserAdminLoaderData, type UserAdminPermission, UserAdminShell, type UserAdminShellProps, type UserAdminStore, UsersView, createInMemoryUserAdminStore, createUserAdminApp, defaultUserAdminLabels, jaUserAdminLabels, resolveUserAdminLabels };
506
+ export { AllowlistView, AuthUserAdminAppView, type AuthUserAdminAppViewProps, DirectoryView, GroupMembersView, GroupsView, type PartialUserAdminLabels, type UserAdminAccess, type UserAdminAppConfig, type UserAdminGuards, type UserAdminLabels, type UserAdminLoaderData, type UserAdminPermission, UserAdminShell, type UserAdminShellProps, type UserAdminStore, UsersView, createInMemoryUserAdminStore, createUserAdminApp, defaultUserAdminLabels, jaUserAdminLabels, resolveUserAdminLabels };
package/dist/admin.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import * as react_router from 'react-router';
1
2
  import { AuthUser, AuthGroup, AuthGroupMember, AuthAllowlistEntry, AuthDirectoryMembershipMode, AuthDirectoryStatus } from '@aiquants/auth-core';
2
3
  import React__default from 'react';
3
4
 
@@ -12,60 +13,123 @@ import React__default from 'react';
12
13
  */
13
14
  type UserAdminLabels = {
14
15
  title: string;
16
+ /**
17
+ * BCP 47 locale used to format dates. 日付整形に使う BCP 47 ロケール。
18
+ *
19
+ * 実行環境任せにするとサーバーとブラウザで別の文字列になり、水和が壊れる。
20
+ */
21
+ locale: string;
22
+ /** IANA time zone used to format dates. 日付整形に使う IANA タイムゾーン。 */
23
+ timeZone: string;
24
+ /**
25
+ * Strings shared by more than one view. 複数のビューが共有する文言。
26
+ *
27
+ * ビューごとに同じ語を持たせると、ある画面の「削除」だけを言い換えることが **できなく
28
+ * なる** (実装がどのビューのキーを読んでいるかは呼び出し側から見えない)。共有する語は
29
+ * ここ 1 か所に置く。
30
+ */
31
+ common: {
32
+ add: string;
33
+ create: string;
34
+ edit: string;
35
+ delete: string;
36
+ save: string;
37
+ cancel: string;
38
+ actions: string;
39
+ status: string;
40
+ id: string;
41
+ /** 変更不能な供給元 (環境変数など) 由来の行に出す表示。 */
42
+ readOnly: string;
43
+ /** 上流所有のグループに出す編集不可の表示。 */
44
+ managedUpstream: string;
45
+ /** `#{id}` の表示。記号の位置は言語で変わる。 */
46
+ idTemplate: string;
47
+ /** 値が無いことの表示 (説明欄など)。 */
48
+ none: string;
49
+ };
50
+ /** アクションが拒否・失敗したときの文言。 */
51
+ errors: {
52
+ /**
53
+ * Shown when the actor lacks permission for the attempted operation.
54
+ * 操作の権限が無いときに出す文言。
55
+ *
56
+ * ガードの例外メッセージをそのまま返してはならない。テナント ID・アプリキー・
57
+ * 拒否理由といった内部の語彙が、権限を持たない相手にそのまま渡る。
58
+ */
59
+ forbidden: string;
60
+ };
15
61
  /** シェル (タブ枠) の見出し。 */
16
62
  heading: string;
63
+ /** シェルが描く自己権限バッジの文言。 */
64
+ permissions: {
65
+ label: string;
66
+ canWrite: string;
67
+ canRead: string;
68
+ none: string;
69
+ /** 未結線・取得失敗・付与ゼロのいずれも「不明」であり、許可ではない。 */
70
+ unknown: string;
71
+ };
17
72
  tabs: {
18
73
  users: string;
19
74
  groups: string;
20
75
  groupMembers: string;
21
76
  allowlist: string;
77
+ directory: string;
22
78
  };
23
79
  usersView: {
24
80
  title: string;
25
81
  searchPlaceholder: string;
82
+ /** 検索欄の読み上げ名。プレースホルダは入力すると消えるため名前にならない。 */
83
+ searchLabel: string;
26
84
  addUser: string;
27
85
  editUser: string;
28
- id: string;
29
86
  displayName: string;
30
87
  email: string;
31
- status: string;
32
88
  active: string;
33
89
  inactive: string;
34
- actions: string;
35
- edit: string;
36
90
  activate: string;
37
91
  deactivate: string;
92
+ /** 行ごとの読み上げ名。`{user}` を利用者名へ置換する。 */
93
+ editUserAria: string;
94
+ activateAria: string;
95
+ deactivateAria: string;
96
+ /** 無効化はサインインを止める。確認を取る。 */
97
+ confirmDeactivate: string;
38
98
  empty: string;
39
- save: string;
40
- cancel: string;
41
99
  };
42
100
  groupsView: {
101
+ /** 検索語に一致しないときの説明。空状態と混ぜると「消えた」と誤読される。 */
102
+ emptyFiltered: string;
43
103
  title: string;
44
104
  searchPlaceholder: string;
105
+ searchLabel: string;
45
106
  addGroup: string;
46
107
  editGroup: string;
47
- id: string;
48
108
  groupKey: string;
49
109
  name: string;
50
110
  description: string;
51
- memberCount: string;
52
- status: string;
53
- actions: string;
54
- edit: string;
55
- delete: string;
111
+ /** 所属人数。`{count}` を人数へ置換する。 */
112
+ memberCountTemplate: string;
56
113
  confirmDelete: string;
57
114
  noDescription: string;
58
115
  groupKeyPlaceholder: string;
59
116
  namePlaceholder: string;
60
117
  empty: string;
61
- save: string;
62
- cancel: string;
63
118
  };
64
119
  groupMembersView: {
120
+ title: string;
65
121
  selectGroup: string;
66
122
  selectPrompt: string;
67
123
  actionAdd: string;
68
124
  actionRemove: string;
125
+ /** 行ごとの読み上げ名。`{user}` を利用者名へ置換する。 */
126
+ actionAddAria: string;
127
+ actionRemoveAria: string;
128
+ /** 上流所有グループで編集を出さない理由。押せない理由を書かないと故障に見える。 */
129
+ upstreamNotice: string;
130
+ /** 見出し。`{group}` をグループ名へ置換する。語順が言語で変わるため位置指定にする。 */
131
+ membersOfTemplate: string;
132
+ groupKeyLabel: string;
69
133
  };
70
134
  allowlistView: {
71
135
  title: string;
@@ -82,30 +146,26 @@ type UserAdminLabels = {
82
146
  /** 対象列の見出し。パターンとグループが混在するため「パターン」ではない。 */
83
147
  target: string;
84
148
  description: string;
85
- actions: string;
86
- /** 変更不能な供給元 (環境変数など) 由来の行に出す表示。 */
87
- readOnly: string;
88
149
  /** 配備全体が所有する行 (環境変数由来) の所有者表示。 */
89
150
  deploymentOwner: string;
90
- delete: string;
151
+ /** 許可の取り消しはサインインを止める。確認を取る。 */
152
+ confirmDelete: string;
153
+ /** 行ごとの読み上げ名。`{target}` を対象へ置換する。 */
154
+ deleteAria: string;
91
155
  empty: string;
92
- save: string;
93
- cancel: string;
94
156
  };
95
157
  directoryView: {
96
158
  title: string;
97
159
  /** 出所列。ローカル管理か、どの上流かを示す。 */
98
160
  source: string;
99
161
  localSource: string;
100
- /** 上流所有のグループに出す編集不可の表示。 */
101
- managedUpstream: string;
102
162
  membershipMode: string;
103
163
  directMode: string;
104
164
  transitiveMode: string;
105
165
  lastSynced: string;
106
166
  neverSynced: string;
107
- /** 上流に居るがローカルユーザーへ解決できていない人数。 */
108
- unresolved: string;
167
+ /** 上流に居るがローカルユーザーへ解決できていない人数。`{count}` を人数へ置換する。 */
168
+ unresolvedTemplate: string;
109
169
  syncPaused: string;
110
170
  syncEnabled: string;
111
171
  syncNow: string;
@@ -113,10 +173,53 @@ type UserAdminLabels = {
113
173
  /** 同期が滞っていることの警告。停止はセキュリティ事象である。 */
114
174
  staleWarning: string;
115
175
  disabledWarning: string;
176
+ /** 停止件数。`{paused}` / `{total}` を件数へ置換する。 */
177
+ pausedTemplate: string;
178
+ /** 失敗したグループの列挙。`{groups}` を名前の並びへ置換する。 */
179
+ erroredTemplate: string;
180
+ /** 失敗理由付きの 1 件。`{group}` / `{reason}`。 */
181
+ erroredItemTemplate: string;
182
+ /** 列挙の区切り。言語で変わる。 */
183
+ listSeparator: string;
184
+ /** 滞留警告に添える最終成功時刻。`{at}`。 */
185
+ oldestSyncedTemplate: string;
186
+ /** 未処理の同期要求。`{count}`。 */
187
+ pendingTemplate: string;
188
+ /** 連携先が 1 つも残っていないときの説明。 */
189
+ nothingToLink: string;
190
+ /** 未結線の配備で操作を出さない理由。 */
191
+ notWiredNotice: string;
192
+ /** 行ごとの読み上げ名。`{group}` をグループ名へ置換する。 */
193
+ syncNowAria: string;
194
+ pauseAria: string;
195
+ resumeAria: string;
196
+ allowGroupAria: string;
197
+ disallowGroupAria: string;
198
+ unlinkAria: string;
199
+ /** グループ単位のサインイン許可を外す確認。 */
200
+ confirmDisallow: string;
116
201
  link: string;
117
202
  unlink: string;
118
203
  externalKey: string;
119
204
  empty: string;
205
+ /** 直近の同期が失敗したグループの見出し。件数だけでは何が起きたか判らない。 */
206
+ erroredWarning: string;
207
+ /** 同期有効なリンクのうち最も古い成功時刻。滞留の実際の深さを示す。 */
208
+ oldestSyncedAt: string;
209
+ /** 連携するグループを選ぶ欄。 */
210
+ selectGroup: string;
211
+ /** 上流グループのアドレス入力。 */
212
+ externalKeyPlaceholder: string;
213
+ /** 連携解除の確認。台帳と許可設定が消える。 */
214
+ confirmUnlink: string;
215
+ /** 同期の一時停止・再開。 */
216
+ pause: string;
217
+ resume: string;
218
+ /** 許可グループに加える / 外す。 */
219
+ allowGroup: string;
220
+ disallowGroup: string;
221
+ /** グループ名と鍵の併記。`{name}` / `{key}`。 */
222
+ groupOptionTemplate: string;
120
223
  };
121
224
  };
122
225
  /**
@@ -132,7 +235,12 @@ declare const jaUserAdminLabels: UserAdminLabels;
132
235
  /** セクション単位の部分上書き。 */
133
236
  type PartialUserAdminLabels = {
134
237
  title?: string;
238
+ locale?: string;
239
+ timeZone?: string;
240
+ common?: Partial<UserAdminLabels["common"]>;
241
+ errors?: Partial<UserAdminLabels["errors"]>;
135
242
  heading?: string;
243
+ permissions?: Partial<UserAdminLabels["permissions"]>;
136
244
  tabs?: Partial<UserAdminLabels["tabs"]>;
137
245
  usersView?: Partial<UserAdminLabels["usersView"]>;
138
246
  groupsView?: Partial<UserAdminLabels["groupsView"]>;
@@ -261,6 +369,17 @@ type UserAdminGuards = {
261
369
  action: UserAdminAccess;
262
370
  intent: string;
263
371
  }) => Promise<void> | void;
372
+ /**
373
+ * Observes a denial that was converted into an in-page error. 画面内エラーへ変換した拒否の観測点。
374
+ *
375
+ * 拒否を画面内に返すと、既定のエラー経路が拾っていたログが消える。管理面への総当たりが
376
+ * 200 番台の列に紛れて見えなくなるため、宿主が記録できる口を開けておく。
377
+ */
378
+ onDenied?: (context: {
379
+ intent: string;
380
+ actions: readonly UserAdminAccess[];
381
+ error: unknown;
382
+ }) => void;
264
383
  };
265
384
  /**
266
385
  * Neutral per-resource permission summary the admin shell renders in its header badge.
@@ -318,7 +437,10 @@ declare function createUserAdminApp(config: UserAdminAppConfig): {
318
437
  myPermissions: Record<string, UserAdminPermission | undefined> | null;
319
438
  labels: UserAdminLabels;
320
439
  }>;
321
- action: ({ request }: RouteArgs) => Promise<{
440
+ action: ({ request }: RouteArgs) => Promise<react_router.UNSAFE_DataWithResponseInit<{
441
+ ok: boolean;
442
+ error: string;
443
+ }> | {
322
444
  ok: boolean;
323
445
  error?: undefined;
324
446
  } | {
@@ -350,6 +472,10 @@ type UserAdminLoaderData = {
350
472
  labels?: UserAdminLabels;
351
473
  };
352
474
  declare function UsersView(): React__default.JSX.Element;
475
+ /**
476
+ * View for managing user groups (create, edit, delete).
477
+ * ユーザーグループ管理ビュー (作成・編集・削除)。
478
+ */
353
479
  declare function GroupsView(): React__default.JSX.Element;
354
480
  /**
355
481
  * View for managing group member assignments.
@@ -361,6 +487,15 @@ declare function GroupMembersView(): React__default.JSX.Element;
361
487
  * アクセス許可リスト (Allowlist) 管理ビュー。
362
488
  */
363
489
  declare function AllowlistView(): React__default.JSX.Element;
490
+ /**
491
+ * View for the upstream directory: what is linked, how fresh it is, and the controls that change it.
492
+ * 上流ディレクトリのビュー。何が連携され、どれだけ新しく、それを変える操作を提供する。
493
+ *
494
+ * このタブが無いと、連携の作成・解除・一時停止・即時同期・グループ単位のサインイン許可という
495
+ * 5 つの操作にどこからも到達できない。実装されているのに押せる場所が無い状態は、実装が無いのと
496
+ * 変わらないうえ、「許可を消せるが作れない」という片肺の運用を強いる。
497
+ */
498
+ declare function DirectoryView(): React__default.JSX.Element;
364
499
  type AuthUserAdminAppViewProps = UserAdminShellProps;
365
500
  /**
366
501
  * Top-level application view component for the user administration UI (`/users/*`).
@@ -368,4 +503,4 @@ type AuthUserAdminAppViewProps = UserAdminShellProps;
368
503
  */
369
504
  declare function AuthUserAdminAppView({ renderHeader }?: AuthUserAdminAppViewProps): React__default.JSX.Element;
370
505
 
371
- export { AllowlistView, AuthUserAdminAppView, type AuthUserAdminAppViewProps, GroupMembersView, GroupsView, type PartialUserAdminLabels, type UserAdminAccess, type UserAdminAppConfig, type UserAdminGuards, type UserAdminLabels, type UserAdminLoaderData, type UserAdminPermission, UserAdminShell, type UserAdminShellProps, type UserAdminStore, UsersView, createInMemoryUserAdminStore, createUserAdminApp, defaultUserAdminLabels, jaUserAdminLabels, resolveUserAdminLabels };
506
+ export { AllowlistView, AuthUserAdminAppView, type AuthUserAdminAppViewProps, DirectoryView, GroupMembersView, GroupsView, type PartialUserAdminLabels, type UserAdminAccess, type UserAdminAppConfig, type UserAdminGuards, type UserAdminLabels, type UserAdminLoaderData, type UserAdminPermission, UserAdminShell, type UserAdminShellProps, type UserAdminStore, UsersView, createInMemoryUserAdminStore, createUserAdminApp, defaultUserAdminLabels, jaUserAdminLabels, resolveUserAdminLabels };