@objectstack/platform-objects 14.7.0 → 14.8.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/apps/index.js +135 -135
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/index.mjs +135 -135
- package/dist/apps/index.mjs.map +1 -1
- package/dist/audit/index.d.mts +50 -50
- package/dist/audit/index.d.ts +50 -50
- package/dist/identity/index.d.mts +110 -110
- package/dist/identity/index.d.ts +110 -110
- package/dist/index.js +236 -174
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +236 -174
- package/dist/index.mjs.map +1 -1
- package/dist/pages/index.js +101 -39
- package/dist/pages/index.js.map +1 -1
- package/dist/pages/index.mjs +101 -39
- package/dist/pages/index.mjs.map +1 -1
- package/dist/plugin.js +135 -135
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs +135 -135
- package/dist/plugin.mjs.map +1 -1
- package/dist/system/index.d.mts +15 -15
- package/dist/system/index.d.ts +15 -15
- package/package.json +3 -3
package/dist/pages/index.mjs
CHANGED
|
@@ -20,7 +20,7 @@ var SysOrganizationDetailPage = {
|
|
|
20
20
|
position: "top",
|
|
21
21
|
items: [
|
|
22
22
|
{
|
|
23
|
-
label: "Members",
|
|
23
|
+
label: { en: "Members", "zh-CN": "\u6210\u5458", "ja-JP": "\u30E1\u30F3\u30D0\u30FC", "es-ES": "Miembros" },
|
|
24
24
|
icon: "users",
|
|
25
25
|
children: [
|
|
26
26
|
{
|
|
@@ -32,13 +32,13 @@ var SysOrganizationDetailPage = {
|
|
|
32
32
|
sort: [{ field: "created_at", order: "desc" }],
|
|
33
33
|
limit: 25,
|
|
34
34
|
showViewAll: true,
|
|
35
|
-
title: "Members"
|
|
35
|
+
title: { en: "Members", "zh-CN": "\u6210\u5458", "ja-JP": "\u30E1\u30F3\u30D0\u30FC", "es-ES": "Miembros" }
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
]
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
|
-
label: "Invitations",
|
|
41
|
+
label: { en: "Invitations", "zh-CN": "\u9080\u8BF7", "ja-JP": "\u62DB\u5F85", "es-ES": "Invitaciones" },
|
|
42
42
|
icon: "mail",
|
|
43
43
|
children: [
|
|
44
44
|
{
|
|
@@ -50,13 +50,13 @@ var SysOrganizationDetailPage = {
|
|
|
50
50
|
sort: [{ field: "created_at", order: "desc" }],
|
|
51
51
|
limit: 25,
|
|
52
52
|
showViewAll: true,
|
|
53
|
-
title: "Invitations"
|
|
53
|
+
title: { en: "Invitations", "zh-CN": "\u9080\u8BF7", "ja-JP": "\u62DB\u5F85", "es-ES": "Invitaciones" }
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
|
-
label: "Teams",
|
|
59
|
+
label: { en: "Teams", "zh-CN": "\u56E2\u961F", "ja-JP": "\u30C1\u30FC\u30E0", "es-ES": "Equipos" },
|
|
60
60
|
icon: "users-round",
|
|
61
61
|
children: [
|
|
62
62
|
{
|
|
@@ -68,7 +68,7 @@ var SysOrganizationDetailPage = {
|
|
|
68
68
|
sort: [{ field: "name", order: "asc" }],
|
|
69
69
|
limit: 25,
|
|
70
70
|
showViewAll: true,
|
|
71
|
-
title: "Teams"
|
|
71
|
+
title: { en: "Teams", "zh-CN": "\u56E2\u961F", "ja-JP": "\u30C1\u30FC\u30E0", "es-ES": "Equipos" }
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
]
|
|
@@ -101,13 +101,30 @@ var SysUserDetailPage = {
|
|
|
101
101
|
properties: {
|
|
102
102
|
severity: "warning",
|
|
103
103
|
icon: "mail",
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
// Inline-i18n object labels: the renderer resolves them with
|
|
105
|
+
// pickLocalized (exact → base → default → en → first).
|
|
106
|
+
title: {
|
|
107
|
+
en: "Email not verified",
|
|
108
|
+
"zh-CN": "\u90AE\u7BB1\u672A\u9A8C\u8BC1",
|
|
109
|
+
"ja-JP": "\u30E1\u30FC\u30EB\u304C\u672A\u8A8D\u8A3C\u3067\u3059",
|
|
110
|
+
"es-ES": "Correo no verificado"
|
|
111
|
+
},
|
|
112
|
+
body: {
|
|
113
|
+
en: "Verify your email to receive password resets and important system notifications.",
|
|
114
|
+
"zh-CN": "\u9A8C\u8BC1\u4F60\u7684\u90AE\u7BB1\u4EE5\u63A5\u6536\u5BC6\u7801\u91CD\u7F6E\u548C\u91CD\u8981\u7684\u7CFB\u7EDF\u901A\u77E5\u3002",
|
|
115
|
+
"ja-JP": "\u30D1\u30B9\u30EF\u30FC\u30C9\u30EA\u30BB\u30C3\u30C8\u3084\u91CD\u8981\u306A\u30B7\u30B9\u30C6\u30E0\u901A\u77E5\u3092\u53D7\u3051\u53D6\u308B\u306B\u306F\u3001\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u8A8D\u8A3C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
116
|
+
"es-ES": "Verifica tu correo para recibir restablecimientos de contrase\xF1a y notificaciones importantes del sistema."
|
|
117
|
+
},
|
|
106
118
|
visible: "record.id == ctx.user.id && record.email_verified == false",
|
|
107
119
|
dismissible: false,
|
|
108
120
|
action: {
|
|
109
121
|
actionName: "resend_verification_email",
|
|
110
|
-
label:
|
|
122
|
+
label: {
|
|
123
|
+
en: "Resend verification email",
|
|
124
|
+
"zh-CN": "\u91CD\u65B0\u53D1\u9001\u9A8C\u8BC1\u90AE\u4EF6",
|
|
125
|
+
"ja-JP": "\u8A8D\u8A3C\u30E1\u30FC\u30EB\u3092\u518D\u9001\u4FE1",
|
|
126
|
+
"es-ES": "Reenviar correo de verificaci\xF3n"
|
|
127
|
+
}
|
|
111
128
|
}
|
|
112
129
|
}
|
|
113
130
|
}
|
|
@@ -136,11 +153,11 @@ var SysUserDetailPage = {
|
|
|
136
153
|
],
|
|
137
154
|
sections: [
|
|
138
155
|
{
|
|
139
|
-
label: "Identity",
|
|
156
|
+
label: { en: "Identity", "zh-CN": "\u8EAB\u4EFD", "ja-JP": "\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3", "es-ES": "Identidad" },
|
|
140
157
|
fields: ["name", "image"]
|
|
141
158
|
},
|
|
142
159
|
{
|
|
143
|
-
label: "Audit",
|
|
160
|
+
label: { en: "Audit", "zh-CN": "\u5BA1\u8BA1", "ja-JP": "\u76E3\u67FB", "es-ES": "Auditor\xEDa" },
|
|
144
161
|
fields: ["created_at", "updated_at"]
|
|
145
162
|
}
|
|
146
163
|
]
|
|
@@ -158,7 +175,7 @@ var SysUserDetailPage = {
|
|
|
158
175
|
position: "top",
|
|
159
176
|
items: [
|
|
160
177
|
{
|
|
161
|
-
label: "Positions",
|
|
178
|
+
label: { en: "Positions", "zh-CN": "\u5C97\u4F4D", "ja-JP": "\u30DD\u30B8\u30B7\u30E7\u30F3", "es-ES": "Puestos" },
|
|
162
179
|
icon: "shield-check",
|
|
163
180
|
children: [
|
|
164
181
|
{
|
|
@@ -175,7 +192,7 @@ var SysUserDetailPage = {
|
|
|
175
192
|
sort: [{ field: "created_at", order: "desc" }],
|
|
176
193
|
limit: 25,
|
|
177
194
|
showViewAll: true,
|
|
178
|
-
title: "Positions",
|
|
195
|
+
title: { en: "Positions", "zh-CN": "\u5C97\u4F4D", "ja-JP": "\u30DD\u30B8\u30B7\u30E7\u30F3", "es-ES": "Puestos" },
|
|
179
196
|
add: {
|
|
180
197
|
picker: {
|
|
181
198
|
object: "sys_position",
|
|
@@ -183,14 +200,19 @@ var SysUserDetailPage = {
|
|
|
183
200
|
labelField: "label"
|
|
184
201
|
},
|
|
185
202
|
linkField: "position",
|
|
186
|
-
label:
|
|
203
|
+
label: {
|
|
204
|
+
en: "Assign position",
|
|
205
|
+
"zh-CN": "\u5206\u914D\u5C97\u4F4D",
|
|
206
|
+
"ja-JP": "\u30DD\u30B8\u30B7\u30E7\u30F3\u3092\u5272\u308A\u5F53\u3066",
|
|
207
|
+
"es-ES": "Asignar puesto"
|
|
208
|
+
}
|
|
187
209
|
}
|
|
188
210
|
}
|
|
189
211
|
}
|
|
190
212
|
]
|
|
191
213
|
},
|
|
192
214
|
{
|
|
193
|
-
label: "Sessions",
|
|
215
|
+
label: { en: "Sessions", "zh-CN": "\u4F1A\u8BDD", "ja-JP": "\u30BB\u30C3\u30B7\u30E7\u30F3", "es-ES": "Sesiones" },
|
|
194
216
|
icon: "monitor",
|
|
195
217
|
children: [
|
|
196
218
|
{
|
|
@@ -202,13 +224,13 @@ var SysUserDetailPage = {
|
|
|
202
224
|
sort: [{ field: "created_at", order: "desc" }],
|
|
203
225
|
limit: 25,
|
|
204
226
|
showViewAll: true,
|
|
205
|
-
title: "Sessions"
|
|
227
|
+
title: { en: "Sessions", "zh-CN": "\u4F1A\u8BDD", "ja-JP": "\u30BB\u30C3\u30B7\u30E7\u30F3", "es-ES": "Sesiones" }
|
|
206
228
|
}
|
|
207
229
|
}
|
|
208
230
|
]
|
|
209
231
|
},
|
|
210
232
|
{
|
|
211
|
-
label: "Linked Accounts",
|
|
233
|
+
label: { en: "Linked Accounts", "zh-CN": "\u5173\u8054\u8D26\u53F7", "ja-JP": "\u9023\u643A\u30A2\u30AB\u30A6\u30F3\u30C8", "es-ES": "Cuentas vinculadas" },
|
|
212
234
|
icon: "link",
|
|
213
235
|
children: [
|
|
214
236
|
{
|
|
@@ -220,13 +242,13 @@ var SysUserDetailPage = {
|
|
|
220
242
|
sort: [{ field: "created_at", order: "desc" }],
|
|
221
243
|
limit: 25,
|
|
222
244
|
showViewAll: true,
|
|
223
|
-
title: "Linked Accounts"
|
|
245
|
+
title: { en: "Linked Accounts", "zh-CN": "\u5173\u8054\u8D26\u53F7", "ja-JP": "\u9023\u643A\u30A2\u30AB\u30A6\u30F3\u30C8", "es-ES": "Cuentas vinculadas" }
|
|
224
246
|
}
|
|
225
247
|
}
|
|
226
248
|
]
|
|
227
249
|
},
|
|
228
250
|
{
|
|
229
|
-
label: "Organizations",
|
|
251
|
+
label: { en: "Organizations", "zh-CN": "\u7EC4\u7EC7", "ja-JP": "\u7D44\u7E54", "es-ES": "Organizaciones" },
|
|
230
252
|
icon: "building-2",
|
|
231
253
|
children: [
|
|
232
254
|
{
|
|
@@ -238,13 +260,13 @@ var SysUserDetailPage = {
|
|
|
238
260
|
sort: [{ field: "created_at", order: "desc" }],
|
|
239
261
|
limit: 25,
|
|
240
262
|
showViewAll: true,
|
|
241
|
-
title: "Organizations"
|
|
263
|
+
title: { en: "Organizations", "zh-CN": "\u7EC4\u7EC7", "ja-JP": "\u7D44\u7E54", "es-ES": "Organizaciones" }
|
|
242
264
|
}
|
|
243
265
|
}
|
|
244
266
|
]
|
|
245
267
|
},
|
|
246
268
|
{
|
|
247
|
-
label: "OAuth Apps",
|
|
269
|
+
label: { en: "OAuth Apps", "zh-CN": "OAuth \u5E94\u7528", "ja-JP": "OAuth \u30A2\u30D7\u30EA", "es-ES": "Aplicaciones OAuth" },
|
|
248
270
|
icon: "key-square",
|
|
249
271
|
children: [
|
|
250
272
|
{
|
|
@@ -256,7 +278,7 @@ var SysUserDetailPage = {
|
|
|
256
278
|
sort: [{ field: "created_at", order: "desc" }],
|
|
257
279
|
limit: 25,
|
|
258
280
|
showViewAll: true,
|
|
259
|
-
title: "OAuth Apps"
|
|
281
|
+
title: { en: "OAuth Apps", "zh-CN": "OAuth \u5E94\u7528", "ja-JP": "OAuth \u30A2\u30D7\u30EA", "es-ES": "Aplicaciones OAuth" }
|
|
260
282
|
}
|
|
261
283
|
}
|
|
262
284
|
]
|
|
@@ -268,21 +290,31 @@ var SysUserDetailPage = {
|
|
|
268
290
|
// `location: 'record_section'` so they only render here, not
|
|
269
291
|
// in the global header row.
|
|
270
292
|
{
|
|
271
|
-
label: "Security",
|
|
293
|
+
label: { en: "Security", "zh-CN": "\u5B89\u5168", "ja-JP": "\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3", "es-ES": "Seguridad" },
|
|
272
294
|
icon: "shield",
|
|
273
295
|
children: [
|
|
274
296
|
{
|
|
275
297
|
type: "element:text",
|
|
276
298
|
properties: {
|
|
277
299
|
variant: "subheading",
|
|
278
|
-
content:
|
|
300
|
+
content: {
|
|
301
|
+
en: "Password & Sign-in",
|
|
302
|
+
"zh-CN": "\u5BC6\u7801\u4E0E\u767B\u5F55",
|
|
303
|
+
"ja-JP": "\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u30B5\u30A4\u30F3\u30A4\u30F3",
|
|
304
|
+
"es-ES": "Contrase\xF1a e inicio de sesi\xF3n"
|
|
305
|
+
}
|
|
279
306
|
}
|
|
280
307
|
},
|
|
281
308
|
{
|
|
282
309
|
type: "element:text",
|
|
283
310
|
properties: {
|
|
284
311
|
variant: "caption",
|
|
285
|
-
content:
|
|
312
|
+
content: {
|
|
313
|
+
en: "Change your password or the email address associated with this account.",
|
|
314
|
+
"zh-CN": "\u4FEE\u6539\u5BC6\u7801\u6216\u6B64\u8D26\u53F7\u7ED1\u5B9A\u7684\u90AE\u7BB1\u5730\u5740\u3002",
|
|
315
|
+
"ja-JP": "\u30D1\u30B9\u30EF\u30FC\u30C9\u3001\u307E\u305F\u306F\u3053\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u5909\u66F4\u3057\u307E\u3059\u3002",
|
|
316
|
+
"es-ES": "Cambia tu contrase\xF1a o la direcci\xF3n de correo asociada a esta cuenta."
|
|
317
|
+
}
|
|
286
318
|
}
|
|
287
319
|
},
|
|
288
320
|
{
|
|
@@ -298,14 +330,24 @@ var SysUserDetailPage = {
|
|
|
298
330
|
type: "element:text",
|
|
299
331
|
properties: {
|
|
300
332
|
variant: "subheading",
|
|
301
|
-
content:
|
|
333
|
+
content: {
|
|
334
|
+
en: "Two-Factor Authentication",
|
|
335
|
+
"zh-CN": "\u4E24\u6B65\u9A8C\u8BC1",
|
|
336
|
+
"ja-JP": "\u4E8C\u8981\u7D20\u8A8D\u8A3C",
|
|
337
|
+
"es-ES": "Autenticaci\xF3n de dos factores"
|
|
338
|
+
}
|
|
302
339
|
}
|
|
303
340
|
},
|
|
304
341
|
{
|
|
305
342
|
type: "element:text",
|
|
306
343
|
properties: {
|
|
307
344
|
variant: "caption",
|
|
308
|
-
content:
|
|
345
|
+
content: {
|
|
346
|
+
en: "Add a second layer of security using a TOTP authenticator app. Backup codes let you sign in if you lose your device.",
|
|
347
|
+
"zh-CN": "\u4F7F\u7528 TOTP \u9A8C\u8BC1\u5668\u5E94\u7528\u6DFB\u52A0\u7B2C\u4E8C\u5C42\u5B89\u5168\u9632\u62A4\u3002\u5907\u7528\u9A8C\u8BC1\u7801\u53EF\u5728\u8BBE\u5907\u4E22\u5931\u65F6\u7528\u4E8E\u767B\u5F55\u3002",
|
|
348
|
+
"ja-JP": "TOTP \u8A8D\u8A3C\u30A2\u30D7\u30EA\u3067\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u3092\u3082\u3046\u4E00\u6BB5\u5F37\u5316\u3057\u307E\u3059\u3002\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u30B3\u30FC\u30C9\u304C\u3042\u308C\u3070\u3001\u30C7\u30D0\u30A4\u30B9\u3092\u7D1B\u5931\u3057\u3066\u3082\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u307E\u3059\u3002",
|
|
349
|
+
"es-ES": "A\xF1ade una segunda capa de seguridad con una app de autenticaci\xF3n TOTP. Los c\xF3digos de respaldo te permiten iniciar sesi\xF3n si pierdes tu dispositivo."
|
|
350
|
+
}
|
|
309
351
|
}
|
|
310
352
|
},
|
|
311
353
|
{
|
|
@@ -321,14 +363,24 @@ var SysUserDetailPage = {
|
|
|
321
363
|
type: "element:text",
|
|
322
364
|
properties: {
|
|
323
365
|
variant: "subheading",
|
|
324
|
-
content:
|
|
366
|
+
content: {
|
|
367
|
+
en: "Email Verification",
|
|
368
|
+
"zh-CN": "\u90AE\u7BB1\u9A8C\u8BC1",
|
|
369
|
+
"ja-JP": "\u30E1\u30FC\u30EB\u8A8D\u8A3C",
|
|
370
|
+
"es-ES": "Verificaci\xF3n de correo"
|
|
371
|
+
}
|
|
325
372
|
}
|
|
326
373
|
},
|
|
327
374
|
{
|
|
328
375
|
type: "element:text",
|
|
329
376
|
properties: {
|
|
330
377
|
variant: "caption",
|
|
331
|
-
content:
|
|
378
|
+
content: {
|
|
379
|
+
en: "Verify your email so password resets and notifications reach you. The button appears only while verification is pending.",
|
|
380
|
+
"zh-CN": "\u9A8C\u8BC1\u4F60\u7684\u90AE\u7BB1,\u4EE5\u4FBF\u63A5\u6536\u5BC6\u7801\u91CD\u7F6E\u548C\u7CFB\u7EDF\u901A\u77E5\u3002\u6309\u94AE\u4EC5\u5728\u90AE\u7BB1\u5F85\u9A8C\u8BC1\u65F6\u663E\u793A\u3002",
|
|
381
|
+
"ja-JP": "\u30D1\u30B9\u30EF\u30FC\u30C9\u30EA\u30BB\u30C3\u30C8\u3084\u901A\u77E5\u3092\u53D7\u3051\u53D6\u308C\u308B\u3088\u3046\u3001\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u8A8D\u8A3C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30DC\u30BF\u30F3\u306F\u672A\u8A8D\u8A3C\u306E\u9593\u306E\u307F\u8868\u793A\u3055\u308C\u307E\u3059\u3002",
|
|
382
|
+
"es-ES": "Verifica tu correo para recibir restablecimientos de contrase\xF1a y notificaciones. El bot\xF3n solo aparece mientras la verificaci\xF3n est\xE1 pendiente."
|
|
383
|
+
}
|
|
332
384
|
}
|
|
333
385
|
},
|
|
334
386
|
{
|
|
@@ -344,7 +396,12 @@ var SysUserDetailPage = {
|
|
|
344
396
|
type: "element:text",
|
|
345
397
|
properties: {
|
|
346
398
|
variant: "subheading",
|
|
347
|
-
content:
|
|
399
|
+
content: {
|
|
400
|
+
en: "Danger Zone",
|
|
401
|
+
"zh-CN": "\u5371\u9669\u64CD\u4F5C",
|
|
402
|
+
"ja-JP": "\u5371\u967A\u306A\u64CD\u4F5C",
|
|
403
|
+
"es-ES": "Zona de peligro"
|
|
404
|
+
}
|
|
348
405
|
},
|
|
349
406
|
className: "text-destructive"
|
|
350
407
|
},
|
|
@@ -352,7 +409,12 @@ var SysUserDetailPage = {
|
|
|
352
409
|
type: "element:text",
|
|
353
410
|
properties: {
|
|
354
411
|
variant: "caption",
|
|
355
|
-
content:
|
|
412
|
+
content: {
|
|
413
|
+
en: "Permanent. Once deleted, your account cannot be recovered.",
|
|
414
|
+
"zh-CN": "\u6B64\u64CD\u4F5C\u4E0D\u53EF\u9006,\u8D26\u53F7\u4E00\u7ECF\u5220\u9664\u5C06\u65E0\u6CD5\u6062\u590D\u3002",
|
|
415
|
+
"ja-JP": "\u3053\u306E\u64CD\u4F5C\u306F\u53D6\u308A\u6D88\u305B\u307E\u305B\u3093\u3002\u524A\u9664\u3055\u308C\u305F\u30A2\u30AB\u30A6\u30F3\u30C8\u306F\u5FA9\u5143\u3067\u304D\u307E\u305B\u3093\u3002",
|
|
416
|
+
"es-ES": "Permanente. Una vez eliminada, tu cuenta no se puede recuperar."
|
|
417
|
+
}
|
|
356
418
|
}
|
|
357
419
|
},
|
|
358
420
|
{
|
|
@@ -370,7 +432,7 @@ var SysUserDetailPage = {
|
|
|
370
432
|
// user_id FK; the sys_api_key object's own list-item actions
|
|
371
433
|
// (revoke / restore) handle row operations.
|
|
372
434
|
{
|
|
373
|
-
label: "API Keys",
|
|
435
|
+
label: { en: "API Keys", "zh-CN": "API \u5BC6\u94A5", "ja-JP": "API \u30AD\u30FC", "es-ES": "Claves de API" },
|
|
374
436
|
icon: "key-round",
|
|
375
437
|
children: [
|
|
376
438
|
{
|
|
@@ -382,7 +444,7 @@ var SysUserDetailPage = {
|
|
|
382
444
|
sort: [{ field: "created_at", order: "desc" }],
|
|
383
445
|
limit: 25,
|
|
384
446
|
showViewAll: true,
|
|
385
|
-
title: "API Keys"
|
|
447
|
+
title: { en: "API Keys", "zh-CN": "API \u5BC6\u94A5", "ja-JP": "API \u30AD\u30FC", "es-ES": "Claves de API" }
|
|
386
448
|
}
|
|
387
449
|
}
|
|
388
450
|
]
|
|
@@ -413,7 +475,7 @@ var SysPositionDetailPage = {
|
|
|
413
475
|
position: "top",
|
|
414
476
|
items: [
|
|
415
477
|
{
|
|
416
|
-
label: "Holders",
|
|
478
|
+
label: { en: "Holders", "zh-CN": "\u4EFB\u804C\u4EBA\u5458", "ja-JP": "\u5728\u4EFB\u8005", "es-ES": "Titulares" },
|
|
417
479
|
icon: "users",
|
|
418
480
|
children: [
|
|
419
481
|
{
|
|
@@ -426,21 +488,21 @@ var SysPositionDetailPage = {
|
|
|
426
488
|
sort: [{ field: "created_at", order: "desc" }],
|
|
427
489
|
limit: 25,
|
|
428
490
|
showViewAll: true,
|
|
429
|
-
title: "Holders",
|
|
491
|
+
title: { en: "Holders", "zh-CN": "\u4EFB\u804C\u4EBA\u5458", "ja-JP": "\u5728\u4EFB\u8005", "es-ES": "Titulares" },
|
|
430
492
|
add: {
|
|
431
493
|
picker: {
|
|
432
494
|
object: "sys_user",
|
|
433
495
|
labelField: "name"
|
|
434
496
|
},
|
|
435
497
|
linkField: "user_id",
|
|
436
|
-
label: "Assign user"
|
|
498
|
+
label: { en: "Assign user", "zh-CN": "\u5206\u914D\u7528\u6237", "ja-JP": "\u30E6\u30FC\u30B6\u30FC\u3092\u5272\u308A\u5F53\u3066", "es-ES": "Asignar usuario" }
|
|
437
499
|
}
|
|
438
500
|
}
|
|
439
501
|
}
|
|
440
502
|
]
|
|
441
503
|
},
|
|
442
504
|
{
|
|
443
|
-
label: "Permission Sets",
|
|
505
|
+
label: { en: "Permission Sets", "zh-CN": "\u6743\u9650\u96C6", "ja-JP": "\u6A29\u9650\u30BB\u30C3\u30C8", "es-ES": "Conjuntos de permisos" },
|
|
444
506
|
icon: "lock",
|
|
445
507
|
children: [
|
|
446
508
|
{
|
|
@@ -452,14 +514,14 @@ var SysPositionDetailPage = {
|
|
|
452
514
|
sort: [{ field: "created_at", order: "desc" }],
|
|
453
515
|
limit: 25,
|
|
454
516
|
showViewAll: true,
|
|
455
|
-
title: "Permission Sets",
|
|
517
|
+
title: { en: "Permission Sets", "zh-CN": "\u6743\u9650\u96C6", "ja-JP": "\u6A29\u9650\u30BB\u30C3\u30C8", "es-ES": "Conjuntos de permisos" },
|
|
456
518
|
add: {
|
|
457
519
|
picker: {
|
|
458
520
|
object: "sys_permission_set",
|
|
459
521
|
labelField: "label"
|
|
460
522
|
},
|
|
461
523
|
linkField: "permission_set_id",
|
|
462
|
-
label: "Bind permission set"
|
|
524
|
+
label: { en: "Bind permission set", "zh-CN": "\u7ED1\u5B9A\u6743\u9650\u96C6", "ja-JP": "\u6A29\u9650\u30BB\u30C3\u30C8\u3092\u30D0\u30A4\u30F3\u30C9", "es-ES": "Vincular conjunto de permisos" }
|
|
463
525
|
}
|
|
464
526
|
}
|
|
465
527
|
}
|
package/dist/pages/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/pages/sys-organization.page.ts","../../src/pages/sys-user.page.ts","../../src/pages/sys-position.page.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Page } from '@objectstack/spec/ui';\n\n/**\n * sys_organization — Record Detail Page (slotted)\n *\n * Adds Members / Invitations / Teams tabs to the organization detail\n * page so an admin can manage the membership graph from a single place\n * instead of switching between three separate Setup list views.\n *\n * The page is `kind: 'slotted'` and overrides only the `tabs` slot —\n * header, actions, highlights, details and discussion fall through to\n * the synthesized default, so the organization's own fields and the\n * existing record-header actions (Set Active, Edit, Delete, Leave) are\n * preserved.\n *\n * Each tab is a `record:related_list` over a child object that already\n * has `organization_id` as a `Field.lookup('sys_organization')` — the\n * renderer scopes the list to the current organization automatically\n * (the related-list runtime uses the parent record id from the page\n * context as the filter value for `relationshipField`). The per-row\n * actions defined on each child object (invite_user, cancel_invitation,\n * remove_member, transfer_ownership, create_team, …) are inherited\n * unchanged — no admin endpoint has to be re-declared here.\n *\n * Notable omissions:\n * - **OAuth Apps**: `sys_oauth_application` is owned by `user_id`, not\n * `organization_id`. They surface on the user's Account → Developer\n * section instead of the org detail.\n * - **SSO**: no `sys_sso*` object exists yet. When the SSO plugin lands,\n * add a fourth tab here.\n */\nexport const SysOrganizationDetailPage: Page = {\n name: 'sys_organization_detail',\n label: 'Organization',\n type: 'record',\n object: 'sys_organization',\n template: 'default',\n kind: 'slotted',\n isDefault: true,\n // `regions` is required by the Page schema even for slotted pages —\n // empty array lets the synthesizer fill in header/details/discussion\n // while the `slots.tabs` override below replaces the synthesized\n // tabs strip.\n regions: [],\n slots: {\n tabs: {\n type: 'page:tabs',\n properties: {\n type: 'line',\n position: 'top',\n items: [\n {\n label: 'Members',\n icon: 'users',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_member',\n relationshipField: 'organization_id',\n columns: ['user_id', 'role', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'Members',\n },\n },\n ],\n },\n {\n label: 'Invitations',\n icon: 'mail',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_invitation',\n relationshipField: 'organization_id',\n columns: ['email', 'role', 'status', 'expires_at', 'inviter_id'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'Invitations',\n },\n },\n ],\n },\n {\n label: 'Teams',\n icon: 'users-round',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_team',\n relationshipField: 'organization_id',\n columns: ['name', 'created_at', 'updated_at'],\n sort: [{ field: 'name', order: 'asc' }],\n limit: 25,\n showViewAll: true,\n title: 'Teams',\n },\n },\n ],\n },\n ],\n },\n },\n },\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Page } from '@objectstack/spec/ui';\n\n/**\n * sys_user — Record Detail Page (slotted, default for ALL sys_user records)\n *\n * **Audience**: admins browsing user records from Setup.\n *\n * The Account App's \"Profile\" entry no longer routes here — it points at\n * the `account:profile_card` Console component for a settings-form-style\n * personal profile. This page therefore optimizes for the admin\n * use case: scanning a user's signals (email/verification/2FA/role),\n * reviewing related sessions/orgs/oauth/api-keys, and triggering\n * admin actions (ban / impersonate / set_role).\n *\n * Strategy\n * --------\n * - `kind: 'slotted'` + `isDefault: true`: overrides `highlights`,\n * `details`, `tabs` and `discussion`. Header / actions fall through\n * to the synthesizer so the object's declared actions\n * (`update_my_profile / change_my_password / resend_verification_email\n * / ban_user / set_user_role / impersonate_user / …`) still appear\n * in the header overflow menu automatically.\n * - `highlights` promotes the four signals worth scanning at the top:\n * email, verification state, 2FA, platform role. Highlight fields\n * are auto-dropped from the details grid below.\n * - `details` re-groups remaining fields into sections and hides\n * admin-internal audit columns. Banned / ban metadata is still\n * editable from the header actions — we just don't show it in\n * every user's body.\n * - `tabs` is **explicitly curated** to the 5 related lists that matter\n * on a user profile (Positions / Sessions / Linked Accounts / Organizations /\n * Personal OAuth Apps). Without this override, the synthesizer\n * auto-generates a tab per object that has a FK to sys_user\n * (sys_position.created_by, sys_email.updated_by, sys_user_preference,\n * sys_email_template.created_by, …) producing dozens of noisy\n * \"查看全部\" cards on every profile.\n * - `discussion: []` removes the Chatter feed — it has no business\n * on a personal profile.\n */\nexport const SysUserDetailPage: Page = {\n name: 'sys_user_detail',\n label: 'User',\n type: 'record',\n object: 'sys_user',\n template: 'default',\n kind: 'slotted',\n isDefault: true,\n\n regions: [],\n\n slots: {\n // ── Alert banners ─────────────────────────────────────────────\n // Conditional notices rendered between the page header and the\n // highlight strip. The unverified-email banner only shows for the\n // current user viewing their own profile (admins looking at other\n // users see nothing — they can use Setup actions instead).\n alerts: [\n {\n type: 'record:alert',\n properties: {\n severity: 'warning',\n icon: 'mail',\n title: '邮箱未验证',\n body: '验证你的邮箱以接收密码重置和重要的系统通知。',\n visible: 'record.id == ctx.user.id && record.email_verified == false',\n dismissible: false,\n action: {\n actionName: 'resend_verification_email',\n label: '重新发送验证邮件',\n },\n },\n },\n ],\n\n // ── Highlight chips above the fold ────────────────────────────\n highlights: {\n type: 'record:highlights',\n properties: {\n fields: ['email', 'email_verified', 'two_factor_enabled', 'role'],\n },\n },\n\n // ── Body / details grid ───────────────────────────────────────\n details: {\n type: 'record:details',\n properties: {\n hideFields: [\n 'id',\n 'banned',\n 'ban_reason',\n 'ban_expires',\n // already promoted to highlights:\n 'email',\n 'email_verified',\n 'two_factor_enabled',\n 'role',\n ],\n sections: [\n {\n label: 'Identity',\n fields: ['name', 'image'],\n },\n {\n label: 'Audit',\n fields: ['created_at', 'updated_at'],\n },\n ],\n },\n },\n\n // ── Tabs: curated related lists ───────────────────────────────\n // Only the 4 lists that are semantically about THIS user account.\n // Everything else (sys_position created_by, sys_email_template\n // updated_by, …) is incidental authorship metadata and would only\n // create noise.\n tabs: {\n type: 'page:tabs',\n properties: {\n type: 'line',\n position: 'top',\n items: [\n {\n label: 'Positions',\n icon: 'shield-check',\n children: [\n {\n // [ADR-0090 D3] Position assignments (岗位分派) — pure SDUI:\n // the Add picker creates sys_user_position rows storing the\n // position's MACHINE NAME (valueField: 'name'), and every\n // server-side rule (the D12 delegated-admin gate, audience-\n // anchor rejection) surfaces its error in the dialog.\n type: 'record:related_list',\n properties: {\n objectName: 'sys_user_position',\n relationshipField: 'user_id',\n columns: ['position', 'business_unit_id', 'granted_by', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'Positions',\n add: {\n picker: {\n object: 'sys_position',\n valueField: 'name',\n labelField: 'label',\n },\n linkField: 'position',\n label: 'Assign position',\n },\n },\n },\n ],\n },\n {\n label: 'Sessions',\n icon: 'monitor',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_session',\n relationshipField: 'user_id',\n columns: ['user_agent', 'ip_address', 'created_at', 'expires_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'Sessions',\n },\n },\n ],\n },\n {\n label: 'Linked Accounts',\n icon: 'link',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_account',\n relationshipField: 'user_id',\n columns: ['provider_id', 'account_id', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'Linked Accounts',\n },\n },\n ],\n },\n {\n label: 'Organizations',\n icon: 'building-2',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_member',\n relationshipField: 'user_id',\n columns: ['organization_id', 'role', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'Organizations',\n },\n },\n ],\n },\n {\n label: 'OAuth Apps',\n icon: 'key-square',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_oauth_application',\n relationshipField: 'user_id',\n columns: ['name', 'client_id', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'OAuth Apps',\n },\n },\n ],\n },\n // ── Security ──────────────────────────────────────────────\n // Grouped self-service security controls. Each `record:quick_actions`\n // pulls its actions by name from the sys_user object metadata\n // (DRY — definitions stay on the object) and filters by\n // `location: 'record_section'` so they only render here, not\n // in the global header row.\n {\n label: 'Security',\n icon: 'shield',\n children: [\n {\n type: 'element:text',\n properties: {\n variant: 'subheading',\n content: 'Password & Sign-in',\n },\n },\n {\n type: 'element:text',\n properties: {\n variant: 'caption',\n content: 'Change your password or the email address associated with this account.',\n },\n },\n {\n type: 'record:quick_actions',\n properties: {\n location: 'record_section',\n align: 'start',\n actionNames: ['change_my_password', 'change_my_email'],\n },\n },\n { type: 'element:divider' },\n {\n type: 'element:text',\n properties: {\n variant: 'subheading',\n content: 'Two-Factor Authentication',\n },\n },\n {\n type: 'element:text',\n properties: {\n variant: 'caption',\n content: 'Add a second layer of security using a TOTP authenticator app. Backup codes let you sign in if you lose your device.',\n },\n },\n {\n type: 'record:quick_actions',\n properties: {\n location: 'record_section',\n align: 'start',\n actionNames: ['enable_two_factor', 'disable_two_factor', 'generate_backup_codes'],\n },\n },\n { type: 'element:divider' },\n {\n type: 'element:text',\n properties: {\n variant: 'subheading',\n content: 'Email Verification',\n },\n },\n {\n type: 'element:text',\n properties: {\n variant: 'caption',\n content: 'Verify your email so password resets and notifications reach you. The button appears only while verification is pending.',\n },\n },\n {\n type: 'record:quick_actions',\n properties: {\n location: 'record_section',\n align: 'start',\n actionNames: ['resend_verification_email'],\n },\n },\n { type: 'element:divider' },\n {\n type: 'element:text',\n properties: {\n variant: 'subheading',\n content: 'Danger Zone',\n },\n className: 'text-destructive',\n },\n {\n type: 'element:text',\n properties: {\n variant: 'caption',\n content: 'Permanent. Once deleted, your account cannot be recovered.',\n },\n },\n {\n type: 'record:quick_actions',\n properties: {\n location: 'record_section',\n align: 'start',\n actionNames: ['delete_my_account'],\n },\n },\n ],\n },\n // ── API Keys ──────────────────────────────────────────────\n // Programmatic credentials issued for this user. Filtered by\n // user_id FK; the sys_api_key object's own list-item actions\n // (revoke / restore) handle row operations.\n {\n label: 'API Keys',\n icon: 'key-round',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_api_key',\n relationshipField: 'user_id',\n columns: ['name', 'prefix', 'expires_at', 'revoked', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'API Keys',\n },\n },\n ],\n },\n ],\n },\n },\n\n // ── Suppress the Discussion / Chatter thread ──────────────────\n discussion: [],\n },\n};\n","// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Page } from '@objectstack/spec/ui';\n\n/**\n * sys_position — Record Detail Page (slotted, default for ALL sys_position\n * records)\n *\n * **Audience**: admins managing capability distribution from Setup.\n *\n * A position (岗位, ADR-0090 D3) is the flat distribution group: users hold\n * it (`sys_user_position`), and it binds permission sets\n * (`sys_position_permission_set`). This page makes both edges manageable\n * as PURE SDUI — two `record:related_list` tabs with Add pickers; no\n * bespoke React:\n *\n * - **Holders** — who holds this position. `sys_user_position.position`\n * stores the position's MACHINE NAME, so the list keys on\n * `relationshipValueField: 'name'` (the generic name-keyed-junction\n * affordance this page motivated). Assigning here inserts an ordinary\n * assignment row; the ADR-0090 D12 delegated-admin gate governs the\n * write and its denial reason surfaces in the Add dialog. The\n * `business_unit_id` column is the assignment-level BU anchor\n * (ADR-0090 Addendum); `valid_from`/`valid_until` columns join it when\n * ADR-0091 L1 lands.\n * - **Permission Sets** — what the position distributes\n * (`sys_position_permission_set`, ordinary id-keyed junction). Binding\n * is guarded by BOTH the audience-anchor gate (D5/D9 — high-privilege\n * sets never bind to everyone/guest) and the D12 gate.\n *\n * Header/actions fall through to the synthesizer, so the object's declared\n * row actions (activate/deactivate/clone/set-default) keep working.\n */\nexport const SysPositionDetailPage: Page = {\n name: 'sys_position_detail',\n label: 'Position',\n type: 'record',\n object: 'sys_position',\n template: 'default',\n kind: 'slotted',\n isDefault: true,\n\n regions: [],\n\n slots: {\n tabs: {\n type: 'page:tabs',\n properties: {\n type: 'line',\n position: 'top',\n items: [\n {\n label: 'Holders',\n icon: 'users',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_user_position',\n relationshipField: 'position',\n relationshipValueField: 'name',\n columns: ['user_id', 'business_unit_id', 'granted_by', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'Holders',\n add: {\n picker: {\n object: 'sys_user',\n labelField: 'name',\n },\n linkField: 'user_id',\n label: 'Assign user',\n },\n },\n },\n ],\n },\n {\n label: 'Permission Sets',\n icon: 'lock',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_position_permission_set',\n relationshipField: 'position_id',\n columns: ['permission_set_id', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: 'Permission Sets',\n add: {\n picker: {\n object: 'sys_permission_set',\n labelField: 'label',\n },\n linkField: 'permission_set_id',\n label: 'Bind permission set',\n },\n },\n },\n ],\n },\n ],\n },\n },\n\n // No Chatter feed on an RBAC primitive.\n discussion: [],\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/pages/sys-organization.page.ts","../../src/pages/sys-user.page.ts","../../src/pages/sys-position.page.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Page } from '@objectstack/spec/ui';\n\n/**\n * sys_organization — Record Detail Page (slotted)\n *\n * Adds Members / Invitations / Teams tabs to the organization detail\n * page so an admin can manage the membership graph from a single place\n * instead of switching between three separate Setup list views.\n *\n * The page is `kind: 'slotted'` and overrides only the `tabs` slot —\n * header, actions, highlights, details and discussion fall through to\n * the synthesized default, so the organization's own fields and the\n * existing record-header actions (Set Active, Edit, Delete, Leave) are\n * preserved.\n *\n * Each tab is a `record:related_list` over a child object that already\n * has `organization_id` as a `Field.lookup('sys_organization')` — the\n * renderer scopes the list to the current organization automatically\n * (the related-list runtime uses the parent record id from the page\n * context as the filter value for `relationshipField`). The per-row\n * actions defined on each child object (invite_user, cancel_invitation,\n * remove_member, transfer_ownership, create_team, …) are inherited\n * unchanged — no admin endpoint has to be re-declared here.\n *\n * Notable omissions:\n * - **OAuth Apps**: `sys_oauth_application` is owned by `user_id`, not\n * `organization_id`. They surface on the user's Account → Developer\n * section instead of the org detail.\n * - **SSO**: no `sys_sso*` object exists yet. When the SSO plugin lands,\n * add a fourth tab here.\n */\nexport const SysOrganizationDetailPage: Page = {\n name: 'sys_organization_detail',\n label: 'Organization',\n type: 'record',\n object: 'sys_organization',\n template: 'default',\n kind: 'slotted',\n isDefault: true,\n // `regions` is required by the Page schema even for slotted pages —\n // empty array lets the synthesizer fill in header/details/discussion\n // while the `slots.tabs` override below replaces the synthesized\n // tabs strip.\n regions: [],\n slots: {\n tabs: {\n type: 'page:tabs',\n properties: {\n type: 'line',\n position: 'top',\n items: [\n {\n label: { en: 'Members', 'zh-CN': '成员', 'ja-JP': 'メンバー', 'es-ES': 'Miembros' },\n icon: 'users',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_member',\n relationshipField: 'organization_id',\n columns: ['user_id', 'role', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Members', 'zh-CN': '成员', 'ja-JP': 'メンバー', 'es-ES': 'Miembros' },\n },\n },\n ],\n },\n {\n label: { en: 'Invitations', 'zh-CN': '邀请', 'ja-JP': '招待', 'es-ES': 'Invitaciones' },\n icon: 'mail',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_invitation',\n relationshipField: 'organization_id',\n columns: ['email', 'role', 'status', 'expires_at', 'inviter_id'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Invitations', 'zh-CN': '邀请', 'ja-JP': '招待', 'es-ES': 'Invitaciones' },\n },\n },\n ],\n },\n {\n label: { en: 'Teams', 'zh-CN': '团队', 'ja-JP': 'チーム', 'es-ES': 'Equipos' },\n icon: 'users-round',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_team',\n relationshipField: 'organization_id',\n columns: ['name', 'created_at', 'updated_at'],\n sort: [{ field: 'name', order: 'asc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Teams', 'zh-CN': '团队', 'ja-JP': 'チーム', 'es-ES': 'Equipos' },\n },\n },\n ],\n },\n ],\n },\n },\n },\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Page } from '@objectstack/spec/ui';\n\n/**\n * sys_user — Record Detail Page (slotted, default for ALL sys_user records)\n *\n * **Audience**: admins browsing user records from Setup.\n *\n * The Account App's \"Profile\" entry no longer routes here — it points at\n * the `account:profile_card` Console component for a settings-form-style\n * personal profile. This page therefore optimizes for the admin\n * use case: scanning a user's signals (email/verification/2FA/role),\n * reviewing related sessions/orgs/oauth/api-keys, and triggering\n * admin actions (ban / impersonate / set_role).\n *\n * Strategy\n * --------\n * - `kind: 'slotted'` + `isDefault: true`: overrides `highlights`,\n * `details`, `tabs` and `discussion`. Header / actions fall through\n * to the synthesizer so the object's declared actions\n * (`update_my_profile / change_my_password / resend_verification_email\n * / ban_user / set_user_role / impersonate_user / …`) still appear\n * in the header overflow menu automatically.\n * - `highlights` promotes the four signals worth scanning at the top:\n * email, verification state, 2FA, platform role. Highlight fields\n * are auto-dropped from the details grid below.\n * - `details` re-groups remaining fields into sections and hides\n * admin-internal audit columns. Banned / ban metadata is still\n * editable from the header actions — we just don't show it in\n * every user's body.\n * - `tabs` is **explicitly curated** to the 5 related lists that matter\n * on a user profile (Positions / Sessions / Linked Accounts / Organizations /\n * Personal OAuth Apps). Without this override, the synthesizer\n * auto-generates a tab per object that has a FK to sys_user\n * (sys_position.created_by, sys_email.updated_by, sys_user_preference,\n * sys_email_template.created_by, …) producing dozens of noisy\n * \"查看全部\" cards on every profile.\n * - `discussion: []` removes the Chatter feed — it has no business\n * on a personal profile.\n */\nexport const SysUserDetailPage: Page = {\n name: 'sys_user_detail',\n label: 'User',\n type: 'record',\n object: 'sys_user',\n template: 'default',\n kind: 'slotted',\n isDefault: true,\n\n regions: [],\n\n slots: {\n // ── Alert banners ─────────────────────────────────────────────\n // Conditional notices rendered between the page header and the\n // highlight strip. The unverified-email banner only shows for the\n // current user viewing their own profile (admins looking at other\n // users see nothing — they can use Setup actions instead).\n alerts: [\n {\n type: 'record:alert',\n properties: {\n severity: 'warning',\n icon: 'mail',\n // Inline-i18n object labels: the renderer resolves them with\n // pickLocalized (exact → base → default → en → first).\n title: {\n en: 'Email not verified',\n 'zh-CN': '邮箱未验证',\n 'ja-JP': 'メールが未認証です',\n 'es-ES': 'Correo no verificado',\n },\n body: {\n en: 'Verify your email to receive password resets and important system notifications.',\n 'zh-CN': '验证你的邮箱以接收密码重置和重要的系统通知。',\n 'ja-JP': 'パスワードリセットや重要なシステム通知を受け取るには、メールアドレスを認証してください。',\n 'es-ES': 'Verifica tu correo para recibir restablecimientos de contraseña y notificaciones importantes del sistema.',\n },\n visible: 'record.id == ctx.user.id && record.email_verified == false',\n dismissible: false,\n action: {\n actionName: 'resend_verification_email',\n label: {\n en: 'Resend verification email',\n 'zh-CN': '重新发送验证邮件',\n 'ja-JP': '認証メールを再送信',\n 'es-ES': 'Reenviar correo de verificación',\n },\n },\n },\n },\n ],\n\n // ── Highlight chips above the fold ────────────────────────────\n highlights: {\n type: 'record:highlights',\n properties: {\n fields: ['email', 'email_verified', 'two_factor_enabled', 'role'],\n },\n },\n\n // ── Body / details grid ───────────────────────────────────────\n details: {\n type: 'record:details',\n properties: {\n hideFields: [\n 'id',\n 'banned',\n 'ban_reason',\n 'ban_expires',\n // already promoted to highlights:\n 'email',\n 'email_verified',\n 'two_factor_enabled',\n 'role',\n ],\n sections: [\n {\n label: { en: 'Identity', 'zh-CN': '身份', 'ja-JP': 'アイデンティティ', 'es-ES': 'Identidad' },\n fields: ['name', 'image'],\n },\n {\n label: { en: 'Audit', 'zh-CN': '审计', 'ja-JP': '監査', 'es-ES': 'Auditoría' },\n fields: ['created_at', 'updated_at'],\n },\n ],\n },\n },\n\n // ── Tabs: curated related lists ───────────────────────────────\n // Only the 4 lists that are semantically about THIS user account.\n // Everything else (sys_position created_by, sys_email_template\n // updated_by, …) is incidental authorship metadata and would only\n // create noise.\n tabs: {\n type: 'page:tabs',\n properties: {\n type: 'line',\n position: 'top',\n items: [\n {\n label: { en: 'Positions', 'zh-CN': '岗位', 'ja-JP': 'ポジション', 'es-ES': 'Puestos' },\n icon: 'shield-check',\n children: [\n {\n // [ADR-0090 D3] Position assignments (岗位分派) — pure SDUI:\n // the Add picker creates sys_user_position rows storing the\n // position's MACHINE NAME (valueField: 'name'), and every\n // server-side rule (the D12 delegated-admin gate, audience-\n // anchor rejection) surfaces its error in the dialog.\n type: 'record:related_list',\n properties: {\n objectName: 'sys_user_position',\n relationshipField: 'user_id',\n columns: ['position', 'business_unit_id', 'granted_by', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Positions', 'zh-CN': '岗位', 'ja-JP': 'ポジション', 'es-ES': 'Puestos' },\n add: {\n picker: {\n object: 'sys_position',\n valueField: 'name',\n labelField: 'label',\n },\n linkField: 'position',\n label: {\n en: 'Assign position',\n 'zh-CN': '分配岗位',\n 'ja-JP': 'ポジションを割り当て',\n 'es-ES': 'Asignar puesto',\n },\n },\n },\n },\n ],\n },\n {\n label: { en: 'Sessions', 'zh-CN': '会话', 'ja-JP': 'セッション', 'es-ES': 'Sesiones' },\n icon: 'monitor',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_session',\n relationshipField: 'user_id',\n columns: ['user_agent', 'ip_address', 'created_at', 'expires_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Sessions', 'zh-CN': '会话', 'ja-JP': 'セッション', 'es-ES': 'Sesiones' },\n },\n },\n ],\n },\n {\n label: { en: 'Linked Accounts', 'zh-CN': '关联账号', 'ja-JP': '連携アカウント', 'es-ES': 'Cuentas vinculadas' },\n icon: 'link',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_account',\n relationshipField: 'user_id',\n columns: ['provider_id', 'account_id', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Linked Accounts', 'zh-CN': '关联账号', 'ja-JP': '連携アカウント', 'es-ES': 'Cuentas vinculadas' },\n },\n },\n ],\n },\n {\n label: { en: 'Organizations', 'zh-CN': '组织', 'ja-JP': '組織', 'es-ES': 'Organizaciones' },\n icon: 'building-2',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_member',\n relationshipField: 'user_id',\n columns: ['organization_id', 'role', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Organizations', 'zh-CN': '组织', 'ja-JP': '組織', 'es-ES': 'Organizaciones' },\n },\n },\n ],\n },\n {\n label: { en: 'OAuth Apps', 'zh-CN': 'OAuth 应用', 'ja-JP': 'OAuth アプリ', 'es-ES': 'Aplicaciones OAuth' },\n icon: 'key-square',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_oauth_application',\n relationshipField: 'user_id',\n columns: ['name', 'client_id', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'OAuth Apps', 'zh-CN': 'OAuth 应用', 'ja-JP': 'OAuth アプリ', 'es-ES': 'Aplicaciones OAuth' },\n },\n },\n ],\n },\n // ── Security ──────────────────────────────────────────────\n // Grouped self-service security controls. Each `record:quick_actions`\n // pulls its actions by name from the sys_user object metadata\n // (DRY — definitions stay on the object) and filters by\n // `location: 'record_section'` so they only render here, not\n // in the global header row.\n {\n label: { en: 'Security', 'zh-CN': '安全', 'ja-JP': 'セキュリティ', 'es-ES': 'Seguridad' },\n icon: 'shield',\n children: [\n {\n type: 'element:text',\n properties: {\n variant: 'subheading',\n content: {\n en: 'Password & Sign-in',\n 'zh-CN': '密码与登录',\n 'ja-JP': 'パスワードとサインイン',\n 'es-ES': 'Contraseña e inicio de sesión',\n },\n },\n },\n {\n type: 'element:text',\n properties: {\n variant: 'caption',\n content: {\n en: 'Change your password or the email address associated with this account.',\n 'zh-CN': '修改密码或此账号绑定的邮箱地址。',\n 'ja-JP': 'パスワード、またはこのアカウントに関連付けられたメールアドレスを変更します。',\n 'es-ES': 'Cambia tu contraseña o la dirección de correo asociada a esta cuenta.',\n },\n },\n },\n {\n type: 'record:quick_actions',\n properties: {\n location: 'record_section',\n align: 'start',\n actionNames: ['change_my_password', 'change_my_email'],\n },\n },\n { type: 'element:divider' },\n {\n type: 'element:text',\n properties: {\n variant: 'subheading',\n content: {\n en: 'Two-Factor Authentication',\n 'zh-CN': '两步验证',\n 'ja-JP': '二要素認証',\n 'es-ES': 'Autenticación de dos factores',\n },\n },\n },\n {\n type: 'element:text',\n properties: {\n variant: 'caption',\n content: {\n en: 'Add a second layer of security using a TOTP authenticator app. Backup codes let you sign in if you lose your device.',\n 'zh-CN': '使用 TOTP 验证器应用添加第二层安全防护。备用验证码可在设备丢失时用于登录。',\n 'ja-JP': 'TOTP 認証アプリでセキュリティをもう一段強化します。バックアップコードがあれば、デバイスを紛失してもサインインできます。',\n 'es-ES': 'Añade una segunda capa de seguridad con una app de autenticación TOTP. Los códigos de respaldo te permiten iniciar sesión si pierdes tu dispositivo.',\n },\n },\n },\n {\n type: 'record:quick_actions',\n properties: {\n location: 'record_section',\n align: 'start',\n actionNames: ['enable_two_factor', 'disable_two_factor', 'generate_backup_codes'],\n },\n },\n { type: 'element:divider' },\n {\n type: 'element:text',\n properties: {\n variant: 'subheading',\n content: {\n en: 'Email Verification',\n 'zh-CN': '邮箱验证',\n 'ja-JP': 'メール認証',\n 'es-ES': 'Verificación de correo',\n },\n },\n },\n {\n type: 'element:text',\n properties: {\n variant: 'caption',\n content: {\n en: 'Verify your email so password resets and notifications reach you. The button appears only while verification is pending.',\n 'zh-CN': '验证你的邮箱,以便接收密码重置和系统通知。按钮仅在邮箱待验证时显示。',\n 'ja-JP': 'パスワードリセットや通知を受け取れるよう、メールアドレスを認証してください。ボタンは未認証の間のみ表示されます。',\n 'es-ES': 'Verifica tu correo para recibir restablecimientos de contraseña y notificaciones. El botón solo aparece mientras la verificación está pendiente.',\n },\n },\n },\n {\n type: 'record:quick_actions',\n properties: {\n location: 'record_section',\n align: 'start',\n actionNames: ['resend_verification_email'],\n },\n },\n { type: 'element:divider' },\n {\n type: 'element:text',\n properties: {\n variant: 'subheading',\n content: {\n en: 'Danger Zone',\n 'zh-CN': '危险操作',\n 'ja-JP': '危険な操作',\n 'es-ES': 'Zona de peligro',\n },\n },\n className: 'text-destructive',\n },\n {\n type: 'element:text',\n properties: {\n variant: 'caption',\n content: {\n en: 'Permanent. Once deleted, your account cannot be recovered.',\n 'zh-CN': '此操作不可逆,账号一经删除将无法恢复。',\n 'ja-JP': 'この操作は取り消せません。削除されたアカウントは復元できません。',\n 'es-ES': 'Permanente. Una vez eliminada, tu cuenta no se puede recuperar.',\n },\n },\n },\n {\n type: 'record:quick_actions',\n properties: {\n location: 'record_section',\n align: 'start',\n actionNames: ['delete_my_account'],\n },\n },\n ],\n },\n // ── API Keys ──────────────────────────────────────────────\n // Programmatic credentials issued for this user. Filtered by\n // user_id FK; the sys_api_key object's own list-item actions\n // (revoke / restore) handle row operations.\n {\n label: { en: 'API Keys', 'zh-CN': 'API 密钥', 'ja-JP': 'API キー', 'es-ES': 'Claves de API' },\n icon: 'key-round',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_api_key',\n relationshipField: 'user_id',\n columns: ['name', 'prefix', 'expires_at', 'revoked', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'API Keys', 'zh-CN': 'API 密钥', 'ja-JP': 'API キー', 'es-ES': 'Claves de API' },\n },\n },\n ],\n },\n ],\n },\n },\n\n // ── Suppress the Discussion / Chatter thread ──────────────────\n discussion: [],\n },\n};\n","// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Page } from '@objectstack/spec/ui';\n\n/**\n * sys_position — Record Detail Page (slotted, default for ALL sys_position\n * records)\n *\n * **Audience**: admins managing capability distribution from Setup.\n *\n * A position (岗位, ADR-0090 D3) is the flat distribution group: users hold\n * it (`sys_user_position`), and it binds permission sets\n * (`sys_position_permission_set`). This page makes both edges manageable\n * as PURE SDUI — two `record:related_list` tabs with Add pickers; no\n * bespoke React:\n *\n * - **Holders** — who holds this position. `sys_user_position.position`\n * stores the position's MACHINE NAME, so the list keys on\n * `relationshipValueField: 'name'` (the generic name-keyed-junction\n * affordance this page motivated). Assigning here inserts an ordinary\n * assignment row; the ADR-0090 D12 delegated-admin gate governs the\n * write and its denial reason surfaces in the Add dialog. The\n * `business_unit_id` column is the assignment-level BU anchor\n * (ADR-0090 Addendum); `valid_from`/`valid_until` columns join it when\n * ADR-0091 L1 lands.\n * - **Permission Sets** — what the position distributes\n * (`sys_position_permission_set`, ordinary id-keyed junction). Binding\n * is guarded by BOTH the audience-anchor gate (D5/D9 — high-privilege\n * sets never bind to everyone/guest) and the D12 gate.\n *\n * Header/actions fall through to the synthesizer, so the object's declared\n * row actions (activate/deactivate/clone/set-default) keep working.\n */\nexport const SysPositionDetailPage: Page = {\n name: 'sys_position_detail',\n label: 'Position',\n type: 'record',\n object: 'sys_position',\n template: 'default',\n kind: 'slotted',\n isDefault: true,\n\n regions: [],\n\n slots: {\n tabs: {\n type: 'page:tabs',\n properties: {\n type: 'line',\n position: 'top',\n items: [\n {\n label: { en: 'Holders', 'zh-CN': '任职人员', 'ja-JP': '在任者', 'es-ES': 'Titulares' },\n icon: 'users',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_user_position',\n relationshipField: 'position',\n relationshipValueField: 'name',\n columns: ['user_id', 'business_unit_id', 'granted_by', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Holders', 'zh-CN': '任职人员', 'ja-JP': '在任者', 'es-ES': 'Titulares' },\n add: {\n picker: {\n object: 'sys_user',\n labelField: 'name',\n },\n linkField: 'user_id',\n label: { en: 'Assign user', 'zh-CN': '分配用户', 'ja-JP': 'ユーザーを割り当て', 'es-ES': 'Asignar usuario' },\n },\n },\n },\n ],\n },\n {\n label: { en: 'Permission Sets', 'zh-CN': '权限集', 'ja-JP': '権限セット', 'es-ES': 'Conjuntos de permisos' },\n icon: 'lock',\n children: [\n {\n type: 'record:related_list',\n properties: {\n objectName: 'sys_position_permission_set',\n relationshipField: 'position_id',\n columns: ['permission_set_id', 'created_at'],\n sort: [{ field: 'created_at', order: 'desc' }],\n limit: 25,\n showViewAll: true,\n title: { en: 'Permission Sets', 'zh-CN': '权限集', 'ja-JP': '権限セット', 'es-ES': 'Conjuntos de permisos' },\n add: {\n picker: {\n object: 'sys_permission_set',\n labelField: 'label',\n },\n linkField: 'permission_set_id',\n label: { en: 'Bind permission set', 'zh-CN': '绑定权限集', 'ja-JP': '権限セットをバインド', 'es-ES': 'Vincular conjunto de permisos' },\n },\n },\n },\n ],\n },\n ],\n },\n },\n\n // No Chatter feed on an RBAC primitive.\n discussion: [],\n },\n};\n"]}
|