@panneau/intl 4.1.0 → 5.0.0-alpha.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 (53) hide show
  1. package/README.md +41 -0
  2. package/dist/catalogs.d.ts +17 -0
  3. package/dist/catalogs.d.ts.map +1 -0
  4. package/dist/catalogs.js +43 -0
  5. package/dist/catalogs.js.map +1 -0
  6. package/dist/fr/fields.d.ts +3 -0
  7. package/dist/fr/fields.d.ts.map +1 -0
  8. package/dist/fr/fields.js +25 -0
  9. package/dist/fr/fields.js.map +1 -0
  10. package/dist/fr/forms.d.ts +3 -0
  11. package/dist/fr/forms.d.ts.map +1 -0
  12. package/dist/fr/forms.js +49 -0
  13. package/dist/fr/forms.js.map +1 -0
  14. package/dist/fr/lists.d.ts +3 -0
  15. package/dist/fr/lists.d.ts.map +1 -0
  16. package/dist/fr/lists.js +53 -0
  17. package/dist/fr/lists.js.map +1 -0
  18. package/dist/fr/ui.d.ts +3 -0
  19. package/dist/fr/ui.d.ts.map +1 -0
  20. package/dist/fr/ui.js +16 -0
  21. package/dist/fr/ui.js.map +1 -0
  22. package/dist/index.d.ts +8 -44
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +7 -292
  25. package/dist/merge.d.ts +13 -0
  26. package/dist/merge.d.ts.map +1 -0
  27. package/dist/merge.js +25 -0
  28. package/dist/merge.js.map +1 -0
  29. package/dist/message.d.ts +17 -0
  30. package/dist/message.d.ts.map +1 -0
  31. package/dist/message.js +9 -0
  32. package/dist/message.js.map +1 -0
  33. package/dist/messages/fields.d.ts +41 -0
  34. package/dist/messages/fields.d.ts.map +1 -0
  35. package/dist/messages/fields.js +80 -0
  36. package/dist/messages/fields.js.map +1 -0
  37. package/dist/messages/forms.d.ts +72 -0
  38. package/dist/messages/forms.d.ts.map +1 -0
  39. package/dist/messages/forms.js +178 -0
  40. package/dist/messages/forms.js.map +1 -0
  41. package/dist/messages/lists.d.ts +92 -0
  42. package/dist/messages/lists.d.ts.map +1 -0
  43. package/dist/messages/lists.js +192 -0
  44. package/dist/messages/lists.js.map +1 -0
  45. package/dist/messages/ui.d.ts +15 -0
  46. package/dist/messages/ui.d.ts.map +1 -0
  47. package/dist/messages/ui.js +44 -0
  48. package/dist/messages/ui.js.map +1 -0
  49. package/package.json +16 -70
  50. package/locale/en.js +0 -278
  51. package/locale/en.json +0 -161
  52. package/locale/fr.js +0 -278
  53. package/locale/fr.json +0 -161
package/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # @panneau/intl
2
+
3
+ The UI messages of the Panneau packages, in English and French, with helpers to merge them with an app's messages.
4
+
5
+ ```tsx
6
+ import { IntlProvider } from 'react-intl';
7
+
8
+ import { withPanneauMessages } from '@panneau/intl';
9
+
10
+ <IntlProvider locale="fr" messages={withPanneauMessages('fr', appMessages)}>
11
+ <App />
12
+ </IntlProvider>;
13
+ ```
14
+
15
+ | Export | Content |
16
+ | --------------- | ------------------------------------------------------------------------------------------------------- |
17
+ | `@panneau/intl` | `en`, `fr`, `panneauMessages`, `getPanneauMessages()`, `withPanneauMessages()`, the message descriptors |
18
+
19
+ ## Messages of every package
20
+
21
+ The messages of `@panneau/ui`, `@panneau/fields`, `@panneau/forms` and `@panneau/lists` live here, so an app adds one import, whichever packages it uses:
22
+
23
+ - **`withPanneauMessages(locale, messages)`** merges the messages of every package for a locale with the app's. The app's win, so it can reword a Panneau message by its id (`'panneau.forms.save'`).
24
+ - **`getPanneauMessages(locale)`** returns the messages of every package for a locale. A regional locale (`fr-CA`) gets those of its language. A locale Panneau doesn't translate gets none, and components fall back to their English defaults.
25
+ - **`en`** and **`fr`** are the catalogs, by id, and **`panneauMessages`** has them by locale.
26
+
27
+ English is also the default text of every message (`defaultMessage`), so components render in English without any of these. Without an `IntlProvider`, `PanneauRoot` (from `@panneau/ui`) provides one with `getPanneauMessages()` in its `locale`.
28
+
29
+ With `@panneau/core` plugins, `fieldsPlugin` (from `@panneau/fields`) carries `fr`, and `loadMessages(registry, locale)` returns it.
30
+
31
+ ## Descriptors
32
+
33
+ `uiMessages`, `fieldsMessages`, `formsMessages` and `listsMessages` are the message descriptors the components format, with their ids and English text. Their type, `PanneauMessage<Values>`, gives react-intl the values each message takes, so `formatMessage()` checks them.
34
+
35
+ Message ids are part of the public API: renaming one breaks the apps that override it. Ids start with `panneau.<package>.`.
36
+
37
+ ## Translations
38
+
39
+ A test checks, in CI, that every message of every package has a French translation, that French has no unknown ids, and that each translation uses the same ICU arguments as its English text. A new message needs its French text in `src/fr/<package>.ts`.
40
+
41
+ The package layout, scripts and API reports are explained in [`docs/packages.md`](../../docs/packages.md).
@@ -0,0 +1,17 @@
1
+ import type { PanneauMessage } from './message';
2
+ /** Messages by id, as react-intl's `IntlProvider` takes them. */
3
+ export type MessageCatalog = Record<string, string>;
4
+ /** The descriptors of a group of messages, with those of nested groups (`formsMessages.rule`). */
5
+ export declare function getDescriptors(group: object): PanneauMessage[];
6
+ /** The English text of a group of messages, by id. */
7
+ export declare function getDefaultMessages(group: object): MessageCatalog;
8
+ /**
9
+ * The English messages of every Panneau package, by id. They are also the default messages of
10
+ * the components, so an app in English needs none of them.
11
+ */
12
+ export declare const en: MessageCatalog;
13
+ /** The French messages of every Panneau package, by id. */
14
+ export declare const fr: MessageCatalog;
15
+ /** The messages of every Panneau package, by locale. */
16
+ export declare const panneauMessages: Readonly<Record<string, MessageCatalog>>;
17
+ //# sourceMappingURL=catalogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../src/catalogs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAMhD,iEAAiE;AACjE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAI9D;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAIhE;AAED;;;GAGG;AACH,eAAO,MAAM,EAAE,EAAE,cAKhB,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,EAAE,EAAE,cAAiE,CAAC;AAEnF,wDAAwD;AACxD,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAc,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { fieldsFr } from "./fr/fields.js";
2
+ import { formsFr } from "./fr/forms.js";
3
+ import { listsFr } from "./fr/lists.js";
4
+ import { uiFr } from "./fr/ui.js";
5
+ import { fieldsMessages } from "./messages/fields.js";
6
+ import { formsMessages } from "./messages/forms.js";
7
+ import { listsMessages } from "./messages/lists.js";
8
+ import { uiMessages } from "./messages/ui.js";
9
+ //#region src/catalogs.ts
10
+ /** The descriptors of a group of messages, with those of nested groups (`formsMessages.rule`). */
11
+ function getDescriptors(group) {
12
+ return Object.values(group).flatMap((entry) => "id" in entry ? [entry] : getDescriptors(entry));
13
+ }
14
+ /** The English text of a group of messages, by id. */
15
+ function getDefaultMessages(group) {
16
+ return Object.fromEntries(getDescriptors(group).map(({ id, defaultMessage }) => [String(id), String(defaultMessage)]));
17
+ }
18
+ /**
19
+ * The English messages of every Panneau package, by id. They are also the default messages of
20
+ * the components, so an app in English needs none of them.
21
+ */
22
+ var en = {
23
+ ...getDefaultMessages(uiMessages),
24
+ ...getDefaultMessages(fieldsMessages),
25
+ ...getDefaultMessages(formsMessages),
26
+ ...getDefaultMessages(listsMessages)
27
+ };
28
+ /** The French messages of every Panneau package, by id. */
29
+ var fr = {
30
+ ...uiFr,
31
+ ...fieldsFr,
32
+ ...formsFr,
33
+ ...listsFr
34
+ };
35
+ /** The messages of every Panneau package, by locale. */
36
+ var panneauMessages = {
37
+ en,
38
+ fr
39
+ };
40
+ //#endregion
41
+ export { en, fr, getDefaultMessages, getDescriptors, panneauMessages };
42
+
43
+ //# sourceMappingURL=catalogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogs.js","names":[],"sources":["../src/catalogs.ts"],"sourcesContent":["import { fieldsFr } from './fr/fields';\nimport { formsFr } from './fr/forms';\nimport { listsFr } from './fr/lists';\nimport { uiFr } from './fr/ui';\nimport type { PanneauMessage } from './message';\nimport { fieldsMessages } from './messages/fields';\nimport { formsMessages } from './messages/forms';\nimport { listsMessages } from './messages/lists';\nimport { uiMessages } from './messages/ui';\n\n/** Messages by id, as react-intl's `IntlProvider` takes them. */\nexport type MessageCatalog = Record<string, string>;\n\n/** The descriptors of a group of messages, with those of nested groups (`formsMessages.rule`). */\nexport function getDescriptors(group: object): PanneauMessage[] {\n return Object.values(group).flatMap((entry: PanneauMessage | object) =>\n 'id' in entry ? [entry as PanneauMessage] : getDescriptors(entry),\n );\n}\n\n/** The English text of a group of messages, by id. */\nexport function getDefaultMessages(group: object): MessageCatalog {\n return Object.fromEntries(\n getDescriptors(group).map(({ id, defaultMessage }) => [String(id), String(defaultMessage)]),\n );\n}\n\n/**\n * The English messages of every Panneau package, by id. They are also the default messages of\n * the components, so an app in English needs none of them.\n */\nexport const en: MessageCatalog = {\n ...getDefaultMessages(uiMessages),\n ...getDefaultMessages(fieldsMessages),\n ...getDefaultMessages(formsMessages),\n ...getDefaultMessages(listsMessages),\n};\n\n/** The French messages of every Panneau package, by id. */\nexport const fr: MessageCatalog = { ...uiFr, ...fieldsFr, ...formsFr, ...listsFr };\n\n/** The messages of every Panneau package, by locale. */\nexport const panneauMessages: Readonly<Record<string, MessageCatalog>> = { en, fr };\n"],"mappings":";;;;;;;;;;AAcA,SAAgB,eAAe,OAAiC;CAC5D,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,SAAS,UACjC,QAAQ,QAAQ,CAAC,KAAuB,IAAI,eAAe,KAAK,CACpE;AACJ;;AAGA,SAAgB,mBAAmB,OAA+B;CAC9D,OAAO,OAAO,YACV,eAAe,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,qBAAqB,CAAC,OAAO,EAAE,GAAG,OAAO,cAAc,CAAC,CAAC,CAC9F;AACJ;;;;;AAMA,IAAa,KAAqB;CAC9B,GAAG,mBAAmB,UAAU;CAChC,GAAG,mBAAmB,cAAc;CACpC,GAAG,mBAAmB,aAAa;CACnC,GAAG,mBAAmB,aAAa;AACvC;;AAGA,IAAa,KAAqB;CAAE,GAAG;CAAM,GAAG;CAAU,GAAG;CAAS,GAAG;AAAQ;;AAGjF,IAAa,kBAA4D;CAAE;CAAI;AAAG"}
@@ -0,0 +1,3 @@
1
+ /** The French messages of `@panneau/fields`, by id. */
2
+ export declare const fieldsFr: Record<string, string>;
3
+ //# sourceMappingURL=fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/fr/fields.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkB3C,CAAC"}
@@ -0,0 +1,25 @@
1
+ //#region src/fr/fields.ts
2
+ /** The French messages of `@panneau/fields`, by id. */
3
+ var fieldsFr = {
4
+ "panneau.fields.add": "Ajouter",
5
+ "panneau.fields.addType": "Ajouter : {type}",
6
+ "panneau.fields.remove": "Retirer",
7
+ "panneau.fields.removeItem": "Retirer l’élément {index}",
8
+ "panneau.fields.moveUp": "Monter l’élément {index}",
9
+ "panneau.fields.moveDown": "Descendre l’élément {index}",
10
+ "panneau.fields.item": "Élément {index}",
11
+ "panneau.fields.noItems": "Aucun élément pour l’instant.",
12
+ "panneau.fields.characterCount": "{count, number} / {max, number} caractères",
13
+ "panneau.fields.openLink": "Ouvrir le lien",
14
+ "panneau.fields.pickColor": "Choisir une couleur",
15
+ "panneau.fields.generateSlug": "Générer à partir de {field}",
16
+ "panneau.fields.search": "Rechercher…",
17
+ "panneau.fields.noRelation": "Aucun",
18
+ "panneau.fields.noResults": "Aucun résultat",
19
+ "panneau.fields.relationUnavailable": "Impossible de chercher des éléments ici.",
20
+ "panneau.fields.missingPlugin": "Ce champ a besoin d’un plugin pour le type « {type} »."
21
+ };
22
+ //#endregion
23
+ export { fieldsFr };
24
+
25
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","names":[],"sources":["../../src/fr/fields.ts"],"sourcesContent":["/** The French messages of `@panneau/fields`, by id. */\nexport const fieldsFr: Record<string, string> = {\n 'panneau.fields.add': 'Ajouter',\n 'panneau.fields.addType': 'Ajouter : {type}',\n 'panneau.fields.remove': 'Retirer',\n 'panneau.fields.removeItem': 'Retirer l’élément {index}',\n 'panneau.fields.moveUp': 'Monter l’élément {index}',\n 'panneau.fields.moveDown': 'Descendre l’élément {index}',\n 'panneau.fields.item': 'Élément {index}',\n 'panneau.fields.noItems': 'Aucun élément pour l’instant.',\n 'panneau.fields.characterCount': '{count, number} / {max, number} caractères',\n 'panneau.fields.openLink': 'Ouvrir le lien',\n 'panneau.fields.pickColor': 'Choisir une couleur',\n 'panneau.fields.generateSlug': 'Générer à partir de {field}',\n 'panneau.fields.search': 'Rechercher…',\n 'panneau.fields.noRelation': 'Aucun',\n 'panneau.fields.noResults': 'Aucun résultat',\n 'panneau.fields.relationUnavailable': 'Impossible de chercher des éléments ici.',\n 'panneau.fields.missingPlugin': 'Ce champ a besoin d’un plugin pour le type « {type} ».',\n};\n"],"mappings":";;AACA,IAAa,WAAmC;CAC5C,sBAAsB;CACtB,0BAA0B;CAC1B,yBAAyB;CACzB,6BAA6B;CAC7B,yBAAyB;CACzB,2BAA2B;CAC3B,uBAAuB;CACvB,0BAA0B;CAC1B,iCAAiC;CACjC,2BAA2B;CAC3B,4BAA4B;CAC5B,+BAA+B;CAC/B,yBAAyB;CACzB,6BAA6B;CAC7B,4BAA4B;CAC5B,sCAAsC;CACtC,gCAAgC;AACpC"}
@@ -0,0 +1,3 @@
1
+ /** The French messages of `@panneau/forms`, by id. */
2
+ export declare const formsFr: Record<string, string>;
3
+ //# sourceMappingURL=forms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../src/fr/forms.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiD1C,CAAC"}
@@ -0,0 +1,49 @@
1
+ //#region src/fr/forms.ts
2
+ /** The French messages of `@panneau/forms`, by id. */
3
+ var formsFr = {
4
+ "panneau.forms.save": "Enregistrer",
5
+ "panneau.forms.saved": "Enregistré",
6
+ "panneau.forms.unsaved": "Modifications non enregistrées",
7
+ "panneau.forms.errorCount": "{count, plural, one {# erreur} other {# erreurs}}",
8
+ "panneau.forms.summaryTitle": "{count, plural, one {# erreur empêche l’enregistrement} other {# erreurs empêchent l’enregistrement}}",
9
+ "panneau.forms.goToField": "Aller à {field}",
10
+ "panneau.forms.saveFailed": "Les modifications n’ont pas pu être enregistrées.",
11
+ "panneau.forms.retry": "Réessayer",
12
+ "panneau.forms.fieldCrashed": "Le champ « {field} » ne peut pas être affiché.",
13
+ "panneau.forms.conflictTitle": "Quelqu’un d’autre a enregistré cet élément",
14
+ "panneau.forms.conflictMessage": "Il a changé depuis que vous l’avez ouvert. Chargez la version actuelle, ou enregistrez la vôtre par-dessus.",
15
+ "panneau.forms.conflictChanges": "Valeurs différentes",
16
+ "panneau.forms.conflictUnknown": "La version actuelle n’a pas été envoyée : chargez-la pour voir ce qui a changé.",
17
+ "panneau.forms.yours": "La vôtre",
18
+ "panneau.forms.current": "Actuelle",
19
+ "panneau.forms.empty": "(vide)",
20
+ "panneau.forms.itemCount": "{count, plural, one {# élément} other {# éléments}}",
21
+ "panneau.forms.yes": "Oui",
22
+ "panneau.forms.no": "Non",
23
+ "panneau.forms.loadCurrent": "Charger la version actuelle",
24
+ "panneau.forms.overwrite": "Enregistrer la mienne quand même",
25
+ "panneau.forms.leaveTitle": "Quitter sans enregistrer?",
26
+ "panneau.forms.leaveMessage": "Vos modifications seront perdues.",
27
+ "panneau.forms.stay": "Rester",
28
+ "panneau.forms.leave": "Quitter",
29
+ "panneau.forms.rule.required": "Ce champ est obligatoire.",
30
+ "panneau.forms.rule.min": "Cette valeur doit être d’au moins {value, number}.",
31
+ "panneau.forms.rule.max": "Cette valeur doit être d’au plus {value, number}.",
32
+ "panneau.forms.rule.minLength": "{value, plural, one {Au moins # caractère.} other {Au moins # caractères.}}",
33
+ "panneau.forms.rule.maxLength": "{value, plural, one {Au plus # caractère.} other {Au plus # caractères.}}",
34
+ "panneau.forms.rule.minItems": "{value, plural, one {Au moins # élément.} other {Au moins # éléments.}}",
35
+ "panneau.forms.rule.maxItems": "{value, plural, one {Au plus # élément.} other {Au plus # éléments.}}",
36
+ "panneau.forms.rule.pattern": "Cette valeur n’a pas le bon format.",
37
+ "panneau.forms.rule.email": "Cette valeur doit être une adresse courriel.",
38
+ "panneau.forms.rule.url": "Cette valeur doit être une URL.",
39
+ "panneau.forms.rule.in": "Cette valeur ne fait pas partie des choix.",
40
+ "panneau.forms.rule.accept": "Ce type de fichier n’est pas accepté.",
41
+ "panneau.forms.rule.maxSize": "Ce fichier est trop lourd.",
42
+ "panneau.forms.rule.before": "Cette date est trop tardive.",
43
+ "panneau.forms.rule.after": "Cette date est trop hâtive.",
44
+ "panneau.forms.rule.invalid": "Cette valeur n’est pas valide."
45
+ };
46
+ //#endregion
47
+ export { formsFr };
48
+
49
+ //# sourceMappingURL=forms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.js","names":[],"sources":["../../src/fr/forms.ts"],"sourcesContent":["/** The French messages of `@panneau/forms`, by id. */\nexport const formsFr: Record<string, string> = {\n 'panneau.forms.save': 'Enregistrer',\n 'panneau.forms.saved': 'Enregistré',\n 'panneau.forms.unsaved': 'Modifications non enregistrées',\n 'panneau.forms.errorCount': '{count, plural, one {# erreur} other {# erreurs}}',\n 'panneau.forms.summaryTitle':\n '{count, plural, one {# erreur empêche l’enregistrement} other {# erreurs empêchent l’enregistrement}}',\n 'panneau.forms.goToField': 'Aller à {field}',\n 'panneau.forms.saveFailed': 'Les modifications n’ont pas pu être enregistrées.',\n 'panneau.forms.retry': 'Réessayer',\n 'panneau.forms.fieldCrashed': 'Le champ « {field} » ne peut pas être affiché.',\n 'panneau.forms.conflictTitle': 'Quelqu’un d’autre a enregistré cet élément',\n 'panneau.forms.conflictMessage':\n 'Il a changé depuis que vous l’avez ouvert. Chargez la version actuelle, ou enregistrez la vôtre par-dessus.',\n 'panneau.forms.conflictChanges': 'Valeurs différentes',\n 'panneau.forms.conflictUnknown':\n 'La version actuelle n’a pas été envoyée : chargez-la pour voir ce qui a changé.',\n 'panneau.forms.yours': 'La vôtre',\n 'panneau.forms.current': 'Actuelle',\n 'panneau.forms.empty': '(vide)',\n 'panneau.forms.itemCount': '{count, plural, one {# élément} other {# éléments}}',\n 'panneau.forms.yes': 'Oui',\n 'panneau.forms.no': 'Non',\n 'panneau.forms.loadCurrent': 'Charger la version actuelle',\n 'panneau.forms.overwrite': 'Enregistrer la mienne quand même',\n 'panneau.forms.leaveTitle': 'Quitter sans enregistrer?',\n 'panneau.forms.leaveMessage': 'Vos modifications seront perdues.',\n 'panneau.forms.stay': 'Rester',\n 'panneau.forms.leave': 'Quitter',\n 'panneau.forms.rule.required': 'Ce champ est obligatoire.',\n 'panneau.forms.rule.min': 'Cette valeur doit être d’au moins {value, number}.',\n 'panneau.forms.rule.max': 'Cette valeur doit être d’au plus {value, number}.',\n 'panneau.forms.rule.minLength':\n '{value, plural, one {Au moins # caractère.} other {Au moins # caractères.}}',\n 'panneau.forms.rule.maxLength':\n '{value, plural, one {Au plus # caractère.} other {Au plus # caractères.}}',\n 'panneau.forms.rule.minItems':\n '{value, plural, one {Au moins # élément.} other {Au moins # éléments.}}',\n 'panneau.forms.rule.maxItems':\n '{value, plural, one {Au plus # élément.} other {Au plus # éléments.}}',\n 'panneau.forms.rule.pattern': 'Cette valeur n’a pas le bon format.',\n 'panneau.forms.rule.email': 'Cette valeur doit être une adresse courriel.',\n 'panneau.forms.rule.url': 'Cette valeur doit être une URL.',\n 'panneau.forms.rule.in': 'Cette valeur ne fait pas partie des choix.',\n 'panneau.forms.rule.accept': 'Ce type de fichier n’est pas accepté.',\n 'panneau.forms.rule.maxSize': 'Ce fichier est trop lourd.',\n 'panneau.forms.rule.before': 'Cette date est trop tardive.',\n 'panneau.forms.rule.after': 'Cette date est trop hâtive.',\n 'panneau.forms.rule.invalid': 'Cette valeur n’est pas valide.',\n};\n"],"mappings":";;AACA,IAAa,UAAkC;CAC3C,sBAAsB;CACtB,uBAAuB;CACvB,yBAAyB;CACzB,4BAA4B;CAC5B,8BACI;CACJ,2BAA2B;CAC3B,4BAA4B;CAC5B,uBAAuB;CACvB,8BAA8B;CAC9B,+BAA+B;CAC/B,iCACI;CACJ,iCAAiC;CACjC,iCACI;CACJ,uBAAuB;CACvB,yBAAyB;CACzB,uBAAuB;CACvB,2BAA2B;CAC3B,qBAAqB;CACrB,oBAAoB;CACpB,6BAA6B;CAC7B,2BAA2B;CAC3B,4BAA4B;CAC5B,8BAA8B;CAC9B,sBAAsB;CACtB,uBAAuB;CACvB,+BAA+B;CAC/B,0BAA0B;CAC1B,0BAA0B;CAC1B,gCACI;CACJ,gCACI;CACJ,+BACI;CACJ,+BACI;CACJ,8BAA8B;CAC9B,4BAA4B;CAC5B,0BAA0B;CAC1B,yBAAyB;CACzB,6BAA6B;CAC7B,8BAA8B;CAC9B,6BAA6B;CAC7B,4BAA4B;CAC5B,8BAA8B;AAClC"}
@@ -0,0 +1,3 @@
1
+ /** The French messages of `@panneau/lists`, by id. */
2
+ export declare const listsFr: Record<string, string>;
3
+ //# sourceMappingURL=lists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../src/fr/lists.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmD1C,CAAC"}
@@ -0,0 +1,53 @@
1
+ //#region src/fr/lists.ts
2
+ /** The French messages of `@panneau/lists`, by id. */
3
+ var listsFr = {
4
+ "panneau.lists.list": "Éléments",
5
+ "panneau.lists.search": "Rechercher",
6
+ "panneau.lists.searchPlaceholder": "Rechercher…",
7
+ "panneau.lists.filters": "Filtres",
8
+ "panneau.lists.activeFilters": "Filtres actifs",
9
+ "panneau.lists.removeFilter": "Retirer le filtre {filter}",
10
+ "panneau.lists.searchChip": "Recherche : {q}",
11
+ "panneau.lists.clearFilters": "Tout effacer",
12
+ "panneau.lists.any": "Tous",
13
+ "panneau.lists.from": "Du",
14
+ "panneau.lists.to": "Au",
15
+ "panneau.lists.dateRange": "{from} – {to}",
16
+ "panneau.lists.yes": "Oui",
17
+ "panneau.lists.no": "Non",
18
+ "panneau.lists.sortBy": "Trier par",
19
+ "panneau.lists.defaultSort": "Par défaut",
20
+ "panneau.lists.sortAscending": "{column}, croissant",
21
+ "panneau.lists.sortDescending": "{column}, décroissant",
22
+ "panneau.lists.layout": "Affichage",
23
+ "panneau.lists.layoutTable": "Tableau",
24
+ "panneau.lists.layoutCards": "Cartes",
25
+ "panneau.lists.selectItem": "Sélectionner {item}",
26
+ "panneau.lists.selectPage": "Sélectionner tous les éléments de la page",
27
+ "panneau.lists.selectedCount": "{count, plural, one {# élément sélectionné} other {# éléments sélectionnés}}",
28
+ "panneau.lists.selectAllMatching": "Sélectionner {total, plural, one {l’élément} other {les # éléments}}",
29
+ "panneau.lists.allMatchingSelected": "{total, plural, one {L’élément est sélectionné} other {Les # éléments sont sélectionnés}}, sur toutes les pages.",
30
+ "panneau.lists.clearSelection": "Effacer la sélection",
31
+ "panneau.lists.actions": "Actions",
32
+ "panneau.lists.actionOnItem": "{action} : {item}",
33
+ "panneau.lists.itemActions": "Actions pour {item}",
34
+ "panneau.lists.confirmTitle": "{action} ?",
35
+ "panneau.lists.confirmMessage": "« {action} » s’appliquera à {count, plural, one {# élément} other {# éléments}}.",
36
+ "panneau.lists.confirmSkipped": "{count, plural, one {# élément sélectionné ne le permet pas et sera ignoré.} other {# éléments sélectionnés ne le permettent pas et seront ignorés.}}",
37
+ "panneau.lists.cancel": "Annuler",
38
+ "panneau.lists.actionFailed": "« {action} » a échoué.",
39
+ "panneau.lists.empty": "Aucun élément pour l’instant.",
40
+ "panneau.lists.noResults": "Aucun élément ne correspond à la recherche ou aux filtres.",
41
+ "panneau.lists.loadFailed": "Les éléments n’ont pas pu être chargés.",
42
+ "panneau.lists.retry": "Réessayer",
43
+ "panneau.lists.pagination": "Pagination",
44
+ "panneau.lists.range": "{start, number}–{end, number} sur {total, number}",
45
+ "panneau.lists.pageOf": "Page {page, number} sur {lastPage, number}",
46
+ "panneau.lists.previousPage": "Page précédente",
47
+ "panneau.lists.nextPage": "Page suivante",
48
+ "panneau.lists.perPage": "Par page"
49
+ };
50
+ //#endregion
51
+ export { listsFr };
52
+
53
+ //# sourceMappingURL=lists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lists.js","names":[],"sources":["../../src/fr/lists.ts"],"sourcesContent":["/** The French messages of `@panneau/lists`, by id. */\nexport const listsFr: Record<string, string> = {\n 'panneau.lists.list': 'Éléments',\n 'panneau.lists.search': 'Rechercher',\n 'panneau.lists.searchPlaceholder': 'Rechercher…',\n 'panneau.lists.filters': 'Filtres',\n 'panneau.lists.activeFilters': 'Filtres actifs',\n 'panneau.lists.removeFilter': 'Retirer le filtre {filter}',\n 'panneau.lists.searchChip': 'Recherche : {q}',\n 'panneau.lists.clearFilters': 'Tout effacer',\n 'panneau.lists.any': 'Tous',\n 'panneau.lists.from': 'Du',\n 'panneau.lists.to': 'Au',\n 'panneau.lists.dateRange': '{from} – {to}',\n 'panneau.lists.yes': 'Oui',\n 'panneau.lists.no': 'Non',\n 'panneau.lists.sortBy': 'Trier par',\n 'panneau.lists.defaultSort': 'Par défaut',\n 'panneau.lists.sortAscending': '{column}, croissant',\n 'panneau.lists.sortDescending': '{column}, décroissant',\n 'panneau.lists.layout': 'Affichage',\n 'panneau.lists.layoutTable': 'Tableau',\n 'panneau.lists.layoutCards': 'Cartes',\n 'panneau.lists.selectItem': 'Sélectionner {item}',\n 'panneau.lists.selectPage': 'Sélectionner tous les éléments de la page',\n 'panneau.lists.selectedCount':\n '{count, plural, one {# élément sélectionné} other {# éléments sélectionnés}}',\n 'panneau.lists.selectAllMatching':\n 'Sélectionner {total, plural, one {l’élément} other {les # éléments}}',\n 'panneau.lists.allMatchingSelected':\n '{total, plural, one {L’élément est sélectionné} other {Les # éléments sont sélectionnés}}, sur toutes les pages.',\n 'panneau.lists.clearSelection': 'Effacer la sélection',\n 'panneau.lists.actions': 'Actions',\n 'panneau.lists.actionOnItem': '{action} : {item}',\n 'panneau.lists.itemActions': 'Actions pour {item}',\n 'panneau.lists.confirmTitle': '{action} ?',\n 'panneau.lists.confirmMessage':\n '« {action} » s’appliquera à {count, plural, one {# élément} other {# éléments}}.',\n 'panneau.lists.confirmSkipped':\n '{count, plural, one {# élément sélectionné ne le permet pas et sera ignoré.} other {# éléments sélectionnés ne le permettent pas et seront ignorés.}}',\n 'panneau.lists.cancel': 'Annuler',\n 'panneau.lists.actionFailed': '« {action} » a échoué.',\n 'panneau.lists.empty': 'Aucun élément pour l’instant.',\n 'panneau.lists.noResults': 'Aucun élément ne correspond à la recherche ou aux filtres.',\n 'panneau.lists.loadFailed': 'Les éléments n’ont pas pu être chargés.',\n 'panneau.lists.retry': 'Réessayer',\n 'panneau.lists.pagination': 'Pagination',\n 'panneau.lists.range': '{start, number}–{end, number} sur {total, number}',\n 'panneau.lists.pageOf': 'Page {page, number} sur {lastPage, number}',\n 'panneau.lists.previousPage': 'Page précédente',\n 'panneau.lists.nextPage': 'Page suivante',\n 'panneau.lists.perPage': 'Par page',\n};\n"],"mappings":";;AACA,IAAa,UAAkC;CAC3C,sBAAsB;CACtB,wBAAwB;CACxB,mCAAmC;CACnC,yBAAyB;CACzB,+BAA+B;CAC/B,8BAA8B;CAC9B,4BAA4B;CAC5B,8BAA8B;CAC9B,qBAAqB;CACrB,sBAAsB;CACtB,oBAAoB;CACpB,2BAA2B;CAC3B,qBAAqB;CACrB,oBAAoB;CACpB,wBAAwB;CACxB,6BAA6B;CAC7B,+BAA+B;CAC/B,gCAAgC;CAChC,wBAAwB;CACxB,6BAA6B;CAC7B,6BAA6B;CAC7B,4BAA4B;CAC5B,4BAA4B;CAC5B,+BACI;CACJ,mCACI;CACJ,qCACI;CACJ,gCAAgC;CAChC,yBAAyB;CACzB,8BAA8B;CAC9B,6BAA6B;CAC7B,8BAA8B;CAC9B,gCACI;CACJ,gCACI;CACJ,wBAAwB;CACxB,8BAA8B;CAC9B,uBAAuB;CACvB,2BAA2B;CAC3B,4BAA4B;CAC5B,uBAAuB;CACvB,4BAA4B;CAC5B,uBAAuB;CACvB,wBAAwB;CACxB,8BAA8B;CAC9B,0BAA0B;CAC1B,yBAAyB;AAC7B"}
@@ -0,0 +1,3 @@
1
+ /** The French messages of `@panneau/ui`, by id. */
2
+ export declare const uiFr: Record<string, string>;
3
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/fr/ui.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASvC,CAAC"}
package/dist/fr/ui.js ADDED
@@ -0,0 +1,16 @@
1
+ //#region src/fr/ui.ts
2
+ /** The French messages of `@panneau/ui`, by id. */
3
+ var uiFr = {
4
+ "panneau.ui.close": "Fermer",
5
+ "panneau.ui.loading": "Chargement…",
6
+ "panneau.ui.notifications": "Notifications",
7
+ "panneau.ui.select.placeholder": "Choisir…",
8
+ "panneau.ui.noResults": "Aucun résultat",
9
+ "panneau.ui.showOptions": "Afficher les choix",
10
+ "panneau.ui.clear": "Effacer",
11
+ "panneau.ui.moreActions": "Plus d’actions"
12
+ };
13
+ //#endregion
14
+ export { uiFr };
15
+
16
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","names":[],"sources":["../../src/fr/ui.ts"],"sourcesContent":["/** The French messages of `@panneau/ui`, by id. */\nexport const uiFr: Record<string, string> = {\n 'panneau.ui.close': 'Fermer',\n 'panneau.ui.loading': 'Chargement…',\n 'panneau.ui.notifications': 'Notifications',\n 'panneau.ui.select.placeholder': 'Choisir…',\n 'panneau.ui.noResults': 'Aucun résultat',\n 'panneau.ui.showOptions': 'Afficher les choix',\n 'panneau.ui.clear': 'Effacer',\n 'panneau.ui.moreActions': 'Plus d’actions',\n};\n"],"mappings":";;AACA,IAAa,OAA+B;CACxC,oBAAoB;CACpB,sBAAsB;CACtB,4BAA4B;CAC5B,iCAAiC;CACjC,wBAAwB;CACxB,0BAA0B;CAC1B,oBAAoB;CACpB,0BAA0B;AAC9B"}
package/dist/index.d.ts CHANGED
@@ -1,44 +1,8 @@
1
- import * as react from 'react';
2
- import { ReactNode } from 'react';
3
- import { IntlConfig } from 'react-intl';
4
- import { MessageValues, Resource, ResourceIntlValues } from '@panneau/core';
5
-
6
- declare class IntlManager {
7
- locales: any[];
8
- addLocale(locale: any, messages: any, replace?: boolean): void;
9
- getLocale(locale: any): any;
10
- hasLocale(locale: any): boolean;
11
- getMessages(locale: any): any;
12
- }
13
-
14
- interface IntlProviderProps extends Omit<IntlConfig, 'locale' | 'messages'> {
15
- intlManager?: IntlManager;
16
- locale?: string | null;
17
- locales?: string[] | null;
18
- extraMessages?: Record<string, string> | null;
19
- children?: ReactNode;
20
- }
21
- declare function IntlProvider({ intlManager, locale, locales, children, extraMessages, ...props }: IntlProviderProps): react.JSX.Element;
22
-
23
- interface ResourceIntlConfig {
24
- values?: MessageValues;
25
- }
26
- interface ResourceConfig {
27
- id?: string;
28
- name?: string | null;
29
- intl?: ResourceIntlConfig;
30
- }
31
- interface ResourceMessageProps {
32
- resource?: ResourceConfig | null;
33
- values?: MessageValues | null;
34
- id: string;
35
- defaultMessage?: string | null;
36
- description?: string | null;
37
- }
38
- declare function ResourceMessage({ resource, values, id, defaultMessage, description, }: ResourceMessageProps): react.JSX.Element;
39
-
40
- declare function useResourceValues(resource: Resource | null, values?: MessageValues | null): ResourceIntlValues;
41
-
42
- declare const intlManager: IntlManager;
43
-
44
- export { IntlManager, IntlProvider, ResourceMessage, intlManager as default, useResourceValues };
1
+ export { type MessageCatalog, en, fr, getDefaultMessages, panneauMessages } from './catalogs';
2
+ export { type PanneauMessage, type PanneauMessageValues } from './message';
3
+ export { fieldsMessages } from './messages/fields';
4
+ export { formsMessages } from './messages/forms';
5
+ export { listsMessages } from './messages/lists';
6
+ export { uiMessages } from './messages/ui';
7
+ export { getPanneauMessages, withPanneauMessages } from './merge';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}