@object-ui/i18n 13.1.0 → 14.0.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/CHANGELOG.md CHANGED
@@ -1,5 +1,81 @@
1
1
  # @object-ui/i18n
2
2
 
3
+ ## 14.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - c70bca7: fix(console-ai): Live Canvas is a full-screen, opt-in preview on mobile — not a broken split (#2481)
8
+
9
+ On a phone the beside-chat Live Canvas split overflowed the viewport (the chat
10
+ column's fixed min-width plus the preview exceeded the screen, and the resize
11
+ handle is desktop-only, so it was stuck clipped). Under `md` the canvas is now:
12
+
13
+ - **Full-width chat, no split** — the build streams in the chat as before.
14
+ - **Opt-in + full-screen** — when the preview is available a floating "Preview
15
+ app" pill appears; tapping it (or a Preview button on a draft card) takes the
16
+ canvas full-screen over the chat. Closing returns to the chat with the
17
+ preview one tap away. The auto-drafted canvas never covers the streaming
18
+ chat unprompted.
19
+
20
+ Desktop is unchanged (the resizable beside-chat split). Adds the
21
+ `console.ai.previewApp` string (en/zh).
22
+
23
+ - 05e56ca: 导出/导入模板的下载文件名与内容本地化。
24
+
25
+ **导出文件名**:CSV/Excel/JSON 导出下载不再是 `<对象名>.<扩展名>`(如 `contracts.csv`),改为「对象显示名-视图名-时间戳.扩展名」(如 `任务-In Progress-20260714-153045.xlsx`);`exportOptions.fileNamePrefix` 配置仍优先(且作为完整前缀,不再追加视图名)。视图名与对象名重复时自动省略;`@object-ui/core` 新增 `buildExportFileName(ext, { prefix, label, objectName, viewLabel }, now?)` 与 `sanitizeFileNameBase(raw)`,ObjectGrid 与 ListView 的所有导出路径(服务端流式与前端兜底)统一走它。app-shell/plugin-view 的 ObjectView 现将当前视图的显示标签写进传给 ListView 的 schema(`label`),使导出文件名能区分同一对象的不同保存视图。
26
+
27
+ **导入模板**:「下载模板」修复两处英文漏出——示例行的 select/多选取值改为优先取选项**显示标签**(如 `准备中`)而非 ASCII slug(`prepare`,服务端导入两者都接受);模板文件名本地化为 `{{object}}-导入模板.csv`(新增 i18n key `grid.import.templateFileName`,英文回退 `{{object}}-import-template.csv`)。
28
+
29
+ - 5971cc4: i18n: translate the Profile page, honor inline i18n label objects under bare
30
+ base-language codes, and localize managed-by badges / record quick actions.
31
+
32
+ - `pickLocalized` now upgrades a bare base language (`zh`) to any
33
+ region-qualified key sharing the base (`zh-CN`) — runtime language is
34
+ normalized to the base code while metadata authors write full BCP-47 tags,
35
+ so inline `{ en, 'zh-CN', ... }` label objects previously fell back to
36
+ English.
37
+ - ProfilePage (`account:profile_card` / `/system/profile`): every hardcoded
38
+ string — page title/subtitle, avatar Upload/Replace/Remove, Personal
39
+ Information card, Change/Set Password card — now goes through
40
+ `useObjectTranslation()` with `profile.*` keys (new namespace in all ten
41
+ locale bundles); the lazy-load fallback reuses `common.loading`.
42
+ - `ManagedByBadge` chips/tooltips (Config/System/Append-only/Identity) now
43
+ resolve through new `managedByBadge.*` keys with `{{provider}}`
44
+ interpolation.
45
+ - `record:quick_actions` resolves action labels via the
46
+ `objects.{object}._actions.{action}.label` convention plus `pickLocalized`,
47
+ so object action buttons (Change Password, Enable 2FA, …) localize.
48
+ - `record:details` / `record:related_list` / `record:alert` / `ObjectTree`
49
+ pass inline label objects through `pickLocalized`.
50
+ - Locale bundles: added `managedByBadge` namespace to all ten locales and
51
+ backfilled `list.inlineEditShort` / `inlineEditLabel` /
52
+ `recordEditingTitle` for ja/es/ko/de/fr/pt/ru/ar.
53
+
54
+ ## 13.2.0
55
+
56
+ ### Patch Changes
57
+
58
+ - 53c40c2: feat: identity import — the stock ImportWizard now drives sys_user bulk import (framework#2782)
59
+
60
+ The Users list gets an Import entry for platform admins (gated on
61
+ `features.admin` from `/api/v1/auth/config` plus workspace-admin), wired to
62
+ the dedicated `POST /api/v1/auth/admin/import-users` pipeline instead of the
63
+ generic data import (which would bypass better-auth hashing and produce
64
+ accounts that can never sign in).
65
+
66
+ - **plugin-grid**: two generic, backend-agnostic ImportWizard slots —
67
+ `extraOptionsContent` (host-injected options on the preview step) and
68
+ `renderResultExtra` (host-rendered content on the result step).
69
+ - **app-shell**: identity import dataSource adapter — splits files into the
70
+ endpoint's ≤500-row batches (idempotent upsert makes re-runs safe), injects
71
+ the selected password policy, renumbers per-batch results onto the whole
72
+ file, and enriches rows with their sign-in identity. Password policy panel
73
+ (`none` default / `invite` / `temporary`) and a one-shot temporary-password
74
+ reveal with CSV download (client memory only — nothing is persisted).
75
+ Async-job/undo surfaces are hidden for identity import by design.
76
+ - **auth**: `AuthPublicConfig.features.admin` typing.
77
+ - **i18n**: en/zh strings for the identity import panels.
78
+
3
79
  ## 13.1.0
4
80
 
5
81
  ## 13.0.0
@@ -280,6 +280,31 @@ declare const ar: {
280
280
  addGroup: string;
281
281
  collapsedByDefault: string;
282
282
  removeGroup: string;
283
+ inlineEditShort: string;
284
+ inlineEditLabel: string;
285
+ recordEditingTitle: string;
286
+ };
287
+ managedByBadge: {
288
+ config: {
289
+ short: string;
290
+ title: string;
291
+ body: string;
292
+ };
293
+ system: {
294
+ short: string;
295
+ title: string;
296
+ body: string;
297
+ };
298
+ appendOnly: {
299
+ short: string;
300
+ title: string;
301
+ body: string;
302
+ };
303
+ betterAuth: {
304
+ short: string;
305
+ title: string;
306
+ body: string;
307
+ };
283
308
  };
284
309
  kanban: {
285
310
  addCard: string;
@@ -1222,6 +1247,43 @@ declare const ar: {
1222
1247
  tenantHostHint: string;
1223
1248
  };
1224
1249
  };
1250
+ profile: {
1251
+ title: string;
1252
+ subtitle: string;
1253
+ saving: string;
1254
+ avatar: {
1255
+ upload: string;
1256
+ replace: string;
1257
+ remove: string;
1258
+ };
1259
+ info: {
1260
+ title: string;
1261
+ description: string;
1262
+ saved: string;
1263
+ name: string;
1264
+ email: string;
1265
+ emailImmutable: string;
1266
+ role: string;
1267
+ save: string;
1268
+ };
1269
+ password: {
1270
+ changeTitle: string;
1271
+ setTitle: string;
1272
+ changeDescription: string;
1273
+ setDescription: string;
1274
+ current: string;
1275
+ new: string;
1276
+ password: string;
1277
+ confirm: string;
1278
+ tooShort: string;
1279
+ mismatch: string;
1280
+ enterCurrent: string;
1281
+ changed: string;
1282
+ localSet: string;
1283
+ changeAction: string;
1284
+ setAction: string;
1285
+ };
1286
+ };
1225
1287
  errors: {
1226
1288
  networkError: string;
1227
1289
  serverError: string;
@@ -280,6 +280,31 @@ const ar = {
280
280
  addGroup: "إضافة حقل مجموعة",
281
281
  collapsedByDefault: "مطوي افتراضياً",
282
282
  removeGroup: "إزالة",
283
+ inlineEditShort: "تحرير مضمّن",
284
+ inlineEditLabel: "حرّر السجلات مباشرة (انقر خلية للتحرير)",
285
+ recordEditingTitle: "تحرير السجلات",
286
+ },
287
+ managedByBadge: {
288
+ config: {
289
+ short: "إعدادات المسؤول",
290
+ title: "تكوين المسؤول",
291
+ body: "تحدد هذه الصفوف سلوك المنصة أثناء التشغيل. أنشئها هنا؛ وتُخزَّن بيانات التشغيل الناتجة في جدول منفصل.",
292
+ },
293
+ system: {
294
+ short: "يديره النظام",
295
+ title: "تديره المنصة",
296
+ body: "تُنشأ الصفوف تلقائيًا عند تشغيل الإجراءات على السجل المصدر. القائمة أدناه واجهة مراقبة للقراءة فقط — وتوجد إجراءات مستوى الصف (اعتماد، استرجاع، إعادة إرسال، …) على كل صف.",
297
+ },
298
+ appendOnly: {
299
+ short: "للقراءة فقط · سجل التدقيق",
300
+ title: "سجل تاريخي للقراءة فقط",
301
+ body: "سجل تدقيق غير قابل للتغيير. لا يمكن إنشاء الصفوف أو تعديلها أو حذفها من الواجهة — تكتبها المنصة عند وقوع الأحداث. استخدم التصدير للتنزيل لمراجعة الامتثال.",
302
+ },
303
+ betterAuth: {
304
+ short: "الهوية",
305
+ title: "يديره مزوّد الهوية",
306
+ body: "مخطط هذا الكائن مملوك لـ {{provider}}. التعديلات المباشرة تتجاوز تجزئة كلمات المرور والتحقق من الجلسات وفحوصات المصادقة الثنائية وخطافات التدقيق. أدر هذه السجلات عبر تدفقات تسجيل الدخول والدعوة والأمان لدى مزوّد المصادقة.",
307
+ },
283
308
  },
284
309
  kanban: {
285
310
  addCard: "إضافة بطاقة",
@@ -1222,6 +1247,43 @@ const ar = {
1222
1247
  tenantHostHint: "تسجل الدخول إلى مساحة العمل هذه",
1223
1248
  },
1224
1249
  },
1250
+ profile: {
1251
+ title: "الملف الشخصي",
1252
+ subtitle: "إدارة إعدادات حسابك",
1253
+ saving: "جارٍ الحفظ…",
1254
+ avatar: {
1255
+ upload: "رفع",
1256
+ replace: "استبدال",
1257
+ remove: "إزالة",
1258
+ },
1259
+ info: {
1260
+ title: "المعلومات الشخصية",
1261
+ description: "قم بتحديث اسمك وعرض تفاصيل حسابك",
1262
+ saved: "تم تحديث الملف الشخصي بنجاح.",
1263
+ name: "الاسم",
1264
+ email: "البريد الإلكتروني",
1265
+ emailImmutable: "لا يمكن تغيير البريد الإلكتروني.",
1266
+ role: "الدور",
1267
+ save: "حفظ التغييرات",
1268
+ },
1269
+ password: {
1270
+ changeTitle: "تغيير كلمة المرور",
1271
+ setTitle: "تعيين كلمة مرور محلية",
1272
+ changeDescription: "قم بتحديث كلمة المرور التي تستخدمها لتسجيل الدخول إلى هذه البيئة.",
1273
+ setDescription: "لقد سجّلت الدخول عبر تسجيل الدخول الموحّد. عيّن كلمة مرور محلية لتتمكن أيضاً من تسجيل الدخول بالبريد الإلكتروني وكلمة المرور في هذه البيئة.",
1274
+ current: "كلمة المرور الحالية",
1275
+ new: "كلمة المرور الجديدة",
1276
+ password: "كلمة المرور",
1277
+ confirm: "تأكيد كلمة المرور",
1278
+ tooShort: "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل",
1279
+ mismatch: "كلمتا المرور غير متطابقتين",
1280
+ enterCurrent: "أدخل كلمة المرور الحالية",
1281
+ changed: "تم تغيير كلمة المرور.",
1282
+ localSet: "تم تعيين كلمة المرور المحلية. يمكنك الآن تسجيل الدخول بالبريد الإلكتروني وكلمة المرور في هذه البيئة.",
1283
+ changeAction: "تغيير كلمة المرور",
1284
+ setAction: "تعيين كلمة المرور",
1285
+ },
1286
+ },
1225
1287
  errors: {
1226
1288
  networkError: "خطأ في الشبكة. يرجى التحقق من اتصالك.",
1227
1289
  serverError: "خطأ في الخادم. يرجى المحاولة مرة أخرى لاحقاً.",
@@ -280,6 +280,31 @@ declare const de: {
280
280
  addGroup: string;
281
281
  collapsedByDefault: string;
282
282
  removeGroup: string;
283
+ inlineEditShort: string;
284
+ inlineEditLabel: string;
285
+ recordEditingTitle: string;
286
+ };
287
+ managedByBadge: {
288
+ config: {
289
+ short: string;
290
+ title: string;
291
+ body: string;
292
+ };
293
+ system: {
294
+ short: string;
295
+ title: string;
296
+ body: string;
297
+ };
298
+ appendOnly: {
299
+ short: string;
300
+ title: string;
301
+ body: string;
302
+ };
303
+ betterAuth: {
304
+ short: string;
305
+ title: string;
306
+ body: string;
307
+ };
283
308
  };
284
309
  kanban: {
285
310
  addCard: string;
@@ -1222,6 +1247,43 @@ declare const de: {
1222
1247
  tenantHostHint: string;
1223
1248
  };
1224
1249
  };
1250
+ profile: {
1251
+ title: string;
1252
+ subtitle: string;
1253
+ saving: string;
1254
+ avatar: {
1255
+ upload: string;
1256
+ replace: string;
1257
+ remove: string;
1258
+ };
1259
+ info: {
1260
+ title: string;
1261
+ description: string;
1262
+ saved: string;
1263
+ name: string;
1264
+ email: string;
1265
+ emailImmutable: string;
1266
+ role: string;
1267
+ save: string;
1268
+ };
1269
+ password: {
1270
+ changeTitle: string;
1271
+ setTitle: string;
1272
+ changeDescription: string;
1273
+ setDescription: string;
1274
+ current: string;
1275
+ new: string;
1276
+ password: string;
1277
+ confirm: string;
1278
+ tooShort: string;
1279
+ mismatch: string;
1280
+ enterCurrent: string;
1281
+ changed: string;
1282
+ localSet: string;
1283
+ changeAction: string;
1284
+ setAction: string;
1285
+ };
1286
+ };
1225
1287
  errors: {
1226
1288
  networkError: string;
1227
1289
  serverError: string;
@@ -280,6 +280,31 @@ const de = {
280
280
  addGroup: "Gruppenfeld hinzufügen",
281
281
  collapsedByDefault: "Standardmäßig eingeklappt",
282
282
  removeGroup: "Entfernen",
283
+ inlineEditShort: "Inline bearbeiten",
284
+ inlineEditLabel: "Datensätze inline bearbeiten (Zelle anklicken zum Bearbeiten)",
285
+ recordEditingTitle: "Datensatzbearbeitung",
286
+ },
287
+ managedByBadge: {
288
+ config: {
289
+ short: "Admin-Konfiguration",
290
+ title: "Administrator-Konfiguration",
291
+ body: "Diese Zeilen definieren das Laufzeitverhalten der Plattform. Erstellen Sie sie hier; die erzeugten Laufzeitdaten liegen in einer separaten Tabelle.",
292
+ },
293
+ system: {
294
+ short: "Systemverwaltet",
295
+ title: "Von der Plattform verwaltet",
296
+ body: "Zeilen werden automatisch erstellt, wenn Aktionen auf dem Quelldatensatz ausgeführt werden. Die Liste ist eine schreibgeschützte Überwachungsansicht – Aktionen auf Zeilenebene (Genehmigen, Zurückrufen, Erneut senden, …) befinden sich an jeder Zeile.",
297
+ },
298
+ appendOnly: {
299
+ short: "Schreibgeschützt · Audit-Log",
300
+ title: "Schreibgeschützter Verlauf",
301
+ body: "Unveränderliches Audit-Log. Zeilen können in der UI nicht erstellt, bearbeitet oder gelöscht werden – die Plattform schreibt sie bei Ereignissen. Nutzen Sie Export für Compliance-Prüfungen.",
302
+ },
303
+ betterAuth: {
304
+ short: "Identität",
305
+ title: "Vom Identitätsanbieter verwaltet",
306
+ body: "Das Schema dieses Objekts gehört {{provider}}. Direkte Änderungen umgehen Passwort-Hashing, Sitzungsvalidierung, Zwei-Faktor-Prüfungen und Audit-Hooks. Verwalten Sie diese Datensätze über die Anmelde-, Einladungs- und Sicherheitsabläufe Ihres Authentifizierungsanbieters.",
307
+ },
283
308
  },
284
309
  kanban: {
285
310
  addCard: "Karte hinzufügen",
@@ -1222,6 +1247,43 @@ const de = {
1222
1247
  tenantHostHint: "Sie melden sich bei diesem Arbeitsbereich an",
1223
1248
  },
1224
1249
  },
1250
+ profile: {
1251
+ title: "Profil",
1252
+ subtitle: "Verwalten Sie Ihre Kontoeinstellungen",
1253
+ saving: "Speichern…",
1254
+ avatar: {
1255
+ upload: "Hochladen",
1256
+ replace: "Ersetzen",
1257
+ remove: "Entfernen",
1258
+ },
1259
+ info: {
1260
+ title: "Persönliche Informationen",
1261
+ description: "Aktualisieren Sie Ihren Namen und sehen Sie Ihre Kontodetails ein",
1262
+ saved: "Profil erfolgreich aktualisiert.",
1263
+ name: "Name",
1264
+ email: "E-Mail",
1265
+ emailImmutable: "Die E-Mail-Adresse kann nicht geändert werden.",
1266
+ role: "Rolle",
1267
+ save: "Änderungen speichern",
1268
+ },
1269
+ password: {
1270
+ changeTitle: "Passwort ändern",
1271
+ setTitle: "Lokales Passwort festlegen",
1272
+ changeDescription: "Aktualisieren Sie das Passwort, mit dem Sie sich in dieser Umgebung anmelden.",
1273
+ setDescription: "Sie haben sich per Single Sign-On angemeldet. Legen Sie ein lokales Passwort fest, um sich in dieser Umgebung auch mit E-Mail und Passwort anmelden zu können.",
1274
+ current: "Aktuelles Passwort",
1275
+ new: "Neues Passwort",
1276
+ password: "Passwort",
1277
+ confirm: "Passwort bestätigen",
1278
+ tooShort: "Das Passwort muss mindestens 8 Zeichen lang sein",
1279
+ mismatch: "Die Passwörter stimmen nicht überein",
1280
+ enterCurrent: "Geben Sie Ihr aktuelles Passwort ein",
1281
+ changed: "Passwort geändert.",
1282
+ localSet: "Lokales Passwort festgelegt. Sie können sich in dieser Umgebung jetzt auch mit E-Mail und Passwort anmelden.",
1283
+ changeAction: "Passwort ändern",
1284
+ setAction: "Passwort festlegen",
1285
+ },
1286
+ },
1225
1287
  errors: {
1226
1288
  networkError: "Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.",
1227
1289
  serverError: "Serverfehler. Bitte versuchen Sie es später erneut.",
@@ -330,6 +330,10 @@ declare const en: {
330
330
  readonly title: "No users yet";
331
331
  readonly message: "User accounts are provisioned by the authentication provider, not created here. Invite teammates to your organization and they appear automatically on first sign-in (SSO just-in-time provisioning). App end-users arrive when they sign up through your app.";
332
332
  };
333
+ readonly betterAuthTeam: {
334
+ readonly title: "No teams yet";
335
+ readonly message: "Teams group members within an organization. Create one with “Create Team”, or they arrive through your auth provider’s organization and SSO provisioning flows.";
336
+ };
333
337
  };
334
338
  readonly showAll: "Show all";
335
339
  readonly pullToRefresh: "Pull to refresh";
@@ -347,6 +351,28 @@ declare const en: {
347
351
  readonly inlineEditLabel: "Edit records inline (click a cell to edit)";
348
352
  readonly recordEditingTitle: "Record editing";
349
353
  };
354
+ readonly managedByBadge: {
355
+ readonly config: {
356
+ readonly short: "Admin config";
357
+ readonly title: "Administrator configuration";
358
+ readonly body: "These rows define how the platform behaves at runtime. Author them here; the runtime data they produce lives in a separate table.";
359
+ };
360
+ readonly system: {
361
+ readonly short: "System-managed";
362
+ readonly title: "Managed by the platform";
363
+ readonly body: "Rows here are created automatically when actions run on the source record. The list below is a read-only monitoring surface — row-level actions (Approve, Recall, Resend, …) live on each row.";
364
+ };
365
+ readonly appendOnly: {
366
+ readonly short: "Read-only · Audit log";
367
+ readonly title: "Read-only historical record";
368
+ readonly body: "Immutable audit log. Rows cannot be created, edited, or deleted from the UI — they're written by the platform when events occur. Use Export to download for compliance review.";
369
+ };
370
+ readonly betterAuth: {
371
+ readonly short: "Identity";
372
+ readonly title: "Managed by the identity provider";
373
+ readonly body: "This object's schema is owned by {{provider}}. Direct edits bypass password hashing, session validation, two-factor checks, and audit hooks. Manage these records through your authentication provider's sign-in, invitation, and security flows instead.";
374
+ };
375
+ };
350
376
  readonly kanban: {
351
377
  readonly addCard: "Add card";
352
378
  readonly addColumn: "Add column";
@@ -406,7 +432,7 @@ declare const en: {
406
432
  readonly row: {
407
433
  readonly expand: "Expand";
408
434
  readonly collapse: "Collapse";
409
- readonly locate: "Locate on timeline";
435
+ readonly open: "Open details";
410
436
  };
411
437
  readonly aria: {
412
438
  readonly taskList: "Task list";
@@ -422,6 +448,25 @@ declare const en: {
422
448
  readonly addSuccessor: "Add successor…";
423
449
  readonly removeDependency: "Remove dependency";
424
450
  readonly noCandidates: "No available tasks";
451
+ readonly searchTasks: "Search tasks…";
452
+ readonly qrcode: "Mobile QR code";
453
+ };
454
+ readonly qr: {
455
+ readonly title: "Open on mobile";
456
+ readonly hint: "Scan with a phone to open the details";
457
+ readonly copy: "Copy link";
458
+ readonly copied: "Copied";
459
+ readonly close: "Close";
460
+ };
461
+ readonly delete: {
462
+ readonly title: "Delete this task?";
463
+ readonly body: "\"{{title}}\" will be permanently removed. This action cannot be undone.";
464
+ readonly cancel: "Cancel";
465
+ readonly confirm: "Delete";
466
+ readonly deleting: "Deleting…";
467
+ };
468
+ readonly drawer: {
469
+ readonly fallbackTitle: "Task Details";
425
470
  };
426
471
  readonly linkType: {
427
472
  readonly fs: "Finish → Start";
@@ -443,6 +488,8 @@ declare const en: {
443
488
  };
444
489
  readonly readOnly: "Read-only";
445
490
  readonly readOnlyHint: "Editing is disabled for this view.";
491
+ readonly lockedHint: "No edit permission";
492
+ readonly writeFailed: "Save failed — the change was rolled back";
446
493
  };
447
494
  readonly view: {
448
495
  readonly editViewConfig: "Edit view config";
@@ -482,6 +529,7 @@ declare const en: {
482
529
  readonly saveChanges: "Save changes";
483
530
  readonly saving: "Saving…";
484
531
  readonly editFieldsInline: "Edit fields";
532
+ readonly editInlineHint: "Double-click to edit";
485
533
  readonly lockedByApproval: "Locked for approval";
486
534
  readonly lockedTooltip: "This record has a pending approval request; editing is locked";
487
535
  readonly cancelApproval: "Recall approval";
@@ -1194,6 +1242,7 @@ declare const en: {
1194
1242
  readonly seedWarn: "Published, but some sample data failed to load.";
1195
1243
  readonly openBuiltApp: "Open app";
1196
1244
  readonly previewDraft: "Preview";
1245
+ readonly previewApp: "Preview app";
1197
1246
  readonly resizeSplit: "Resize chat and preview";
1198
1247
  readonly hideChats: "Hide chats";
1199
1248
  readonly showChats: "Show chats";
@@ -1258,6 +1307,22 @@ declare const en: {
1258
1307
  readonly noAccessTitle: "Access denied";
1259
1308
  readonly noAccess: "You do not have permission to view this data.";
1260
1309
  };
1310
+ readonly identityImport: {
1311
+ readonly policyTitle: "Sign-in setup for imported users";
1312
+ readonly policy: {
1313
+ readonly none: "No password (recommended)";
1314
+ readonly invite: "Send invitations";
1315
+ readonly temporary: "Temporary passwords";
1316
+ };
1317
+ readonly policyHint: {
1318
+ readonly none: "Users first sign in with a phone OTP, magic link, or password-reset link, then set their own password.";
1319
+ readonly invite: "Each created user gets a set-your-password email (or an invitation SMS for phone-only rows). Requires a configured email/SMS service.";
1320
+ readonly temporary: "For deployments without email/SMS: each created user gets a one-time password, shown ONCE on the result screen. First sign-in forces a change.";
1321
+ };
1322
+ readonly passwordsNote: "Temporary passwords — shown once, never stored. Save them now; each user must change theirs at first sign-in.";
1323
+ readonly passwordsMore: "More entries omitted — use the download.";
1324
+ readonly passwordsDownload: "Download CSV";
1325
+ };
1261
1326
  readonly objectView: {
1262
1327
  readonly objectNotFound: "Object Not Found";
1263
1328
  readonly objectNotFoundDescription: "The object \"{{objectName}}\" does not exist in the current configuration.";
@@ -1486,6 +1551,7 @@ declare const en: {
1486
1551
  readonly errors: {
1487
1552
  readonly invalidCredentials: "Invalid email or password. Please try again.";
1488
1553
  readonly emailNotVerified: "Please verify your email address before signing in.";
1554
+ readonly oauthCallbackFailed: "Single sign-on could not be completed — the sign-in link expired or was already used. Please try again.";
1489
1555
  };
1490
1556
  };
1491
1557
  readonly register: {
@@ -1610,6 +1676,43 @@ declare const en: {
1610
1676
  readonly tenantHostHint: "You are signing in to this workspace";
1611
1677
  };
1612
1678
  };
1679
+ readonly profile: {
1680
+ readonly title: "Profile";
1681
+ readonly subtitle: "Manage your account settings";
1682
+ readonly saving: "Saving…";
1683
+ readonly avatar: {
1684
+ readonly upload: "Upload";
1685
+ readonly replace: "Replace";
1686
+ readonly remove: "Remove";
1687
+ };
1688
+ readonly info: {
1689
+ readonly title: "Personal Information";
1690
+ readonly description: "Update your name and view account details";
1691
+ readonly saved: "Profile updated successfully.";
1692
+ readonly name: "Name";
1693
+ readonly email: "Email";
1694
+ readonly emailImmutable: "Email cannot be changed.";
1695
+ readonly role: "Role";
1696
+ readonly save: "Save Changes";
1697
+ };
1698
+ readonly password: {
1699
+ readonly changeTitle: "Change Password";
1700
+ readonly setTitle: "Set Local Password";
1701
+ readonly changeDescription: "Update the password you use to sign in to this environment.";
1702
+ readonly setDescription: "You signed in via single sign-on. Set a local password to also sign in with email and password on this environment.";
1703
+ readonly current: "Current password";
1704
+ readonly new: "New password";
1705
+ readonly password: "Password";
1706
+ readonly confirm: "Confirm password";
1707
+ readonly tooShort: "Password must be at least 8 characters";
1708
+ readonly mismatch: "Passwords do not match";
1709
+ readonly enterCurrent: "Enter your current password";
1710
+ readonly changed: "Password changed.";
1711
+ readonly localSet: "Local password set. You can now sign in with email and password on this environment.";
1712
+ readonly changeAction: "Change password";
1713
+ readonly setAction: "Set password";
1714
+ };
1715
+ };
1613
1716
  readonly errors: {
1614
1717
  readonly networkError: "Network error. Please check your connection.";
1615
1718
  readonly serverError: "Server error. Please try again later.";
@@ -1935,6 +2038,8 @@ declare const en: {
1935
2038
  readonly deleteFailed: "Failed to delete {{label}}";
1936
2039
  readonly noRecordId: "No record ID provided";
1937
2040
  readonly deleteConfirm: "Are you sure you want to delete this record?";
2041
+ readonly resetPackageSetConfirm: string;
2042
+ readonly resetPackageSetSuccess: "Permission set reset to its shipped baseline";
1938
2043
  readonly bulkDeleteSuccess: "Deleted {{count}} {{label}} records";
1939
2044
  readonly bulkDeletePartial: "{{succeeded}} deleted, {{failed}} failed";
1940
2045
  };