@eifi1/ui-kit 0.40.1 → 0.42.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 (159) hide show
  1. package/README.md +19 -6
  2. package/dist/admin/admin-area-labels.d.ts +55 -0
  3. package/dist/admin/admin-area-labels.js +33 -0
  4. package/dist/admin/admin-area-labels.js.map +1 -0
  5. package/dist/admin/admin-forbidden.d.ts +35 -0
  6. package/dist/admin/admin-forbidden.js +36 -0
  7. package/dist/admin/admin-forbidden.js.map +1 -0
  8. package/dist/admin/admin-overview.d.ts +93 -0
  9. package/dist/admin/admin-overview.js +69 -0
  10. package/dist/admin/admin-overview.js.map +1 -0
  11. package/dist/admin/admin-sections.d.ts +63 -0
  12. package/dist/admin/admin-sections.js +64 -0
  13. package/dist/admin/admin-sections.js.map +1 -0
  14. package/dist/admin/admin-tool-links.d.ts +48 -0
  15. package/dist/admin/admin-tool-links.js +31 -0
  16. package/dist/admin/admin-tool-links.js.map +1 -0
  17. package/dist/billing/billing-banner.d.ts +25 -2
  18. package/dist/billing/billing-banner.js +5 -2
  19. package/dist/billing/billing-banner.js.map +1 -1
  20. package/dist/billing/billing-labels.d.ts +32 -0
  21. package/dist/billing/billing-labels.js +9 -0
  22. package/dist/billing/billing-labels.js.map +1 -1
  23. package/dist/billing/billing-overview.d.ts +33 -0
  24. package/dist/billing/billing-overview.js +6 -0
  25. package/dist/billing/billing-overview.js.map +1 -1
  26. package/dist/billing/billing-standing.d.ts +8 -0
  27. package/dist/billing/billing-standing.js.map +1 -1
  28. package/dist/billing/cancel-subscription.d.ts +46 -0
  29. package/dist/billing/cancel-subscription.js +57 -0
  30. package/dist/billing/cancel-subscription.js.map +1 -0
  31. package/dist/billing/plan-card.d.ts +45 -1
  32. package/dist/billing/plan-card.js +53 -2
  33. package/dist/billing/plan-card.js.map +1 -1
  34. package/dist/billing/plan-switch.d.ts +10 -1
  35. package/dist/billing/plan-switch.js +22 -13
  36. package/dist/billing/plan-switch.js.map +1 -1
  37. package/dist/billing/subscription-actions.d.ts +37 -4
  38. package/dist/billing/subscription-actions.js +10 -3
  39. package/dist/billing/subscription-actions.js.map +1 -1
  40. package/dist/components/account-chips.d.ts +42 -1
  41. package/dist/components/account-chips.js +33 -0
  42. package/dist/components/account-chips.js.map +1 -1
  43. package/dist/components/empty-state.d.ts +2 -1
  44. package/dist/components/empty-state.js.map +1 -1
  45. package/dist/components/nav-pills.d.ts +2 -2
  46. package/dist/components/nav-pills.js.map +1 -1
  47. package/dist/components/tabs.d.ts +4 -32
  48. package/dist/components/tabs.js +30 -66
  49. package/dist/components/tabs.js.map +1 -1
  50. package/dist/components/translation-review-parts.d.ts +2 -2
  51. package/dist/components/translation-review-parts.js.map +1 -1
  52. package/dist/eslint/index.js +1 -1
  53. package/dist/feedback/feedback-menu-labels.js +0 -2
  54. package/dist/feedback/feedback-menu-labels.js.map +1 -1
  55. package/dist/feedback/feedback-menu.d.ts +0 -6
  56. package/dist/feedback/feedback-menu.js.map +1 -1
  57. package/dist/i18n/defaults.js +5 -1
  58. package/dist/i18n/defaults.js.map +1 -1
  59. package/dist/i18n/german.js +79 -2
  60. package/dist/i18n/german.js.map +1 -1
  61. package/dist/i18n/kit-labels.d.ts +9 -0
  62. package/dist/i18n/kit-labels.js.map +1 -1
  63. package/dist/i18n/locales/en.js +93 -3
  64. package/dist/i18n/locales/en.js.map +3 -3
  65. package/dist/i18n/locales/es.js +76 -2
  66. package/dist/i18n/locales/es.js.map +1 -1
  67. package/dist/i18n/locales/fr.js +75 -2
  68. package/dist/i18n/locales/fr.js.map +1 -1
  69. package/dist/i18n/locales/hu.js +76 -2
  70. package/dist/i18n/locales/hu.js.map +1 -1
  71. package/dist/i18n/locales/it.js +76 -2
  72. package/dist/i18n/locales/it.js.map +1 -1
  73. package/dist/i18n/locales/zh.js +75 -2
  74. package/dist/i18n/locales/zh.js.map +1 -1
  75. package/dist/i18n/review.js +20 -1
  76. package/dist/i18n/review.js.map +1 -1
  77. package/dist/index.d.ts +18 -2
  78. package/dist/index.js +23 -1
  79. package/dist/index.js.map +1 -1
  80. package/dist/settings/settings-layout.d.ts +7 -1
  81. package/dist/settings/settings-layout.js +35 -27
  82. package/dist/settings/settings-layout.js.map +1 -1
  83. package/dist/shell/account-menu-language.d.ts +46 -0
  84. package/dist/shell/account-menu-language.js +64 -0
  85. package/dist/shell/account-menu-language.js.map +1 -0
  86. package/dist/shell/admin-menu.d.ts +46 -0
  87. package/dist/shell/admin-menu.js +60 -0
  88. package/dist/shell/admin-menu.js.map +1 -0
  89. package/dist/shell/app-shell.d.ts +10 -0
  90. package/dist/shell/app-shell.js +22 -4
  91. package/dist/shell/app-shell.js.map +1 -1
  92. package/dist/shell/dev-switchers.d.ts +53 -0
  93. package/dist/shell/dev-switchers.js +102 -0
  94. package/dist/shell/dev-switchers.js.map +1 -0
  95. package/dist/shell/sync-status-indicator.d.ts +86 -0
  96. package/dist/shell/sync-status-indicator.js +170 -0
  97. package/dist/shell/sync-status-indicator.js.map +1 -0
  98. package/dist/shell/top-bar-actions.d.ts +49 -0
  99. package/dist/shell/top-bar-actions.js +31 -0
  100. package/dist/shell/top-bar-actions.js.map +1 -0
  101. package/dist/shell/top-bar-parts-labels.d.ts +84 -0
  102. package/dist/shell/top-bar-parts-labels.js +48 -0
  103. package/dist/shell/top-bar-parts-labels.js.map +1 -0
  104. package/dist/shell/topbar-action-menu.d.ts +13 -1
  105. package/dist/shell/topbar-action-menu.js +5 -2
  106. package/dist/shell/topbar-action-menu.js.map +1 -1
  107. package/dist/shell/topbar-controls.d.ts +16 -3
  108. package/dist/shell/topbar-controls.js +5 -1
  109. package/dist/shell/topbar-controls.js.map +1 -1
  110. package/dist/shell/tour-menu.d.ts +58 -0
  111. package/dist/shell/tour-menu.js +73 -0
  112. package/dist/shell/tour-menu.js.map +1 -0
  113. package/dist/shell.d.ts +14 -0
  114. package/dist/shell.js +19 -0
  115. package/dist/shell.js.map +1 -1
  116. package/package.json +1 -1
  117. package/src/admin/admin-area-labels.ts +85 -0
  118. package/src/admin/admin-forbidden.tsx +75 -0
  119. package/src/admin/admin-overview.tsx +166 -0
  120. package/src/admin/admin-sections.tsx +137 -0
  121. package/src/admin/admin-tool-links.tsx +84 -0
  122. package/src/billing/billing-banner.tsx +32 -4
  123. package/src/billing/billing-labels.ts +53 -0
  124. package/src/billing/billing-overview.ts +37 -0
  125. package/src/billing/billing-standing.ts +8 -0
  126. package/src/billing/cancel-subscription.tsx +102 -0
  127. package/src/billing/plan-card.tsx +97 -1
  128. package/src/billing/plan-switch.tsx +16 -0
  129. package/src/billing/subscription-actions.tsx +64 -15
  130. package/src/components/account-chips.tsx +81 -1
  131. package/src/components/empty-state.tsx +2 -1
  132. package/src/components/nav-pills.tsx +2 -2
  133. package/src/components/tabs.tsx +19 -110
  134. package/src/components/translation-review-parts.tsx +2 -2
  135. package/src/feedback/feedback-menu-labels.ts +0 -2
  136. package/src/feedback/feedback-menu.tsx +0 -6
  137. package/src/i18n/defaults.ts +4 -0
  138. package/src/i18n/german.ts +92 -2
  139. package/src/i18n/kit-labels.tsx +9 -0
  140. package/src/i18n/locales/en.ts +19 -0
  141. package/src/i18n/locales/es.ts +86 -2
  142. package/src/i18n/locales/fr.ts +86 -2
  143. package/src/i18n/locales/hu.ts +84 -2
  144. package/src/i18n/locales/it.ts +87 -2
  145. package/src/i18n/locales/zh.ts +79 -2
  146. package/src/i18n/review.ts +19 -0
  147. package/src/index.ts +30 -2
  148. package/src/settings/settings-layout.tsx +58 -34
  149. package/src/shell/account-menu-language.tsx +116 -0
  150. package/src/shell/admin-menu.tsx +117 -0
  151. package/src/shell/app-shell.tsx +44 -3
  152. package/src/shell/dev-switchers.tsx +171 -0
  153. package/src/shell/sync-status-indicator.tsx +301 -0
  154. package/src/shell/top-bar-actions.tsx +79 -0
  155. package/src/shell/top-bar-parts-labels.ts +133 -0
  156. package/src/shell/topbar-action-menu.tsx +15 -2
  157. package/src/shell/topbar-controls.tsx +20 -3
  158. package/src/shell/tour-menu.tsx +144 -0
  159. package/src/shell.ts +24 -0
@@ -110,8 +110,6 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
110
110
  feedbackMenu: {
111
111
  trigger: "Envoyer un retour",
112
112
  myFeedback: "Mes retours",
113
- viewFeedback: "Voir les retours",
114
- allFeedback: "Tous les retours",
115
113
  discussion: "Discussion des retours",
116
114
  inbox: "Retours reçus",
117
115
  },
@@ -1718,6 +1716,11 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
1718
1716
  "Votre paiement est en cours de traitement. Votre formule démarre dès qu’il est confirmé\u202f; cette page se met à jour d’elle-même.",
1719
1717
  choosePlan: "Choisir une formule",
1720
1718
  updatePayment: "Mettre à jour le moyen de paiement",
1719
+ // 0.42 (§16.7 A): for an admin who isn't the buyer.
1720
+ paymentFailedAskBuyer: (buyer) =>
1721
+ buyer
1722
+ ? `Le paiement a échoué. ${buyer} peut mettre à jour le moyen de paiement.`
1723
+ : "Le paiement a échoué. L’administrateur qui a souscrit l’abonnement peut mettre à jour le moyen de paiement.",
1721
1724
  checkAgain: "Vérifier à nouveau",
1722
1725
  lockReason: "Votre formule a pris fin. Choisissez une formule pour pouvoir de nouveau apporter des modifications.",
1723
1726
  // As `characterCount.limitReached` ("Limite de caractères atteinte").
@@ -1749,6 +1752,20 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
1749
1752
  switchCredited: "Crédité sur vos prochains paiements",
1750
1753
  switchNextCharge: (date) => `Prochain prélèvement le ${date}`,
1751
1754
  switchConfirm: "Changer de formule",
1755
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.
1756
+ buyerHolds: (buyer) =>
1757
+ buyer
1758
+ ? `Le moyen de paiement et les factures sont gérés par ${buyer}, qui a souscrit l’abonnement.`
1759
+ : "Le moyen de paiement et les factures sont gérés par l’administrateur qui a souscrit l’abonnement.",
1760
+ cancelConfirmTitle: "Résilier l’abonnement",
1761
+ cancelConfirmBody: (date) =>
1762
+ `Votre abonnement prendra fin le ${date}. D’ici là, tout fonctionne comme avant.`,
1763
+ cancelConfirmAction: "Résilier maintenant",
1764
+ keepSubscription: "Conserver l’abonnement",
1765
+ grantWarningTitle: "Votre accès gratuit continue",
1766
+ grantWarningBody:
1767
+ "Votre accès gratuit n’a pas de date de fin. Tant qu’il dure, un achat ne change pas votre formule : vous paieriez pour une formule qui ne s’applique pas.",
1768
+ grantWarningAction: "Acheter quand même",
1752
1769
  waitingChanges: (count) =>
1753
1770
  `${n(count)} ${plural(count, "modification en attente", "modifications en attente")} d’une formule`,
1754
1771
  // "Abandonner", as `wizard.cancelConfirmLabel`.
@@ -1822,6 +1839,73 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
1822
1839
  more: "Plus",
1823
1840
  moreTitle: "Autres pages",
1824
1841
  },
1842
+ // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words.
1843
+ adminArea: {
1844
+ title: "Administration",
1845
+ waiting: (count) => `${n(count)} en attente`,
1846
+ forbiddenTitle: "Réservé aux administrateurs",
1847
+ forbiddenBody: (appName) =>
1848
+ `C’est ici que les administrateurs gèrent ${appName}. Votre compte ne peut pas ouvrir cette page.`,
1849
+ forbiddenHome: "Aller à la page d’accueil",
1850
+ forbiddenReviewer: "Relire les traductions",
1851
+ sections: {
1852
+ overview: { title: "Vue d’ensemble", help: "Ce qui est en attente, en un coup d’œil." },
1853
+ users: { title: "Utilisateurs", help: "Qui a un compte, et ce que chacun peut faire." },
1854
+ invitations: { title: "Invitations", help: "Les liens qui permettent à une nouvelle personne d’entrer." },
1855
+ billing: { title: "Facturation", help: "L’offre, le paiement et les factures." },
1856
+ activity: { title: "Activité", help: "Ce que les administrateurs ont fait, du plus récent au plus ancien." },
1857
+ },
1858
+ tiles: {
1859
+ feedbackWaiting: "À trier",
1860
+ deletionRequests: "Demandes de suppression",
1861
+ invitationsPending: "Invitations en attente",
1862
+ users: "Utilisateurs",
1863
+ usersNew: (count) => `${n(count)} ${plural(count, "nouveau", "nouveaux")} en 7 jours`,
1864
+ },
1865
+ tools: "Outils",
1866
+ },
1867
+ // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts, keksdose's
1868
+ // reviewed sync words where they are not about its budgets; "formule" as `billing`.
1869
+ topBarParts: {
1870
+ tours: {
1871
+ menu: "Visites guidées",
1872
+ newDot: "Nouvelles visites",
1873
+ thisPage: "Sur cette page",
1874
+ newTours: "Nouvelles visites",
1875
+ allTours: "Toutes les visites…",
1876
+ badgeNew: "Nouveau",
1877
+ completed: "Terminée",
1878
+ },
1879
+ sync: {
1880
+ blocked: (count) =>
1881
+ `${n(count)} ${plural(count, "modification ne peut pas être envoyée", "modifications ne peuvent pas être envoyées")} depuis cet appareil`,
1882
+ offline: "Hors ligne — les modifications sont enregistrées sur cet appareil et seront synchronisées à la reconnexion",
1883
+ refused: "Le serveur a refusé la dernière synchronisation",
1884
+ syncing: "Synchronisation…",
1885
+ pending: (count) =>
1886
+ `${n(count)} ${plural(count, "modification", "modifications")} en attente de synchronisation`,
1887
+ syncedAt: (time) => `Synchronisé à ${time}`,
1888
+ idle: "À jour",
1889
+ syncHint: "Touchez pour synchroniser maintenant",
1890
+ offlineHint: "rien à synchroniser hors ligne",
1891
+ withHint: (state, hint) => `${state} — ${hint}`,
1892
+ scoped: (scope, state) => `${scope}\u00a0: ${state}`,
1893
+ offlineShort: "Hors ligne",
1894
+ syncingShort: "Synchronisation…",
1895
+ waitingShort: (count) => `${n(count)} en attente`,
1896
+ refusedShort: "Non synchronisé",
1897
+ offlineUnsaved: "Hors ligne — les modifications ne peuvent pas être enregistrées avant la reconnexion",
1898
+ saving: "Enregistrement…",
1899
+ },
1900
+ dev: {
1901
+ roleHeading: "Dev · rôle",
1902
+ switchPlan: "Changer de formule",
1903
+ plan: (value) => `Formule\u00a0: ${value}`,
1904
+ planHeading: "Dev · formule",
1905
+ backTo: (role) => `Revenir à ${role}`,
1906
+ billingOff: "La facturation est désactivée en local\u00a0: les formules ne changent rien",
1907
+ },
1908
+ },
1825
1909
  };
1826
1910
  }
1827
1911
 
@@ -109,8 +109,6 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
109
109
  feedbackMenu: {
110
110
  trigger: "Visszajelzés küldése",
111
111
  myFeedback: "Visszajelzéseim",
112
- viewFeedback: "Visszajelzések megtekintése",
113
- allFeedback: "Összes visszajelzés",
114
112
  discussion: "Visszajelzések megvitatása",
115
113
  inbox: "Beérkezett visszajelzések",
116
114
  },
@@ -1686,6 +1684,11 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
1686
1684
  "A fizetése feldolgozás alatt áll. A csomagja a megerősítés után azonnal elindul; ez az oldal magától frissül.",
1687
1685
  choosePlan: "Csomag választása",
1688
1686
  updatePayment: "Fizetési mód frissítése",
1687
+ // 0.42 (§16.7 A): for an admin who isn't the buyer.
1688
+ paymentFailedAskBuyer: (buyer) =>
1689
+ buyer
1690
+ ? `A fizetés sikertelen volt. ${buyer} tudja frissíteni a fizetési módot.`
1691
+ : "A fizetés sikertelen volt. Az előfizetést megvásárló adminisztrátor tudja frissíteni a fizetési módot.",
1689
1692
  checkAgain: "Újraellenőrzés",
1690
1693
  lockReason: "A csomagja lejárt. Ha ismét módosítani szeretne, válasszon csomagot.",
1691
1694
  // As `characterCount.limitReached` ("Elérte a karakterkorlátot").
@@ -1718,6 +1721,19 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
1718
1721
  switchCredited: "A következő terhelésekből levonva",
1719
1722
  switchNextCharge: (date) => `Következő terhelés: ${date}`,
1720
1723
  switchConfirm: "Csomag módosítása",
1724
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.
1725
+ buyerHolds: (buyer) =>
1726
+ buyer
1727
+ ? `A fizetési módot és a számlákat ${buyer} kezeli, aki az előfizetést megvásárolta.`
1728
+ : "A fizetési módot és a számlákat az előfizetést megvásárló adminisztrátor kezeli.",
1729
+ cancelConfirmTitle: "Előfizetés lemondása",
1730
+ cancelConfirmBody: (date) => `Az előfizetése ekkor ér véget: ${date}. Addig minden a megszokott módon működik.`,
1731
+ cancelConfirmAction: "Lemondás most",
1732
+ keepSubscription: "Előfizetés megtartása",
1733
+ grantWarningTitle: "Az ingyenes hozzáférése továbbra is él",
1734
+ grantWarningBody:
1735
+ "Az ingyenes hozzáférésének nincs lejárati dátuma. Amíg tart, a vásárlás nem változtatja meg a csomagját: olyan csomagért fizetne, amely nem érvényes.",
1736
+ grantWarningAction: "Mégis megvásárolom",
1721
1737
  // No plural after a numeral (convention 2).
1722
1738
  waitingChanges: (count) => `${n(count)} módosítás csomagra vár`,
1723
1739
  // "Elvetés", as `wizard.cancelConfirmLabel`.
@@ -1789,6 +1805,72 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
1789
1805
  more: "Továbbiak",
1790
1806
  moreTitle: "További oldalak",
1791
1807
  },
1808
+ // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words. "Ön", as
1809
+ // the rest of the catalogue.
1810
+ adminArea: {
1811
+ title: "Adminisztráció",
1812
+ waiting: (count) => `${n(count)} várakozik`,
1813
+ forbiddenTitle: "Csak adminisztrátoroknak",
1814
+ forbiddenBody: (appName) =>
1815
+ `Itt kezelik az adminisztrátorok a(z) ${appName} alkalmazást. Az Ön fiókja nem nyithatja meg ezt az oldalt.`,
1816
+ forbiddenHome: "Ugrás a kezdőlapra",
1817
+ forbiddenReviewer: "Fordítások ellenőrzése",
1818
+ sections: {
1819
+ overview: { title: "Áttekintés", help: "Ami most várakozik, egy pillantásra." },
1820
+ users: { title: "Felhasználók", help: "Kinek van fiókja, és ki mit tehet." },
1821
+ invitations: { title: "Meghívások", help: "A linkek, amelyekkel új személy csatlakozhat." },
1822
+ billing: { title: "Számlázás", help: "A csomag, a fizetés és a számlák." },
1823
+ activity: { title: "Tevékenység", help: "Mit tettek az adminisztrátorok, a legújabb elöl." },
1824
+ },
1825
+ tiles: {
1826
+ feedbackWaiting: "Osztályozásra vár",
1827
+ deletionRequests: "Törlési kérelmek",
1828
+ invitationsPending: "Függő meghívások",
1829
+ users: "Felhasználók",
1830
+ usersNew: (count) => `${n(count)} új az elmúlt 7 napban`,
1831
+ },
1832
+ tools: "Eszközök",
1833
+ },
1834
+ // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts; "csomag" as
1835
+ // `billing`, the formal register as the rest of the catalogue.
1836
+ topBarParts: {
1837
+ tours: {
1838
+ menu: "Bemutatók",
1839
+ newDot: "Új bemutatók",
1840
+ thisPage: "Ezen az oldalon",
1841
+ newTours: "Új bemutatók",
1842
+ allTours: "Összes bemutató…",
1843
+ badgeNew: "Új",
1844
+ completed: "Elvégezve",
1845
+ },
1846
+ sync: {
1847
+ blocked: (count) => `${n(count)} módosítás nem küldhető el erről az eszközről`,
1848
+ offline: "Offline – a módosítások ezen az eszközön maradnak, és az újracsatlakozáskor szinkronizálódnak",
1849
+ refused: "A szerver elutasította a legutóbbi szinkronizálást",
1850
+ syncing: "Szinkronizálás…",
1851
+ pending: (count) => `${n(count)} módosítás szinkronizálásra vár`,
1852
+ syncedAt: (time) => `Szinkronizálva: ${time}`,
1853
+ idle: "Naprakész",
1854
+ syncHint: "Koppintson a szinkronizáláshoz",
1855
+ offlineHint: "offline nincs mit szinkronizálni",
1856
+ withHint: (state, hint) => `${state} – ${hint}`,
1857
+ scoped: (scope, state) => `${scope}: ${state}`,
1858
+ offlineShort: "Offline",
1859
+ syncingShort: "Szinkronizálás…",
1860
+ waitingShort: (count) => `${n(count)} várakozik`,
1861
+ refusedShort: "Nincs szinkronizálva",
1862
+ offlineUnsaved: "Offline – a módosítások az újracsatlakozásig nem menthetők",
1863
+ saving: "Mentés…",
1864
+ },
1865
+ dev: {
1866
+ roleHeading: "Dev · szerepkör",
1867
+ switchPlan: "Csomag váltása",
1868
+ plan: (value) => `Csomag: ${value}`,
1869
+ planHeading: "Dev · csomag",
1870
+ backTo: (role) => `Vissza: ${role}`,
1871
+ billingOff: "A számlázás helyben ki van kapcsolva: a csomagok semmin nem változtatnak",
1872
+ },
1873
+ },
1792
1874
  };
1793
1875
  }
1794
1876
 
@@ -112,8 +112,6 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
112
112
  feedbackMenu: {
113
113
  trigger: "Invia feedback",
114
114
  myFeedback: "I miei feedback",
115
- viewFeedback: "Visualizza feedback",
116
- allFeedback: "Tutti i feedback",
117
115
  discussion: "Discussione sui feedback",
118
116
  inbox: "Feedback ricevuti",
119
117
  },
@@ -1701,6 +1699,11 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1701
1699
  "Il Suo pagamento è in elaborazione. Il Suo piano inizia non appena viene confermato; questa pagina si aggiorna da sola.",
1702
1700
  choosePlan: "Scegli un piano",
1703
1701
  updatePayment: "Aggiorna il metodo di pagamento",
1702
+ // 0.42 (§16.7 A): for an admin who isn't the buyer.
1703
+ paymentFailedAskBuyer: (buyer) =>
1704
+ buyer
1705
+ ? `Il pagamento non è andato a buon fine. ${buyer} può aggiornare il metodo di pagamento.`
1706
+ : "Il pagamento non è andato a buon fine. L’amministratore che ha sottoscritto l’abbonamento può aggiornare il metodo di pagamento.",
1704
1707
  checkAgain: "Verifica di nuovo",
1705
1708
  lockReason: "Il Suo piano è terminato. Scelga un piano per apportare di nuovo modifiche.",
1706
1709
  // As `characterCount.limitReached` ("Limite di caratteri raggiunto").
@@ -1731,6 +1734,20 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1731
1734
  switchCredited: "Accreditato sui prossimi addebiti",
1732
1735
  switchNextCharge: (date) => `Prossimo addebito il ${date}`,
1733
1736
  switchConfirm: "Cambia piano",
1737
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.
1738
+ buyerHolds: (buyer) =>
1739
+ buyer
1740
+ ? `Il metodo di pagamento e le fatture sono gestiti da ${buyer}, che ha sottoscritto l’abbonamento.`
1741
+ : "Il metodo di pagamento e le fatture sono gestiti dall’amministratore che ha sottoscritto l’abbonamento.",
1742
+ cancelConfirmTitle: "Disdici l’abbonamento",
1743
+ cancelConfirmBody: (date) =>
1744
+ `Il Suo abbonamento termina il ${date}. Fino ad allora tutto funziona come prima.`,
1745
+ cancelConfirmAction: "Disdici ora",
1746
+ keepSubscription: "Mantieni l’abbonamento",
1747
+ grantWarningTitle: "Il Suo accesso gratuito continua",
1748
+ grantWarningBody:
1749
+ "Il Suo accesso gratuito non ha una data di fine. Finché dura, un acquisto non cambia il Suo piano: pagherebbe per un piano che non si applica.",
1750
+ grantWarningAction: "Acquista comunque",
1734
1751
  waitingChanges: (count) =>
1735
1752
  `${n(count)} ${plural(count, "modifica in attesa", "modifiche in attesa")} di un piano`,
1736
1753
  // "Scarta", as `wizard.cancelConfirmLabel`.
@@ -1801,6 +1818,74 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1801
1818
  more: "Altro",
1802
1819
  moreTitle: "Altre pagine",
1803
1820
  },
1821
+ // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words. "Lei", as
1822
+ // the rest of the catalogue.
1823
+ adminArea: {
1824
+ title: "Amministrazione",
1825
+ waiting: (count) => `${n(count)} in attesa`,
1826
+ forbiddenTitle: "Solo per gli amministratori",
1827
+ forbiddenBody: (appName) =>
1828
+ `Qui gli amministratori gestiscono ${appName}. Il Suo account non può aprire questa pagina.`,
1829
+ forbiddenHome: "Vai alla pagina iniziale",
1830
+ forbiddenReviewer: "Rivedi le traduzioni",
1831
+ sections: {
1832
+ overview: { title: "Panoramica", help: "Ciò che è in attesa, a colpo d’occhio." },
1833
+ users: { title: "Utenti", help: "Chi ha un account e cosa può fare ciascuno." },
1834
+ invitations: { title: "Inviti", help: "I link con cui entra una persona nuova." },
1835
+ billing: { title: "Fatturazione", help: "Il piano, il pagamento e le fatture." },
1836
+ activity: { title: "Attività", help: "Ciò che hanno fatto gli amministratori, dal più recente." },
1837
+ },
1838
+ tiles: {
1839
+ feedbackWaiting: "Da smistare",
1840
+ deletionRequests: "Richieste di eliminazione",
1841
+ invitationsPending: "Inviti in sospeso",
1842
+ users: "Utenti",
1843
+ usersNew: (count) => `${n(count)} ${plural(count, "nuovo", "nuovi")} in 7 giorni`,
1844
+ },
1845
+ tools: "Strumenti",
1846
+ },
1847
+ // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts, keksdose's
1848
+ // reviewed sync words where they are not about its budgets; "piano" as `billing`.
1849
+ topBarParts: {
1850
+ tours: {
1851
+ menu: "Tour guidati",
1852
+ newDot: "Nuovi tour",
1853
+ thisPage: "In questa pagina",
1854
+ newTours: "Nuovi tour",
1855
+ allTours: "Tutti i tour…",
1856
+ badgeNew: "Nuovo",
1857
+ completed: "Completato",
1858
+ },
1859
+ sync: {
1860
+ blocked: (count) =>
1861
+ `${n(count)} ${plural(count, "modifica non può essere inviata", "modifiche non possono essere inviate")} da questo dispositivo`,
1862
+ offline: "Offline: le modifiche vengono salvate su questo dispositivo e sincronizzate alla riconnessione",
1863
+ refused: "Il server ha rifiutato l’ultima sincronizzazione",
1864
+ syncing: "Sincronizzazione…",
1865
+ pending: (count) =>
1866
+ `${n(count)} ${plural(count, "modifica", "modifiche")} in attesa di sincronizzazione`,
1867
+ syncedAt: (time) => `Sincronizzato alle ${time}`,
1868
+ idle: "Aggiornato",
1869
+ syncHint: "Tocchi per sincronizzare ora",
1870
+ offlineHint: "offline non c’è nulla da sincronizzare",
1871
+ withHint: (state, hint) => `${state} — ${hint}`,
1872
+ scoped: (scope, state) => `${scope}: ${state}`,
1873
+ offlineShort: "Offline",
1874
+ syncingShort: "Sincronizzazione…",
1875
+ waitingShort: (count) => `${n(count)} in attesa`,
1876
+ refusedShort: "Non sincronizzato",
1877
+ offlineUnsaved: "Offline: le modifiche non possono essere salvate finché non si riconnette",
1878
+ saving: "Salvataggio…",
1879
+ },
1880
+ dev: {
1881
+ roleHeading: "Dev · ruolo",
1882
+ switchPlan: "Cambia piano",
1883
+ plan: (value) => `Piano: ${value}`,
1884
+ planHeading: "Dev · piano",
1885
+ backTo: (role) => `Torna a ${role}`,
1886
+ billingOff: "La fatturazione è disattivata in locale: i piani non cambiano nulla",
1887
+ },
1888
+ },
1804
1889
  };
1805
1890
  }
1806
1891
 
@@ -102,8 +102,6 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
102
102
  feedbackMenu: {
103
103
  trigger: "发送反馈",
104
104
  myFeedback: "我的反馈",
105
- viewFeedback: "查看反馈",
106
- allFeedback: "全部反馈",
107
105
  discussion: "反馈讨论",
108
106
  inbox: "反馈收件箱",
109
107
  },
@@ -1615,6 +1613,9 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
1615
1613
  processing: "您的付款正在处理中。确认后您的套餐即会生效;此页面会自动更新。",
1616
1614
  choosePlan: "选择套餐",
1617
1615
  updatePayment: "更新付款方式",
1616
+ // 0.42 (§16.7 A): for an admin who isn't the buyer.
1617
+ paymentFailedAskBuyer: (buyer) =>
1618
+ buyer ? `付款未成功。${buyer} 可以更新付款方式。` : "付款未成功。购买该订阅的管理员可以更新付款方式。",
1618
1619
  checkAgain: "再次检查",
1619
1620
  lockReason: "您的套餐已结束。选择套餐后即可再次进行修改。",
1620
1621
  // As `characterCount.limitReached` ("已达到字符数上限").
@@ -1645,6 +1646,18 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
1645
1646
  switchCredited: "抵扣后续扣款",
1646
1647
  switchNextCharge: (date) => `下次扣款日期:${date}`,
1647
1648
  switchConfirm: "更改套餐",
1649
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.
1650
+ buyerHolds: (buyer) =>
1651
+ buyer
1652
+ ? `付款方式和发票由购买该订阅的 ${buyer} 管理。`
1653
+ : "付款方式和发票由购买该订阅的管理员管理。",
1654
+ cancelConfirmTitle: "取消订阅",
1655
+ cancelConfirmBody: (date) => `您的订阅将于 ${date} 结束。在此之前,一切照常使用。`,
1656
+ cancelConfirmAction: "立即取消订阅",
1657
+ keepSubscription: "保留订阅",
1658
+ grantWarningTitle: "您的免费使用权仍然有效",
1659
+ grantWarningBody: "您的免费使用权没有结束日期。在此期间,购买不会改变您的套餐:您将为一个不生效的套餐付费。",
1660
+ grantWarningAction: "仍然购买",
1648
1661
  waitingChanges: (count) => `${n(count)} 项修改正在等待套餐`,
1649
1662
  // "放弃", as `wizard.cancelConfirmLabel`.
1650
1663
  discardWaiting: "放弃等待中的修改",
@@ -1710,6 +1723,70 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
1710
1723
  more: "更多",
1711
1724
  moreTitle: "更多页面",
1712
1725
  },
1726
+ // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words.
1727
+ adminArea: {
1728
+ title: "管理",
1729
+ waiting: (count) => `${n(count)} 项待处理`,
1730
+ forbiddenTitle: "仅限管理员",
1731
+ forbiddenBody: (appName) => `管理员在这里管理 ${appName}。您的账户无法打开此页面。`,
1732
+ forbiddenHome: "前往首页",
1733
+ forbiddenReviewer: "审校翻译",
1734
+ sections: {
1735
+ overview: { title: "概览", help: "一眼看清待处理的事项。" },
1736
+ users: { title: "用户", help: "谁拥有账户,以及每个人可以做什么。" },
1737
+ invitations: { title: "邀请", help: "让新成员加入的链接。" },
1738
+ billing: { title: "账单", help: "套餐、付款和发票。" },
1739
+ activity: { title: "活动", help: "管理员的操作记录,最新的在前。" },
1740
+ },
1741
+ tiles: {
1742
+ feedbackWaiting: "待分类",
1743
+ deletionRequests: "删除请求",
1744
+ invitationsPending: "待接受的邀请",
1745
+ users: "用户",
1746
+ usersNew: (count) => `近 7 天新增 ${n(count)} 人`,
1747
+ },
1748
+ tools: "工具",
1749
+ },
1750
+ // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts; "套餐" as
1751
+ // `billing`.
1752
+ topBarParts: {
1753
+ tours: {
1754
+ menu: "导览",
1755
+ newDot: "有新导览",
1756
+ thisPage: "本页",
1757
+ newTours: "新导览",
1758
+ allTours: "全部导览…",
1759
+ badgeNew: "新",
1760
+ completed: "已完成",
1761
+ },
1762
+ sync: {
1763
+ blocked: (count) => `${n(count)} 项修改无法从此设备发送`,
1764
+ offline: "离线——修改已保存在此设备上,重新连接后会同步",
1765
+ refused: "服务器拒绝了上一次同步",
1766
+ syncing: "正在同步…",
1767
+ pending: (count) => `${n(count)} 项修改等待同步`,
1768
+ syncedAt: (time) => `已于 ${time} 同步`,
1769
+ idle: "已是最新",
1770
+ syncHint: "点按立即同步",
1771
+ offlineHint: "离线时无可同步内容",
1772
+ withHint: (state, hint) => `${state}——${hint}`,
1773
+ scoped: (scope, state) => `${scope}:${state}`,
1774
+ offlineShort: "离线",
1775
+ syncingShort: "正在同步…",
1776
+ waitingShort: (count) => `${n(count)} 项等待中`,
1777
+ refusedShort: "未同步",
1778
+ offlineUnsaved: "离线——重新连接前无法保存修改",
1779
+ saving: "正在保存…",
1780
+ },
1781
+ dev: {
1782
+ roleHeading: "开发 · 角色",
1783
+ switchPlan: "切换套餐",
1784
+ plan: (value) => `套餐:${value}`,
1785
+ planHeading: "开发 · 套餐",
1786
+ backTo: (role) => `返回 ${role}`,
1787
+ billingOff: "本地已关闭计费:切换套餐不会改变任何内容",
1788
+ },
1789
+ },
1713
1790
  };
1714
1791
  }
1715
1792
 
@@ -393,9 +393,28 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
393
393
  // 0.39: PlanSwitchConfirm's two lines with figures (§15.2.10).
394
394
  "billing.switchFromTo": [["{{from}}", "{{to}}"]],
395
395
  "billing.switchNextCharge": [["{{date}}"]],
396
+ // 0.42 (§16): the buyer's name, or none once they are gone; the cancel's period end.
397
+ "billing.buyerHolds": [["{{buyer}}"], [undefined]],
398
+ "billing.paymentFailedAskBuyer": [["{{buyer}}"], [undefined]],
399
+ "billing.cancelConfirmBody": [["{{date}}"]],
396
400
  "planChange.current": [["{{plan}}"]],
397
401
  "planChange.changed": [["{{from}}", "{{to}}"]],
398
402
  "planChange.set": [["{{to}}"]],
399
403
  "planChange.untilDone": [["{{date}}"]],
400
404
  "planChange.usageOf": [["{{used}}", "{{limit}}", "{{dimension}}"]],
405
+ // 0.42.0 (docs/admin-harmonization.md §3.1): the menu row's count, the 403 page's app,
406
+ // the users tile's new accounts.
407
+ "adminArea.waiting": one,
408
+ "adminArea.forbiddenBody": [["{{app}}"]],
409
+ "adminArea.tiles.usersNew": one,
410
+ // 0.42.0 (docs/top-bar-harmonization.md §3.1): the sync indicator's counts, its time, the
411
+ // state joined to its hint or to the app's scope; the dev plan and the role to go back to.
412
+ "topBarParts.sync.blocked": one,
413
+ "topBarParts.sync.pending": one,
414
+ "topBarParts.sync.syncedAt": [["{{time}}"]],
415
+ "topBarParts.sync.withHint": [["{{state}}", "{{hint}}"]],
416
+ "topBarParts.sync.scoped": [["{{scope}}", "{{state}}"]],
417
+ "topBarParts.sync.waitingShort": one,
418
+ "topBarParts.dev.plan": [["{{plan}}"]],
419
+ "topBarParts.dev.backTo": [["{{role}}"]],
401
420
  };
package/src/index.ts CHANGED
@@ -412,6 +412,10 @@ export type { WriteLock, WriteLockLabels, WriteLockProviderProps, WriteLockKind,
412
412
  // 0.18: the parts both apps' admin rosters repeat (Kurvenschmiede 6).
413
413
  export { RoleChip, AccountStateChip, DateMark, dateColumn, DEFAULT_ACCOUNT_STATE_LABELS, ACCOUNT_STATE_TONES } from "./components/account-chips";
414
414
  export type { RoleChipProps, RoleDefinition, RoleVocabulary, AccountState, AccountStateLabels, AccountStateChipProps, DateMarkProps, DateColumnOptions } from "./components/account-chips";
415
+ // 0.42 (docs/admin-harmonization.md §2.1): the role in the account menu's header, a link
416
+ // to the role's tool (`RoleDefinition.href`).
417
+ export { AccountRoleChip } from "./components/account-chips";
418
+ export type { AccountRoleChipProps } from "./components/account-chips";
415
419
  // 0.18: the cold-start notice keksdose built (#199), for every app: the corner notice
416
420
  // that explains the wait (its framework-free watchdog is lib/server-wake).
417
421
  export { ServerWakeNotice, useServerWakeStage, DEFAULT_SERVER_WAKE_LABELS } from "./components/server-wake";
@@ -785,6 +789,25 @@ export type {
785
789
  InvitationsPanelProps,
786
790
  } from "./admin/invitations-panel";
787
791
  export type { AdminPerson } from "./admin/admin-parts";
792
+ // 0.42.0 (docs/admin-harmonization.md §3.1): the admin area's template — its words, the
793
+ // shared sections and the catalogue helper, the 403 page, the overview and its tiles fed
794
+ // by `GET /admin/attention`, and the Tools list. The menu row is `./shell`'s.
795
+ export { DEFAULT_ADMIN_AREA_LABELS, useAdminAreaLabels } from "./admin/admin-area-labels";
796
+ export type { AdminAreaLabels, AdminTileLabels, AdminSharedSection } from "./admin/admin-area-labels";
797
+ export { ADMIN_SECTIONS, adminSections } from "./admin/admin-sections";
798
+ export type { AdminSectionDefinition, AdminOwnSection, AdminSectionsOptions } from "./admin/admin-sections";
799
+ export { AdminForbidden } from "./admin/admin-forbidden";
800
+ export type { AdminForbiddenProps } from "./admin/admin-forbidden";
801
+ export { AdminOverview, AttentionTile, adminWaitingCount, DEFAULT_ADMIN_ATTENTION_HREFS } from "./admin/admin-overview";
802
+ export type {
803
+ AdminAttention,
804
+ AdminAttentionTile,
805
+ AdminExtraTile,
806
+ AdminOverviewProps,
807
+ AttentionTileProps,
808
+ } from "./admin/admin-overview";
809
+ export { AdminToolLinks } from "./admin/admin-tool-links";
810
+ export type { AdminToolLink, AdminToolLinksProps } from "./admin/admin-tool-links";
788
811
  // 0.33.0: the operator's plan parts (docs/billing-harmonization.md §14.12).
789
812
  export {
790
813
  planColumn,
@@ -811,8 +834,8 @@ export { DEFAULT_BILLING_LABELS, useBillingLabels, SUBSCRIPTION_STATUSES } from
811
834
  export type { BillingLabels, SubscriptionStatus } from "./billing/billing-labels";
812
835
  export { BILLING_INTERVALS, planPrice, minorToMajor, formatPlanPrice, billingCurrencyFor } from "./billing/plan-price";
813
836
  export type { BillingInterval, BillingCurrency, PlanIntervalPrices, PlanPrices, PlanPriceAnswer } from "./billing/plan-price";
814
- export { PlanCard, PlanPicker, planRelation } from "./billing/plan-card";
815
- export type { BillingPlan, PlanRelation, PlanCardProps, PlanPickerProps, PlanChoice } from "./billing/plan-card";
837
+ export { PlanCard, PlanPicker, GrantWarningConfirm, planRelation } from "./billing/plan-card";
838
+ export type { BillingPlan, PlanRelation, PlanCardProps, PlanPickerProps, PlanChoice, GrantWarningConfirmProps } from "./billing/plan-card";
816
839
  export { SubscriptionStatusChip, SUBSCRIPTION_STATUS_TONES } from "./billing/subscription-status-chip";
817
840
  export type { SubscriptionStatusChipProps } from "./billing/subscription-status-chip";
818
841
  export { BillingBanner } from "./billing/billing-banner";
@@ -855,6 +878,11 @@ export type { PlanLimitToastOptions } from "./billing/plan-limit-toast";
855
878
  export { PlanSwitchConfirm } from "./billing/plan-switch";
856
879
  export type { PlanSwitchConfirmProps, PlanSwitchSide } from "./billing/plan-switch";
857
880
  export type { PaidPrice, PlanSwitchRequest, PlanSwitchPreview } from "./billing/billing-overview";
881
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the permanent-grant warning.
882
+ export { isPermanentGrant } from "./billing/billing-overview";
883
+ export type { BillingPortalAccess } from "./billing/billing-overview";
884
+ export { CancelSubscriptionConfirm } from "./billing/cancel-subscription";
885
+ export type { CancelSubscriptionConfirmProps } from "./billing/cancel-subscription";
858
886
  // The operator's plan parts (§14.12) are admin/plan-change, in the admin section.
859
887
 
860
888
  // ── settings ─────────────────────────────────────────────────────────────────