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