payload-intl 1.3.2 → 1.4.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.
- package/README.md +23 -3
- package/dist/components/MessagesField.d.ts +12 -0
- package/dist/components/MessagesField.d.ts.map +1 -0
- package/dist/components/MessagesField.js +36 -0
- package/dist/components/MessagesField.js.map +1 -0
- package/dist/components/MessagesImport.d.ts +2 -0
- package/dist/components/MessagesImport.d.ts.map +1 -0
- package/dist/components/MessagesImport.js +68 -0
- package/dist/components/MessagesImport.js.map +1 -0
- package/dist/components/MessagesImport.module.css +8 -0
- package/dist/components/input/LexicalInput.d.ts +8 -0
- package/dist/components/input/LexicalInput.d.ts.map +1 -0
- package/dist/components/input/LexicalInput.js +21 -0
- package/dist/components/input/LexicalInput.js.map +1 -0
- package/dist/components/input/MessageInput.d.ts +12 -0
- package/dist/components/input/MessageInput.d.ts.map +1 -0
- package/dist/components/{inputs → input}/MessageInput.js +31 -38
- package/dist/components/input/MessageInput.js.map +1 -0
- package/dist/components/{inputs → input}/MessageInput.module.css +14 -19
- package/dist/components/{inputs → input}/ReferencePopover.d.ts +1 -1
- package/dist/components/input/ReferencePopover.d.ts.map +1 -0
- package/dist/components/{inputs → input}/ReferencePopover.js +20 -5
- package/dist/components/input/ReferencePopover.js.map +1 -0
- package/dist/components/input/SingleLinePlugin.d.ts.map +1 -0
- package/dist/components/input/SingleLinePlugin.js.map +1 -0
- package/dist/components/{hooks → input}/useHtmlLexicalAdapter.d.ts.map +1 -1
- package/dist/components/{hooks → input}/useHtmlLexicalAdapter.js.map +1 -1
- package/dist/{utils/format.d.ts → components/input/utils.d.ts} +2 -2
- package/dist/components/input/utils.d.ts.map +1 -0
- package/dist/{utils/format.js → components/input/utils.js} +2 -2
- package/dist/components/input/utils.js.map +1 -0
- package/dist/components/input/variables/VariableChip.d.ts.map +1 -0
- package/dist/components/{inputs → input}/variables/VariableChip.js +1 -2
- package/dist/components/input/variables/VariableChip.js.map +1 -0
- package/dist/components/input/variables/VariableIcon.d.ts.map +1 -0
- package/dist/components/input/variables/VariableIcon.js.map +1 -0
- package/dist/components/input/variables/VariableNode.d.ts.map +1 -0
- package/dist/components/input/variables/VariableNode.js.map +1 -0
- package/dist/components/input/variables/VariableSuggestion.d.ts.map +1 -0
- package/dist/components/input/variables/VariableSuggestion.js.map +1 -0
- package/dist/components/input/variables/editors/PluralVariableEditor.d.ts.map +1 -0
- package/dist/components/{inputs → input}/variables/editors/PluralVariableEditor.js +1 -1
- package/dist/components/input/variables/editors/PluralVariableEditor.js.map +1 -0
- package/dist/components/input/variables/editors/SelectVariableEditor.d.ts.map +1 -0
- package/dist/components/{inputs → input}/variables/editors/SelectVariableEditor.js +1 -1
- package/dist/components/input/variables/editors/SelectVariableEditor.js.map +1 -0
- package/dist/components/input/variables/editors/TagVariableEditor.d.ts.map +1 -0
- package/dist/components/{inputs → input}/variables/editors/TagVariableEditor.js +1 -1
- package/dist/components/input/variables/editors/TagVariableEditor.js.map +1 -0
- package/dist/components/input/variables/editors/TemporalVariableEditor.d.ts.map +1 -0
- package/dist/components/input/variables/editors/TemporalVariableEditor.js.map +1 -0
- package/dist/components/input/variables/pickers/NumericVariableEditor.d.ts.map +1 -0
- package/dist/components/{inputs → input}/variables/pickers/NumericVariableEditor.js +1 -1
- package/dist/components/input/variables/pickers/NumericVariableEditor.js.map +1 -0
- package/dist/components/input/variables/pickers/TemporalVariablePicker.d.ts.map +1 -0
- package/dist/components/{inputs → input}/variables/pickers/TemporalVariablePicker.js +1 -1
- package/dist/components/input/variables/pickers/TemporalVariablePicker.js.map +1 -0
- package/dist/components/layout/MessageField.d.ts +5 -4
- package/dist/components/layout/MessageField.d.ts.map +1 -1
- package/dist/components/layout/MessageField.js +44 -51
- package/dist/components/layout/MessageField.js.map +1 -1
- package/dist/components/layout/MessageField.module.css +17 -5
- package/dist/components/layout/MessagesTabs.d.ts.map +1 -1
- package/dist/components/layout/MessagesTabs.js +9 -19
- package/dist/components/layout/MessagesTabs.js.map +1 -1
- package/dist/components/layout/MessagesTree.d.ts +7 -5
- package/dist/components/layout/MessagesTree.d.ts.map +1 -1
- package/dist/components/layout/MessagesTree.js +12 -22
- package/dist/components/layout/MessagesTree.js.map +1 -1
- package/dist/components/layout/MessagesTree.module.css +7 -3
- package/dist/{utils/config.d.ts → config.d.ts} +1 -1
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js.map +1 -0
- package/dist/const.d.ts +3 -9
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +3 -12
- package/dist/const.js.map +1 -1
- package/dist/exports/client.d.ts +3 -1
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +3 -1
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/fetchMessages.d.ts +4 -0
- package/dist/exports/fetchMessages.d.ts.map +1 -0
- package/dist/exports/fetchMessages.js +18 -0
- package/dist/exports/fetchMessages.js.map +1 -0
- package/dist/exports/rsc.d.ts +0 -2
- package/dist/exports/rsc.d.ts.map +1 -1
- package/dist/exports/rsc.js +0 -2
- package/dist/exports/rsc.js.map +1 -1
- package/dist/file-storage-hooks.d.ts +17 -0
- package/dist/file-storage-hooks.d.ts.map +1 -0
- package/dist/file-storage-hooks.js +37 -0
- package/dist/file-storage-hooks.js.map +1 -0
- package/dist/hooks.d.ts +19 -3
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +41 -20
- package/dist/hooks.js.map +1 -1
- package/dist/icu/guards.d.ts.map +1 -0
- package/dist/icu/guards.js.map +1 -0
- package/dist/icu/index.d.ts +6 -0
- package/dist/icu/index.d.ts.map +1 -0
- package/dist/icu/index.js +7 -0
- package/dist/icu/index.js.map +1 -0
- package/dist/{utils/icu-tranform.d.ts → icu/lexical.d.ts} +1 -10
- package/dist/icu/lexical.d.ts.map +1 -0
- package/dist/{utils/icu-tranform.js → icu/lexical.js} +4 -44
- package/dist/icu/lexical.js.map +1 -0
- package/dist/icu/schema.d.ts +4 -0
- package/dist/icu/schema.d.ts.map +1 -0
- package/dist/icu/schema.js +43 -0
- package/dist/icu/schema.js.map +1 -0
- package/dist/icu/serialize.d.ts +11 -0
- package/dist/icu/serialize.d.ts.map +1 -0
- package/dist/icu/serialize.js +45 -0
- package/dist/icu/serialize.js.map +1 -0
- package/dist/icu/validate.d.ts.map +1 -0
- package/dist/icu/validate.js.map +1 -0
- package/dist/index.d.ts +23 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +181 -37
- package/dist/index.js.map +1 -1
- package/dist/payload-types.d.ts +43 -16
- package/dist/payload-types.d.ts.map +1 -1
- package/dist/types.d.ts +24 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/file-storage.d.ts +26 -0
- package/dist/utils/file-storage.d.ts.map +1 -0
- package/dist/utils/file-storage.js +61 -0
- package/dist/utils/file-storage.js.map +1 -0
- package/dist/utils/sanitize.d.ts +5 -3
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +4 -2
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/utils/schema.d.ts +5 -7
- package/dist/utils/schema.d.ts.map +1 -1
- package/dist/utils/schema.js +11 -39
- package/dist/utils/schema.js.map +1 -1
- package/dist/utils/scopes.d.ts +3 -0
- package/dist/utils/scopes.d.ts.map +1 -0
- package/dist/utils/scopes.js +24 -0
- package/dist/utils/scopes.js.map +1 -0
- package/package.json +5 -5
- package/dist/components/MessageFormField.d.ts +0 -14
- package/dist/components/MessageFormField.d.ts.map +0 -1
- package/dist/components/MessageFormField.js +0 -28
- package/dist/components/MessageFormField.js.map +0 -1
- package/dist/components/MessagesForm.d.ts +0 -13
- package/dist/components/MessagesForm.d.ts.map +0 -1
- package/dist/components/MessagesForm.js +0 -120
- package/dist/components/MessagesForm.js.map +0 -1
- package/dist/components/MessagesForm.module.css +0 -41
- package/dist/components/MessagesFormProvider.d.ts +0 -33
- package/dist/components/MessagesFormProvider.d.ts.map +0 -1
- package/dist/components/MessagesFormProvider.js +0 -34
- package/dist/components/MessagesFormProvider.js.map +0 -1
- package/dist/components/MessagesLink.d.ts +0 -8
- package/dist/components/MessagesLink.d.ts.map +0 -1
- package/dist/components/MessagesLink.js +0 -22
- package/dist/components/MessagesLink.js.map +0 -1
- package/dist/components/MessagesView.d.ts +0 -10
- package/dist/components/MessagesView.d.ts.map +0 -1
- package/dist/components/MessagesView.js +0 -57
- package/dist/components/MessagesView.js.map +0 -1
- package/dist/components/actions/CopyMessages.d.ts +0 -2
- package/dist/components/actions/CopyMessages.d.ts.map +0 -1
- package/dist/components/actions/CopyMessages.js +0 -41
- package/dist/components/actions/CopyMessages.js.map +0 -1
- package/dist/components/actions/CopyMessages.module.css +0 -8
- package/dist/components/actions/JsonImport.d.ts +0 -5
- package/dist/components/actions/JsonImport.d.ts.map +0 -1
- package/dist/components/actions/JsonImport.js +0 -52
- package/dist/components/actions/JsonImport.js.map +0 -1
- package/dist/components/actions/JsonImport.module.css +0 -14
- package/dist/components/hooks/useMessagesFormSubmit.d.ts +0 -11
- package/dist/components/hooks/useMessagesFormSubmit.d.ts.map +0 -1
- package/dist/components/hooks/useMessagesFormSubmit.js +0 -44
- package/dist/components/hooks/useMessagesFormSubmit.js.map +0 -1
- package/dist/components/inputs/FieldWrapper.d.ts +0 -8
- package/dist/components/inputs/FieldWrapper.d.ts.map +0 -1
- package/dist/components/inputs/FieldWrapper.js +0 -24
- package/dist/components/inputs/FieldWrapper.js.map +0 -1
- package/dist/components/inputs/FieldWrapper.module.css +0 -24
- package/dist/components/inputs/LexicalInput.d.ts +0 -9
- package/dist/components/inputs/LexicalInput.d.ts.map +0 -1
- package/dist/components/inputs/LexicalInput.js +0 -26
- package/dist/components/inputs/LexicalInput.js.map +0 -1
- package/dist/components/inputs/MessageInput.d.ts +0 -14
- package/dist/components/inputs/MessageInput.d.ts.map +0 -1
- package/dist/components/inputs/MessageInput.js.map +0 -1
- package/dist/components/inputs/ReferencePopover.d.ts.map +0 -1
- package/dist/components/inputs/ReferencePopover.js.map +0 -1
- package/dist/components/inputs/SingleLinePlugin.d.ts.map +0 -1
- package/dist/components/inputs/SingleLinePlugin.js.map +0 -1
- package/dist/components/inputs/variables/VariableChip.d.ts.map +0 -1
- package/dist/components/inputs/variables/VariableChip.js.map +0 -1
- package/dist/components/inputs/variables/VariableIcon.d.ts.map +0 -1
- package/dist/components/inputs/variables/VariableIcon.js.map +0 -1
- package/dist/components/inputs/variables/VariableNode.d.ts.map +0 -1
- package/dist/components/inputs/variables/VariableNode.js.map +0 -1
- package/dist/components/inputs/variables/VariableSuggestion.d.ts.map +0 -1
- package/dist/components/inputs/variables/VariableSuggestion.js.map +0 -1
- package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts.map +0 -1
- package/dist/components/inputs/variables/editors/PluralVariableEditor.js.map +0 -1
- package/dist/components/inputs/variables/editors/SelectVariableEditor.d.ts.map +0 -1
- package/dist/components/inputs/variables/editors/SelectVariableEditor.js.map +0 -1
- package/dist/components/inputs/variables/editors/TagVariableEditor.d.ts.map +0 -1
- package/dist/components/inputs/variables/editors/TagVariableEditor.js.map +0 -1
- package/dist/components/inputs/variables/editors/TemporalVariableEditor.d.ts.map +0 -1
- package/dist/components/inputs/variables/editors/TemporalVariableEditor.js.map +0 -1
- package/dist/components/inputs/variables/pickers/NumericVariableEditor.d.ts.map +0 -1
- package/dist/components/inputs/variables/pickers/NumericVariableEditor.js.map +0 -1
- package/dist/components/inputs/variables/pickers/TemporalVariablePicker.d.ts.map +0 -1
- package/dist/components/inputs/variables/pickers/TemporalVariablePicker.js.map +0 -1
- package/dist/components/layout/GroupStatusDot.d.ts +0 -6
- package/dist/components/layout/GroupStatusDot.d.ts.map +0 -1
- package/dist/components/layout/GroupStatusDot.js +0 -24
- package/dist/components/layout/GroupStatusDot.js.map +0 -1
- package/dist/components/layout/StatusDot.d.ts +0 -7
- package/dist/components/layout/StatusDot.d.ts.map +0 -1
- package/dist/components/layout/StatusDot.js +0 -12
- package/dist/components/layout/StatusDot.js.map +0 -1
- package/dist/components/layout/StatusDot.module.css +0 -16
- package/dist/endpoints/set-messages.d.ts +0 -3
- package/dist/endpoints/set-messages.d.ts.map +0 -1
- package/dist/endpoints/set-messages.js +0 -105
- package/dist/endpoints/set-messages.js.map +0 -1
- package/dist/entities.d.ts +0 -5
- package/dist/entities.d.ts.map +0 -1
- package/dist/entities.js +0 -42
- package/dist/entities.js.map +0 -1
- package/dist/requests/fetchMessages.d.ts +0 -3
- package/dist/requests/fetchMessages.d.ts.map +0 -1
- package/dist/requests/fetchMessages.js +0 -40
- package/dist/requests/fetchMessages.js.map +0 -1
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/guards.d.ts.map +0 -1
- package/dist/utils/guards.js.map +0 -1
- package/dist/utils/icu-tranform.d.ts.map +0 -1
- package/dist/utils/icu-tranform.js.map +0 -1
- package/dist/utils/validate.d.ts.map +0 -1
- package/dist/utils/validate.js.map +0 -1
- /package/dist/components/{inputs → input}/ReferencePopover.module.css +0 -0
- /package/dist/components/{inputs → input}/SingleLinePlugin.d.ts +0 -0
- /package/dist/components/{inputs → input}/SingleLinePlugin.js +0 -0
- /package/dist/components/{hooks → input}/useHtmlLexicalAdapter.d.ts +0 -0
- /package/dist/components/{hooks → input}/useHtmlLexicalAdapter.js +0 -0
- /package/dist/components/{inputs → input}/variables/VariableChip.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/VariableChip.module.css +0 -0
- /package/dist/components/{inputs → input}/variables/VariableIcon.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/VariableIcon.js +0 -0
- /package/dist/components/{inputs → input}/variables/VariableNode.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/VariableNode.js +0 -0
- /package/dist/components/{inputs → input}/variables/VariableSuggestion.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/VariableSuggestion.js +0 -0
- /package/dist/components/{inputs → input}/variables/VariableSuggestion.module.css +0 -0
- /package/dist/components/{inputs → input}/variables/editors/PluralVariableEditor.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/editors/PluralVariableEditor.module.css +0 -0
- /package/dist/components/{inputs → input}/variables/editors/SelectVariableEditor.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/editors/SelectVariableEditor.module.css +0 -0
- /package/dist/components/{inputs → input}/variables/editors/TagVariableEditor.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/editors/TagVariableEditor.module.css +0 -0
- /package/dist/components/{inputs → input}/variables/editors/TemporalVariableEditor.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/editors/TemporalVariableEditor.js +0 -0
- /package/dist/components/{inputs → input}/variables/pickers/NumericVariableEditor.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/pickers/NumericVariableEditor.module.css +0 -0
- /package/dist/components/{inputs → input}/variables/pickers/TemporalVariablePicker.d.ts +0 -0
- /package/dist/components/{inputs → input}/variables/pickers/TemporalVariablePicker.module.css +0 -0
- /package/dist/{utils/config.js → config.js} +0 -0
- /package/dist/{utils → icu}/guards.d.ts +0 -0
- /package/dist/{utils → icu}/guards.js +0 -0
- /package/dist/{utils → icu}/validate.d.ts +0 -0
- /package/dist/{utils → icu}/validate.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/inputs/SingleLinePlugin.tsx"],"sourcesContent":["import {\n COMMAND_PRIORITY_HIGH,\n INSERT_LINE_BREAK_COMMAND,\n INSERT_PARAGRAPH_COMMAND,\n LineBreakNode,\n} from '@payloadcms/richtext-lexical/lexical';\nimport { useLexicalComposerContext } from '@payloadcms/richtext-lexical/lexical/react/LexicalComposerContext';\nimport { useEffect } from 'react';\n\nexport function SingleLinePlugin() {\n const [editor] = useLexicalComposerContext();\n useEffect(() => {\n const unregisterLineBreak = editor.registerCommand(\n INSERT_LINE_BREAK_COMMAND,\n () => true,\n COMMAND_PRIORITY_HIGH,\n );\n const unregisterParagraph = editor.registerCommand(\n INSERT_PARAGRAPH_COMMAND,\n () => true,\n COMMAND_PRIORITY_HIGH,\n );\n // Catch line breaks inserted via paste or other means\n const unregisterTransform = editor.registerNodeTransform(\n LineBreakNode,\n (node) => {\n node.remove();\n },\n );\n return () => {\n unregisterLineBreak();\n unregisterParagraph();\n unregisterTransform();\n };\n }, [editor]);\n return null;\n}\n"],"names":["COMMAND_PRIORITY_HIGH","INSERT_LINE_BREAK_COMMAND","INSERT_PARAGRAPH_COMMAND","LineBreakNode","useLexicalComposerContext","useEffect","SingleLinePlugin","editor","unregisterLineBreak","registerCommand","unregisterParagraph","unregisterTransform","registerNodeTransform","node","remove"],"mappings":"AAAA,SACEA,qBAAqB,EACrBC,yBAAyB,EACzBC,wBAAwB,EACxBC,aAAa,QACR,uCAAuC;AAC9C,SAASC,yBAAyB,QAAQ,oEAAoE;AAC9G,SAASC,SAAS,QAAQ,QAAQ;AAElC,OAAO,SAASC;IACd,MAAM,CAACC,OAAO,GAAGH;IACjBC,UAAU;QACR,MAAMG,sBAAsBD,OAAOE,eAAe,CAChDR,2BACA,IAAM,MACND;QAEF,MAAMU,sBAAsBH,OAAOE,eAAe,CAChDP,0BACA,IAAM,MACNF;QAEF,sDAAsD;QACtD,MAAMW,sBAAsBJ,OAAOK,qBAAqB,CACtDT,eACA,CAACU;YACCA,KAAKC,MAAM;QACb;QAEF,OAAO;YACLN;YACAE;YACAC;QACF;IACF,GAAG;QAACJ;KAAO;IACX,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VariableChip.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/variables/VariableChip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAwBpE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,iBAAiB,2CAqE5E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/inputs/variables/VariableChip.tsx"],"sourcesContent":["'use client';\n\nimport { Popover } from '@base-ui/react/popover';\nimport type { NodeKey } from '@payloadcms/richtext-lexical/lexical';\nimport { $getNodeByKey } from '@payloadcms/richtext-lexical/lexical';\nimport { useLexicalComposerContext } from '@payloadcms/richtext-lexical/lexical/react/LexicalComposerContext';\nimport clsx from 'clsx';\nimport type { BeautifulMentionNode } from 'lexical-beautiful-mentions';\nimport { useMemo } from 'react';\n\nimport {\n isArgumentElement,\n isNumericElement,\n isSelectElement,\n isTagElement,\n isTemporalElement,\n} from '@/utils/guards';\nimport { parseICUMessage } from '@/utils/icu-tranform';\n\nimport { SelectVariableEditor } from './editors/SelectVariableEditor';\nimport { TagVariableEditor } from './editors/TagVariableEditor';\nimport { NumericVariableEditor } from './pickers/NumericVariableEditor';\nimport { TemporalVariablePicker } from './pickers/TemporalVariablePicker';\nimport styles from './VariableChip.module.css';\n\nconst TEMPORAL_ELEMENTS_FLAG = false;\n\nexport interface VariableChipProps {\n name: string;\n label: string;\n icu: string;\n nodeKey: NodeKey;\n}\n\n// TODO replace popover with portal below input field\n\nexport function VariableChip({ name, label, icu, nodeKey }: VariableChipProps) {\n const [editor] = useLexicalComposerContext();\n\n const handleUpdate = (value: string) => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey) as BeautifulMentionNode | null;\n if (node) {\n node.setData({ ...node.getData(), icu: value });\n }\n });\n };\n\n const element = useMemo(() => {\n try {\n const [part] = parseICUMessage(icu);\n if (!part) throw new Error('No part found');\n return part;\n } catch (error) {\n console.error(error);\n throw new Error(`Invalid ICU: ${icu}`, { cause: error });\n }\n }, [icu]);\n\n const isDisabled =\n isArgumentElement(element) ||\n (isTemporalElement(element) && !TEMPORAL_ELEMENTS_FLAG);\n\n return (\n <Popover.Root>\n <Popover.Trigger\n render={\n <button\n className={clsx(styles.chip, isDisabled && styles.chipDisabled)}\n data-icu={icu}\n data-variable={name}\n type=\"button\"\n />\n }\n >\n {/* <VariableIcon type={element.type} className=\"size-4\" /> */}\n {label}\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Positioner align=\"start\" side=\"bottom\" sideOffset={5}>\n <Popover.Popup className={styles.popoverContent}>\n {isNumericElement(element) && (\n <NumericVariableEditor\n element={element}\n onUpdate={handleUpdate}\n />\n )}\n {isSelectElement(element) && (\n <SelectVariableEditor element={element} onUpdate={handleUpdate} />\n )}\n {TEMPORAL_ELEMENTS_FLAG && isTemporalElement(element) && (\n <TemporalVariablePicker\n element={element}\n onUpdate={handleUpdate}\n />\n )}\n\n {isTagElement(element) && (\n <TagVariableEditor element={element} onUpdate={handleUpdate} />\n )}\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n"],"names":["Popover","$getNodeByKey","useLexicalComposerContext","clsx","useMemo","isArgumentElement","isNumericElement","isSelectElement","isTagElement","isTemporalElement","parseICUMessage","SelectVariableEditor","TagVariableEditor","NumericVariableEditor","TemporalVariablePicker","styles","TEMPORAL_ELEMENTS_FLAG","VariableChip","name","label","icu","nodeKey","editor","handleUpdate","value","update","node","setData","getData","element","part","Error","error","console","cause","isDisabled","Root","Trigger","render","button","className","chip","chipDisabled","data-icu","data-variable","type","Portal","Positioner","align","side","sideOffset","Popup","popoverContent","onUpdate"],"mappings":"AAAA;;AAEA,SAASA,OAAO,QAAQ,yBAAyB;AAEjD,SAASC,aAAa,QAAQ,uCAAuC;AACrE,SAASC,yBAAyB,QAAQ,oEAAoE;AAC9G,OAAOC,UAAU,OAAO;AAExB,SAASC,OAAO,QAAQ,QAAQ;AAEhC,SACEC,iBAAiB,EACjBC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,EACZC,iBAAiB,QACZ,iBAAiB;AACxB,SAASC,eAAe,QAAQ,uBAAuB;AAEvD,SAASC,oBAAoB,QAAQ,iCAAiC;AACtE,SAASC,iBAAiB,QAAQ,8BAA8B;AAChE,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,sBAAsB,QAAQ,mCAAmC;AAC1E,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,yBAAyB;AAS/B,qDAAqD;AAErD,OAAO,SAASC,aAAa,EAAEC,IAAI,EAAEC,KAAK,EAAEC,GAAG,EAAEC,OAAO,EAAqB;IAC3E,MAAM,CAACC,OAAO,GAAGpB;IAEjB,MAAMqB,eAAe,CAACC;QACpBF,OAAOG,MAAM,CAAC;YACZ,MAAMC,OAAOzB,cAAcoB;YAC3B,IAAIK,MAAM;gBACRA,KAAKC,OAAO,CAAC;oBAAE,GAAGD,KAAKE,OAAO,EAAE;oBAAER,KAAKI;gBAAM;YAC/C;QACF;IACF;IAEA,MAAMK,UAAUzB,QAAQ;QACtB,IAAI;YACF,MAAM,CAAC0B,KAAK,GAAGpB,gBAAgBU;YAC/B,IAAI,CAACU,MAAM,MAAM,IAAIC,MAAM;YAC3B,OAAOD;QACT,EAAE,OAAOE,OAAO;YACdC,QAAQD,KAAK,CAACA;YACd,MAAM,IAAID,MAAM,CAAC,aAAa,EAAEX,KAAK,EAAE;gBAAEc,OAAOF;YAAM;QACxD;IACF,GAAG;QAACZ;KAAI;IAER,MAAMe,aACJ9B,kBAAkBwB,YACjBpB,kBAAkBoB,YAAY,CAACb;IAElC,qBACE,MAAChB,QAAQoC,IAAI;;0BACX,KAACpC,QAAQqC,OAAO;gBACdC,sBACE,KAACC;oBACCC,WAAWrC,KAAKY,OAAO0B,IAAI,EAAEN,cAAcpB,OAAO2B,YAAY;oBAC9DC,YAAUvB;oBACVwB,iBAAe1B;oBACf2B,MAAK;;0BAKR1B;;0BAEH,KAACnB,QAAQ8C,MAAM;0BACb,cAAA,KAAC9C,QAAQ+C,UAAU;oBAACC,OAAM;oBAAQC,MAAK;oBAASC,YAAY;8BAC1D,cAAA,MAAClD,QAAQmD,KAAK;wBAACX,WAAWzB,OAAOqC,cAAc;;4BAC5C9C,iBAAiBuB,0BAChB,KAAChB;gCACCgB,SAASA;gCACTwB,UAAU9B;;4BAGbhB,gBAAgBsB,0BACf,KAAClB;gCAAqBkB,SAASA;gCAASwB,UAAU9B;;4BAEnDP,0BAA0BP,kBAAkBoB,0BAC3C,KAACf;gCACCe,SAASA;gCACTwB,UAAU9B;;4BAIbf,aAAaqB,0BACZ,KAACjB;gCAAkBiB,SAASA;gCAASwB,UAAU9B;;;;;;;;AAO7D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VariableIcon.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/variables/VariableIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AASrD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;IAChE,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,kDAmBjE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/inputs/variables/VariableIcon.tsx"],"sourcesContent":["import { TYPE } from '@formatjs/icu-messageformat-parser';\nimport type { IconProps } from '@tabler/icons-react';\nimport {\n IconAntennaBars5,\n IconCalendar,\n IconClock,\n IconHash,\n IconLayoutList,\n} from '@tabler/icons-react';\n\nexport interface VariableIconProps extends Omit<IconProps, 'type'> {\n type: TYPE;\n}\n\nexport function VariableIcon({ type, ...props }: VariableIconProps) {\n switch (type) {\n case TYPE.literal:\n case TYPE.argument:\n case TYPE.pound:\n return null;\n case TYPE.number:\n return <IconHash {...props} />;\n case TYPE.date:\n return <IconCalendar {...props} />;\n case TYPE.time:\n return <IconClock {...props} />;\n case TYPE.select:\n return <IconLayoutList {...props} />;\n case TYPE.plural:\n return <IconAntennaBars5 {...props} />;\n case TYPE.tag:\n return null;\n }\n}\n"],"names":["TYPE","IconAntennaBars5","IconCalendar","IconClock","IconHash","IconLayoutList","VariableIcon","type","props","literal","argument","pound","number","date","time","select","plural","tag"],"mappings":";AAAA,SAASA,IAAI,QAAQ,qCAAqC;AAE1D,SACEC,gBAAgB,EAChBC,YAAY,EACZC,SAAS,EACTC,QAAQ,EACRC,cAAc,QACT,sBAAsB;AAM7B,OAAO,SAASC,aAAa,EAAEC,IAAI,EAAE,GAAGC,OAA0B;IAChE,OAAQD;QACN,KAAKP,KAAKS,OAAO;QACjB,KAAKT,KAAKU,QAAQ;QAClB,KAAKV,KAAKW,KAAK;YACb,OAAO;QACT,KAAKX,KAAKY,MAAM;YACd,qBAAO,KAACR;gBAAU,GAAGI,KAAK;;QAC5B,KAAKR,KAAKa,IAAI;YACZ,qBAAO,KAACX;gBAAc,GAAGM,KAAK;;QAChC,KAAKR,KAAKc,IAAI;YACZ,qBAAO,KAACX;gBAAW,GAAGK,KAAK;;QAC7B,KAAKR,KAAKe,MAAM;YACd,qBAAO,KAACV;gBAAgB,GAAGG,KAAK;;QAClC,KAAKR,KAAKgB,MAAM;YACd,qBAAO,KAACf;gBAAkB,GAAGO,KAAK;;QACpC,KAAKR,KAAKiB,GAAG;YACX,OAAO;IACX;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VariableNode.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/variables/VariableNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACd,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,KAAK,8BAA8B,EACpC,MAAM,4BAA4B,CAAC;AAIpC,qBAAa,mBAAoB,SAAQ,oBAAoB;IAC3D,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,GAAG,mBAAmB;IAS5D,MAAM,CAAC,UAAU,CACf,cAAc,EAAE,8BAA8B,GAC7C,mBAAmB;IAQtB,UAAU,IAAI,8BAA8B;IAO5C,cAAc,IAAI,MAAM;IAKxB,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO;CAW3E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/inputs/variables/VariableNode.tsx"],"sourcesContent":["'use client';\n\nimport type {\n EditorConfig,\n LexicalEditor,\n} from '@payloadcms/richtext-lexical/lexical';\nimport {\n BeautifulMentionNode,\n type SerializedBeautifulMentionNode,\n} from 'lexical-beautiful-mentions';\n\nimport { VariableChip } from './VariableChip';\n\nexport class VariableMentionNode extends BeautifulMentionNode {\n static getType(): string {\n return 'variableMention';\n }\n\n static clone(node: VariableMentionNode): VariableMentionNode {\n return new VariableMentionNode(\n node.__trigger,\n node.__value,\n node.__data,\n node.__key,\n );\n }\n\n static importJSON(\n serializedNode: SerializedBeautifulMentionNode,\n ): VariableMentionNode {\n return new VariableMentionNode(\n serializedNode.trigger,\n serializedNode.value,\n serializedNode.data,\n );\n }\n\n exportJSON(): SerializedBeautifulMentionNode {\n return {\n ...super.exportJSON(),\n type: 'variableMention',\n };\n }\n\n getTextContent(): string {\n const icu = this.__data?.icu;\n return typeof icu === 'string' ? icu : `{${this.__value}}`;\n }\n\n decorate(_editor: LexicalEditor, _config: EditorConfig): React.JSX.Element {\n const data = this.__data;\n return (\n <VariableChip\n icu={this.getTextContent()}\n label={typeof data?.label === 'string' ? data.label : this.__value}\n name={this.__value}\n nodeKey={this.__key}\n />\n );\n }\n}\n"],"names":["BeautifulMentionNode","VariableChip","VariableMentionNode","getType","clone","node","__trigger","__value","__data","__key","importJSON","serializedNode","trigger","value","data","exportJSON","type","getTextContent","icu","decorate","_editor","_config","label","name","nodeKey"],"mappings":"AAAA;;AAMA,SACEA,oBAAoB,QAEf,6BAA6B;AAEpC,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,OAAO,MAAMC,4BAA4BF;IACvC,OAAOG,UAAkB;QACvB,OAAO;IACT;IAEA,OAAOC,MAAMC,IAAyB,EAAuB;QAC3D,OAAO,IAAIH,oBACTG,KAAKC,SAAS,EACdD,KAAKE,OAAO,EACZF,KAAKG,MAAM,EACXH,KAAKI,KAAK;IAEd;IAEA,OAAOC,WACLC,cAA8C,EACzB;QACrB,OAAO,IAAIT,oBACTS,eAAeC,OAAO,EACtBD,eAAeE,KAAK,EACpBF,eAAeG,IAAI;IAEvB;IAEAC,aAA6C;QAC3C,OAAO;YACL,GAAG,KAAK,CAACA,YAAY;YACrBC,MAAM;QACR;IACF;IAEAC,iBAAyB;QACvB,MAAMC,MAAM,IAAI,CAACV,MAAM,EAAEU;QACzB,OAAO,OAAOA,QAAQ,WAAWA,MAAM,CAAC,CAAC,EAAE,IAAI,CAACX,OAAO,CAAC,CAAC,CAAC;IAC5D;IAEAY,SAASC,OAAsB,EAAEC,OAAqB,EAAqB;QACzE,MAAMP,OAAO,IAAI,CAACN,MAAM;QACxB,qBACE,KAACP;YACCiB,KAAK,IAAI,CAACD,cAAc;YACxBK,OAAO,OAAOR,MAAMQ,UAAU,WAAWR,KAAKQ,KAAK,GAAG,IAAI,CAACf,OAAO;YAClEgB,MAAM,IAAI,CAAChB,OAAO;YAClBiB,SAAS,IAAI,CAACf,KAAK;;IAGzB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VariableSuggestion.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/variables/VariableSuggestion.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,0BAA0B,EAC3B,MAAM,4BAA4B,CAAC;AAKpC,eAAO,MAAM,WAAW,sIAKtB,CAAC;AAEH,eAAO,MAAM,eAAe,uIAoB1B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/inputs/variables/VariableSuggestion.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type {\n BeautifulMentionsMenuItemProps,\n BeautifulMentionsMenuProps,\n} from 'lexical-beautiful-mentions';\nimport { forwardRef } from 'react';\n\nimport styles from './VariableSuggestion.module.css';\n\nexport const MentionMenu = forwardRef<\n HTMLUListElement,\n BeautifulMentionsMenuProps\n>(({ loading: _, ...props }, ref) => (\n <ul {...props} className={styles.list} ref={ref} />\n));\n\nexport const MentionMenuItem = forwardRef<\n HTMLLIElement,\n BeautifulMentionsMenuItemProps\n>((props, ref) => (\n <li\n aria-selected={props.selected}\n className={clsx(styles.item, props.selected && styles.itemSelected)}\n onClick={props.onClick}\n onKeyDown={props.onKeyDown}\n onMouseDown={props.onMouseDown}\n onMouseEnter={props.onMouseEnter}\n ref={ref}\n // biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: standard WAI-ARIA listbox/option pattern\n role=\"option\"\n tabIndex={-1}\n >\n {typeof props.item.data?.label === 'string'\n ? props.item.data.label\n : props.item.displayValue}\n </li>\n));\n"],"names":["clsx","forwardRef","styles","MentionMenu","loading","_","props","ref","ul","className","list","MentionMenuItem","li","aria-selected","selected","item","itemSelected","onClick","onKeyDown","onMouseDown","onMouseEnter","role","tabIndex","data","label","displayValue"],"mappings":";AAAA,OAAOA,UAAU,OAAO;AAKxB,SAASC,UAAU,QAAQ,QAAQ;AAEnC,OAAOC,YAAY,kCAAkC;AAErD,OAAO,MAAMC,4BAAcF,WAGzB,CAAC,EAAEG,SAASC,CAAC,EAAE,GAAGC,OAAO,EAAEC,oBAC3B,KAACC;QAAI,GAAGF,KAAK;QAAEG,WAAWP,OAAOQ,IAAI;QAAEH,KAAKA;QAC3C;AAEH,OAAO,MAAMI,gCAAkBV,WAG7B,CAACK,OAAOC,oBACR,KAACK;QACCC,iBAAeP,MAAMQ,QAAQ;QAC7BL,WAAWT,KAAKE,OAAOa,IAAI,EAAET,MAAMQ,QAAQ,IAAIZ,OAAOc,YAAY;QAClEC,SAASX,MAAMW,OAAO;QACtBC,WAAWZ,MAAMY,SAAS;QAC1BC,aAAab,MAAMa,WAAW;QAC9BC,cAAcd,MAAMc,YAAY;QAChCb,KAAKA;QACL,4GAA4G;QAC5Gc,MAAK;QACLC,UAAU,CAAC;kBAEV,OAAOhB,MAAMS,IAAI,CAACQ,IAAI,EAAEC,UAAU,WAC/BlB,MAAMS,IAAI,CAACQ,IAAI,CAACC,KAAK,GACrBlB,MAAMS,IAAI,CAACU,YAAY;QAE5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PluralVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/editors/PluralVariableEditor.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQ7C,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IACnC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C;AAID,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,OAAO,EACP,GAAG,GACJ,EAAE,yBAAyB,2CAyK3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/inputs/variables/editors/PluralVariableEditor.tsx"],"sourcesContent":["import { Popover } from '@base-ui/react/popover';\nimport { TYPE } from '@formatjs/icu-messageformat-parser';\nimport { IconX } from '@tabler/icons-react';\nimport { Fragment, useImperativeHandle, useMemo } from 'react';\nimport { Controller, useFieldArray, useForm } from 'react-hook-form';\nimport type { PluralElement } from '@/types';\n\nimport { parseICUMessage, serializeICUMessage } from '@/utils/icu-tranform';\n\nimport styles from './PluralVariableEditor.module.css';\n\nconst NAMED_PLURAL_OPTIONS = ['zero', 'one', 'two', 'few', 'many'] as const;\n\nexport interface PluralVariableEditorProps {\n variableName: string;\n element: PluralElement | undefined;\n ref: React.Ref<{ getValue: () => string }>;\n}\n\n// TODO add support for selectordinal (\"pluralType\": \"ordinal\")\n\nexport function PluralVariableEditor({\n variableName,\n element,\n ref,\n}: PluralVariableEditorProps) {\n const config = useMemo<{\n offset: number;\n options: { name: string; content: string }[];\n other: string;\n }>(() => {\n const { other, ...options } = element?.options ?? {};\n return {\n offset: element?.offset ?? 0,\n options: Object.entries(options).map(([name, option]) => ({\n name,\n content: serializeICUMessage(option.value),\n })),\n other: serializeICUMessage(other ? other.value : []),\n };\n }, [element]);\n\n const { control, register, getValues } = useForm<{\n offset: number;\n options: { name: string; content: string }[];\n other: string;\n customValue?: number;\n }>({\n defaultValues: config,\n });\n\n useImperativeHandle(ref, () => ({\n getValue: () => {\n const values = getValues();\n const updatedElement: PluralElement = {\n type: TYPE.plural,\n value: variableName,\n offset: values.offset,\n pluralType: element?.pluralType ?? 'cardinal',\n options: Object.fromEntries(\n values.options.map(({ name, content }) => [\n name,\n { value: parseICUMessage(content) },\n ]),\n ),\n };\n return serializeICUMessage([updatedElement]);\n },\n }));\n\n const options = useFieldArray({\n control,\n name: 'options',\n });\n\n return (\n <div className={styles.root}>\n <fieldset className={styles.optionsFieldset}>\n <legend>Options</legend>\n {options.fields.map((field, index) => (\n <Fragment key={field.id}>\n <label htmlFor={`options.${index}`}>{field.name}</label>\n {/* // TODO add support for variable mentions */}\n <input\n className={styles.input}\n type=\"text\"\n {...register(`options.${index}.content`, { required: true })}\n />\n <button\n className={styles.removeButton}\n onClick={() => options.remove(index)}\n type=\"button\"\n >\n <IconX size={16} />\n </button>\n </Fragment>\n ))}\n\n <label htmlFor=\"other\">other</label>\n {/* // TODO add support for variable mentions */}\n <input\n className={styles.inputSpan2}\n type=\"text\"\n {...register('other', { required: true })}\n />\n </fieldset>\n <div className={styles.controlsGrid}>\n <label className={styles.offsetLabel}>\n offset\n <input\n className={styles.offsetInput}\n placeholder=\"0\"\n type=\"numeric\"\n {...register('offset')}\n />\n </label>\n <Popover.Root>\n <Popover.Trigger>Add Option</Popover.Trigger>\n <Popover.Portal>\n <Popover.Positioner sideOffset={4}>\n <Popover.Popup className={styles.popoverContent}>\n <div className={styles.optionsList}>\n {NAMED_PLURAL_OPTIONS.filter((option) =>\n options.fields.every((field) => field.name !== option),\n ).map((option) => (\n <Popover.Close\n className={styles.optionItem}\n key={option}\n onClick={() => {\n // TODO ensure the fields are always in the same order as staticPluralOptions\n options.append(\n {\n name: option,\n content: '',\n },\n {\n shouldFocus: true,\n },\n );\n }}\n >\n {option}\n </Popover.Close>\n ))}\n </div>\n\n <div className={styles.customInputGroup}>\n <label htmlFor=\"customValue\">custom</label>\n <Controller\n control={control}\n name=\"customValue\"\n render={({ field }) => (\n <input\n className={styles.customInput}\n min={0}\n onChange={({ currentTarget: { value } }) => {\n const number = Number(value);\n if (Number.isNaN(number)) return;\n if (number < 0) return;\n field.onChange(number);\n }}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n if (field.value === undefined) return;\n const isUnique = !options.fields.some(\n (existingField) =>\n existingField.name === `=${field.value}`,\n );\n if (!isUnique) return; // TODO maybe show error?\n options.append(\n {\n name: `=${field.value}`,\n content: '',\n },\n {\n shouldFocus: true,\n },\n );\n field.onChange(undefined);\n }}\n placeholder=\"=0\"\n type=\"numeric\"\n value={field.value ?? ''}\n />\n )}\n />\n </div>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n </div>\n </div>\n );\n}\n"],"names":["Popover","TYPE","IconX","Fragment","useImperativeHandle","useMemo","Controller","useFieldArray","useForm","parseICUMessage","serializeICUMessage","styles","NAMED_PLURAL_OPTIONS","PluralVariableEditor","variableName","element","ref","config","other","options","offset","Object","entries","map","name","option","content","value","control","register","getValues","defaultValues","getValue","values","updatedElement","type","plural","pluralType","fromEntries","div","className","root","fieldset","optionsFieldset","legend","fields","field","index","label","htmlFor","input","required","button","removeButton","onClick","remove","size","id","inputSpan2","controlsGrid","offsetLabel","offsetInput","placeholder","Root","Trigger","Portal","Positioner","sideOffset","Popup","popoverContent","optionsList","filter","every","Close","optionItem","append","shouldFocus","customInputGroup","render","customInput","min","onChange","currentTarget","number","Number","isNaN","onKeyDown","e","key","undefined","isUnique","some","existingField"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/editors/SelectVariableEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAM7C,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,QAAQ,GACT,EAAE,yBAAyB,2CAqD3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/inputs/variables/editors/SelectVariableEditor.tsx"],"sourcesContent":["import { useEffect, useMemo } from 'react';\nimport { useFieldArray, useForm } from 'react-hook-form';\nimport type { SelectElement } from '@/types';\n\nimport { parseICUMessage, serializeICUMessage } from '@/utils/icu-tranform';\n\nimport styles from './SelectVariableEditor.module.css';\n\nexport interface SelectVariableEditorProps {\n element: SelectElement;\n onUpdate: (value: string) => void;\n}\n\nexport function SelectVariableEditor({\n element,\n onUpdate,\n}: SelectVariableEditorProps) {\n const options = useMemo<{ name: string; content: string }[]>(\n () =>\n Object.entries(element.options).map(([name, option]) => ({\n name,\n content: serializeICUMessage(option.value),\n })),\n [element],\n );\n\n const { control, register, getValues } = useForm<{\n options: { name: string; content: string }[];\n }>({\n defaultValues: { options },\n });\n const { fields } = useFieldArray({\n control,\n name: 'options',\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: useEffectEvent\n useEffect(() => {\n return () => {\n const values = getValues();\n const updatedElement: SelectElement = {\n ...element,\n options: Object.fromEntries(\n values.options.map(({ name, content }) => [\n name,\n { value: parseICUMessage(content) },\n ]),\n ),\n };\n onUpdate(serializeICUMessage([updatedElement]));\n };\n }, []);\n\n return (\n <div className={styles.root}>\n {fields.map((field, index) => (\n <div className={styles.field} key={field.name}>\n <label className={styles.label} htmlFor={`options.${index}.content`}>\n {field.name}\n </label>\n {/* // TODO add support for variable mentions */}\n <input\n className={styles.input}\n {...register(`options.${index}.content`)}\n />\n </div>\n ))}\n </div>\n );\n}\n"],"names":["useEffect","useMemo","useFieldArray","useForm","parseICUMessage","serializeICUMessage","styles","SelectVariableEditor","element","onUpdate","options","Object","entries","map","name","option","content","value","control","register","getValues","defaultValues","fields","values","updatedElement","fromEntries","div","className","root","field","index","label","htmlFor","input"],"mappings":";AAAA,SAASA,SAAS,EAAEC,OAAO,QAAQ,QAAQ;AAC3C,SAASC,aAAa,EAAEC,OAAO,QAAQ,kBAAkB;AAGzD,SAASC,eAAe,EAAEC,mBAAmB,QAAQ,uBAAuB;AAE5E,OAAOC,YAAY,oCAAoC;AAOvD,OAAO,SAASC,qBAAqB,EACnCC,OAAO,EACPC,QAAQ,EACkB;IAC1B,MAAMC,UAAUT,QACd,IACEU,OAAOC,OAAO,CAACJ,QAAQE,OAAO,EAAEG,GAAG,CAAC,CAAC,CAACC,MAAMC,OAAO,GAAM,CAAA;gBACvDD;gBACAE,SAASX,oBAAoBU,OAAOE,KAAK;YAC3C,CAAA,IACF;QAACT;KAAQ;IAGX,MAAM,EAAEU,OAAO,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGjB,QAEtC;QACDkB,eAAe;YAAEX;QAAQ;IAC3B;IACA,MAAM,EAAEY,MAAM,EAAE,GAAGpB,cAAc;QAC/BgB;QACAJ,MAAM;IACR;IAEA,0EAA0E;IAC1Ed,UAAU;QACR,OAAO;YACL,MAAMuB,SAASH;YACf,MAAMI,iBAAgC;gBACpC,GAAGhB,OAAO;gBACVE,SAASC,OAAOc,WAAW,CACzBF,OAAOb,OAAO,CAACG,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEE,OAAO,EAAE,GAAK;wBACxCF;wBACA;4BAAEG,OAAOb,gBAAgBY;wBAAS;qBACnC;YAEL;YACAP,SAASJ,oBAAoB;gBAACmB;aAAe;QAC/C;IACF,GAAG,EAAE;IAEL,qBACE,KAACE;QAAIC,WAAWrB,OAAOsB,IAAI;kBACxBN,OAAOT,GAAG,CAAC,CAACgB,OAAOC,sBAClB,MAACJ;gBAAIC,WAAWrB,OAAOuB,KAAK;;kCAC1B,KAACE;wBAAMJ,WAAWrB,OAAOyB,KAAK;wBAAEC,SAAS,CAAC,QAAQ,EAAEF,MAAM,QAAQ,CAAC;kCAChED,MAAMf,IAAI;;kCAGb,KAACmB;wBACCN,WAAWrB,OAAO2B,KAAK;wBACtB,GAAGd,SAAS,CAAC,QAAQ,EAAEW,MAAM,QAAQ,CAAC,CAAC;;;eAPTD,MAAMf,IAAI;;AAarD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TagVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/editors/TagVariableEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAM1C,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,QAAQ,GACT,EAAE,sBAAsB,2CA2BxB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/inputs/variables/editors/TagVariableEditor.tsx"],"sourcesContent":["import { useEffect, useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport type { TagElement } from '@/types';\n\nimport { parseICUMessage, serializeICUMessage } from '@/utils/icu-tranform';\n\nimport styles from './TagVariableEditor.module.css';\n\nexport interface TagVariableEditorProps {\n element: TagElement;\n onUpdate: (value: string) => void;\n}\n\nexport function TagVariableEditor({\n element,\n onUpdate,\n}: TagVariableEditorProps) {\n const content = useMemo<string>(\n () => serializeICUMessage(element.children),\n [element],\n );\n\n const { register, getValues } = useForm<{ content: string }>({\n defaultValues: { content },\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: useEffectEvent\n useEffect(() => {\n return () => {\n const { content } = getValues();\n // TODO find better solution for this\n const updatedElement: TagElement = {\n ...element,\n children: parseICUMessage(content),\n };\n onUpdate(serializeICUMessage([updatedElement]));\n };\n }, []);\n\n // TODO add support for variable mentions\n return (\n <textarea className={styles.textarea} {...register('content')} rows={1} />\n );\n}\n"],"names":["useEffect","useMemo","useForm","parseICUMessage","serializeICUMessage","styles","TagVariableEditor","element","onUpdate","content","children","register","getValues","defaultValues","updatedElement","textarea","className","rows"],"mappings":";AAAA,SAASA,SAAS,EAAEC,OAAO,QAAQ,QAAQ;AAC3C,SAASC,OAAO,QAAQ,kBAAkB;AAG1C,SAASC,eAAe,EAAEC,mBAAmB,QAAQ,uBAAuB;AAE5E,OAAOC,YAAY,iCAAiC;AAOpD,OAAO,SAASC,kBAAkB,EAChCC,OAAO,EACPC,QAAQ,EACe;IACvB,MAAMC,UAAUR,QACd,IAAMG,oBAAoBG,QAAQG,QAAQ,GAC1C;QAACH;KAAQ;IAGX,MAAM,EAAEI,QAAQ,EAAEC,SAAS,EAAE,GAAGV,QAA6B;QAC3DW,eAAe;YAAEJ;QAAQ;IAC3B;IAEA,0EAA0E;IAC1ET,UAAU;QACR,OAAO;YACL,MAAM,EAAES,OAAO,EAAE,GAAGG;YACpB,qCAAqC;YACrC,MAAME,iBAA6B;gBACjC,GAAGP,OAAO;gBACVG,UAAUP,gBAAgBM;YAC5B;YACAD,SAASJ,oBAAoB;gBAACU;aAAe;QAC/C;IACF,GAAG,EAAE;IAEL,yCAAyC;IACzC,qBACE,KAACC;QAASC,WAAWX,OAAOU,QAAQ;QAAG,GAAGJ,SAAS,UAAU;QAAEM,MAAM;;AAEzE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TemporalVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/editors/TemporalVariableEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/C,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C;AAED,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,GAAG,GACJ,EAAE,2BAA2B,2CAS7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/inputs/variables/editors/TemporalVariableEditor.tsx"],"sourcesContent":["import { useImperativeHandle } from 'react';\nimport type { DateElement, TimeElement } from '@/types';\n\nexport interface TemporalVariableEditorProps {\n type: 'date' | 'time';\n name: string;\n element: DateElement | TimeElement | undefined;\n ref: React.Ref<{ getValue: () => string }>;\n}\n\nexport function TemporalVariableEditor({\n type,\n ref,\n}: TemporalVariableEditorProps) {\n useImperativeHandle(ref, () => ({\n getValue: () => {\n // TODO\n return '';\n },\n }));\n\n return <>{type === 'date' ? 'DateElementEditor' : 'TimeElementEditor'}</>;\n}\n"],"names":["useImperativeHandle","TemporalVariableEditor","type","ref","getValue"],"mappings":";AAAA,SAASA,mBAAmB,QAAQ,QAAQ;AAU5C,OAAO,SAASC,uBAAuB,EACrCC,IAAI,EACJC,GAAG,EACyB;IAC5BH,oBAAoBG,KAAK,IAAO,CAAA;YAC9BC,UAAU;gBACR,OAAO;gBACP,OAAO;YACT;QACF,CAAA;IAEA,qBAAO;kBAAGF,SAAS,SAAS,sBAAsB;;AACpD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NumericVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/pickers/NumericVariableEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAe5D,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,aAAa,GAAG,aAAa,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,QAAQ,GACT,EAAE,0BAA0B,2CA6C5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/inputs/variables/pickers/NumericVariableEditor.tsx"],"sourcesContent":["import { Toggle } from '@base-ui/react/toggle';\nimport { ToggleGroup } from '@base-ui/react/toggle-group';\nimport { useEffect, useRef, useState } from 'react';\nimport type { NumberElement, PluralElement } from '@/types';\n\nimport { isNumberElement, isPluralElement } from '@/utils/guards';\n\nimport { PluralVariableEditor } from '../editors/PluralVariableEditor';\nimport styles from './NumericVariableEditor.module.css';\n\nconst NUMERIC_TYPES = [\n 'number',\n 'plural',\n // \"selectordinal\"\n] as const;\n\ntype NumericType = (typeof NUMERIC_TYPES)[number];\n\nexport interface NumericVariableEditorProps {\n element: NumberElement | PluralElement;\n onUpdate: (value: string) => void;\n}\n\nexport function NumericVariableEditor({\n element,\n onUpdate,\n}: NumericVariableEditorProps) {\n const [type, setType] = useState<NumericType | undefined>(() => {\n if (isNumberElement(element)) return 'number';\n if (isPluralElement(element)) return 'plural';\n return undefined;\n });\n const getValueRef = useRef<{ getValue: () => string }>(null);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: useEffectEvent\n useEffect(() => {\n return () => {\n if (!getValueRef.current) return;\n onUpdate(getValueRef.current.getValue());\n };\n }, []);\n\n return (\n <div>\n <ToggleGroup\n className={styles.toggleGroup}\n onValueChange={(newValue) => {\n if (newValue.length === 0) return;\n const next = newValue.find((v) => v !== type);\n if (next) setType(next as NumericType);\n }}\n value={type ? [type] : []}\n >\n {NUMERIC_TYPES.map((type) => (\n <Toggle className={styles.toggleItem} key={type} value={type}>\n {type}\n </Toggle>\n ))}\n </ToggleGroup>\n\n <div className={styles.content}>\n {type === 'plural' && (\n <PluralVariableEditor\n element={isPluralElement(element) ? element : undefined}\n ref={getValueRef}\n variableName={element.value}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["Toggle","ToggleGroup","useEffect","useRef","useState","isNumberElement","isPluralElement","PluralVariableEditor","styles","NUMERIC_TYPES","NumericVariableEditor","element","onUpdate","type","setType","undefined","getValueRef","current","getValue","div","className","toggleGroup","onValueChange","newValue","length","next","find","v","value","map","toggleItem","content","ref","variableName"],"mappings":";AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,eAAe,EAAEC,eAAe,QAAQ,iBAAiB;AAElE,SAASC,oBAAoB,QAAQ,kCAAkC;AACvE,OAAOC,YAAY,qCAAqC;AAExD,MAAMC,gBAAgB;IACpB;IACA;CAED;AASD,OAAO,SAASC,sBAAsB,EACpCC,OAAO,EACPC,QAAQ,EACmB;IAC3B,MAAM,CAACC,MAAMC,QAAQ,GAAGV,SAAkC;QACxD,IAAIC,gBAAgBM,UAAU,OAAO;QACrC,IAAIL,gBAAgBK,UAAU,OAAO;QACrC,OAAOI;IACT;IACA,MAAMC,cAAcb,OAAmC;IAEvD,0EAA0E;IAC1ED,UAAU;QACR,OAAO;YACL,IAAI,CAACc,YAAYC,OAAO,EAAE;YAC1BL,SAASI,YAAYC,OAAO,CAACC,QAAQ;QACvC;IACF,GAAG,EAAE;IAEL,qBACE,MAACC;;0BACC,KAAClB;gBACCmB,WAAWZ,OAAOa,WAAW;gBAC7BC,eAAe,CAACC;oBACd,IAAIA,SAASC,MAAM,KAAK,GAAG;oBAC3B,MAAMC,OAAOF,SAASG,IAAI,CAAC,CAACC,IAAMA,MAAMd;oBACxC,IAAIY,MAAMX,QAAQW;gBACpB;gBACAG,OAAOf,OAAO;oBAACA;iBAAK,GAAG,EAAE;0BAExBJ,cAAcoB,GAAG,CAAC,CAAChB,qBAClB,KAACb;wBAAOoB,WAAWZ,OAAOsB,UAAU;wBAAaF,OAAOf;kCACrDA;uBADwCA;;0BAM/C,KAACM;gBAAIC,WAAWZ,OAAOuB,OAAO;0BAC3BlB,SAAS,0BACR,KAACN;oBACCI,SAASL,gBAAgBK,WAAWA,UAAUI;oBAC9CiB,KAAKhB;oBACLiB,cAActB,QAAQiB,KAAK;;;;;AAMvC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TemporalVariablePicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/pickers/TemporalVariablePicker.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAWxD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,QAAQ,GACT,EAAE,2BAA2B,2CAsD7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/inputs/variables/pickers/TemporalVariablePicker.tsx"],"sourcesContent":["import { Toggle } from '@base-ui/react/toggle';\nimport { ToggleGroup } from '@base-ui/react/toggle-group';\nimport { useEffect, useRef, useState } from 'react';\nimport type { DateElement, TimeElement } from '@/types';\n\nimport { isDateElement, isTimeElement } from '@/utils/guards';\n\nimport { TemporalVariableEditor } from '../editors/TemporalVariableEditor';\nimport styles from './TemporalVariablePicker.module.css';\n\nconst TEMPORAL_TYPES = ['date', 'time'] as const;\n\ntype TemporalType = (typeof TEMPORAL_TYPES)[number];\n\nexport interface TemporalVariablePickerProps {\n element: DateElement | TimeElement;\n onUpdate: (value: string) => void;\n}\n\nexport function TemporalVariablePicker({\n element,\n onUpdate,\n}: TemporalVariablePickerProps) {\n const [type, setType] = useState<TemporalType | undefined>(() => {\n if (isDateElement(element)) return 'date';\n if (isTimeElement(element)) return 'time';\n return undefined;\n });\n const getValueRef = useRef<{ getValue: () => string }>(null);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: useEffectEvent\n useEffect(() => {\n return () => {\n if (!getValueRef.current) return;\n onUpdate(getValueRef.current.getValue());\n };\n }, []);\n\n return (\n <div>\n <ToggleGroup\n className={styles.toggleGroup}\n onValueChange={(newValue) => {\n if (newValue.length === 0) return;\n const next = newValue.find((v) => v !== type);\n if (next) setType(next as TemporalType);\n }}\n value={type ? [type] : []}\n >\n {TEMPORAL_TYPES.map((type) => (\n <Toggle className={styles.toggleItem} key={type} value={type}>\n {type}\n </Toggle>\n ))}\n </ToggleGroup>\n\n <div className={styles.content}>\n {type && (\n <TemporalVariableEditor\n element={\n type === 'date'\n ? isDateElement(element)\n ? element\n : undefined\n : isTimeElement(element)\n ? element\n : undefined\n }\n name={element.value}\n ref={getValueRef}\n type={type}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["Toggle","ToggleGroup","useEffect","useRef","useState","isDateElement","isTimeElement","TemporalVariableEditor","styles","TEMPORAL_TYPES","TemporalVariablePicker","element","onUpdate","type","setType","undefined","getValueRef","current","getValue","div","className","toggleGroup","onValueChange","newValue","length","next","find","v","value","map","toggleItem","content","name","ref"],"mappings":";AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,aAAa,EAAEC,aAAa,QAAQ,iBAAiB;AAE9D,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,OAAOC,YAAY,sCAAsC;AAEzD,MAAMC,iBAAiB;IAAC;IAAQ;CAAO;AASvC,OAAO,SAASC,uBAAuB,EACrCC,OAAO,EACPC,QAAQ,EACoB;IAC5B,MAAM,CAACC,MAAMC,QAAQ,GAAGV,SAAmC;QACzD,IAAIC,cAAcM,UAAU,OAAO;QACnC,IAAIL,cAAcK,UAAU,OAAO;QACnC,OAAOI;IACT;IACA,MAAMC,cAAcb,OAAmC;IAEvD,0EAA0E;IAC1ED,UAAU;QACR,OAAO;YACL,IAAI,CAACc,YAAYC,OAAO,EAAE;YAC1BL,SAASI,YAAYC,OAAO,CAACC,QAAQ;QACvC;IACF,GAAG,EAAE;IAEL,qBACE,MAACC;;0BACC,KAAClB;gBACCmB,WAAWZ,OAAOa,WAAW;gBAC7BC,eAAe,CAACC;oBACd,IAAIA,SAASC,MAAM,KAAK,GAAG;oBAC3B,MAAMC,OAAOF,SAASG,IAAI,CAAC,CAACC,IAAMA,MAAMd;oBACxC,IAAIY,MAAMX,QAAQW;gBACpB;gBACAG,OAAOf,OAAO;oBAACA;iBAAK,GAAG,EAAE;0BAExBJ,eAAeoB,GAAG,CAAC,CAAChB,qBACnB,KAACb;wBAAOoB,WAAWZ,OAAOsB,UAAU;wBAAaF,OAAOf;kCACrDA;uBADwCA;;0BAM/C,KAACM;gBAAIC,WAAWZ,OAAOuB,OAAO;0BAC3BlB,sBACC,KAACN;oBACCI,SACEE,SAAS,SACLR,cAAcM,WACZA,UACAI,YACFT,cAAcK,WACZA,UACAI;oBAERiB,MAAMrB,QAAQiB,KAAK;oBACnBK,KAAKjB;oBACLH,MAAMA;;;;;AAMlB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GroupStatusDot.d.ts","sourceRoot":"","sources":["../../../src/components/layout/GroupStatusDot.tsx"],"names":[],"mappings":"AAaA,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,mBAAmB,2CAK3D"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useWatch } from 'react-hook-form';
|
|
3
|
-
import { useMessagesForm } from '../../components/MessagesFormProvider';
|
|
4
|
-
import { StatusDot } from './StatusDot';
|
|
5
|
-
function isFullyTranslated(values) {
|
|
6
|
-
if (typeof values === 'string') return values.length > 0;
|
|
7
|
-
if (values && typeof values === 'object') {
|
|
8
|
-
return Object.values(values).every(isFullyTranslated);
|
|
9
|
-
}
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
export function GroupStatusDot({ path }) {
|
|
13
|
-
const { control, activeLocale } = useMessagesForm();
|
|
14
|
-
const value = useWatch({
|
|
15
|
-
control,
|
|
16
|
-
name: `${activeLocale}.${path}`
|
|
17
|
-
});
|
|
18
|
-
const status = isFullyTranslated(value) ? 'translated' : 'missing';
|
|
19
|
-
return /*#__PURE__*/ _jsx(StatusDot, {
|
|
20
|
-
status: status
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=GroupStatusDot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layout/GroupStatusDot.tsx"],"sourcesContent":["import { useWatch } from 'react-hook-form';\nimport { useMessagesForm } from '@/components/MessagesFormProvider';\n\nimport { StatusDot } from './StatusDot';\n\nfunction isFullyTranslated(values: unknown): boolean {\n if (typeof values === 'string') return values.length > 0;\n if (values && typeof values === 'object') {\n return Object.values(values).every(isFullyTranslated);\n }\n return false;\n}\n\ninterface GroupStatusDotProps {\n path: string;\n}\n\nexport function GroupStatusDot({ path }: GroupStatusDotProps) {\n const { control, activeLocale } = useMessagesForm();\n const value = useWatch({ control, name: `${activeLocale}.${path}` as never });\n const status = isFullyTranslated(value) ? 'translated' : 'missing';\n return <StatusDot status={status} />;\n}\n"],"names":["useWatch","useMessagesForm","StatusDot","isFullyTranslated","values","length","Object","every","GroupStatusDot","path","control","activeLocale","value","name","status"],"mappings":";AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAC3C,SAASC,eAAe,QAAQ,oCAAoC;AAEpE,SAASC,SAAS,QAAQ,cAAc;AAExC,SAASC,kBAAkBC,MAAe;IACxC,IAAI,OAAOA,WAAW,UAAU,OAAOA,OAAOC,MAAM,GAAG;IACvD,IAAID,UAAU,OAAOA,WAAW,UAAU;QACxC,OAAOE,OAAOF,MAAM,CAACA,QAAQG,KAAK,CAACJ;IACrC;IACA,OAAO;AACT;AAMA,OAAO,SAASK,eAAe,EAAEC,IAAI,EAAuB;IAC1D,MAAM,EAAEC,OAAO,EAAEC,YAAY,EAAE,GAAGV;IAClC,MAAMW,QAAQZ,SAAS;QAAEU;QAASG,MAAM,GAAGF,aAAa,CAAC,EAAEF,MAAM;IAAU;IAC3E,MAAMK,SAASX,kBAAkBS,SAAS,eAAe;IACzD,qBAAO,KAACV;QAAUY,QAAQA;;AAC5B"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
type TranslationStatus = 'translated' | 'missing';
|
|
2
|
-
interface StatusDotProps {
|
|
3
|
-
status: TranslationStatus;
|
|
4
|
-
}
|
|
5
|
-
export declare function StatusDot({ status }: StatusDotProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
export {};
|
|
7
|
-
//# sourceMappingURL=StatusDot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusDot.d.ts","sourceRoot":"","sources":["../../../src/components/layout/StatusDot.tsx"],"names":[],"mappings":"AAGA,KAAK,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;AAElD,UAAU,cAAc;IACtB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,2CAanD"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import clsx from 'clsx';
|
|
3
|
-
import styles from './StatusDot.module.css';
|
|
4
|
-
export function StatusDot({ status }) {
|
|
5
|
-
return /*#__PURE__*/ _jsx("span", {
|
|
6
|
-
"aria-label": status === 'translated' ? 'Translated' : 'Missing translation',
|
|
7
|
-
className: clsx(styles.dot, status === 'translated' ? styles.translated : styles.missing),
|
|
8
|
-
role: "img"
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=StatusDot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layout/StatusDot.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport styles from './StatusDot.module.css';\n\ntype TranslationStatus = 'translated' | 'missing';\n\ninterface StatusDotProps {\n status: TranslationStatus;\n}\n\nexport function StatusDot({ status }: StatusDotProps) {\n return (\n <span\n aria-label={\n status === 'translated' ? 'Translated' : 'Missing translation'\n }\n className={clsx(\n styles.dot,\n status === 'translated' ? styles.translated : styles.missing,\n )}\n role=\"img\"\n />\n );\n}\n"],"names":["clsx","styles","StatusDot","status","span","aria-label","className","dot","translated","missing","role"],"mappings":";AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,YAAY,yBAAyB;AAQ5C,OAAO,SAASC,UAAU,EAAEC,MAAM,EAAkB;IAClD,qBACE,KAACC;QACCC,cACEF,WAAW,eAAe,eAAe;QAE3CG,WAAWN,KACTC,OAAOM,GAAG,EACVJ,WAAW,eAAeF,OAAOO,UAAU,GAAGP,OAAOQ,OAAO;QAE9DC,MAAK;;AAGX"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
.dot {
|
|
2
|
-
width: 8px;
|
|
3
|
-
height: 8px;
|
|
4
|
-
border-radius: 50%;
|
|
5
|
-
display: inline-block;
|
|
6
|
-
flex-shrink: 0;
|
|
7
|
-
margin-left: 0.5rem;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.translated {
|
|
11
|
-
background-color: var(--theme-success-500);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.missing {
|
|
15
|
-
background-color: var(--theme-error-500);
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"set-messages.d.ts","sourceRoot":"","sources":["../../src/endpoints/set-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAwB,MAAM,SAAS,CAAC;AAK9D,eAAO,MAAM,mBAAmB,EAAE,QA8EjC,CAAC"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { uncaughtSwitchCase } from '@davincicoding/payload-plugin-kit';
|
|
2
|
-
import { ENDPOINTS, PLUGIN_CONTEXT } from '../const';
|
|
3
|
-
import { getSupportedLocales } from '../utils/config';
|
|
4
|
-
export const setMessagesEndpoint = ENDPOINTS.setMessages.endpoint(async (req)=>{
|
|
5
|
-
const { user } = await req.payload.auth({
|
|
6
|
-
headers: req.headers
|
|
7
|
-
});
|
|
8
|
-
if (!user) {
|
|
9
|
-
return Response.json({
|
|
10
|
-
error: 'Unauthorized'
|
|
11
|
-
}, {
|
|
12
|
-
status: 401
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
const data = await req.json?.();
|
|
16
|
-
if (!data) {
|
|
17
|
-
return Response.json({
|
|
18
|
-
error: 'No data provided'
|
|
19
|
-
}, {
|
|
20
|
-
status: 400
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
const supportedLocales = getSupportedLocales(req.payload.config.localization);
|
|
24
|
-
const ctx = PLUGIN_CONTEXT.get(req.payload.config);
|
|
25
|
-
if (!ctx) {
|
|
26
|
-
return Response.json({
|
|
27
|
-
error: 'Plugin not configured'
|
|
28
|
-
}, {
|
|
29
|
-
status: 500
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
const { collectionSlug, storage } = ctx;
|
|
33
|
-
for (const locale of supportedLocales){
|
|
34
|
-
const messages = data[locale];
|
|
35
|
-
if (!messages) continue;
|
|
36
|
-
switch(storage){
|
|
37
|
-
case 'db':
|
|
38
|
-
{
|
|
39
|
-
const { docs } = await req.payload.update({
|
|
40
|
-
collection: ctx.collectionSlug,
|
|
41
|
-
data: {
|
|
42
|
-
data: messages
|
|
43
|
-
},
|
|
44
|
-
where: {
|
|
45
|
-
locale: {
|
|
46
|
-
equals: locale
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
if (docs.length === 0) {
|
|
51
|
-
await req.payload.create({
|
|
52
|
-
collection: ctx.collectionSlug,
|
|
53
|
-
data: {
|
|
54
|
-
locale,
|
|
55
|
-
data: messages
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
case 'upload':
|
|
62
|
-
{
|
|
63
|
-
const rawFile = new File([
|
|
64
|
-
JSON.stringify(messages)
|
|
65
|
-
], `${locale}-${Date.now()}.json`, {
|
|
66
|
-
type: 'application/json'
|
|
67
|
-
});
|
|
68
|
-
const file = {
|
|
69
|
-
name: rawFile.name,
|
|
70
|
-
data: Buffer.from(await rawFile.arrayBuffer()),
|
|
71
|
-
mimetype: rawFile.type,
|
|
72
|
-
size: rawFile.size
|
|
73
|
-
};
|
|
74
|
-
const { docs } = await req.payload.update({
|
|
75
|
-
collection: collectionSlug,
|
|
76
|
-
data: {},
|
|
77
|
-
file,
|
|
78
|
-
where: {
|
|
79
|
-
locale: {
|
|
80
|
-
equals: locale
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
if (docs.length === 0) {
|
|
85
|
-
await req.payload.create({
|
|
86
|
-
collection: collectionSlug,
|
|
87
|
-
data: {
|
|
88
|
-
locale,
|
|
89
|
-
data: null
|
|
90
|
-
},
|
|
91
|
-
file
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
default:
|
|
97
|
-
return uncaughtSwitchCase(storage);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return {
|
|
101
|
-
success: true
|
|
102
|
-
};
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
//# sourceMappingURL=set-messages.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/endpoints/set-messages.ts"],"sourcesContent":["import { uncaughtSwitchCase } from '@davincicoding/payload-plugin-kit';\nimport type { Endpoint, File, PayloadRequest } from 'payload';\nimport { ENDPOINTS, PLUGIN_CONTEXT } from '@/const';\nimport type { Messages, Translations } from '@/types';\nimport { getSupportedLocales } from '@/utils/config';\n\nexport const setMessagesEndpoint: Endpoint = ENDPOINTS.setMessages.endpoint(\n async (req: PayloadRequest) => {\n const { user } = await req.payload.auth({ headers: req.headers });\n if (!user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 });\n }\n\n const data = (await req.json?.()) as Translations<Messages> | undefined;\n if (!data) {\n return Response.json({ error: 'No data provided' }, { status: 400 });\n }\n\n const supportedLocales = getSupportedLocales(\n req.payload.config.localization,\n );\n const ctx = PLUGIN_CONTEXT.get(req.payload.config);\n if (!ctx) {\n return Response.json({ error: 'Plugin not configured' }, { status: 500 });\n }\n const { collectionSlug, storage } = ctx;\n\n for (const locale of supportedLocales) {\n const messages = data[locale];\n if (!messages) continue;\n\n switch (storage) {\n case 'db': {\n const { docs } = await req.payload.update({\n collection: ctx.collectionSlug as 'messages',\n data: { data: messages },\n where: { locale: { equals: locale } },\n });\n if (docs.length === 0) {\n await req.payload.create({\n collection: ctx.collectionSlug as 'messages',\n data: { locale, data: messages },\n });\n }\n break;\n }\n case 'upload': {\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 as 'messages',\n data: {},\n file,\n where: { locale: { equals: locale } },\n });\n if (docs.length === 0) {\n await req.payload.create({\n collection: collectionSlug as 'messages',\n data: { locale, data: null },\n file,\n });\n }\n break;\n }\n default:\n return uncaughtSwitchCase(storage);\n }\n }\n\n return { success: true };\n },\n);\n"],"names":["uncaughtSwitchCase","ENDPOINTS","PLUGIN_CONTEXT","getSupportedLocales","setMessagesEndpoint","setMessages","endpoint","req","user","payload","auth","headers","Response","json","error","status","data","supportedLocales","config","localization","ctx","get","collectionSlug","storage","locale","messages","docs","update","collection","where","equals","length","create","rawFile","File","JSON","stringify","Date","now","type","file","name","Buffer","from","arrayBuffer","mimetype","size","success"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,oCAAoC;AAEvE,SAASC,SAAS,EAAEC,cAAc,QAAQ,UAAU;AAEpD,SAASC,mBAAmB,QAAQ,iBAAiB;AAErD,OAAO,MAAMC,sBAAgCH,UAAUI,WAAW,CAACC,QAAQ,CACzE,OAAOC;IACL,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMD,IAAIE,OAAO,CAACC,IAAI,CAAC;QAAEC,SAASJ,IAAII,OAAO;IAAC;IAC/D,IAAI,CAACH,MAAM;QACT,OAAOI,SAASC,IAAI,CAAC;YAAEC,OAAO;QAAe,GAAG;YAAEC,QAAQ;QAAI;IAChE;IAEA,MAAMC,OAAQ,MAAMT,IAAIM,IAAI;IAC5B,IAAI,CAACG,MAAM;QACT,OAAOJ,SAASC,IAAI,CAAC;YAAEC,OAAO;QAAmB,GAAG;YAAEC,QAAQ;QAAI;IACpE;IAEA,MAAME,mBAAmBd,oBACvBI,IAAIE,OAAO,CAACS,MAAM,CAACC,YAAY;IAEjC,MAAMC,MAAMlB,eAAemB,GAAG,CAACd,IAAIE,OAAO,CAACS,MAAM;IACjD,IAAI,CAACE,KAAK;QACR,OAAOR,SAASC,IAAI,CAAC;YAAEC,OAAO;QAAwB,GAAG;YAAEC,QAAQ;QAAI;IACzE;IACA,MAAM,EAAEO,cAAc,EAAEC,OAAO,EAAE,GAAGH;IAEpC,KAAK,MAAMI,UAAUP,iBAAkB;QACrC,MAAMQ,WAAWT,IAAI,CAACQ,OAAO;QAC7B,IAAI,CAACC,UAAU;QAEf,OAAQF;YACN,KAAK;gBAAM;oBACT,MAAM,EAAEG,IAAI,EAAE,GAAG,MAAMnB,IAAIE,OAAO,CAACkB,MAAM,CAAC;wBACxCC,YAAYR,IAAIE,cAAc;wBAC9BN,MAAM;4BAAEA,MAAMS;wBAAS;wBACvBI,OAAO;4BAAEL,QAAQ;gCAAEM,QAAQN;4BAAO;wBAAE;oBACtC;oBACA,IAAIE,KAAKK,MAAM,KAAK,GAAG;wBACrB,MAAMxB,IAAIE,OAAO,CAACuB,MAAM,CAAC;4BACvBJ,YAAYR,IAAIE,cAAc;4BAC9BN,MAAM;gCAAEQ;gCAAQR,MAAMS;4BAAS;wBACjC;oBACF;oBACA;gBACF;YACA,KAAK;gBAAU;oBACb,MAAMQ,UAAU,IAAIC,KAClB;wBAACC,KAAKC,SAAS,CAACX;qBAAU,EAC1B,GAAGD,OAAO,CAAC,EAAEa,KAAKC,GAAG,GAAG,KAAK,CAAC,EAC9B;wBACEC,MAAM;oBACR;oBAGF,MAAMC,OAAa;wBACjBC,MAAMR,QAAQQ,IAAI;wBAClBzB,MAAM0B,OAAOC,IAAI,CAAC,MAAMV,QAAQW,WAAW;wBAC3CC,UAAUZ,QAAQM,IAAI;wBACtBO,MAAMb,QAAQa,IAAI;oBACpB;oBAEA,MAAM,EAAEpB,IAAI,EAAE,GAAG,MAAMnB,IAAIE,OAAO,CAACkB,MAAM,CAAC;wBACxCC,YAAYN;wBACZN,MAAM,CAAC;wBACPwB;wBACAX,OAAO;4BAAEL,QAAQ;gCAAEM,QAAQN;4BAAO;wBAAE;oBACtC;oBACA,IAAIE,KAAKK,MAAM,KAAK,GAAG;wBACrB,MAAMxB,IAAIE,OAAO,CAACuB,MAAM,CAAC;4BACvBJ,YAAYN;4BACZN,MAAM;gCAAEQ;gCAAQR,MAAM;4BAAK;4BAC3BwB;wBACF;oBACF;oBACA;gBACF;YACA;gBACE,OAAOxC,mBAAmBuB;QAC9B;IACF;IAEA,OAAO;QAAEwB,SAAS;IAAK;AACzB,GACA"}
|
package/dist/entities.d.ts
DELETED
package/dist/entities.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../src/entities.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,eAAO,MAAM,QAAQ;;wCAgClB,CAAC"}
|
package/dist/entities.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { createCollectionConfigFactory } from '@davincicoding/payload-plugin-kit';
|
|
2
|
-
import { setMessagesEndpoint } from './endpoints/set-messages';
|
|
3
|
-
import { createHooks } from './hooks';
|
|
4
|
-
export const Messages = createCollectionConfigFactory(({ hooks, storage })=>({
|
|
5
|
-
admin: {
|
|
6
|
-
hidden: true
|
|
7
|
-
},
|
|
8
|
-
access: {
|
|
9
|
-
read: ()=>true
|
|
10
|
-
},
|
|
11
|
-
endpoints: [
|
|
12
|
-
setMessagesEndpoint
|
|
13
|
-
],
|
|
14
|
-
fields: [
|
|
15
|
-
{
|
|
16
|
-
name: 'locale',
|
|
17
|
-
type: 'text',
|
|
18
|
-
required: true
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
name: 'data',
|
|
22
|
-
type: 'json'
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
hooks: createHooks(hooks),
|
|
26
|
-
indexes: [
|
|
27
|
-
{
|
|
28
|
-
fields: [
|
|
29
|
-
'locale'
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
],
|
|
33
|
-
...storage === 'upload' && {
|
|
34
|
-
upload: {
|
|
35
|
-
mimeTypes: [
|
|
36
|
-
'application/json'
|
|
37
|
-
]
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}));
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=entities.js.map
|
package/dist/entities.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/entities.ts"],"sourcesContent":["import { createCollectionConfigFactory } from '@davincicoding/payload-plugin-kit';\nimport { setMessagesEndpoint } from './endpoints/set-messages';\nimport { createHooks } from './hooks';\nimport type { ResolvedPluginOptions } from './types';\n\nexport const Messages = createCollectionConfigFactory<\n ResolvedPluginOptions<'hooks' | 'storage'>\n>(({ hooks, storage }) => ({\n admin: {\n hidden: true,\n },\n access: {\n read: () => true,\n },\n endpoints: [setMessagesEndpoint],\n fields: [\n {\n name: 'locale',\n type: 'text',\n required: true,\n },\n {\n name: 'data',\n type: 'json',\n },\n ],\n hooks: createHooks(hooks),\n indexes: [\n {\n fields: ['locale'],\n },\n ],\n ...(storage === 'upload' && {\n upload: {\n mimeTypes: ['application/json'],\n },\n }),\n}));\n"],"names":["createCollectionConfigFactory","setMessagesEndpoint","createHooks","Messages","hooks","storage","admin","hidden","access","read","endpoints","fields","name","type","required","indexes","upload","mimeTypes"],"mappings":"AAAA,SAASA,6BAA6B,QAAQ,oCAAoC;AAClF,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,WAAW,QAAQ,UAAU;AAGtC,OAAO,MAAMC,WAAWH,8BAEtB,CAAC,EAAEI,KAAK,EAAEC,OAAO,EAAE,GAAM,CAAA;QACzBC,OAAO;YACLC,QAAQ;QACV;QACAC,QAAQ;YACNC,MAAM,IAAM;QACd;QACAC,WAAW;YAACT;SAAoB;QAChCU,QAAQ;YACN;gBACEC,MAAM;gBACNC,MAAM;gBACNC,UAAU;YACZ;YACA;gBACEF,MAAM;gBACNC,MAAM;YACR;SACD;QACDT,OAAOF,YAAYE;QACnBW,SAAS;YACP;gBACEJ,QAAQ;oBAAC;iBAAS;YACpB;SACD;QACD,GAAIN,YAAY,YAAY;YAC1BW,QAAQ;gBACNC,WAAW;oBAAC;iBAAmB;YACjC;QACF,CAAC;IACH,CAAA,GAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetchMessages.d.ts","sourceRoot":"","sources":["../../src/requests/fetchMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,wBAAsB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAkDvE"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { PLUGIN_CONTEXT } from '../const';
|
|
2
|
-
import { getErrorMessage } from '../utils/error-handling';
|
|
3
|
-
export async function fetchMessages(payload, locale) {
|
|
4
|
-
const ctx = PLUGIN_CONTEXT.get(payload.config);
|
|
5
|
-
if (!ctx) {
|
|
6
|
-
throw new Error('[payload-intl] Plugin context not found. Is the plugin registered?');
|
|
7
|
-
}
|
|
8
|
-
const { collectionSlug, storage } = ctx;
|
|
9
|
-
const { docs: [doc] } = await payload.find({
|
|
10
|
-
collection: collectionSlug,
|
|
11
|
-
where: {
|
|
12
|
-
locale: {
|
|
13
|
-
equals: locale
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
if (!doc) {
|
|
18
|
-
console.warn(`[payload-intl] No messages found for locale ${locale}`);
|
|
19
|
-
return {};
|
|
20
|
-
}
|
|
21
|
-
if (storage === 'db') {
|
|
22
|
-
return doc.data ?? {};
|
|
23
|
-
}
|
|
24
|
-
const { url } = doc;
|
|
25
|
-
if (!url) {
|
|
26
|
-
console.warn(`[payload-intl] No file URL for locale ${locale}, returning empty messages`);
|
|
27
|
-
return {};
|
|
28
|
-
}
|
|
29
|
-
const response = await fetch(url);
|
|
30
|
-
if (!response.ok) {
|
|
31
|
-
const error = await getErrorMessage(response);
|
|
32
|
-
throw new Error(`[payload-intl] Could not fetch messages for locale "${locale}": ${error}`);
|
|
33
|
-
}
|
|
34
|
-
if (response.headers.get('content-type') !== 'application/json') {
|
|
35
|
-
throw new Error(`[payload-intl] Could not fetch messages for locale "${locale}": The page did not return a JSON file.`);
|
|
36
|
-
}
|
|
37
|
-
return await response.json();
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=fetchMessages.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/requests/fetchMessages.ts"],"sourcesContent":["import type { BasePayload } from 'payload';\nimport { PLUGIN_CONTEXT } from '@/const';\nimport { getErrorMessage } from '@/utils/error-handling';\n\nexport async function fetchMessages(payload: BasePayload, locale: string) {\n const ctx = PLUGIN_CONTEXT.get(payload.config);\n if (!ctx) {\n throw new Error(\n '[payload-intl] Plugin context not found. Is the plugin registered?',\n );\n }\n const { collectionSlug, storage } = ctx;\n\n const {\n docs: [doc],\n } = await payload.find({\n collection: collectionSlug as 'messages',\n where: { locale: { equals: locale } },\n });\n\n if (!doc) {\n console.warn(`[payload-intl] No messages found for locale ${locale}`);\n return {};\n }\n\n if (storage === 'db') {\n return doc.data ?? {};\n }\n\n const { url } = doc;\n\n if (!url) {\n console.warn(\n `[payload-intl] No file URL for locale ${locale}, returning empty messages`,\n );\n return {};\n }\n\n const response = await fetch(url);\n\n if (!response.ok) {\n const error = await getErrorMessage(response);\n throw new Error(\n `[payload-intl] 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 `[payload-intl] 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"],"names":["PLUGIN_CONTEXT","getErrorMessage","fetchMessages","payload","locale","ctx","get","config","Error","collectionSlug","storage","docs","doc","find","collection","where","equals","console","warn","data","url","response","fetch","ok","error","headers","json"],"mappings":"AACA,SAASA,cAAc,QAAQ,UAAU;AACzC,SAASC,eAAe,QAAQ,yBAAyB;AAEzD,OAAO,eAAeC,cAAcC,OAAoB,EAAEC,MAAc;IACtE,MAAMC,MAAML,eAAeM,GAAG,CAACH,QAAQI,MAAM;IAC7C,IAAI,CAACF,KAAK;QACR,MAAM,IAAIG,MACR;IAEJ;IACA,MAAM,EAAEC,cAAc,EAAEC,OAAO,EAAE,GAAGL;IAEpC,MAAM,EACJM,MAAM,CAACC,IAAI,EACZ,GAAG,MAAMT,QAAQU,IAAI,CAAC;QACrBC,YAAYL;QACZM,OAAO;YAAEX,QAAQ;gBAAEY,QAAQZ;YAAO;QAAE;IACtC;IAEA,IAAI,CAACQ,KAAK;QACRK,QAAQC,IAAI,CAAC,CAAC,4CAA4C,EAAEd,QAAQ;QACpE,OAAO,CAAC;IACV;IAEA,IAAIM,YAAY,MAAM;QACpB,OAAOE,IAAIO,IAAI,IAAI,CAAC;IACtB;IAEA,MAAM,EAAEC,GAAG,EAAE,GAAGR;IAEhB,IAAI,CAACQ,KAAK;QACRH,QAAQC,IAAI,CACV,CAAC,sCAAsC,EAAEd,OAAO,0BAA0B,CAAC;QAE7E,OAAO,CAAC;IACV;IAEA,MAAMiB,WAAW,MAAMC,MAAMF;IAE7B,IAAI,CAACC,SAASE,EAAE,EAAE;QAChB,MAAMC,QAAQ,MAAMvB,gBAAgBoB;QACpC,MAAM,IAAIb,MACR,CAAC,oDAAoD,EAAEJ,OAAO,GAAG,EAAEoB,OAAO;IAE9E;IAEA,IAAIH,SAASI,OAAO,CAACnB,GAAG,CAAC,oBAAoB,oBAAoB;QAC/D,MAAM,IAAIE,MACR,CAAC,oDAAoD,EAAEJ,OAAO,uCAAuC,CAAC;IAE1G;IAEA,OAAO,MAAMiB,SAASK,IAAI;AAC5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,eAAO,MAAM,mBAAmB,iBAChB,MAAM,CAAC,cAAc,CAAC,KACnC,MAAM,EAaR,CAAC"}
|
package/dist/utils/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/config.ts"],"sourcesContent":["import type { Config } from 'payload';\nimport type { Locale } from '../types';\n\nexport const getSupportedLocales = (\n localization: Config['localization'],\n): Locale[] => {\n if (!localization) {\n return [];\n }\n if (localization.locales.length === 0) {\n return [localization.defaultLocale];\n }\n return localization.locales.map((locale) => {\n if (typeof locale === 'string') {\n return locale;\n }\n return locale.code;\n });\n};\n"],"names":["getSupportedLocales","localization","locales","length","defaultLocale","map","locale","code"],"mappings":"AAGA,OAAO,MAAMA,sBAAsB,CACjCC;IAEA,IAAI,CAACA,cAAc;QACjB,OAAO,EAAE;IACX;IACA,IAAIA,aAAaC,OAAO,CAACC,MAAM,KAAK,GAAG;QACrC,OAAO;YAACF,aAAaG,aAAa;SAAC;IACrC;IACA,OAAOH,aAAaC,OAAO,CAACG,GAAG,CAAC,CAACC;QAC/B,IAAI,OAAOA,WAAW,UAAU;YAC9B,OAAOA;QACT;QACA,OAAOA,OAAOC,IAAI;IACpB;AACF,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIhD,eAAO,MAAM,OAAO,gBAAiB,MAAM,0BAAsB,MAkBhE,CAAC;AAEF,eAAO,MAAM,mBAAmB,aAAc,gBAAgB,WAK7D,CAAC"}
|
package/dist/utils/format.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/format.ts"],"sourcesContent":["import type { TemplateVariable } from '@/types';\n\nimport { isTagElement } from './guards';\n\nexport const toWords = (inputString: string, joinWords = false): string => {\n const capitalizeFirstLetter = (string: string): string =>\n string.charAt(0).toUpperCase() + string.slice(1);\n const notNullString = inputString || '';\n const trimmedString = notNullString.trim();\n const arrayOfStrings = trimmedString.split(/[\\s-]/);\n\n const splitStringsArray: string[] = [];\n arrayOfStrings.forEach((tempString) => {\n if (tempString !== '') {\n const splitWords = tempString.split(/(?=[A-Z])/).join(' ');\n splitStringsArray.push(capitalizeFirstLetter(splitWords));\n }\n });\n\n return joinWords\n ? splitStringsArray.join('').replace(/\\s/g, '')\n : splitStringsArray.join(' ');\n};\n\nexport const formatVariableLabel = (variable: TemplateVariable) => {\n if (isTagElement(variable)) {\n return `<${variable.value}/>`;\n }\n return variable.value;\n};\n"],"names":["isTagElement","toWords","inputString","joinWords","capitalizeFirstLetter","string","charAt","toUpperCase","slice","notNullString","trimmedString","trim","arrayOfStrings","split","splitStringsArray","forEach","tempString","splitWords","join","push","replace","formatVariableLabel","variable","value"],"mappings":"AAEA,SAASA,YAAY,QAAQ,WAAW;AAExC,OAAO,MAAMC,UAAU,CAACC,aAAqBC,YAAY,KAAK;IAC5D,MAAMC,wBAAwB,CAACC,SAC7BA,OAAOC,MAAM,CAAC,GAAGC,WAAW,KAAKF,OAAOG,KAAK,CAAC;IAChD,MAAMC,gBAAgBP,eAAe;IACrC,MAAMQ,gBAAgBD,cAAcE,IAAI;IACxC,MAAMC,iBAAiBF,cAAcG,KAAK,CAAC;IAE3C,MAAMC,oBAA8B,EAAE;IACtCF,eAAeG,OAAO,CAAC,CAACC;QACtB,IAAIA,eAAe,IAAI;YACrB,MAAMC,aAAaD,WAAWH,KAAK,CAAC,aAAaK,IAAI,CAAC;YACtDJ,kBAAkBK,IAAI,CAACf,sBAAsBa;QAC/C;IACF;IAEA,OAAOd,YACHW,kBAAkBI,IAAI,CAAC,IAAIE,OAAO,CAAC,OAAO,MAC1CN,kBAAkBI,IAAI,CAAC;AAC7B,EAAE;AAEF,OAAO,MAAMG,sBAAsB,CAACC;IAClC,IAAItB,aAAasB,WAAW;QAC1B,OAAO,CAAC,CAAC,EAAEA,SAASC,KAAK,CAAC,EAAE,CAAC;IAC/B;IACA,OAAOD,SAASC,KAAK;AACvB,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/utils/guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,EACd,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,gBAAgB,YAClB,oBAAoB,KAC5B,OAAO,IAAI,aAAa,GAAG,aACwB,CAAC;AAEvD,eAAO,MAAM,iBAAiB,YACnB,oBAAoB,KAC5B,OAAO,IAAI,WAAW,GAAG,WACsB,CAAC;AAEnD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,GACb,CAAC"}
|
package/dist/utils/guards.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/guards.ts"],"sourcesContent":["import type {\n DateElement,\n MessageFormatElement,\n NumberElement,\n PluralElement,\n TimeElement,\n} from '@formatjs/icu-messageformat-parser';\nimport {\n isArgumentElement,\n isDateElement,\n isLiteralElement,\n isNumberElement,\n isPluralElement,\n isSelectElement,\n isTagElement,\n isTimeElement,\n} from '@formatjs/icu-messageformat-parser';\n\nexport const isNumericElement = (\n element: MessageFormatElement,\n): element is NumberElement | PluralElement =>\n isNumberElement(element) || isPluralElement(element);\n\nexport const isTemporalElement = (\n element: MessageFormatElement,\n): element is DateElement | TimeElement =>\n isDateElement(element) || isTimeElement(element);\n\nexport {\n isLiteralElement,\n isArgumentElement,\n isNumberElement,\n isSelectElement,\n isPluralElement,\n isDateElement,\n isTimeElement,\n isTagElement,\n};\n"],"names":["isArgumentElement","isDateElement","isLiteralElement","isNumberElement","isPluralElement","isSelectElement","isTagElement","isTimeElement","isNumericElement","element","isTemporalElement"],"mappings":"AAOA,SACEA,iBAAiB,EACjBC,aAAa,EACbC,gBAAgB,EAChBC,eAAe,EACfC,eAAe,EACfC,eAAe,EACfC,YAAY,EACZC,aAAa,QACR,qCAAqC;AAE5C,OAAO,MAAMC,mBAAmB,CAC9BC,UAEAN,gBAAgBM,YAAYL,gBAAgBK,SAAS;AAEvD,OAAO,MAAMC,oBAAoB,CAC/BD,UAEAR,cAAcQ,YAAYF,cAAcE,SAAS;AAEnD,SACEP,gBAAgB,EAChBF,iBAAiB,EACjBG,eAAe,EACfE,eAAe,EACfD,eAAe,EACfH,aAAa,EACbM,aAAa,EACbD,YAAY,GACZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icu-tranform.d.ts","sourceRoot":"","sources":["../../src/utils/icu-tranform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,sCAAsC,CAAC;AAI9C;;GAEG;AACH,eAAO,MAAM,eAAe,YAAa,MAAM,KAAG,oBAAoB,EACtD,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,mBAAmB,aAAc,oBAAoB,EAAE,KAAG,MA8C1D,CAAC;AA4Cd,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,EAAE,CAAC;QACX,MAAM,EAAE,CAAC,CAAC;QACV,QAAQ,EAAE,CAAC,uBAAuB,CAAC,CAAC;KACrC,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,eACrB,MAAM,KACjB,wBAwEF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/icu-tranform.ts"],"sourcesContent":["import { uncaughtSwitchCase } from '@davincicoding/payload-plugin-kit';\nimport type { MessageFormatElement } from '@formatjs/icu-messageformat-parser';\nimport { parse, TYPE } from '@formatjs/icu-messageformat-parser';\nimport type {\n SerializedLexicalNode,\n SerializedParagraphNode,\n SerializedTextNode,\n} from '@payloadcms/richtext-lexical/lexical';\nimport type { SerializedBeautifulMentionNode } from 'lexical-beautiful-mentions';\nimport { formatVariableLabel } from './format';\n\n/**\n * Parse an ICU message string into a AST array\n */\nexport const parseICUMessage = (message: string): MessageFormatElement[] =>\n parse(message);\n\n/**\n * Serialize an ICU message AST array into a ICU message string\n */\nexport const serializeICUMessage = (elements: MessageFormatElement[]): string =>\n elements\n .map((element) => {\n switch (element.type) {\n case TYPE.literal:\n return element.value;\n case TYPE.argument:\n return stringifyElement(element.value);\n case TYPE.number:\n // TODO serialize element.style\n return stringifyElement(element.value, 'number');\n case TYPE.select:\n return stringifyElement(\n element.value,\n 'select',\n Object.entries(element.options).map(\n ([key, option]) =>\n `${key} {${option.value.length > 0 ? serializeICUMessage(option.value) : key}}`,\n ),\n );\n case TYPE.plural:\n return stringifyElement(element.value, 'plural', [\n element.offset < 0 && `offset:${element.offset}`,\n ...Object.entries(element.options).map(\n ([key, option]) =>\n `${key} {${\n option.value.length > 0\n ? serializeICUMessage(option.value)\n : key\n }}`,\n ),\n ]);\n case TYPE.tag:\n return `<${element.value}>${serializeICUMessage(element.children)}</${element.value}>`;\n case TYPE.date:\n // TODO serialize element.style\n return stringifyElement(element.value, 'date');\n case TYPE.time:\n // TODO serialize element.style\n return stringifyElement(element.value, 'time');\n case TYPE.pound:\n return '#';\n default:\n return uncaughtSwitchCase(element);\n }\n })\n .join('');\n\nconst stringifyElement = (\n name: string,\n type?: string,\n options: (string | boolean)[] = [],\n) => {\n if (type === undefined) return `{${name}}`;\n\n const filteredOptions = options.filter(\n (option): option is string =>\n typeof option === 'string' && option.length > 0,\n );\n if (filteredOptions.length === 0) return `{${name}, ${type}}`;\n\n return `{${name}, ${type}, ${filteredOptions.join(' ')}}`;\n};\n\nfunction serializeTextNode(text: string): SerializedTextNode {\n return {\n type: 'text',\n version: 1,\n text,\n detail: 0,\n format: 0,\n mode: 'normal',\n style: '',\n };\n}\n\nfunction serializeMentionNode(\n name: string,\n label: string,\n icu: string,\n): SerializedBeautifulMentionNode {\n return {\n type: 'variableMention',\n version: 1,\n trigger: '@',\n value: name,\n data: { label, icu },\n };\n}\n\ntype SerializedICUEditorState = {\n root: {\n type: 'root';\n version: 1;\n direction: null;\n format: '';\n indent: 0;\n children: [SerializedParagraphNode];\n };\n};\n\n/**\n * Parse an ICU message string into a Lexical serialized editor state\n */\nexport const parseIcuToLexicalState = (\n icuMessage: string,\n): SerializedICUEditorState => {\n try {\n const elements = parseICUMessage(icuMessage);\n const children = elements.flatMap<SerializedLexicalNode>((element) => {\n switch (element.type) {\n case TYPE.literal:\n return [serializeTextNode(element.value)];\n case TYPE.pound:\n return [serializeTextNode('#')];\n case TYPE.argument:\n case TYPE.number:\n case TYPE.date:\n case TYPE.time:\n case TYPE.select:\n case TYPE.plural:\n case TYPE.tag:\n return [\n serializeMentionNode(\n element.value,\n formatVariableLabel(element),\n serializeICUMessage([element]),\n ),\n ];\n default:\n return uncaughtSwitchCase(element);\n }\n });\n\n return {\n root: {\n type: 'root',\n version: 1,\n direction: null,\n format: '',\n indent: 0,\n children: [\n {\n type: 'paragraph',\n version: 1,\n direction: null,\n format: '',\n indent: 0,\n textFormat: 0,\n textStyle: '',\n children,\n },\n ],\n },\n };\n } catch {\n return {\n root: {\n type: 'root',\n version: 1,\n direction: null,\n format: '',\n indent: 0,\n children: [\n {\n type: 'paragraph',\n version: 1,\n direction: null,\n format: '',\n indent: 0,\n textFormat: 0,\n textStyle: '',\n children: [serializeTextNode(icuMessage)],\n },\n ],\n },\n };\n }\n};\n"],"names":["uncaughtSwitchCase","parse","TYPE","formatVariableLabel","parseICUMessage","message","serializeICUMessage","elements","map","element","type","literal","value","argument","stringifyElement","number","select","Object","entries","options","key","option","length","plural","offset","tag","children","date","time","pound","join","name","undefined","filteredOptions","filter","serializeTextNode","text","version","detail","format","mode","style","serializeMentionNode","label","icu","trigger","data","parseIcuToLexicalState","icuMessage","flatMap","root","direction","indent","textFormat","textStyle"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKhD,eAAO,MAAM,eAAe,UACnB,OAAO,aACH,gBAAgB,EAAE,KAC5B,cA6DF,CAAC;AAEF,eAAO,MAAM,eAAe,cACd,gBAAgB,EAAE,KAAG,gBAEE,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,cAAc,CAAC"}
|