@eifi1/ui-kit 0.37.0 โ†’ 0.38.1

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 (130) hide show
  1. package/README.md +11 -4
  2. package/dist/eslint/index.js +1 -1
  3. package/dist/feedback/feedback-comment-thread.d.ts +87 -0
  4. package/dist/feedback/feedback-comment-thread.js +170 -0
  5. package/dist/feedback/feedback-comment-thread.js.map +1 -0
  6. package/dist/feedback/feedback-dialog-labels.js +2 -1
  7. package/dist/feedback/feedback-dialog-labels.js.map +1 -1
  8. package/dist/feedback/feedback-dialog.d.ts +13 -0
  9. package/dist/feedback/feedback-dialog.js +12 -4
  10. package/dist/feedback/feedback-dialog.js.map +1 -1
  11. package/dist/feedback/feedback-labels.d.ts +11 -0
  12. package/dist/feedback/feedback-labels.js +4 -1
  13. package/dist/feedback/feedback-labels.js.map +1 -1
  14. package/dist/feedback/feedback-menu-labels.js +2 -1
  15. package/dist/feedback/feedback-menu-labels.js.map +1 -1
  16. package/dist/feedback/feedback-menu.d.ts +17 -3
  17. package/dist/feedback/feedback-menu.js +11 -1
  18. package/dist/feedback/feedback-menu.js.map +1 -1
  19. package/dist/feedback/feedback-public-labels.d.ts +53 -0
  20. package/dist/feedback/feedback-public-labels.js +27 -0
  21. package/dist/feedback/feedback-public-labels.js.map +1 -0
  22. package/dist/feedback/feedback-public-list.d.ts +139 -0
  23. package/dist/feedback/feedback-public-list.js +299 -0
  24. package/dist/feedback/feedback-public-list.js.map +1 -0
  25. package/dist/feedback/feedback-public-switch.d.ts +51 -0
  26. package/dist/feedback/feedback-public-switch.js +50 -0
  27. package/dist/feedback/feedback-public-switch.js.map +1 -0
  28. package/dist/feedback/feedback-public-types.d.ts +75 -0
  29. package/dist/feedback/feedback-public-types.js +2 -0
  30. package/dist/feedback/feedback-public-types.js.map +1 -0
  31. package/dist/feedback/feedback-record.d.ts +32 -1
  32. package/dist/feedback/feedback-record.js +10 -0
  33. package/dist/feedback/feedback-record.js.map +1 -1
  34. package/dist/feedback/feedback-replies-context.d.ts +7 -0
  35. package/dist/feedback/feedback-replies-context.js +7 -0
  36. package/dist/feedback/feedback-replies-context.js.map +1 -0
  37. package/dist/feedback/feedback-replies.d.ts +97 -0
  38. package/dist/feedback/feedback-replies.js +114 -0
  39. package/dist/feedback/feedback-replies.js.map +1 -0
  40. package/dist/feedback/feedback-row-detail-labels.js +1 -0
  41. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  42. package/dist/feedback/feedback-row-detail.d.ts +47 -10
  43. package/dist/feedback/feedback-row-detail.js +51 -50
  44. package/dist/feedback/feedback-row-detail.js.map +1 -1
  45. package/dist/feedback/feedback-submit-dialog.d.ts +3 -1
  46. package/dist/feedback/feedback-submit-dialog.js +6 -1
  47. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  48. package/dist/feedback/feedback-submit.d.ts +8 -0
  49. package/dist/feedback/feedback-submit.js +3 -2
  50. package/dist/feedback/feedback-submit.js.map +1 -1
  51. package/dist/feedback/feedback-table.d.ts +15 -5
  52. package/dist/feedback/feedback-table.js +46 -5
  53. package/dist/feedback/feedback-table.js.map +1 -1
  54. package/dist/feedback/feedback-thread-parts-labels.d.ts +6 -0
  55. package/dist/feedback/feedback-thread-parts-labels.js +36 -0
  56. package/dist/feedback/feedback-thread-parts-labels.js.map +1 -0
  57. package/dist/feedback/feedback-thread.d.ts +8 -0
  58. package/dist/feedback/feedback-thread.js +7 -2
  59. package/dist/feedback/feedback-thread.js.map +1 -1
  60. package/dist/feedback/feedback-vote-button.d.ts +49 -0
  61. package/dist/feedback/feedback-vote-button.js +72 -0
  62. package/dist/feedback/feedback-vote-button.js.map +1 -0
  63. package/dist/feedback.d.ts +6 -0
  64. package/dist/feedback.js +6 -0
  65. package/dist/feedback.js.map +1 -1
  66. package/dist/i18n/defaults.js +12 -0
  67. package/dist/i18n/defaults.js.map +1 -1
  68. package/dist/i18n/german.js +69 -3
  69. package/dist/i18n/german.js.map +1 -1
  70. package/dist/i18n/kit-labels.d.ts +16 -0
  71. package/dist/i18n/kit-labels.js.map +1 -1
  72. package/dist/i18n/locales/en.js +85 -3
  73. package/dist/i18n/locales/en.js.map +3 -3
  74. package/dist/i18n/locales/es.js +69 -3
  75. package/dist/i18n/locales/es.js.map +1 -1
  76. package/dist/i18n/locales/fr.js +69 -3
  77. package/dist/i18n/locales/fr.js.map +1 -1
  78. package/dist/i18n/locales/hu.js +69 -3
  79. package/dist/i18n/locales/hu.js.map +1 -1
  80. package/dist/i18n/locales/it.js +69 -3
  81. package/dist/i18n/locales/it.js.map +1 -1
  82. package/dist/i18n/locales/zh.js +69 -3
  83. package/dist/i18n/locales/zh.js.map +1 -1
  84. package/dist/i18n/review.js +5 -0
  85. package/dist/i18n/review.js.map +1 -1
  86. package/dist/index.d.ts +2 -0
  87. package/dist/index.js +6 -0
  88. package/dist/index.js.map +1 -1
  89. package/dist/notifications/feedback-notification-types-labels.d.ts +15 -0
  90. package/dist/notifications/feedback-notification-types-labels.js +11 -0
  91. package/dist/notifications/feedback-notification-types-labels.js.map +1 -0
  92. package/dist/notifications/feedback-notification-types.d.ts +28 -0
  93. package/dist/notifications/feedback-notification-types.js +21 -0
  94. package/dist/notifications/feedback-notification-types.js.map +1 -0
  95. package/package.json +1 -1
  96. package/src/feedback/feedback-comment-thread.tsx +277 -0
  97. package/src/feedback/feedback-dialog-labels.ts +1 -0
  98. package/src/feedback/feedback-dialog.tsx +30 -2
  99. package/src/feedback/feedback-labels.ts +14 -0
  100. package/src/feedback/feedback-menu-labels.ts +1 -0
  101. package/src/feedback/feedback-menu.tsx +29 -3
  102. package/src/feedback/feedback-public-labels.ts +80 -0
  103. package/src/feedback/feedback-public-list.tsx +478 -0
  104. package/src/feedback/feedback-public-switch.tsx +102 -0
  105. package/src/feedback/feedback-public-types.ts +82 -0
  106. package/src/feedback/feedback-record.ts +39 -1
  107. package/src/feedback/feedback-replies-context.ts +9 -0
  108. package/src/feedback/feedback-replies.tsx +235 -0
  109. package/src/feedback/feedback-row-detail-labels.ts +1 -0
  110. package/src/feedback/feedback-row-detail.tsx +115 -74
  111. package/src/feedback/feedback-submit-dialog.tsx +9 -0
  112. package/src/feedback/feedback-submit.tsx +10 -1
  113. package/src/feedback/feedback-table.tsx +73 -6
  114. package/src/feedback/feedback-thread-parts-labels.ts +41 -0
  115. package/src/feedback/feedback-thread.tsx +18 -1
  116. package/src/feedback/feedback-vote-button.tsx +123 -0
  117. package/src/feedback.ts +10 -0
  118. package/src/i18n/defaults.ts +12 -0
  119. package/src/i18n/german.ts +66 -0
  120. package/src/i18n/kit-labels.tsx +16 -0
  121. package/src/i18n/locales/en.ts +8 -0
  122. package/src/i18n/locales/es.ts +66 -0
  123. package/src/i18n/locales/fr.ts +66 -0
  124. package/src/i18n/locales/hu.ts +66 -0
  125. package/src/i18n/locales/it.ts +66 -0
  126. package/src/i18n/locales/zh.ts +66 -0
  127. package/src/i18n/review.ts +5 -0
  128. package/src/index.ts +9 -0
  129. package/src/notifications/feedback-notification-types-labels.ts +24 -0
  130. package/src/notifications/feedback-notification-types.ts +46 -0
@@ -55,6 +55,7 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
55
55
  submitHint: (apple) => (apple ? "โŒ˜ Intro para enviar" : "Ctrl+Intro para enviar"),
56
56
  cancel: "Cancelar",
57
57
  save: "Enviar",
58
+ publicNotice: "Otras personas verรกn el tรญtulo y el texto (nunca sus capturas ni sus archivos).",
58
59
  },
59
60
  feedbackThread: {
60
61
  thread: "Comentarios",
@@ -103,11 +104,45 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
103
104
  statusChanged: (status, title) => `Cambiado a ยซ${status}ยป: ${title}`,
104
105
  statusUndo: "Deshacer",
105
106
  statusRestored: (status, title) => `De vuelta a ยซ${status}ยป: ${title}`,
107
+ commentFailed: "No se ha podido publicar el comentario.",
108
+ voteFailed: "No se ha podido guardar su voto.",
109
+ replyFailed: "No se ha podido enviar la respuesta.",
106
110
  },
107
111
  feedbackMenu: {
108
112
  trigger: "Enviar comentarios",
109
113
  myFeedback: "Mis comentarios",
110
114
  viewFeedback: "Ver comentarios",
115
+ allFeedback: "Todos los comentarios",
116
+ },
117
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9: the public pages and the two feedback
118
+ // notification types. "Informe" for one report, so it never reads as "comentario".
119
+ feedbackPublic: {
120
+ title: "Todos los comentarios",
121
+ sort: "Ordenar",
122
+ sortNewest: "Mรกs recientes",
123
+ sortVotes: "Mรกs deseados",
124
+ sortUpdated: "Actualizados recientemente",
125
+ search: "Buscar en los tรญtulos",
126
+ columnVotes: "Votos",
127
+ total: (count) => `${n(count)} ${plural(count, "informe", "informes")}`,
128
+ comments: (count) => `${n(count)} ${plural(count, "comentario", "comentarios")}`,
129
+ votes: (count) => `${n(count)} ${plural(count, "voto", "votos")}`,
130
+ anonymous: "Una persona",
131
+ filedBy: (name) => `De ${name}`,
132
+ body: "Descripciรณn",
133
+ conversation: "Respuestas y comentarios",
134
+ loading: "Cargandoโ€ฆ",
135
+ empty: "Todavรญa no hay informes",
136
+ visibleToOthers: "Visible para otras personas",
137
+ visibleHint: "Otras personas ven el tรญtulo y el texto, nunca sus capturas ni sus archivos.",
138
+ visibleLocked: "Solo mientras el informe siga abierto.",
139
+ page: (page) => `Pรกgina ${n(page)}`,
140
+ },
141
+ feedbackNotificationTypes: {
142
+ answered: "Respuestas a sus informes",
143
+ answeredDescription: "Cuando un informe que usted escribiรณ o comentรณ recibe una respuesta.",
144
+ comment: "Comentarios en informes que sigue",
145
+ commentDescription: "Cuando alguien comenta un informe que usted escribiรณ o comentรณ.",
111
146
  },
112
147
  feedbackContext: {
113
148
  user: "Usuario",
@@ -148,6 +183,7 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
148
183
  download: (name) => `Descargar ${name}`,
149
184
  downloadFailed: "No se ha podido descargar el adjunto.",
150
185
  outcome: "Resultado",
186
+ replies: "Respuestas",
151
187
  resolvedAt: (date) => `Resuelto el ${date}`,
152
188
  outcomeAdd: "Aรฑadir resultado",
153
189
  outcomeUpdate: "Actualizar",
@@ -161,6 +197,36 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
161
197
  status: "Estado",
162
198
  note: "Nota",
163
199
  },
200
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9.15: the vote, the comment thread, the replies.
201
+ feedbackVote: {
202
+ vote: "Yo tambiรฉn lo quiero",
203
+ own: "Su informe",
204
+ },
205
+ feedbackComments: {
206
+ comments: "Comentarios",
207
+ empty: "Aรบn no hay comentarios",
208
+ hidden: "Ocultado por un administrador",
209
+ hide: "Ocultar",
210
+ unhide: "Mostrar",
211
+ delete: "Eliminar",
212
+ deleteTitle: "ยฟEliminar este comentario?",
213
+ deleteBody: "Se eliminarรก para todos. No se puede deshacer.",
214
+ field: "Escribir un comentario",
215
+ placeholder: "Escriba un comentarioโ€ฆ",
216
+ send: "Comentar",
217
+ },
218
+ feedbackReplies: {
219
+ replies: "Respuestas",
220
+ empty: "Aรบn no hay respuesta",
221
+ admin: "Admin",
222
+ statusChanged: "Estado cambiado a",
223
+ field: "Escribir una respuesta",
224
+ placeholder: "Escriba una respuestaโ€ฆ",
225
+ reply: "Responder",
226
+ status: "Estado con la respuesta",
227
+ noChange: "Sin cambios",
228
+ nudge: "No se ha avisado a quien lo informรณ. Aรฑada una respuesta.",
229
+ },
164
230
  accountSettings: {
165
231
  profile: {
166
232
  title: "Perfil",
@@ -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",
@@ -101,11 +102,45 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
101
102
  statusChanged: (status, title) => `Passรฉ ร  ยซ\u202f${status}\u202fยป\u00a0: ${title}`,
102
103
  statusUndo: "Annuler",
103
104
  statusRestored: (status, title) => `Revenu ร  ยซ\u202f${status}\u202fยป\u00a0: ${title}`,
105
+ commentFailed: "Le commentaire nโ€™a pas pu รชtre publiรฉ.",
106
+ voteFailed: "Votre vote nโ€™a pas pu รชtre enregistrรฉ.",
107
+ replyFailed: "La rรฉponse nโ€™a pas pu รชtre envoyรฉe.",
104
108
  },
105
109
  feedbackMenu: {
106
110
  trigger: "Envoyer un retour",
107
111
  myFeedback: "Mes retours",
108
112
  viewFeedback: "Voir les retours",
113
+ allFeedback: "Tous les retours",
114
+ },
115
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9: the public pages and the two feedback
116
+ // notification types. "Retour" for a report, as `feedbackMenu`.
117
+ feedbackPublic: {
118
+ title: "Tous les retours",
119
+ sort: "Trier",
120
+ sortNewest: "Plus rรฉcents",
121
+ sortVotes: "Plus demandรฉs",
122
+ sortUpdated: "Mis ร  jour rรฉcemment",
123
+ search: "Rechercher dans les titres",
124
+ columnVotes: "Votes",
125
+ total: (count) => (count === 1 ? "1 retour" : `${n(count)} retours`),
126
+ comments: (count) => (count === 1 ? "1 commentaire" : `${n(count)} commentaires`),
127
+ votes: (count) => (count === 1 ? "1 vote" : `${n(count)} votes`),
128
+ anonymous: "Une personne",
129
+ filedBy: (name) => `De ${name}`,
130
+ body: "Description",
131
+ conversation: "Rรฉponses et commentaires",
132
+ loading: "Chargementโ€ฆ",
133
+ empty: "Aucun retour pour lโ€™instant",
134
+ visibleToOthers: "Visible par les autres",
135
+ visibleHint: "Les autres personnes voient le titre et le texte, jamais vos captures dโ€™รฉcran ni vos fichiers.",
136
+ visibleLocked: "Seulement tant que le retour est encore ouvert.",
137
+ page: (page) => `Page ${n(page)}`,
138
+ },
139
+ feedbackNotificationTypes: {
140
+ answered: "Rรฉponses ร  vos retours",
141
+ answeredDescription: "Quand un retour que vous avez รฉcrit ou commentรฉ reรงoit une rรฉponse.",
142
+ comment: "Commentaires sur les retours que vous suivez",
143
+ commentDescription: "Quand quelquโ€™un commente un retour que vous avez รฉcrit ou commentรฉ.",
109
144
  },
110
145
  feedbackContext: {
111
146
  user: "Utilisateur",
@@ -146,6 +181,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
146
181
  download: (name) => `Tรฉlรฉcharger ${name}`,
147
182
  downloadFailed: "La piรจce jointe nโ€™a pas pu รชtre tรฉlรฉchargรฉe.",
148
183
  outcome: "Rรฉsultat",
184
+ replies: "Rรฉponses",
149
185
  resolvedAt: (date) => `Rรฉsolu le ${date}`,
150
186
  outcomeAdd: "Ajouter un rรฉsultat",
151
187
  outcomeUpdate: "Mettre ร  jour",
@@ -160,6 +196,36 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
160
196
  status: "Statut",
161
197
  note: "Note",
162
198
  },
199
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9.15: the vote, the comment thread, the replies.
200
+ feedbackVote: {
201
+ vote: "Moi aussi",
202
+ own: "Votre retour",
203
+ },
204
+ feedbackComments: {
205
+ comments: "Commentaires",
206
+ empty: "Pas encore de commentaire",
207
+ hidden: "Masquรฉ par un administrateur",
208
+ hide: "Masquer",
209
+ unhide: "Afficher",
210
+ delete: "Supprimer",
211
+ deleteTitle: "Supprimer ce commentaire\u202f?",
212
+ deleteBody: "Il sera retirรฉ pour tout le monde. Cette action est irrรฉversible.",
213
+ field: "ร‰crire un commentaire",
214
+ placeholder: "ร‰crire un commentaireโ€ฆ",
215
+ send: "Commenter",
216
+ },
217
+ feedbackReplies: {
218
+ replies: "Rรฉponses",
219
+ empty: "Pas encore de rรฉponse",
220
+ admin: "Admin",
221
+ statusChanged: "Statut changรฉ en",
222
+ field: "ร‰crire une rรฉponse",
223
+ placeholder: "ร‰crire une rรฉponseโ€ฆ",
224
+ reply: "Rรฉpondre",
225
+ status: "Statut avec la rรฉponse",
226
+ noChange: "Aucun changement",
227
+ nudge: "La personne qui lโ€™a signalรฉ nโ€™a pas รฉtรฉ prรฉvenue. Ajoutez une rรฉponse.",
228
+ },
163
229
  accountSettings: {
164
230
  profile: {
165
231
  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",
@@ -100,11 +101,45 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
100
101
  statusChanged: (status, title) => `โ€ž${status}โ€ รกllapotra รกllรญtva: ${title}`,
101
102
  statusUndo: "Visszavonรกs",
102
103
  statusRestored: (status, title) => `Vissza โ€ž${status}โ€ รกllapotra: ${title}`,
104
+ commentFailed: "A hozzรกszรณlรกst nem sikerรผlt elkรผldeni.",
105
+ voteFailed: "A szavazatot nem sikerรผlt menteni.",
106
+ replyFailed: "A vรกlaszt nem sikerรผlt elkรผldeni.",
103
107
  },
104
108
  feedbackMenu: {
105
109
  trigger: "Visszajelzรฉs kรผldรฉse",
106
110
  myFeedback: "Visszajelzรฉseim",
107
111
  viewFeedback: "Visszajelzรฉsek megtekintรฉse",
112
+ allFeedback: "ร–sszes visszajelzรฉs",
113
+ },
114
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9: the public pages and the two feedback
115
+ // notification types. A noun after a number stays singular in Hungarian.
116
+ feedbackPublic: {
117
+ title: "ร–sszes visszajelzรฉs",
118
+ sort: "Rendezรฉs",
119
+ sortNewest: "Legรบjabb",
120
+ sortVotes: "Legkeresettebb",
121
+ sortUpdated: "Nemrรฉg frissรญtve",
122
+ search: "Keresรฉs a cรญmekben",
123
+ columnVotes: "Szavazatok",
124
+ total: (count) => `${n(count)} bejelentรฉs`,
125
+ comments: (count) => `${n(count)} hozzรกszรณlรกs`,
126
+ votes: (count) => `${n(count)} szavazat`,
127
+ anonymous: "Egy felhasznรกlรณ",
128
+ filedBy: (name) => `Bekรผldte: ${name}`,
129
+ body: "Leรญrรกs",
130
+ conversation: "Vรกlaszok รฉs hozzรกszรณlรกsok",
131
+ loading: "Betรถltรฉsโ€ฆ",
132
+ empty: "Mรฉg nincs bejelentรฉs",
133
+ visibleToOthers: "Mรกsok szรกmรกra lรกthatรณ",
134
+ visibleHint: "Mรกsok a cรญmet รฉs a szรถveget lรกtjรกk, a kรฉpernyล‘kรฉpeit รฉs fรกjljait soha.",
135
+ visibleLocked: "Csak amรญg a bejelentรฉs nyitott.",
136
+ page: (page) => `${n(page)}. oldal`,
137
+ },
138
+ feedbackNotificationTypes: {
139
+ answered: "Vรกlaszok a bejelentรฉseire",
140
+ answeredDescription: "Amikor egy ร–n รกltal รญrt vagy hozzรกszรณlt bejelentรฉs vรกlaszt kap.",
141
+ comment: "Hozzรกszรณlรกsok a kรถvetett bejelentรฉsekhez",
142
+ commentDescription: "Amikor valaki hozzรกszรณl egy ร–n รกltal รญrt vagy hozzรกszรณlt bejelentรฉshez.",
108
143
  },
109
144
  feedbackContext: {
110
145
  user: "Felhasznรกlรณ",
@@ -145,6 +180,7 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
145
180
  download: (name) => `${name} letรถltรฉse`,
146
181
  downloadFailed: "A mellรฉkletet nem sikerรผlt letรถlteni.",
147
182
  outcome: "Eredmรฉny",
183
+ replies: "Vรกlaszok",
148
184
  resolvedAt: (date) => `Lezรกrva: ${date}`,
149
185
  outcomeAdd: "Eredmรฉny hozzรกadรกsa",
150
186
  outcomeUpdate: "Frissรญtรฉs",
@@ -158,6 +194,36 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
158
194
  status: "รllapot",
159
195
  note: "Megjegyzรฉs",
160
196
  },
197
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9.15: the vote, the comment thread, the replies.
198
+ feedbackVote: {
199
+ vote: "ร‰n is szeretnรฉm",
200
+ own: "Az ร–n bejelentรฉse",
201
+ },
202
+ feedbackComments: {
203
+ comments: "Hozzรกszรณlรกsok",
204
+ empty: "Mรฉg nincs hozzรกszรณlรกs",
205
+ hidden: "Egy admin elrejtette",
206
+ hide: "Elrejtรฉs",
207
+ unhide: "Megjelenรญtรฉs",
208
+ delete: "Tรถrlรฉs",
209
+ deleteTitle: "Tรถrli ezt a hozzรกszรณlรกst?",
210
+ deleteBody: "Mindenki szรกmรกra eltลฑnik. Ez nem vonhatรณ vissza.",
211
+ field: "Hozzรกszรณlรกs รญrรกsa",
212
+ placeholder: "Hozzรกszรณlรกs รญrรกsaโ€ฆ",
213
+ send: "Hozzรกszรณlรกs",
214
+ },
215
+ feedbackReplies: {
216
+ replies: "Vรกlaszok",
217
+ empty: "Mรฉg nincs vรกlasz",
218
+ admin: "Admin",
219
+ statusChanged: "รllapot mรณdosรญtva erre:",
220
+ field: "Vรกlasz รญrรกsa",
221
+ placeholder: "Vรกlasz รญrรกsaโ€ฆ",
222
+ reply: "Vรกlasz",
223
+ status: "รllapot a vรกlasszal",
224
+ noChange: "Nincs vรกltozรกs",
225
+ nudge: "A bejelentล‘ nem kapott รฉrtesรญtรฉst. รrjon vรกlaszt.",
226
+ },
161
227
  accountSettings: {
162
228
  profile: {
163
229
  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",
@@ -103,11 +104,45 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
103
104
  statusChanged: (status, title) => `Impostato su ยซ${status}ยป: ${title}`,
104
105
  statusUndo: "Annulla",
105
106
  statusRestored: (status, title) => `Tornato a ยซ${status}ยป: ${title}`,
107
+ commentFailed: "Non รจ stato possibile pubblicare il commento.",
108
+ voteFailed: "Non รจ stato possibile salvare il Suo voto.",
109
+ replyFailed: "Non รจ stato possibile inviare la risposta.",
106
110
  },
107
111
  feedbackMenu: {
108
112
  trigger: "Invia feedback",
109
113
  myFeedback: "I miei feedback",
110
114
  viewFeedback: "Visualizza feedback",
115
+ allFeedback: "Tutti i feedback",
116
+ },
117
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9: the public pages and the two feedback
118
+ // notification types. "Segnalazione" for one report; formal "Lei", as elsewhere.
119
+ feedbackPublic: {
120
+ title: "Tutti i feedback",
121
+ sort: "Ordina",
122
+ sortNewest: "Piรน recenti",
123
+ sortVotes: "Piรน richiesti",
124
+ sortUpdated: "Aggiornati di recente",
125
+ search: "Cerca nei titoli",
126
+ columnVotes: "Voti",
127
+ total: (count) => (count === 1 ? "1 segnalazione" : `${n(count)} segnalazioni`),
128
+ comments: (count) => (count === 1 ? "1 commento" : `${n(count)} commenti`),
129
+ votes: (count) => (count === 1 ? "1 voto" : `${n(count)} voti`),
130
+ anonymous: "Una persona",
131
+ filedBy: (name) => `Da ${name}`,
132
+ body: "Descrizione",
133
+ conversation: "Risposte e commenti",
134
+ loading: "Caricamentoโ€ฆ",
135
+ empty: "Ancora nessuna segnalazione",
136
+ visibleToOthers: "Visibile agli altri",
137
+ visibleHint: "Le altre persone vedono il titolo e il testo, mai i Suoi screenshot o file.",
138
+ visibleLocked: "Solo finchรฉ la segnalazione รจ ancora aperta.",
139
+ page: (page) => `Pagina ${n(page)}`,
140
+ },
141
+ feedbackNotificationTypes: {
142
+ answered: "Risposte alle Sue segnalazioni",
143
+ answeredDescription: "Quando una segnalazione che ha scritto o commentato riceve una risposta.",
144
+ comment: "Commenti sulle segnalazioni che segue",
145
+ commentDescription: "Quando qualcuno commenta una segnalazione che ha scritto o commentato.",
111
146
  },
112
147
  feedbackContext: {
113
148
  user: "Utente",
@@ -148,6 +183,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
148
183
  download: (name) => `Scarica ${name}`,
149
184
  downloadFailed: "Non รจ stato possibile scaricare lโ€™allegato.",
150
185
  outcome: "Esito",
186
+ replies: "Risposte",
151
187
  resolvedAt: (date) => `Risolto il ${date}`,
152
188
  outcomeAdd: "Aggiungi esito",
153
189
  outcomeUpdate: "Aggiorna",
@@ -162,6 +198,36 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
162
198
  status: "Stato",
163
199
  note: "Nota",
164
200
  },
201
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9.15: the vote, the comment thread, the replies.
202
+ feedbackVote: {
203
+ vote: "Lo voglio anchโ€™io",
204
+ own: "La Sua segnalazione",
205
+ },
206
+ feedbackComments: {
207
+ comments: "Commenti",
208
+ empty: "Ancora nessun commento",
209
+ hidden: "Nascosto da un amministratore",
210
+ hide: "Nascondi",
211
+ unhide: "Mostra",
212
+ delete: "Elimina",
213
+ deleteTitle: "Eliminare questo commento?",
214
+ deleteBody: "Verrร  rimosso per tutti. Lโ€™operazione non puรฒ essere annullata.",
215
+ field: "Scrivi un commento",
216
+ placeholder: "Scriva un commentoโ€ฆ",
217
+ send: "Commenta",
218
+ },
219
+ feedbackReplies: {
220
+ replies: "Risposte",
221
+ empty: "Ancora nessuna risposta",
222
+ admin: "Admin",
223
+ statusChanged: "Stato cambiato in",
224
+ field: "Scrivi una risposta",
225
+ placeholder: "Scriva una rispostaโ€ฆ",
226
+ reply: "Rispondi",
227
+ status: "Stato con la risposta",
228
+ noChange: "Nessuna modifica",
229
+ nudge: "Chi ha inviato la segnalazione non รจ stato avvisato. Aggiunga una risposta.",
230
+ },
165
231
  accountSettings: {
166
232
  profile: {
167
233
  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: "่ฏ„่ฎบ",
@@ -93,11 +94,45 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
93
94
  statusChanged: (status, title) => `ๅทฒ่ฎพไธบโ€œ${status}โ€๏ผš${title}`,
94
95
  statusUndo: "ๆ’ค้”€",
95
96
  statusRestored: (status, title) => `ๅทฒๆขๅคไธบโ€œ${status}โ€๏ผš${title}`,
97
+ commentFailed: "ๆ— ๆณ•ๅ‘่กจ่ฏ„่ฎบใ€‚",
98
+ voteFailed: "ๆ— ๆณ•ไฟๅญ˜ๆ‚จ็š„ๆŠ•็ฅจใ€‚",
99
+ replyFailed: "ๆ— ๆณ•ๅ‘้€ๅ›žๅคใ€‚",
96
100
  },
97
101
  feedbackMenu: {
98
102
  trigger: "ๅ‘้€ๅ้ฆˆ",
99
103
  myFeedback: "ๆˆ‘็š„ๅ้ฆˆ",
100
104
  viewFeedback: "ๆŸฅ็œ‹ๅ้ฆˆ",
105
+ allFeedback: "ๅ…จ้ƒจๅ้ฆˆ",
106
+ },
107
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9: the public pages and the two feedback
108
+ // notification types.
109
+ feedbackPublic: {
110
+ title: "ๅ…จ้ƒจๅ้ฆˆ",
111
+ sort: "ๆŽ’ๅบ",
112
+ sortNewest: "ๆœ€ๆ–ฐ",
113
+ sortVotes: "ๆœ€ๅคšไบบๆƒณ่ฆ",
114
+ sortUpdated: "ๆœ€่ฟ‘ๆ›ดๆ–ฐ",
115
+ search: "ๆœ็ดขๆ ‡้ข˜",
116
+ columnVotes: "็ฅจๆ•ฐ",
117
+ total: (count) => `${n(count)} ๆกๅ้ฆˆ`,
118
+ comments: (count) => `${n(count)} ๆก่ฏ„่ฎบ`,
119
+ votes: (count) => `${n(count)} ็ฅจ`,
120
+ anonymous: "ไธ€ไฝ็”จๆˆท",
121
+ filedBy: (name) => `ๆไบค่€…๏ผš${name}`,
122
+ body: "ๆ่ฟฐ",
123
+ conversation: "ๅ›žๅคๅ’Œ่ฏ„่ฎบ",
124
+ loading: "ๅŠ ่ฝฝไธญโ€ฆ",
125
+ empty: "ๆš‚ๆ— ๅ้ฆˆ",
126
+ visibleToOthers: "ๅฏนไป–ไบบๅฏ่ง",
127
+ visibleHint: "ๅ…ถไป–็”จๆˆทๅฏไปฅ็œ‹ๅˆฐๆ ‡้ข˜ๅ’Œๆญฃๆ–‡๏ผŒ็ปไธไผš็œ‹ๅˆฐๆ‚จ็š„ๆˆชๅ›พๆˆ–ๆ–‡ไปถใ€‚",
128
+ visibleLocked: "ไป…ๅœจๅ้ฆˆไปๅค„ไบŽๆ‰“ๅผ€็Šถๆ€ๆ—ถๅฏๆ›ดๆ”นใ€‚",
129
+ page: (page) => `็ฌฌ ${n(page)} ้กต`,
130
+ },
131
+ feedbackNotificationTypes: {
132
+ answered: "ๆ‚จ็š„ๅ้ฆˆๆ”ถๅˆฐ็š„ๅ›žๅค",
133
+ answeredDescription: "ๅฝ“ๆ‚จๆไบคๆˆ–่ฏ„่ฎบ่ฟ‡็š„ๅ้ฆˆๆ”ถๅˆฐๅ›žๅคๆ—ถใ€‚",
134
+ comment: "ๆ‚จๅ…ณๆณจ็š„ๅ้ฆˆไธญ็š„่ฏ„่ฎบ",
135
+ commentDescription: "ๅฝ“ๆœ‰ไบบ่ฏ„่ฎบๆ‚จๆไบคๆˆ–่ฏ„่ฎบ่ฟ‡็š„ๅ้ฆˆๆ—ถใ€‚",
101
136
  },
102
137
  feedbackContext: {
103
138
  user: "็”จๆˆท",
@@ -138,6 +173,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
138
173
  download: (name) => `ไธ‹่ฝฝ ${name}`,
139
174
  downloadFailed: "ๆ— ๆณ•ไธ‹่ฝฝ้™„ไปถใ€‚",
140
175
  outcome: "ๅค„็†็ป“ๆžœ",
176
+ replies: "ๅ›žๅค",
141
177
  resolvedAt: (date) => `่งฃๅ†ณๆ—ฅๆœŸ๏ผš${date}`,
142
178
  outcomeAdd: "ๆทปๅŠ ๅค„็†็ป“ๆžœ",
143
179
  outcomeUpdate: "ๆ›ดๆ–ฐ",
@@ -151,6 +187,36 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
151
187
  status: "็Šถๆ€",
152
188
  note: "ๅค‡ๆณจ",
153
189
  },
190
+ // 0.38.0 โ€” docs/feedback-harmonization.md ยง9.15: the vote, the comment thread, the replies.
191
+ feedbackVote: {
192
+ vote: "ๆˆ‘ไนŸ้œ€่ฆ",
193
+ own: "ๆ‚จ็š„ๅ้ฆˆ",
194
+ },
195
+ feedbackComments: {
196
+ comments: "่ฏ„่ฎบ",
197
+ empty: "ๆš‚ๆ— ่ฏ„่ฎบ",
198
+ hidden: "ๅทฒ่ขซ็ฎก็†ๅ‘˜้š่—",
199
+ hide: "้š่—",
200
+ unhide: "ๅ–ๆถˆ้š่—",
201
+ delete: "ๅˆ ้™ค",
202
+ deleteTitle: "ๅˆ ้™ค่ฟ™ๆก่ฏ„่ฎบ๏ผŸ",
203
+ deleteBody: "ๅฐ†ๅฏนๆ‰€ๆœ‰ไบบ็งป้™ค๏ผŒไธ”ๆ— ๆณ•ๆ’ค้”€ใ€‚",
204
+ field: "ๆ’ฐๅ†™่ฏ„่ฎบ",
205
+ placeholder: "ๆ’ฐๅ†™่ฏ„่ฎบโ€ฆ",
206
+ send: "ๅ‘่กจ่ฏ„่ฎบ",
207
+ },
208
+ feedbackReplies: {
209
+ replies: "ๅ›žๅค",
210
+ empty: "ๆš‚ๆ— ๅ›žๅค",
211
+ admin: "็ฎก็†ๅ‘˜",
212
+ statusChanged: "็Šถๆ€ๅทฒๆ”นไธบ",
213
+ field: "ๆ’ฐๅ†™ๅ›žๅค",
214
+ placeholder: "ๆ’ฐๅ†™ๅ›žๅคโ€ฆ",
215
+ reply: "ๅ›žๅค",
216
+ status: "้šๅ›žๅคๆ›ดๆ”น็Šถๆ€",
217
+ noChange: "ไธๆ›ดๆ”น",
218
+ nudge: "ๅฐšๆœช้€š็Ÿฅๆไบค่€…ใ€‚่ฏทๆทปๅŠ ๅ›žๅคใ€‚",
219
+ },
154
220
  accountSettings: {
155
221
  profile: {
156
222
  title: "ไธชไบบ่ต„ๆ–™",
@@ -212,6 +212,11 @@ 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}}"]],
219
+ "feedbackPublic.page": [[3]],
215
220
  "accountSettings.passkeys.renameItem": [["{{name}}"]],
216
221
  "accountSettings.passkeys.renameField": [["{{name}}"]],
217
222
  "accountSettings.passkeys.deleteItem": [["{{name}}"]],
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,
@@ -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
+ }