payload-intl 0.3.0 → 1.0.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 (128) hide show
  1. package/README.md +5 -8
  2. package/dist/components/MessageController.d.ts +2 -1
  3. package/dist/components/MessageController.d.ts.map +1 -0
  4. package/dist/components/MessageController.js +5 -5
  5. package/dist/components/MessageController.js.map +1 -1
  6. package/dist/components/MessagesForm.d.ts +2 -1
  7. package/dist/components/MessagesForm.d.ts.map +1 -0
  8. package/dist/components/MessagesForm.js +28 -32
  9. package/dist/components/MessagesForm.js.map +1 -1
  10. package/dist/components/actions/JsonImport.d.ts +1 -0
  11. package/dist/components/actions/JsonImport.d.ts.map +1 -0
  12. package/dist/components/actions/JsonImport.js +4 -4
  13. package/dist/components/actions/JsonImport.js.map +1 -1
  14. package/dist/components/actions/Move.d.ts +2 -3
  15. package/dist/components/actions/Move.d.ts.map +1 -0
  16. package/dist/components/inputs/InputWrapper.d.ts +1 -0
  17. package/dist/components/inputs/InputWrapper.d.ts.map +1 -0
  18. package/dist/components/inputs/InputWrapper.js.map +1 -1
  19. package/dist/components/inputs/LexicalInput.d.ts +1 -0
  20. package/dist/components/inputs/LexicalInput.d.ts.map +1 -0
  21. package/dist/components/inputs/MessageInput.d.ts +2 -1
  22. package/dist/components/inputs/MessageInput.d.ts.map +1 -0
  23. package/dist/components/inputs/MessageInput.js +1 -1
  24. package/dist/components/inputs/MessageInput.js.map +1 -1
  25. package/dist/components/inputs/variables/VariableChip.d.ts +1 -0
  26. package/dist/components/inputs/variables/VariableChip.d.ts.map +1 -0
  27. package/dist/components/inputs/variables/VariableChip.js +3 -3
  28. package/dist/components/inputs/variables/VariableChip.js.map +1 -1
  29. package/dist/components/inputs/variables/VariableIcon.d.ts +3 -2
  30. package/dist/components/inputs/variables/VariableIcon.d.ts.map +1 -0
  31. package/dist/components/inputs/variables/VariableSuggestion.d.ts +2 -1
  32. package/dist/components/inputs/variables/VariableSuggestion.d.ts.map +1 -0
  33. package/dist/components/inputs/variables/VariableSuggestion.js +2 -2
  34. package/dist/components/inputs/variables/VariableSuggestion.js.map +1 -1
  35. package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts +2 -1
  36. package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts.map +1 -0
  37. package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts +2 -1
  38. package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts.map +1 -0
  39. package/dist/components/inputs/variables/editors/PluralVariableEditor.js +31 -34
  40. package/dist/components/inputs/variables/editors/PluralVariableEditor.js.map +1 -1
  41. package/dist/components/inputs/variables/editors/SelectVariableEditor.d.ts +2 -1
  42. package/dist/components/inputs/variables/editors/SelectVariableEditor.d.ts.map +1 -0
  43. package/dist/components/inputs/variables/editors/SelectVariableEditor.js +17 -10
  44. package/dist/components/inputs/variables/editors/SelectVariableEditor.js.map +1 -1
  45. package/dist/components/inputs/variables/editors/TagVariableEditor.d.ts +2 -1
  46. package/dist/components/inputs/variables/editors/TagVariableEditor.d.ts.map +1 -0
  47. package/dist/components/inputs/variables/editors/TagVariableEditor.js.map +1 -1
  48. package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts +2 -1
  49. package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts.map +1 -0
  50. package/dist/components/inputs/variables/extension.d.ts +2 -1
  51. package/dist/components/inputs/variables/extension.d.ts.map +1 -0
  52. package/dist/components/inputs/variables/extension.js.map +1 -1
  53. package/dist/components/inputs/variables/pickers/NumericVariablePicker.d.ts +2 -1
  54. package/dist/components/inputs/variables/pickers/NumericVariablePicker.d.ts.map +1 -0
  55. package/dist/components/inputs/variables/pickers/NumericVariablePicker.js +4 -4
  56. package/dist/components/inputs/variables/pickers/NumericVariablePicker.js.map +1 -1
  57. package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts +2 -1
  58. package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts.map +1 -0
  59. package/dist/components/layout/MessageField.d.ts +2 -1
  60. package/dist/components/layout/MessageField.d.ts.map +1 -0
  61. package/dist/components/layout/MessageField.js +6 -6
  62. package/dist/components/layout/MessageField.js.map +1 -1
  63. package/dist/components/layout/MessagesTabs.d.ts +2 -1
  64. package/dist/components/layout/MessagesTabs.d.ts.map +1 -0
  65. package/dist/components/layout/MessagesTabs.js +3 -3
  66. package/dist/components/layout/MessagesTabs.js.map +1 -1
  67. package/dist/components/layout/MessagesTree.d.ts +2 -1
  68. package/dist/components/layout/MessagesTree.d.ts.map +1 -0
  69. package/dist/components/layout/MessagesTree.js +2 -2
  70. package/dist/components/layout/MessagesTree.js.map +1 -1
  71. package/dist/context/messages-form.d.ts +2 -1
  72. package/dist/context/messages-form.d.ts.map +1 -0
  73. package/dist/context/messages-form.js.map +1 -1
  74. package/dist/endpoints/get-messages.d.ts +1 -0
  75. package/dist/endpoints/get-messages.d.ts.map +1 -0
  76. package/dist/endpoints/get-messages.js.map +1 -1
  77. package/dist/endpoints/set-messages.d.ts +1 -0
  78. package/dist/endpoints/set-messages.d.ts.map +1 -0
  79. package/dist/endpoints/set-messages.js.map +1 -1
  80. package/dist/exports/link.d.ts +2 -1
  81. package/dist/exports/link.d.ts.map +1 -0
  82. package/dist/exports/link.js.map +1 -1
  83. package/dist/exports/rsc.d.ts +1 -0
  84. package/dist/exports/rsc.d.ts.map +1 -0
  85. package/dist/exports/view.d.ts +2 -1
  86. package/dist/exports/view.d.ts.map +1 -0
  87. package/dist/exports/view.js +26 -30
  88. package/dist/exports/view.js.map +1 -1
  89. package/dist/index.d.ts +2 -1
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +19 -34
  92. package/dist/index.js.map +1 -1
  93. package/dist/requests/fetchMessages.d.ts +1 -0
  94. package/dist/requests/fetchMessages.d.ts.map +1 -0
  95. package/dist/requests/fetchMessages.js.map +1 -1
  96. package/dist/styles.css +1 -1
  97. package/dist/types.d.ts +5 -4
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/utils/cn.d.ts +1 -0
  100. package/dist/utils/cn.d.ts.map +1 -0
  101. package/dist/utils/cn.js.map +1 -1
  102. package/dist/utils/config.d.ts +2 -1
  103. package/dist/utils/config.d.ts.map +1 -0
  104. package/dist/utils/config.js.map +1 -1
  105. package/dist/utils/error-handling.d.ts +1 -0
  106. package/dist/utils/error-handling.d.ts.map +1 -0
  107. package/dist/utils/error-handling.js.map +1 -1
  108. package/dist/utils/format.d.ts +2 -1
  109. package/dist/utils/format.d.ts.map +1 -0
  110. package/dist/utils/format.js.map +1 -1
  111. package/dist/utils/guards.d.ts +2 -0
  112. package/dist/utils/guards.d.ts.map +1 -0
  113. package/dist/utils/guards.js +14 -11
  114. package/dist/utils/guards.js.map +1 -1
  115. package/dist/utils/icu-tranform.d.ts +6 -5
  116. package/dist/utils/icu-tranform.d.ts.map +1 -0
  117. package/dist/utils/icu-tranform.js +32 -27
  118. package/dist/utils/icu-tranform.js.map +1 -1
  119. package/dist/utils/sanitize.d.ts +2 -1
  120. package/dist/utils/sanitize.d.ts.map +1 -0
  121. package/dist/utils/sanitize.js.map +1 -1
  122. package/dist/utils/schema.d.ts +3 -2
  123. package/dist/utils/schema.d.ts.map +1 -0
  124. package/dist/utils/schema.js.map +1 -1
  125. package/dist/utils/validate.d.ts +2 -1
  126. package/dist/utils/validate.d.ts.map +1 -0
  127. package/dist/utils/validate.js.map +1 -1
  128. package/package.json +57 -72
@@ -1 +1 @@
1
- {"version":3,"file":"MessagesTabs.js","sources":["../../../src/components/layout/MessagesTabs.tsx"],"sourcesContent":["import type { MessagesSchema } from \"@/types\";\nimport { Button } from \"@payloadcms/ui\";\nimport { get } from \"lodash-es\";\nimport { useCallback } from \"react\";\nimport { useFormState } from \"react-hook-form\";\n\nimport { useMessagesForm } from \"@/context/messages-form\";\nimport { cn } from \"@/utils/cn\";\nimport { toWords } from \"@/utils/format\";\n\ninterface MessagesTabsProps {\n schema: MessagesSchema;\n activeTab: string | undefined;\n setActiveTab: (tab: string) => void;\n}\n\n// TODO add hash for current tab to url\nexport function MessagesTabs({\n schema,\n activeTab,\n setActiveTab,\n}: MessagesTabsProps): React.ReactNode {\n const { locales, control } = useMessagesForm();\n const { errors } = useFormState({ control });\n\n const hasErrors = useCallback(\n (key: string) => {\n return locales.some((locale) => get(errors, [locale, key]) !== undefined);\n },\n [errors, locales],\n );\n\n return (\n <div\n role=\"tablist\"\n className=\"overflow-x-auto border-b-2 border-border px-4 text-nowrap\"\n >\n {Object.keys(schema).map((key) => (\n <Button\n key={key}\n size=\"large\"\n className={cn(\n \"my-0 rounded-b-none text-lg\",\n hasErrors(key)\n ? activeTab === key\n ? \"bg-error\"\n : \"text-error\"\n : undefined,\n )}\n buttonStyle={activeTab === key ? \"pill\" : \"tab\"}\n onClick={() => setActiveTab(key)}\n type=\"button\"\n >\n {toWords(key)}\n </Button>\n ))}\n </div>\n );\n}\n"],"names":["MessagesTabs","schema","activeTab","setActiveTab","locales","control","useMessagesForm","errors","useFormState","hasErrors","useCallback","key","locale","get","jsx","Button","cn"],"mappings":";;;;;;;;AAiBO,SAASA,EAAa;AAAA,EAC3B,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AACF,GAAuC;AACrC,QAAM,EAAE,SAAAC,GAAS,SAAAC,EAAA,IAAYC,EAAA,GACvB,EAAE,QAAAC,EAAA,IAAWC,EAAa,EAAE,SAAAH,GAAS,GAErCI,IAAYC;AAAA,IAChB,CAACC,MACQP,EAAQ,KAAK,CAACQ,MAAWC,EAAIN,GAAQ,CAACK,GAAQD,CAAG,CAAC,MAAM,MAAS;AAAA,IAE1E,CAACJ,GAAQH,CAAO;AAAA,EAAA;AAGlB,SACE,gBAAAU;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAET,iBAAO,KAAKb,CAAM,EAAE,IAAI,CAACU,MACxB,gBAAAG;AAAA,QAACC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,WAAWC;AAAA,YACT;AAAA,YACAP,EAAUE,CAAG,IACTT,MAAcS,IACZ,aACA,eACF;AAAA,UAAA;AAAA,UAEN,aAAaT,MAAcS,IAAM,SAAS;AAAA,UAC1C,SAAS,MAAMR,EAAaQ,CAAG;AAAA,UAC/B,MAAK;AAAA,UAEJ,YAAQA,CAAG;AAAA,QAAA;AAAA,QAdPA;AAAA,MAAA,CAgBR;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"MessagesTabs.js","sources":["../../../src/components/layout/MessagesTabs.tsx"],"sourcesContent":["import { Button } from '@payloadcms/ui';\nimport { get } from 'lodash-es';\nimport { useCallback } from 'react';\nimport { useFormState } from 'react-hook-form';\nimport { useMessagesForm } from '@/context/messages-form';\nimport type { MessagesSchema } from '@/types';\nimport { cn } from '@/utils/cn';\nimport { toWords } from '@/utils/format';\n\ninterface MessagesTabsProps {\n schema: MessagesSchema;\n activeTab: string | undefined;\n setActiveTab: (tab: string) => void;\n}\n\n// TODO add hash for current tab to url\nexport function MessagesTabs({\n schema,\n activeTab,\n setActiveTab,\n}: MessagesTabsProps): React.ReactNode {\n const { locales, control } = useMessagesForm();\n const { errors } = useFormState({ control });\n\n const hasErrors = useCallback(\n (key: string) => {\n return locales.some((locale) => get(errors, [locale, key]) !== undefined);\n },\n [errors, locales],\n );\n\n return (\n <div\n className=\"overflow-x-auto text-nowrap border-border border-b-2 px-4\"\n role=\"tablist\"\n >\n {Object.keys(schema).map((key) => (\n <Button\n buttonStyle={activeTab === key ? 'pill' : 'tab'}\n className={cn(\n 'my-0 rounded-b-none text-lg',\n hasErrors(key)\n ? activeTab === key\n ? 'bg-error'\n : 'text-error'\n : undefined,\n )}\n key={key}\n onClick={() => setActiveTab(key)}\n size=\"large\"\n type=\"button\"\n >\n {toWords(key)}\n </Button>\n ))}\n </div>\n );\n}\n"],"names":["MessagesTabs","schema","activeTab","setActiveTab","locales","control","useMessagesForm","errors","useFormState","hasErrors","useCallback","key","locale","get","jsx","Button","cn"],"mappings":";;;;;;;;AAgBO,SAASA,EAAa;AAAA,EAC3B,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AACF,GAAuC;AACrC,QAAM,EAAE,SAAAC,GAAS,SAAAC,EAAA,IAAYC,EAAA,GACvB,EAAE,QAAAC,EAAA,IAAWC,EAAa,EAAE,SAAAH,GAAS,GAErCI,IAAYC;AAAA,IAChB,CAACC,MACQP,EAAQ,KAAK,CAACQ,MAAWC,EAAIN,GAAQ,CAACK,GAAQD,CAAG,CAAC,MAAM,MAAS;AAAA,IAE1E,CAACJ,GAAQH,CAAO;AAAA,EAAA;AAGlB,SACE,gBAAAU;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MAEJ,iBAAO,KAAKb,CAAM,EAAE,IAAI,CAACU,MACxB,gBAAAG;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,aAAab,MAAcS,IAAM,SAAS;AAAA,UAC1C,WAAWK;AAAA,YACT;AAAA,YACAP,EAAUE,CAAG,IACTT,MAAcS,IACZ,aACA,eACF;AAAA,UAAA;AAAA,UAGN,SAAS,MAAMR,EAAaQ,CAAG;AAAA,UAC/B,MAAK;AAAA,UACL,MAAK;AAAA,UAEJ,YAAQA,CAAG;AAAA,QAAA;AAAA,QALPA;AAAA,MAAA,CAOR;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -1,4 +1,4 @@
1
- import { Messages } from '../../types.ts';
1
+ import { Messages } from '../../types';
2
2
  interface MessagesTreeProps {
3
3
  path: string;
4
4
  nestingLevel: number;
@@ -7,3 +7,4 @@ interface MessagesTreeProps {
7
7
  }
8
8
  export declare function MessagesTree({ path, schema, nestingLevel, className, }: MessagesTreeProps): React.ReactNode;
9
9
  export {};
10
+ //# sourceMappingURL=MessagesTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessagesTree.d.ts","sourceRoot":"","sources":["../../../src/components/layout/MessagesTree.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,MAAM,EACN,YAAgB,EAChB,SAAS,GACV,EAAE,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAyDrC"}
@@ -43,9 +43,9 @@ function j({
43
43
  b,
44
44
  {
45
45
  className: "min-w-0",
46
- schema: s,
47
46
  messageKey: r,
48
- path: o
47
+ path: o,
48
+ schema: s
49
49
  },
50
50
  r
51
51
  ) : /* @__PURE__ */ e(
@@ -1 +1 @@
1
- {"version":3,"file":"MessagesTree.js","sources":["../../../src/components/layout/MessagesTree.tsx"],"sourcesContent":["import type { Messages } from \"@/types\";\nimport { Collapsible } from \"@payloadcms/ui\";\nimport { get } from \"lodash-es\";\nimport { useCallback } from \"react\";\nimport { useFormState } from \"react-hook-form\";\n\nimport { useMessagesForm } from \"@/context/messages-form\";\nimport { cn } from \"@/utils/cn\";\nimport { toWords } from \"@/utils/format\";\n\nimport { MessageField } from \"./MessageField\";\n\ninterface MessagesTreeProps {\n path: string;\n nestingLevel: number;\n schema: Messages;\n className?: string;\n}\n\n// TODO fix sticky position on single locale form\n\nexport function MessagesTree({\n path,\n schema,\n nestingLevel = 0,\n className,\n}: MessagesTreeProps): React.ReactNode {\n const { control, locales } = useMessagesForm();\n const { errors } = useFormState({ control });\n\n const hasErrors = useCallback(\n (key: string) => {\n return locales.some(\n (locale) => get(errors, [locale, path, key].join(\".\")) !== undefined,\n );\n },\n [errors, locales, path],\n );\n\n return (\n <div className={cn(\"grid gap-6\", className)}>\n {Object.entries(schema).map(([key, value]) => (\n <div\n key={key}\n className=\"grid min-w-0\"\n style={\n {\n [\"--nesting-level\"]: nestingLevel,\n } as React.CSSProperties\n }\n >\n <Collapsible\n className=\"messages-tree-collapsible min-w-0\"\n header={\n <span\n className={cn(\"text-xl\", {\n \"text-error\": hasErrors(key),\n })}\n >\n {toWords(key)}\n </span>\n }\n >\n {typeof value === \"string\" ? (\n <MessageField\n className=\"min-w-0\"\n schema={value}\n key={key}\n messageKey={key}\n path={path}\n />\n ) : (\n <MessagesTree\n nestingLevel={nestingLevel + 1}\n path={[path, key].join(\".\")}\n schema={value}\n />\n )}\n </Collapsible>\n </div>\n ))}\n </div>\n );\n}\n"],"names":["MessagesTree","path","schema","nestingLevel","className","control","locales","useMessagesForm","errors","useFormState","hasErrors","useCallback","key","locale","get","cn","value","jsx","Collapsible","MessageField"],"mappings":";;;;;;;;;AAqBO,SAASA,EAAa;AAAA,EAC3B,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,WAAAC;AACF,GAAuC;AACrC,QAAM,EAAE,SAAAC,GAAS,SAAAC,EAAA,IAAYC,EAAA,GACvB,EAAE,QAAAC,EAAA,IAAWC,EAAa,EAAE,SAAAJ,GAAS,GAErCK,IAAYC;AAAA,IAChB,CAACC,MACQN,EAAQ;AAAA,MACb,CAACO,MAAWC,EAAIN,GAAQ,CAACK,GAAQZ,GAAMW,CAAG,EAAE,KAAK,GAAG,CAAC,MAAM;AAAA,IAAA;AAAA,IAG/D,CAACJ,GAAQF,GAASL,CAAI;AAAA,EAAA;AAGxB,2BACG,OAAA,EAAI,WAAWc,EAAG,cAAcX,CAAS,GACvC,UAAA,OAAO,QAAQF,CAAM,EAAE,IAAI,CAAC,CAACU,GAAKI,CAAK,MACtC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAU;AAAA,MACV,OACE;AAAA,QACG,mBAAoBd;AAAA,MAAA;AAAA,MAIzB,UAAA,gBAAAc;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,QACE,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWF,EAAG,WAAW;AAAA,gBACvB,cAAcL,EAAUE,CAAG;AAAA,cAAA,CAC5B;AAAA,cAEA,YAAQA,CAAG;AAAA,YAAA;AAAA,UAAA;AAAA,UAIf,UAAA,OAAOI,KAAU,WAChB,gBAAAC;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,QAAQH;AAAA,cAER,YAAYJ;AAAA,cACZ,MAAAX;AAAA,YAAA;AAAA,YAFKW;AAAA,UAAA,IAKP,gBAAAK;AAAA,YAACjB;AAAA,YAAA;AAAA,cACC,cAAcG,IAAe;AAAA,cAC7B,MAAM,CAACF,GAAMW,CAAG,EAAE,KAAK,GAAG;AAAA,cAC1B,QAAQI;AAAA,YAAA;AAAA,UAAA;AAAA,QACV;AAAA,MAAA;AAAA,IAEJ;AAAA,IAnCKJ;AAAA,EAAA,CAqCR,GACH;AAEJ;"}
1
+ {"version":3,"file":"MessagesTree.js","sources":["../../../src/components/layout/MessagesTree.tsx"],"sourcesContent":["import { Collapsible } from '@payloadcms/ui';\nimport { get } from 'lodash-es';\nimport { useCallback } from 'react';\nimport { useFormState } from 'react-hook-form';\nimport { useMessagesForm } from '@/context/messages-form';\nimport type { Messages } from '@/types';\nimport { cn } from '@/utils/cn';\nimport { toWords } from '@/utils/format';\n\nimport { MessageField } from './MessageField';\n\ninterface MessagesTreeProps {\n path: string;\n nestingLevel: number;\n schema: Messages;\n className?: string;\n}\n\n// TODO fix sticky position on single locale form\n\nexport function MessagesTree({\n path,\n schema,\n nestingLevel = 0,\n className,\n}: MessagesTreeProps): React.ReactNode {\n const { control, locales } = useMessagesForm();\n const { errors } = useFormState({ control });\n\n const hasErrors = useCallback(\n (key: string) => {\n return locales.some(\n (locale) => get(errors, [locale, path, key].join('.')) !== undefined,\n );\n },\n [errors, locales, path],\n );\n\n return (\n <div className={cn('grid gap-6', className)}>\n {Object.entries(schema).map(([key, value]) => (\n <div\n className=\"grid min-w-0\"\n key={key}\n style={\n {\n ['--nesting-level']: nestingLevel,\n } as React.CSSProperties\n }\n >\n <Collapsible\n className=\"messages-tree-collapsible min-w-0\"\n header={\n <span\n className={cn('text-xl', {\n 'text-error': hasErrors(key),\n })}\n >\n {toWords(key)}\n </span>\n }\n >\n {typeof value === 'string' ? (\n <MessageField\n className=\"min-w-0\"\n key={key}\n messageKey={key}\n path={path}\n schema={value}\n />\n ) : (\n <MessagesTree\n nestingLevel={nestingLevel + 1}\n path={[path, key].join('.')}\n schema={value}\n />\n )}\n </Collapsible>\n </div>\n ))}\n </div>\n );\n}\n"],"names":["MessagesTree","path","schema","nestingLevel","className","control","locales","useMessagesForm","errors","useFormState","hasErrors","useCallback","key","locale","get","cn","value","jsx","Collapsible","MessageField"],"mappings":";;;;;;;;;AAoBO,SAASA,EAAa;AAAA,EAC3B,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,WAAAC;AACF,GAAuC;AACrC,QAAM,EAAE,SAAAC,GAAS,SAAAC,EAAA,IAAYC,EAAA,GACvB,EAAE,QAAAC,EAAA,IAAWC,EAAa,EAAE,SAAAJ,GAAS,GAErCK,IAAYC;AAAA,IAChB,CAACC,MACQN,EAAQ;AAAA,MACb,CAACO,MAAWC,EAAIN,GAAQ,CAACK,GAAQZ,GAAMW,CAAG,EAAE,KAAK,GAAG,CAAC,MAAM;AAAA,IAAA;AAAA,IAG/D,CAACJ,GAAQF,GAASL,CAAI;AAAA,EAAA;AAGxB,2BACG,OAAA,EAAI,WAAWc,EAAG,cAAcX,CAAS,GACvC,UAAA,OAAO,QAAQF,CAAM,EAAE,IAAI,CAAC,CAACU,GAAKI,CAAK,MACtC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MAEV,OACE;AAAA,QACG,mBAAoBd;AAAA,MAAA;AAAA,MAIzB,UAAA,gBAAAc;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,QACE,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWF,EAAG,WAAW;AAAA,gBACvB,cAAcL,EAAUE,CAAG;AAAA,cAAA,CAC5B;AAAA,cAEA,YAAQA,CAAG;AAAA,YAAA;AAAA,UAAA;AAAA,UAIf,UAAA,OAAOI,KAAU,WAChB,gBAAAC;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAEV,YAAYP;AAAA,cACZ,MAAAX;AAAA,cACA,QAAQe;AAAA,YAAA;AAAA,YAHHJ;AAAA,UAAA,IAMP,gBAAAK;AAAA,YAACjB;AAAA,YAAA;AAAA,cACC,cAAcG,IAAe;AAAA,cAC7B,MAAM,CAACF,GAAMW,CAAG,EAAE,KAAK,GAAG;AAAA,cAC1B,QAAQI;AAAA,YAAA;AAAA,UAAA;AAAA,QACV;AAAA,MAAA;AAAA,IAEJ;AAAA,IAlCKJ;AAAA,EAAA,CAoCR,GACH;AAEJ;"}
@@ -1,5 +1,5 @@
1
- import { Locales, Messages, Translations } from '../types.ts';
2
1
  import { UseFormReturn } from 'react-hook-form';
2
+ import { Locales, Messages, Translations } from '../types';
3
3
  export type FormValues = Translations<Messages>;
4
4
  interface MessagesFormProviderProps {
5
5
  locales: Locales;
@@ -26,3 +26,4 @@ export declare const useMessagesForm: () => {
26
26
  locales: Locales;
27
27
  };
28
28
  export {};
29
+ //# sourceMappingURL=messages-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages-form.d.ts","sourceRoot":"","sources":["../../src/context/messages-form.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAQhD,UAAU,yBAAyB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,IAAI,EACJ,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,2CAMpD;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;aAtBjB,OAAO;CA6BjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"messages-form.js","sources":["../../src/context/messages-form.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Locales, Messages, Translations } from \"@/types\";\nimport type { UseFormReturn } from \"react-hook-form\";\nimport { createContext, use } from \"react\";\nimport { FormProvider, useFormContext } from \"react-hook-form\";\n\nexport type FormValues = Translations<Messages>;\n\nconst MessagesFormContext = createContext<{\n locales: Locales;\n}>({\n locales: [\"en\"],\n});\n\ninterface MessagesFormProviderProps {\n locales: Locales;\n form: UseFormReturn<FormValues>;\n}\n\nexport function MessagesFormProvider({\n locales,\n form,\n children,\n}: React.PropsWithChildren<MessagesFormProviderProps>) {\n return (\n <MessagesFormContext value={{ locales }}>\n <FormProvider {...form}>{children}</FormProvider>\n </MessagesFormContext>\n );\n}\n\nexport const useMessagesForm = () => {\n const context = use(MessagesFormContext);\n const form = useFormContext<FormValues>();\n return {\n ...context,\n ...form,\n };\n};\n"],"names":["MessagesFormContext","createContext","MessagesFormProvider","locales","form","children","jsx","FormProvider","useMessagesForm","context","use","useFormContext"],"mappings":";;;;AASA,MAAMA,IAAsBC,EAEzB;AAAA,EACD,SAAS,CAAC,IAAI;AAChB,CAAC;AAOM,SAASC,EAAqB;AAAA,EACnC,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AACF,GAAuD;AACrD,SACE,gBAAAC,EAACN,GAAA,EAAoB,OAAO,EAAE,SAAAG,EAAA,GAC5B,UAAA,gBAAAG,EAACC,GAAA,EAAc,GAAGH,GAAO,UAAAC,EAAA,CAAS,EAAA,CACpC;AAEJ;AAEO,MAAMG,IAAkB,MAAM;AACnC,QAAMC,IAAUC,EAAIV,CAAmB,GACjCI,IAAOO,EAAA;AACb,SAAO;AAAA,IACL,GAAGF;AAAA,IACH,GAAGL;AAAA,EAAA;AAEP;"}
1
+ {"version":3,"file":"messages-form.js","sources":["../../src/context/messages-form.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, use } from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\nimport { FormProvider, useFormContext } from 'react-hook-form';\nimport type { Locales, Messages, Translations } from '@/types';\n\nexport type FormValues = Translations<Messages>;\n\nconst MessagesFormContext = createContext<{\n locales: Locales;\n}>({\n locales: ['en'],\n});\n\ninterface MessagesFormProviderProps {\n locales: Locales;\n form: UseFormReturn<FormValues>;\n}\n\nexport function MessagesFormProvider({\n locales,\n form,\n children,\n}: React.PropsWithChildren<MessagesFormProviderProps>) {\n return (\n <MessagesFormContext value={{ locales }}>\n <FormProvider {...form}>{children}</FormProvider>\n </MessagesFormContext>\n );\n}\n\nexport const useMessagesForm = () => {\n const context = use(MessagesFormContext);\n const form = useFormContext<FormValues>();\n return {\n ...context,\n ...form,\n };\n};\n"],"names":["MessagesFormContext","createContext","MessagesFormProvider","locales","form","children","jsx","FormProvider","useMessagesForm","context","use","useFormContext"],"mappings":";;;;AASA,MAAMA,IAAsBC,EAEzB;AAAA,EACD,SAAS,CAAC,IAAI;AAChB,CAAC;AAOM,SAASC,EAAqB;AAAA,EACnC,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AACF,GAAuD;AACrD,SACE,gBAAAC,EAACN,GAAA,EAAoB,OAAO,EAAE,SAAAG,EAAA,GAC5B,UAAA,gBAAAG,EAACC,GAAA,EAAc,GAAGH,GAAO,UAAAC,EAAA,CAAS,EAAA,CACpC;AAEJ;AAEO,MAAMG,IAAkB,MAAM;AACnC,QAAMC,IAAUC,EAAIV,CAAmB,GACjCI,IAAOO,EAAA;AACb,SAAO;AAAA,IACL,GAAGF;AAAA,IACH,GAAGL;AAAA,EAAA;AAEP;"}
@@ -1,2 +1,3 @@
1
1
  import { Endpoint } from 'payload';
2
2
  export declare const getMessagesEndpoint: Endpoint;
3
+ //# sourceMappingURL=get-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-messages.d.ts","sourceRoot":"","sources":["../../src/endpoints/get-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,SAAS,CAAC;AAIxD,eAAO,MAAM,mBAAmB,EAAE,QAQjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-messages.js","sources":["../../src/endpoints/get-messages.ts"],"sourcesContent":["import type { Endpoint, PayloadRequest } from \"payload\";\n\nimport { fetchMessages } from \"../requests/fetchMessages\";\n\nexport const getMessagesEndpoint: Endpoint = {\n handler: async (req: PayloadRequest) => {\n const { locale } = req.routeParams as { locale: string };\n const messages = await fetchMessages(req.payload, locale);\n return Response.json(messages);\n },\n method: \"get\",\n path: \"/intl-plugin/:locale\",\n};\n"],"names":["getMessagesEndpoint","req","locale","messages","fetchMessages"],"mappings":";AAIO,MAAMA,IAAgC;AAAA,EAC3C,SAAS,OAAOC,MAAwB;AACtC,UAAM,EAAE,QAAAC,MAAWD,EAAI,aACjBE,IAAW,MAAMC,EAAcH,EAAI,SAASC,CAAM;AACxD,WAAO,SAAS,KAAKC,CAAQ;AAAA,EAC/B;AAAA,EACA,QAAQ;AAAA,EACR,MAAM;AACR;"}
1
+ {"version":3,"file":"get-messages.js","sources":["../../src/endpoints/get-messages.ts"],"sourcesContent":["import type { Endpoint, PayloadRequest } from 'payload';\n\nimport { fetchMessages } from '../requests/fetchMessages';\n\nexport const getMessagesEndpoint: Endpoint = {\n handler: async (req: PayloadRequest) => {\n const { locale } = req.routeParams as { locale: string };\n const messages = await fetchMessages(req.payload, locale);\n return Response.json(messages);\n },\n method: 'get',\n path: '/intl-plugin/:locale',\n};\n"],"names":["getMessagesEndpoint","req","locale","messages","fetchMessages"],"mappings":";AAIO,MAAMA,IAAgC;AAAA,EAC3C,SAAS,OAAOC,MAAwB;AACtC,UAAM,EAAE,QAAAC,MAAWD,EAAI,aACjBE,IAAW,MAAMC,EAAcH,EAAI,SAASC,CAAM;AACxD,WAAO,SAAS,KAAKC,CAAQ;AAAA,EAC/B;AAAA,EACA,QAAQ;AAAA,EACR,MAAM;AACR;"}
@@ -1,2 +1,3 @@
1
1
  import { Endpoint } from 'payload';
2
2
  export declare const setMessagesEndpoint: Endpoint;
3
+ //# sourceMappingURL=set-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-messages.d.ts","sourceRoot":"","sources":["../../src/endpoints/set-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAwB,MAAM,SAAS,CAAC;AAK9D,eAAO,MAAM,mBAAmB,EAAE,QAuDjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"set-messages.js","sources":["../../src/endpoints/set-messages.ts"],"sourcesContent":["import type { Messages, Translations } from \"@/types\";\nimport type { Endpoint, File, PayloadRequest } from \"payload\";\n\nimport { getPluginContext, getSupportedLocales } from \"@/utils/config\";\n\nexport const setMessagesEndpoint: Endpoint = {\n handler: async (req: PayloadRequest) => {\n const { user } = await req.payload.auth({ headers: req.headers });\n if (!user) {\n throw new Error(\"Unauthorized\");\n }\n\n const data = (await req.json?.()) as Translations<Messages> | undefined;\n if (!data) {\n throw new Error(\"No data provided\");\n }\n\n const supportedLocales = getSupportedLocales(\n req.payload.config.localization,\n );\n const { collectionSlug } = getPluginContext(req.payload.config);\n\n for (const locale of supportedLocales) {\n const messages = data[locale];\n if (!messages) continue;\n\n const rawFile = new File(\n [JSON.stringify(messages)],\n `${locale}-${Date.now()}.json`,\n {\n type: \"application/json\",\n },\n );\n\n const file: File = {\n name: rawFile.name,\n data: Buffer.from(await rawFile.arrayBuffer()),\n mimetype: rawFile.type,\n size: rawFile.size,\n };\n\n const { docs } = await req.payload.update({\n collection: collectionSlug,\n data: {},\n file,\n where: { locale: { equals: locale } },\n });\n if (docs.length === 0) {\n await req.payload.create({\n collection: collectionSlug,\n data: { locale },\n file,\n });\n }\n }\n\n return Response.json({ success: true });\n },\n method: \"put\",\n path: \"/intl-plugin\",\n};\n"],"names":["setMessagesEndpoint","req","user","data","supportedLocales","getSupportedLocales","collectionSlug","getPluginContext","locale","messages","rawFile","file","docs"],"mappings":";AAKO,MAAMA,IAAgC;AAAA,EAC3C,SAAS,OAAOC,MAAwB;AACtC,UAAM,EAAE,MAAAC,MAAS,MAAMD,EAAI,QAAQ,KAAK,EAAE,SAASA,EAAI,SAAS;AAChE,QAAI,CAACC;AACH,YAAM,IAAI,MAAM,cAAc;AAGhC,UAAMC,IAAQ,MAAMF,EAAI,OAAA;AACxB,QAAI,CAACE;AACH,YAAM,IAAI,MAAM,kBAAkB;AAGpC,UAAMC,IAAmBC;AAAA,MACvBJ,EAAI,QAAQ,OAAO;AAAA,IAAA,GAEf,EAAE,gBAAAK,EAAA,IAAmBC,EAAiBN,EAAI,QAAQ,MAAM;AAE9D,eAAWO,KAAUJ,GAAkB;AACrC,YAAMK,IAAWN,EAAKK,CAAM;AAC5B,UAAI,CAACC,EAAU;AAEf,YAAMC,IAAU,IAAI;AAAA,QAClB,CAAC,KAAK,UAAUD,CAAQ,CAAC;AAAA,QACzB,GAAGD,CAAM,IAAI,KAAK,KAAK;AAAA,QACvB;AAAA,UACE,MAAM;AAAA,QAAA;AAAA,MACR,GAGIG,IAAa;AAAA,QACjB,MAAMD,EAAQ;AAAA,QACd,MAAM,OAAO,KAAK,MAAMA,EAAQ,aAAa;AAAA,QAC7C,UAAUA,EAAQ;AAAA,QAClB,MAAMA,EAAQ;AAAA,MAAA,GAGV,EAAE,MAAAE,EAAA,IAAS,MAAMX,EAAI,QAAQ,OAAO;AAAA,QACxC,YAAYK;AAAA,QACZ,MAAM,CAAA;AAAA,QACN,MAAAK;AAAA,QACA,OAAO,EAAE,QAAQ,EAAE,QAAQH,IAAO;AAAA,MAAE,CACrC;AACD,MAAII,EAAK,WAAW,KAClB,MAAMX,EAAI,QAAQ,OAAO;AAAA,QACvB,YAAYK;AAAA,QACZ,MAAM,EAAE,QAAAE,EAAA;AAAA,QACR,MAAAG;AAAA,MAAA,CACD;AAAA,IAEL;AAEA,WAAO,SAAS,KAAK,EAAE,SAAS,IAAM;AAAA,EACxC;AAAA,EACA,QAAQ;AAAA,EACR,MAAM;AACR;"}
1
+ {"version":3,"file":"set-messages.js","sources":["../../src/endpoints/set-messages.ts"],"sourcesContent":["import type { Endpoint, File, PayloadRequest } from 'payload';\nimport type { Messages, Translations } from '@/types';\n\nimport { getPluginContext, getSupportedLocales } from '@/utils/config';\n\nexport const setMessagesEndpoint: Endpoint = {\n handler: async (req: PayloadRequest) => {\n const { user } = await req.payload.auth({ headers: req.headers });\n if (!user) {\n throw new Error('Unauthorized');\n }\n\n const data = (await req.json?.()) as Translations<Messages> | undefined;\n if (!data) {\n throw new Error('No data provided');\n }\n\n const supportedLocales = getSupportedLocales(\n req.payload.config.localization,\n );\n const { collectionSlug } = getPluginContext(req.payload.config);\n\n for (const locale of supportedLocales) {\n const messages = data[locale];\n if (!messages) continue;\n\n const rawFile = new File(\n [JSON.stringify(messages)],\n `${locale}-${Date.now()}.json`,\n {\n type: 'application/json',\n },\n );\n\n const file: File = {\n name: rawFile.name,\n data: Buffer.from(await rawFile.arrayBuffer()),\n mimetype: rawFile.type,\n size: rawFile.size,\n };\n\n const { docs } = await req.payload.update({\n collection: collectionSlug,\n data: {},\n file,\n where: { locale: { equals: locale } },\n });\n if (docs.length === 0) {\n await req.payload.create({\n collection: collectionSlug,\n data: { locale },\n file,\n });\n }\n }\n\n return Response.json({ success: true });\n },\n method: 'put',\n path: '/intl-plugin',\n};\n"],"names":["setMessagesEndpoint","req","user","data","supportedLocales","getSupportedLocales","collectionSlug","getPluginContext","locale","messages","rawFile","file","docs"],"mappings":";AAKO,MAAMA,IAAgC;AAAA,EAC3C,SAAS,OAAOC,MAAwB;AACtC,UAAM,EAAE,MAAAC,MAAS,MAAMD,EAAI,QAAQ,KAAK,EAAE,SAASA,EAAI,SAAS;AAChE,QAAI,CAACC;AACH,YAAM,IAAI,MAAM,cAAc;AAGhC,UAAMC,IAAQ,MAAMF,EAAI,OAAA;AACxB,QAAI,CAACE;AACH,YAAM,IAAI,MAAM,kBAAkB;AAGpC,UAAMC,IAAmBC;AAAA,MACvBJ,EAAI,QAAQ,OAAO;AAAA,IAAA,GAEf,EAAE,gBAAAK,EAAA,IAAmBC,EAAiBN,EAAI,QAAQ,MAAM;AAE9D,eAAWO,KAAUJ,GAAkB;AACrC,YAAMK,IAAWN,EAAKK,CAAM;AAC5B,UAAI,CAACC,EAAU;AAEf,YAAMC,IAAU,IAAI;AAAA,QAClB,CAAC,KAAK,UAAUD,CAAQ,CAAC;AAAA,QACzB,GAAGD,CAAM,IAAI,KAAK,KAAK;AAAA,QACvB;AAAA,UACE,MAAM;AAAA,QAAA;AAAA,MACR,GAGIG,IAAa;AAAA,QACjB,MAAMD,EAAQ;AAAA,QACd,MAAM,OAAO,KAAK,MAAMA,EAAQ,aAAa;AAAA,QAC7C,UAAUA,EAAQ;AAAA,QAClB,MAAMA,EAAQ;AAAA,MAAA,GAGV,EAAE,MAAAE,EAAA,IAAS,MAAMX,EAAI,QAAQ,OAAO;AAAA,QACxC,YAAYK;AAAA,QACZ,MAAM,CAAA;AAAA,QACN,MAAAK;AAAA,QACA,OAAO,EAAE,QAAQ,EAAE,QAAQH,IAAO;AAAA,MAAE,CACrC;AACD,MAAII,EAAK,WAAW,KAClB,MAAMX,EAAI,QAAQ,OAAO;AAAA,QACvB,YAAYK;AAAA,QACZ,MAAM,EAAE,QAAAE,EAAA;AAAA,QACR,MAAAG;AAAA,MAAA,CACD;AAAA,IAEL;AAEA,WAAO,SAAS,KAAK,EAAE,SAAS,IAAM;AAAA,EACxC;AAAA,EACA,QAAQ;AAAA,EACR,MAAM;AACR;"}
@@ -1,7 +1,8 @@
1
1
  import { PayloadRequest } from 'payload';
2
- import { MessagesGuard } from '../types.ts';
2
+ import { MessagesGuard } from '../types';
3
3
  export interface MessagesLinkProps {
4
4
  access?: MessagesGuard;
5
5
  req: PayloadRequest;
6
6
  }
7
7
  export declare function MessagesLink({ access, req, }: MessagesLinkProps): Promise<import("react/jsx-runtime").JSX.Element | null>;
8
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/exports/link.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,cAAc,CAAC;CACrB;AAED,wBAAsB,YAAY,CAAC,EACjC,MAAmB,EACnB,GAAG,GACJ,EAAE,iBAAiB,2DAanB"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sources":["../../src/exports/link.tsx"],"sourcesContent":["import type { PayloadRequest } from \"payload\";\nimport { Button } from \"@payloadcms/ui\";\nimport { IconWorld } from \"@tabler/icons-react\";\n\nimport { type MessagesGuard } from \"@/types\";\n\nexport interface MessagesLinkProps {\n access?: MessagesGuard;\n req: PayloadRequest;\n}\n\nexport async function MessagesLink({\n access = () => true,\n req,\n}: MessagesLinkProps) {\n const hasAccess = await access(req);\n if (!hasAccess) return null;\n\n return (\n <Button\n buttonStyle=\"tab\"\n el=\"link\"\n to={`${req.payload.getAdminURL()}/intl`}\n >\n <IconWorld />\n </Button>\n );\n}\n"],"names":["MessagesLink","access","req","jsx","Button","IconWorld"],"mappings":";;;AAWA,eAAsBA,EAAa;AAAA,EACjC,QAAAC,IAAS,MAAM;AAAA,EACf,KAAAC;AACF,GAAsB;AAEpB,SADkB,MAAMD,EAAOC,CAAG,IAIhC,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,aAAY;AAAA,MACZ,IAAG;AAAA,MACH,IAAI,GAAGF,EAAI,QAAQ,aAAa;AAAA,MAEhC,4BAACG,GAAA,CAAA,CAAU;AAAA,IAAA;AAAA,EAAA,IARQ;AAWzB;"}
1
+ {"version":3,"file":"link.js","sources":["../../src/exports/link.tsx"],"sourcesContent":["import { Button } from '@payloadcms/ui';\nimport { IconWorld } from '@tabler/icons-react';\nimport type { PayloadRequest } from 'payload';\n\nimport type { MessagesGuard } from '@/types';\n\nexport interface MessagesLinkProps {\n access?: MessagesGuard;\n req: PayloadRequest;\n}\n\nexport async function MessagesLink({\n access = () => true,\n req,\n}: MessagesLinkProps) {\n const hasAccess = await access(req);\n if (!hasAccess) return null;\n\n return (\n <Button\n buttonStyle=\"tab\"\n el=\"link\"\n to={`${req.payload.getAdminURL()}/intl`}\n >\n <IconWorld />\n </Button>\n );\n}\n"],"names":["MessagesLink","access","req","jsx","Button","IconWorld"],"mappings":";;;AAWA,eAAsBA,EAAa;AAAA,EACjC,QAAAC,IAAS,MAAM;AAAA,EACf,KAAAC;AACF,GAAsB;AAEpB,SADkB,MAAMD,EAAOC,CAAG,IAIhC,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,aAAY;AAAA,MACZ,IAAG;AAAA,MACH,IAAI,GAAGF,EAAI,QAAQ,aAAa;AAAA,MAEhC,4BAACG,GAAA,CAAA,CAAU;AAAA,IAAA;AAAA,EAAA,IARQ;AAWzB;"}
@@ -1,2 +1,3 @@
1
1
  export { MessagesLink } from './link';
2
2
  export { MessagesView } from './view';
3
+ //# sourceMappingURL=rsc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../src/exports/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,5 +1,5 @@
1
- import { Locales, Messages, MessagesGuard } from '../types.ts';
2
1
  import { AdminViewServerProps } from 'payload';
2
+ import { Locales, Messages, MessagesGuard } from '../types';
3
3
  export interface MessagesViewProps {
4
4
  locales: Locales;
5
5
  schema: Messages;
@@ -7,3 +7,4 @@ export interface MessagesViewProps {
7
7
  access: MessagesGuard;
8
8
  }
9
9
  export declare function MessagesView({ access, initPageResult, locales, params, payload, schema, searchParams, tabs, }: AdminViewServerProps & MessagesViewProps): Promise<import("react/jsx-runtime").JSX.Element>;
10
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/exports/view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAEV,OAAO,EACP,QAAQ,EACR,aAAa,EAEd,MAAM,SAAS,CAAC;AAOjB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,wBAAsB,YAAY,CAAC,EACjC,MAAM,EACN,cAAc,EACd,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,IAAY,GACb,EAAE,oBAAoB,GAAG,iBAAiB,oDA6C1C"}
@@ -1,13 +1,12 @@
1
- import { jsxs as g, jsx as i } from "react/jsx-runtime";
2
- import { DefaultTemplate as h } from "@payloadcms/next/templates";
3
- import { Gutter as u } from "@payloadcms/ui";
4
- import { redirect as v, RedirectType as A } from "next/navigation";
5
- import { Toaster as M } from "sonner";
6
- import { sanitizeMessages as q } from "../utils/sanitize.js";
7
- import { MessagesForm as w } from "../components/MessagesForm.js";
8
- import { fetchMessages as x } from "../requests/fetchMessages.js";
9
- async function z({
10
- access: c,
1
+ import { jsx as i } from "react/jsx-runtime";
2
+ import { DefaultTemplate as u } from "@payloadcms/next/templates";
3
+ import { Gutter as g } from "@payloadcms/ui";
4
+ import { redirect as h, RedirectType as v } from "next/navigation";
5
+ import { sanitizeMessages as A } from "../utils/sanitize.js";
6
+ import { MessagesForm as M } from "../components/MessagesForm.js";
7
+ import { fetchMessages as q } from "../requests/fetchMessages.js";
8
+ async function T({
9
+ access: m,
11
10
  initPageResult: e,
12
11
  locales: t,
13
12
  params: p,
@@ -17,14 +16,14 @@ async function z({
17
16
  tabs: a = !1
18
17
  }) {
19
18
  const o = r.getAPIURL(), l = o.endsWith("/") ? `${o}intl-plugin` : `${o}/intl-plugin`;
20
- await c(e.req) || v(r.getAdminURL(), A.replace);
21
- const m = {};
19
+ await m(e.req) || h(r.getAdminURL(), v.replace);
20
+ const c = {};
22
21
  for (const s of t) {
23
- const d = await x(r, s);
24
- m[s] = q(n, d);
22
+ const d = await q(r, s);
23
+ c[s] = A(n, d);
25
24
  }
26
- return /* @__PURE__ */ g(
27
- h,
25
+ return /* @__PURE__ */ i(
26
+ u,
28
27
  {
29
28
  i18n: e.req.i18n,
30
29
  locale: e.locale,
@@ -35,23 +34,20 @@ async function z({
35
34
  user: e.req.user || void 0,
36
35
  viewActions: r.config.admin.components.actions.filter((s) => typeof s != "object" ? !0 : s.exportName !== "MessagesLink"),
37
36
  visibleEntities: e.visibleEntities,
38
- children: [
39
- /* @__PURE__ */ i(u, { children: /* @__PURE__ */ i(
40
- w,
41
- {
42
- locales: t,
43
- schema: n,
44
- tabs: a,
45
- values: m,
46
- endpointUrl: l
47
- }
48
- ) }),
49
- /* @__PURE__ */ i(M, { position: "top-right" })
50
- ]
37
+ children: /* @__PURE__ */ i(g, { children: /* @__PURE__ */ i(
38
+ M,
39
+ {
40
+ endpointUrl: l,
41
+ locales: t,
42
+ schema: n,
43
+ tabs: a,
44
+ values: c
45
+ }
46
+ ) })
51
47
  }
52
48
  );
53
49
  }
54
50
  export {
55
- z as MessagesView
51
+ T as MessagesView
56
52
  };
57
53
  //# sourceMappingURL=view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sources":["../../src/exports/view.tsx"],"sourcesContent":["import type {\n DeepPartial,\n Locales,\n Messages,\n MessagesGuard,\n Translations,\n} from \"@/types\";\nimport type { AdminViewServerProps } from \"payload\";\nimport { DefaultTemplate } from \"@payloadcms/next/templates\";\nimport { Gutter } from \"@payloadcms/ui\";\nimport { redirect, RedirectType } from \"next/navigation\";\nimport { Toaster } from \"sonner\";\n\nimport { sanitizeMessages } from \"@/utils/sanitize\";\n\nimport { MessagesForm } from \"../components/MessagesForm\";\nimport { fetchMessages } from \"../requests/fetchMessages\";\n\nexport interface MessagesViewProps {\n locales: Locales;\n schema: Messages;\n tabs: boolean | undefined;\n access: MessagesGuard;\n}\n\nexport async function MessagesView({\n access,\n initPageResult,\n locales,\n params,\n payload,\n schema,\n searchParams,\n tabs = false,\n}: AdminViewServerProps & MessagesViewProps) {\n const apiUrl = payload.getAPIURL();\n const endpointUrl = apiUrl.endsWith(\"/\")\n ? `${apiUrl}intl-plugin`\n : `${apiUrl}/intl-plugin`;\n\n const hasAccess = await access(initPageResult.req);\n if (!hasAccess) redirect(payload.getAdminURL(), RedirectType.replace);\n\n const translations: Translations<DeepPartial<Messages>> = {};\n\n for (const locale of locales) {\n const messages = await fetchMessages(payload, locale);\n translations[locale] = sanitizeMessages(schema, messages);\n }\n return (\n <DefaultTemplate\n i18n={initPageResult.req.i18n}\n locale={initPageResult.locale}\n params={params}\n payload={initPageResult.req.payload}\n permissions={initPageResult.permissions}\n searchParams={searchParams}\n user={initPageResult.req.user || undefined}\n viewActions={payload.config.admin.components.actions.filter((action) => {\n if (typeof action !== \"object\") {\n return true;\n }\n return action.exportName !== \"MessagesLink\";\n })}\n visibleEntities={initPageResult.visibleEntities}\n >\n <Gutter>\n <MessagesForm\n locales={locales}\n schema={schema}\n tabs={tabs}\n values={translations}\n endpointUrl={endpointUrl}\n />\n </Gutter>\n <Toaster position=\"top-right\" />\n </DefaultTemplate>\n );\n}\n"],"names":["MessagesView","access","initPageResult","locales","params","payload","schema","searchParams","tabs","apiUrl","endpointUrl","redirect","RedirectType","translations","locale","messages","fetchMessages","sanitizeMessages","jsxs","DefaultTemplate","action","jsx","Gutter","MessagesForm","Toaster"],"mappings":";;;;;;;;AAyBA,eAAsBA,EAAa;AAAA,EACjC,QAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAAC,IAAO;AACT,GAA6C;AAC3C,QAAMC,IAASJ,EAAQ,UAAA,GACjBK,IAAcD,EAAO,SAAS,GAAG,IACnC,GAAGA,CAAM,gBACT,GAAGA,CAAM;AAGb,EADkB,MAAMR,EAAOC,EAAe,GAAG,KACjCS,EAASN,EAAQ,YAAA,GAAeO,EAAa,OAAO;AAEpE,QAAMC,IAAoD,CAAA;AAE1D,aAAWC,KAAUX,GAAS;AAC5B,UAAMY,IAAW,MAAMC,EAAcX,GAASS,CAAM;AACpD,IAAAD,EAAaC,CAAM,IAAIG,EAAiBX,GAAQS,CAAQ;AAAA,EAC1D;AACA,SACE,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMjB,EAAe,IAAI;AAAA,MACzB,QAAQA,EAAe;AAAA,MACvB,QAAAE;AAAA,MACA,SAASF,EAAe,IAAI;AAAA,MAC5B,aAAaA,EAAe;AAAA,MAC5B,cAAAK;AAAA,MACA,MAAML,EAAe,IAAI,QAAQ;AAAA,MACjC,aAAaG,EAAQ,OAAO,MAAM,WAAW,QAAQ,OAAO,CAACe,MACvD,OAAOA,KAAW,WACb,KAEFA,EAAO,eAAe,cAC9B;AAAA,MACD,iBAAiBlB,EAAe;AAAA,MAEhC,UAAA;AAAA,QAAA,gBAAAmB,EAACC,GAAA,EACC,UAAA,gBAAAD;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,SAAApB;AAAA,YACA,QAAAG;AAAA,YACA,MAAAE;AAAA,YACA,QAAQK;AAAA,YACR,aAAAH;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAAW,EAACG,GAAA,EAAQ,UAAS,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGpC;"}
1
+ {"version":3,"file":"view.js","sources":["../../src/exports/view.tsx"],"sourcesContent":["import { DefaultTemplate } from '@payloadcms/next/templates';\nimport { Gutter } from '@payloadcms/ui';\nimport { RedirectType, redirect } from 'next/navigation';\nimport type { AdminViewServerProps } from 'payload';\nimport type {\n DeepPartial,\n Locales,\n Messages,\n MessagesGuard,\n Translations,\n} from '@/types';\n\nimport { sanitizeMessages } from '@/utils/sanitize';\n\nimport { MessagesForm } from '../components/MessagesForm';\nimport { fetchMessages } from '../requests/fetchMessages';\n\nexport interface MessagesViewProps {\n locales: Locales;\n schema: Messages;\n tabs: boolean | undefined;\n access: MessagesGuard;\n}\n\nexport async function MessagesView({\n access,\n initPageResult,\n locales,\n params,\n payload,\n schema,\n searchParams,\n tabs = false,\n}: AdminViewServerProps & MessagesViewProps) {\n const apiUrl = payload.getAPIURL();\n const endpointUrl = apiUrl.endsWith('/')\n ? `${apiUrl}intl-plugin`\n : `${apiUrl}/intl-plugin`;\n\n const hasAccess = await access(initPageResult.req);\n if (!hasAccess) redirect(payload.getAdminURL(), RedirectType.replace);\n\n const translations: Translations<DeepPartial<Messages>> = {};\n\n for (const locale of locales) {\n const messages = await fetchMessages(payload, locale);\n\n translations[locale] = sanitizeMessages(schema, messages);\n }\n\n return (\n <DefaultTemplate\n i18n={initPageResult.req.i18n}\n locale={initPageResult.locale}\n params={params}\n payload={initPageResult.req.payload}\n permissions={initPageResult.permissions}\n searchParams={searchParams}\n user={initPageResult.req.user || undefined}\n viewActions={payload.config.admin.components.actions.filter((action) => {\n if (typeof action !== 'object') {\n return true;\n }\n return action.exportName !== 'MessagesLink';\n })}\n visibleEntities={initPageResult.visibleEntities}\n >\n <Gutter>\n <MessagesForm\n endpointUrl={endpointUrl}\n locales={locales}\n schema={schema}\n tabs={tabs}\n values={translations}\n />\n </Gutter>\n </DefaultTemplate>\n );\n}\n"],"names":["MessagesView","access","initPageResult","locales","params","payload","schema","searchParams","tabs","apiUrl","endpointUrl","redirect","RedirectType","translations","locale","messages","fetchMessages","sanitizeMessages","jsx","DefaultTemplate","action","Gutter","MessagesForm"],"mappings":";;;;;;;AAwBA,eAAsBA,EAAa;AAAA,EACjC,QAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAAC,IAAO;AACT,GAA6C;AAC3C,QAAMC,IAASJ,EAAQ,UAAA,GACjBK,IAAcD,EAAO,SAAS,GAAG,IACnC,GAAGA,CAAM,gBACT,GAAGA,CAAM;AAGb,EADkB,MAAMR,EAAOC,EAAe,GAAG,KACjCS,EAASN,EAAQ,YAAA,GAAeO,EAAa,OAAO;AAEpE,QAAMC,IAAoD,CAAA;AAE1D,aAAWC,KAAUX,GAAS;AAC5B,UAAMY,IAAW,MAAMC,EAAcX,GAASS,CAAM;AAEpD,IAAAD,EAAaC,CAAM,IAAIG,EAAiBX,GAAQS,CAAQ;AAAA,EAC1D;AAEA,SACE,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMjB,EAAe,IAAI;AAAA,MACzB,QAAQA,EAAe;AAAA,MACvB,QAAAE;AAAA,MACA,SAASF,EAAe,IAAI;AAAA,MAC5B,aAAaA,EAAe;AAAA,MAC5B,cAAAK;AAAA,MACA,MAAML,EAAe,IAAI,QAAQ;AAAA,MACjC,aAAaG,EAAQ,OAAO,MAAM,WAAW,QAAQ,OAAO,CAACe,MACvD,OAAOA,KAAW,WACb,KAEFA,EAAO,eAAe,cAC9B;AAAA,MACD,iBAAiBlB,EAAe;AAAA,MAEhC,4BAACmB,GAAA,EACC,UAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,aAAAZ;AAAA,UACA,SAAAP;AAAA,UACA,QAAAG;AAAA,UACA,MAAAE;AAAA,UACA,QAAQK;AAAA,QAAA;AAAA,MAAA,EACV,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ import { Plugin } from 'payload';
2
2
  import { MessagesPluginConfig } from './types.ts';
3
3
  export declare const intlPlugin: ({ schema, tabs, collectionSlug, hooks, editorAccess, }: MessagesPluginConfig) => Plugin;
4
4
  export { fetchMessages } from './requests/fetchMessages';
5
- export type { MessagesPluginConfig, MessagesSchema, Messages, } from './types.ts';
5
+ export type { Messages, MessagesPluginConfig, MessagesSchema, } from './types.ts';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,OAAO,KAAK,EAGV,MAAM,EACP,MAAM,SAAS,CAAC;AAIjB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,eAAO,MAAM,UAAU,2DAOlB,oBAAoB,KAAG,MAwFzB,CAAC;AAEJ,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,YAAY,EACV,QAAQ,EACR,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,17 +1,16 @@
1
1
  /* empty css */
2
- import { lexicalEditor as m } from "@payloadcms/richtext-lexical";
3
2
  import { getMessagesEndpoint as o } from "./endpoints/get-messages.js";
4
- import { setMessagesEndpoint as i } from "./endpoints/set-messages.js";
5
- import { getSupportedLocales as u, attachPluginContext as c } from "./utils/config.js";
6
- import { fetchMessages as C } from "./requests/fetchMessages.js";
7
- const M = ({
3
+ import { setMessagesEndpoint as p } from "./endpoints/set-messages.js";
4
+ import { getSupportedLocales as d, attachPluginContext as l } from "./utils/config.js";
5
+ import { fetchMessages as M } from "./requests/fetchMessages.js";
6
+ const w = ({
8
7
  schema: s,
9
8
  tabs: a,
10
9
  collectionSlug: t = "messages",
11
- hooks: r,
12
- editorAccess: n = (e) => e.user !== null
10
+ hooks: n,
11
+ editorAccess: r = (e) => e.user !== null
13
12
  }) => (e) => {
14
- const p = u(e.localization);
13
+ const i = d(e.localization);
15
14
  if (!e.serverURL)
16
15
  throw new Error(
17
16
  "serverURL is required in your payload.config.ts file for payload-intl to work."
@@ -25,30 +24,16 @@ const M = ({
25
24
  Component: {
26
25
  path: "payload-intl/rsc#MessagesView",
27
26
  serverProps: {
28
- access: n,
29
- locales: p,
27
+ access: r,
28
+ locales: i,
30
29
  schema: s,
31
30
  tabs: a
32
31
  }
33
32
  },
34
33
  path: "/intl"
35
34
  }
36
- }, c(e, {
35
+ }, l(e, {
37
36
  collectionSlug: t
38
- }), e.globals ??= [], e.globals.push({
39
- slug: "intl-plugin",
40
- fields: [
41
- {
42
- name: "editorTemplate",
43
- type: "richText",
44
- editor: m({
45
- features: ({ defaultFeatures: l }) => l.filter(
46
- ({ key: d }) => !["relationship", "upload"].includes(d)
47
- )
48
- }),
49
- admin: { hidden: !0 }
50
- }
51
- ]
52
37
  }), e.collections ??= [], e.collections.push({
53
38
  slug: t,
54
39
  admin: {
@@ -57,7 +42,7 @@ const M = ({
57
42
  access: {
58
43
  read: () => !0
59
44
  },
60
- endpoints: [i, o],
45
+ endpoints: [p, o],
61
46
  fields: [
62
47
  {
63
48
  name: "locale",
@@ -65,7 +50,7 @@ const M = ({
65
50
  required: !0
66
51
  }
67
52
  ],
68
- hooks: h(r),
53
+ hooks: m(n),
69
54
  indexes: [
70
55
  {
71
56
  fields: ["locale"]
@@ -74,23 +59,23 @@ const M = ({
74
59
  upload: {
75
60
  mimeTypes: ["application/json"]
76
61
  }
77
- }), e.endpoints ??= [], e.endpoints.push(o), e.endpoints.push(i), e;
78
- }, h = (s) => {
62
+ }), e.endpoints ??= [], e.endpoints.push(o), e.endpoints.push(p), e;
63
+ }, m = (s) => {
79
64
  if (!s)
80
65
  return;
81
66
  const { afterUpdate: a, ...t } = s;
82
67
  if (!a)
83
68
  return t;
84
- const r = async ({ operation: n }) => {
85
- n === "update" && await a();
69
+ const n = async ({ operation: r }) => {
70
+ r === "update" && await a();
86
71
  };
87
72
  return {
88
73
  ...t,
89
- afterChange: [...t.afterChange ?? [], r]
74
+ afterChange: [...t.afterChange ?? [], n]
90
75
  };
91
76
  };
92
77
  export {
93
- C as fetchMessages,
94
- M as intlPlugin
78
+ M as fetchMessages,
79
+ w as intlPlugin
95
80
  };
96
81
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import \"./styles.css\";\n\nimport type {\n CollectionAfterChangeHook,\n CollectionConfig,\n Plugin,\n} from \"payload\";\nimport { lexicalEditor } from \"@payloadcms/richtext-lexical\";\n\nimport type { MessagesViewProps } from \"./exports/view\";\nimport type { MessagesPluginConfig } from \"./types.ts\";\nimport { getMessagesEndpoint } from \"./endpoints/get-messages\";\nimport { setMessagesEndpoint } from \"./endpoints/set-messages\";\nimport { attachPluginContext, getSupportedLocales } from \"./utils/config\";\n\nexport const intlPlugin =\n ({\n schema,\n tabs,\n collectionSlug = \"messages\",\n hooks,\n editorAccess = (req) => req.user !== null,\n }: MessagesPluginConfig): Plugin =>\n (config) => {\n const locales = getSupportedLocales(config.localization);\n\n if (!config.serverURL) {\n throw new Error(\n \"serverURL is required in your payload.config.ts file for payload-intl to work.\",\n );\n }\n\n config.admin ??= {};\n config.admin.components ??= {};\n config.admin.components.actions ??= [];\n config.admin.components.actions.push({\n exportName: \"MessagesLink\",\n path: \"payload-intl/rsc#MessagesLink\",\n });\n\n config.admin.components.views = {\n ...config.admin.components.views,\n intl: {\n Component: {\n path: \"payload-intl/rsc#MessagesView\",\n serverProps: {\n access: editorAccess,\n locales,\n schema,\n tabs,\n } satisfies MessagesViewProps,\n },\n path: \"/intl\",\n },\n };\n\n attachPluginContext(config, {\n collectionSlug,\n });\n config.globals ??= [];\n config.globals.push({\n slug: \"intl-plugin\",\n fields: [\n {\n name: \"editorTemplate\",\n type: \"richText\",\n editor: lexicalEditor({\n features: ({ defaultFeatures }) =>\n defaultFeatures.filter(\n ({ key }) => ![\"relationship\", \"upload\"].includes(key),\n ),\n }),\n admin: { hidden: true },\n },\n ],\n });\n\n config.collections ??= [];\n config.collections.push({\n slug: collectionSlug,\n admin: {\n hidden: true,\n },\n access: {\n read: () => true,\n },\n endpoints: [setMessagesEndpoint, getMessagesEndpoint],\n fields: [\n {\n name: \"locale\",\n type: \"text\",\n required: true,\n },\n ],\n hooks: createHooks(hooks),\n indexes: [\n {\n fields: [\"locale\"],\n },\n ],\n upload: {\n mimeTypes: [\"application/json\"],\n },\n });\n\n config.endpoints ??= [];\n config.endpoints.push(getMessagesEndpoint);\n config.endpoints.push(setMessagesEndpoint);\n\n return config;\n };\n\nexport { fetchMessages } from \"./requests/fetchMessages\";\n\nexport type {\n MessagesPluginConfig,\n MessagesSchema,\n Messages,\n} from \"./types.ts\";\n\nconst createHooks = (\n hooks: MessagesPluginConfig[\"hooks\"],\n): CollectionConfig[\"hooks\"] => {\n if (!hooks) {\n return undefined;\n }\n const { afterUpdate, ...rest } = hooks;\n if (!afterUpdate) {\n return rest;\n }\n\n const afterUpdateHook: CollectionAfterChangeHook = async ({ operation }) => {\n if (operation === \"update\") {\n await afterUpdate();\n }\n return;\n };\n return {\n ...rest,\n afterChange: [...(rest.afterChange ?? []), afterUpdateHook],\n };\n};\n"],"names":["intlPlugin","schema","tabs","collectionSlug","hooks","editorAccess","req","config","locales","getSupportedLocales","attachPluginContext","lexicalEditor","defaultFeatures","key","setMessagesEndpoint","getMessagesEndpoint","createHooks","afterUpdate","rest","afterUpdateHook","operation"],"mappings":";;;;;;AAeO,MAAMA,IACX,CAAC;AAAA,EACC,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,OAAAC;AAAA,EACA,cAAAC,IAAe,CAACC,MAAQA,EAAI,SAAS;AACvC,MACA,CAACC,MAAW;AACV,QAAMC,IAAUC,EAAoBF,EAAO,YAAY;AAEvD,MAAI,CAACA,EAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAAA,EAAO,UAAU,CAAA,GACjBA,EAAO,MAAM,eAAe,CAAA,GAC5BA,EAAO,MAAM,WAAW,YAAY,CAAA,GACpCA,EAAO,MAAM,WAAW,QAAQ,KAAK;AAAA,IACnC,YAAY;AAAA,IACZ,MAAM;AAAA,EAAA,CACP,GAEDA,EAAO,MAAM,WAAW,QAAQ;AAAA,IAC9B,GAAGA,EAAO,MAAM,WAAW;AAAA,IAC3B,MAAM;AAAA,MACJ,WAAW;AAAA,QACT,MAAM;AAAA,QACN,aAAa;AAAA,UACX,QAAQF;AAAA,UACR,SAAAG;AAAA,UACA,QAAAP;AAAA,UACA,MAAAC;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,MAAM;AAAA,IAAA;AAAA,EACR,GAGFQ,EAAoBH,GAAQ;AAAA,IAC1B,gBAAAJ;AAAA,EAAA,CACD,GACDI,EAAO,YAAY,CAAA,GACnBA,EAAO,QAAQ,KAAK;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,QAAQI,EAAc;AAAA,UACpB,UAAU,CAAC,EAAE,iBAAAC,EAAA,MACXA,EAAgB;AAAA,YACd,CAAC,EAAE,KAAAC,EAAA,MAAU,CAAC,CAAC,gBAAgB,QAAQ,EAAE,SAASA,CAAG;AAAA,UAAA;AAAA,QACvD,CACH;AAAA,QACD,OAAO,EAAE,QAAQ,GAAA;AAAA,MAAK;AAAA,IACxB;AAAA,EACF,CACD,GAEDN,EAAO,gBAAgB,CAAA,GACvBA,EAAO,YAAY,KAAK;AAAA,IACtB,MAAMJ;AAAA,IACN,OAAO;AAAA,MACL,QAAQ;AAAA,IAAA;AAAA,IAEV,QAAQ;AAAA,MACN,MAAM,MAAM;AAAA,IAAA;AAAA,IAEd,WAAW,CAACW,GAAqBC,CAAmB;AAAA,IACpD,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,OAAOC,EAAYZ,CAAK;AAAA,IACxB,SAAS;AAAA,MACP;AAAA,QACE,QAAQ,CAAC,QAAQ;AAAA,MAAA;AAAA,IACnB;AAAA,IAEF,QAAQ;AAAA,MACN,WAAW,CAAC,kBAAkB;AAAA,IAAA;AAAA,EAChC,CACD,GAEDG,EAAO,cAAc,CAAA,GACrBA,EAAO,UAAU,KAAKQ,CAAmB,GACzCR,EAAO,UAAU,KAAKO,CAAmB,GAElCP;AACT,GAUIS,IAAc,CAClBZ,MAC8B;AAC9B,MAAI,CAACA;AACH;AAEF,QAAM,EAAE,aAAAa,GAAa,GAAGC,EAAA,IAASd;AACjC,MAAI,CAACa;AACH,WAAOC;AAGT,QAAMC,IAA6C,OAAO,EAAE,WAAAC,QAAgB;AAC1E,IAAIA,MAAc,YAChB,MAAMH,EAAA;AAAA,EAGV;AACA,SAAO;AAAA,IACL,GAAGC;AAAA,IACH,aAAa,CAAC,GAAIA,EAAK,eAAe,CAAA,GAAKC,CAAe;AAAA,EAAA;AAE9D;"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import './styles.css';\n\nimport type {\n CollectionAfterChangeHook,\n CollectionConfig,\n Plugin,\n} from 'payload';\nimport { getMessagesEndpoint } from './endpoints/get-messages';\nimport { setMessagesEndpoint } from './endpoints/set-messages';\nimport type { MessagesViewProps } from './exports/view';\nimport type { MessagesPluginConfig } from './types.ts';\nimport { attachPluginContext, getSupportedLocales } from './utils/config';\n\nexport const intlPlugin =\n ({\n schema,\n tabs,\n collectionSlug = 'messages',\n hooks,\n editorAccess = (req) => req.user !== null,\n }: MessagesPluginConfig): Plugin =>\n (config) => {\n const locales = getSupportedLocales(config.localization);\n\n if (!config.serverURL) {\n throw new Error(\n 'serverURL is required in your payload.config.ts file for payload-intl to work.',\n );\n }\n\n config.admin ??= {};\n config.admin.components ??= {};\n config.admin.components.actions ??= [];\n config.admin.components.actions.push({\n exportName: 'MessagesLink',\n path: 'payload-intl/rsc#MessagesLink',\n });\n\n config.admin.components.views = {\n ...config.admin.components.views,\n intl: {\n Component: {\n path: 'payload-intl/rsc#MessagesView',\n serverProps: {\n access: editorAccess,\n locales,\n schema,\n tabs,\n } satisfies MessagesViewProps,\n },\n path: '/intl',\n },\n };\n\n attachPluginContext(config, {\n collectionSlug,\n });\n // config.globals ??= [];\n // config.globals.push({\n // slug: 'intl-plugin',\n // fields: [\n // {\n // name: 'editorTemplate',\n // type: 'richText',\n // editor: lexicalEditor({\n // features: ({ defaultFeatures }) =>\n // defaultFeatures.filter(\n // ({ key }) => !['relationship', 'upload'].includes(key),\n // ),\n // }),\n // admin: { hidden: true },\n // },\n // ],\n // });\n\n config.collections ??= [];\n config.collections.push({\n slug: collectionSlug,\n admin: {\n hidden: true,\n },\n access: {\n read: () => true,\n },\n endpoints: [setMessagesEndpoint, getMessagesEndpoint],\n fields: [\n {\n name: 'locale',\n type: 'text',\n required: true,\n },\n ],\n hooks: createHooks(hooks),\n indexes: [\n {\n fields: ['locale'],\n },\n ],\n upload: {\n mimeTypes: ['application/json'],\n },\n });\n\n config.endpoints ??= [];\n config.endpoints.push(getMessagesEndpoint);\n config.endpoints.push(setMessagesEndpoint);\n\n return config;\n };\n\nexport { fetchMessages } from './requests/fetchMessages';\n\nexport type {\n Messages,\n MessagesPluginConfig,\n MessagesSchema,\n} from './types.ts';\n\nconst createHooks = (\n hooks: MessagesPluginConfig['hooks'],\n): CollectionConfig['hooks'] => {\n if (!hooks) {\n return undefined;\n }\n const { afterUpdate, ...rest } = hooks;\n if (!afterUpdate) {\n return rest;\n }\n\n const afterUpdateHook: CollectionAfterChangeHook = async ({ operation }) => {\n if (operation === 'update') {\n await afterUpdate();\n }\n return;\n };\n return {\n ...rest,\n afterChange: [...(rest.afterChange ?? []), afterUpdateHook],\n };\n};\n"],"names":["intlPlugin","schema","tabs","collectionSlug","hooks","editorAccess","req","config","locales","getSupportedLocales","attachPluginContext","setMessagesEndpoint","getMessagesEndpoint","createHooks","afterUpdate","rest","afterUpdateHook","operation"],"mappings":";;;;;AAaO,MAAMA,IACX,CAAC;AAAA,EACC,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,OAAAC;AAAA,EACA,cAAAC,IAAe,CAACC,MAAQA,EAAI,SAAS;AACvC,MACA,CAACC,MAAW;AACV,QAAMC,IAAUC,EAAoBF,EAAO,YAAY;AAEvD,MAAI,CAACA,EAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAAA,EAAO,UAAU,CAAA,GACjBA,EAAO,MAAM,eAAe,CAAA,GAC5BA,EAAO,MAAM,WAAW,YAAY,CAAA,GACpCA,EAAO,MAAM,WAAW,QAAQ,KAAK;AAAA,IACnC,YAAY;AAAA,IACZ,MAAM;AAAA,EAAA,CACP,GAEDA,EAAO,MAAM,WAAW,QAAQ;AAAA,IAC9B,GAAGA,EAAO,MAAM,WAAW;AAAA,IAC3B,MAAM;AAAA,MACJ,WAAW;AAAA,QACT,MAAM;AAAA,QACN,aAAa;AAAA,UACX,QAAQF;AAAA,UACR,SAAAG;AAAA,UACA,QAAAP;AAAA,UACA,MAAAC;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,MAAM;AAAA,IAAA;AAAA,EACR,GAGFQ,EAAoBH,GAAQ;AAAA,IAC1B,gBAAAJ;AAAA,EAAA,CACD,GAmBDI,EAAO,gBAAgB,CAAA,GACvBA,EAAO,YAAY,KAAK;AAAA,IACtB,MAAMJ;AAAA,IACN,OAAO;AAAA,MACL,QAAQ;AAAA,IAAA;AAAA,IAEV,QAAQ;AAAA,MACN,MAAM,MAAM;AAAA,IAAA;AAAA,IAEd,WAAW,CAACQ,GAAqBC,CAAmB;AAAA,IACpD,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,OAAOC,EAAYT,CAAK;AAAA,IACxB,SAAS;AAAA,MACP;AAAA,QACE,QAAQ,CAAC,QAAQ;AAAA,MAAA;AAAA,IACnB;AAAA,IAEF,QAAQ;AAAA,MACN,WAAW,CAAC,kBAAkB;AAAA,IAAA;AAAA,EAChC,CACD,GAEDG,EAAO,cAAc,CAAA,GACrBA,EAAO,UAAU,KAAKK,CAAmB,GACzCL,EAAO,UAAU,KAAKI,CAAmB,GAElCJ;AACT,GAUIM,IAAc,CAClBT,MAC8B;AAC9B,MAAI,CAACA;AACH;AAEF,QAAM,EAAE,aAAAU,GAAa,GAAGC,EAAA,IAASX;AACjC,MAAI,CAACU;AACH,WAAOC;AAGT,QAAMC,IAA6C,OAAO,EAAE,WAAAC,QAAgB;AAC1E,IAAIA,MAAc,YAChB,MAAMH,EAAA;AAAA,EAGV;AACA,SAAO;AAAA,IACL,GAAGC;AAAA,IACH,aAAa,CAAC,GAAIA,EAAK,eAAe,CAAA,GAAKC,CAAe;AAAA,EAAA;AAE9D;"}
@@ -1,3 +1,4 @@
1
1
  import { BasePayload } from 'payload';
2
2
  import { Messages } from '../types';
3
3
  export declare function fetchMessages(payload: BasePayload, locale: string): Promise<Messages>;
4
+ //# sourceMappingURL=fetchMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchMessages.d.ts","sourceRoot":"","sources":["../../src/requests/fetchMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,wBAAsB,aAAa,CACjC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAqCnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetchMessages.js","sources":["../../src/requests/fetchMessages.ts"],"sourcesContent":["import type { BasePayload } from \"payload\";\n\nimport { getPluginContext } from \"@/utils/config\";\nimport { getErrorMessage } from \"@/utils/error-handling\";\n\nimport type { Messages } from \"../types\";\n\nexport async function fetchMessages(\n payload: BasePayload,\n locale: string,\n): Promise<Messages> {\n if (!payload.config.serverURL) {\n throw new Error(\n \"serverURL is required in your payload.config.ts file for payload-intl to work.\",\n );\n }\n\n const {\n docs: [doc],\n } = await payload.find({\n collection: getPluginContext(payload.config).collectionSlug,\n where: { locale: { equals: locale } },\n });\n\n if (!doc) {\n console.warn(`No messages found for locale ${locale}`);\n return {};\n }\n\n const { url } = doc as unknown as { url: string };\n\n const response = await fetch(url);\n\n if (!response.ok) {\n const error = await getErrorMessage(response);\n throw new Error(\n `Could not fetch messages for locale \"${locale}\": ${error}`,\n );\n }\n\n if (response.headers.get(\"content-type\") !== \"application/json\") {\n throw new Error(\n `Could not fetch messages for locale \"${locale}\": The page did not return a JSON file.`,\n );\n }\n\n return await response.json();\n}\n\n/*\ntry {\n const response = await fetch(endpointUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(changes),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n \"message\" in error ? error.message : \"Unknown error\"\n );\n }\n\n form.reset(currentValues);\n toast.success(\"Saved\", { id: toastId });\n } catch (error) {\n toast.error(\n `Failed to save: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n { id: toastId },\n );\n }\n };\n\n*/\n"],"names":["fetchMessages","payload","locale","doc","getPluginContext","url","response","error","getErrorMessage"],"mappings":";;AAOA,eAAsBA,EACpBC,GACAC,GACmB;AACnB,MAAI,CAACD,EAAQ,OAAO;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,QAAM;AAAA,IACJ,MAAM,CAACE,CAAG;AAAA,EAAA,IACR,MAAMF,EAAQ,KAAK;AAAA,IACrB,YAAYG,EAAiBH,EAAQ,MAAM,EAAE;AAAA,IAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQC,IAAO;AAAA,EAAE,CACrC;AAED,MAAI,CAACC;AACH,mBAAQ,KAAK,gCAAgCD,CAAM,EAAE,GAC9C,CAAA;AAGT,QAAM,EAAE,KAAAG,MAAQF,GAEVG,IAAW,MAAM,MAAMD,CAAG;AAEhC,MAAI,CAACC,EAAS,IAAI;AAChB,UAAMC,IAAQ,MAAMC,EAAgBF,CAAQ;AAC5C,UAAM,IAAI;AAAA,MACR,wCAAwCJ,CAAM,MAAMK,CAAK;AAAA,IAAA;AAAA,EAE7D;AAEA,MAAID,EAAS,QAAQ,IAAI,cAAc,MAAM;AAC3C,UAAM,IAAI;AAAA,MACR,wCAAwCJ,CAAM;AAAA,IAAA;AAIlD,SAAO,MAAMI,EAAS,KAAA;AACxB;"}
1
+ {"version":3,"file":"fetchMessages.js","sources":["../../src/requests/fetchMessages.ts"],"sourcesContent":["import type { BasePayload } from 'payload';\n\nimport { getPluginContext } from '@/utils/config';\nimport { getErrorMessage } from '@/utils/error-handling';\n\nimport type { Messages } from '../types';\n\nexport async function fetchMessages(\n payload: BasePayload,\n locale: string,\n): Promise<Messages> {\n if (!payload.config.serverURL) {\n throw new Error(\n 'serverURL is required in your payload.config.ts file for payload-intl to work.',\n );\n }\n\n const {\n docs: [doc],\n } = await payload.find({\n collection: getPluginContext(payload.config).collectionSlug,\n where: { locale: { equals: locale } },\n });\n\n if (!doc) {\n console.warn(`No messages found for locale ${locale}`);\n return {};\n }\n\n const { url } = doc as unknown as { url: string };\n\n const response = await fetch(url);\n\n if (!response.ok) {\n const error = await getErrorMessage(response);\n throw new Error(\n `Could not fetch messages for locale \"${locale}\": ${error}`,\n );\n }\n\n if (response.headers.get('content-type') !== 'application/json') {\n throw new Error(\n `Could not fetch messages for locale \"${locale}\": The page did not return a JSON file.`,\n );\n }\n\n return await response.json();\n}\n\n/*\ntry {\n const response = await fetch(endpointUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(changes),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(\n \"message\" in error ? error.message : \"Unknown error\"\n );\n }\n\n form.reset(currentValues);\n toast.success(\"Saved\", { id: toastId });\n } catch (error) {\n toast.error(\n `Failed to save: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n { id: toastId },\n );\n }\n };\n\n*/\n"],"names":["fetchMessages","payload","locale","doc","getPluginContext","url","response","error","getErrorMessage"],"mappings":";;AAOA,eAAsBA,EACpBC,GACAC,GACmB;AACnB,MAAI,CAACD,EAAQ,OAAO;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,QAAM;AAAA,IACJ,MAAM,CAACE,CAAG;AAAA,EAAA,IACR,MAAMF,EAAQ,KAAK;AAAA,IACrB,YAAYG,EAAiBH,EAAQ,MAAM,EAAE;AAAA,IAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQC,IAAO;AAAA,EAAE,CACrC;AAED,MAAI,CAACC;AACH,mBAAQ,KAAK,gCAAgCD,CAAM,EAAE,GAC9C,CAAA;AAGT,QAAM,EAAE,KAAAG,MAAQF,GAEVG,IAAW,MAAM,MAAMD,CAAG;AAEhC,MAAI,CAACC,EAAS,IAAI;AAChB,UAAMC,IAAQ,MAAMC,EAAgBF,CAAQ;AAC5C,UAAM,IAAI;AAAA,MACR,wCAAwCJ,CAAM,MAAMK,CAAK;AAAA,IAAA;AAAA,EAE7D;AAEA,MAAID,EAAS,QAAQ,IAAI,cAAc,MAAM;AAC3C,UAAM,IAAI;AAAA,MACR,wCAAwCJ,CAAM;AAAA,IAAA;AAIlD,SAAO,MAAMI,EAAS,KAAA;AACxB;"}