@eifi1/ui-kit 0.29.0 → 0.31.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.
Files changed (307) hide show
  1. package/README.md +65 -6
  2. package/dist/account/account-parts.d.ts +21 -0
  3. package/dist/account/account-parts.js +40 -0
  4. package/dist/account/account-parts.js.map +1 -0
  5. package/dist/account/data-export-setting.d.ts +73 -0
  6. package/dist/account/data-export-setting.js +114 -0
  7. package/dist/account/data-export-setting.js.map +1 -0
  8. package/dist/account/delete-account-setting.d.ts +95 -0
  9. package/dist/account/delete-account-setting.js +200 -0
  10. package/dist/account/delete-account-setting.js.map +1 -0
  11. package/dist/account/email-change-setting.d.ts +136 -0
  12. package/dist/account/email-change-setting.js +278 -0
  13. package/dist/account/email-change-setting.js.map +1 -0
  14. package/dist/account/sessions-setting.d.ts +110 -0
  15. package/dist/account/sessions-setting.js +147 -0
  16. package/dist/account/sessions-setting.js.map +1 -0
  17. package/dist/admin/admin-action-confirm.d.ts +95 -0
  18. package/dist/admin/admin-action-confirm.js +276 -0
  19. package/dist/admin/admin-action-confirm.js.map +1 -0
  20. package/dist/admin/admin-action-log.d.ts +105 -0
  21. package/dist/admin/admin-action-log.js +153 -0
  22. package/dist/admin/admin-action-log.js.map +1 -0
  23. package/dist/admin/admin-parts.d.ts +40 -0
  24. package/dist/admin/admin-parts.js +45 -0
  25. package/dist/admin/admin-parts.js.map +1 -0
  26. package/dist/admin/invitations-panel.d.ts +95 -0
  27. package/dist/admin/invitations-panel.js +290 -0
  28. package/dist/admin/invitations-panel.js.map +1 -0
  29. package/dist/admin/reviewer-scope-editor.d.ts +95 -0
  30. package/dist/admin/reviewer-scope-editor.js +134 -0
  31. package/dist/admin/reviewer-scope-editor.js.map +1 -0
  32. package/dist/admin/role-select.d.ts +95 -0
  33. package/dist/admin/role-select.js +128 -0
  34. package/dist/admin/role-select.js.map +1 -0
  35. package/dist/admin/transfer-ownership-dialog.d.ts +95 -0
  36. package/dist/admin/transfer-ownership-dialog.js +83 -0
  37. package/dist/admin/transfer-ownership-dialog.js.map +1 -0
  38. package/dist/admin/user-roster.d.ts +95 -0
  39. package/dist/admin/user-roster.js +285 -0
  40. package/dist/admin/user-roster.js.map +1 -0
  41. package/dist/auth/auth-errors.d.ts +103 -6
  42. package/dist/auth/auth-errors.js +68 -2
  43. package/dist/auth/auth-errors.js.map +1 -1
  44. package/dist/auth/forgot-password-form.d.ts +10 -3
  45. package/dist/auth/forgot-password-form.js +6 -3
  46. package/dist/auth/forgot-password-form.js.map +1 -1
  47. package/dist/auth/register-form.d.ts +21 -12
  48. package/dist/auth/register-form.js +6 -4
  49. package/dist/auth/register-form.js.map +1 -1
  50. package/dist/auth/reset-password-form.d.ts +10 -3
  51. package/dist/auth/reset-password-form.js +6 -3
  52. package/dist/auth/reset-password-form.js.map +1 -1
  53. package/dist/auth/sign-in-form.d.ts +75 -9
  54. package/dist/auth/sign-in-form.js +105 -15
  55. package/dist/auth/sign-in-form.js.map +1 -1
  56. package/dist/auth/verify-email.d.ts +7 -2
  57. package/dist/auth/verify-email.js +44 -8
  58. package/dist/auth/verify-email.js.map +1 -1
  59. package/dist/chart.d.ts +20 -11
  60. package/dist/components/account-chips.d.ts +47 -7
  61. package/dist/components/account-chips.js +19 -3
  62. package/dist/components/account-chips.js.map +1 -1
  63. package/dist/components/account-settings-labels.d.ts +24 -1
  64. package/dist/components/account-settings-labels.js +6 -2
  65. package/dist/components/account-settings-labels.js.map +1 -1
  66. package/dist/components/account-settings.d.ts +69 -8
  67. package/dist/components/account-settings.js +133 -25
  68. package/dist/components/account-settings.js.map +1 -1
  69. package/dist/components/amount-input.d.ts +21 -12
  70. package/dist/components/button-group.d.ts +21 -12
  71. package/dist/components/calculator.d.ts +21 -12
  72. package/dist/components/confirm-dialog.d.ts +21 -12
  73. package/dist/components/copy-button.d.ts +18 -9
  74. package/dist/components/danger-confirm.d.ts +21 -12
  75. package/dist/components/data-table.js +8 -1
  76. package/dist/components/data-table.js.map +1 -1
  77. package/dist/components/date-picker.js +9 -4
  78. package/dist/components/date-picker.js.map +1 -1
  79. package/dist/components/facing-pair.d.ts +21 -12
  80. package/dist/components/file-button.d.ts +21 -12
  81. package/dist/components/file-dropzone.d.ts +21 -12
  82. package/dist/components/form-actions.d.ts +21 -12
  83. package/dist/components/iban-input.d.ts +21 -12
  84. package/dist/components/language-select.d.ts +21 -12
  85. package/dist/components/legal-page.d.ts +21 -12
  86. package/dist/components/legal.d.ts +21 -12
  87. package/dist/components/money-field.d.ts +21 -12
  88. package/dist/components/number-field.d.ts +21 -12
  89. package/dist/components/number-input.d.ts +21 -12
  90. package/dist/components/numpad-sheet.d.ts +21 -12
  91. package/dist/components/passkeys-setting.js +2 -1
  92. package/dist/components/passkeys-setting.js.map +1 -1
  93. package/dist/components/phone-input.d.ts +21 -12
  94. package/dist/components/series-chart.d.ts +21 -12
  95. package/dist/components/settings-fields.d.ts +55 -13
  96. package/dist/components/settings-fields.js +20 -1
  97. package/dist/components/settings-fields.js.map +1 -1
  98. package/dist/components/share-card.d.ts +20 -11
  99. package/dist/components/text-link.d.ts +21 -12
  100. package/dist/components/time-input.d.ts +21 -12
  101. package/dist/components/ui.d.ts +17 -8
  102. package/dist/{register-form-V1OeNlMr.d.ts → delete-account-setting-DCFS5Vof.d.ts} +6612 -5612
  103. package/dist/demo/demo-banner.d.ts +51 -0
  104. package/dist/demo/demo-banner.js +97 -0
  105. package/dist/demo/demo-banner.js.map +1 -0
  106. package/dist/demo/demo-countdown.d.ts +58 -0
  107. package/dist/demo/demo-countdown.js +79 -0
  108. package/dist/demo/demo-countdown.js.map +1 -0
  109. package/dist/demo/demo-ended.d.ts +45 -0
  110. package/dist/demo/demo-ended.js +42 -0
  111. package/dist/demo/demo-ended.js.map +1 -0
  112. package/dist/demo/demo-labels.d.ts +53 -0
  113. package/dist/demo/demo-labels.js +29 -0
  114. package/dist/demo/demo-labels.js.map +1 -0
  115. package/dist/demo/demo-session.d.ts +30 -0
  116. package/dist/demo/demo-session.js +8 -0
  117. package/dist/demo/demo-session.js.map +1 -0
  118. package/dist/demo/demo-start.d.ts +54 -0
  119. package/dist/demo/demo-start.js +68 -0
  120. package/dist/demo/demo-start.js.map +1 -0
  121. package/dist/feedback/feedback-attachment.d.ts +21 -12
  122. package/dist/feedback/feedback-context.d.ts +21 -12
  123. package/dist/feedback/feedback-crash.d.ts +21 -12
  124. package/dist/feedback/feedback-dialog.d.ts +21 -12
  125. package/dist/feedback/feedback-inbox.d.ts +21 -12
  126. package/dist/feedback/feedback-inbox.js +12 -2
  127. package/dist/feedback/feedback-inbox.js.map +1 -1
  128. package/dist/feedback/feedback-labels.d.ts +21 -12
  129. package/dist/feedback/feedback-labels.js +1 -0
  130. package/dist/feedback/feedback-labels.js.map +1 -1
  131. package/dist/feedback/feedback-menu.d.ts +21 -12
  132. package/dist/feedback/feedback-record.d.ts +21 -12
  133. package/dist/feedback/feedback-record.js +2 -0
  134. package/dist/feedback/feedback-record.js.map +1 -1
  135. package/dist/feedback/feedback-row-detail.d.ts +21 -12
  136. package/dist/feedback/feedback-row-detail.js +7 -0
  137. package/dist/feedback/feedback-row-detail.js.map +1 -1
  138. package/dist/feedback/feedback-status-undo.d.ts +21 -12
  139. package/dist/feedback/feedback-submit.d.ts +21 -12
  140. package/dist/feedback/feedback-swipe.d.ts +22 -13
  141. package/dist/feedback/feedback-swipe.js.map +1 -1
  142. package/dist/feedback/feedback-table.d.ts +18 -9
  143. package/dist/feedback/feedback-thread.d.ts +21 -12
  144. package/dist/feedback.d.ts +21 -12
  145. package/dist/hooks/use-anchored-panel.d.ts +6 -2
  146. package/dist/hooks/use-anchored-panel.js +2 -1
  147. package/dist/hooks/use-anchored-panel.js.map +1 -1
  148. package/dist/hooks/use-file-drop.d.ts +21 -12
  149. package/dist/i18n/defaults.d.ts +21 -12
  150. package/dist/i18n/defaults.js +28 -0
  151. package/dist/i18n/defaults.js.map +1 -1
  152. package/dist/i18n/german.d.ts +21 -12
  153. package/dist/i18n/german.js +298 -12
  154. package/dist/i18n/german.js.map +1 -1
  155. package/dist/i18n/kit-labels.d.ts +14 -5
  156. package/dist/i18n/kit-labels.js.map +1 -1
  157. package/dist/i18n/languages.d.ts +15 -6
  158. package/dist/i18n/locales/de-CH.d.ts +21 -12
  159. package/dist/i18n/locales/en.d.ts +21 -12
  160. package/dist/i18n/locales/es.d.ts +21 -12
  161. package/dist/i18n/locales/es.js +287 -10
  162. package/dist/i18n/locales/es.js.map +1 -1
  163. package/dist/i18n/locales/fr.d.ts +21 -12
  164. package/dist/i18n/locales/fr.js +290 -7
  165. package/dist/i18n/locales/fr.js.map +1 -1
  166. package/dist/i18n/locales/hu.d.ts +21 -12
  167. package/dist/i18n/locales/hu.js +288 -12
  168. package/dist/i18n/locales/hu.js.map +1 -1
  169. package/dist/i18n/locales/it.d.ts +21 -12
  170. package/dist/i18n/locales/it.js +289 -7
  171. package/dist/i18n/locales/it.js.map +1 -1
  172. package/dist/i18n/locales/zh.d.ts +21 -12
  173. package/dist/i18n/locales/zh.js +279 -7
  174. package/dist/i18n/locales/zh.js.map +1 -1
  175. package/dist/i18n/review.d.ts +21 -12
  176. package/dist/i18n/review.js +50 -1
  177. package/dist/i18n/review.js.map +1 -1
  178. package/dist/index.d.ts +31 -4
  179. package/dist/index.js +148 -0
  180. package/dist/index.js.map +1 -1
  181. package/dist/landing/access.d.ts +48 -0
  182. package/dist/landing/access.js +38 -0
  183. package/dist/landing/access.js.map +1 -0
  184. package/dist/landing/landing-actions.d.ts +138 -0
  185. package/dist/landing/landing-actions.js +39 -0
  186. package/dist/landing/landing-actions.js.map +1 -0
  187. package/dist/landing/landing-labels.d.ts +43 -0
  188. package/dist/landing/landing-labels.js +23 -0
  189. package/dist/landing/landing-labels.js.map +1 -0
  190. package/dist/landing/landing-sections.d.ts +218 -0
  191. package/dist/landing/landing-sections.js +167 -0
  192. package/dist/landing/landing-sections.js.map +1 -0
  193. package/dist/landing/page-seo.d.ts +99 -0
  194. package/dist/landing/page-seo.js +121 -0
  195. package/dist/landing/page-seo.js.map +1 -0
  196. package/dist/landing/public-header.d.ts +148 -0
  197. package/dist/landing/public-header.js +49 -0
  198. package/dist/landing/public-header.js.map +1 -0
  199. package/dist/landing/routing.d.ts +218 -0
  200. package/dist/landing/routing.js +81 -0
  201. package/dist/landing/routing.js.map +1 -0
  202. package/dist/rhf/fields.d.ts +21 -12
  203. package/dist/rhf/form.d.ts +21 -12
  204. package/dist/rhf.d.ts +21 -12
  205. package/dist/settings/settings-catalogue.d.ts +84 -0
  206. package/dist/settings/settings-catalogue.js +47 -0
  207. package/dist/settings/settings-catalogue.js.map +1 -0
  208. package/dist/settings/settings-context.d.ts +31 -0
  209. package/dist/settings/settings-context.js +11 -0
  210. package/dist/settings/settings-context.js.map +1 -0
  211. package/dist/settings/settings-heading.d.ts +50 -0
  212. package/dist/settings/settings-heading.js +27 -0
  213. package/dist/settings/settings-heading.js.map +1 -0
  214. package/dist/settings/settings-labels.d.ts +41 -0
  215. package/dist/settings/settings-labels.js +38 -0
  216. package/dist/settings/settings-labels.js.map +1 -0
  217. package/dist/settings/settings-layout.d.ts +77 -0
  218. package/dist/settings/settings-layout.js +242 -0
  219. package/dist/settings/settings-layout.js.map +1 -0
  220. package/dist/settings/settings-section.d.ts +133 -0
  221. package/dist/settings/settings-section.js +63 -0
  222. package/dist/settings/settings-section.js.map +1 -0
  223. package/dist/settings/use-account-language.d.ts +83 -0
  224. package/dist/settings/use-account-language.js +62 -0
  225. package/dist/settings/use-account-language.js.map +1 -0
  226. package/dist/settings/use-settings-focus.d.ts +34 -0
  227. package/dist/settings/use-settings-focus.js +77 -0
  228. package/dist/settings/use-settings-focus.js.map +1 -0
  229. package/dist/settings/use-settings-route.d.ts +118 -0
  230. package/dist/settings/use-settings-route.js +120 -0
  231. package/dist/settings/use-settings-route.js.map +1 -0
  232. package/dist/shell/app-shell.d.ts +27 -12
  233. package/dist/shell/app-shell.js +3 -2
  234. package/dist/shell/app-shell.js.map +1 -1
  235. package/dist/shell/top-bar-brand.d.ts +21 -12
  236. package/dist/shell.d.ts +25 -6
  237. package/dist/shell.js +56 -0
  238. package/dist/shell.js.map +1 -1
  239. package/dist/wizard/stepper-nav.d.ts +21 -12
  240. package/dist/wizard.d.ts +21 -12
  241. package/package.json +2 -1
  242. package/src/account/account-parts.ts +67 -0
  243. package/src/account/data-export-setting.tsx +219 -0
  244. package/src/account/delete-account-setting.tsx +363 -0
  245. package/src/account/email-change-setting.tsx +454 -0
  246. package/src/account/sessions-setting.tsx +284 -0
  247. package/src/admin/admin-action-confirm.tsx +495 -0
  248. package/src/admin/admin-action-log.tsx +297 -0
  249. package/src/admin/admin-parts.ts +82 -0
  250. package/src/admin/invitations-panel.tsx +523 -0
  251. package/src/admin/reviewer-scope-editor.tsx +234 -0
  252. package/src/admin/role-select.tsx +286 -0
  253. package/src/admin/transfer-ownership-dialog.tsx +172 -0
  254. package/src/admin/user-roster.tsx +573 -0
  255. package/src/auth/auth-errors.ts +196 -8
  256. package/src/auth/forgot-password-form.tsx +21 -5
  257. package/src/auth/register-form.tsx +24 -6
  258. package/src/auth/reset-password-form.tsx +19 -5
  259. package/src/auth/sign-in-form.tsx +241 -38
  260. package/src/auth/verify-email.tsx +59 -8
  261. package/src/components/account-chips.tsx +64 -7
  262. package/src/components/account-settings-labels.ts +28 -1
  263. package/src/components/account-settings.tsx +231 -34
  264. package/src/components/data-table.tsx +8 -0
  265. package/src/components/date-picker.tsx +9 -4
  266. package/src/components/passkeys-setting.tsx +2 -1
  267. package/src/components/settings-fields.tsx +50 -1
  268. package/src/demo/demo-banner.tsx +159 -0
  269. package/src/demo/demo-countdown.ts +141 -0
  270. package/src/demo/demo-ended.tsx +89 -0
  271. package/src/demo/demo-labels.ts +78 -0
  272. package/src/demo/demo-session.ts +32 -0
  273. package/src/demo/demo-start.tsx +150 -0
  274. package/src/feedback/feedback-inbox.tsx +21 -8
  275. package/src/feedback/feedback-labels.ts +2 -1
  276. package/src/feedback/feedback-record.ts +10 -7
  277. package/src/feedback/feedback-row-detail.tsx +28 -4
  278. package/src/feedback/feedback-swipe.tsx +1 -1
  279. package/src/hooks/use-anchored-panel.ts +14 -3
  280. package/src/i18n/defaults.ts +28 -0
  281. package/src/i18n/german.ts +327 -5
  282. package/src/i18n/kit-labels.tsx +42 -0
  283. package/src/i18n/locales/es.ts +313 -3
  284. package/src/i18n/locales/fr.ts +316 -0
  285. package/src/i18n/locales/hu.ts +308 -5
  286. package/src/i18n/locales/it.ts +313 -0
  287. package/src/i18n/locales/zh.ts +286 -0
  288. package/src/i18n/review.ts +49 -0
  289. package/src/index.ts +184 -0
  290. package/src/landing/access.ts +97 -0
  291. package/src/landing/landing-actions.tsx +92 -0
  292. package/src/landing/landing-labels.ts +59 -0
  293. package/src/landing/landing-sections.tsx +337 -0
  294. package/src/landing/page-seo.ts +251 -0
  295. package/src/landing/public-header.tsx +120 -0
  296. package/src/landing/routing.tsx +209 -0
  297. package/src/settings/settings-catalogue.ts +132 -0
  298. package/src/settings/settings-context.ts +33 -0
  299. package/src/settings/settings-heading.tsx +65 -0
  300. package/src/settings/settings-labels.ts +75 -0
  301. package/src/settings/settings-layout.tsx +379 -0
  302. package/src/settings/settings-section.tsx +108 -0
  303. package/src/settings/use-account-language.ts +146 -0
  304. package/src/settings/use-settings-focus.ts +120 -0
  305. package/src/settings/use-settings-route.ts +258 -0
  306. package/src/shell/app-shell.tsx +10 -2
  307. package/src/shell.ts +45 -0
@@ -13,6 +13,13 @@ import type { UiKitLabels } from "../kit-labels";
13
13
  export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
14
14
  const num = new Intl.NumberFormat(numberLocale);
15
15
  const n = (value: number) => num.format(value);
16
+ // 0.30.0 — a throttled request (HTTP 429), as `englishRateLimited` in
17
+ // src/auth/auth-errors.ts: no wait → "稍候", under a minute → seconds, else minutes
18
+ // rounded up. The numeral has a space either side, as everywhere in this catalogue.
19
+ const wait = (seconds: number) =>
20
+ seconds < 60 ? `${n(Math.ceil(seconds))} 秒` : `${n(Math.ceil(seconds / 60))} 分钟`;
21
+ const rateLimited = (seconds?: number) =>
22
+ !seconds || seconds <= 0 ? "尝试次数过多,请稍候再试。" : `尝试次数过多,请 ${wait(seconds)}后重试。`;
16
23
 
17
24
  return {
18
25
  feedbackAttachment: {
@@ -57,6 +64,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
57
64
  // 0.27.0. 反馈 for feedback, as `feedbackDialog`; 返工 for rework.
58
65
  feedbackStatus: {
59
66
  OPEN: "待处理",
67
+ READY: "待实现",
60
68
  IN_PROGRESS: "处理中",
61
69
  IN_EVALUATION: "评估中",
62
70
  NEEDS_LIVE_TEST: "待线上测试",
@@ -115,6 +123,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
115
123
  phoneActions: "反馈操作",
116
124
  },
117
125
  feedbackDetail: {
126
+ subject: "主题",
118
127
  body: "描述",
119
128
  edit: "编辑",
120
129
  editDescription: "编辑描述",
@@ -146,6 +155,9 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
146
155
  memberSince: "注册时间",
147
156
  displayName: "显示名称",
148
157
  save: "保存",
158
+ firstName: "名字",
159
+ lastName: "姓氏",
160
+ nameRequired: "请同时填写名字和姓氏。",
149
161
  },
150
162
  password: {
151
163
  title: "修改密码",
@@ -170,6 +182,8 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
170
182
  qrAlt: "身份验证器应用的二维码",
171
183
  secretHint: "无法扫描?请改为在应用中输入此密钥:",
172
184
  copySecret: "复制密钥",
185
+ // 0.31.0: the card's title; the state ("已开启") stands beside it.
186
+ title: "双重验证",
173
187
  },
174
188
  passkeys: {
175
189
  title: "通行密钥",
@@ -682,6 +696,8 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
682
696
  registered: "已注册",
683
697
  unverified: "未验证",
684
698
  passwordChange: "需修改密码",
699
+ deletion: "已申请删除",
700
+ deletionOn: (date) => `将于 ${date} 删除`,
685
701
  },
686
702
  shareCard: {
687
703
  dialogTitle: "共享",
@@ -847,6 +863,15 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
847
863
  setPasswordFailed: "无法设置密码。",
848
864
  expired: "本次登录已过期,请重新登录。",
849
865
  backToSignIn: "返回登录",
866
+ useRecoveryCode: "使用备用码",
867
+ useAuthenticatorCode: "使用身份验证器应用",
868
+ recoveryCode: "备用码",
869
+ recoveryIntro: "请输入您在开启双重验证时保存的备用码之一。",
870
+ recoveryCodeHint: (length) => `共 ${n(length)} 位字母和数字,连字符和空格不影响。`,
871
+ recoveryCodeInvalid: "此备用码无效或已被使用。",
872
+ rateLimited,
873
+ // 0.31.0: the same words as `landing.requestAccess`.
874
+ requestAccess: "申请访问权限",
850
875
  },
851
876
  register: {
852
877
  firstName: "名字",
@@ -869,6 +894,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
869
894
  invitationInvalid: "此邀请链接无效。",
870
895
  invitationExpired: "此邀请已过期,请索取新的邀请。",
871
896
  failed: "注册失败,请重试。",
897
+ rateLimited,
872
898
  },
873
899
  completeName: {
874
900
  title: "完善您的姓名",
@@ -888,6 +914,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
888
914
  sentHint: "该链接有效期一小时,且仅可使用一次。也请查看垃圾邮件文件夹。",
889
915
  backToSignIn: "返回登录",
890
916
  error: "请求失败,请稍后重试。",
917
+ rateLimited,
891
918
  },
892
919
  resetPassword: {
893
920
  title: "设置新密码",
@@ -905,6 +932,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
905
932
  success: "您的密码已修改,现在可以用它登录了。",
906
933
  sessionsEnded: "已登录的设备均已退出登录——您需要在这些设备上重新登录。",
907
934
  signIn: "前往登录",
935
+ rateLimited,
908
936
  },
909
937
  verifyEmail: {
910
938
  title: "确认您的电子邮箱地址",
@@ -952,6 +980,189 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
952
980
  currentMark: "(当前)",
953
981
  switching: "正在切换公司…",
954
982
  },
983
+ // 0.30.0 — docs/user-admin-harmonization.md: Kurvenschmiede's reviewed Chinese for the
984
+ // admin words (停用、角色、审校者), transfer (移交), invitations and sessions;
985
+ // written fresh where it had no sentence.
986
+ emailChange: {
987
+ title: "电子邮箱地址",
988
+ current: "当前地址",
989
+ newEmail: "新电子邮箱地址",
990
+ password: "当前密码",
991
+ passwordHint: "您使用此地址登录,因此更改它需要输入密码。",
992
+ emailTagUse: (address) => `使用 ${address}`,
993
+ emailTagHint:
994
+ "许多邮件服务商会把发往 name+tag@… 的邮件投递到同一个收件箱,这样本应用发来的邮件便于筛选和追溯。请先确认您的服务商支持这一点再使用:之后您需要用带标签的地址登录。",
995
+ submit: "更改电子邮箱地址",
996
+ sameAsCurrent: "这已经是您的地址。",
997
+ emailTaken: "该电子邮箱地址已有账户。",
998
+ wrongPassword: "密码不正确。",
999
+ pending: (newEmail) => `请点击我们发送到 ${newEmail} 的链接进行确认。`,
1000
+ pendingHint: (currentEmail) => `在此之前,您仍使用 ${currentEmail} 登录。也请查看垃圾邮件文件夹。`,
1001
+ resend: "重新发送链接",
1002
+ resent: "链接已重新发送。",
1003
+ cancel: "取消更改",
1004
+ confirmed: (email) => `您的电子邮箱地址现在是 ${email}。`,
1005
+ passkeyNote: "您的通行密钥仍可正常使用。您的设备可能仍以旧地址列出它们。",
1006
+ rateLimited,
1007
+ failed: "操作未成功,请重试。",
1008
+ },
1009
+ sessions: {
1010
+ title: "会话",
1011
+ description: "在不再使用或不信任的设备上登录过?请在所有设备上退出登录。",
1012
+ signOutEverywhere: "在所有设备上退出登录…",
1013
+ signOutEverywherePrompt: "这将结束所有会话,包括当前会话:此设备也会退出登录,您需要在这里重新登录。",
1014
+ confirmSignOutEverywhere: "在所有设备上退出登录",
1015
+ list: "您已登录的设备",
1016
+ loading: "正在加载会话…",
1017
+ empty: "没有可显示的会话。",
1018
+ current: "此设备",
1019
+ unknownDevice: "未知设备",
1020
+ lastActive: (when) => `上次活动:${when}`,
1021
+ ip: (address) => `IP:${address}`,
1022
+ revoke: "退出登录",
1023
+ // Starts with `revoke`, the button's visible text, for voice control.
1024
+ revokeItem: (device) => `退出登录:${device}`,
1025
+ failed: "操作未成功,请重试。",
1026
+ },
1027
+ deleteAccount: {
1028
+ title: "删除账户",
1029
+ afterDays: (days) => `您的账户将立即停用,并在 ${n(days)} 天后被永久删除。`,
1030
+ operator: "您的账户将立即停用,之后由运营者将其永久删除。",
1031
+ arm: "删除账户…",
1032
+ prompt: "您将在所有设备上退出登录,且无法再使用此账户。",
1033
+ handOver: (count) => `${n(count)} 项他人可见的内容将移交给一位管理员。`,
1034
+ confirm: "删除我的账户",
1035
+ done: "您的账户已停用,正在退出登录。",
1036
+ wrongPassword: "密码不正确。",
1037
+ confirmationMismatch: "这不是您账户的地址。",
1038
+ lastAdmin: "您是最后一位管理员。请先将其他人设为管理员。",
1039
+ lastAdminOf: (companies) => `您是 ${companies} 的最后一位管理员。请先在那里将其他人设为管理员。`,
1040
+ householdHasMembers: "您的家庭还有其他成员,因此无法在此删除账户。请联系运营者。",
1041
+ rateLimited,
1042
+ failed: "无法删除您的账户,请重试。",
1043
+ },
1044
+ dataExport: {
1045
+ title: "导出您的数据",
1046
+ description: "下载您账户数据的副本(JSON 文件)。",
1047
+ download: "下载我的数据",
1048
+ started: "下载已开始。",
1049
+ saveAgain: "没有开始?保存文件",
1050
+ rateLimited: (seconds) =>
1051
+ seconds && seconds > 0
1052
+ ? `您刚刚导出过数据,请 ${wait(seconds)}后重试。`
1053
+ : "您刚刚导出过数据,请一分钟后重试。",
1054
+ failed: "导出失败,请重试。",
1055
+ },
1056
+ userRoster: {
1057
+ name: "姓名",
1058
+ email: "电子邮箱",
1059
+ role: "角色",
1060
+ state: "状态",
1061
+ created: "创建时间",
1062
+ lastLogin: "最后登录",
1063
+ never: "从未",
1064
+ actions: "操作",
1065
+ actionsFor: (name) => `${name} 的操作`,
1066
+ },
1067
+ roleSelect: {
1068
+ label: "角色",
1069
+ rolesLegend: "角色",
1070
+ roleOf: (name) => `${name} 的角色`,
1071
+ lockedLastAdmin: "最后一位活跃管理员必须保留此角色。",
1072
+ lockedSelf: "您不能更改自己的角色。",
1073
+ notForLastAdmin: "不适用于最后一位管理员",
1074
+ notForSelf: "不适用于您自己的账户",
1075
+ unavailable: (role, reason) => `${role}(${reason})`,
1076
+ },
1077
+ reviewerScope: {
1078
+ languages: "语言",
1079
+ hint: "勾选此人负责审校的语言。",
1080
+ none: "未选择语言:保存后将取消审校者角色。",
1081
+ areas: "仅限",
1082
+ legalOnly: "仅法律页面",
1083
+ legalOnlyHint: "运营者信息、隐私政策和使用条款——适合律师而非母语审校者。",
1084
+ failed: "无法保存审校范围,请重试。",
1085
+ },
1086
+ adminAction: {
1087
+ confirm: "确认",
1088
+ cancel: "取消",
1089
+ close: "关闭",
1090
+ lastAdmin: "这是最后一位活跃管理员。请先将其他人设为管理员。",
1091
+ self: "不能对您自己的账户执行此操作。",
1092
+ confirmationMismatch: "该地址与此账户不符。请检查您当前所在的账户。",
1093
+ otherCompanies:
1094
+ "此账户也属于其他公司,因此只有平台运营者才能执行此操作。您可以改为将其从本公司移除。",
1095
+ removeFromCompany: "从公司移除",
1096
+ failed: "操作未成功,请重试。",
1097
+ },
1098
+ adminActionLog: {
1099
+ title: "管理操作",
1100
+ empty: "暂无管理操作。",
1101
+ loading: "加载中…",
1102
+ by: (actor) => `操作者:${actor}`,
1103
+ bySelf: "用户本人",
1104
+ automatic: "自动执行",
1105
+ erased: "已删除的账户",
1106
+ filteredTo: (target) => `仅 ${target}`,
1107
+ showAll: "显示全部操作",
1108
+ filterBy: (target) => `仅显示针对 ${target} 的操作`,
1109
+ actions: {
1110
+ deactivate: "已停用",
1111
+ reactivate: "已重新激活",
1112
+ role: "角色已更改",
1113
+ membership_remove: "已从公司移除",
1114
+ password_change_require: "已要求设置新密码",
1115
+ password_change_withdraw: "已撤回新密码要求",
1116
+ mail_verification: "已发送确认邮件",
1117
+ mail_reset: "已发送密码重置邮件",
1118
+ reviewer: "审校范围已更改",
1119
+ invite: "已邀请",
1120
+ invite_resend: "已重新发送邀请",
1121
+ invite_revoke: "已撤回邀请",
1122
+ transfer: "工作已移交",
1123
+ deletion_request: "已申请删除",
1124
+ deletion_cancel: "已取消删除",
1125
+ erase: "账户已永久删除",
1126
+ },
1127
+ },
1128
+ transferOwnership: {
1129
+ title: (name) => `移交 ${name} 的工作`,
1130
+ body: "此账户拥有的全部内容将一次性转移到您选择的账户。",
1131
+ recipient: "移交给",
1132
+ choose: "选择账户…",
1133
+ chooseFirst: "请选择接收工作的人",
1134
+ confirm: "移交",
1135
+ customer: "客户",
1136
+ deactivated: "已停用",
1137
+ self: "同一账户",
1138
+ unavailable: (account, reason) => `${account}(${reason})`,
1139
+ noCandidates: "没有其他账户可以接收。",
1140
+ },
1141
+ invitations: {
1142
+ email: "电子邮箱地址",
1143
+ invalidEmail: "请输入完整的电子邮箱地址。",
1144
+ role: "角色",
1145
+ scope: "范围",
1146
+ scopeNone: "无",
1147
+ language: "邀请邮件语言",
1148
+ note: "备注",
1149
+ invite: "邀请",
1150
+ listTitle: "邀请",
1151
+ empty: "尚未邀请任何人。",
1152
+ loading: "加载中…",
1153
+ status: { open: "等待中", accepted: "已接受", expired: "已过期", revoked: "已撤回" },
1154
+ sent: (date) => `发送于 ${date}`,
1155
+ expires: (date) => `${date} 到期`,
1156
+ invitedBy: (name) => `邀请人:${name}`,
1157
+ resend: (email) => `向 ${email} 发送新链接`,
1158
+ copyLink: "复制邀请链接",
1159
+ revoke: (email) => `撤回对 ${email} 的邀请`,
1160
+ consoleHint:
1161
+ "此服务器不发送邮件——邮件会写入服务器日志。请在这里复制每个邀请链接并自行转交:链接只显示一次。",
1162
+ linkReady: (email) => `${email} 的邀请链接,仅显示这一次:`,
1163
+ notSent: (email) => `已邀请 ${email},但邮件未能发送。请重新发送。`,
1164
+ failed: "操作未成功,请重试。",
1165
+ },
955
1166
  characterCount: {
956
1167
  count: (used, max) => `已输入 ${n(used)}/${n(max)} 个字符`,
957
1168
  remaining: (left) => `还可输入 ${n(left)} 个字符`,
@@ -1071,6 +1282,81 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
1071
1282
  ? `通过“${group}”中的未审校文本?`
1072
1283
  : `通过“${group}”中全部 ${n(count)} 条未审校文本(包括未显示在屏幕上的)?`,
1073
1284
  },
1285
+ // 0.31.0 — docs/settings-harmonization.md §4.3 and docs/landing-demo-harmonization.md
1286
+ // §4–§5: the settings shell, the landing page's generic words and the demo. The help
1287
+ // lines name things as `accountSettings`, `sessions` and `dataExport` do; "访问权限"
1288
+ // as `shareCard`. A space either side of a numeral or a Latin name.
1289
+ settings: {
1290
+ title: "设置",
1291
+ search: "搜索设置",
1292
+ searchPlaceholder: "搜索设置…",
1293
+ results: "匹配的设置",
1294
+ noMatches: (query) => `没有与“${query}”匹配的设置。`,
1295
+ // As `commandPalette.clear`.
1296
+ clearSearch: "清除搜索",
1297
+ back: "返回设置",
1298
+ sections: "设置分类",
1299
+ matchCount: (count) => `${n(count)} 个匹配项`,
1300
+ groups: {
1301
+ appearance: {
1302
+ title: "外观",
1303
+ help: "语言、主题,以及应用在此设备上的外观。",
1304
+ },
1305
+ account: {
1306
+ title: "账户",
1307
+ help: "您的个人资料和电子邮箱地址。",
1308
+ },
1309
+ security: {
1310
+ title: "安全",
1311
+ help: "您的登录方式:密码、双重验证码、通行密钥和会话。",
1312
+ },
1313
+ notifications: {
1314
+ title: "通知",
1315
+ help: "您会收到哪些通知、何时收到,以及在哪些设备上收到。",
1316
+ },
1317
+ data: {
1318
+ title: "数据",
1319
+ help: "导出属于您的数据,或将其连同账户一并删除。",
1320
+ },
1321
+ },
1322
+ },
1323
+ landing: {
1324
+ signIn: "登录",
1325
+ requestAccess: "申请访问权限",
1326
+ getStarted: "开始使用",
1327
+ tryDemo: "体验演示",
1328
+ openApp: "打开应用",
1329
+ continueDemo: "继续演示",
1330
+ beta: "测试版",
1331
+ // Plain text: a mail's subject and body lines, never HTML. Full-width colons.
1332
+ accessSubject: (app) => (app ? `申请访问 ${app}` : "访问权限申请"),
1333
+ accessName: "姓名:",
1334
+ accessCompany: "公司:",
1335
+ accessUse: "用途:",
1336
+ },
1337
+ demo: {
1338
+ starting: "正在启动演示…",
1339
+ rateLimited: (minutes) =>
1340
+ minutes
1341
+ ? `来自此网络的演示过多,请 ${n(minutes)} 分钟后重试。`
1342
+ : "来自此网络的演示过多,请稍后重试。",
1343
+ capacity: "演示名额已满,请稍后重试。",
1344
+ unavailable: "演示暂不可用。",
1345
+ failed: "无法启动演示,请重试。",
1346
+ // As `legal.backHome`.
1347
+ backToStart: "返回首页",
1348
+ hoursLeft: (hours, minutes) => `演示 · 剩余 ${n(hours)} 小时 ${n(minutes)} 分钟`,
1349
+ minutesLeft: (minutes) => `演示 · 剩余 ${n(minutes)} 分钟`,
1350
+ badge: "演示",
1351
+ readOnly: "您正在查看示例数据,无法进行修改。",
1352
+ sandbox: "您自己创建的内容将在演示结束时删除。",
1353
+ details: "演示详情",
1354
+ writeLocked: "演示中无法执行此操作。",
1355
+ endedTitle: "演示已结束",
1356
+ endedReadOnly: "示例数据会定期重置。",
1357
+ endedSandbox: "示例数据会定期重置;您在演示中创建的内容会被删除。",
1358
+ restart: "开始新的演示",
1359
+ },
1074
1360
  };
1075
1361
  }
1076
1362
 
@@ -302,4 +302,53 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
302
302
  "verifyEmail.resendIn": [[30]],
303
303
  "acceptInvitation.joined": [["{{name}}"]],
304
304
  "companySwitcher.current": [["{{name}}"]],
305
+ // 0.30.0: the user administration and the account's own settings
306
+ // (docs/user-admin-harmonization.md). `rateLimited` with and without a wait.
307
+ "signIn.recoveryCodeHint": [[16]],
308
+ "signIn.rateLimited": [[], [30], [300]],
309
+ "register.rateLimited": [[], [30], [300]],
310
+ "forgotPassword.rateLimited": [[], [30], [300]],
311
+ "resetPassword.rateLimited": [[], [30], [300]],
312
+ "emailChange.emailTagUse": [["{{address}}"]],
313
+ "emailChange.pending": [["{{newEmail}}"]],
314
+ "emailChange.pendingHint": [["{{currentEmail}}"]],
315
+ "emailChange.confirmed": [["{{email}}"]],
316
+ "emailChange.rateLimited": [[], [30], [300]],
317
+ "sessions.lastActive": [["{{when}}"]],
318
+ "sessions.ip": [["{{address}}"]],
319
+ "sessions.revokeItem": [["{{device}}"]],
320
+ "deleteAccount.afterDays": [[1], [30]],
321
+ "deleteAccount.handOver": [[1], [3]],
322
+ "deleteAccount.lastAdminOf": [["{{companies}}"]],
323
+ "deleteAccount.rateLimited": [[], [30], [300]],
324
+ "dataExport.rateLimited": [[], [30], [300]],
325
+ "userRoster.actionsFor": [["{{name}}"]],
326
+ "roleSelect.roleOf": [["{{name}}"]],
327
+ "roleSelect.unavailable": [["{{role}}", "{{reason}}"]],
328
+ "adminActionLog.by": [["{{actor}}"]],
329
+ "adminActionLog.filteredTo": [["{{target}}"]],
330
+ "adminActionLog.filterBy": [["{{target}}"]],
331
+ "transferOwnership.title": [["{{name}}"]],
332
+ "transferOwnership.unavailable": [["{{account}}", "{{reason}}"]],
333
+ "invitations.sent": [["{{date}}"]],
334
+ "invitations.expires": [["{{date}}"]],
335
+ "invitations.invitedBy": [["{{name}}"]],
336
+ "invitations.resend": [["{{email}}"]],
337
+ "invitations.revoke": [["{{email}}"]],
338
+ "invitations.linkReady": [["{{email}}"]],
339
+ "invitations.notSent": [["{{email}}"]],
340
+ "accountState.deletionOn": [["{{date}}"]],
341
+ // 0.31.0: the settings shell, the landing page and the demo
342
+ // (docs/settings-harmonization.md, docs/landing-demo-harmonization.md). An optional
343
+ // argument both given and left out: the subject without an app name, the refusal
344
+ // without a `Retry-After`.
345
+ "settings.noMatches": [["{{query}}"]],
346
+ "settings.matchCount": one,
347
+ "landing.accessSubject": [["{{app}}"], [undefined]],
348
+ "demo.rateLimited": [[], [1], [3]],
349
+ "demo.hoursLeft": [
350
+ [1, 1],
351
+ [3, 12],
352
+ ],
353
+ "demo.minutesLeft": one,
305
354
  };
package/src/index.ts CHANGED
@@ -540,6 +540,190 @@ export { formatPersonName, personInitials } from "./lib/person-name";
540
540
  export type { PersonName } from "./lib/person-name";
541
541
  export { CompanySwitcher, DEFAULT_COMPANY_SWITCHER_LABELS } from "./shell/company-switcher";
542
542
  export type { CompanySwitcherProps, CompanySwitcherLabels, CompanySwitcherCompany } from "./shell/company-switcher";
543
+
544
+ // 0.30.0 (docs/user-admin-harmonization.md): the admin user list and its actions, the
545
+ // invitations panel, and the account's own settings — email change, sessions, deletion,
546
+ // export. Callbacks only; the confirmation level is the server's.
547
+ export { isRateLimited, retryAfterSeconds } from "./auth/auth-errors";
548
+ export type { AccountErrorCode, DemoErrorCode, KitErrorCode } from "./auth/auth-errors";
549
+ export { EmailChangeSetting, DEFAULT_EMAIL_CHANGE_LABELS } from "./account/email-change-setting";
550
+ export type {
551
+ EmailChangeSettingProps,
552
+ EmailChangeLabels,
553
+ EmailChangeValues,
554
+ EmailChangeAction,
555
+ } from "./account/email-change-setting";
556
+ export { SessionsSetting, DEFAULT_SESSIONS_LABELS } from "./account/sessions-setting";
557
+ export type { SessionsSettingProps, SessionsLabels, SessionItem, SessionId, SessionsAction } from "./account/sessions-setting";
558
+ export { DeleteAccountSetting, DEFAULT_DELETE_ACCOUNT_LABELS } from "./account/delete-account-setting";
559
+ export type {
560
+ DeleteAccountSettingProps,
561
+ DeleteAccountLabels,
562
+ DeleteAccountValues,
563
+ DeletionMode,
564
+ DeleteAccountConsequence,
565
+ } from "./account/delete-account-setting";
566
+ export { DataExportSetting, DEFAULT_DATA_EXPORT_LABELS } from "./account/data-export-setting";
567
+ export type { DataExportSettingProps, DataExportLabels, DataExportFile } from "./account/data-export-setting";
568
+ export {
569
+ userRosterColumns,
570
+ useUserRosterColumns,
571
+ UserIdentityCell,
572
+ UserRowActions,
573
+ adminUserStates,
574
+ userRosterSort,
575
+ USER_ROSTER_SORT_KEYS,
576
+ DEFAULT_USER_ROSTER_LABELS,
577
+ } from "./admin/user-roster";
578
+ export type {
579
+ UserRosterRow,
580
+ AdminUserStateFields,
581
+ RosterState,
582
+ UserRosterSortKey,
583
+ UserRosterLabels,
584
+ UserIdentityCellProps,
585
+ UserRowAction,
586
+ UserRowActionList,
587
+ UserRowActionsProps,
588
+ RoleEditing,
589
+ UserRosterColumnsOptions,
590
+ } from "./admin/user-roster";
591
+ export { RoleSelect, RolesEditor, DEFAULT_ROLE_SELECT_LABELS } from "./admin/role-select";
592
+ export type { RoleSelectProps, RolesEditorProps, RoleSelectLabels, RoleLock, RoleLockCode } from "./admin/role-select";
593
+ export { ReviewerScopeEditor, DEFAULT_REVIEWER_SCOPE_LABELS } from "./admin/reviewer-scope-editor";
594
+ export type {
595
+ ReviewerScope,
596
+ ReviewerScopeArea,
597
+ ReviewerScopeLanguage,
598
+ ReviewerScopeLabels,
599
+ ReviewerScopeEditorProps,
600
+ } from "./admin/reviewer-scope-editor";
601
+ export { AdminActionConfirm, DEFAULT_ADMIN_ACTION_LABELS } from "./admin/admin-action-confirm";
602
+ export type {
603
+ AdminConfirmLevel,
604
+ AdminActionConfirmValues,
605
+ AdminActionTarget,
606
+ AdminActionLabels,
607
+ AdminActionConfirmProps,
608
+ } from "./admin/admin-action-confirm";
609
+ export { AdminActionLog, ADMIN_ACTION_KINDS, DEFAULT_ADMIN_ACTION_LOG_LABELS } from "./admin/admin-action-log";
610
+ export type {
611
+ AdminActionKind,
612
+ AdminActionLogEntry,
613
+ AdminActionLogLabels,
614
+ AdminActionLogPaging,
615
+ AdminActionLogProps,
616
+ } from "./admin/admin-action-log";
617
+ export { TransferOwnershipDialog, DEFAULT_TRANSFER_OWNERSHIP_LABELS } from "./admin/transfer-ownership-dialog";
618
+ export type {
619
+ TransferCandidate,
620
+ TransferUnavailable,
621
+ TransferValues,
622
+ TransferOwnershipLabels,
623
+ TransferOwnershipDialogProps,
624
+ } from "./admin/transfer-ownership-dialog";
625
+ export { InvitationsPanel, DEFAULT_INVITATIONS_LABELS } from "./admin/invitations-panel";
626
+ export type {
627
+ InvitationStatus,
628
+ InvitationRow,
629
+ InvitationDraft,
630
+ InvitationSentAnswer,
631
+ InvitationScope,
632
+ InvitationsLabels,
633
+ InvitationsPanelProps,
634
+ } from "./admin/invitations-panel";
635
+ export type { AdminPerson } from "./admin/admin-parts";
636
+
637
+ // ── 0.31.0: the settings page and the admin page on one shell (docs/settings-harmonization.md) ──
638
+ // Router-aware: the layout, its route and focus hooks (also in `@eifi1/ui-kit/shell`).
639
+ export { SettingsLayout, SETTINGS_SEARCH_THRESHOLD } from "./settings/settings-layout";
640
+ export type { SettingsLayoutProps, SettingsLayoutWidth } from "./settings/settings-layout";
641
+ export {
642
+ useSettingsRoute,
643
+ resolveSettingsLocation,
644
+ settingsFromListState,
645
+ SETTINGS_FROM_LIST_STATE,
646
+ } from "./settings/use-settings-route";
647
+ export type {
648
+ UseSettingsRouteOptions,
649
+ SettingsRoute,
650
+ SettingsLayoutMode,
651
+ SettingsLocation,
652
+ SettingsLocationRules,
653
+ SettingsLocationResult,
654
+ } from "./settings/use-settings-route";
655
+ export { useSettingsFocus, SETTINGS_FOCUS_RING, SETTINGS_FOCUS_MS } from "./settings/use-settings-focus";
656
+ // The router-free companions: a card, the context, the heading level, the catalogue.
657
+ export { SettingsSection } from "./settings/settings-section";
658
+ export type { SettingsSectionProps } from "./settings/settings-section";
659
+ export { useSettingsLayout } from "./settings/settings-context";
660
+ export type { SettingsLayoutContextValue } from "./settings/settings-context";
661
+ export { SettingsHeadingLevel, useSettingsHeadingLevel } from "./settings/settings-heading";
662
+ export type { SettingsHeadingLevelProps, SettingsHeadingTag } from "./settings/settings-heading";
663
+ export {
664
+ settingsSearchEntries,
665
+ visibleSettingsGroups,
666
+ visibleSettingsEntries,
667
+ settingsHref,
668
+ } from "./settings/settings-catalogue";
669
+ export type { SettingsGroup, SettingsEntry, SettingsSearchEntriesOptions } from "./settings/settings-catalogue";
670
+ export { DEFAULT_SETTINGS_LABELS } from "./settings/settings-labels";
671
+ export type { SettingsLabels, SettingsGroupLabels, SettingsCoreGroup } from "./settings/settings-labels";
672
+ // Only the language follows the account (§6.2).
673
+ export { useAccountLanguage, resolveAccountLanguage, matchOfferedLanguage } from "./settings/use-account-language";
674
+ export type {
675
+ UseAccountLanguageOptions,
676
+ AccountLanguage,
677
+ AccountLanguageSource,
678
+ ResolveAccountLanguageInput,
679
+ ResolvedAccountLanguage,
680
+ } from "./settings/use-account-language";
681
+
682
+ // ── 0.31.0: the public landing page and the demo (docs/landing-demo-harmonization.md) ──
683
+ export { DEFAULT_LANDING_LABELS, useLandingLabels } from "./landing/landing-labels";
684
+ export type { LandingLabels } from "./landing/landing-labels";
685
+ export { accessAction, useAccessAction } from "./landing/access";
686
+ export type { AccessChoice, AccessLink, AccessLabels } from "./landing/access";
687
+ export { LandingActions } from "./landing/landing-actions";
688
+ export type { LandingActionsProps, LandingSession } from "./landing/landing-actions";
689
+ export { Hero, FeatureRows, FeatureRow, TrustStrip, CtaBand, PublicFooter } from "./landing/landing-sections";
690
+ export type {
691
+ HeroProps,
692
+ FeatureRowsProps,
693
+ FeatureRowProps,
694
+ TrustItem,
695
+ TrustStripProps,
696
+ CtaBandProps,
697
+ PublicFooterProps,
698
+ } from "./landing/landing-sections";
699
+ export { usePageSeo, seoCopyProblems, metaContent } from "./landing/page-seo";
700
+ export type { SeoCopy, SeoCopyLimits, SeoCopyProblem, SeoCopyProblemCode } from "./landing/page-seo";
701
+ // Router-aware (also in `@eifi1/ui-kit/shell`): the header and the resume.
702
+ export {
703
+ RootEntry,
704
+ RedirectIfAuthed,
705
+ useLastVisitedPage,
706
+ readLastVisitedPage,
707
+ clearLastVisitedPage,
708
+ safeNextPath,
709
+ NEXT_PARAM,
710
+ DEFAULT_LAST_VISITED_EXCLUDES,
711
+ } from "./landing/routing";
712
+ export type { RootEntryProps, RedirectIfAuthedProps, LastVisitedPageOptions, PathPattern } from "./landing/routing";
713
+ export { PublicHeader } from "./landing/public-header";
714
+ export type { PublicHeaderProps, PublicHeaderBrand } from "./landing/public-header";
715
+ export { DEFAULT_DEMO_LABELS, useDemoLabels } from "./demo/demo-labels";
716
+ export type { DemoLabels } from "./demo/demo-labels";
717
+ export { isDemoSession } from "./demo/demo-session";
718
+ export type { DemoModel, DemoSessionUser } from "./demo/demo-session";
719
+ export { useDemoCountdown, demoCountdown, DEMO_WARNING_MINUTES, DEMO_MINUTES_ONLY } from "./demo/demo-countdown";
720
+ export type { DemoCountdown, DemoCountdownOptions, DemoExpiry } from "./demo/demo-countdown";
721
+ export { DemoStart } from "./demo/demo-start";
722
+ export type { DemoStartProps } from "./demo/demo-start";
723
+ export { DemoBanner } from "./demo/demo-banner";
724
+ export type { DemoBannerProps } from "./demo/demo-banner";
725
+ export { DemoEnded } from "./demo/demo-ended";
726
+ export type { DemoEndedProps } from "./demo/demo-ended";
543
727
  export type {
544
728
  LegalPageProps,
545
729
  LegalKitSectionProps,