@adminiumjs/i18n 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/dist/a11y-keys.d.ts +1 -1
  2. package/dist/a11y-keys.d.ts.map +1 -1
  3. package/dist/a11y-keys.js +219 -4
  4. package/dist/a11y-keys.js.map +1 -1
  5. package/dist/create-i18n.d.ts.map +1 -1
  6. package/dist/create-i18n.js +1 -0
  7. package/dist/create-i18n.js.map +1 -1
  8. package/dist/editing.d.ts +1 -1
  9. package/dist/editing.d.ts.map +1 -1
  10. package/dist/editing.js +2 -1
  11. package/dist/editing.js.map +1 -1
  12. package/dist/fallback.d.ts.map +1 -1
  13. package/dist/fallback.js +1 -0
  14. package/dist/fallback.js.map +1 -1
  15. package/dist/format/index.d.ts.map +1 -1
  16. package/dist/format/index.js +1 -0
  17. package/dist/format/index.js.map +1 -1
  18. package/dist/format-errors.d.ts.map +1 -1
  19. package/dist/format-errors.js +1 -0
  20. package/dist/format-errors.js.map +1 -1
  21. package/dist/icu-format.d.ts.map +1 -1
  22. package/dist/icu-format.js +1 -0
  23. package/dist/icu-format.js.map +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/keys.d.ts.map +1 -1
  28. package/dist/keys.js +1 -0
  29. package/dist/keys.js.map +1 -1
  30. package/dist/locales.d.ts +6 -2
  31. package/dist/locales.d.ts.map +1 -1
  32. package/dist/locales.js +7 -2
  33. package/dist/locales.js.map +1 -1
  34. package/dist/overrides.d.ts.map +1 -1
  35. package/dist/overrides.js +1 -0
  36. package/dist/overrides.js.map +1 -1
  37. package/dist/react.d.ts.map +1 -1
  38. package/dist/react.js +1 -0
  39. package/dist/react.js.map +1 -1
  40. package/dist/resources/ar-eg/common.d.ts +858 -5
  41. package/dist/resources/ar-eg/common.d.ts.map +1 -1
  42. package/dist/resources/ar-eg/common.js +882 -28
  43. package/dist/resources/ar-eg/common.js.map +1 -1
  44. package/dist/resources/ar-eg/errors.d.ts +1 -0
  45. package/dist/resources/ar-eg/errors.d.ts.map +1 -1
  46. package/dist/resources/ar-eg/errors.js +2 -0
  47. package/dist/resources/ar-eg/errors.js.map +1 -1
  48. package/dist/resources/ar-eg/generated.d.ts.map +1 -1
  49. package/dist/resources/ar-eg/generated.js +1 -0
  50. package/dist/resources/ar-eg/generated.js.map +1 -1
  51. package/dist/resources/ar-eg/studio.d.ts.map +1 -1
  52. package/dist/resources/ar-eg/studio.js +1 -0
  53. package/dist/resources/ar-eg/studio.js.map +1 -1
  54. package/dist/resources/ar-eg/ui.d.ts +9 -0
  55. package/dist/resources/ar-eg/ui.d.ts.map +1 -1
  56. package/dist/resources/ar-eg/ui.js +18 -8
  57. package/dist/resources/ar-eg/ui.js.map +1 -1
  58. package/dist/resources/cs-cz/common.d.ts +858 -5
  59. package/dist/resources/cs-cz/common.d.ts.map +1 -1
  60. package/dist/resources/cs-cz/common.js +882 -28
  61. package/dist/resources/cs-cz/common.js.map +1 -1
  62. package/dist/resources/cs-cz/errors.d.ts +1 -0
  63. package/dist/resources/cs-cz/errors.d.ts.map +1 -1
  64. package/dist/resources/cs-cz/errors.js +2 -0
  65. package/dist/resources/cs-cz/errors.js.map +1 -1
  66. package/dist/resources/cs-cz/generated.d.ts.map +1 -1
  67. package/dist/resources/cs-cz/generated.js +1 -0
  68. package/dist/resources/cs-cz/generated.js.map +1 -1
  69. package/dist/resources/cs-cz/studio.d.ts.map +1 -1
  70. package/dist/resources/cs-cz/studio.js +1 -0
  71. package/dist/resources/cs-cz/studio.js.map +1 -1
  72. package/dist/resources/cs-cz/ui.d.ts +9 -0
  73. package/dist/resources/cs-cz/ui.d.ts.map +1 -1
  74. package/dist/resources/cs-cz/ui.js +18 -8
  75. package/dist/resources/cs-cz/ui.js.map +1 -1
  76. package/dist/resources/da-dk/common.d.ts +858 -5
  77. package/dist/resources/da-dk/common.d.ts.map +1 -1
  78. package/dist/resources/da-dk/common.js +882 -28
  79. package/dist/resources/da-dk/common.js.map +1 -1
  80. package/dist/resources/da-dk/errors.d.ts +1 -0
  81. package/dist/resources/da-dk/errors.d.ts.map +1 -1
  82. package/dist/resources/da-dk/errors.js +2 -0
  83. package/dist/resources/da-dk/errors.js.map +1 -1
  84. package/dist/resources/da-dk/generated.d.ts.map +1 -1
  85. package/dist/resources/da-dk/generated.js +1 -0
  86. package/dist/resources/da-dk/generated.js.map +1 -1
  87. package/dist/resources/da-dk/studio.d.ts.map +1 -1
  88. package/dist/resources/da-dk/studio.js +1 -0
  89. package/dist/resources/da-dk/studio.js.map +1 -1
  90. package/dist/resources/da-dk/ui.d.ts +9 -0
  91. package/dist/resources/da-dk/ui.d.ts.map +1 -1
  92. package/dist/resources/da-dk/ui.js +18 -8
  93. package/dist/resources/da-dk/ui.js.map +1 -1
  94. package/dist/resources/de-de/common.d.ts +858 -5
  95. package/dist/resources/de-de/common.d.ts.map +1 -1
  96. package/dist/resources/de-de/common.js +882 -28
  97. package/dist/resources/de-de/common.js.map +1 -1
  98. package/dist/resources/de-de/errors.d.ts +1 -0
  99. package/dist/resources/de-de/errors.d.ts.map +1 -1
  100. package/dist/resources/de-de/errors.js +2 -0
  101. package/dist/resources/de-de/errors.js.map +1 -1
  102. package/dist/resources/de-de/generated.d.ts.map +1 -1
  103. package/dist/resources/de-de/generated.js +1 -0
  104. package/dist/resources/de-de/generated.js.map +1 -1
  105. package/dist/resources/de-de/studio.d.ts.map +1 -1
  106. package/dist/resources/de-de/studio.js +1 -0
  107. package/dist/resources/de-de/studio.js.map +1 -1
  108. package/dist/resources/de-de/ui.d.ts +9 -0
  109. package/dist/resources/de-de/ui.d.ts.map +1 -1
  110. package/dist/resources/de-de/ui.js +18 -8
  111. package/dist/resources/de-de/ui.js.map +1 -1
  112. package/dist/resources/en-us/common.d.ts +858 -5
  113. package/dist/resources/en-us/common.d.ts.map +1 -1
  114. package/dist/resources/en-us/common.js +882 -28
  115. package/dist/resources/en-us/common.js.map +1 -1
  116. package/dist/resources/en-us/errors.d.ts +1 -0
  117. package/dist/resources/en-us/errors.d.ts.map +1 -1
  118. package/dist/resources/en-us/errors.js +2 -0
  119. package/dist/resources/en-us/errors.js.map +1 -1
  120. package/dist/resources/en-us/generated.d.ts.map +1 -1
  121. package/dist/resources/en-us/generated.js +1 -0
  122. package/dist/resources/en-us/generated.js.map +1 -1
  123. package/dist/resources/en-us/studio.d.ts.map +1 -1
  124. package/dist/resources/en-us/studio.js +1 -0
  125. package/dist/resources/en-us/studio.js.map +1 -1
  126. package/dist/resources/en-us/ui.d.ts +9 -0
  127. package/dist/resources/en-us/ui.d.ts.map +1 -1
  128. package/dist/resources/en-us/ui.js +18 -8
  129. package/dist/resources/en-us/ui.js.map +1 -1
  130. package/dist/resources/fr-fr/common.d.ts +858 -5
  131. package/dist/resources/fr-fr/common.d.ts.map +1 -1
  132. package/dist/resources/fr-fr/common.js +882 -28
  133. package/dist/resources/fr-fr/common.js.map +1 -1
  134. package/dist/resources/fr-fr/errors.d.ts +1 -0
  135. package/dist/resources/fr-fr/errors.d.ts.map +1 -1
  136. package/dist/resources/fr-fr/errors.js +2 -0
  137. package/dist/resources/fr-fr/errors.js.map +1 -1
  138. package/dist/resources/fr-fr/generated.d.ts.map +1 -1
  139. package/dist/resources/fr-fr/generated.js +1 -0
  140. package/dist/resources/fr-fr/generated.js.map +1 -1
  141. package/dist/resources/fr-fr/studio.d.ts.map +1 -1
  142. package/dist/resources/fr-fr/studio.js +1 -0
  143. package/dist/resources/fr-fr/studio.js.map +1 -1
  144. package/dist/resources/fr-fr/ui.d.ts +9 -0
  145. package/dist/resources/fr-fr/ui.d.ts.map +1 -1
  146. package/dist/resources/fr-fr/ui.js +18 -8
  147. package/dist/resources/fr-fr/ui.js.map +1 -1
  148. package/dist/resources/index.d.ts.map +1 -1
  149. package/dist/resources/index.js +1 -0
  150. package/dist/resources/index.js.map +1 -1
  151. package/dist/resources/lazy.d.ts.map +1 -1
  152. package/dist/resources/lazy.js.map +1 -1
  153. package/dist/resources/zh-cn/common.d.ts +858 -5
  154. package/dist/resources/zh-cn/common.d.ts.map +1 -1
  155. package/dist/resources/zh-cn/common.js +882 -28
  156. package/dist/resources/zh-cn/common.js.map +1 -1
  157. package/dist/resources/zh-cn/errors.d.ts +1 -0
  158. package/dist/resources/zh-cn/errors.d.ts.map +1 -1
  159. package/dist/resources/zh-cn/errors.js +2 -0
  160. package/dist/resources/zh-cn/errors.js.map +1 -1
  161. package/dist/resources/zh-cn/generated.d.ts.map +1 -1
  162. package/dist/resources/zh-cn/generated.js +1 -0
  163. package/dist/resources/zh-cn/generated.js.map +1 -1
  164. package/dist/resources/zh-cn/studio.d.ts.map +1 -1
  165. package/dist/resources/zh-cn/studio.js +1 -0
  166. package/dist/resources/zh-cn/studio.js.map +1 -1
  167. package/dist/resources/zh-cn/ui.d.ts +9 -0
  168. package/dist/resources/zh-cn/ui.d.ts.map +1 -1
  169. package/dist/resources/zh-cn/ui.js +18 -8
  170. package/dist/resources/zh-cn/ui.js.map +1 -1
  171. package/dist/resources/zh-tw/common.d.ts +858 -5
  172. package/dist/resources/zh-tw/common.d.ts.map +1 -1
  173. package/dist/resources/zh-tw/common.js +882 -28
  174. package/dist/resources/zh-tw/common.js.map +1 -1
  175. package/dist/resources/zh-tw/errors.d.ts +1 -0
  176. package/dist/resources/zh-tw/errors.d.ts.map +1 -1
  177. package/dist/resources/zh-tw/errors.js +2 -0
  178. package/dist/resources/zh-tw/errors.js.map +1 -1
  179. package/dist/resources/zh-tw/generated.d.ts.map +1 -1
  180. package/dist/resources/zh-tw/generated.js +1 -0
  181. package/dist/resources/zh-tw/generated.js.map +1 -1
  182. package/dist/resources/zh-tw/studio.d.ts.map +1 -1
  183. package/dist/resources/zh-tw/studio.js +1 -0
  184. package/dist/resources/zh-tw/studio.js.map +1 -1
  185. package/dist/resources/zh-tw/ui.d.ts +9 -0
  186. package/dist/resources/zh-tw/ui.d.ts.map +1 -1
  187. package/dist/resources/zh-tw/ui.js +18 -8
  188. package/dist/resources/zh-tw/ui.js.map +1 -1
  189. package/dist/review-status.d.ts.map +1 -1
  190. package/dist/review-status.js +8 -7
  191. package/dist/review-status.js.map +1 -1
  192. package/dist/revision.d.ts.map +1 -1
  193. package/dist/revision.js +1 -0
  194. package/dist/revision.js.map +1 -1
  195. package/dist/server.d.ts.map +1 -1
  196. package/dist/server.js +1 -0
  197. package/dist/server.js.map +1 -1
  198. package/dist/validate-message.d.ts.map +1 -1
  199. package/dist/validate-message.js +1 -0
  200. package/dist/validate-message.js.map +1 -1
  201. package/locales/ar-EG/.meta.json +5508 -2872
  202. package/locales/ar-EG/common.json +881 -28
  203. package/locales/ar-EG/errors.json +1 -0
  204. package/locales/ar-EG/ui.json +17 -8
  205. package/locales/cs-CZ/.meta.json +5542 -2906
  206. package/locales/cs-CZ/common.json +881 -28
  207. package/locales/cs-CZ/errors.json +1 -0
  208. package/locales/cs-CZ/ui.json +17 -8
  209. package/locales/da-DK/.meta.json +5613 -2977
  210. package/locales/da-DK/common.json +881 -28
  211. package/locales/da-DK/errors.json +1 -0
  212. package/locales/da-DK/ui.json +17 -8
  213. package/locales/de-DE/.meta.json +5600 -2964
  214. package/locales/de-DE/common.json +881 -28
  215. package/locales/de-DE/errors.json +1 -0
  216. package/locales/de-DE/ui.json +17 -8
  217. package/locales/en-US/common.json +881 -28
  218. package/locales/en-US/errors.json +1 -0
  219. package/locales/en-US/ui.json +17 -8
  220. package/locales/fr-FR/.meta.json +5644 -3008
  221. package/locales/fr-FR/common.json +881 -28
  222. package/locales/fr-FR/errors.json +1 -0
  223. package/locales/fr-FR/ui.json +17 -8
  224. package/locales/zh-CN/.meta.json +5504 -2868
  225. package/locales/zh-CN/common.json +881 -28
  226. package/locales/zh-CN/errors.json +1 -0
  227. package/locales/zh-CN/ui.json +17 -8
  228. package/locales/zh-TW/.meta.json +5507 -2871
  229. package/locales/zh-TW/common.json +881 -28
  230. package/locales/zh-TW/errors.json +1 -0
  231. package/locales/zh-TW/ui.json +17 -8
  232. package/package.json +2 -2
@@ -22,6 +22,7 @@ declare const _default: {
22
22
  };
23
23
  readonly auth: {
24
24
  readonly headline: "Turn any database into a dashboard.";
25
+ readonly description: "Connect PostgreSQL and Adminium generates a themeable, permission-aware admin app — no code required.";
25
26
  readonly trust: "AGPL core · Self-hosted · Your data stays yours";
26
27
  readonly signIn: {
27
28
  readonly title: "Welcome back";
@@ -106,6 +107,11 @@ declare const _default: {
106
107
  readonly people: "People";
107
108
  readonly account: "Account";
108
109
  };
110
+ readonly back: "Back";
111
+ readonly team: "Team";
112
+ readonly roles: "Roles & permissions";
113
+ readonly audit: "Audit log";
114
+ readonly security: "Password & sessions";
109
115
  };
110
116
  readonly topbar: {
111
117
  readonly search: "Search…";
@@ -128,8 +134,8 @@ declare const _default: {
128
134
  readonly askAi: "Ask AI";
129
135
  readonly shortcuts: "Keyboard shortcuts";
130
136
  readonly signOut: "Sign out";
131
- readonly themeDark: "Switch to dark theme";
132
- readonly themeLight: "Switch to light theme";
137
+ readonly themeDark: "Dark mode";
138
+ readonly themeLight: "Light mode";
133
139
  readonly footerNavigate: "navigate";
134
140
  readonly footerOpen: "select";
135
141
  readonly footerClose: "close";
@@ -238,6 +244,7 @@ declare const _default: {
238
244
  };
239
245
  readonly notFound: {
240
246
  readonly title: "This page went missing";
247
+ readonly body: "The page you're looking for doesn't exist or was moved. Check the URL, or head back to your dashboard.";
241
248
  readonly errorLine: "Error 404";
242
249
  readonly searchPlaceholder: "Search for a page…";
243
250
  readonly matches: "Matching pages";
@@ -256,9 +263,11 @@ declare const _default: {
256
263
  };
257
264
  readonly tooNew: {
258
265
  readonly title: "This page needs a newer Adminium";
266
+ readonly body: "This page was saved with config version {version}, but this build understands up to version {latest}. Upgrade Adminium to open it.";
259
267
  };
260
268
  readonly unknownTemplate: {
261
269
  readonly title: "Unknown page template";
270
+ readonly body: "This page uses a template this build doesn’t recognize. It may come from a newer Adminium or an extension that isn’t installed.";
262
271
  };
263
272
  };
264
273
  readonly mutation: {
@@ -348,6 +357,70 @@ declare const _default: {
348
357
  readonly emptyBody: "Notification events appear here as producers ship.";
349
358
  readonly saveFailed: "Could not save this change.";
350
359
  };
360
+ readonly translations: {
361
+ readonly title: "Languages & translations";
362
+ readonly subtitle: "Change any wording in Adminium, choose which languages people can pick, and add languages of your own.";
363
+ readonly warning: "Error messages and sign-in text are editable too. Those are what people read when something goes wrong, so change them carefully.";
364
+ readonly editor: {
365
+ readonly heading: "Edit translations";
366
+ };
367
+ readonly localeLabel: "Language";
368
+ readonly groupLabel: "Area";
369
+ readonly allAreas: "All areas";
370
+ readonly stateLabel: "Show";
371
+ readonly state: {
372
+ readonly all: "Everything";
373
+ readonly overridden: "Customised only";
374
+ readonly untranslated: "Untranslated only";
375
+ readonly stale: "English changed since";
376
+ };
377
+ readonly searchLabel: "Search";
378
+ readonly searchPlaceholder: "Key or English text";
379
+ readonly loading: "Loading strings…";
380
+ readonly noMatches: "No strings match those filters.";
381
+ readonly count: "{total, plural, one {# string} other {# strings}}";
382
+ readonly badge: {
383
+ readonly custom: "Customised";
384
+ readonly stale: "English changed";
385
+ readonly a11y: "Accessible name";
386
+ };
387
+ readonly sourceLabel: "English source";
388
+ readonly valueLabel: "Translation";
389
+ readonly save: "Save";
390
+ readonly saved: "Translation saved";
391
+ readonly resetAction: "Reset to built-in";
392
+ readonly reset: "Reset to the built-in text";
393
+ readonly locales: {
394
+ readonly heading: "Available languages";
395
+ readonly help: "Turn a language off to remove it from every language picker. Anyone already using it keeps it until they choose another.";
396
+ };
397
+ readonly locale: {
398
+ readonly builtin: "Built in";
399
+ readonly custom: "Custom";
400
+ readonly overrides: "{count, plural, =0 {no custom text} one {# custom string} other {# custom strings}}";
401
+ readonly enable: "Turn on";
402
+ readonly disable: "Turn off";
403
+ readonly delete: "Delete";
404
+ readonly deleted: "Language removed";
405
+ readonly deletedDetail: "{users, plural, one {# person} other {# people}} moved back to the workspace default; {strings, plural, one {# translation} other {# translations}} deleted.";
406
+ readonly deleteFailed: "Could not remove that language";
407
+ readonly add: "Add a language";
408
+ readonly added: "Language added";
409
+ readonly create: "Add language";
410
+ readonly id: "Language code";
411
+ readonly intlTag: "Formatting rules from";
412
+ readonly native: "Name in the language itself";
413
+ readonly english: "Name in English";
414
+ readonly dir: "Text direction";
415
+ readonly ltr: "Left to right";
416
+ readonly rtl: "Right to left";
417
+ readonly font: "Script";
418
+ readonly latin: "Latin";
419
+ readonly arabic: "Arabic";
420
+ readonly cjk: "Chinese / Japanese / Korean";
421
+ readonly intlHelp: "Formatting rules decide how numbers, dates and plurals behave. Pick the closest language that already has them — it does not have to match your language code.";
422
+ };
423
+ };
351
424
  };
352
425
  readonly studio: {
353
426
  readonly source: {
@@ -553,12 +626,30 @@ declare const _default: {
553
626
  readonly helper: "Shown in the sidebar, browser title, and emails.";
554
627
  readonly error: "Enter a name of at most 60 characters.";
555
628
  };
629
+ readonly logo: {
630
+ readonly label: "Logo";
631
+ readonly drop: "Drop an image here";
632
+ readonly helper: "PNG, JPEG, WebP, GIF or SVG, up to 1 MB. Replaces the built-in mark everywhere.";
633
+ readonly upload: "Upload logo";
634
+ readonly replace: "Replace logo";
635
+ readonly remove: "Remove";
636
+ readonly uploaded: "Logo updated";
637
+ readonly removed: "Logo removed";
638
+ readonly tooLarge: "That image is larger than 1 MB.";
639
+ readonly badType: "Choose a PNG, JPEG, WebP, GIF or SVG image.";
640
+ readonly undo: "Undo";
641
+ };
642
+ readonly showVersion: {
643
+ readonly label: "Version in the sidebar";
644
+ readonly helper: "The build number beside the logo. Off hides which version you run.";
645
+ };
556
646
  };
557
647
  readonly security: {
558
648
  readonly heading: "Security";
559
649
  readonly require2fa: {
560
650
  readonly label: "Require two-factor auth";
561
651
  readonly desc: "Every member must enable 2FA to sign in.";
652
+ readonly note: "Advisory, not a barrier: members without 2FA are sent to set it up and can no longer turn it off, but their sign-in is never blocked, and API keys are unaffected.";
562
653
  };
563
654
  readonly allowSignup: {
564
655
  readonly label: "Allow self-signup";
@@ -573,6 +664,41 @@ declare const _default: {
573
664
  readonly error: "Between {min, number} and {max, number} characters.";
574
665
  };
575
666
  };
667
+ readonly email: {
668
+ readonly heading: "Email (SMTP)";
669
+ readonly unconfigured: "No mail server is set, so Adminium cannot send password resets, user invites or scheduled reports.";
670
+ readonly host: {
671
+ readonly label: "SMTP host";
672
+ readonly error: "A bare hostname or IP address — no scheme, port or credentials.";
673
+ };
674
+ readonly port: {
675
+ readonly label: "Port";
676
+ readonly error: "Between {min, number} and {max, number}.";
677
+ };
678
+ readonly user: {
679
+ readonly label: "Username";
680
+ readonly helper: "Leave empty for a relay that does not authenticate.";
681
+ };
682
+ readonly pass: {
683
+ readonly label: "Password";
684
+ readonly helper: "Stored encrypted and never shown again. Leave blank to keep the current one.";
685
+ readonly error: "This username needs a password.";
686
+ };
687
+ readonly from: {
688
+ readonly label: "From address";
689
+ readonly helper: "A bare address, or a display name in front of one.";
690
+ readonly error: "Enter an email address.";
691
+ };
692
+ readonly secure: {
693
+ readonly label: "Implicit TLS";
694
+ readonly helper: "On for port 465. Off starts in cleartext and upgrades with STARTTLS, which is what port 587 expects.";
695
+ };
696
+ readonly remove: "Remove mail server";
697
+ readonly review: {
698
+ readonly removed: "Removed";
699
+ readonly password: "Replaced";
700
+ };
701
+ };
576
702
  readonly review: {
577
703
  readonly title: "Save workspace settings";
578
704
  readonly subtitle: "Review your changes before saving.";
@@ -581,6 +707,8 @@ declare const _default: {
581
707
  readonly close: "Close";
582
708
  readonly on: "On";
583
709
  readonly off: "Off";
710
+ readonly shown: "Shown";
711
+ readonly hidden: "Hidden";
584
712
  readonly change: "{before} → {after}";
585
713
  };
586
714
  readonly defaultsCard: {
@@ -600,6 +728,16 @@ declare const _default: {
600
728
  readonly body: "Configure an AI provider (or the copy-paste round-trip) to enrich labels, groups and relations.";
601
729
  readonly cta: "Open AI settings";
602
730
  };
731
+ readonly pagesCard: {
732
+ readonly heading: "Pages";
733
+ readonly body: "Add, edit and delete pages, change what each one shows, and reorder the sidebar.";
734
+ readonly cta: "Manage pages";
735
+ };
736
+ readonly translationsCard: {
737
+ readonly heading: "Languages & translations";
738
+ readonly body: "Reword anything in Adminium, choose which languages people can pick, and add your own.";
739
+ readonly cta: "Open translations";
740
+ };
603
741
  };
604
742
  readonly settingsAi: {
605
743
  readonly title: "AI enrichment";
@@ -964,7 +1102,20 @@ declare const _default: {
964
1102
  readonly testFailed: "Connection failed.";
965
1103
  readonly v1Note: {
966
1104
  readonly title: "About this install";
967
- readonly body: "This server chose its meta store at first boot. This step validates that your choice is compatible with this connection and records it — the server enforces the same rule independently (409 META_PLACEMENT_INVALID). Moving an existing meta store is an ops task (M10).";
1105
+ readonly body: "This server already keeps its own tables in a configured database, and this step does not move them. It validates that your choice is compatible with this connection — the server enforces the same rule independently (409 META_PLACEMENT_INVALID).";
1106
+ };
1107
+ readonly move: {
1108
+ readonly title: "Moving Adminium’s tables";
1109
+ readonly copying: "Moving Adminium’s tables…";
1110
+ readonly restarting: "Restarting…";
1111
+ readonly copyingBody: "Copying every adminium_ table into the new database. Your source data is not touched, and nothing is switched over until the copy is verified.";
1112
+ readonly restartingBody: "The copy is done. Adminium is restarting onto the new database — this page will continue by itself in a few seconds.";
1113
+ readonly failed: "Could not move Adminium’s tables — retry.";
1114
+ readonly timeout: "Adminium moved its tables but has not come back yet. Your data is safe in the new database — reload this page in a moment.";
1115
+ };
1116
+ readonly willMove: {
1117
+ readonly title: "This will move Adminium’s tables";
1118
+ readonly body: "Adminium is currently using its built-in SQLite store. Continue copies that store into the database you picked and restarts onto it — accounts, pages and settings come with it, so you stay signed in.";
968
1119
  };
969
1120
  };
970
1121
  readonly intent: {
@@ -1120,6 +1271,63 @@ declare const _default: {
1120
1271
  readonly masked: "Masked";
1121
1272
  };
1122
1273
  readonly unavailableTitle: "Schema remap editor not available";
1274
+ readonly unavailableBody: "This build does not include the remap editor yet (09-T12). Re-run generation after it lands to remap labels, types and relations.";
1275
+ };
1276
+ readonly publicApi: {
1277
+ readonly error: "Something went wrong";
1278
+ readonly scopes: {
1279
+ readonly deleteTitle: "Delete this scope";
1280
+ readonly deleteBody: "Any page using a key bound to this scope stops loading data. Keys are not deleted — revoke them first if that is what you meant.";
1281
+ readonly deletePrompt: "Type the scope name to confirm";
1282
+ readonly deleteConfirm: "Delete scope";
1283
+ readonly issuesTitle: "This scope did not compile";
1284
+ readonly title: "Scopes";
1285
+ readonly subtitle: "A scope is the whole of what a key may reach — the tables, the exact columns, and a filter the caller can narrow but never remove.";
1286
+ readonly emptyTitle: "No scopes yet";
1287
+ readonly emptyBody: "Create one below. It is checked against your live schema before it is saved.";
1288
+ readonly keyCount: "{count, plural, =0 {no keys} one {# key} other {# keys}}";
1289
+ readonly delete: "Delete";
1290
+ readonly nameLabel: "Name";
1291
+ readonly connectionLabel: "Connection ID";
1292
+ readonly documentLabel: "Scope document";
1293
+ readonly documentHint: "Compiled against your schema when you save. Every column a caller can reach is listed here and nowhere else.";
1294
+ readonly create: "Create scope";
1295
+ readonly formLabel: "Create a scope";
1296
+ };
1297
+ readonly cancel: "Cancel";
1298
+ readonly close: "Close";
1299
+ readonly title: "Public API";
1300
+ readonly subtitle: "Let your own customer- or staff-facing pages read this database, through a scope you define.";
1301
+ readonly notRegistered: {
1302
+ readonly title: "Not enabled on this server";
1303
+ readonly body: "Set ADMINIUM_PUBLIC_API_ORIGINS to the exact origins allowed to call it, then restart. Until then these routes are not served at all.";
1304
+ };
1305
+ readonly toggle: {
1306
+ readonly label: "Serve the public API";
1307
+ readonly hint: "Turning this off stops every public request immediately. Nothing is deleted — keys, scopes and data all survive.";
1308
+ };
1309
+ readonly origins: {
1310
+ readonly label: "Origins allowed to call it";
1311
+ };
1312
+ readonly keys: {
1313
+ readonly title: "Keys";
1314
+ readonly subtitle: "These go in your page’s JavaScript, so anyone can read them. That is expected — a key can only ever do what its scope allows.";
1315
+ readonly emptyTitle: "No keys yet";
1316
+ readonly emptyBody: "Create a scope first, then mint a key for it.";
1317
+ readonly reveal: "Show key";
1318
+ readonly rotate: "Rotate";
1319
+ readonly revoke: "Revoke";
1320
+ readonly nameLabel: "Name";
1321
+ readonly scopeLabel: "Scope";
1322
+ readonly scopePlaceholder: "Choose a scope";
1323
+ readonly create: "Create key";
1324
+ readonly formLabel: "Create a key";
1325
+ readonly scopeIsAuthTitle: "The scope is the only permission";
1326
+ readonly scopeIsAuthBody: "A key can reach exactly what its scope lists and nothing else. It does not use roles or table permissions, and it cannot read anything through the rest of the API.";
1327
+ };
1328
+ readonly status: {
1329
+ readonly heading: "Status";
1330
+ };
1123
1331
  };
1124
1332
  };
1125
1333
  readonly onboarding: {
@@ -1240,6 +1448,8 @@ declare const _default: {
1240
1448
  readonly remove: "Remove {name}";
1241
1449
  readonly removed: "{name} removed.";
1242
1450
  readonly duplicated: "{name} duplicated.";
1451
+ readonly unboundHint: "This widget shows sample data here and on the live page. Open Configure to connect it to a table.";
1452
+ readonly unbound: "Sample data";
1243
1453
  };
1244
1454
  readonly families: {
1245
1455
  readonly kpi: "KPIs";
@@ -1263,6 +1473,148 @@ declare const _default: {
1263
1473
  readonly saveVersionBody: "Snapshots the current document. Restore it any time from Versions.";
1264
1474
  readonly versionName: "Version name";
1265
1475
  readonly versionNamePlaceholder: "e.g. Before Q3 rates change";
1476
+ readonly discard: "Discard changes";
1477
+ readonly discardTitle: "Discard your changes?";
1478
+ readonly discardBody: "The dashboard goes back to how it looked when you opened the editor. Your data isn’t affected.";
1479
+ readonly discardConfirm: "Discard changes";
1480
+ readonly keepEditing: "Keep editing";
1481
+ readonly discarded: "Changes discarded.";
1482
+ readonly binding: {
1483
+ readonly addFilter: "Add filter";
1484
+ readonly brokenBody: "It no longer matches a query this version understands, so the widget shows an error on the live page.";
1485
+ readonly brokenTitle: "This widget’s query is broken";
1486
+ readonly bucketColumn: "Date column";
1487
+ readonly bucketRequired: "Pick the column that carries the date.";
1488
+ readonly bucketUnit: "Group time by";
1489
+ readonly columnNone: "None";
1490
+ readonly columnPlaceholder: "Choose a column…";
1491
+ readonly connect: "Connect to data";
1492
+ readonly edit: "Edit query";
1493
+ readonly event: {
1494
+ readonly category: "Category column (optional)";
1495
+ readonly date: "Start date column";
1496
+ readonly end: "End date column (optional)";
1497
+ readonly title: "Title column";
1498
+ };
1499
+ readonly filterColumnRequired: "Pick a column.";
1500
+ readonly filterColumn: "Column";
1501
+ readonly filterListHelper: "Separate values with commas.";
1502
+ readonly filterOp: "Condition";
1503
+ readonly filterValue: "Value";
1504
+ readonly fn: {
1505
+ readonly avg: "Average";
1506
+ readonly countDistinct: "Count of distinct values";
1507
+ readonly count: "Count of rows";
1508
+ readonly max: "Maximum";
1509
+ readonly min: "Minimum";
1510
+ readonly sum: "Sum";
1511
+ };
1512
+ readonly groupByColumns: "Columns";
1513
+ readonly groupByRequired: "This view needs a breakdown column.";
1514
+ readonly groupByRows: "Rows";
1515
+ readonly groupBy: "Group by";
1516
+ readonly incompleteBody: "Fill in the highlighted fields — a half-written query would fail on the live dashboard.";
1517
+ readonly incompleteTitle: "This query isn’t finished";
1518
+ readonly limit: "Most rows to fetch";
1519
+ readonly loadingSchema: "Loading tables…";
1520
+ readonly lossyBody: "Parts of it — extra measures, sorts or page-filter links — aren’t shown here and will be dropped if you save.";
1521
+ readonly lossyTitle: "This query is more advanced than the editor";
1522
+ readonly measureColumnRequired: "This calculation needs a column.";
1523
+ readonly measureColumn: "Of column";
1524
+ readonly measureFn: "Calculate";
1525
+ readonly noConnectionBody: "Widgets can only be bound on a page that belongs to a connection.";
1526
+ readonly noConnectionTitle: "This page has no database connection";
1527
+ readonly noDateColumns: "This table has no date or timestamp column.";
1528
+ readonly noFilters: "No filters — every row in the table is counted.";
1529
+ readonly noSnapshotBody: "Tables and columns come from the connection’s last introspection. Run introspection in Studio, then reopen this editor.";
1530
+ readonly noSnapshotTitle: "No schema snapshot for this connection";
1531
+ readonly op: {
1532
+ readonly between: "is between";
1533
+ readonly ilike: "contains (any case)";
1534
+ readonly in: "is one of";
1535
+ readonly isNull: "is empty";
1536
+ readonly like: "contains";
1537
+ readonly notNull: "is not empty";
1538
+ };
1539
+ readonly orderAsc: "Oldest / lowest first";
1540
+ readonly orderBy: "Sort by";
1541
+ readonly orderDesc: "Newest / highest first";
1542
+ readonly orderDir: "Direction";
1543
+ readonly orderNone: "Database order";
1544
+ readonly pickTableFirst: "Pick a table to choose its columns.";
1545
+ readonly removeFilter: "Remove filter";
1546
+ readonly remove: "Remove data source";
1547
+ readonly save: "Use this query";
1548
+ readonly sectionBreakdown: "Breakdown";
1549
+ readonly sectionColumns: "Columns";
1550
+ readonly sectionFilters: "Filters";
1551
+ readonly sectionMeasure: "Measure";
1552
+ readonly sectionRows: "Rows";
1553
+ readonly sectionSource: "Source";
1554
+ readonly sectionTime: "Time axis";
1555
+ readonly sectionWindow: "Period";
1556
+ readonly selectColumns: "Columns to show";
1557
+ readonly selectRequired: "Choose at least one column to show.";
1558
+ readonly shape: {
1559
+ readonly calendarEvents: "Dated events";
1560
+ readonly categorical: "A value per category";
1561
+ readonly distribution: "The spread of one column";
1562
+ readonly matrix: "A grid of rows by columns";
1563
+ readonly metricDelta: "A number, compared to the period before";
1564
+ readonly multiTimeseries: "One line over time per category";
1565
+ readonly recordList: "A list of rows";
1566
+ readonly record: "One row";
1567
+ readonly singleMetric: "A single number";
1568
+ readonly stream: "A live feed of recent rows";
1569
+ readonly timeseries: "A value over time";
1570
+ readonly tree: "A value per category, split in two levels";
1571
+ readonly geoPoints: "A value per place or region";
1572
+ readonly flows: "How much moves from one category to another";
1573
+ readonly ohlc: "Open, high, low and close per period";
1574
+ readonly booleanMap: "An on/off flag per key";
1575
+ };
1576
+ readonly shapeHelper: "Changing this changes which query controls apply.";
1577
+ readonly shapeLabel: "What this widget shows";
1578
+ readonly summaryColumns: "{count, plural, one {# column} other {# columns}}";
1579
+ readonly summaryFilters: "{count, plural, one {# filter} other {# filters}}";
1580
+ readonly tableEmpty: "No matching table.";
1581
+ readonly tablePlaceholder: "Search tables…";
1582
+ readonly tableRequired: "Pick a table to query.";
1583
+ readonly table: "Table or view";
1584
+ readonly title: "Data source";
1585
+ readonly unbindableBody: "It shows the shape of data the query engine doesn’t build yet, so it renders its own sample content.";
1586
+ readonly unbindableTitle: "This widget can’t query data yet";
1587
+ readonly unboundBody: "It shows sample numbers here AND on the live page. Connect it to a table to show real data.";
1588
+ readonly unboundTitle: "Not connected to your data";
1589
+ readonly unit: {
1590
+ readonly day: "Daily";
1591
+ readonly hour: "Hourly";
1592
+ readonly month: "Monthly";
1593
+ readonly quarter: "Quarterly";
1594
+ readonly week: "Weekly";
1595
+ readonly year: "Yearly";
1596
+ };
1597
+ readonly valueColumnRequired: "Pick the column to measure.";
1598
+ readonly valueColumn: "Value column";
1599
+ readonly windowColumn: "Date column";
1600
+ readonly windowLast: "Last";
1601
+ readonly windowNone: "All time";
1602
+ readonly windowRequired: "Comparing to the previous period needs a date column.";
1603
+ readonly windowUnit: {
1604
+ readonly day: "days";
1605
+ readonly hour: "hours";
1606
+ readonly month: "months";
1607
+ readonly quarter: "quarters";
1608
+ readonly week: "weeks";
1609
+ readonly year: "years";
1610
+ };
1611
+ readonly windowUnitLabel: "Unit";
1612
+ readonly role: {
1613
+ readonly flagKey: "Key column";
1614
+ readonly flagValue: "On/off column";
1615
+ };
1616
+ readonly roleColumnsRequired: "Fill every required column, and leave no gaps before one you filled — these columns are read in order.";
1617
+ };
1266
1618
  };
1267
1619
  readonly setup: {
1268
1620
  readonly title: "Set up Adminium";
@@ -1616,6 +1968,7 @@ declare const _default: {
1616
1968
  };
1617
1969
  readonly settings: {
1618
1970
  readonly explainer: "These settings apply to the Adminium app on this computer only. They are stored on this machine, not in your workspace.";
1971
+ readonly title: "Desktop settings";
1619
1972
  };
1620
1973
  readonly security: {
1621
1974
  readonly heading: "Sign-in";
@@ -1663,6 +2016,7 @@ declare const _default: {
1663
2016
  readonly transportTitle: "Traffic on your local network is not encrypted.";
1664
2017
  readonly transportBody: "Share only on networks you trust. For remote access, use Adminium self-host behind HTTPS.";
1665
2018
  readonly firewall: "The first time you share, your operating system will ask whether to allow incoming connections — choose Allow, or other devices will not be able to reach Adminium.";
2019
+ readonly manageTeam: "Manage users & roles";
1666
2020
  };
1667
2021
  readonly setup: {
1668
2022
  readonly title: "Welcome to Adminium";
@@ -1872,36 +2226,47 @@ declare const _default: {
1872
2226
  readonly templates: {
1873
2227
  readonly crud: {
1874
2228
  readonly title: "Records";
2229
+ readonly description: "Rows in a searchable table.";
1875
2230
  };
1876
2231
  readonly dashboard: {
1877
2232
  readonly title: "Dashboard";
2233
+ readonly description: "Charts and figures you arrange.";
1878
2234
  };
1879
2235
  readonly board: {
1880
2236
  readonly title: "Board";
2237
+ readonly description: "Cards in columns by status.";
1881
2238
  };
1882
2239
  readonly calendar: {
1883
2240
  readonly title: "Calendar";
2241
+ readonly description: "Records on a month grid, by date.";
1884
2242
  };
1885
2243
  readonly scheduler: {
1886
2244
  readonly title: "Scheduler";
2245
+ readonly description: "A timeline per person.";
1887
2246
  };
1888
2247
  readonly logViewer: {
1889
2248
  readonly title: "Logs";
2249
+ readonly description: "Filterable event lines.";
1890
2250
  };
1891
2251
  readonly files: {
1892
2252
  readonly title: "Files";
2253
+ readonly description: "Files and folders to browse.";
1893
2254
  };
1894
2255
  readonly chat: {
1895
2256
  readonly title: "Chat";
2257
+ readonly description: "Threaded conversations.";
1896
2258
  };
1897
2259
  readonly builder: {
1898
2260
  readonly title: "Builder";
2261
+ readonly description: "A drag-and-drop document canvas.";
1899
2262
  };
1900
2263
  readonly wizard: {
1901
2264
  readonly title: "Wizard";
2265
+ readonly description: "Guided steps to finish a task.";
1902
2266
  };
1903
2267
  readonly settings: {
1904
2268
  readonly title: "Settings";
2269
+ readonly description: "Preference rows with toggles.";
1905
2270
  };
1906
2271
  readonly directory: {
1907
2272
  readonly title: "Directory";
@@ -1916,6 +2281,7 @@ declare const _default: {
1916
2281
  readonly errorTitle: "This directory failed to load";
1917
2282
  readonly loading: "Loading people";
1918
2283
  readonly memberCount: "{count} people";
2284
+ readonly description: "People cards and an org chart.";
1919
2285
  };
1920
2286
  readonly masterDetail: {
1921
2287
  readonly title: "List & detail";
@@ -1928,6 +2294,7 @@ declare const _default: {
1928
2294
  readonly errorTitle: "This list failed to load";
1929
2295
  readonly loading: "Loading records";
1930
2296
  readonly selectPrompt: "Select a record";
2297
+ readonly description: "A list, with the record beside it.";
1931
2298
  };
1932
2299
  readonly queueInbox: {
1933
2300
  readonly title: "Queue";
@@ -1953,6 +2320,7 @@ declare const _default: {
1953
2320
  readonly loading: "Loading queue";
1954
2321
  readonly selectPrompt: "Select a request";
1955
2322
  readonly daysUnit: "{count} days";
2323
+ readonly description: "A work queue with approve and reject.";
1956
2324
  };
1957
2325
  };
1958
2326
  readonly dataio: {
@@ -2056,8 +2424,493 @@ declare const _default: {
2056
2424
  };
2057
2425
  };
2058
2426
  readonly theme: {
2059
- readonly toLight: "Switch to light theme";
2060
- readonly toDark: "Switch to dark theme";
2427
+ readonly toLight: "Light mode";
2428
+ readonly toDark: "Dark mode";
2429
+ };
2430
+ readonly studioPages: {
2431
+ readonly title: "Pages";
2432
+ readonly subtitle: "Add, edit and organise the pages of your app, and the order they appear in the sidebar.";
2433
+ readonly createButton: "New page";
2434
+ readonly loadFailed: {
2435
+ readonly title: "Pages could not be loaded";
2436
+ readonly body: "Managing pages needs the “Manage pages” permission. Ask an administrator to grant it to one of your roles.";
2437
+ };
2438
+ readonly tab: {
2439
+ readonly pages: "All pages";
2440
+ readonly sidebar: "Sidebar order";
2441
+ };
2442
+ readonly list: {
2443
+ readonly title: "Pages";
2444
+ readonly count: "{count, plural, one {# page} other {# pages}}";
2445
+ };
2446
+ readonly empty: {
2447
+ readonly title: "No pages yet";
2448
+ readonly body: "Connect a database to generate pages automatically, or create one by hand.";
2449
+ };
2450
+ readonly status: {
2451
+ readonly live: "Live";
2452
+ readonly hidden: "Hidden";
2453
+ };
2454
+ readonly origin: {
2455
+ readonly generated: "Generated";
2456
+ readonly manifest: "Add-on";
2457
+ readonly llm: "Assistant";
2458
+ readonly system: "System";
2459
+ readonly user: "Custom";
2460
+ };
2461
+ readonly row: {
2462
+ readonly menu: "Actions for {title}";
2463
+ };
2464
+ readonly action: {
2465
+ readonly edit: "Edit page";
2466
+ readonly duplicate: "Duplicate";
2467
+ readonly hide: "Hide from sidebar";
2468
+ readonly show: "Show in sidebar";
2469
+ readonly delete: "Delete page";
2470
+ };
2471
+ readonly create: {
2472
+ readonly title: "New page";
2473
+ readonly failed: "The page could not be created";
2474
+ readonly submit: "Create page";
2475
+ readonly subtitle: "Pick what this page shows and how it looks.";
2476
+ };
2477
+ readonly duplicate: {
2478
+ readonly title: "Duplicate page";
2479
+ readonly failed: "The page could not be duplicated";
2480
+ readonly submit: "Duplicate";
2481
+ };
2482
+ readonly delete: {
2483
+ readonly title: "Delete this page?";
2484
+ readonly body: "This cannot be undone. Saved views and personal layouts on this page are deleted for everyone.";
2485
+ readonly bodyGenerated: "This page was created by schema generation, so it will come back the next time you regenerate. Saved views and personal layouts on it are deleted for everyone.";
2486
+ readonly prompt: "Type {slug} to confirm";
2487
+ readonly confirm: "Delete page";
2488
+ };
2489
+ readonly field: {
2490
+ readonly title: "Title";
2491
+ readonly titleHint: "Shown in the sidebar and the page header.";
2492
+ readonly slug: "Page address";
2493
+ readonly slugHint: "Lowercase letters, numbers and dashes. Just the last part — the rest of the address is added for you.";
2494
+ readonly slugTaken: "Another page already uses this address.";
2495
+ readonly slugWarning: "Changing the address breaks existing links and bookmarks to this page.";
2496
+ readonly template: "Template";
2497
+ readonly templateHint: "Decides what the page can hold. You can change it later.";
2498
+ readonly group: "Sidebar group";
2499
+ readonly groupHint: "Which section of the sidebar it appears in.";
2500
+ readonly icon: "Icon";
2501
+ readonly iconHint: "Shown beside the page name in the sidebar.";
2502
+ readonly visible: "Show in sidebar";
2503
+ readonly visibleHint: "A hidden page stays reachable at its URL for anyone who has the link.";
2504
+ readonly table: "Table";
2505
+ readonly tableCreateHint: "The table this page reads. You can bind it later.";
2506
+ readonly tableNone: "Not bound";
2507
+ readonly tableNeedsConnection: "Pick a data source first.";
2508
+ readonly connection: "Data source";
2509
+ readonly connectionNone: "None";
2510
+ readonly iconPick: "Choose the page icon";
2511
+ readonly padding: "Page padding";
2512
+ };
2513
+ readonly editor: {
2514
+ readonly title: "Edit page";
2515
+ readonly save: "Save changes";
2516
+ readonly saveFailed: "Changes could not be saved";
2517
+ readonly openPage: "Open page";
2518
+ readonly generated: {
2519
+ readonly title: "This page was generated from your schema";
2520
+ readonly body: "Your changes survive regeneration. Deleting only lasts until the next run recreates it.";
2521
+ };
2522
+ readonly contentUnavailable: "Page contents could not be loaded";
2523
+ readonly contentUnavailableBody: "The details above can still be saved.";
2524
+ readonly contentInvalid: "This page’s configuration is not readable";
2525
+ readonly contentInvalidBody: "It was written by a newer version, or it is malformed. Regenerate the page or delete it.";
2526
+ readonly data: "Data";
2527
+ readonly schemaFailed: "Tables could not be listed";
2528
+ readonly schemaFailedBody: "This connection may not have been analysed yet. Run introspection from Studio → Data connections.";
2529
+ readonly notBindable: "This template is not bound to one table";
2530
+ readonly notBindableBody: "Its contents are built widget by widget instead. Open the page and use Edit to add them.";
2531
+ readonly recompose: "This page will be rebuilt";
2532
+ readonly recomposeBody: "Saving rebuilds the contents. Column and widget edits here are lost.";
2533
+ readonly missing: "That page no longer exists";
2534
+ readonly missingBody: "It may have been deleted, or removed by a regeneration run.";
2535
+ readonly details: "Details";
2536
+ readonly itemsPending: "Save the change above first — the contents are rebuilt from it.";
2537
+ readonly columns: "Columns";
2538
+ readonly appearance: "Appearance";
2539
+ };
2540
+ readonly sidebar: {
2541
+ readonly help: "Reorder pages within a group, or move one to another group. Changes apply to every user.";
2542
+ readonly discard: "Discard";
2543
+ readonly save: "Save order";
2544
+ readonly saveFailed: "The new order could not be saved";
2545
+ readonly emptyGroup: "No pages in this group.";
2546
+ readonly moveUp: "Move {title} up";
2547
+ readonly moveDown: "Move {title} down";
2548
+ readonly moveTo: "Move {title} to a group";
2549
+ readonly ungrouped: {
2550
+ readonly title: "Some pages are in no sidebar group";
2551
+ readonly body: "These pages work at their URL but appear nowhere in the sidebar. Open each one and pick a group.";
2552
+ };
2553
+ };
2554
+ readonly columns: {
2555
+ readonly help: "Reorder columns, rename their headers, and choose which are shown in the table.";
2556
+ readonly discard: "Discard";
2557
+ readonly save: "Save columns";
2558
+ readonly saveFailed: "Columns could not be saved";
2559
+ readonly pk: "Key";
2560
+ readonly pii: "PII";
2561
+ readonly header: "Header for {name}";
2562
+ readonly shown: "Shown";
2563
+ readonly toggle: "Show {name} in the table";
2564
+ readonly moveUp: "Move {name} up";
2565
+ readonly moveDown: "Move {name} down";
2566
+ readonly remove: "Remove {name}";
2567
+ readonly none: {
2568
+ readonly title: "This page has no columns yet";
2569
+ readonly body: "Columns are read from the table when the page is generated. Bind this page to a table and regenerate to fill them in.";
2570
+ };
2571
+ };
2572
+ readonly icon: {
2573
+ readonly none: "Choose an icon";
2574
+ readonly search: "Search icons";
2575
+ readonly noMatches: "No icons match that search.";
2576
+ };
2577
+ readonly preview: {
2578
+ readonly untitled: "Untitled page";
2579
+ readonly note: "An illustration of the layout, not your data.";
2580
+ };
2581
+ readonly padding: {
2582
+ readonly default: "Default for this template";
2583
+ readonly none: "None";
2584
+ readonly standard: "Standard (28 × 24)";
2585
+ readonly custom: "Custom…";
2586
+ readonly x: "Sides (px)";
2587
+ readonly y: "Top and bottom (px)";
2588
+ };
2589
+ };
2590
+ readonly audit: {
2591
+ readonly action: {
2592
+ readonly view: "View";
2593
+ };
2594
+ readonly actor: {
2595
+ readonly apiKey: "API key";
2596
+ readonly automation: "Automation";
2597
+ readonly system: "System";
2598
+ readonly user: "User";
2599
+ };
2600
+ readonly category: {
2601
+ readonly auth: "Sign-in & accounts";
2602
+ readonly automation: "Automations";
2603
+ readonly connection: "Connections";
2604
+ readonly data: "Records";
2605
+ readonly export: "Imports & exports";
2606
+ readonly llm: "AI assist";
2607
+ readonly rbac: "Roles & permissions";
2608
+ readonly schema: "Schema";
2609
+ readonly settings: "Settings";
2610
+ readonly system: "System";
2611
+ };
2612
+ readonly column: {
2613
+ readonly action: "Action";
2614
+ readonly actor: "Actor";
2615
+ readonly category: "Category";
2616
+ readonly details: "Details";
2617
+ readonly when: "When";
2618
+ };
2619
+ readonly drawer: {
2620
+ readonly actorId: "Actor id";
2621
+ readonly actorKind: "Actor type";
2622
+ readonly after: "After";
2623
+ readonly before: "Before";
2624
+ readonly category: "Category";
2625
+ readonly changes: "Changes";
2626
+ readonly connection: "Connection";
2627
+ readonly field: "Field";
2628
+ readonly ip: "IP address";
2629
+ readonly noChanges: "This action recorded no before/after images.";
2630
+ readonly none: "None";
2631
+ readonly requestId: "Request id";
2632
+ readonly resource: "Resource";
2633
+ readonly subtitle: "{actor} · {when}";
2634
+ readonly truncated: "Truncated at 16 KB";
2635
+ readonly userAgent: "User agent";
2636
+ };
2637
+ readonly empty: {
2638
+ readonly body: "Changes to data, schema, settings and permissions land here as they happen.";
2639
+ readonly filtered: {
2640
+ readonly body: "Widen the date range or clear the category filter.";
2641
+ readonly title: "Nothing matches these filters";
2642
+ };
2643
+ readonly title: "Nothing has been logged yet";
2644
+ };
2645
+ readonly filterActor: "Actor id";
2646
+ readonly filterCategoryAny: "Any category";
2647
+ readonly filterCategory: "Filter by category";
2648
+ readonly filterFrom: "From";
2649
+ readonly filterTo: "To";
2650
+ readonly listFailed: {
2651
+ readonly title: "Could not load the audit log";
2652
+ };
2653
+ readonly loadMore: "Load older entries";
2654
+ readonly subtitle: "Every change made in this workspace, who made it, and what it changed.";
2655
+ readonly title: "Audit log";
2656
+ };
2657
+ readonly roles: {
2658
+ readonly action: {
2659
+ readonly delete: "Delete";
2660
+ readonly rename: "Rename";
2661
+ };
2662
+ readonly builtinLocked: "Built-in roles cannot be deleted.";
2663
+ readonly category: {
2664
+ readonly access: "Access";
2665
+ readonly data: "Data";
2666
+ readonly operations: "Operations";
2667
+ readonly workspace: "Workspace";
2668
+ };
2669
+ readonly column: {
2670
+ readonly actions: "Actions";
2671
+ readonly members: "Members";
2672
+ readonly name: "Role";
2673
+ };
2674
+ readonly create: {
2675
+ readonly descriptionLabel: "Description";
2676
+ readonly description: "A new role starts with no permissions at all.";
2677
+ readonly failed: "Could not create the role";
2678
+ readonly namePlaceholder: "e.g. Support agent";
2679
+ readonly name: "Name";
2680
+ readonly submit: "Create role";
2681
+ readonly title: "New role";
2682
+ };
2683
+ readonly createButton: "New role";
2684
+ readonly delete: {
2685
+ readonly confirm: "Delete role";
2686
+ readonly description: "The role and its permission rows are removed.";
2687
+ readonly failed: "Could not delete the role";
2688
+ readonly hasMembers: "“{name}” still has {count, plural, one {# member} other {# members}}. Choose the role they move to — Adminium will not leave an account with no role.";
2689
+ readonly noMembers: "Nobody holds “{name}”, so nothing moves.";
2690
+ readonly reassignPlaceholder: "Choose a role…";
2691
+ readonly reassignTo: "Move members to";
2692
+ readonly title: "Delete role";
2693
+ };
2694
+ readonly list: {
2695
+ readonly title: "Roles";
2696
+ };
2697
+ readonly loadFailed: {
2698
+ readonly body: "The matrix below is incomplete, so saving it would clear permissions that are simply not loaded. Reload before making changes.";
2699
+ readonly title: "Some permissions could not be read";
2700
+ };
2701
+ readonly matrix: {
2702
+ readonly discard: "Discard";
2703
+ readonly empty: {
2704
+ readonly body: "This instance reported no grantable permissions at all, which should not happen — reload, and if it persists check the server log.";
2705
+ readonly title: "No permissions to show";
2706
+ };
2707
+ readonly label: "Role permissions";
2708
+ readonly noChanges: "No pending changes";
2709
+ readonly pending: "{count, plural, one {# pending change} other {# pending changes}}";
2710
+ readonly rowHeader: "Permission";
2711
+ readonly title: "Permissions";
2712
+ };
2713
+ readonly memberCount: "{count, plural, one {# user} other {# users}}";
2714
+ readonly permission: {
2715
+ readonly apiKeysManage: "Manage API keys";
2716
+ readonly auditRead: "Read the audit log";
2717
+ readonly connectionsManage: "Manage database connections";
2718
+ readonly exportsManage: "Manage everyone’s exports";
2719
+ readonly importsManage: "Manage everyone’s imports";
2720
+ readonly jobsManage: "Start and cancel background jobs";
2721
+ readonly jobsRead: "See all background jobs";
2722
+ readonly llmRun: "Run AI assist";
2723
+ readonly pagesManage: "Create and organize pages";
2724
+ readonly reportsManage: "Manage scheduled reports";
2725
+ readonly rolesManage: "Manage roles and permissions";
2726
+ readonly schemaRemap: "Edit schema labels and overrides";
2727
+ readonly settingsManage: "Manage workspace settings";
2728
+ readonly usersManage: "Manage users";
2729
+ };
2730
+ readonly rename: {
2731
+ readonly failed: "Could not rename the role";
2732
+ readonly title: "Rename role";
2733
+ };
2734
+ readonly saveFailed: {
2735
+ readonly title: "Could not save every role";
2736
+ };
2737
+ readonly subtitle: "What each role may do. A user gets the union of every role they hold.";
2738
+ readonly title: "Roles & permissions";
2739
+ };
2740
+ readonly security: {
2741
+ readonly password: {
2742
+ readonly changedBody: "Use the new password the next time you sign in. Sessions on other devices are unaffected — revoke them below if you want them signed out.";
2743
+ readonly changed: "Password changed";
2744
+ readonly confirm: "Confirm new password";
2745
+ readonly current: "Current password";
2746
+ readonly failed: "Could not change your password";
2747
+ readonly helper: "At least 8 characters.";
2748
+ readonly mismatch: "The two passwords do not match.";
2749
+ readonly new: "New password";
2750
+ readonly submit: "Change password";
2751
+ readonly title: "Password";
2752
+ };
2753
+ readonly sessions: {
2754
+ readonly expires: "Expires {at}";
2755
+ readonly failedBody: "This list is the only place that shows where your account is signed in, so treat an empty one as unknown rather than as none.";
2756
+ readonly failed: "Could not read your sessions";
2757
+ readonly ip: "IP {ip}";
2758
+ readonly loading: "Looking for other signed-in devices…";
2759
+ readonly noIp: "No IP recorded";
2760
+ readonly revokeBody: "The session ends immediately and whoever is using it has to sign in again.";
2761
+ readonly revokeFailed: "Could not sign that device out";
2762
+ readonly revokeTitle: "Sign this device out";
2763
+ readonly revoke: "Sign out";
2764
+ readonly seenUnknown: "Last seen: unknown";
2765
+ readonly seen: "Last seen {since}";
2766
+ readonly thisDevice: "This device";
2767
+ readonly title: "Signed in";
2768
+ readonly unknownDevice: "Unrecognised device";
2769
+ };
2770
+ readonly subtitle: "Your password, your second factor, and everywhere you are signed in.";
2771
+ readonly title: "Security";
2772
+ readonly twoFactor: {
2773
+ readonly activateFailed: "That code was not accepted";
2774
+ readonly activate: "Turn on two-factor";
2775
+ readonly body: "An authenticator app generates a 6-digit code that Adminium asks for after your password.";
2776
+ readonly code: "Code from your app";
2777
+ readonly copyKey: "Copy setup key";
2778
+ readonly copyLink: "Copy setup link";
2779
+ readonly disableBody: "Your account goes back to password-only, and your recovery codes stop working.";
2780
+ readonly disableConfirm: "Turn it off";
2781
+ readonly disableFailed: "Could not turn off two-factor";
2782
+ readonly disablePassword: "Your password";
2783
+ readonly disableTitle: "Turn off two-factor authentication";
2784
+ readonly disable: "Turn off two-factor";
2785
+ readonly enrollFailed: "Could not start setup";
2786
+ readonly enroll: "Set up two-factor";
2787
+ readonly hide: "Hide setup key";
2788
+ readonly off: "Off";
2789
+ readonly on: "On";
2790
+ readonly recovery: {
2791
+ readonly body: "Each code signs you in once if you lose your authenticator. They are shown only now.";
2792
+ readonly copy: "Copy codes";
2793
+ readonly title: "Save your recovery codes";
2794
+ };
2795
+ readonly reveal: "Show setup key";
2796
+ readonly secretHelper: "Paste the setup link into your authenticator, or type the key in by hand.";
2797
+ readonly secret: "Setup key";
2798
+ readonly title: "Two-factor authentication";
2799
+ };
2800
+ };
2801
+ readonly team: {
2802
+ readonly action: {
2803
+ readonly reactivate: "Reactivate";
2804
+ readonly remove: "Delete";
2805
+ readonly resend: "New link";
2806
+ readonly roles: "Roles";
2807
+ readonly suspend: "Suspend";
2808
+ };
2809
+ readonly column: {
2810
+ readonly actions: "Actions";
2811
+ readonly lastSeen: "Last seen";
2812
+ readonly person: "Person";
2813
+ readonly roles: "Roles";
2814
+ readonly status: "Status";
2815
+ };
2816
+ readonly counts: "{active} active · {invited} invited · {suspended} suspended";
2817
+ readonly empty: {
2818
+ readonly body: "Invite a teammate to give them their own sign-in and role.";
2819
+ readonly filtered: {
2820
+ readonly body: "Clear the filters to see the whole directory.";
2821
+ readonly title: "No one matches these filters";
2822
+ };
2823
+ readonly title: "Only you have an account";
2824
+ };
2825
+ readonly filterRoleAny: "Any role";
2826
+ readonly filterRole: "Filter by role";
2827
+ readonly filterStatusAny: "Any status";
2828
+ readonly filterStatus: "Filter by status";
2829
+ readonly invite: {
2830
+ readonly copied: "Copied";
2831
+ readonly copyLink: "Copy link";
2832
+ readonly created: {
2833
+ readonly body: "Send this link to {email} yourself. It is shown once — Adminium stores only a hash of it, so if you lose it you will have to delete the invitation and issue a new one.";
2834
+ readonly title: "Invitation created";
2835
+ };
2836
+ readonly emailIt: "Email the invitation";
2837
+ readonly expiresRelative: "The link expires {at} ({relative}).";
2838
+ readonly expires: "The link expires {at}.";
2839
+ readonly noEmail: {
2840
+ readonly smtp: "No SMTP server is configured on this instance, so there is nothing to send mail with. Share the link over a channel you already trust.";
2841
+ readonly title: "Adminium did not email this link";
2842
+ readonly unknown: "Adminium could not check whether this instance can send mail. Share the link over a channel you already trust.";
2843
+ };
2844
+ };
2845
+ readonly inviteButton: "Invite teammate";
2846
+ readonly inviteDialog: {
2847
+ readonly description: "Adminium creates the account and gives you a one-time activation link to pass on.";
2848
+ readonly emailPlaceholder: "name@example.com";
2849
+ readonly email: "Email";
2850
+ readonly failed: "Could not create the invitation";
2851
+ readonly namePlaceholder: "e.g. Dana Osei";
2852
+ readonly name: "Name";
2853
+ readonly rolesHelper: "Pick the least-privileged role that lets them do their job. You can change this later.";
2854
+ readonly roles: "Roles";
2855
+ readonly submit: "Create invitation";
2856
+ readonly title: "Invite a teammate";
2857
+ };
2858
+ readonly listFailed: {
2859
+ readonly title: "Could not load the directory";
2860
+ };
2861
+ readonly loadMore: "Load more";
2862
+ readonly neverSignedIn: "Never signed in";
2863
+ readonly noRoles: "No roles";
2864
+ readonly remove: {
2865
+ readonly body: "This erases {name}’s account, their preferences and their sign-in sessions, and blanks their name from the record of settings they changed. Suspending instead keeps all of it and only stops them signing in. This cannot be undone.";
2866
+ readonly confirm: "Delete permanently";
2867
+ readonly prompt: "Type “{email}” to confirm";
2868
+ readonly title: "Delete account permanently";
2869
+ };
2870
+ readonly roles: {
2871
+ readonly unavailable: "Roles are not visible to your account, so none can be assigned here.";
2872
+ };
2873
+ readonly rolesDialog: {
2874
+ readonly description: "A user gets the union of every role they hold.";
2875
+ readonly failed: "Could not change the roles";
2876
+ readonly title: "Roles for {name}";
2877
+ };
2878
+ readonly rolesLocked: "Changing roles needs the “Manage roles” permission.";
2879
+ readonly search: "Search name or email";
2880
+ readonly status: {
2881
+ readonly active: "Active";
2882
+ readonly invited: "Invited";
2883
+ readonly suspended: "Suspended";
2884
+ };
2885
+ readonly subtitle: "Who has an account on this Adminium, and what each of them can do.";
2886
+ readonly title: "Team";
2887
+ readonly twoFactorOn: "Two-factor authentication is on";
2888
+ readonly twoFactorShort: "2FA";
2889
+ };
2890
+ readonly email: {
2891
+ readonly linkFallback: "If the button doesn’t work, paste this link into your browser: {url}";
2892
+ readonly notification: {
2893
+ readonly action: "Open {appName}";
2894
+ readonly footer: "You are receiving this because email notifications are on for your {appName} account. You can turn them off in your notification preferences.";
2895
+ readonly name: "Notification";
2896
+ };
2897
+ readonly passwordReset: {
2898
+ readonly action: "Choose a new password";
2899
+ readonly heading: "Reset your password";
2900
+ readonly intro: "Hi {name}, we received a request to reset the password for {email}.";
2901
+ readonly name: "Password reset";
2902
+ readonly notice: "This link works only once and expires in {expiresInMinutes} minutes. If you didn’t ask to reset your password, you can ignore this email — your current password stays active.";
2903
+ readonly subject: "Reset your {appName} password";
2904
+ };
2905
+ readonly userInvite: {
2906
+ readonly action: "Accept the invitation";
2907
+ readonly heading: "You’ve been invited";
2908
+ readonly intro: "{inviterName} invited you to join {appName}. Accept the invitation to set a password for {email} and sign in.";
2909
+ readonly inviterFallback: "An administrator";
2910
+ readonly name: "Team invitation";
2911
+ readonly notice: "This invitation works only once and expires in {expiresInDays} days. If you weren’t expecting it, you can ignore this email.";
2912
+ readonly subject: "You have been invited to {appName}";
2913
+ };
2061
2914
  };
2062
2915
  };
2063
2916
  export default _default;