@protobase/ui 0.63.5 → 0.65.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 (277) hide show
  1. package/dist/account/change-email-dialog.js +1 -1
  2. package/dist/account/devices-section.js +11 -5
  3. package/dist/account/messages.js +2 -333
  4. package/dist/account/passkeys-section.js +2 -2
  5. package/dist/account/password-change-dialog.js +3 -3
  6. package/dist/account/sign-in-policy-form.js +6 -3
  7. package/dist/account/sign-in-providers-section.js +1 -1
  8. package/dist/account/staff-sign-in-log.js +4 -4
  9. package/dist/action-card/messages.js +2 -5
  10. package/dist/activity-chart/activity-chart.js +4 -6
  11. package/dist/activity-chart/messages.js +2 -11
  12. package/dist/app/app.js +1 -2
  13. package/dist/app/batch-failure.js +5 -1
  14. package/dist/app/bottom-bar-from-meta.js +2 -3
  15. package/dist/app/change-confirm/messages.js +2 -13
  16. package/dist/app/change-confirm/use-change-confirm.js +1 -1
  17. package/dist/app/charts/chart-groups.js +3 -1
  18. package/dist/app/charts/group-bars.js +1 -1
  19. package/dist/app/charts/messages.js +2 -23
  20. package/dist/app/charts/period-chart.js +1 -1
  21. package/dist/app/comments/messages.js +2 -19
  22. package/dist/app/confirm-sign-in-messages.js +2 -19
  23. package/dist/app/confirm-sign-in.js +1 -1
  24. package/dist/app/create/create-page.js +3 -3
  25. package/dist/app/create/create-record-form.js +2 -2
  26. package/dist/app/create/create-route.js +1 -1
  27. package/dist/app/create/messages.js +2 -29
  28. package/dist/app/custom-section.js +1 -2
  29. package/dist/app/delete/blocked-delete.js +5 -2
  30. package/dist/app/delete/dialogs.js +21 -8
  31. package/dist/app/delete/messages.js +2 -63
  32. package/dist/app/delete/use-delete-flow.js +5 -4
  33. package/dist/app/displays/board-column.js +1 -1
  34. package/dist/app/displays/board-columns.js +1 -1
  35. package/dist/app/displays/board-display.js +21 -9
  36. package/dist/app/displays/calendar-display.js +15 -6
  37. package/dist/app/displays/cards-display.js +1 -1
  38. package/dist/app/displays/custom-display.js +1 -2
  39. package/dist/app/displays/list-cards.js +1 -1
  40. package/dist/app/displays/map-display.js +19 -6
  41. package/dist/app/displays/messages.js +2 -147
  42. package/dist/app/displays/period-controls.js +2 -2
  43. package/dist/app/displays/timeline-display.js +15 -6
  44. package/dist/app/displays/timeline-range.js +1 -1
  45. package/dist/app/displays/use-board-move.js +3 -3
  46. package/dist/app/displays/use-calendar-move.js +1 -1
  47. package/dist/app/document-title.js +1 -1
  48. package/dist/app/embedded-list/cut-off-note.js +7 -1
  49. package/dist/app/embedded-list/embedded-row-targets.js +3 -3
  50. package/dist/app/embedded-list/messages.js +2 -21
  51. package/dist/app/export/builder-port.js +1 -1
  52. package/dist/app/export/export-dialog.js +14 -8
  53. package/dist/app/export/messages.js +2 -75
  54. package/dist/app/export/use-export-flow.js +9 -3
  55. package/dist/app/field-editor.js +2 -2
  56. package/dist/app/field-errors.js +18 -7
  57. package/dist/app/field-messages.js +2 -45
  58. package/dist/app/field-types/members/messages.js +2 -15
  59. package/dist/app/field-types/messages.js +2 -5
  60. package/dist/app/field-types/widget-part.js +1 -1
  61. package/dist/app/file-field.js +3 -3
  62. package/dist/app/gallery/gallery-section.js +5 -2
  63. package/dist/app/gallery/messages.js +2 -27
  64. package/dist/app/gallery/photo-details.js +2 -2
  65. package/dist/app/hand-order/hand-sorted-list.js +1 -2
  66. package/dist/app/hand-order/messages.js +2 -29
  67. package/dist/app/hand-order/use-hand-order.js +1 -1
  68. package/dist/app/history/describe-change.js +1 -1
  69. package/dist/app/history/messages.js +2 -29
  70. package/dist/app/import/convert.js +19 -10
  71. package/dist/app/import/import-check-step.js +5 -5
  72. package/dist/app/import/import-dialog.js +5 -2
  73. package/dist/app/import/import-file-step.js +1 -1
  74. package/dist/app/import/import-mapping-step.js +3 -3
  75. package/dist/app/import/messages.js +2 -197
  76. package/dist/app/import/prepare-rows.js +11 -4
  77. package/dist/app/import/sheet-cell.js +1 -1
  78. package/dist/app/import/xlsx-reader.js +2 -2
  79. package/dist/app/import/zip-reader.js +4 -1
  80. package/dist/app/list-actions/use-list-actions.js +4 -1
  81. package/dist/app/list-edit/messages.js +2 -11
  82. package/dist/app/list-empty-state.js +7 -4
  83. package/dist/app/list-group-chart.js +1 -1
  84. package/dist/app/list-messages.js +2 -53
  85. package/dist/app/list-page.js +9 -9
  86. package/dist/app/live-update/messages.js +2 -11
  87. package/dist/app/map/messages.js +2 -11
  88. package/dist/app/menu-icons.js +10 -3
  89. package/dist/app/messages.js +2 -139
  90. package/dist/app/meta-gate-messages.js +2 -13
  91. package/dist/app/nav-from-meta.js +8 -9
  92. package/dist/app/new-version/messages.js +2 -21
  93. package/dist/app/new-version/new-version-banner.js +1 -2
  94. package/dist/app/pages/action-inputs/action-inputs-dialog.js +1 -1
  95. package/dist/app/pages/action-inputs/input-answers.js +1 -1
  96. package/dist/app/pages/blocks/modal-form.js +1 -1
  97. package/dist/app/pages/blocks/settings.js +1 -1
  98. package/dist/app/pages/blocks/tabs.js +1 -1
  99. package/dist/app/pages/composed-page.js +1 -2
  100. package/dist/app/pages/custom-boundary.js +1 -2
  101. package/dist/app/pages/messages.js +2 -79
  102. package/dist/app/pages/render-node.js +2 -3
  103. package/dist/app/pages/use-run-action.js +14 -6
  104. package/dist/app/rank-after/dependency-rule.js +8 -2
  105. package/dist/app/rank-after/messages.js +2 -5
  106. package/dist/app/rank-after/ranked-place.js +7 -1
  107. package/dist/app/record-chart/messages.js +2 -25
  108. package/dist/app/record-lines-cell.js +4 -1
  109. package/dist/app/record-lines.js +2 -2
  110. package/dist/app/record-messages.js +2 -83
  111. package/dist/app/record-page.js +3 -3
  112. package/dist/app/record-row/messages.js +2 -23
  113. package/dist/app/record-row/record-row-body.js +1 -1
  114. package/dist/app/record-row/record-row.js +2 -2
  115. package/dist/app/record-row/saved-record-row.js +2 -2
  116. package/dist/app/related-cards/messages.js +2 -15
  117. package/dist/app/related-dots/dots-summary.js +1 -1
  118. package/dist/app/related-dots/messages.js +2 -5
  119. package/dist/app/related-dots/related-dots.js +2 -3
  120. package/dist/app/relation-picker.js +1 -1
  121. package/dist/app/runtime/messages.js +2 -55
  122. package/dist/app/runtime/runtime-status.js +12 -3
  123. package/dist/app/saved/messages.js +2 -19
  124. package/dist/app/saved/saved-list.js +2 -2
  125. package/dist/app/search/messages.js +2 -19
  126. package/dist/app/search/navigation-hits.js +1 -1
  127. package/dist/app/search/search-model.js +9 -3
  128. package/dist/app/searches/messages.js +2 -93
  129. package/dist/app/searches/save-search-button.js +3 -3
  130. package/dist/app/searches/saved-search-rows.js +2 -2
  131. package/dist/app/searches/saved-search-section.js +3 -3
  132. package/dist/app/searches/saved-searches.js +13 -11
  133. package/dist/app/searches/search-controls.js +1 -1
  134. package/dist/app/searches/search-diff.js +8 -2
  135. package/dist/app/searches/update-search-dialog.js +9 -3
  136. package/dist/app/searches/use-save-search.js +1 -1
  137. package/dist/app/searches/use-search-row.js +2 -2
  138. package/dist/app/sensitive-field.js +3 -3
  139. package/dist/app/source-notice.js +3 -3
  140. package/dist/app/staff-banner.js +12 -8
  141. package/dist/app/use-live-save.js +2 -2
  142. package/dist/app/user-menu-from-meta.js +2 -3
  143. package/dist/app/value-badge.js +3 -4
  144. package/dist/app-shell/global-search.js +2 -2
  145. package/dist/app-shell/messages.js +2 -63
  146. package/dist/app-shell/sidebar-group.js +2 -2
  147. package/dist/app-shell/sidebar.js +1 -2
  148. package/dist/app-shell/top-bar.js +1 -1
  149. package/dist/assistant-dock/messages.js +2 -23
  150. package/dist/auth/auth-gate.js +1 -1
  151. package/dist/auth/auth-messages.js +9 -88
  152. package/dist/auth/email-code-form.js +2 -3
  153. package/dist/auth/forgot-password-form.js +2 -3
  154. package/dist/auth/messages.js +2 -203
  155. package/dist/auth/provider-sign-in-page.js +3 -3
  156. package/dist/auth/resend-code-button.js +1 -1
  157. package/dist/auth/reset-password-form.js +1 -1
  158. package/dist/auth/reset-password-page.js +1 -1
  159. package/dist/auth/sign-in-form.js +2 -2
  160. package/dist/auth/sign-up-code-form.js +2 -3
  161. package/dist/auth/sign-up-details-form.js +3 -4
  162. package/dist/auth/staff-sign-in-form.js +3 -3
  163. package/dist/calls/call-guests-panel.js +1 -1
  164. package/dist/calls/call-lobby-notice.js +1 -1
  165. package/dist/calls/call-mark.js +1 -1
  166. package/dist/calls/call-people.js +1 -1
  167. package/dist/calls/call-tile.js +2 -2
  168. package/dist/calls/messages.js +2 -139
  169. package/dist/carousel/carousel-controls.js +4 -1
  170. package/dist/carousel/messages.js +2 -13
  171. package/dist/chat/messages.js +2 -19
  172. package/dist/compact-table/compact-table.js +1 -1
  173. package/dist/compact-table/messages.js +2 -15
  174. package/dist/data-grid/cell-text.js +6 -5
  175. package/dist/data-grid/cells.js +7 -4
  176. package/dist/data-grid/grid-footer.js +1 -1
  177. package/dist/data-grid/grid-row.js +1 -1
  178. package/dist/data-grid/header-menu.js +1 -1
  179. package/dist/data-grid/messages.js +2 -49
  180. package/dist/data-grid/resize-handle.js +1 -1
  181. package/dist/data-grid/row-reorder.js +20 -5
  182. package/dist/filter-panel/active-filter-chips.js +1 -1
  183. package/dist/filter-panel/date-presets.js +2 -2
  184. package/dist/filter-panel/facet-combobox.js +1 -1
  185. package/dist/filter-panel/facet-group.js +1 -1
  186. package/dist/filter-panel/messages.js +2 -49
  187. package/dist/filter-panel/range-filter.js +1 -1
  188. package/dist/format/date.js +4 -4
  189. package/dist/format/messages.js +2 -21
  190. package/dist/format/money.js +1 -1
  191. package/dist/format/number.js +5 -2
  192. package/dist/forms/messages.js +2 -21
  193. package/dist/inline-child-table/inline-child-table.js +19 -4
  194. package/dist/inline-child-table/line-row.js +2 -2
  195. package/dist/inline-child-table/messages.js +2 -35
  196. package/dist/invitations/link-notice.js +2 -3
  197. package/dist/invitations/messages.js +2 -21
  198. package/dist/invitations/pending-invitation-row.js +1 -1
  199. package/dist/lists/messages.js +2 -5
  200. package/dist/live/columns-from-model.js +14 -31
  201. package/dist/live/display-value.js +1 -1
  202. package/dist/live/messages.js +2 -15
  203. package/dist/live/value-color.js +13 -3
  204. package/dist/live/view-fields.js +4 -2
  205. package/dist/locale/en.js +1399 -0
  206. package/dist/locale/messages.js +38 -7
  207. package/dist/locale/nl.js +1399 -0
  208. package/dist/markdown/messages.js +2 -13
  209. package/dist/mentions/messages.js +2 -13
  210. package/dist/notifications/bell/messages.js +2 -35
  211. package/dist/notifications/bell/unread-label.js +1 -1
  212. package/dist/organizations/invitation-page.js +31 -13
  213. package/dist/organizations/invitations-page.js +1 -1
  214. package/dist/organizations/members-page.js +2 -2
  215. package/dist/organizations/messages.js +2 -187
  216. package/dist/organizations/organization-page.js +4 -4
  217. package/dist/organizations/organizations-page.js +1 -1
  218. package/dist/package.js +1 -1
  219. package/dist/plugins/load-plugin.js +2 -2
  220. package/dist/plugins/messages.js +2 -33
  221. package/dist/plugins/plugin-notice.js +7 -5
  222. package/dist/primitives/badge.d.ts +2 -1
  223. package/dist/primitives/messages.js +2 -13
  224. package/dist/primitives/token.js +1 -1
  225. package/dist/record-view/field.js +2 -2
  226. package/dist/record-view/messages.js +2 -33
  227. package/dist/record-view/record-header.js +2 -2
  228. package/dist/roles/messages.js +2 -11
  229. package/dist/shell/assets/app-BOuBCV1m.js +8 -0
  230. package/dist/shell/assets/{calls-CPiQcC70.js → calls-C22bYKio.js} +2 -2
  231. package/dist/shell/assets/export-worker-ClXdfeuq.js +15 -0
  232. package/dist/shell/assets/{index-_ZpZ2ro0.js → index-G0fdUd70.js} +2 -2
  233. package/dist/shell/assets/{maplibre-CjNYwEqW.js → maplibre-CRmpQfDl.js} +3 -3
  234. package/dist/shell/assets/parse-worker-DxsmAjef.js +18 -0
  235. package/dist/shell/assets/preload-helper-BgLOXTzV.js +2 -0
  236. package/dist/shell/assets/{record-map-DjqQGqZ2.js → record-map-DsP4sXes.js} +2 -2
  237. package/dist/shell/assets/{records-map-DU29d6QK.js → records-map-BtWK38Kn.js} +2 -2
  238. package/dist/shell/assets/shared-protobase-ui-xqMMtr7u.js +2 -0
  239. package/dist/shell/assets/vendor-Kvdo8Jrw.js +73 -0
  240. package/dist/shell/index.html +5 -5
  241. package/dist/shell/protobase.shell.json +2 -2
  242. package/dist/shell/protobase.sw.js +2 -2
  243. package/dist/shell-source-maps/assets/app-BOuBCV1m.js.map +1 -0
  244. package/dist/shell-source-maps/assets/{calls-CPiQcC70.js.map → calls-C22bYKio.js.map} +1 -1
  245. package/dist/shell-source-maps/assets/export-worker-ClXdfeuq.js.map +1 -0
  246. package/dist/shell-source-maps/assets/{index-_ZpZ2ro0.js.map → index-G0fdUd70.js.map} +1 -1
  247. package/dist/shell-source-maps/assets/{maplibre-CjNYwEqW.js.map → maplibre-CRmpQfDl.js.map} +1 -1
  248. package/dist/shell-source-maps/assets/parse-worker-DxsmAjef.js.map +1 -0
  249. package/dist/shell-source-maps/assets/preload-helper-BgLOXTzV.js.map +1 -0
  250. package/dist/shell-source-maps/assets/{record-map-DjqQGqZ2.js.map → record-map-DsP4sXes.js.map} +1 -1
  251. package/dist/shell-source-maps/assets/{records-map-DU29d6QK.js.map → records-map-BtWK38Kn.js.map} +1 -1
  252. package/dist/shell-source-maps/assets/shared-protobase-ui-xqMMtr7u.js.map +1 -0
  253. package/dist/shell-source-maps/assets/vendor-Kvdo8Jrw.js.map +1 -0
  254. package/dist/side-panel/messages.js +2 -5
  255. package/dist/status/messages.js +2 -59
  256. package/dist/toasts/messages.js +2 -5
  257. package/dist/users/create-user-form.js +1 -1
  258. package/dist/users/messages.js +2 -49
  259. package/package.json +5 -4
  260. package/dist/app/icons.js +0 -27
  261. package/dist/app-shell/nav.js +0 -85
  262. package/dist/locale/slotted.js +0 -14
  263. package/dist/mocks/activity.js +0 -24
  264. package/dist/mocks/rng.js +0 -20
  265. package/dist/mocks/users.js +0 -63
  266. package/dist/shell/assets/app-BPv_SjnU.js +0 -9
  267. package/dist/shell/assets/export-worker-3e4Zsv0a.js +0 -3
  268. package/dist/shell/assets/parse-worker-UhbwEjS0.js +0 -6
  269. package/dist/shell/assets/preload-helper-SYSsmQ2O.js +0 -2
  270. package/dist/shell/assets/shared-protobase-ui-Cab5nqST.js +0 -2
  271. package/dist/shell/assets/vendor-iwLB0x-s.js +0 -63
  272. package/dist/shell-source-maps/assets/app-BPv_SjnU.js.map +0 -1
  273. package/dist/shell-source-maps/assets/export-worker-3e4Zsv0a.js.map +0 -1
  274. package/dist/shell-source-maps/assets/parse-worker-UhbwEjS0.js.map +0 -1
  275. package/dist/shell-source-maps/assets/preload-helper-SYSsmQ2O.js.map +0 -1
  276. package/dist/shell-source-maps/assets/shared-protobase-ui-Cab5nqST.js.map +0 -1
  277. package/dist/shell-source-maps/assets/vendor-iwLB0x-s.js.map +0 -1
@@ -1,16 +1,5 @@
1
- import { defineMessages } from "../locale/messages.js";
1
+ import { messages } from "../locale/messages.js";
2
2
  //#region src/markdown/messages.ts
3
- const text = defineMessages({
4
- en: {
5
- write: "Write",
6
- preview: "Preview",
7
- nothingToPreview: "Nothing to preview"
8
- },
9
- nl: {
10
- write: "Schrijven",
11
- preview: "Voorbeeld",
12
- nothingToPreview: "Niets om te tonen"
13
- }
14
- });
3
+ const text = messages("markdown");
15
4
  //#endregion
16
5
  export { text };
@@ -1,16 +1,5 @@
1
- import { defineMessages } from "../locale/messages.js";
1
+ import { messages } from "../locale/messages.js";
2
2
  //#region src/mentions/messages.ts
3
- const text = defineMessages({
4
- en: {
5
- peopleToMention: "People to mention",
6
- noOneFound: "No one found",
7
- couldNotSearch: "Could not search for people"
8
- },
9
- nl: {
10
- peopleToMention: "Mensen om te noemen",
11
- noOneFound: "Niemand gevonden",
12
- couldNotSearch: "Kon niet naar mensen zoeken"
13
- }
14
- });
3
+ const text = messages("mentions");
15
4
  //#endregion
16
5
  export { text };
@@ -1,38 +1,5 @@
1
- import { defineMessages } from "../../locale/messages.js";
1
+ import { messages } from "../../locale/messages.js";
2
2
  //#region src/notifications/bell/messages.ts
3
- const text = defineMessages({
4
- en: {
5
- notifications: "Notifications",
6
- notificationsUnread: (count) => `Notifications, ${count} unread`,
7
- notificationsManyUnread: "Notifications, more than 99 unread",
8
- markAllRead: "Mark all as read",
9
- empty: "No notifications yet",
10
- showMore: "Show more",
11
- loadFailed: "Your notifications could not be loaded.",
12
- tryAgain: "Try again",
13
- unread: "Unread",
14
- pushOff: "Get notifications on this device, even when the app is closed.",
15
- turnOn: "Turn on",
16
- pushOn: "Notifications are on for this device.",
17
- turnOff: "Turn off",
18
- pushBlocked: "Notifications are blocked on this device. To get them, allow notifications for this site in your browser or device settings."
19
- },
20
- nl: {
21
- notifications: "Meldingen",
22
- notificationsUnread: (count) => `Meldingen, ${count} ongelezen`,
23
- notificationsManyUnread: "Meldingen, meer dan 99 ongelezen",
24
- markAllRead: "Alles als gelezen markeren",
25
- empty: "Nog geen meldingen",
26
- showMore: "Meer tonen",
27
- loadFailed: "Je meldingen konden niet worden geladen.",
28
- tryAgain: "Opnieuw proberen",
29
- unread: "Ongelezen",
30
- pushOff: "Ontvang meldingen op dit apparaat, ook als de app gesloten is.",
31
- turnOn: "Inschakelen",
32
- pushOn: "Meldingen staan op dit apparaat aan.",
33
- turnOff: "Uitschakelen",
34
- pushBlocked: "Meldingen zijn op dit apparaat geblokkeerd. Je kunt ze voor deze site toestaan in de instellingen van je browser of apparaat."
35
- }
36
- });
3
+ const text = messages("notifications/bell");
37
4
  //#endregion
38
5
  export { text };
@@ -4,7 +4,7 @@ const shownMax = 99;
4
4
  /** The bell's name for a screen reader, with how many are unread. */
5
5
  const bellLabel = (count) => {
6
6
  if (count === void 0 || count <= 0) return text("notifications");
7
- return count > shownMax ? text("notificationsManyUnread") : text("notificationsUnread", String(count));
7
+ return count > shownMax ? text("notificationsManyUnread") : text("notificationsUnread", { count: String(count) });
8
8
  };
9
9
  //#endregion
10
10
  export { bellLabel };
@@ -37,7 +37,7 @@ const SignUp = ({ token, preview, joins, onDone }) => {
37
37
  children: [
38
38
  /* @__PURE__ */ jsx("p", {
39
39
  className: "text-muted-foreground",
40
- children: joins ? text("makeAccountToJoin", preview.email) : text("makeAccount", preview.email)
40
+ children: joins ? text("makeAccountToJoin", { email: preview.email }) : text("makeAccount", { email: preview.email })
41
41
  }),
42
42
  error && /* @__PURE__ */ jsx("p", {
43
43
  role: "alert",
@@ -55,7 +55,7 @@ const SignUp = ({ token, preview, joins, onDone }) => {
55
55
  "aria-label": text("password"),
56
56
  type: "password",
57
57
  autoComplete: "new-password",
58
- placeholder: passwordOptional ? text("passwordOptional", 12) : text("passwordRequired", 12),
58
+ placeholder: passwordOptional ? text("passwordOptional", { length: 12 }) : text("passwordRequired", { length: 12 }),
59
59
  value: password,
60
60
  onChange: (event) => setPassword(event.target.value)
61
61
  }),
@@ -106,9 +106,12 @@ const InvitationPage = ({ token, onDone, signIn }) => {
106
106
  const sameAddress = user?.email.toLowerCase() === preview.email.toLowerCase();
107
107
  if (!preview.organization) {
108
108
  const app = preview.app?.name ?? "";
109
- const description = text("invitesToApp", preview.inviter.name, app);
109
+ const description = text("invitesToApp", {
110
+ inviter: preview.inviter.name,
111
+ app
112
+ });
110
113
  return /* @__PURE__ */ jsx(AuthLayout, {
111
- title: text("join", app),
114
+ title: text("join", { name: app }),
112
115
  description,
113
116
  children: preview.hasAccount ? user && sameAddress ? /* @__PURE__ */ jsx(Button, {
114
117
  variant: "primary",
@@ -117,7 +120,7 @@ const InvitationPage = ({ token, onDone, signIn }) => {
117
120
  children: text("goToApp")
118
121
  }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
119
122
  className: "mb-3 text-muted-foreground",
120
- children: text("hasAccount", preview.email)
123
+ children: text("hasAccount", { email: preview.email })
121
124
  }), user ? /* @__PURE__ */ jsx(Button, {
122
125
  className: "w-full",
123
126
  onClick: () => void signOut(),
@@ -125,10 +128,13 @@ const InvitationPage = ({ token, onDone, signIn }) => {
125
128
  }) : /* @__PURE__ */ jsx(RouteLink, {
126
129
  to: signIn,
127
130
  className: cn(buttonClass({ variant: "primary" }), "w-full"),
128
- children: text("signInAs", preview.email)
131
+ children: text("signInAs", { email: preview.email })
129
132
  })] }) : user ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
130
133
  className: "mb-3 text-muted-foreground",
131
- children: text("otherAddress", preview.email, user.email)
134
+ children: text("otherAddress", {
135
+ invited: preview.email,
136
+ signedIn: user.email
137
+ })
132
138
  }), /* @__PURE__ */ jsx(Button, {
133
139
  className: "w-full",
134
140
  onClick: () => void signOut(),
@@ -144,13 +150,25 @@ const InvitationPage = ({ token, onDone, signIn }) => {
144
150
  const organization = preview.organization;
145
151
  const roles = preview.appRoles.map((name) => roleLabel(organizations?.roles ?? [], name));
146
152
  const role = organizationRoleLabel(preview.role).toLowerCase();
147
- const description = roles.length > 0 ? text("invitesToWith", preview.inviter.name, organization.name, role, roles.join(", ")) : text("invitesTo", preview.inviter.name, organization.name, role);
153
+ const description = roles.length > 0 ? text("invitesToWith", {
154
+ inviter: preview.inviter.name,
155
+ organization: organization.name,
156
+ role,
157
+ roles: roles.join(", ")
158
+ }) : text("invitesTo", {
159
+ inviter: preview.inviter.name,
160
+ organization: organization.name,
161
+ role
162
+ });
148
163
  if (user && !sameAddress) return /* @__PURE__ */ jsxs(AuthLayout, {
149
- title: text("join", organization.name),
164
+ title: text("join", { name: organization.name }),
150
165
  description,
151
166
  children: [/* @__PURE__ */ jsx("p", {
152
167
  className: "mb-3 text-muted-foreground",
153
- children: text("otherAddress", preview.email, user.email)
168
+ children: text("otherAddress", {
169
+ invited: preview.email,
170
+ signedIn: user.email
171
+ })
154
172
  }), /* @__PURE__ */ jsx(Button, {
155
173
  className: "w-full",
156
174
  onClick: () => void signOut(),
@@ -158,7 +176,7 @@ const InvitationPage = ({ token, onDone, signIn }) => {
158
176
  })]
159
177
  });
160
178
  return /* @__PURE__ */ jsx(AuthLayout, {
161
- title: text("join", organization.name),
179
+ title: text("join", { name: organization.name }),
162
180
  description,
163
181
  children: user ? /* @__PURE__ */ jsxs("div", {
164
182
  className: "flex flex-col gap-3",
@@ -174,12 +192,12 @@ const InvitationPage = ({ token, onDone, signIn }) => {
174
192
  await session.organizations.accept(token);
175
193
  onDone();
176
194
  }),
177
- children: text("join", organization.name)
195
+ children: text("join", { name: organization.name })
178
196
  })]
179
197
  }) : preview.hasAccount ? /* @__PURE__ */ jsx(RouteLink, {
180
198
  to: signIn,
181
199
  className: cn(buttonClass({ variant: "primary" }), "w-full"),
182
- children: text("signInAsToJoin", preview.email)
200
+ children: text("signInAsToJoin", { email: preview.email })
183
201
  }) : /* @__PURE__ */ jsx(SignUp, {
184
202
  token,
185
203
  preview,
@@ -80,7 +80,7 @@ const InvitationsPage = ({ current }) => {
80
80
  children: [
81
81
  /* @__PURE__ */ jsx(PageHeader, {
82
82
  title: text("invitations"),
83
- subtitle: text("peopleInvited", current.organization.name)
83
+ subtitle: text("peopleInvited", { organization: current.organization.name })
84
84
  }),
85
85
  /* @__PURE__ */ jsx(InviteToOrganization, {
86
86
  current,
@@ -40,7 +40,7 @@ const MemberRow = ({ member, current, status, presence, onChanged }) => {
40
40
  presence
41
41
  }) },
42
42
  actions: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("select", {
43
- "aria-label": text("roleOf", member.name),
43
+ "aria-label": text("roleOf", { name: member.name }),
44
44
  value: member.role,
45
45
  disabled: busy || roleLocked,
46
46
  onChange: (event) => void run(async () => {
@@ -95,7 +95,7 @@ const MembersPage = ({ current, statuses, presence }) => {
95
95
  className: "mx-auto flex w-full max-w-3xl flex-col gap-4 px-4 py-6 md:px-6",
96
96
  children: [/* @__PURE__ */ jsx(PageHeader, {
97
97
  title: text("members"),
98
- subtitle: text("whoWorks", current.organization.name)
98
+ subtitle: text("whoWorks", { organization: current.organization.name })
99
99
  }), /* @__PURE__ */ jsxs(AccountSection, {
100
100
  title: text("members"),
101
101
  description: text("membersDescription"),
@@ -1,190 +1,5 @@
1
- import { defineMessages } from "../locale/messages.js";
1
+ import { messages } from "../locale/messages.js";
2
2
  //#region src/organizations/messages.ts
3
- const text = defineMessages({
4
- en: {
5
- organizations: "Organizations",
6
- manageOrganizations: "Manage organizations",
7
- organization: "Organization",
8
- members: "Members",
9
- invitations: "Invitations",
10
- owner: "Owner",
11
- admin: "Admin",
12
- member: "Member",
13
- loading: "Loading",
14
- name: "Name",
15
- slug: "Slug",
16
- save: "Save",
17
- cancel: "Cancel",
18
- delete: "Delete",
19
- remove: "Remove",
20
- create: "Create",
21
- current: "Current",
22
- open: "Open",
23
- allOrganizations: "All organizations",
24
- allOrganizationsDescription: "Every organization in the app. Your global roles let you work in any of them, with what those roles allow there. Opening one you are not a member of is written to the audit log.",
25
- findOrganization: "Find an organization",
26
- nameOrSlug: "Name or slug",
27
- cannotChangeRole: "You cannot give or take away this role",
28
- makeAccountToJoin: (email) => `Make your account for ${email} to join.`,
29
- makeAccount: (email) => `Make your account for ${email}.`,
30
- yourName: "Your name",
31
- password: "Password",
32
- passwordOptional: (length) => `Password (optional, ${length}+ characters)`,
33
- passwordRequired: (length) => `Password (${length}+ characters)`,
34
- createAndJoin: "Create account and join",
35
- createYourAccount: "Create your account",
36
- invalidLink: "This invitation link is not valid",
37
- invitation: "Invitation",
38
- goToApp: "Go to the app",
39
- invitesToApp: (inviter, app) => `${inviter} invites you to join ${app}.`,
40
- invitesTo: (inviter, organization, role) => `${inviter} invites you to ${organization} as ${role}.`,
41
- invitesToWith: (inviter, organization, role, roles) => `${inviter} invites you to ${organization} as ${role}, with ${roles}.`,
42
- join: (name) => `Join ${name}`,
43
- hasAccount: (email) => `${email} has an account already: sign in with it.`,
44
- signOut: "Sign out",
45
- signInAs: (email) => `Sign in as ${email}`,
46
- signInAsToJoin: (email) => `Sign in as ${email} to join`,
47
- otherAddress: (invited, signedIn) => `This invitation is for ${invited}, and you are signed in as ${signedIn}.`,
48
- signOutToAccept: "Sign out to accept it",
49
- inviteSomeone: "Invite someone",
50
- inviteDescription: "They get an email with a link to join, or to make an account first. You can give the app roles you hold, and those your roles grant.",
51
- organizationRole: "Organization role",
52
- peopleInvited: (organization) => `People invited to ${organization}.`,
53
- notAcceptedYet: "Not accepted yet",
54
- sendingAgain: "Sending again gives a new link, which replaces the earlier one.",
55
- nobodyWaiting: "Nobody is waiting.",
56
- roleOf: (name) => `Organization role of ${name}`,
57
- couldNotReadMembers: "Could not read the members",
58
- whoWorks: (organization) => `Who works in ${organization}, and with which roles.`,
59
- membersDescription: "Owners and admins manage the organization; app roles decide what each member sees and does in the app.",
60
- details: "Details",
61
- detailsEditable: "The name people see, and the slug that names it in links.",
62
- detailsReadOnly: "Owners and admins can change these.",
63
- guestLinks: "Guest links to calls",
64
- guestLinksDescription: "Someone in a call can share a link that lets a person from outside wait in its lobby and join that one call once let in. Turning guest links off revokes every link and takes every guest out at once. Owners and admins can change this.",
65
- guestLinksAllowed: "Allow guest links",
66
- handOver: "Hand over",
67
- handOverDescription: "Make another member the owner. You stay as an admin.",
68
- newOwner: "New owner",
69
- chooseMember: "Choose a member",
70
- deleteOrganization: "Delete organization",
71
- deleteDescription: "Takes the organization and its members and invitations away. Its records must be deleted first.",
72
- deleteTitle: (name) => `Delete ${name}?`,
73
- deleteConfirm: "Type its name to confirm. This cannot be undone.",
74
- organizationName: "Organization name",
75
- leave: "Leave",
76
- leaveOwner: "An organization keeps an owner: hand it over before you leave, unless it has another owner.",
77
- leaveMember: "You stop being a member, and lose your roles here.",
78
- leaveName: (name) => `Leave ${name}`,
79
- noOrganization: "You do not work in an organization now. Choose one under Organizations.",
80
- youAre: (role) => `You are ${role} here.`,
81
- throughGlobalRoles: "You work here through your global roles, without being a member.",
82
- newOrganization: "New organization",
83
- newOrganizationDescription: "You become its owner, with every role, and work in it once it is made.",
84
- invitationsForYou: "Invitations for you",
85
- invitationsForYouDescription: "Accept one to become a member and work there.",
86
- accept: "Accept",
87
- anOrganization: "An organization",
88
- noAppRoles: "no app roles",
89
- until: (date) => `Until ${date}`,
90
- organizationsSubtitle: "You work in one organization at a time; what you see follows from your roles there.",
91
- yourOrganizations: "Your organizations",
92
- memberOf: "The organizations you are a member of.",
93
- notMember: "You are not a member of an organization yet.",
94
- couldNotReadOrganizations: "Could not read your organizations"
95
- },
96
- nl: {
97
- organizations: "Organisaties",
98
- manageOrganizations: "Organisaties beheren",
99
- organization: "Organisatie",
100
- members: "Leden",
101
- invitations: "Uitnodigingen",
102
- owner: "Eigenaar",
103
- admin: "Beheerder",
104
- member: "Lid",
105
- loading: "Laden",
106
- name: "Naam",
107
- slug: "Slug",
108
- save: "Bewaren",
109
- cancel: "Annuleren",
110
- delete: "Verwijderen",
111
- remove: "Verwijderen",
112
- create: "Maken",
113
- current: "Huidige",
114
- open: "Openen",
115
- allOrganizations: "Alle organisaties",
116
- allOrganizationsDescription: "Elke organisatie in de app. Met je globale rollen kun je in elk ervan werken, met wat die rollen daar toestaan. Wie er een opent waar die geen lid van is, komt in het auditlogboek.",
117
- findOrganization: "Een organisatie zoeken",
118
- nameOrSlug: "Naam of slug",
119
- cannotChangeRole: "Je kunt deze rol niet geven of afnemen",
120
- makeAccountToJoin: (email) => `Maak je account voor ${email} om lid te worden.`,
121
- makeAccount: (email) => `Maak je account voor ${email}.`,
122
- yourName: "Je naam",
123
- password: "Wachtwoord",
124
- passwordOptional: (length) => `Wachtwoord (optioneel, ${length}+ tekens)`,
125
- passwordRequired: (length) => `Wachtwoord (${length}+ tekens)`,
126
- createAndJoin: "Account maken en lid worden",
127
- createYourAccount: "Je account maken",
128
- invalidLink: "Deze uitnodigingslink is niet geldig",
129
- invitation: "Uitnodiging",
130
- goToApp: "Naar de app",
131
- invitesToApp: (inviter, app) => `${inviter} nodigt je uit voor ${app}.`,
132
- invitesTo: (inviter, organization, role) => `${inviter} nodigt je uit voor ${organization} als ${role}.`,
133
- invitesToWith: (inviter, organization, role, roles) => `${inviter} nodigt je uit voor ${organization} als ${role}, met ${roles}.`,
134
- join: (name) => `Lid worden van ${name}`,
135
- hasAccount: (email) => `${email} heeft al een account: log daarmee in.`,
136
- signOut: "Uitloggen",
137
- signInAs: (email) => `Inloggen als ${email}`,
138
- signInAsToJoin: (email) => `Inloggen als ${email} om lid te worden`,
139
- otherAddress: (invited, signedIn) => `Deze uitnodiging is voor ${invited}, en je bent ingelogd als ${signedIn}.`,
140
- signOutToAccept: "Uitloggen om die te accepteren",
141
- inviteSomeone: "Iemand uitnodigen",
142
- inviteDescription: "Die krijgt een e-mail met een link om lid te worden, of om eerst een account te maken. Je kunt de app-rollen geven die je zelf hebt, en die je rollen toekennen.",
143
- organizationRole: "Rol in de organisatie",
144
- peopleInvited: (organization) => `Mensen uitgenodigd voor ${organization}.`,
145
- notAcceptedYet: "Nog niet geaccepteerd",
146
- sendingAgain: "Opnieuw sturen geeft een nieuwe link, die de vorige vervangt.",
147
- nobodyWaiting: "Er wacht niemand.",
148
- roleOf: (name) => `Rol in de organisatie van ${name}`,
149
- couldNotReadMembers: "Kon de leden niet lezen",
150
- whoWorks: (organization) => `Wie in ${organization} werkt, en met welke rollen.`,
151
- membersDescription: "Eigenaren en beheerders beheren de organisatie; app-rollen bepalen wat elk lid in de app ziet en doet.",
152
- details: "Gegevens",
153
- detailsEditable: "De naam die mensen zien, en de slug die haar in links noemt.",
154
- detailsReadOnly: "Eigenaren en beheerders kunnen dit wijzigen.",
155
- guestLinks: "Gastlinks voor gesprekken",
156
- guestLinksDescription: "Iemand in een gesprek kan een link delen waarmee iemand van buiten in de wachtruimte wacht en, eenmaal binnengelaten, aan dat ene gesprek deelneemt. Gastlinks uitzetten trekt elke link in en haalt elke gast meteen uit het gesprek. Eigenaren en beheerders kunnen dit wijzigen.",
157
- guestLinksAllowed: "Gastlinks toestaan",
158
- handOver: "Overdragen",
159
- handOverDescription: "Maak een ander lid eigenaar. Jij blijft beheerder.",
160
- newOwner: "Nieuwe eigenaar",
161
- chooseMember: "Kies een lid",
162
- deleteOrganization: "Organisatie verwijderen",
163
- deleteDescription: "Verwijdert de organisatie met haar leden en uitnodigingen. Haar records moeten eerst worden verwijderd.",
164
- deleteTitle: (name) => `${name} verwijderen?`,
165
- deleteConfirm: "Typ de naam om te bevestigen. Dit kan niet ongedaan worden gemaakt.",
166
- organizationName: "Naam van de organisatie",
167
- leave: "Verlaten",
168
- leaveOwner: "Een organisatie houdt een eigenaar: draag die rol over voordat je vertrekt, tenzij er nog een eigenaar is.",
169
- leaveMember: "Je bent dan geen lid meer, en verliest je rollen hier.",
170
- leaveName: (name) => `${name} verlaten`,
171
- noOrganization: "Je werkt nu niet in een organisatie. Kies er een onder Organisaties.",
172
- youAre: (role) => `Je bent hier ${role}.`,
173
- throughGlobalRoles: "Je werkt hier via je globale rollen, zonder lid te zijn.",
174
- newOrganization: "Nieuwe organisatie",
175
- newOrganizationDescription: "Je wordt de eigenaar, met elke rol, en werkt erin zodra die is gemaakt.",
176
- invitationsForYou: "Uitnodigingen voor jou",
177
- invitationsForYouDescription: "Accepteer er een om lid te worden en daar te werken.",
178
- accept: "Accepteren",
179
- anOrganization: "Een organisatie",
180
- noAppRoles: "geen app-rollen",
181
- until: (date) => `Tot ${date}`,
182
- organizationsSubtitle: "Je werkt in één organisatie tegelijk; wat je ziet volgt uit je rollen daar.",
183
- yourOrganizations: "Je organisaties",
184
- memberOf: "De organisaties waar je lid van bent.",
185
- notMember: "Je bent nog geen lid van een organisatie.",
186
- couldNotReadOrganizations: "Kon je organisaties niet lezen"
187
- }
188
- });
3
+ const text = messages("organizations");
189
4
  //#endregion
190
5
  export { text };
@@ -3,8 +3,8 @@ import { useClient } from "../data/api-provider.js";
3
3
  import { useMeta } from "../data/use-meta.js";
4
4
  import { Button } from "../primitives/button.js";
5
5
  import { Dialog } from "../primitives/dialog.js";
6
- import { Input } from "../primitives/input.js";
7
6
  import { Switch } from "../primitives/switch.js";
7
+ import { Input } from "../primitives/input.js";
8
8
  import { PageHeader } from "../app-shell/page-header.js";
9
9
  import { AccountSection, SectionError } from "../account/account-section.js";
10
10
  import { useAction } from "./use-action.js";
@@ -127,7 +127,7 @@ const Delete = ({ organization, basePath }) => {
127
127
  children: text("deleteOrganization")
128
128
  }),
129
129
  confirming && /* @__PURE__ */ jsxs(Dialog, {
130
- title: text("deleteTitle", organization.name),
130
+ title: text("deleteTitle", { name: organization.name }),
131
131
  description: text("deleteConfirm"),
132
132
  onClose: () => setConfirming(false),
133
133
  actions: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Button, {
@@ -185,7 +185,7 @@ const Leave = ({ organization, basePath, owner }) => {
185
185
  await session.organizations.leave(organization.id);
186
186
  reopenIn(basePath);
187
187
  }),
188
- children: text("leaveName", organization.name)
188
+ children: text("leaveName", { name: organization.name })
189
189
  })]
190
190
  });
191
191
  };
@@ -209,7 +209,7 @@ const OrganizationPage = ({ current, basePath, onChanged }) => {
209
209
  children: [
210
210
  /* @__PURE__ */ jsx(PageHeader, {
211
211
  title: organization.name,
212
- subtitle: current.role ? text("youAre", organizationRoleLabel(current.role).toLowerCase()) : text("throughGlobalRoles")
212
+ subtitle: current.role ? text("youAre", { role: organizationRoleLabel(current.role).toLowerCase() }) : text("throughGlobalRoles")
213
213
  }),
214
214
  /* @__PURE__ */ jsx(Details, {
215
215
  organization,
@@ -95,7 +95,7 @@ const YourInvitations = ({ basePath }) => {
95
95
  invitation.appRoles.map((name) => roleLabel(roles, name)).join(", ") || text("noAppRoles"),
96
96
  /* @__PURE__ */ jsx("span", {
97
97
  className: "block text-xs text-muted-foreground",
98
- children: text("until", new Date(invitation.expiresAt).toLocaleDateString(formatTag()))
98
+ children: text("until", { date: new Date(invitation.expiresAt).toLocaleDateString(formatTag()) })
99
99
  })
100
100
  ]
101
101
  }), /* @__PURE__ */ jsx(Button, {
package/dist/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.63.5";
2
+ var version = "0.65.0";
3
3
  var protobase = { "pluginApi": 1 };
4
4
  //#endregion
5
5
  export { protobase, version };
@@ -46,7 +46,7 @@ const loadPlugin = async (ref, loader, base, host = thisApp) => {
46
46
  let name;
47
47
  try {
48
48
  const read = await loader.readJson(url);
49
- if ("status" in read) return off(text("answered", read.status));
49
+ if ("status" in read) return off(text("answered", { status: read.status }));
50
50
  const parsed = parseManifest(read.json);
51
51
  if ("problem" in parsed) return off(parsed.problem);
52
52
  const { manifest } = parsed;
@@ -67,7 +67,7 @@ const loadPlugin = async (ref, loader, base, host = thisApp) => {
67
67
  ui: pluginUi(plugin, module)
68
68
  };
69
69
  } catch (error) {
70
- return off(text("couldNotLoad", describe(error)), name);
70
+ return off(text("couldNotLoad", { reason: describe(error) }), name);
71
71
  }
72
72
  };
73
73
  //#endregion
@@ -1,36 +1,5 @@
1
- import { defineMessages } from "../locale/messages.js";
1
+ import { messages } from "../locale/messages.js";
2
2
  //#region src/plugins/messages.ts
3
- const text = defineMessages({
4
- en: {
5
- loading: "Loading",
6
- pluginsOff: "Plugins off",
7
- pluginOff: "The plugin {} is off: {}.",
8
- dismiss: "Dismiss",
9
- answered: (status) => `its plugin.json answered ${status}`,
10
- couldNotLoad: (reason) => `it could not be loaded: ${reason}`,
11
- notObject: "its plugin.json is not an object",
12
- noName: "its plugin.json names no plugin",
13
- noApi: "its plugin.json names no plugin API",
14
- noVersions: "its plugin.json names no Protobase versions",
15
- noModule: "its plugin.json names no module",
16
- badStylesheet: "its plugin.json names a stylesheet that is no URL",
17
- badVersion: "its plugin.json has a version that is no text"
18
- },
19
- nl: {
20
- loading: "Laden",
21
- pluginsOff: "Plug-ins uit",
22
- pluginOff: "De plug-in {} staat uit: {}.",
23
- dismiss: "Sluiten",
24
- answered: (status) => `de plugin.json antwoordde ${status}`,
25
- couldNotLoad: (reason) => `hij kon niet worden geladen: ${reason}`,
26
- notObject: "de plugin.json is geen object",
27
- noName: "de plugin.json noemt geen plug-in",
28
- noApi: "de plugin.json noemt geen plug-in-API",
29
- noVersions: "de plugin.json noemt geen Protobase-versies",
30
- noModule: "de plugin.json noemt geen module",
31
- badStylesheet: "de plugin.json noemt een stylesheet die geen URL is",
32
- badVersion: "de plugin.json heeft een versie die geen tekst is"
33
- }
34
- });
3
+ const text = messages("plugins");
35
4
  //#endregion
36
5
  export { text };
@@ -1,4 +1,3 @@
1
- import { slotted } from "../locale/slotted.js";
2
1
  import { text } from "./messages.js";
3
2
  import { useState } from "react";
4
3
  import { Puzzle, X } from "lucide-react";
@@ -19,10 +18,13 @@ const PluginNotice = ({ off }) => {
19
18
  }),
20
19
  /* @__PURE__ */ jsx("ul", {
21
20
  className: "min-w-0 flex-1 space-y-0.5 break-words",
22
- children: off.map((plugin) => /* @__PURE__ */ jsx("li", { children: slotted(text("pluginOff"), /* @__PURE__ */ jsx("span", {
23
- className: "font-semibold",
24
- children: plugin.name ?? plugin.url
25
- }), plugin.reason) }, plugin.url))
21
+ children: off.map((plugin) => /* @__PURE__ */ jsx("li", { children: text.rich("pluginOff", {
22
+ plugin: /* @__PURE__ */ jsx("span", {
23
+ className: "font-semibold",
24
+ children: plugin.name ?? plugin.url
25
+ }),
26
+ reason: plugin.reason
27
+ }) }, plugin.url))
26
28
  }),
27
29
  /* @__PURE__ */ jsx("button", {
28
30
  type: "button",
@@ -1 +1,2 @@
1
- import { ReactNode } from "react";
1
+ import { ReactNode } from "react";
2
+ import "@protobase/schema";
@@ -1,16 +1,5 @@
1
- import { defineMessages } from "../locale/messages.js";
1
+ import { messages } from "../locale/messages.js";
2
2
  //#region src/primitives/messages.ts
3
- const text = defineMessages({
4
- en: {
5
- close: "Close",
6
- loading: "Loading",
7
- remove: (label) => `Remove ${label}`
8
- },
9
- nl: {
10
- close: "Sluiten",
11
- loading: "Laden",
12
- remove: (label) => `${label} verwijderen`
13
- }
14
- });
3
+ const text = messages("primitives");
15
4
  //#endregion
16
5
  export { text };
@@ -10,7 +10,7 @@ const Token = ({ label, onRemove }) => /* @__PURE__ */ jsxs("span", {
10
10
  children: label
11
11
  }), /* @__PURE__ */ jsx("button", {
12
12
  type: "button",
13
- "aria-label": text("remove", label),
13
+ "aria-label": text("remove", { label }),
14
14
  className: "rounded p-0.5 hover:bg-primary-border/60",
15
15
  onMouseDown: (event) => event.preventDefault(),
16
16
  onClick: onRemove,
@@ -32,7 +32,7 @@ const Field = ({ name, label, required, help, example, error, conflict, wide, ch
32
32
  })]
33
33
  }), conflict && /* @__PURE__ */ jsxs("span", {
34
34
  className: "inline-flex items-center gap-1.5 text-warning-text",
35
- title: text("savedDifferent", conflict.user.name),
35
+ title: text("savedDifferent", { name: conflict.user.name }),
36
36
  children: [/* @__PURE__ */ jsx(TriangleAlert, { className: "size-3.5" }), /* @__PURE__ */ jsx(Avatar, {
37
37
  initials: conflict.user.initials,
38
38
  hue: conflict.user.hue,
@@ -74,7 +74,7 @@ const Field = ({ name, label, required, help, example, error, conflict, wide, ch
74
74
  children: [/* @__PURE__ */ jsxs("span", { children: [
75
75
  /* @__PURE__ */ jsx("strong", { children: conflict.user.name }),
76
76
  " ",
77
- text("savedThis", conflict.ago),
77
+ text("savedThis", { ago: conflict.ago }),
78
78
  " ",
79
79
  /* @__PURE__ */ jsx("strong", { children: conflict.theirValue })
80
80
  ] }), /* @__PURE__ */ jsxs("span", {
@@ -1,36 +1,5 @@
1
- import { defineMessages } from "../locale/messages.js";
1
+ import { messages } from "../locale/messages.js";
2
2
  //#region src/record-view/messages.ts
3
- const text = defineMessages({
4
- en: {
5
- savedDifferent: (name) => `${name} saved a different value`,
6
- example: "Example:",
7
- savedThis: (ago) => `saved this ${ago}:`,
8
- keepMine: "Keep mine",
9
- useTheirs: "Use theirs",
10
- actions: "Actions",
11
- saving: "Saving...",
12
- savedAgo: (ago) => `Saved ${ago}`,
13
- notSavedRetrying: "Not saved, retrying",
14
- lastEditedBy: "Last edited by",
15
- lastUpdated: (ago) => `Last updated ${ago}`,
16
- viewing: (count) => `${count} viewing`,
17
- tabs: "Tabs"
18
- },
19
- nl: {
20
- savedDifferent: (name) => `${name} bewaarde een andere waarde`,
21
- example: "Voorbeeld:",
22
- savedThis: (ago) => `bewaarde dit ${ago}:`,
23
- keepMine: "Mijn waarde houden",
24
- useTheirs: "Hun waarde gebruiken",
25
- actions: "Acties",
26
- saving: "Bewaren...",
27
- savedAgo: (ago) => `Bewaard ${ago}`,
28
- notSavedRetrying: "Niet bewaard, opnieuw proberen",
29
- lastEditedBy: "Laatst bewerkt door",
30
- lastUpdated: (ago) => `Laatst bijgewerkt ${ago}`,
31
- viewing: (count) => `${count} kijken mee`,
32
- tabs: "Tabbladen"
33
- }
34
- });
3
+ const text = messages("record-view");
35
4
  //#endregion
36
5
  export { text };