@eifi1/ui-kit 0.36.0 → 0.38.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 (147) hide show
  1. package/README.md +11 -4
  2. package/dist/components/field-parts.d.ts +3 -3
  3. package/dist/components/field-parts.js.map +1 -1
  4. package/dist/components/help-popover.d.ts +1 -1
  5. package/dist/components/help-popover.js.map +1 -1
  6. package/dist/components/numeric-field.d.ts +1 -1
  7. package/dist/components/numeric-field.js.map +1 -1
  8. package/dist/eslint/index.js +1 -1
  9. package/dist/eslint/role-utilities.d.ts +34 -2
  10. package/dist/eslint/role-utilities.js +30 -9
  11. package/dist/eslint/role-utilities.js.map +1 -1
  12. package/dist/feedback/feedback-comment-thread.d.ts +80 -0
  13. package/dist/feedback/feedback-comment-thread.js +162 -0
  14. package/dist/feedback/feedback-comment-thread.js.map +1 -0
  15. package/dist/feedback/feedback-dialog-labels.js +2 -1
  16. package/dist/feedback/feedback-dialog-labels.js.map +1 -1
  17. package/dist/feedback/feedback-dialog.d.ts +13 -0
  18. package/dist/feedback/feedback-dialog.js +12 -4
  19. package/dist/feedback/feedback-dialog.js.map +1 -1
  20. package/dist/feedback/feedback-menu-labels.js +2 -1
  21. package/dist/feedback/feedback-menu-labels.js.map +1 -1
  22. package/dist/feedback/feedback-menu.d.ts +17 -3
  23. package/dist/feedback/feedback-menu.js +11 -1
  24. package/dist/feedback/feedback-menu.js.map +1 -1
  25. package/dist/feedback/feedback-public-labels.d.ts +50 -0
  26. package/dist/feedback/feedback-public-labels.js +26 -0
  27. package/dist/feedback/feedback-public-labels.js.map +1 -0
  28. package/dist/feedback/feedback-public-list.d.ts +118 -0
  29. package/dist/feedback/feedback-public-list.js +248 -0
  30. package/dist/feedback/feedback-public-list.js.map +1 -0
  31. package/dist/feedback/feedback-public-switch.d.ts +51 -0
  32. package/dist/feedback/feedback-public-switch.js +50 -0
  33. package/dist/feedback/feedback-public-switch.js.map +1 -0
  34. package/dist/feedback/feedback-public-types.d.ts +75 -0
  35. package/dist/feedback/feedback-public-types.js +2 -0
  36. package/dist/feedback/feedback-public-types.js.map +1 -0
  37. package/dist/feedback/feedback-record.d.ts +32 -1
  38. package/dist/feedback/feedback-record.js +10 -0
  39. package/dist/feedback/feedback-record.js.map +1 -1
  40. package/dist/feedback/feedback-replies.d.ts +97 -0
  41. package/dist/feedback/feedback-replies.js +114 -0
  42. package/dist/feedback/feedback-replies.js.map +1 -0
  43. package/dist/feedback/feedback-row-detail-labels.js +1 -0
  44. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  45. package/dist/feedback/feedback-row-detail.d.ts +38 -10
  46. package/dist/feedback/feedback-row-detail.js +50 -50
  47. package/dist/feedback/feedback-row-detail.js.map +1 -1
  48. package/dist/feedback/feedback-submit-dialog.d.ts +3 -1
  49. package/dist/feedback/feedback-submit-dialog.js +6 -1
  50. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  51. package/dist/feedback/feedback-submit.d.ts +8 -0
  52. package/dist/feedback/feedback-submit.js +3 -2
  53. package/dist/feedback/feedback-submit.js.map +1 -1
  54. package/dist/feedback/feedback-table.d.ts +15 -5
  55. package/dist/feedback/feedback-table.js +46 -5
  56. package/dist/feedback/feedback-table.js.map +1 -1
  57. package/dist/feedback/feedback-thread-parts-labels.d.ts +6 -0
  58. package/dist/feedback/feedback-thread-parts-labels.js +36 -0
  59. package/dist/feedback/feedback-thread-parts-labels.js.map +1 -0
  60. package/dist/feedback/feedback-thread.d.ts +8 -0
  61. package/dist/feedback/feedback-thread.js +7 -2
  62. package/dist/feedback/feedback-thread.js.map +1 -1
  63. package/dist/feedback/feedback-vote-button.d.ts +48 -0
  64. package/dist/feedback/feedback-vote-button.js +72 -0
  65. package/dist/feedback/feedback-vote-button.js.map +1 -0
  66. package/dist/feedback.d.ts +6 -0
  67. package/dist/feedback.js +6 -0
  68. package/dist/feedback.js.map +1 -1
  69. package/dist/i18n/defaults.js +12 -0
  70. package/dist/i18n/defaults.js.map +1 -1
  71. package/dist/i18n/german.js +64 -2
  72. package/dist/i18n/german.js.map +1 -1
  73. package/dist/i18n/kit-labels.d.ts +20 -3
  74. package/dist/i18n/kit-labels.js.map +1 -1
  75. package/dist/i18n/locales/en.js +80 -3
  76. package/dist/i18n/locales/en.js.map +3 -3
  77. package/dist/i18n/locales/es.js +64 -2
  78. package/dist/i18n/locales/es.js.map +1 -1
  79. package/dist/i18n/locales/fr.js +64 -2
  80. package/dist/i18n/locales/fr.js.map +1 -1
  81. package/dist/i18n/locales/hu.js +64 -2
  82. package/dist/i18n/locales/hu.js.map +1 -1
  83. package/dist/i18n/locales/it.js +64 -2
  84. package/dist/i18n/locales/it.js.map +1 -1
  85. package/dist/i18n/locales/zh.js +64 -2
  86. package/dist/i18n/locales/zh.js.map +1 -1
  87. package/dist/i18n/review.js +4 -0
  88. package/dist/i18n/review.js.map +1 -1
  89. package/dist/i18n/shared-labels.js +1 -1
  90. package/dist/i18n/shared-labels.js.map +1 -1
  91. package/dist/index.d.ts +2 -0
  92. package/dist/index.js +6 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/lib/plain-text.d.ts +1 -1
  95. package/dist/lib/plain-text.js.map +1 -1
  96. package/dist/notifications/feedback-notification-types-labels.d.ts +15 -0
  97. package/dist/notifications/feedback-notification-types-labels.js +11 -0
  98. package/dist/notifications/feedback-notification-types-labels.js.map +1 -0
  99. package/dist/notifications/feedback-notification-types.d.ts +28 -0
  100. package/dist/notifications/feedback-notification-types.js +21 -0
  101. package/dist/notifications/feedback-notification-types.js.map +1 -0
  102. package/dist/rhf/fields.d.ts +1 -1
  103. package/dist/rhf/fields.js.map +1 -1
  104. package/dist/settings/device-reset-setting.d.ts +4 -4
  105. package/dist/settings/device-reset-setting.js.map +1 -1
  106. package/package.json +1 -1
  107. package/src/components/field-parts.tsx +4 -4
  108. package/src/components/help-popover.tsx +1 -1
  109. package/src/components/numeric-field.ts +1 -1
  110. package/src/eslint/role-utilities.ts +67 -11
  111. package/src/feedback/feedback-comment-thread.tsx +255 -0
  112. package/src/feedback/feedback-dialog-labels.ts +1 -0
  113. package/src/feedback/feedback-dialog.tsx +30 -2
  114. package/src/feedback/feedback-menu-labels.ts +1 -0
  115. package/src/feedback/feedback-menu.tsx +29 -3
  116. package/src/feedback/feedback-public-labels.ts +76 -0
  117. package/src/feedback/feedback-public-list.tsx +395 -0
  118. package/src/feedback/feedback-public-switch.tsx +102 -0
  119. package/src/feedback/feedback-public-types.ts +82 -0
  120. package/src/feedback/feedback-record.ts +39 -1
  121. package/src/feedback/feedback-replies.tsx +235 -0
  122. package/src/feedback/feedback-row-detail-labels.ts +1 -0
  123. package/src/feedback/feedback-row-detail.tsx +103 -74
  124. package/src/feedback/feedback-submit-dialog.tsx +9 -0
  125. package/src/feedback/feedback-submit.tsx +10 -1
  126. package/src/feedback/feedback-table.tsx +73 -6
  127. package/src/feedback/feedback-thread-parts-labels.ts +41 -0
  128. package/src/feedback/feedback-thread.tsx +18 -1
  129. package/src/feedback/feedback-vote-button.tsx +122 -0
  130. package/src/feedback.ts +10 -0
  131. package/src/i18n/defaults.ts +12 -0
  132. package/src/i18n/german.ts +62 -0
  133. package/src/i18n/kit-labels.tsx +20 -3
  134. package/src/i18n/locales/en.ts +7 -0
  135. package/src/i18n/locales/es.ts +62 -0
  136. package/src/i18n/locales/fr.ts +62 -0
  137. package/src/i18n/locales/hu.ts +62 -0
  138. package/src/i18n/locales/it.ts +62 -0
  139. package/src/i18n/locales/zh.ts +62 -0
  140. package/src/i18n/review.ts +4 -0
  141. package/src/i18n/shared-labels.ts +1 -1
  142. package/src/index.ts +9 -0
  143. package/src/lib/plain-text.ts +1 -1
  144. package/src/notifications/feedback-notification-types-labels.ts +24 -0
  145. package/src/notifications/feedback-notification-types.ts +46 -0
  146. package/src/rhf/fields.tsx +1 -1
  147. package/src/settings/device-reset-setting.tsx +4 -4
@@ -55,6 +55,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
55
55
  submitHint: (apple) => (apple ? "⌘ Entrée pour envoyer" : "Ctrl+Entrée pour envoyer"),
56
56
  cancel: "Annuler",
57
57
  save: "Envoyer",
58
+ publicNotice: "Les autres personnes verront le titre et le texte (jamais vos captures d’écran ni vos fichiers).",
58
59
  },
59
60
  feedbackThread: {
60
61
  thread: "Commentaires",
@@ -106,6 +107,36 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
106
107
  trigger: "Envoyer un retour",
107
108
  myFeedback: "Mes retours",
108
109
  viewFeedback: "Voir les retours",
110
+ allFeedback: "Tous les retours",
111
+ },
112
+ // 0.38.0 — docs/feedback-harmonization.md §9: the public pages and the two feedback
113
+ // notification types. "Retour" for a report, as `feedbackMenu`.
114
+ feedbackPublic: {
115
+ title: "Tous les retours",
116
+ sort: "Trier",
117
+ sortNewest: "Plus récents",
118
+ sortVotes: "Plus demandés",
119
+ sortUpdated: "Mis à jour récemment",
120
+ search: "Rechercher dans les titres",
121
+ columnVotes: "Votes",
122
+ total: (count) => (count === 1 ? "1 retour" : `${n(count)} retours`),
123
+ comments: (count) => (count === 1 ? "1 commentaire" : `${n(count)} commentaires`),
124
+ votes: (count) => (count === 1 ? "1 vote" : `${n(count)} votes`),
125
+ anonymous: "Une personne",
126
+ filedBy: (name) => `De ${name}`,
127
+ body: "Description",
128
+ conversation: "Réponses et commentaires",
129
+ loading: "Chargement…",
130
+ empty: "Aucun retour pour l’instant",
131
+ visibleToOthers: "Visible par les autres",
132
+ visibleHint: "Les autres personnes voient le titre et le texte, jamais vos captures d’écran ni vos fichiers.",
133
+ visibleLocked: "Seulement tant que le retour est encore ouvert.",
134
+ },
135
+ feedbackNotificationTypes: {
136
+ answered: "Réponses à vos retours",
137
+ answeredDescription: "Quand un retour que vous avez écrit ou commenté reçoit une réponse.",
138
+ comment: "Commentaires sur les retours que vous suivez",
139
+ commentDescription: "Quand quelqu’un commente un retour que vous avez écrit ou commenté.",
109
140
  },
110
141
  feedbackContext: {
111
142
  user: "Utilisateur",
@@ -146,6 +177,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
146
177
  download: (name) => `Télécharger ${name}`,
147
178
  downloadFailed: "La pièce jointe n’a pas pu être téléchargée.",
148
179
  outcome: "Résultat",
180
+ replies: "Réponses",
149
181
  resolvedAt: (date) => `Résolu le ${date}`,
150
182
  outcomeAdd: "Ajouter un résultat",
151
183
  outcomeUpdate: "Mettre à jour",
@@ -160,6 +192,36 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
160
192
  status: "Statut",
161
193
  note: "Note",
162
194
  },
195
+ // 0.38.0 — docs/feedback-harmonization.md §9.15: the vote, the comment thread, the replies.
196
+ feedbackVote: {
197
+ vote: "Moi aussi",
198
+ own: "Votre retour",
199
+ },
200
+ feedbackComments: {
201
+ comments: "Commentaires",
202
+ empty: "Pas encore de commentaire",
203
+ hidden: "Masqué par un administrateur",
204
+ hide: "Masquer",
205
+ unhide: "Afficher",
206
+ delete: "Supprimer",
207
+ deleteTitle: "Supprimer ce commentaire\u202f?",
208
+ deleteBody: "Il sera retiré pour tout le monde. Cette action est irréversible.",
209
+ field: "Écrire un commentaire",
210
+ placeholder: "Écrire un commentaire…",
211
+ send: "Commenter",
212
+ },
213
+ feedbackReplies: {
214
+ replies: "Réponses",
215
+ empty: "Pas encore de réponse",
216
+ admin: "Admin",
217
+ statusChanged: "Statut changé en",
218
+ field: "Écrire une réponse",
219
+ placeholder: "Écrire une réponse…",
220
+ reply: "Répondre",
221
+ status: "Statut avec la réponse",
222
+ noChange: "Aucun changement",
223
+ nudge: "La personne qui l’a signalé n’a pas été prévenue. Ajoutez une réponse.",
224
+ },
163
225
  accountSettings: {
164
226
  profile: {
165
227
  title: "Profil",
@@ -54,6 +54,7 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
54
54
  submitHint: (apple) => (apple ? "⌘ Enter a küldéshez" : "Ctrl+Enter a küldéshez"),
55
55
  cancel: "Mégse",
56
56
  save: "Küldés",
57
+ publicNotice: "Mások látni fogják a címet és a szöveget (a képernyőképeit és fájljait soha).",
57
58
  },
58
59
  feedbackThread: {
59
60
  thread: "Hozzászólások",
@@ -105,6 +106,36 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
105
106
  trigger: "Visszajelzés küldése",
106
107
  myFeedback: "Visszajelzéseim",
107
108
  viewFeedback: "Visszajelzések megtekintése",
109
+ allFeedback: "Összes visszajelzés",
110
+ },
111
+ // 0.38.0 — docs/feedback-harmonization.md §9: the public pages and the two feedback
112
+ // notification types. A noun after a number stays singular in Hungarian.
113
+ feedbackPublic: {
114
+ title: "Összes visszajelzés",
115
+ sort: "Rendezés",
116
+ sortNewest: "Legújabb",
117
+ sortVotes: "Legkeresettebb",
118
+ sortUpdated: "Nemrég frissítve",
119
+ search: "Keresés a címekben",
120
+ columnVotes: "Szavazatok",
121
+ total: (count) => `${n(count)} bejelentés`,
122
+ comments: (count) => `${n(count)} hozzászólás`,
123
+ votes: (count) => `${n(count)} szavazat`,
124
+ anonymous: "Egy felhasználó",
125
+ filedBy: (name) => `Beküldte: ${name}`,
126
+ body: "Leírás",
127
+ conversation: "Válaszok és hozzászólások",
128
+ loading: "Betöltés…",
129
+ empty: "Még nincs bejelentés",
130
+ visibleToOthers: "Mások számára látható",
131
+ visibleHint: "Mások a címet és a szöveget látják, a képernyőképeit és fájljait soha.",
132
+ visibleLocked: "Csak amíg a bejelentés nyitott.",
133
+ },
134
+ feedbackNotificationTypes: {
135
+ answered: "Válaszok a bejelentéseire",
136
+ answeredDescription: "Amikor egy Ön által írt vagy hozzászólt bejelentés választ kap.",
137
+ comment: "Hozzászólások a követett bejelentésekhez",
138
+ commentDescription: "Amikor valaki hozzászól egy Ön által írt vagy hozzászólt bejelentéshez.",
108
139
  },
109
140
  feedbackContext: {
110
141
  user: "Felhasználó",
@@ -145,6 +176,7 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
145
176
  download: (name) => `${name} letöltése`,
146
177
  downloadFailed: "A mellékletet nem sikerült letölteni.",
147
178
  outcome: "Eredmény",
179
+ replies: "Válaszok",
148
180
  resolvedAt: (date) => `Lezárva: ${date}`,
149
181
  outcomeAdd: "Eredmény hozzáadása",
150
182
  outcomeUpdate: "Frissítés",
@@ -158,6 +190,36 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
158
190
  status: "Állapot",
159
191
  note: "Megjegyzés",
160
192
  },
193
+ // 0.38.0 — docs/feedback-harmonization.md §9.15: the vote, the comment thread, the replies.
194
+ feedbackVote: {
195
+ vote: "Én is szeretném",
196
+ own: "Az Ön bejelentése",
197
+ },
198
+ feedbackComments: {
199
+ comments: "Hozzászólások",
200
+ empty: "Még nincs hozzászólás",
201
+ hidden: "Egy admin elrejtette",
202
+ hide: "Elrejtés",
203
+ unhide: "Megjelenítés",
204
+ delete: "Törlés",
205
+ deleteTitle: "Törli ezt a hozzászólást?",
206
+ deleteBody: "Mindenki számára eltűnik. Ez nem vonható vissza.",
207
+ field: "Hozzászólás írása",
208
+ placeholder: "Hozzászólás írása…",
209
+ send: "Hozzászólás",
210
+ },
211
+ feedbackReplies: {
212
+ replies: "Válaszok",
213
+ empty: "Még nincs válasz",
214
+ admin: "Admin",
215
+ statusChanged: "Állapot módosítva erre:",
216
+ field: "Válasz írása",
217
+ placeholder: "Válasz írása…",
218
+ reply: "Válasz",
219
+ status: "Állapot a válasszal",
220
+ noChange: "Nincs változás",
221
+ nudge: "A bejelentő nem kapott értesítést. Írjon választ.",
222
+ },
161
223
  accountSettings: {
162
224
  profile: {
163
225
  title: "Profil",
@@ -55,6 +55,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
55
55
  submitHint: (apple) => (apple ? "⌘ Invio per inviare" : "Ctrl+Invio per inviare"),
56
56
  cancel: "Annulla",
57
57
  save: "Invia",
58
+ publicNotice: "Le altre persone vedranno il titolo e il testo (mai i Suoi screenshot o file).",
58
59
  },
59
60
  feedbackThread: {
60
61
  thread: "Commenti",
@@ -108,6 +109,36 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
108
109
  trigger: "Invia feedback",
109
110
  myFeedback: "I miei feedback",
110
111
  viewFeedback: "Visualizza feedback",
112
+ allFeedback: "Tutti i feedback",
113
+ },
114
+ // 0.38.0 — docs/feedback-harmonization.md §9: the public pages and the two feedback
115
+ // notification types. "Segnalazione" for one report; formal "Lei", as elsewhere.
116
+ feedbackPublic: {
117
+ title: "Tutti i feedback",
118
+ sort: "Ordina",
119
+ sortNewest: "Più recenti",
120
+ sortVotes: "Più richiesti",
121
+ sortUpdated: "Aggiornati di recente",
122
+ search: "Cerca nei titoli",
123
+ columnVotes: "Voti",
124
+ total: (count) => (count === 1 ? "1 segnalazione" : `${n(count)} segnalazioni`),
125
+ comments: (count) => (count === 1 ? "1 commento" : `${n(count)} commenti`),
126
+ votes: (count) => (count === 1 ? "1 voto" : `${n(count)} voti`),
127
+ anonymous: "Una persona",
128
+ filedBy: (name) => `Da ${name}`,
129
+ body: "Descrizione",
130
+ conversation: "Risposte e commenti",
131
+ loading: "Caricamento…",
132
+ empty: "Ancora nessuna segnalazione",
133
+ visibleToOthers: "Visibile agli altri",
134
+ visibleHint: "Le altre persone vedono il titolo e il testo, mai i Suoi screenshot o file.",
135
+ visibleLocked: "Solo finché la segnalazione è ancora aperta.",
136
+ },
137
+ feedbackNotificationTypes: {
138
+ answered: "Risposte alle Sue segnalazioni",
139
+ answeredDescription: "Quando una segnalazione che ha scritto o commentato riceve una risposta.",
140
+ comment: "Commenti sulle segnalazioni che segue",
141
+ commentDescription: "Quando qualcuno commenta una segnalazione che ha scritto o commentato.",
111
142
  },
112
143
  feedbackContext: {
113
144
  user: "Utente",
@@ -148,6 +179,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
148
179
  download: (name) => `Scarica ${name}`,
149
180
  downloadFailed: "Non è stato possibile scaricare l’allegato.",
150
181
  outcome: "Esito",
182
+ replies: "Risposte",
151
183
  resolvedAt: (date) => `Risolto il ${date}`,
152
184
  outcomeAdd: "Aggiungi esito",
153
185
  outcomeUpdate: "Aggiorna",
@@ -162,6 +194,36 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
162
194
  status: "Stato",
163
195
  note: "Nota",
164
196
  },
197
+ // 0.38.0 — docs/feedback-harmonization.md §9.15: the vote, the comment thread, the replies.
198
+ feedbackVote: {
199
+ vote: "Lo voglio anch’io",
200
+ own: "La Sua segnalazione",
201
+ },
202
+ feedbackComments: {
203
+ comments: "Commenti",
204
+ empty: "Ancora nessun commento",
205
+ hidden: "Nascosto da un amministratore",
206
+ hide: "Nascondi",
207
+ unhide: "Mostra",
208
+ delete: "Elimina",
209
+ deleteTitle: "Eliminare questo commento?",
210
+ deleteBody: "Verrà rimosso per tutti. L’operazione non può essere annullata.",
211
+ field: "Scrivi un commento",
212
+ placeholder: "Scriva un commento…",
213
+ send: "Commenta",
214
+ },
215
+ feedbackReplies: {
216
+ replies: "Risposte",
217
+ empty: "Ancora nessuna risposta",
218
+ admin: "Admin",
219
+ statusChanged: "Stato cambiato in",
220
+ field: "Scrivi una risposta",
221
+ placeholder: "Scriva una risposta…",
222
+ reply: "Rispondi",
223
+ status: "Stato con la risposta",
224
+ noChange: "Nessuna modifica",
225
+ nudge: "Chi ha inviato la segnalazione non è stato avvisato. Aggiunga una risposta.",
226
+ },
165
227
  accountSettings: {
166
228
  profile: {
167
229
  title: "Profilo",
@@ -48,6 +48,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
48
48
  submitHint: (apple) => (apple ? "⌘ Enter 发送" : "Ctrl+Enter 发送"),
49
49
  cancel: "取消",
50
50
  save: "发送",
51
+ publicNotice: "其他用户将看到标题和正文(绝不会看到您的截图或文件)。",
51
52
  },
52
53
  feedbackThread: {
53
54
  thread: "评论",
@@ -98,6 +99,36 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
98
99
  trigger: "发送反馈",
99
100
  myFeedback: "我的反馈",
100
101
  viewFeedback: "查看反馈",
102
+ allFeedback: "全部反馈",
103
+ },
104
+ // 0.38.0 — docs/feedback-harmonization.md §9: the public pages and the two feedback
105
+ // notification types.
106
+ feedbackPublic: {
107
+ title: "全部反馈",
108
+ sort: "排序",
109
+ sortNewest: "最新",
110
+ sortVotes: "最多人想要",
111
+ sortUpdated: "最近更新",
112
+ search: "搜索标题",
113
+ columnVotes: "票数",
114
+ total: (count) => `${n(count)} 条反馈`,
115
+ comments: (count) => `${n(count)} 条评论`,
116
+ votes: (count) => `${n(count)} 票`,
117
+ anonymous: "一位用户",
118
+ filedBy: (name) => `提交者:${name}`,
119
+ body: "描述",
120
+ conversation: "回复和评论",
121
+ loading: "加载中…",
122
+ empty: "暂无反馈",
123
+ visibleToOthers: "对他人可见",
124
+ visibleHint: "其他用户可以看到标题和正文,绝不会看到您的截图或文件。",
125
+ visibleLocked: "仅在反馈仍处于打开状态时可更改。",
126
+ },
127
+ feedbackNotificationTypes: {
128
+ answered: "您的反馈收到的回复",
129
+ answeredDescription: "当您提交或评论过的反馈收到回复时。",
130
+ comment: "您关注的反馈中的评论",
131
+ commentDescription: "当有人评论您提交或评论过的反馈时。",
101
132
  },
102
133
  feedbackContext: {
103
134
  user: "用户",
@@ -138,6 +169,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
138
169
  download: (name) => `下载 ${name}`,
139
170
  downloadFailed: "无法下载附件。",
140
171
  outcome: "处理结果",
172
+ replies: "回复",
141
173
  resolvedAt: (date) => `解决日期:${date}`,
142
174
  outcomeAdd: "添加处理结果",
143
175
  outcomeUpdate: "更新",
@@ -151,6 +183,36 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
151
183
  status: "状态",
152
184
  note: "备注",
153
185
  },
186
+ // 0.38.0 — docs/feedback-harmonization.md §9.15: the vote, the comment thread, the replies.
187
+ feedbackVote: {
188
+ vote: "我也需要",
189
+ own: "您的反馈",
190
+ },
191
+ feedbackComments: {
192
+ comments: "评论",
193
+ empty: "暂无评论",
194
+ hidden: "已被管理员隐藏",
195
+ hide: "隐藏",
196
+ unhide: "取消隐藏",
197
+ delete: "删除",
198
+ deleteTitle: "删除这条评论?",
199
+ deleteBody: "将对所有人移除,且无法撤销。",
200
+ field: "撰写评论",
201
+ placeholder: "撰写评论…",
202
+ send: "发表评论",
203
+ },
204
+ feedbackReplies: {
205
+ replies: "回复",
206
+ empty: "暂无回复",
207
+ admin: "管理员",
208
+ statusChanged: "状态已改为",
209
+ field: "撰写回复",
210
+ placeholder: "撰写回复…",
211
+ reply: "回复",
212
+ status: "随回复更改状态",
213
+ noChange: "不更改",
214
+ nudge: "尚未通知提交者。请添加回复。",
215
+ },
154
216
  accountSettings: {
155
217
  profile: {
156
218
  title: "个人资料",
@@ -212,6 +212,10 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
212
212
  "feedbackPage.reworkChip": one,
213
213
  "feedbackDetail.download": [["{{name}}"]],
214
214
  "feedbackDetail.resolvedAt": [["{{date}}"]],
215
+ "feedbackPublic.total": one,
216
+ "feedbackPublic.comments": one,
217
+ "feedbackPublic.votes": one,
218
+ "feedbackPublic.filedBy": [["{{name}}"]],
215
219
  "accountSettings.passkeys.renameItem": [["{{name}}"]],
216
220
  "accountSettings.passkeys.renameField": [["{{name}}"]],
217
221
  "accountSettings.passkeys.deleteItem": [["{{name}}"]],
@@ -37,7 +37,7 @@ export const DEFAULT_COMMON_LABELS: CommonLabels = {
37
37
  fieldValue: (field, value) => `${field}: ${value}`,
38
38
  dismiss: "Dismiss",
39
39
  opensInNewTab: "opens in a new tab",
40
- aboutField: (field) => `About ${field}`,
40
+ aboutField: (field) => `About “${field}”`,
41
41
  help: "Help",
42
42
  };
43
43
 
package/src/index.ts CHANGED
@@ -926,6 +926,15 @@ export { PushDevicesSetting, describeUserAgent } from "./notifications/push-devi
926
926
  export type { PushDevicesSettingProps } from "./notifications/push-devices-setting";
927
927
  export { UnsubscribePanel, unsubscribeTokenType } from "./notifications/unsubscribe-panel";
928
928
  export type { UnsubscribePanelProps } from "./notifications/unsubscribe-panel";
929
+ // 0.38.0 (docs/feedback-harmonization.md §9.11): the two feedback types' setting words.
930
+ export {
931
+ useFeedbackNotificationTypes,
932
+ DEFAULT_FEEDBACK_NOTIFICATION_TYPES_LABELS,
933
+ } from "./notifications/feedback-notification-types";
934
+ export type {
935
+ FeedbackNotificationTypeId,
936
+ FeedbackNotificationTypesLabels,
937
+ } from "./notifications/feedback-notification-types";
929
938
 
930
939
  // ── landing ──────────────────────────────────────────────────────────────────
931
940
  // 0.31.0 (docs/landing-demo-harmonization.md): the public landing page. Its router-aware parts — the header and the resume (RootEntry,
@@ -8,7 +8,7 @@ import type { ReactNode } from "react";
8
8
  * to find (an icon), so the caller falls back to a name of its own.
9
9
  *
10
10
  * Package-private — not re-exported from the barrel. StatTile names its sparkline by it;
11
- * a field names its `help` "?" by it ("About <label>", round 0.36).
11
+ * a field names its `help` "?" by it ("About “<label>”", round 0.36).
12
12
  */
13
13
  export function plainText(node: ReactNode): string | undefined {
14
14
  const walk = (n: ReactNode): string => {
@@ -0,0 +1,24 @@
1
+ // The English words of `useFeedbackNotificationTypes` (round 0.38), in a module with no
2
+ // component code, as every `*-labels.ts`: the English catalogue imports them alone.
3
+
4
+ /**
5
+ * `feedbackNotificationTypes` — the setting words of the two feedback notification types
6
+ * (docs/feedback-harmonization.md §9.11). In the kit, not in each app, because two apps
7
+ * declare them (keksdose, Kurvenschmiede; kastlan `feedback_answered` alone). The mail and
8
+ * push texts stay the app's.
9
+ */
10
+ export interface FeedbackNotificationTypesLabels {
11
+ /** `feedback_answered`: a reply on a report the person wrote or commented on. */
12
+ answered: string;
13
+ answeredDescription: string;
14
+ /** `feedback_comment`: a visible comment on such a report. */
15
+ comment: string;
16
+ commentDescription: string;
17
+ }
18
+
19
+ export const DEFAULT_FEEDBACK_NOTIFICATION_TYPES_LABELS: FeedbackNotificationTypesLabels = {
20
+ answered: "Answers to your reports",
21
+ answeredDescription: "When a report you wrote or commented on gets an answer.",
22
+ comment: "Comments on reports you follow",
23
+ commentDescription: "When someone comments on a report you wrote or commented on.",
24
+ };
@@ -0,0 +1,46 @@
1
+ import { useMemo } from "react";
2
+ import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
3
+ import type { NotificationTypeEntry } from "./notification-types";
4
+ import {
5
+ DEFAULT_FEEDBACK_NOTIFICATION_TYPES_LABELS,
6
+ type FeedbackNotificationTypesLabels,
7
+ } from "./feedback-notification-types-labels";
8
+
9
+ export { DEFAULT_FEEDBACK_NOTIFICATION_TYPES_LABELS };
10
+ export type { FeedbackNotificationTypesLabels };
11
+
12
+ /** The two feedback notification ids (§9.11), as server-kit's `FEEDBACK_ANSWERED` and
13
+ * `FEEDBACK_COMMENT` name them. */
14
+ export type FeedbackNotificationTypeId = "feedback_answered" | "feedback_comment";
15
+
16
+ /**
17
+ * The setting words of the two feedback notification types (round 0.38,
18
+ * docs/feedback-harmonization.md §9.11), for `NotificationTypesSetting`'s `types`:
19
+ *
20
+ * ```tsx
21
+ * const feedbackTypes = useFeedbackNotificationTypes();
22
+ * <NotificationTypesSetting types={[...appTypes, ...feedbackTypes]} … />
23
+ * ```
24
+ *
25
+ * - **"Answers to your reports"** (`feedback_answered`): a reply from the admin or a
26
+ * loop, to the author and every earlier commenter.
27
+ * - **"Comments on reports you follow"** (`feedback_comment`): a visible comment, to the
28
+ * author and the earlier commenters.
29
+ *
30
+ * Both entries are always returned: the card draws a type only when the server answered
31
+ * it (notifications §2.1), so kastlan, which does not declare `feedback_comment` while its
32
+ * public parts are off, shows the first alone. Words: `<UiKitProvider labels={{
33
+ * feedbackNotificationTypes }}>` over English, `labels` over both.
34
+ */
35
+ export function useFeedbackNotificationTypes(
36
+ labels?: LabelOverride<FeedbackNotificationTypesLabels>,
37
+ ): NotificationTypeEntry<FeedbackNotificationTypeId>[] {
38
+ const words = useKitLabels("feedbackNotificationTypes", DEFAULT_FEEDBACK_NOTIFICATION_TYPES_LABELS, labels);
39
+ return useMemo(
40
+ () => [
41
+ { id: "feedback_answered", label: words.answered, description: words.answeredDescription },
42
+ { id: "feedback_comment", label: words.comment, description: words.commentDescription },
43
+ ],
44
+ [words],
45
+ );
46
+ }
@@ -119,7 +119,7 @@ export interface RhfFieldBaseProps<
119
119
  * `help` it is that caption at every size. */
120
120
  hint?: ReactNode;
121
121
  /** Help the field is usable without — why, how to choose — behind the field's one
122
- * "?" after the label: a `HelpPopover` named "About <label>" (round 0.36,
122
+ * "?" after the label: a `HelpPopover` named "About “<label>”" (round 0.36,
123
123
  * docs/text-size-harmonization.md §4); pass a `HelpPopover` to name it yourself.
124
124
  * `hint` stays the visible fact under the field. */
125
125
  help?: ReactNode;
@@ -67,10 +67,10 @@ export interface DeviceResetSettingProps
67
67
  * - **Live, no reload** (decision 10): each registered store resets through its own
68
68
  * setter; the card stays where it is.
69
69
  *
70
- * The app adds the catalogue entry, `{ id: "device_reset", group: "appearance", anchor:
71
- * DEVICE_RESET_ANCHOR, title, keywords }` (`title` and `keywords` from these labels), last
72
- * in its appearance group: inside a `SettingsLayout`, `SettingsSection` throws in
73
- * development without it.
70
+ * The app adds the catalogue entry, `{ id, group: "appearance", anchor: DEVICE_RESET_ANCHOR,
71
+ * title, keywords }` (the id in its catalogue's own style, e.g. `device_reset` or
72
+ * `deviceReset`; `title` and `keywords` from these labels), last in its appearance group:
73
+ * inside a `SettingsLayout`, `SettingsSection` throws in development without it.
74
74
  */
75
75
  export function DeviceResetSetting({
76
76
  description,