@ai-stack/payloadcms 3.0.0-beta.95.2 → 3.2.3-beta
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/LICENSE.md +1 -1
- package/README.md +25 -16
- package/dist/ai/models/anthropic/generateRichText.d.ts.map +1 -1
- package/dist/ai/models/anthropic/generateRichText.js +2 -2
- package/dist/ai/models/anthropic/generateRichText.js.map +1 -1
- package/dist/ai/models/anthropic/index.d.ts.map +1 -1
- package/dist/ai/models/anthropic/index.js +8 -32
- package/dist/ai/models/anthropic/index.js.map +1 -1
- package/dist/ai/models/elevenLabs/generateVoice.d.ts +1 -1
- package/dist/ai/models/elevenLabs/index.d.ts.map +1 -1
- package/dist/ai/models/elevenLabs/index.js +4 -3
- package/dist/ai/models/elevenLabs/index.js.map +1 -1
- package/dist/ai/models/openai/generateImage.d.ts +1 -1
- package/dist/ai/models/openai/generateImage.d.ts.map +1 -1
- package/dist/ai/models/openai/generateImage.js +0 -1
- package/dist/ai/models/openai/generateImage.js.map +1 -1
- package/dist/ai/models/openai/generateRichText.d.ts +1 -1
- package/dist/ai/models/openai/generateRichText.d.ts.map +1 -1
- package/dist/ai/models/openai/generateRichText.js +16 -9
- package/dist/ai/models/openai/generateRichText.js.map +1 -1
- package/dist/ai/models/openai/generateVoice.d.ts +1 -1
- package/dist/ai/models/openai/index.d.ts.map +1 -1
- package/dist/ai/models/openai/index.js +9 -35
- package/dist/ai/models/openai/index.js.map +1 -1
- package/dist/ai/prompts.d.ts +1 -1
- package/dist/ai/prompts.d.ts.map +1 -1
- package/dist/ai/prompts.js +6 -3
- package/dist/ai/prompts.js.map +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.d.ts +371 -0
- package/dist/ai/schemas/lexicalJsonSchema.d.ts.map +1 -0
- package/dist/ai/schemas/lexicalJsonSchema.js +650 -0
- package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -0
- package/dist/ai/utils/generateFileNameByPrompt.js.map +1 -1
- package/dist/ai/utils/systemGenerate.d.ts +5 -0
- package/dist/ai/utils/systemGenerate.d.ts.map +1 -0
- package/dist/ai/utils/{generateSeedPrompt.js → systemGenerate.js} +2 -2
- package/dist/ai/utils/systemGenerate.js.map +1 -0
- package/dist/collections/Instructions.d.ts +1 -1
- package/dist/collections/Instructions.d.ts.map +1 -1
- package/dist/collections/Instructions.js +177 -85
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/defaults.d.ts +1 -1
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +1 -1
- package/dist/defaults.js.map +1 -1
- package/dist/endpoints/fetchFields.d.ts +3 -0
- package/dist/endpoints/fetchFields.d.ts.map +1 -0
- package/dist/endpoints/fetchFields.js +21 -0
- package/dist/endpoints/fetchFields.js.map +1 -0
- package/dist/endpoints/index.d.ts.map +1 -1
- package/dist/endpoints/index.js +12 -18
- package/dist/endpoints/index.js.map +1 -1
- package/dist/exports/fields.d.ts +2 -1
- package/dist/exports/fields.d.ts.map +1 -1
- package/dist/exports/fields.js +2 -1
- package/dist/exports/fields.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.d.ts +3 -0
- package/dist/fields/ComposeField/ComposeField.d.ts.map +1 -0
- package/dist/fields/ComposeField/ComposeField.js +24 -0
- package/dist/fields/ComposeField/ComposeField.js.map +1 -0
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts +2 -0
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +1 -0
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.js +28 -0
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.js.map +1 -0
- package/dist/fields/LexicalEditor/feature.client.d.ts +4 -1
- package/dist/fields/LexicalEditor/feature.client.d.ts.map +1 -1
- package/dist/fields/LexicalEditor/feature.client.js +19 -7
- package/dist/fields/LexicalEditor/feature.client.js.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts +2 -2
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.js +4 -8
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
- package/dist/fields/SelectField/SelectField.d.ts +3 -2
- package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
- package/dist/fields/SelectField/SelectField.js +2 -3
- package/dist/fields/SelectField/SelectField.js.map +1 -1
- package/dist/index.d.ts +1 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -6
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +2 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +22 -21
- package/dist/init.js.map +1 -1
- package/dist/libraries/autocomplete/AutocompleteTextArea.js +9 -7
- package/dist/libraries/autocomplete/AutocompleteTextArea.js.map +1 -1
- package/dist/libraries/handlebars/asyncHandlebars.js +1 -1
- package/dist/libraries/handlebars/asyncHandlebars.js.map +1 -1
- package/dist/libraries/handlebars/helpers.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +56 -41
- package/dist/plugin.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.d.ts +15 -0
- package/dist/providers/FieldProvider/FieldProvider.d.ts.map +1 -0
- package/dist/providers/FieldProvider/FieldProvider.js +33 -0
- package/dist/providers/FieldProvider/FieldProvider.js.map +1 -0
- package/dist/providers/FieldProvider/useFieldProps.d.ts +6 -0
- package/dist/providers/FieldProvider/useFieldProps.d.ts.map +1 -0
- package/dist/providers/FieldProvider/useFieldProps.js +12 -0
- package/dist/providers/FieldProvider/useFieldProps.js.map +1 -0
- package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +5 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +12 -7
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/useInstructions.d.ts +2 -2
- package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +1 -1
- package/dist/providers/InstructionsProvider/useInstructions.js +17 -4
- package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
- package/dist/types.d.ts +11 -41
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -4
- package/dist/types.js.map +1 -1
- package/dist/ui/Compose/Compose.d.ts +9 -0
- package/dist/ui/Compose/Compose.d.ts.map +1 -0
- package/dist/ui/{Actions/Actions.js → Compose/Compose.js} +51 -40
- package/dist/ui/Compose/Compose.js.map +1 -0
- package/dist/ui/{Actions → Compose}/UndoRedoActions.d.ts.map +1 -1
- package/dist/ui/{Actions → Compose}/UndoRedoActions.js +15 -2
- package/dist/ui/Compose/UndoRedoActions.js.map +1 -0
- package/dist/ui/{Actions/actions.module.scss → Compose/compose.module.css} +7 -7
- package/dist/ui/{Actions → Compose}/hooks/menu/Item.d.ts +1 -1
- package/dist/ui/{Actions → Compose}/hooks/menu/Item.d.ts.map +1 -1
- package/dist/ui/{Actions → Compose}/hooks/menu/Item.js +2 -2
- package/dist/ui/{Actions → Compose}/hooks/menu/Item.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +1 -0
- package/dist/ui/{Actions → Compose}/hooks/menu/TranslateMenu.js +11 -11
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -0
- package/dist/ui/{Actions → Compose}/hooks/menu/items.d.ts +8 -8
- package/dist/ui/{Actions → Compose}/hooks/menu/items.d.ts.map +1 -1
- package/dist/ui/{Actions → Compose}/hooks/menu/items.js.map +1 -1
- package/dist/ui/{Actions → Compose}/hooks/menu/itemsMap.d.ts +1 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.d.ts.map +1 -0
- package/dist/ui/{Actions → Compose}/hooks/menu/itemsMap.js +1 -2
- package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -0
- package/dist/ui/{Actions → Compose}/hooks/menu/useMenu.d.ts +2 -1
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts.map +1 -0
- package/dist/ui/{Actions → Compose}/hooks/menu/useMenu.js +16 -4
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -0
- package/dist/ui/{Actions → Compose}/hooks/useGenerate.d.ts +4 -1
- package/dist/ui/Compose/hooks/useGenerate.d.ts.map +1 -0
- package/dist/ui/{Actions → Compose}/hooks/useGenerate.js +58 -34
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -0
- package/dist/ui/Compose/hooks/useHistory.d.ts.map +1 -0
- package/dist/ui/{Actions → Compose}/hooks/useHistory.js +6 -3
- package/dist/ui/Compose/hooks/useHistory.js.map +1 -0
- package/dist/utilities/editorSchemaValidator.d.ts +3 -0
- package/dist/utilities/editorSchemaValidator.d.ts.map +1 -0
- package/dist/utilities/editorSchemaValidator.js +31 -0
- package/dist/utilities/editorSchemaValidator.js.map +1 -0
- package/dist/utilities/setSafeLexicalState.d.ts +2 -2
- package/dist/utilities/setSafeLexicalState.d.ts.map +1 -1
- package/dist/utilities/setSafeLexicalState.js +5 -12
- package/dist/utilities/setSafeLexicalState.js.map +1 -1
- package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
- package/dist/utilities/updateFieldsConfig.js +18 -6
- package/dist/utilities/updateFieldsConfig.js.map +1 -1
- package/package.json +35 -64
- package/dist/ai/schemas/lexical.schema.d.ts +0 -31
- package/dist/ai/schemas/lexical.schema.d.ts.map +0 -1
- package/dist/ai/schemas/lexical.schema.js +0 -102
- package/dist/ai/schemas/lexical.schema.js.map +0 -1
- package/dist/ai/utils/generateSeedPrompt.d.ts +0 -5
- package/dist/ai/utils/generateSeedPrompt.d.ts.map +0 -1
- package/dist/ai/utils/generateSeedPrompt.js.map +0 -1
- package/dist/fields/DescriptionField/DescriptionField.d.ts +0 -4
- package/dist/fields/DescriptionField/DescriptionField.d.ts.map +0 -1
- package/dist/fields/DescriptionField/DescriptionField.js +0 -18
- package/dist/fields/DescriptionField/DescriptionField.js.map +0 -1
- package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts +0 -2
- package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts.map +0 -1
- package/dist/fields/LexicalEditor/ActionsFeatureComponent.js +0 -15
- package/dist/fields/LexicalEditor/ActionsFeatureComponent.js.map +0 -1
- package/dist/ui/Actions/Actions.d.ts +0 -5
- package/dist/ui/Actions/Actions.d.ts.map +0 -1
- package/dist/ui/Actions/Actions.js.map +0 -1
- package/dist/ui/Actions/UndoRedoActions.js.map +0 -1
- package/dist/ui/Actions/hooks/menu/TranslateMenu.d.ts.map +0 -1
- package/dist/ui/Actions/hooks/menu/TranslateMenu.js.map +0 -1
- package/dist/ui/Actions/hooks/menu/itemsMap.d.ts.map +0 -1
- package/dist/ui/Actions/hooks/menu/itemsMap.js.map +0 -1
- package/dist/ui/Actions/hooks/menu/useMenu.d.ts.map +0 -1
- package/dist/ui/Actions/hooks/menu/useMenu.js.map +0 -1
- package/dist/ui/Actions/hooks/useGenerate.d.ts.map +0 -1
- package/dist/ui/Actions/hooks/useGenerate.js.map +0 -1
- package/dist/ui/Actions/hooks/useHistory.d.ts.map +0 -1
- package/dist/ui/Actions/hooks/useHistory.js.map +0 -1
- package/dist/utilities/jsonToZod.d.ts +0 -3
- package/dist/utilities/jsonToZod.d.ts.map +0 -1
- package/dist/utilities/jsonToZod.js +0 -33
- package/dist/utilities/jsonToZod.js.map +0 -1
- /package/dist/ui/{Actions → Compose}/UndoRedoActions.d.ts +0 -0
- /package/dist/ui/{Actions → Compose}/hooks/menu/TranslateMenu.d.ts +0 -0
- /package/dist/ui/{Actions → Compose}/hooks/menu/items.js +0 -0
- /package/dist/ui/{Actions → Compose}/hooks/menu/menu.module.scss +0 -0
- /package/dist/ui/{Actions → Compose}/hooks/useHistory.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/libraries/autocomplete/AutocompleteTextArea.tsx"],"sourcesContent":["/**\n * Credit: Yury Dymov\n * Github: https://github.com/yury-dymov/react-autocomplete-input\n *\n * Modified to only be use for PromptEditorField\n */\n\nimport * as inputSelection from 'get-input-selection'\nimport isEqual from 'lodash.isequal'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport getCaretCoordinates from 'textarea-caret'\n\nimport styles from './AutocompleteTextArea.module.scss'\n\nconst KEY_UP = 38\nconst KEY_DOWN = 40\nconst KEY_RETURN = 13\nconst KEY_ENTER = 14\nconst KEY_ESCAPE = 27\nconst KEY_TAB = 9\n\nconst OPTION_LIST_MIN_WIDTH = 100\n\nexport const AutocompleteTextField = (props) => {\n const {\n changeOnSelect = (trigger, slug) => trigger + slug,\n defaultValue = '',\n disabled = false,\n matchAny = false,\n maxOptions = 10,\n minChars = 0,\n offsetX = 0,\n offsetY = 0,\n onBlur = (e: any) => {},\n onChange = (e: any) => {},\n onKeyDown = (e: any) => {},\n onRequestOptions = (e: any) => {},\n onSelect = (e: any) => {},\n options = [],\n passThroughEnter = false,\n passThroughTab = true,\n regex = '^[A-Za-z0-9\\\\-_]+$',\n requestOnlyIfNoOptions = true,\n spaceRemovers = [',', '.', '!', '?'],\n spacer = ' ',\n trigger = '@',\n triggerCaseInsensitive = false,\n triggerMatchWholeWord = false,\n value: propValue = null,\n ...rest\n } = props\n\n const [helperVisible, setHelperVisible] = useState(false)\n const [left, setLeft] = useState(0)\n const [top, setTop] = useState(0)\n const [triggerChar, setTriggerChar] = useState(null)\n const [matchLength, setMatchLength] = useState(0)\n const [matchStart, setMatchStart] = useState(0)\n const [selection, setSelection] = useState(0)\n const [value, setValue] = useState(null)\n const [caret, setCaret] = useState(0)\n const [currentOptions, setCurrentOptions] = useState([])\n\n const recentValue = useRef(defaultValue)\n const enableSpaceRemovers = useRef(false)\n const inputRef = useRef(null)\n const currentRef = useRef(null)\n const parentRef = useRef(null)\n\n useEffect(() => {\n window.addEventListener('resize', handleResize)\n window.addEventListener('scroll', handleResize)\n\n return () => {\n window.removeEventListener('resize', handleResize)\n window.removeEventListener('scroll', handleResize)\n }\n }, [])\n\n useEffect(() => {\n if (!isEqual(options, currentOptions)) {\n updateHelper(recentValue.current, caret, options)\n }\n }, [options, caret])\n\n useEffect(() => {\n if (helperVisible && currentRef.current) {\n scrollIntoView(currentRef.current, { boundary: parentRef.current, scrollMode: 'if-needed' })\n }\n }, [helperVisible, selection])\n\n const handleResize = useCallback(() => {\n setHelperVisible(false)\n }, [])\n\n const isTrigger = useCallback(\n (triggerStr, str, i) => {\n if (!triggerStr || !triggerStr.length) {\n return true\n }\n\n if (triggerMatchWholeWord && i > 0 && str.charAt(i - 1).match(/\\w/)) {\n return false\n }\n\n if (\n str.substr(i, triggerStr.length) === triggerStr ||\n (triggerCaseInsensitive &&\n str.substr(i, triggerStr.length).toLowerCase() === triggerStr.toLowerCase())\n ) {\n return true\n }\n\n return false\n },\n [triggerMatchWholeWord, triggerCaseInsensitive],\n )\n\n const arrayTriggerMatch = useCallback((triggers, re) => {\n return triggers.map((trigger) => ({\n triggerLength: trigger.length,\n triggerMatch: trigger.match(re),\n triggerStr: trigger,\n }))\n }, [])\n\n const getMatch = useCallback(\n (str, caret, providedOptions) => {\n const re = new RegExp(regex)\n const triggers = Array.isArray(trigger) ? trigger : [trigger]\n triggers.sort()\n\n const providedOptionsObject = Array.isArray(providedOptions)\n ? triggers.reduce((acc, triggerStr) => ({ ...acc, [triggerStr]: providedOptions }), {})\n : providedOptions\n\n const triggersMatch = arrayTriggerMatch(triggers, re)\n let slugData = null\n\n for (let triggersIndex = 0; triggersIndex < triggersMatch.length; triggersIndex++) {\n const { triggerLength, triggerMatch, triggerStr } = triggersMatch[triggersIndex]\n\n for (let i = caret - 1; i >= 0; --i) {\n const substr = str.substring(i, caret)\n const match = substr.match(re)\n let matchStart = -1\n\n if (triggerLength > 0) {\n const triggerIdx = triggerMatch ? i : i - triggerLength + 1\n\n if (triggerIdx < 0) {\n break\n }\n\n if (isTrigger(triggerStr, str, triggerIdx)) {\n matchStart = triggerIdx + triggerLength\n }\n\n if (!match && matchStart < 0) {\n break\n }\n } else {\n if (match && i > 0) {\n continue\n }\n matchStart = i === 0 && match ? 0 : i + 1\n\n if (caret - matchStart === 0) {\n break\n }\n }\n\n if (matchStart >= 0) {\n const triggerOptions = providedOptionsObject[triggerStr]\n if (triggerOptions == null) {\n continue\n }\n\n const matchedSlug = str.substring(matchStart, caret)\n\n const filteredOptions = triggerOptions.filter((slug) => {\n const idx = slug.toLowerCase().indexOf(matchedSlug.toLowerCase())\n return idx !== -1 && (matchAny || idx === 0)\n })\n\n const currTrigger = triggerStr\n const matchLength = matchedSlug.length\n\n slugData = {\n matchLength,\n matchStart,\n options: filteredOptions,\n trigger: currTrigger,\n }\n }\n }\n }\n\n return slugData\n },\n [regex, trigger, arrayTriggerMatch, isTrigger, matchAny],\n )\n\n const updateCaretPosition = useCallback((newCaret) => {\n setCaret(newCaret)\n inputSelection.default.setCaretPosition(inputRef.current, newCaret)\n }, [])\n\n const updateHelper = useCallback(\n (str, caretPos, helperOptions) => {\n const slug = getMatch(str, caretPos, helperOptions)\n\n if (slug) {\n const caretCoordinates = getCaretCoordinates(inputRef.current, caretPos)\n const rect = inputRef.current.getBoundingClientRect()\n\n const newTop = caretCoordinates.top + rect.top - inputRef.current.scrollTop\n const newLeft = Math.min(\n caretCoordinates.left + rect.left - inputRef.current.scrollLeft,\n window.innerWidth - OPTION_LIST_MIN_WIDTH,\n )\n\n if (\n slug.matchLength >= minChars &&\n (slug.options.length > 1 ||\n (slug.options.length === 1 &&\n (slug.options[0].length !== slug.matchLength || slug.options[0].length === 1)))\n ) {\n setHelperVisible(true)\n setTop(newTop)\n setLeft(newLeft)\n setTriggerChar(slug.trigger)\n setMatchLength(slug.matchLength)\n setMatchStart(slug.matchStart)\n setCurrentOptions(slug.options)\n } else {\n if (!requestOnlyIfNoOptions || !slug.options.length) {\n onRequestOptions(str.substr(slug.matchStart, slug.matchLength))\n }\n resetHelper()\n }\n } else {\n resetHelper()\n }\n },\n [getMatch, minChars, requestOnlyIfNoOptions, onRequestOptions],\n )\n\n const resetHelper = useCallback(() => {\n setHelperVisible(false)\n setSelection(0)\n }, [])\n\n const handleChange = useCallback(\n (e) => {\n const str = e.target.value\n const caretPos = inputSelection.default.default(e.target).end\n\n if (!str.length) {\n setHelperVisible(false)\n }\n\n recentValue.current = str\n\n setCaret(caretPos)\n setValue(e.target.value)\n\n if (!str.length || !caretPos) {\n return onChange(e.target.value)\n }\n\n // Space removers logic\n if (enableSpaceRemovers.current && spaceRemovers.length && str.length > 2 && spacer.length) {\n for (let i = 0; i < Math.max(recentValue.current.length, str.length); ++i) {\n if (recentValue.current[i] !== str[i]) {\n if (\n i >= 2 &&\n str[i - 1] === spacer &&\n spaceRemovers.indexOf(str[i - 2]) === -1 &&\n spaceRemovers.indexOf(str[i]) !== -1 &&\n getMatch(str.substring(0, i - 2), caretPos - 3, options)\n ) {\n const newValue = `${str.slice(0, i - 1)}${str.slice(i, i + 1)}${str.slice(i - 1, i)}${str.slice(i + 1)}`\n\n updateCaretPosition(i + 1)\n inputRef.current.value = newValue\n\n if (!propValue) {\n setValue(newValue)\n }\n\n return onChange(newValue)\n }\n\n break\n }\n }\n\n enableSpaceRemovers.current = false\n }\n\n updateHelper(str, caretPos, options)\n\n if (!propValue) {\n setValue(e.target.value)\n }\n\n return onChange(e.target.value)\n },\n [\n onChange,\n propValue,\n spaceRemovers,\n spacer,\n options,\n updateCaretPosition,\n updateHelper,\n getMatch,\n ],\n )\n\n const handleBlur = useCallback(\n (e) => {\n resetHelper()\n onBlur(e)\n },\n [onBlur, resetHelper],\n )\n\n const handleSelection = useCallback(\n (idx) => {\n const slug = currentOptions[idx]\n const value = recentValue.current\n const part1 =\n triggerChar.length === 0 ? '' : value.substring(0, matchStart - triggerChar.length)\n const part2 = value.substring(matchStart + matchLength)\n\n const event = { target: inputRef.current }\n const changedStr = changeOnSelect(triggerChar, slug)\n\n event.target.value = `${part1}${changedStr}${spacer}${part2}`\n handleChange(event)\n onSelect(event.target.value)\n\n resetHelper()\n\n const advanceCaretDistance = part1.length + changedStr.length + (spacer ? spacer.length : 1)\n updateCaretPosition(advanceCaretDistance)\n\n enableSpaceRemovers.current = true\n },\n [\n currentOptions,\n triggerChar,\n matchStart,\n matchLength,\n changeOnSelect,\n spacer,\n handleChange,\n onSelect,\n resetHelper,\n updateCaretPosition,\n ],\n )\n\n const handleKeyDown = useCallback(\n (event) => {\n const optionsCount =\n maxOptions > 0 ? Math.min(currentOptions.length, maxOptions) : currentOptions.length\n\n if (helperVisible) {\n switch (event.keyCode) {\n case KEY_ESCAPE:\n event.preventDefault()\n resetHelper()\n break\n case KEY_UP:\n event.preventDefault()\n if (optionsCount > 0) {\n setSelection(\n (prevSelection) => Math.max(0, optionsCount + prevSelection - 1) % optionsCount,\n )\n }\n break\n case KEY_DOWN:\n event.preventDefault()\n if (optionsCount > 0) {\n setSelection((prevSelection) => (prevSelection + 1) % optionsCount)\n }\n break\n case KEY_ENTER:\n case KEY_RETURN:\n if (!passThroughEnter) {\n event.preventDefault()\n }\n handleSelection(selection)\n break\n case KEY_TAB:\n if (!passThroughTab) {\n event.preventDefault()\n }\n handleSelection(selection)\n break\n default:\n onKeyDown(event)\n break\n }\n } else {\n onKeyDown(event)\n }\n },\n [\n helperVisible,\n currentOptions,\n maxOptions,\n passThroughEnter,\n passThroughTab,\n selection,\n onKeyDown,\n resetHelper,\n handleSelection,\n ],\n )\n\n const renderAutocompleteList = useCallback(() => {\n if (!helperVisible || currentOptions.length === 0) {\n return null\n }\n\n if (selection >= currentOptions.length) {\n setSelection(0)\n return null\n }\n\n const optionNumber = maxOptions === 0 ? currentOptions.length : maxOptions\n\n const helperOptions = currentOptions.slice(0, optionNumber).map((val, idx) => {\n let [helper, value] = val.split(' ')\n if (!value) {\n helper = undefined\n value = val\n }\n\n const renderHighlightedText = (text) => {\n const highlightStart = text\n .toLowerCase()\n .indexOf(recentValue.current.substr(matchStart, matchLength).toLowerCase())\n\n const highlightedText = text.substr(highlightStart, matchLength)\n\n if (!val.startsWith(text)) {\n return text\n }\n\n return (\n <>\n {text.slice(0, highlightStart)}\n <strong>{highlightedText}</strong>\n {text.slice(highlightStart + matchLength)}\n </>\n )\n }\n\n return (\n <li\n className={idx === selection ? styles.active : null}\n key={val}\n onClick={() => {\n handleSelection(idx)\n }}\n onMouseDown={(e) => {\n e.preventDefault()\n }}\n onMouseEnter={() => {\n setSelection(idx)\n }}\n ref={idx === selection ? currentRef : null}\n role=\"presentation\"\n >\n {helper && <code className={styles.helper}>{renderHighlightedText(helper)}</code>}\n {renderHighlightedText(value)}\n </li>\n )\n })\n\n const maxWidth = window.innerWidth - left - offsetX - 5\n const maxHeight = window.innerHeight - top - offsetY - 5\n\n return (\n <ul\n className={styles.autocompleteInput + ' ' + 'popup__content'}\n ref={parentRef}\n style={{\n left: left + offsetX,\n maxHeight,\n maxWidth,\n opacity: 'initial',\n pointerEvents: 'initial',\n position: 'fixed',\n top: top + offsetY,\n visibility: 'initial',\n }}\n >\n {helperOptions}\n </ul>\n )\n }, [\n helperVisible,\n currentOptions,\n selection,\n maxOptions,\n left,\n top,\n offsetX,\n offsetY,\n matchStart,\n matchLength,\n handleSelection,\n ])\n\n return (\n <div className=\"popup\">\n <textarea\n className=\"textarea-outer\"\n disabled={disabled}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n ref={inputRef}\n rows={6}\n style={{ overflow: 'auto' }}\n value={propValue !== null ? propValue : value || defaultValue}\n {...rest}\n />\n {renderAutocompleteList()}\n </div>\n )\n}\n"],"names":["inputSelection","isEqual","React","useCallback","useEffect","useRef","useState","scrollIntoView","getCaretCoordinates","styles","KEY_UP","KEY_DOWN","KEY_RETURN","KEY_ENTER","KEY_ESCAPE","KEY_TAB","OPTION_LIST_MIN_WIDTH","AutocompleteTextField","props","changeOnSelect","trigger","slug","defaultValue","disabled","matchAny","maxOptions","minChars","offsetX","offsetY","onBlur","e","onChange","onKeyDown","onRequestOptions","onSelect","options","passThroughEnter","passThroughTab","regex","requestOnlyIfNoOptions","spaceRemovers","spacer","triggerCaseInsensitive","triggerMatchWholeWord","value","propValue","rest","helperVisible","setHelperVisible","left","setLeft","top","setTop","triggerChar","setTriggerChar","matchLength","setMatchLength","matchStart","setMatchStart","selection","setSelection","setValue","caret","setCaret","currentOptions","setCurrentOptions","recentValue","enableSpaceRemovers","inputRef","currentRef","parentRef","window","addEventListener","handleResize","removeEventListener","updateHelper","current","boundary","scrollMode","isTrigger","triggerStr","str","i","length","charAt","match","substr","toLowerCase","arrayTriggerMatch","triggers","re","map","triggerLength","triggerMatch","getMatch","providedOptions","RegExp","Array","isArray","sort","providedOptionsObject","reduce","acc","triggersMatch","slugData","triggersIndex","substring","triggerIdx","triggerOptions","matchedSlug","filteredOptions","filter","idx","indexOf","currTrigger","updateCaretPosition","newCaret","default","setCaretPosition","caretPos","helperOptions","caretCoordinates","rect","getBoundingClientRect","newTop","scrollTop","newLeft","Math","min","scrollLeft","innerWidth","resetHelper","handleChange","target","end","max","newValue","slice","handleBlur","handleSelection","part1","part2","event","changedStr","advanceCaretDistance","handleKeyDown","optionsCount","keyCode","preventDefault","prevSelection","renderAutocompleteList","optionNumber","val","helper","split","undefined","renderHighlightedText","text","highlightStart","highlightedText","startsWith","strong","li","className","active","onClick","onMouseDown","onMouseEnter","ref","role","code","maxWidth","maxHeight","innerHeight","ul","autocompleteInput","style","opacity","pointerEvents","position","visibility","div","textarea","rows","overflow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/libraries/autocomplete/AutocompleteTextArea.tsx"],"sourcesContent":["/**\n * Credit: Yury Dymov\n * Github: https://github.com/yury-dymov/react-autocomplete-input\n *\n * Modified to only be use for PromptEditorField\n */\n\nimport * as inputSelection from 'get-input-selection'\nimport isEqual from 'lodash.isequal'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport getCaretCoordinates from 'textarea-caret'\n\nimport styles from './AutocompleteTextArea.module.scss'\n\nconst KEY_UP = 38\nconst KEY_DOWN = 40\nconst KEY_RETURN = 13\nconst KEY_ENTER = 14\nconst KEY_ESCAPE = 27\nconst KEY_TAB = 9\n\nconst OPTION_LIST_MIN_WIDTH = 100\n\nexport const AutocompleteTextField = (props) => {\n const {\n changeOnSelect = (trigger, slug) => trigger + slug,\n defaultValue = '',\n disabled = false,\n matchAny = false,\n maxOptions = 10,\n minChars = 0,\n offsetX = 0,\n offsetY = 0,\n onBlur = (e: any) => {},\n onChange = (e: any) => {},\n onKeyDown = (e: any) => {},\n onRequestOptions = (e: any) => {},\n onSelect = (e: any) => {},\n options = [],\n passThroughEnter = false,\n passThroughTab = true,\n regex = '^[A-Za-z0-9\\\\-_]+$',\n requestOnlyIfNoOptions = true,\n spaceRemovers = [',', '.', '!', '?'],\n spacer = ' ',\n trigger = '@',\n triggerCaseInsensitive = false,\n triggerMatchWholeWord = false,\n value: propValue = null,\n ...rest\n } = props\n\n const [helperVisible, setHelperVisible] = useState(false)\n const [left, setLeft] = useState(0)\n const [top, setTop] = useState(0)\n const [triggerChar, setTriggerChar] = useState(null)\n const [matchLength, setMatchLength] = useState(0)\n const [matchStart, setMatchStart] = useState(0)\n const [selection, setSelection] = useState(0)\n const [value, setValue] = useState(null)\n const [caret, setCaret] = useState(0)\n const [currentOptions, setCurrentOptions] = useState([])\n\n const recentValue = useRef(defaultValue)\n const enableSpaceRemovers = useRef(false)\n const inputRef = useRef(null)\n const currentRef = useRef(null)\n const parentRef = useRef(null)\n\n useEffect(() => {\n window.addEventListener('resize', handleResize)\n window.addEventListener('scroll', handleResize)\n\n return () => {\n window.removeEventListener('resize', handleResize)\n window.removeEventListener('scroll', handleResize)\n }\n }, [])\n\n useEffect(() => {\n if (!isEqual(options, currentOptions)) {\n updateHelper(recentValue.current, caret, options)\n }\n }, [options, caret])\n\n useEffect(() => {\n if (helperVisible && currentRef.current) {\n scrollIntoView(currentRef.current, { boundary: parentRef.current, scrollMode: 'if-needed' })\n }\n }, [helperVisible, selection])\n\n const handleResize = useCallback(() => {\n setHelperVisible(false)\n }, [])\n\n const isTrigger = useCallback(\n (triggerStr, str, i) => {\n if (!triggerStr || !triggerStr.length) {\n return true\n }\n\n if (triggerMatchWholeWord && i > 0 && str.charAt(i - 1).match(/\\w/)) {\n return false\n }\n\n if (\n str.substr(i, triggerStr.length) === triggerStr ||\n (triggerCaseInsensitive &&\n str.substr(i, triggerStr.length).toLowerCase() === triggerStr.toLowerCase())\n ) {\n return true\n }\n\n return false\n },\n [triggerMatchWholeWord, triggerCaseInsensitive],\n )\n\n const arrayTriggerMatch = useCallback((triggers, re) => {\n return triggers.map((trigger) => ({\n triggerLength: trigger.length,\n triggerMatch: trigger.match(re),\n triggerStr: trigger,\n }))\n }, [])\n\n const getMatch = useCallback(\n (str, caret, providedOptions) => {\n const re = new RegExp(regex)\n const triggers = Array.isArray(trigger) ? trigger : [trigger]\n triggers.sort()\n\n const providedOptionsObject = Array.isArray(providedOptions)\n ? triggers.reduce((acc, triggerStr) => ({ ...acc, [triggerStr]: providedOptions }), {})\n : providedOptions\n\n const triggersMatch = arrayTriggerMatch(triggers, re)\n let slugData = null\n\n for (let triggersIndex = 0; triggersIndex < triggersMatch.length; triggersIndex++) {\n const { triggerLength, triggerMatch, triggerStr } = triggersMatch[triggersIndex]\n\n for (let i = caret - 1; i >= 0; --i) {\n const substr = str.substring(i, caret)\n const match = substr.match(re)\n let matchStart = -1\n\n if (triggerLength > 0) {\n const triggerIdx = triggerMatch ? i : i - triggerLength + 1\n\n if (triggerIdx < 0) {\n break\n }\n\n if (isTrigger(triggerStr, str, triggerIdx)) {\n matchStart = triggerIdx + triggerLength\n }\n\n if (!match && matchStart < 0) {\n break\n }\n } else {\n if (match && i > 0) {\n continue\n }\n matchStart = i === 0 && match ? 0 : i + 1\n\n if (caret - matchStart === 0) {\n break\n }\n }\n\n if (matchStart >= 0) {\n const triggerOptions = providedOptionsObject[triggerStr]\n if (triggerOptions == null) {\n continue\n }\n\n const matchedSlug = str.substring(matchStart, caret)\n\n const filteredOptions = triggerOptions.filter((slug) => {\n const idx = slug.toLowerCase().indexOf(matchedSlug.toLowerCase())\n return idx !== -1 && (matchAny || idx === 0)\n })\n\n const currTrigger = triggerStr\n const matchLength = matchedSlug.length\n\n slugData = {\n matchLength,\n matchStart,\n options: filteredOptions,\n trigger: currTrigger,\n }\n }\n }\n }\n\n return slugData\n },\n [regex, trigger, arrayTriggerMatch, isTrigger, matchAny],\n )\n\n const updateCaretPosition = useCallback((newCaret) => {\n requestAnimationFrame(() => {\n setCaret(newCaret)\n inputSelection.default.setCaretPosition(inputRef.current, newCaret)\n })\n }, [])\n\n const updateHelper = useCallback(\n (str, caretPos, helperOptions) => {\n const slug = getMatch(str, caretPos, helperOptions)\n\n if (slug) {\n const caretCoordinates = getCaretCoordinates(inputRef.current, caretPos)\n const rect = inputRef.current.getBoundingClientRect()\n\n const newTop = caretCoordinates.top + rect.top - inputRef.current.scrollTop\n const newLeft = Math.min(\n caretCoordinates.left + rect.left - inputRef.current.scrollLeft,\n window.innerWidth - OPTION_LIST_MIN_WIDTH,\n )\n\n if (\n slug.matchLength >= minChars &&\n (slug.options.length > 1 ||\n (slug.options.length === 1 &&\n (slug.options[0].length !== slug.matchLength || slug.options[0].length === 1)))\n ) {\n setHelperVisible(true)\n setTop(newTop)\n setLeft(newLeft)\n setTriggerChar(slug.trigger)\n setMatchLength(slug.matchLength)\n setMatchStart(slug.matchStart)\n setCurrentOptions(slug.options)\n } else {\n if (!requestOnlyIfNoOptions || !slug.options.length) {\n onRequestOptions(str.substr(slug.matchStart, slug.matchLength))\n }\n resetHelper()\n }\n updateCaretPosition(caretPos)\n } else {\n resetHelper()\n }\n },\n [getMatch, minChars, requestOnlyIfNoOptions, onRequestOptions, updateCaretPosition],\n )\n\n const resetHelper = useCallback(() => {\n setHelperVisible(false)\n setSelection(0)\n }, [])\n\n const handleChange = useCallback(\n (e) => {\n const str = e.target.value\n const caretPos = inputSelection.default.default(e.target).end\n\n if (!str.length) {\n setHelperVisible(false)\n }\n\n recentValue.current = str\n\n if (!str.length || !caretPos) {\n return onChange(e.target.value)\n }\n\n // Space removers logic\n if (enableSpaceRemovers.current && spaceRemovers.length && str.length > 2 && spacer.length) {\n for (let i = 0; i < Math.max(recentValue.current.length, str.length); ++i) {\n if (recentValue.current[i] !== str[i]) {\n if (\n i >= 2 &&\n str[i - 1] === spacer &&\n spaceRemovers.indexOf(str[i - 2]) === -1 &&\n spaceRemovers.indexOf(str[i]) !== -1 &&\n getMatch(str.substring(0, i - 2), caretPos - 3, options)\n ) {\n const newValue = `${str.slice(0, i - 1)}${str.slice(i, i + 1)}${str.slice(i - 1, i)}${str.slice(i + 1)}`\n\n updateCaretPosition(i + 1)\n inputRef.current.value = newValue\n\n if (!propValue) {\n setValue(newValue)\n }\n\n return onChange(newValue)\n }\n\n break\n }\n }\n\n enableSpaceRemovers.current = false\n }\n\n updateHelper(str, caretPos, options)\n\n if (!propValue) {\n setValue(e.target.value)\n }\n\n return onChange(e.target.value)\n },\n [\n onChange,\n propValue,\n spaceRemovers,\n spacer,\n options,\n updateCaretPosition,\n updateHelper,\n getMatch,\n ],\n )\n\n const handleBlur = useCallback(\n (e) => {\n resetHelper()\n onBlur(e)\n },\n [onBlur, resetHelper],\n )\n\n const handleSelection = useCallback(\n (idx) => {\n const slug = currentOptions[idx]\n const value = recentValue.current\n const part1 =\n triggerChar.length === 0 ? '' : value.substring(0, matchStart - triggerChar.length)\n const part2 = value.substring(matchStart + matchLength)\n\n const event = { target: inputRef.current }\n const changedStr = changeOnSelect(triggerChar, slug)\n\n event.target.value = `${part1}${changedStr}${spacer}${part2}`\n handleChange(event)\n onSelect(event.target.value)\n\n resetHelper()\n\n const advanceCaretDistance = part1.length + changedStr.length + (spacer ? spacer.length : 1)\n updateCaretPosition(advanceCaretDistance)\n\n enableSpaceRemovers.current = true\n },\n [\n currentOptions,\n triggerChar,\n matchStart,\n matchLength,\n changeOnSelect,\n spacer,\n handleChange,\n onSelect,\n resetHelper,\n updateCaretPosition,\n ],\n )\n\n const handleKeyDown = useCallback(\n (event) => {\n const optionsCount =\n maxOptions > 0 ? Math.min(currentOptions.length, maxOptions) : currentOptions.length\n\n if (helperVisible) {\n switch (event.keyCode) {\n case KEY_ESCAPE:\n event.preventDefault()\n resetHelper()\n break\n case KEY_UP:\n event.preventDefault()\n if (optionsCount > 0) {\n setSelection(\n (prevSelection) => Math.max(0, optionsCount + prevSelection - 1) % optionsCount,\n )\n }\n break\n case KEY_DOWN:\n event.preventDefault()\n if (optionsCount > 0) {\n setSelection((prevSelection) => (prevSelection + 1) % optionsCount)\n }\n break\n case KEY_ENTER:\n case KEY_RETURN:\n if (!passThroughEnter) {\n event.preventDefault()\n }\n handleSelection(selection)\n break\n case KEY_TAB:\n if (!passThroughTab) {\n event.preventDefault()\n }\n handleSelection(selection)\n break\n default:\n onKeyDown(event)\n break\n }\n } else {\n onKeyDown(event)\n }\n },\n [\n helperVisible,\n currentOptions,\n maxOptions,\n passThroughEnter,\n passThroughTab,\n selection,\n onKeyDown,\n resetHelper,\n handleSelection,\n ],\n )\n\n const renderAutocompleteList = useCallback(() => {\n if (!helperVisible || currentOptions.length === 0) {\n return null\n }\n\n if (selection >= currentOptions.length) {\n setSelection(0)\n return null\n }\n\n const optionNumber = maxOptions === 0 ? currentOptions.length : maxOptions\n\n const helperOptions = currentOptions.slice(0, optionNumber).map((val, idx) => {\n let [helper, value] = val.split(' ')\n if (!value) {\n helper = undefined\n value = val\n }\n\n const renderHighlightedText = (text) => {\n const highlightStart = text\n .toLowerCase()\n .indexOf(recentValue.current.substr(matchStart, matchLength).toLowerCase())\n\n const highlightedText = text.substr(highlightStart, matchLength)\n\n if (!val.startsWith(text)) {\n return text\n }\n\n return (\n <React.Fragment>\n {text.slice(0, highlightStart)}\n <strong>{highlightedText}</strong>\n {text.slice(highlightStart + matchLength)}\n </React.Fragment>\n )\n }\n\n return (\n <li\n className={idx === selection ? styles.active : null}\n key={val}\n onClick={() => {\n handleSelection(idx)\n }}\n onMouseDown={(e) => {\n e.preventDefault()\n }}\n onMouseEnter={() => {\n setSelection(idx)\n }}\n ref={idx === selection ? currentRef : null}\n role=\"presentation\"\n >\n {helper && <code className={styles.helper}>{renderHighlightedText(helper)}</code>}\n {renderHighlightedText(value)}\n </li>\n )\n })\n\n const maxWidth = window.innerWidth - left - offsetX - 5\n const maxHeight = window.innerHeight - top - offsetY - 5\n\n return (\n <ul\n className={styles.autocompleteInput + ' ' + 'popup__content'}\n ref={parentRef}\n style={{\n left: left + offsetX,\n maxHeight,\n maxWidth,\n opacity: 'initial',\n pointerEvents: 'initial',\n position: 'fixed',\n top: top + offsetY,\n visibility: 'initial',\n }}\n >\n {helperOptions}\n </ul>\n )\n }, [\n helperVisible,\n currentOptions,\n selection,\n maxOptions,\n left,\n top,\n offsetX,\n offsetY,\n matchStart,\n matchLength,\n handleSelection,\n ])\n\n return (\n <div className=\"popup\">\n <textarea\n className=\"textarea-outer\"\n disabled={disabled}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n ref={inputRef}\n rows={6}\n style={{ overflow: 'auto' }}\n value={propValue !== null ? propValue : value || defaultValue}\n {...rest}\n />\n {renderAutocompleteList()}\n </div>\n )\n}\n"],"names":["inputSelection","isEqual","React","useCallback","useEffect","useRef","useState","scrollIntoView","getCaretCoordinates","styles","KEY_UP","KEY_DOWN","KEY_RETURN","KEY_ENTER","KEY_ESCAPE","KEY_TAB","OPTION_LIST_MIN_WIDTH","AutocompleteTextField","props","changeOnSelect","trigger","slug","defaultValue","disabled","matchAny","maxOptions","minChars","offsetX","offsetY","onBlur","e","onChange","onKeyDown","onRequestOptions","onSelect","options","passThroughEnter","passThroughTab","regex","requestOnlyIfNoOptions","spaceRemovers","spacer","triggerCaseInsensitive","triggerMatchWholeWord","value","propValue","rest","helperVisible","setHelperVisible","left","setLeft","top","setTop","triggerChar","setTriggerChar","matchLength","setMatchLength","matchStart","setMatchStart","selection","setSelection","setValue","caret","setCaret","currentOptions","setCurrentOptions","recentValue","enableSpaceRemovers","inputRef","currentRef","parentRef","window","addEventListener","handleResize","removeEventListener","updateHelper","current","boundary","scrollMode","isTrigger","triggerStr","str","i","length","charAt","match","substr","toLowerCase","arrayTriggerMatch","triggers","re","map","triggerLength","triggerMatch","getMatch","providedOptions","RegExp","Array","isArray","sort","providedOptionsObject","reduce","acc","triggersMatch","slugData","triggersIndex","substring","triggerIdx","triggerOptions","matchedSlug","filteredOptions","filter","idx","indexOf","currTrigger","updateCaretPosition","newCaret","requestAnimationFrame","default","setCaretPosition","caretPos","helperOptions","caretCoordinates","rect","getBoundingClientRect","newTop","scrollTop","newLeft","Math","min","scrollLeft","innerWidth","resetHelper","handleChange","target","end","max","newValue","slice","handleBlur","handleSelection","part1","part2","event","changedStr","advanceCaretDistance","handleKeyDown","optionsCount","keyCode","preventDefault","prevSelection","renderAutocompleteList","optionNumber","val","helper","split","undefined","renderHighlightedText","text","highlightStart","highlightedText","startsWith","Fragment","strong","li","className","active","onClick","onMouseDown","onMouseEnter","ref","role","code","maxWidth","maxHeight","innerHeight","ul","autocompleteInput","style","opacity","pointerEvents","position","visibility","div","textarea","rows","overflow"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/libraries/handlebars/asyncHandlebars.ts"],"sourcesContent":["import Handlebars from 'handlebars'\nimport asyncHelpers from 'handlebars-async-helpers'\n\nexport const asyncHandlebars = asyncHelpers(Handlebars)\n"],"names":["Handlebars","asyncHelpers","asyncHandlebars"],"mappings":"AAAA,OAAOA,gBAAgB,
|
|
1
|
+
{"version":3,"sources":["../../../src/libraries/handlebars/asyncHandlebars.ts"],"sourcesContent":["import Handlebars from 'handlebars/dist/handlebars.js'\nimport asyncHelpers from 'handlebars-async-helpers'\n\nexport const asyncHandlebars = asyncHelpers(Handlebars)\n"],"names":["Handlebars","asyncHelpers","asyncHandlebars"],"mappings":"AAAA,OAAOA,gBAAgB,gCAA+B;AACtD,OAAOC,kBAAkB,2BAA0B;AAEnD,OAAO,MAAMC,kBAAkBD,aAAaD,YAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/libraries/handlebars/helpers.ts"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\n\nimport { getFieldInfo } from '../../utilities/getFieldInfo.js'\nimport { lexicalToHTML } from '../../utilities/lexicalToHTML.js'\nimport { asyncHandlebars } from './asyncHandlebars.js'\nimport { handlebarsHelpersMap } from './helpersMap.js'\n\nexport const registerEditorHelper = (payload, schemaPath) => {\n //TODO: add autocomplete ability using handlebars template on PromptEditorField and include custom helpers in dropdown\n\n let fieldInfo = getFieldInfo(payload.collections, schemaPath)\n const schemaPathChunks = schemaPath.split('.')\n\n asyncHandlebars.registerHelper(\n handlebarsHelpersMap.toHTML.name,\n async function (content: SerializedEditorState, options) {\n const collectionSlug = schemaPathChunks[0]\n const { ids } = options\n for (const id of ids) {\n //TODO: Find a better way to get schemaPath of defined field in prompt editor\n const path = `${collectionSlug}.${id}`\n fieldInfo = getFieldInfo(payload.collections, path)\n }\n\n const html = await lexicalToHTML(content, fieldInfo.editor?.editorConfig)\n return new asyncHandlebars.SafeString(html)\n },\n )\n}\n"],"names":["getFieldInfo","lexicalToHTML","asyncHandlebars","handlebarsHelpersMap","registerEditorHelper","payload","schemaPath","fieldInfo","collections","schemaPathChunks","split","registerHelper","toHTML","name","content","options","collectionSlug","ids","id","path","html","editor","editorConfig","SafeString"],"mappings":"AAEA,SAASA,YAAY,QAAQ,kCAAiC;AAC9D,SAASC,aAAa,QAAQ,mCAAkC;AAChE,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,oBAAoB,QAAQ,kBAAiB;AAEtD,OAAO,MAAMC,uBAAuB,CAACC,SAASC;IAC5C,sHAAsH;IAEtH,IAAIC,YAAYP,aAAaK,QAAQG,WAAW,EAAEF;IAClD,MAAMG,mBAAmBH,WAAWI,KAAK,CAAC;IAE1CR,gBAAgBS,cAAc,CAC5BR,qBAAqBS,MAAM,CAACC,IAAI,EAChC,eAAgBC,OAA8B,EAAEC,OAAO;QACrD,MAAMC,iBAAiBP,gBAAgB,CAAC,EAAE;QAC1C,MAAM,EAAEQ,GAAG,EAAE,GAAGF;QAChB,KAAK,MAAMG,MAAMD,IAAK;YACpB,6EAA6E;YAC7E,MAAME,OAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/libraries/handlebars/helpers.ts"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\n\nimport { getFieldInfo } from '../../utilities/getFieldInfo.js'\nimport { lexicalToHTML } from '../../utilities/lexicalToHTML.js'\nimport { asyncHandlebars } from './asyncHandlebars.js'\nimport { handlebarsHelpersMap } from './helpersMap.js'\n\nexport const registerEditorHelper = (payload, schemaPath) => {\n //TODO: add autocomplete ability using handlebars template on PromptEditorField and include custom helpers in dropdown\n\n let fieldInfo = getFieldInfo(payload.collections, schemaPath)\n const schemaPathChunks = schemaPath.split('.')\n\n asyncHandlebars.registerHelper(\n handlebarsHelpersMap.toHTML.name,\n async function (content: SerializedEditorState, options) {\n const collectionSlug = schemaPathChunks[0]\n const { ids } = options\n for (const id of ids) {\n //TODO: Find a better way to get schemaPath of defined field in prompt editor\n const path = `${collectionSlug}.${id}`\n fieldInfo = getFieldInfo(payload.collections, path)\n }\n\n const html = await lexicalToHTML(content, fieldInfo.editor?.editorConfig)\n return new asyncHandlebars.SafeString(html)\n },\n )\n}\n"],"names":["getFieldInfo","lexicalToHTML","asyncHandlebars","handlebarsHelpersMap","registerEditorHelper","payload","schemaPath","fieldInfo","collections","schemaPathChunks","split","registerHelper","toHTML","name","content","options","collectionSlug","ids","id","path","html","editor","editorConfig","SafeString"],"mappings":"AAEA,SAASA,YAAY,QAAQ,kCAAiC;AAC9D,SAASC,aAAa,QAAQ,mCAAkC;AAChE,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,oBAAoB,QAAQ,kBAAiB;AAEtD,OAAO,MAAMC,uBAAuB,CAACC,SAASC;IAC5C,sHAAsH;IAEtH,IAAIC,YAAYP,aAAaK,QAAQG,WAAW,EAAEF;IAClD,MAAMG,mBAAmBH,WAAWI,KAAK,CAAC;IAE1CR,gBAAgBS,cAAc,CAC5BR,qBAAqBS,MAAM,CAACC,IAAI,EAChC,eAAgBC,OAA8B,EAAEC,OAAO;QACrD,MAAMC,iBAAiBP,gBAAgB,CAAC,EAAE;QAC1C,MAAM,EAAEQ,GAAG,EAAE,GAAGF;QAChB,KAAK,MAAMG,MAAMD,IAAK;YACpB,6EAA6E;YAC7E,MAAME,OAAO,GAAGH,eAAe,CAAC,EAAEE,IAAI;YACtCX,YAAYP,aAAaK,QAAQG,WAAW,EAAEW;QAChD;QAEA,MAAMC,OAAO,MAAMnB,cAAca,SAASP,UAAUc,MAAM,EAAEC;QAC5D,OAAO,IAAIpB,gBAAgBqB,UAAU,CAACH;IACxC;AAEJ,EAAC"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAIrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAuC9C,QAAA,MAAM,eAAe,iBACJ,YAAY,sBACV,MAAM,KAAG,MA+FzB,CAAA;AAEH,OAAO,EAAE,eAAe,EAAE,CAAA"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,22 +1,51 @@
|
|
|
1
1
|
import { deepMerge } from 'payload/shared';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { lexicalJsonSchema } from './ai/schemas/lexicalJsonSchema.js';
|
|
3
|
+
import { instructionsCollection } from './collections/Instructions.js';
|
|
4
|
+
import { PLUGIN_NAME } from './defaults.js';
|
|
5
|
+
import { fetchFields } from './endpoints/fetchFields.js';
|
|
6
6
|
import { endpoints } from './endpoints/index.js';
|
|
7
7
|
import { init } from './init.js';
|
|
8
8
|
import { translations } from './translations/index.js';
|
|
9
9
|
import { isPluginActivated } from './utilities/isPluginActivated.js';
|
|
10
10
|
import { updateFieldsConfig } from './utilities/updateFieldsConfig.js';
|
|
11
|
+
const defaultPluginConfig = {
|
|
12
|
+
collections: {},
|
|
13
|
+
disableSponsorMessage: false,
|
|
14
|
+
generatePromptOnInit: true
|
|
15
|
+
};
|
|
16
|
+
const sponsorMessage = `
|
|
17
|
+
╔═══════════════════════════════════════════════════════════════╗
|
|
18
|
+
║ THANK YOU FOR USING THE PAYLOAD AI PLUGIN! ║
|
|
19
|
+
║ ║
|
|
20
|
+
║ If this plugin makes your life easier, please ║
|
|
21
|
+
║ consider supporting its development and maintenance: ║
|
|
22
|
+
║ ║
|
|
23
|
+
║ • Buy me a coffee: https://buymeacoffee.com/ashbuilds ║
|
|
24
|
+
║ • Sponsor on GitHub: https://github.com/sponsors/ashbuilds ║
|
|
25
|
+
║ ║
|
|
26
|
+
║ Your support fuels continued improvements, ║
|
|
27
|
+
║ new features, and more caffeinated coding sessions! ☕ ║
|
|
28
|
+
║ ║
|
|
29
|
+
║ Got feedback or need help? Submit an issue here: ║
|
|
30
|
+
║ • https://github.com/ashbuilds/payload-ai/issues/new ║
|
|
31
|
+
║ ║
|
|
32
|
+
║ Thank you again, and happy building! ║
|
|
33
|
+
╚═══════════════════════════════════════════════════════════════╝
|
|
34
|
+
`;
|
|
11
35
|
const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
36
|
+
pluginConfig = {
|
|
37
|
+
...defaultPluginConfig,
|
|
38
|
+
...pluginConfig
|
|
39
|
+
};
|
|
12
40
|
const isActivated = isPluginActivated();
|
|
13
41
|
let updatedConfig = {
|
|
14
42
|
...incomingConfig
|
|
15
43
|
};
|
|
16
44
|
let collectionsFieldPathMap = {};
|
|
17
45
|
if (isActivated) {
|
|
46
|
+
const Instructions = instructionsCollection();
|
|
18
47
|
// Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit
|
|
19
|
-
const
|
|
48
|
+
const lexicalSchema = lexicalJsonSchema(pluginConfig.editorConfig?.nodes);
|
|
20
49
|
if (pluginConfig.debugging) {
|
|
21
50
|
Instructions.admin.hidden = false;
|
|
22
51
|
}
|
|
@@ -25,16 +54,7 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
25
54
|
[PLUGIN_NAME]: {
|
|
26
55
|
editorConfig: {
|
|
27
56
|
// Used in admin client for useObject hook
|
|
28
|
-
schema:
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
Instructions.custom = {
|
|
33
|
-
...Instructions.custom || {},
|
|
34
|
-
[PLUGIN_NAME]: {
|
|
35
|
-
editorConfig: {
|
|
36
|
-
// Used in textarea endpoint for llm
|
|
37
|
-
schema: zodLexicalSchema
|
|
57
|
+
schema: lexicalSchema
|
|
38
58
|
}
|
|
39
59
|
}
|
|
40
60
|
};
|
|
@@ -43,14 +63,20 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
43
63
|
Instructions
|
|
44
64
|
];
|
|
45
65
|
const { collections: collectionSlugs = [] } = pluginConfig;
|
|
46
|
-
|
|
47
|
-
|
|
66
|
+
const { components: { providers = [] } = {} } = incomingConfig.admin || {};
|
|
67
|
+
const updatedProviders = [
|
|
68
|
+
...providers ?? [],
|
|
48
69
|
{
|
|
49
|
-
|
|
50
|
-
path: '@ai-stack/payloadcms/client#InstructionsProvider',
|
|
51
|
-
serverProps: {}
|
|
70
|
+
path: '@ai-stack/payloadcms/client#InstructionsProvider'
|
|
52
71
|
}
|
|
53
72
|
];
|
|
73
|
+
incomingConfig.admin = {
|
|
74
|
+
...incomingConfig.admin || {},
|
|
75
|
+
components: {
|
|
76
|
+
...incomingConfig.admin?.components ?? {},
|
|
77
|
+
providers: updatedProviders
|
|
78
|
+
}
|
|
79
|
+
};
|
|
54
80
|
updatedConfig = {
|
|
55
81
|
...incomingConfig,
|
|
56
82
|
collections: collections.map((collection)=>{
|
|
@@ -67,28 +93,11 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
67
93
|
endpoints: [
|
|
68
94
|
...incomingConfig.endpoints ?? [],
|
|
69
95
|
endpoints.textarea,
|
|
70
|
-
endpoints.upload
|
|
71
|
-
|
|
72
|
-
globals: [
|
|
73
|
-
...incomingConfig.globals || [],
|
|
74
|
-
{
|
|
75
|
-
slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL,
|
|
76
|
-
access: {
|
|
77
|
-
read: ()=>true
|
|
78
|
-
},
|
|
79
|
-
admin: {
|
|
80
|
-
hidden: !pluginConfig.debugging
|
|
81
|
-
},
|
|
82
|
-
fields: [
|
|
83
|
-
{
|
|
84
|
-
name: 'map',
|
|
85
|
-
type: 'json'
|
|
86
|
-
}
|
|
87
|
-
]
|
|
88
|
-
}
|
|
96
|
+
endpoints.upload,
|
|
97
|
+
fetchFields
|
|
89
98
|
],
|
|
90
99
|
i18n: {
|
|
91
|
-
...incomingConfig.i18n,
|
|
100
|
+
...incomingConfig.i18n || {},
|
|
92
101
|
translations: {
|
|
93
102
|
...deepMerge(translations, incomingConfig.i18n?.translations)
|
|
94
103
|
}
|
|
@@ -101,9 +110,15 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
101
110
|
payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`);
|
|
102
111
|
return;
|
|
103
112
|
}
|
|
104
|
-
await init(payload, collectionsFieldPathMap).catch((error)=>{
|
|
113
|
+
await init(payload, collectionsFieldPathMap, pluginConfig).catch((error)=>{
|
|
105
114
|
console.error(error);
|
|
106
115
|
payload.logger.error(`— AI Plugin: Initialization Error: ${error}`);
|
|
116
|
+
}).finally(()=>{
|
|
117
|
+
if (!pluginConfig.disableSponsorMessage) {
|
|
118
|
+
setTimeout(()=>{
|
|
119
|
+
payload.logger.info(sponsorMessage);
|
|
120
|
+
}, 3000);
|
|
121
|
+
}
|
|
107
122
|
});
|
|
108
123
|
};
|
|
109
124
|
return updatedConfig;
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport { deepMerge } from 'payload/shared'\
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport { deepMerge } from 'payload/shared'\n\nimport type { PluginConfig } from './types.js'\n\nimport { lexicalJsonSchema } from './ai/schemas/lexicalJsonSchema.js'\nimport { instructionsCollection } from './collections/Instructions.js'\nimport { PLUGIN_NAME } from './defaults.js'\nimport { fetchFields } from './endpoints/fetchFields.js'\nimport { endpoints } from './endpoints/index.js'\nimport { init } from './init.js'\nimport { translations } from './translations/index.js'\nimport { isPluginActivated } from './utilities/isPluginActivated.js'\nimport { updateFieldsConfig } from './utilities/updateFieldsConfig.js'\n\nconst defaultPluginConfig: PluginConfig = {\n collections: {},\n disableSponsorMessage: false,\n generatePromptOnInit: true,\n}\n\nconst sponsorMessage = `\n╔═══════════════════════════════════════════════════════════════╗\n║ THANK YOU FOR USING THE PAYLOAD AI PLUGIN! ║\n║ ║\n║ If this plugin makes your life easier, please ║\n║ consider supporting its development and maintenance: ║\n║ ║\n║ • Buy me a coffee: https://buymeacoffee.com/ashbuilds ║\n║ • Sponsor on GitHub: https://github.com/sponsors/ashbuilds ║\n║ ║\n║ Your support fuels continued improvements, ║\n║ new features, and more caffeinated coding sessions! ☕ ║\n║ ║\n║ Got feedback or need help? Submit an issue here: ║\n║ • https://github.com/ashbuilds/payload-ai/issues/new ║\n║ ║\n║ Thank you again, and happy building! ║\n╚═══════════════════════════════════════════════════════════════╝\n`;\n\n\nconst payloadAiPlugin =\n (pluginConfig: PluginConfig) =>\n (incomingConfig: Config): Config => {\n pluginConfig = { ...defaultPluginConfig, ...pluginConfig }\n const isActivated = isPluginActivated()\n let updatedConfig: Config = { ...incomingConfig }\n let collectionsFieldPathMap = {}\n if (isActivated) {\n const Instructions = instructionsCollection()\n // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit\n const lexicalSchema = lexicalJsonSchema(pluginConfig.editorConfig?.nodes)\n\n if (pluginConfig.debugging) {\n Instructions.admin.hidden = false\n }\n\n Instructions.admin.custom = {\n ...(Instructions.admin.custom || {}),\n [PLUGIN_NAME]: {\n editorConfig: {\n // Used in admin client for useObject hook\n schema: lexicalSchema,\n },\n },\n }\n\n const collections = [...(incomingConfig.collections ?? []), Instructions]\n const { collections: collectionSlugs = [] } = pluginConfig\n\n const { components: { providers = [] } = {} } = incomingConfig.admin || {}\n const updatedProviders = [\n ...(providers ?? []),\n {\n path: '@ai-stack/payloadcms/client#InstructionsProvider',\n },\n ]\n\n incomingConfig.admin = {\n ...(incomingConfig.admin || {}),\n components: {\n ...(incomingConfig.admin?.components ?? {}),\n providers: updatedProviders,\n },\n }\n\n updatedConfig = {\n ...incomingConfig,\n collections: collections.map((collection) => {\n if (collectionSlugs[collection.slug]) {\n const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(collection)\n collectionsFieldPathMap = {\n ...collectionsFieldPathMap,\n ...schemaPathMap,\n }\n return updatedCollectionConfig\n }\n\n return collection\n }),\n endpoints: [\n ...(incomingConfig.endpoints ?? []),\n endpoints.textarea,\n endpoints.upload,\n fetchFields,\n ],\n i18n: {\n ...(incomingConfig.i18n || {}),\n translations: {\n ...deepMerge(translations, incomingConfig.i18n?.translations),\n },\n },\n }\n }\n\n updatedConfig.onInit = async (payload) => {\n if (incomingConfig.onInit) await incomingConfig.onInit(payload)\n\n if (!isActivated) {\n payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`)\n return\n }\n\n await init(payload, collectionsFieldPathMap, pluginConfig)\n .catch((error) => {\n console.error(error)\n payload.logger.error(`— AI Plugin: Initialization Error: ${error}`)\n })\n .finally(() => {\n if (!pluginConfig.disableSponsorMessage) {\n setTimeout(() => {\n payload.logger.info(sponsorMessage)\n }, 3000)\n }\n })\n }\n\n return updatedConfig\n }\n\nexport { payloadAiPlugin }\n"],"names":["deepMerge","lexicalJsonSchema","instructionsCollection","PLUGIN_NAME","fetchFields","endpoints","init","translations","isPluginActivated","updateFieldsConfig","defaultPluginConfig","collections","disableSponsorMessage","generatePromptOnInit","sponsorMessage","payloadAiPlugin","pluginConfig","incomingConfig","isActivated","updatedConfig","collectionsFieldPathMap","Instructions","lexicalSchema","editorConfig","nodes","debugging","admin","hidden","custom","schema","collectionSlugs","components","providers","updatedProviders","path","map","collection","slug","schemaPathMap","updatedCollectionConfig","textarea","upload","i18n","onInit","payload","logger","warn","catch","error","console","finally","setTimeout","info"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const FieldContext: React.Context<{
|
|
3
|
+
path?: string;
|
|
4
|
+
schemaPath?: string;
|
|
5
|
+
type?: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const FieldProvider: ({ children, context, }: {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
context: {
|
|
10
|
+
path: string;
|
|
11
|
+
schemaPath: unknown;
|
|
12
|
+
type: unknown;
|
|
13
|
+
};
|
|
14
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=FieldProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/FieldProvider/FieldProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAA;AAYvD,eAAO,MAAM,YAAY;WAThB,MAAM;iBACA,MAAM;WACZ,MAAM;EAO0C,CAAA;AAEzD,eAAO,MAAM,aAAa,2BAGvB;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;CAC9D,4CAwBA,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React, { createContext, useEffect } from 'react';
|
|
3
|
+
const initialContext = {
|
|
4
|
+
type: undefined,
|
|
5
|
+
path: '',
|
|
6
|
+
schemaPath: ''
|
|
7
|
+
};
|
|
8
|
+
export const FieldContext = /*#__PURE__*/ createContext(initialContext);
|
|
9
|
+
export const FieldProvider = ({ children, context })=>{
|
|
10
|
+
const [type, setType] = React.useState();
|
|
11
|
+
const [path, setPath] = React.useState();
|
|
12
|
+
const [schemaPath, setSchemaPath] = React.useState();
|
|
13
|
+
useEffect(()=>{
|
|
14
|
+
if (schemaPath !== context.schemaPath) {
|
|
15
|
+
setType(context.type);
|
|
16
|
+
setPath(context.path);
|
|
17
|
+
setSchemaPath(context.schemaPath);
|
|
18
|
+
}
|
|
19
|
+
}, [
|
|
20
|
+
schemaPath,
|
|
21
|
+
context
|
|
22
|
+
]);
|
|
23
|
+
return /*#__PURE__*/ _jsx(FieldContext.Provider, {
|
|
24
|
+
value: {
|
|
25
|
+
type,
|
|
26
|
+
path,
|
|
27
|
+
schemaPath
|
|
28
|
+
},
|
|
29
|
+
children: children
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=FieldProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/FieldProvider/FieldProvider.tsx"],"sourcesContent":["import React, { createContext, useEffect } from 'react'\n\nconst initialContext: {\n path?: string\n schemaPath?: string\n type?: string\n} = {\n type: undefined,\n path: '',\n schemaPath: '',\n}\n\nexport const FieldContext = createContext(initialContext)\n\nexport const FieldProvider = ({\n children,\n context,\n}: {\n children: React.ReactNode\n context: { path: string; schemaPath: unknown; type: unknown }\n}) => {\n const [type, setType] = React.useState<string>()\n const [path, setPath] = React.useState<string>()\n const [schemaPath, setSchemaPath] = React.useState<string>()\n\n useEffect(() => {\n if (schemaPath !== context.schemaPath) {\n setType(context.type as string)\n setPath(context.path)\n setSchemaPath(context.schemaPath as string)\n }\n }, [schemaPath, context])\n\n return (\n <FieldContext.Provider\n value={{\n type,\n path,\n schemaPath,\n }}\n >\n {children}\n </FieldContext.Provider>\n )\n}\n"],"names":["React","createContext","useEffect","initialContext","type","undefined","path","schemaPath","FieldContext","FieldProvider","children","context","setType","useState","setPath","setSchemaPath","Provider","value"],"mappings":";AAAA,OAAOA,SAASC,aAAa,EAAEC,SAAS,QAAQ,QAAO;AAEvD,MAAMC,iBAIF;IACFC,MAAMC;IACNC,MAAM;IACNC,YAAY;AACd;AAEA,OAAO,MAAMC,6BAAeP,cAAcE,gBAAe;AAEzD,OAAO,MAAMM,gBAAgB,CAAC,EAC5BC,QAAQ,EACRC,OAAO,EAIR;IACC,MAAM,CAACP,MAAMQ,QAAQ,GAAGZ,MAAMa,QAAQ;IACtC,MAAM,CAACP,MAAMQ,QAAQ,GAAGd,MAAMa,QAAQ;IACtC,MAAM,CAACN,YAAYQ,cAAc,GAAGf,MAAMa,QAAQ;IAElDX,UAAU;QACR,IAAIK,eAAeI,QAAQJ,UAAU,EAAE;YACrCK,QAAQD,QAAQP,IAAI;YACpBU,QAAQH,QAAQL,IAAI;YACpBS,cAAcJ,QAAQJ,UAAU;QAClC;IACF,GAAG;QAACA;QAAYI;KAAQ;IAExB,qBACE,KAACH,aAAaQ,QAAQ;QACpBC,OAAO;YACLb;YACAE;YACAC;QACF;kBAECG;;AAGP,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFieldProps.d.ts","sourceRoot":"","sources":["../../../src/providers/FieldProvider/useFieldProps.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa;;;;CAQzB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { FieldContext } from './FieldProvider.js';
|
|
3
|
+
export const useFieldProps = ()=>{
|
|
4
|
+
const { type, path, schemaPath } = useContext(FieldContext);
|
|
5
|
+
return {
|
|
6
|
+
type,
|
|
7
|
+
path,
|
|
8
|
+
schemaPath
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=useFieldProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/FieldProvider/useFieldProps.ts"],"sourcesContent":["import { useContext } from 'react'\n\nimport { FieldContext } from './FieldProvider.js'\n\nexport const useFieldProps = () => {\n const { type, path, schemaPath } = useContext(FieldContext)\n\n return {\n type,\n path,\n schemaPath,\n }\n}\n"],"names":["useContext","FieldContext","useFieldProps","type","path","schemaPath"],"mappings":"AAAA,SAASA,UAAU,QAAQ,QAAO;AAElC,SAASC,YAAY,QAAQ,qBAAoB;AAEjD,OAAO,MAAMC,gBAAgB;IAC3B,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAEC,UAAU,EAAE,GAAGL,WAAWC;IAE9C,OAAO;QACLE;QACAC;QACAC;IACF;AACF,EAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import type { Field } from 'payload';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
export declare const InstructionsContext: React.Context<{
|
|
3
|
-
|
|
4
|
+
field?: Field;
|
|
5
|
+
instructions: Record<string, any>;
|
|
6
|
+
path?: string;
|
|
7
|
+
schemaPath?: unknown;
|
|
4
8
|
}>;
|
|
5
9
|
export declare const InstructionsProvider: React.FC;
|
|
6
10
|
//# sourceMappingURL=InstructionsProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstructionsProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/InstructionsProvider/InstructionsProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6C,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"InstructionsProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/InstructionsProvider/InstructionsProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,KAA6C,MAAM,OAAO,CAAA;AAgBjE,eAAO,MAAM,mBAAmB;YAXtB,KAAK;kBACC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;WAC1B,MAAM;iBACA,OAAO;EAQ0C,CAAA;AAEhE,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EA0BxC,CAAA"}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useConfig } from '@payloadcms/ui';
|
|
3
4
|
import React, { createContext, useEffect, useState } from 'react';
|
|
4
|
-
import {
|
|
5
|
+
import { PLUGIN_FETCH_FIELDS_ENDPOINT } from '../../defaults.js';
|
|
5
6
|
const initialContext = {
|
|
6
|
-
|
|
7
|
+
field: undefined,
|
|
8
|
+
instructions: undefined,
|
|
9
|
+
path: '',
|
|
10
|
+
schemaPath: ''
|
|
7
11
|
};
|
|
8
12
|
export const InstructionsContext = /*#__PURE__*/ createContext(initialContext);
|
|
9
13
|
export const InstructionsProvider = ({ children })=>{
|
|
10
14
|
const [instructions, setInstructionsState] = useState({});
|
|
15
|
+
const { config } = useConfig();
|
|
16
|
+
const { routes: { api }, serverURL } = config;
|
|
11
17
|
// This is here because each field have separate instructions and
|
|
12
|
-
// their ID is needed to edit them for Drawer
|
|
13
|
-
// one by one its map is saved in globals during build
|
|
18
|
+
// their ID is needed to edit them for Drawer
|
|
14
19
|
useEffect(()=>{
|
|
15
|
-
fetch(
|
|
16
|
-
res.json().then((data)=>{
|
|
17
|
-
setInstructionsState(data
|
|
20
|
+
fetch(`${serverURL}${api}${PLUGIN_FETCH_FIELDS_ENDPOINT}`).then(async (res)=>{
|
|
21
|
+
await res.json().then((data)=>{
|
|
22
|
+
setInstructionsState(data);
|
|
18
23
|
});
|
|
19
24
|
}).catch((err)=>{
|
|
20
25
|
console.error('InstructionsProvider:', err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/providers/InstructionsProvider/InstructionsProvider.tsx"],"sourcesContent":["'use client'\n\nimport React, { createContext, useEffect, useState } from 'react'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/InstructionsProvider/InstructionsProvider.tsx"],"sourcesContent":["'use client'\n\nimport type { Field } from 'payload'\n\nimport { useConfig } from '@payloadcms/ui'\nimport React, { createContext, useEffect, useState } from 'react'\n\nimport { PLUGIN_FETCH_FIELDS_ENDPOINT } from '../../defaults.js'\n\nconst initialContext: {\n field?: Field\n instructions: Record<string, any>\n path?: string\n schemaPath?: unknown\n} = {\n field: undefined,\n instructions: undefined,\n path: '',\n schemaPath: '',\n}\n\nexport const InstructionsContext = createContext(initialContext)\n\nexport const InstructionsProvider: React.FC = ({ children }: { children: React.ReactNode }) => {\n const [instructions, setInstructionsState] = useState({})\n\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n\n // This is here because each field have separate instructions and\n // their ID is needed to edit them for Drawer\n useEffect(() => {\n fetch(`${serverURL}${api}${PLUGIN_FETCH_FIELDS_ENDPOINT}`)\n .then(async (res) => {\n await res.json().then((data) => {\n setInstructionsState(data)\n })\n })\n .catch((err) => {\n console.error('InstructionsProvider:', err)\n })\n }, [])\n\n return (\n <InstructionsContext.Provider value={{ instructions }}>{children}</InstructionsContext.Provider>\n )\n}\n"],"names":["useConfig","React","createContext","useEffect","useState","PLUGIN_FETCH_FIELDS_ENDPOINT","initialContext","field","undefined","instructions","path","schemaPath","InstructionsContext","InstructionsProvider","children","setInstructionsState","config","routes","api","serverURL","fetch","then","res","json","data","catch","err","console","error","Provider","value"],"mappings":"AAAA;;AAIA,SAASA,SAAS,QAAQ,iBAAgB;AAC1C,OAAOC,SAASC,aAAa,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAEjE,SAASC,4BAA4B,QAAQ,oBAAmB;AAEhE,MAAMC,iBAKF;IACFC,OAAOC;IACPC,cAAcD;IACdE,MAAM;IACNC,YAAY;AACd;AAEA,OAAO,MAAMC,oCAAsBV,cAAcI,gBAAe;AAEhE,OAAO,MAAMO,uBAAiC,CAAC,EAAEC,QAAQ,EAAiC;IACxF,MAAM,CAACL,cAAcM,qBAAqB,GAAGX,SAAS,CAAC;IAEvD,MAAM,EAAEY,MAAM,EAAE,GAAGhB;IACnB,MAAM,EACJiB,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,GAAGH;IAEJ,iEAAiE;IACjE,6CAA6C;IAC7Cb,UAAU;QACRiB,MAAM,GAAGD,YAAYD,MAAMb,8BAA8B,EACtDgB,IAAI,CAAC,OAAOC;YACX,MAAMA,IAAIC,IAAI,GAAGF,IAAI,CAAC,CAACG;gBACrBT,qBAAqBS;YACvB;QACF,GACCC,KAAK,CAAC,CAACC;YACNC,QAAQC,KAAK,CAAC,yBAAyBF;QACzC;IACJ,GAAG,EAAE;IAEL,qBACE,KAACd,oBAAoBiB,QAAQ;QAACC,OAAO;YAAErB;QAAa;kBAAIK;;AAE5D,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInstructions.d.ts","sourceRoot":"","sources":["../../../src/providers/InstructionsProvider/useInstructions.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"useInstructions.d.ts","sourceRoot":"","sources":["../../../src/providers/InstructionsProvider/useInstructions.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,YAClB;IACN,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,QAgDF,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { useContext } from 'react';
|
|
2
|
-
import { InstructionsContext } from './InstructionsProvider.js';
|
|
1
|
+
import { useContext, useEffect, useState } from 'react';
|
|
3
2
|
import { handlebarsHelpers, handlebarsHelpersMap } from '../../libraries/handlebars/helpersMap.js';
|
|
4
|
-
|
|
3
|
+
import { InstructionsContext } from './InstructionsProvider.js';
|
|
4
|
+
export const useInstructions = (update = {})=>{
|
|
5
5
|
const context = useContext(InstructionsContext);
|
|
6
6
|
//Fields are used for autocompletion in PromptTextareaField
|
|
7
7
|
const fields = Object.keys(context.instructions || {}).map((key)=>{
|
|
@@ -12,6 +12,10 @@ export const useInstructions = ({ path })=>{
|
|
|
12
12
|
].reduce((acc, f)=>{
|
|
13
13
|
const fieldKey = Object.keys(context.instructions).find((k)=>k.endsWith(f));
|
|
14
14
|
const fieldInfo = context.instructions[fieldKey];
|
|
15
|
+
// Currently, Upload fields are excluded from suggestions
|
|
16
|
+
if (fieldInfo.fieldType === 'upload') {
|
|
17
|
+
return acc;
|
|
18
|
+
}
|
|
15
19
|
const helpers = handlebarsHelpers.filter((h)=>handlebarsHelpersMap[h]?.field === fieldInfo.fieldType);
|
|
16
20
|
if (helpers.length) {
|
|
17
21
|
for (const helper of helpers){
|
|
@@ -22,9 +26,18 @@ export const useInstructions = ({ path })=>{
|
|
|
22
26
|
acc.push(f);
|
|
23
27
|
return acc;
|
|
24
28
|
}, []);
|
|
29
|
+
const [schemaPath, setSchemaPath] = useState(update.schemaPath);
|
|
30
|
+
useEffect(()=>{
|
|
31
|
+
if (update.schemaPath !== schemaPath) {
|
|
32
|
+
setSchemaPath(update.schemaPath);
|
|
33
|
+
}
|
|
34
|
+
}, [
|
|
35
|
+
schemaPath,
|
|
36
|
+
update
|
|
37
|
+
]);
|
|
25
38
|
return {
|
|
26
39
|
...context,
|
|
27
|
-
...context.instructions[
|
|
40
|
+
...context.instructions[schemaPath] || {},
|
|
28
41
|
fields,
|
|
29
42
|
map: context.instructions,
|
|
30
43
|
promptEditorSuggestions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/providers/InstructionsProvider/useInstructions.ts"],"sourcesContent":["import { useContext } from 'react'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/InstructionsProvider/useInstructions.ts"],"sourcesContent":["import { useContext, useEffect, useState } from 'react'\n\nimport { handlebarsHelpers, handlebarsHelpersMap } from '../../libraries/handlebars/helpersMap.js'\nimport { InstructionsContext } from './InstructionsProvider.js'\n\nexport const useInstructions = (\n update: {\n schemaPath?: unknown\n } = {},\n) => {\n const context = useContext(InstructionsContext)\n\n //Fields are used for autocompletion in PromptTextareaField\n const fields = Object.keys(context.instructions || {}).map((key) => {\n return key.split('.').slice(1).join('.')\n })\n\n const promptEditorSuggestions = [...fields].reduce((acc, f) => {\n const fieldKey = Object.keys(context.instructions).find((k) => k.endsWith(f))\n const fieldInfo = context.instructions[fieldKey]\n\n // Currently, Upload fields are excluded from suggestions\n if (fieldInfo.fieldType === 'upload') {\n return acc\n }\n\n const helpers = handlebarsHelpers.filter(\n (h) => handlebarsHelpersMap[h]?.field === fieldInfo.fieldType,\n )\n\n if (helpers.length) {\n for (const helper of helpers) {\n acc.push(helper + ` ${f}`)\n }\n return acc\n }\n\n acc.push(f)\n return acc\n }, [])\n\n const [schemaPath, setSchemaPath] = useState(update.schemaPath as string)\n\n useEffect(() => {\n if(update.schemaPath !== schemaPath) {\n setSchemaPath(update.schemaPath as string)\n }\n }, [schemaPath, update])\n\n return {\n ...context,\n ...(context.instructions[schemaPath] || {}),\n fields,\n map: context.instructions,\n promptEditorSuggestions,\n }\n}\n"],"names":["useContext","useEffect","useState","handlebarsHelpers","handlebarsHelpersMap","InstructionsContext","useInstructions","update","context","fields","Object","keys","instructions","map","key","split","slice","join","promptEditorSuggestions","reduce","acc","f","fieldKey","find","k","endsWith","fieldInfo","fieldType","helpers","filter","h","field","length","helper","push","schemaPath","setSchemaPath"],"mappings":"AAAA,SAASA,UAAU,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAEvD,SAASC,iBAAiB,EAAEC,oBAAoB,QAAQ,2CAA0C;AAClG,SAASC,mBAAmB,QAAQ,4BAA2B;AAE/D,OAAO,MAAMC,kBAAkB,CAC7BC,SAEI,CAAC,CAAC;IAEN,MAAMC,UAAUR,WAAWK;IAE3B,2DAA2D;IAC3D,MAAMI,SAASC,OAAOC,IAAI,CAACH,QAAQI,YAAY,IAAI,CAAC,GAAGC,GAAG,CAAC,CAACC;QAC1D,OAAOA,IAAIC,KAAK,CAAC,KAAKC,KAAK,CAAC,GAAGC,IAAI,CAAC;IACtC;IAEA,MAAMC,0BAA0B;WAAIT;KAAO,CAACU,MAAM,CAAC,CAACC,KAAKC;QACvD,MAAMC,WAAWZ,OAAOC,IAAI,CAACH,QAAQI,YAAY,EAAEW,IAAI,CAAC,CAACC,IAAMA,EAAEC,QAAQ,CAACJ;QAC1E,MAAMK,YAAYlB,QAAQI,YAAY,CAACU,SAAS;QAEhD,yDAAyD;QACzD,IAAII,UAAUC,SAAS,KAAK,UAAU;YACpC,OAAOP;QACT;QAEA,MAAMQ,UAAUzB,kBAAkB0B,MAAM,CACtC,CAACC,IAAM1B,oBAAoB,CAAC0B,EAAE,EAAEC,UAAUL,UAAUC,SAAS;QAG/D,IAAIC,QAAQI,MAAM,EAAE;YAClB,KAAK,MAAMC,UAAUL,QAAS;gBAC5BR,IAAIc,IAAI,CAACD,SAAS,CAAC,CAAC,EAAEZ,GAAG;YAC3B;YACA,OAAOD;QACT;QAEAA,IAAIc,IAAI,CAACb;QACT,OAAOD;IACT,GAAG,EAAE;IAEL,MAAM,CAACe,YAAYC,cAAc,GAAGlC,SAASK,OAAO4B,UAAU;IAE9DlC,UAAU;QACR,IAAGM,OAAO4B,UAAU,KAAKA,YAAY;YACnCC,cAAc7B,OAAO4B,UAAU;QACjC;IACF,GAAG;QAACA;QAAY5B;KAAO;IAEvB,OAAO;QACL,GAAGC,OAAO;QACV,GAAIA,QAAQI,YAAY,CAACuB,WAAW,IAAI,CAAC,CAAC;QAC1C1B;QACAI,KAAKL,QAAQI,YAAY;QACzBM;IACF;AACF,EAAC"}
|