@ai-stack/payloadcms 3.0.0-beta.104 → 3.0.0-beta.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +0 -10
  2. package/dist/ai/prompts.d.ts +1 -1
  3. package/dist/ai/prompts.d.ts.map +1 -1
  4. package/dist/ai/prompts.js +3 -6
  5. package/dist/ai/prompts.js.map +1 -1
  6. package/dist/exports/fields.d.ts +1 -1
  7. package/dist/exports/fields.d.ts.map +1 -1
  8. package/dist/exports/fields.js +1 -1
  9. package/dist/exports/fields.js.map +1 -1
  10. package/dist/fields/DescriptionField/DescriptionField.d.ts +4 -0
  11. package/dist/fields/DescriptionField/DescriptionField.d.ts.map +1 -0
  12. package/dist/fields/{ComposeField/ComposeField.js → DescriptionField/DescriptionField.js} +4 -4
  13. package/dist/fields/DescriptionField/DescriptionField.js.map +1 -0
  14. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts +2 -0
  15. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts.map +1 -0
  16. package/dist/fields/LexicalEditor/{ComposeFeatureComponent.js → ActionsFeatureComponent.js} +4 -4
  17. package/dist/fields/LexicalEditor/{ComposeFeatureComponent.js.map → ActionsFeatureComponent.js.map} +1 -1
  18. package/dist/fields/LexicalEditor/feature.client.d.ts +4 -1
  19. package/dist/fields/LexicalEditor/feature.client.d.ts.map +1 -1
  20. package/dist/fields/LexicalEditor/feature.client.js +2 -2
  21. package/dist/fields/LexicalEditor/feature.client.js.map +1 -1
  22. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +2 -2
  23. package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
  24. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  25. package/dist/fields/SelectField/SelectField.d.ts +2 -2
  26. package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
  27. package/dist/fields/SelectField/SelectField.js.map +1 -1
  28. package/dist/libraries/handlebars/asyncHandlebars.js +1 -1
  29. package/dist/libraries/handlebars/asyncHandlebars.js.map +1 -1
  30. package/dist/ui/Actions/Actions.d.ts +5 -0
  31. package/dist/ui/Actions/Actions.d.ts.map +1 -0
  32. package/dist/ui/{Compose/Compose.js → Actions/Actions.js} +38 -45
  33. package/dist/ui/Actions/Actions.js.map +1 -0
  34. package/dist/ui/{Compose → Actions}/UndoRedoActions.d.ts.map +1 -1
  35. package/dist/ui/{Compose → Actions}/UndoRedoActions.js +2 -15
  36. package/dist/ui/Actions/UndoRedoActions.js.map +1 -0
  37. package/dist/ui/{Compose → Actions}/hooks/menu/Item.d.ts.map +1 -1
  38. package/dist/ui/{Compose → Actions}/hooks/menu/Item.js.map +1 -1
  39. package/dist/ui/Actions/hooks/menu/TranslateMenu.d.ts.map +1 -0
  40. package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.js.map +1 -1
  41. package/dist/ui/{Compose → Actions}/hooks/menu/items.d.ts.map +1 -1
  42. package/dist/ui/{Compose → Actions}/hooks/menu/items.js.map +1 -1
  43. package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.d.ts.map +1 -1
  44. package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.js.map +1 -1
  45. package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.d.ts.map +1 -1
  46. package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.js.map +1 -1
  47. package/dist/ui/{Compose → Actions}/hooks/useGenerate.d.ts.map +1 -1
  48. package/dist/ui/{Compose → Actions}/hooks/useGenerate.js +2 -1
  49. package/dist/ui/{Compose → Actions}/hooks/useGenerate.js.map +1 -1
  50. package/dist/ui/Actions/hooks/useHistory.d.ts.map +1 -0
  51. package/dist/ui/{Compose → Actions}/hooks/useHistory.js +1 -3
  52. package/dist/ui/Actions/hooks/useHistory.js.map +1 -0
  53. package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
  54. package/dist/utilities/updateFieldsConfig.js +8 -4
  55. package/dist/utilities/updateFieldsConfig.js.map +1 -1
  56. package/package.json +59 -35
  57. package/dist/fields/ComposeField/ComposeField.d.ts +0 -4
  58. package/dist/fields/ComposeField/ComposeField.d.ts.map +0 -1
  59. package/dist/fields/ComposeField/ComposeField.js.map +0 -1
  60. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts +0 -2
  61. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +0 -1
  62. package/dist/ui/Compose/Compose.d.ts +0 -9
  63. package/dist/ui/Compose/Compose.d.ts.map +0 -1
  64. package/dist/ui/Compose/Compose.js.map +0 -1
  65. package/dist/ui/Compose/UndoRedoActions.js.map +0 -1
  66. package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +0 -1
  67. package/dist/ui/Compose/hooks/useHistory.d.ts.map +0 -1
  68. package/dist/ui/Compose/hooks/useHistory.js.map +0 -1
  69. /package/dist/ui/{Compose → Actions}/UndoRedoActions.d.ts +0 -0
  70. /package/dist/ui/{Compose/compose.module.scss → Actions/actions.module.scss} +0 -0
  71. /package/dist/ui/{Compose → Actions}/hooks/menu/Item.d.ts +0 -0
  72. /package/dist/ui/{Compose → Actions}/hooks/menu/Item.js +0 -0
  73. /package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.d.ts +0 -0
  74. /package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.js +0 -0
  75. /package/dist/ui/{Compose → Actions}/hooks/menu/items.d.ts +0 -0
  76. /package/dist/ui/{Compose → Actions}/hooks/menu/items.js +0 -0
  77. /package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.d.ts +0 -0
  78. /package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.js +0 -0
  79. /package/dist/ui/{Compose → Actions}/hooks/menu/menu.module.scss +0 -0
  80. /package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.d.ts +0 -0
  81. /package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.js +0 -0
  82. /package/dist/ui/{Compose → Actions}/hooks/useGenerate.d.ts +0 -0
  83. /package/dist/ui/{Compose → Actions}/hooks/useHistory.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/TranslateMenu.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport locales from 'locale-codes'\n\nimport { Translate } from './items.js'\nimport { Item } from './Item.js'\nimport styles from './menu.module.scss'\n\nexport const TranslateMenu = ({ onClick }) => {\n const [show, setShow] = useState(false)\n\n const filteredLocales = locales.all.filter((a) => {\n return a.tag && a.location\n })\n\n const [languages, setLanguages] = useState(filteredLocales)\n const [inputFocus, setInputFocus] = useState(false)\n\n return (\n <div\n className={styles.menu}\n onMouseLeave={() => {\n if (!inputFocus) {\n setShow(false)\n }\n }}\n >\n <Translate\n onClick={() => {\n setShow(!show)\n }}\n onMouseEnter={() => setShow(true)}\n isMenu={true}\n isActive={show}\n ></Translate>\n <div className={styles.hoverMenu} data-show={show}>\n <div className={`${styles.menu} ${styles.subMenu}`}>\n <Item\n onClick={() => {}}\n style={{\n position: 'sticky',\n top: 0,\n padding: '0 0 5px 0',\n background: 'transparent',\n }}\n >\n <input\n className={styles.menuInput}\n placeholder={'Search...'}\n onFocus={() => setInputFocus(true)}\n onBlur={() => setInputFocus(false)}\n onChange={(event) => {\n const value = event.target.value\n setLanguages(\n filteredLocales.filter((l) => {\n const lowerCaseValue = value.toLowerCase()\n return (\n l.name.toLowerCase().startsWith(lowerCaseValue) ||\n l.location.toLowerCase().startsWith(lowerCaseValue) ||\n l.tag.toLowerCase().startsWith(lowerCaseValue)\n )\n }),\n )\n }}\n />\n </Item>\n {languages.map((locale) => {\n return (\n <Item\n key={locale.tag}\n onClick={() => {\n onClick({ locale: locale.tag })\n }}\n >\n <span className={styles.ellipsis}>{`${locale.location} (${locale.tag})`}</span>\n </Item>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n"],"names":["React","useState","locales","Translate","Item","styles","TranslateMenu","onClick","show","setShow","filteredLocales","all","filter","a","tag","location","languages","setLanguages","inputFocus","setInputFocus","div","className","menu","onMouseLeave","onMouseEnter","isMenu","isActive","hoverMenu","data-show","subMenu","style","position","top","padding","background","input","menuInput","placeholder","onFocus","onBlur","onChange","event","value","target","l","lowerCaseValue","toLowerCase","name","startsWith","map","locale","span","ellipsis"],"mappings":";AAAA,OAAOA,SAASC,QAAQ,QAAQ,QAAO;AACvC,OAAOC,aAAa,eAAc;AAElC,SAASC,SAAS,QAAQ,aAAY;AACtC,SAASC,IAAI,QAAQ,YAAW;AAChC,OAAOC,YAAY,qBAAoB;AAEvC,OAAO,MAAMC,gBAAgB,CAAC,EAAEC,OAAO,EAAE;IACvC,MAAM,CAACC,MAAMC,QAAQ,GAAGR,SAAS;IAEjC,MAAMS,kBAAkBR,QAAQS,GAAG,CAACC,MAAM,CAAC,CAACC;QAC1C,OAAOA,EAAEC,GAAG,IAAID,EAAEE,QAAQ;IAC5B;IAEA,MAAM,CAACC,WAAWC,aAAa,GAAGhB,SAASS;IAC3C,MAAM,CAACQ,YAAYC,cAAc,GAAGlB,SAAS;IAE7C,qBACE,MAACmB;QACCC,WAAWhB,OAAOiB,IAAI;QACtBC,cAAc;YACZ,IAAI,CAACL,YAAY;gBACfT,QAAQ;YACV;QACF;;0BAEA,KAACN;gBACCI,SAAS;oBACPE,QAAQ,CAACD;gBACX;gBACAgB,cAAc,IAAMf,QAAQ;gBAC5BgB,QAAQ;gBACRC,UAAUlB;;0BAEZ,KAACY;gBAAIC,WAAWhB,OAAOsB,SAAS;gBAAEC,aAAWpB;0BAC3C,cAAA,MAACY;oBAAIC,WAAW,CAAC,EAAEhB,OAAOiB,IAAI,CAAC,CAAC,EAAEjB,OAAOwB,OAAO,CAAC,CAAC;;sCAChD,KAACzB;4BACCG,SAAS,KAAO;4BAChBuB,OAAO;gCACLC,UAAU;gCACVC,KAAK;gCACLC,SAAS;gCACTC,YAAY;4BACd;sCAEA,cAAA,KAACC;gCACCd,WAAWhB,OAAO+B,SAAS;gCAC3BC,aAAa;gCACbC,SAAS,IAAMnB,cAAc;gCAC7BoB,QAAQ,IAAMpB,cAAc;gCAC5BqB,UAAU,CAACC;oCACT,MAAMC,QAAQD,MAAME,MAAM,CAACD,KAAK;oCAChCzB,aACEP,gBAAgBE,MAAM,CAAC,CAACgC;wCACtB,MAAMC,iBAAiBH,MAAMI,WAAW;wCACxC,OACEF,EAAEG,IAAI,CAACD,WAAW,GAAGE,UAAU,CAACH,mBAChCD,EAAE7B,QAAQ,CAAC+B,WAAW,GAAGE,UAAU,CAACH,mBACpCD,EAAE9B,GAAG,CAACgC,WAAW,GAAGE,UAAU,CAACH;oCAEnC;gCAEJ;;;wBAGH7B,UAAUiC,GAAG,CAAC,CAACC;4BACd,qBACE,KAAC9C;gCAECG,SAAS;oCACPA,QAAQ;wCAAE2C,QAAQA,OAAOpC,GAAG;oCAAC;gCAC/B;0CAEA,cAAA,KAACqC;oCAAK9B,WAAWhB,OAAO+C,QAAQ;8CAAG,CAAC,EAAEF,OAAOnC,QAAQ,CAAC,EAAE,EAAEmC,OAAOpC,GAAG,CAAC,CAAC,CAAC;;+BALlEoC,OAAOpC,GAAG;wBAQrB;;;;;;AAKV,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/ui/Actions/hooks/menu/TranslateMenu.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport locales from 'locale-codes'\n\nimport { Translate } from './items.js'\nimport { Item } from './Item.js'\nimport styles from './menu.module.scss'\n\nexport const TranslateMenu = ({ onClick }) => {\n const [show, setShow] = useState(false)\n\n const filteredLocales = locales.all.filter((a) => {\n return a.tag && a.location\n })\n\n const [languages, setLanguages] = useState(filteredLocales)\n const [inputFocus, setInputFocus] = useState(false)\n\n return (\n <div\n className={styles.menu}\n onMouseLeave={() => {\n if (!inputFocus) {\n setShow(false)\n }\n }}\n >\n <Translate\n onClick={() => {\n setShow(!show)\n }}\n onMouseEnter={() => setShow(true)}\n isMenu={true}\n isActive={show}\n ></Translate>\n <div className={styles.hoverMenu} data-show={show}>\n <div className={`${styles.menu} ${styles.subMenu}`}>\n <Item\n onClick={() => {}}\n style={{\n position: 'sticky',\n top: 0,\n padding: '0 0 5px 0',\n background: 'transparent',\n }}\n >\n <input\n className={styles.menuInput}\n placeholder={'Search...'}\n onFocus={() => setInputFocus(true)}\n onBlur={() => setInputFocus(false)}\n onChange={(event) => {\n const value = event.target.value\n setLanguages(\n filteredLocales.filter((l) => {\n const lowerCaseValue = value.toLowerCase()\n return (\n l.name.toLowerCase().startsWith(lowerCaseValue) ||\n l.location.toLowerCase().startsWith(lowerCaseValue) ||\n l.tag.toLowerCase().startsWith(lowerCaseValue)\n )\n }),\n )\n }}\n />\n </Item>\n {languages.map((locale) => {\n return (\n <Item\n key={locale.tag}\n onClick={() => {\n onClick({ locale: locale.tag })\n }}\n >\n <span className={styles.ellipsis}>{`${locale.location} (${locale.tag})`}</span>\n </Item>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n"],"names":["React","useState","locales","Translate","Item","styles","TranslateMenu","onClick","show","setShow","filteredLocales","all","filter","a","tag","location","languages","setLanguages","inputFocus","setInputFocus","div","className","menu","onMouseLeave","onMouseEnter","isMenu","isActive","hoverMenu","data-show","subMenu","style","position","top","padding","background","input","menuInput","placeholder","onFocus","onBlur","onChange","event","value","target","l","lowerCaseValue","toLowerCase","name","startsWith","map","locale","span","ellipsis"],"mappings":";AAAA,OAAOA,SAASC,QAAQ,QAAQ,QAAO;AACvC,OAAOC,aAAa,eAAc;AAElC,SAASC,SAAS,QAAQ,aAAY;AACtC,SAASC,IAAI,QAAQ,YAAW;AAChC,OAAOC,YAAY,qBAAoB;AAEvC,OAAO,MAAMC,gBAAgB,CAAC,EAAEC,OAAO,EAAE;IACvC,MAAM,CAACC,MAAMC,QAAQ,GAAGR,SAAS;IAEjC,MAAMS,kBAAkBR,QAAQS,GAAG,CAACC,MAAM,CAAC,CAACC;QAC1C,OAAOA,EAAEC,GAAG,IAAID,EAAEE,QAAQ;IAC5B;IAEA,MAAM,CAACC,WAAWC,aAAa,GAAGhB,SAASS;IAC3C,MAAM,CAACQ,YAAYC,cAAc,GAAGlB,SAAS;IAE7C,qBACE,MAACmB;QACCC,WAAWhB,OAAOiB,IAAI;QACtBC,cAAc;YACZ,IAAI,CAACL,YAAY;gBACfT,QAAQ;YACV;QACF;;0BAEA,KAACN;gBACCI,SAAS;oBACPE,QAAQ,CAACD;gBACX;gBACAgB,cAAc,IAAMf,QAAQ;gBAC5BgB,QAAQ;gBACRC,UAAUlB;;0BAEZ,KAACY;gBAAIC,WAAWhB,OAAOsB,SAAS;gBAAEC,aAAWpB;0BAC3C,cAAA,MAACY;oBAAIC,WAAW,CAAC,EAAEhB,OAAOiB,IAAI,CAAC,CAAC,EAAEjB,OAAOwB,OAAO,CAAC,CAAC;;sCAChD,KAACzB;4BACCG,SAAS,KAAO;4BAChBuB,OAAO;gCACLC,UAAU;gCACVC,KAAK;gCACLC,SAAS;gCACTC,YAAY;4BACd;sCAEA,cAAA,KAACC;gCACCd,WAAWhB,OAAO+B,SAAS;gCAC3BC,aAAa;gCACbC,SAAS,IAAMnB,cAAc;gCAC7BoB,QAAQ,IAAMpB,cAAc;gCAC5BqB,UAAU,CAACC;oCACT,MAAMC,QAAQD,MAAME,MAAM,CAACD,KAAK;oCAChCzB,aACEP,gBAAgBE,MAAM,CAAC,CAACgC;wCACtB,MAAMC,iBAAiBH,MAAMI,WAAW;wCACxC,OACEF,EAAEG,IAAI,CAACD,WAAW,GAAGE,UAAU,CAACH,mBAChCD,EAAE7B,QAAQ,CAAC+B,WAAW,GAAGE,UAAU,CAACH,mBACpCD,EAAE9B,GAAG,CAACgC,WAAW,GAAGE,UAAU,CAACH;oCAEnC;gCAEJ;;;wBAGH7B,UAAUiC,GAAG,CAAC,CAACC;4BACd,qBACE,KAAC9C;gCAECG,SAAS;oCACPA,QAAQ;wCAAE2C,QAAQA,OAAOpC,GAAG;oCAAC;gCAC/B;0CAEA,cAAA,KAACqC;oCAAK9B,WAAWhB,OAAO+C,QAAQ;8CAAG,CAAC,EAAEF,OAAOnC,QAAQ,CAAC,EAAE,EAAEmC,OAAOpC,GAAG,CAAC,CAAC,CAAC;;+BALlEoC,OAAOpC,GAAG;wBAQrB;;;;;;AAKV,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/items.tsx"],"names":[],"mappings":"AAYA,eAAO,MAAM,SAAS,4LAA8C,CAAA;AACpE,eAAO,MAAM,QAAQ,4LAA2C,CAAA;AAChE,eAAO,MAAM,SAAS,4LAA6C,CAAA;AACnE,eAAO,MAAM,MAAM,4LAA0C,CAAA;AAC7D,eAAO,MAAM,SAAS,4LAA6C,CAAA;AACnE,eAAO,MAAM,QAAQ,4LAA0C,CAAA;AAC/D,eAAO,MAAM,OAAO,4LAA4C,CAAA;AAChE,eAAO,MAAM,QAAQ,4LAAuC,CAAA"}
1
+ {"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Actions/hooks/menu/items.tsx"],"names":[],"mappings":"AAYA,eAAO,MAAM,SAAS,4LAA8C,CAAA;AACpE,eAAO,MAAM,QAAQ,4LAA2C,CAAA;AAChE,eAAO,MAAM,SAAS,4LAA6C,CAAA;AACnE,eAAO,MAAM,MAAM,4LAA0C,CAAA;AAC7D,eAAO,MAAM,SAAS,4LAA6C,CAAA;AACnE,eAAO,MAAM,QAAQ,4LAA0C,CAAA;AAC/D,eAAO,MAAM,OAAO,4LAA4C,CAAA;AAChE,eAAO,MAAM,QAAQ,4LAAuC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/items.tsx"],"sourcesContent":["import {\n DocsAddOnIcon,\n EditNoteIcon,\n SegmentIcon,\n SpellCheckIcon,\n StylusNoteIcon,\n SummarizeIcon,\n TranslateIcon,\n TuneIcon,\n} from '../../../Icons/Icons.js'\nimport { createMenuItem } from './Item.js'\n\nexport const Proofread = createMenuItem(SpellCheckIcon, 'Proofread')\nexport const Rephrase = createMenuItem(EditNoteIcon, 'Rephrase')\nexport const Translate = createMenuItem(TranslateIcon, 'Translate')\nexport const Expand = createMenuItem(DocsAddOnIcon, 'Expand')\nexport const Summarize = createMenuItem(SummarizeIcon, 'Summarize')\nexport const Simplify = createMenuItem(SegmentIcon, 'Simplify')\nexport const Compose = createMenuItem(StylusNoteIcon, 'Compose')\nexport const Settings = createMenuItem(TuneIcon, 'Settings')\n"],"names":["DocsAddOnIcon","EditNoteIcon","SegmentIcon","SpellCheckIcon","StylusNoteIcon","SummarizeIcon","TranslateIcon","TuneIcon","createMenuItem","Proofread","Rephrase","Translate","Expand","Summarize","Simplify","Compose","Settings"],"mappings":"AAAA,SACEA,aAAa,EACbC,YAAY,EACZC,WAAW,EACXC,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,aAAa,EACbC,QAAQ,QACH,0BAAyB;AAChC,SAASC,cAAc,QAAQ,YAAW;AAE1C,OAAO,MAAMC,YAAYD,eAAeL,gBAAgB,aAAY;AACpE,OAAO,MAAMO,WAAWF,eAAeP,cAAc,YAAW;AAChE,OAAO,MAAMU,YAAYH,eAAeF,eAAe,aAAY;AACnE,OAAO,MAAMM,SAASJ,eAAeR,eAAe,UAAS;AAC7D,OAAO,MAAMa,YAAYL,eAAeH,eAAe,aAAY;AACnE,OAAO,MAAMS,WAAWN,eAAeN,aAAa,YAAW;AAC/D,OAAO,MAAMa,UAAUP,eAAeJ,gBAAgB,WAAU;AAChE,OAAO,MAAMY,WAAWR,eAAeD,UAAU,YAAW"}
1
+ {"version":3,"sources":["../../../../../src/ui/Actions/hooks/menu/items.tsx"],"sourcesContent":["import {\n DocsAddOnIcon,\n EditNoteIcon,\n SegmentIcon,\n SpellCheckIcon,\n StylusNoteIcon,\n SummarizeIcon,\n TranslateIcon,\n TuneIcon,\n} from '../../../Icons/Icons.js'\nimport { createMenuItem } from './Item.js'\n\nexport const Proofread = createMenuItem(SpellCheckIcon, 'Proofread')\nexport const Rephrase = createMenuItem(EditNoteIcon, 'Rephrase')\nexport const Translate = createMenuItem(TranslateIcon, 'Translate')\nexport const Expand = createMenuItem(DocsAddOnIcon, 'Expand')\nexport const Summarize = createMenuItem(SummarizeIcon, 'Summarize')\nexport const Simplify = createMenuItem(SegmentIcon, 'Simplify')\nexport const Compose = createMenuItem(StylusNoteIcon, 'Compose')\nexport const Settings = createMenuItem(TuneIcon, 'Settings')\n"],"names":["DocsAddOnIcon","EditNoteIcon","SegmentIcon","SpellCheckIcon","StylusNoteIcon","SummarizeIcon","TranslateIcon","TuneIcon","createMenuItem","Proofread","Rephrase","Translate","Expand","Summarize","Simplify","Compose","Settings"],"mappings":"AAAA,SACEA,aAAa,EACbC,YAAY,EACZC,WAAW,EACXC,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,aAAa,EACbC,QAAQ,QACH,0BAAyB;AAChC,SAASC,cAAc,QAAQ,YAAW;AAE1C,OAAO,MAAMC,YAAYD,eAAeL,gBAAgB,aAAY;AACpE,OAAO,MAAMO,WAAWF,eAAeP,cAAc,YAAW;AAChE,OAAO,MAAMU,YAAYH,eAAeF,eAAe,aAAY;AACnE,OAAO,MAAMM,SAASJ,eAAeR,eAAe,UAAS;AAC7D,OAAO,MAAMa,YAAYL,eAAeH,eAAe,aAAY;AACnE,OAAO,MAAMS,WAAWN,eAAeN,aAAa,YAAW;AAC/D,OAAO,MAAMa,UAAUP,eAAeJ,gBAAgB,WAAU;AAChE,OAAO,MAAMY,WAAWR,eAAeD,UAAU,YAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"itemsMap.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/itemsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAK1E,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,eAAe,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,gBAAgB,EAoB1C,CAAA"}
1
+ {"version":3,"file":"itemsMap.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Actions/hooks/menu/itemsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAK1E,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,eAAe,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,gBAAgB,EAoB1C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/itemsMap.ts"],"sourcesContent":["import React from 'react'\n\nimport type { ActionMenuItems, BaseItemProps } from '../../../../types.js'\n\nimport { Compose, Expand, Proofread, Rephrase, Settings, Simplify, Summarize } from './items.js'\nimport { TranslateMenu } from './TranslateMenu.js'\n\ntype MenuItemsMapType = {\n component: React.FC<BaseItemProps>\n excludedFor?: string[]\n loadingText?: string\n name: ActionMenuItems\n}\n\nexport const menuItemsMap: MenuItemsMapType[] = [\n { name: 'Proofread', component: Proofread, excludedFor: ['upload'], loadingText: 'Proofreading' },\n { name: 'Rephrase', component: Rephrase, excludedFor: ['upload'], loadingText: 'Rephrasing' },\n {\n name: 'Translate',\n component: TranslateMenu,\n excludedFor: ['upload'],\n loadingText: 'Translating',\n },\n { name: 'Expand', component: Expand, excludedFor: ['upload', 'text'], loadingText: 'Expanding' },\n {\n // Turned off - WIP\n name: 'Summarize',\n component: Summarize,\n excludedFor: ['upload', 'text', 'richText'],\n loadingText: 'Summarizing',\n },\n { name: 'Simplify', component: Simplify, excludedFor: ['upload'], loadingText: 'Simplifying' },\n { name: 'Compose', component: Compose, loadingText: 'Composing' },\n { name: 'Settings', component: Settings },\n]\n"],"names":["React","Compose","Expand","Proofread","Rephrase","Settings","Simplify","Summarize","TranslateMenu","menuItemsMap","name","component","excludedFor","loadingText"],"mappings":"AAAA,OAAOA,WAAW,QAAO;AAIzB,SAASC,OAAO,EAAEC,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,aAAY;AAChG,SAASC,aAAa,QAAQ,qBAAoB;AASlD,OAAO,MAAMC,eAAmC;IAC9C;QAAEC,MAAM;QAAaC,WAAWR;QAAWS,aAAa;YAAC;SAAS;QAAEC,aAAa;IAAe;IAChG;QAAEH,MAAM;QAAYC,WAAWP;QAAUQ,aAAa;YAAC;SAAS;QAAEC,aAAa;IAAa;IAC5F;QACEH,MAAM;QACNC,WAAWH;QACXI,aAAa;YAAC;SAAS;QACvBC,aAAa;IACf;IACA;QAAEH,MAAM;QAAUC,WAAWT;QAAQU,aAAa;YAAC;YAAU;SAAO;QAAEC,aAAa;IAAY;IAC/F;QACE,mBAAmB;QACnBH,MAAM;QACNC,WAAWJ;QACXK,aAAa;YAAC;YAAU;YAAQ;SAAW;QAC3CC,aAAa;IACf;IACA;QAAEH,MAAM;QAAYC,WAAWL;QAAUM,aAAa;YAAC;SAAS;QAAEC,aAAa;IAAc;IAC7F;QAAEH,MAAM;QAAWC,WAAWV;QAASY,aAAa;IAAY;IAChE;QAAEH,MAAM;QAAYC,WAAWN;IAAS;CACzC,CAAA"}
1
+ {"version":3,"sources":["../../../../../src/ui/Actions/hooks/menu/itemsMap.ts"],"sourcesContent":["import React from 'react'\n\nimport type { ActionMenuItems, BaseItemProps } from '../../../../types.js'\n\nimport { Compose, Expand, Proofread, Rephrase, Settings, Simplify, Summarize } from './items.js'\nimport { TranslateMenu } from './TranslateMenu.js'\n\ntype MenuItemsMapType = {\n component: React.FC<BaseItemProps>\n excludedFor?: string[]\n loadingText?: string\n name: ActionMenuItems\n}\n\nexport const menuItemsMap: MenuItemsMapType[] = [\n { name: 'Proofread', component: Proofread, excludedFor: ['upload'], loadingText: 'Proofreading' },\n { name: 'Rephrase', component: Rephrase, excludedFor: ['upload'], loadingText: 'Rephrasing' },\n {\n name: 'Translate',\n component: TranslateMenu,\n excludedFor: ['upload'],\n loadingText: 'Translating',\n },\n { name: 'Expand', component: Expand, excludedFor: ['upload', 'text'], loadingText: 'Expanding' },\n {\n // Turned off - WIP\n name: 'Summarize',\n component: Summarize,\n excludedFor: ['upload', 'text', 'richText'],\n loadingText: 'Summarizing',\n },\n { name: 'Simplify', component: Simplify, excludedFor: ['upload'], loadingText: 'Simplifying' },\n { name: 'Compose', component: Compose, loadingText: 'Composing' },\n { name: 'Settings', component: Settings },\n]\n"],"names":["React","Compose","Expand","Proofread","Rephrase","Settings","Simplify","Summarize","TranslateMenu","menuItemsMap","name","component","excludedFor","loadingText"],"mappings":"AAAA,OAAOA,WAAW,QAAO;AAIzB,SAASC,OAAO,EAAEC,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,aAAY;AAChG,SAASC,aAAa,QAAQ,qBAAoB;AASlD,OAAO,MAAMC,eAAmC;IAC9C;QAAEC,MAAM;QAAaC,WAAWR;QAAWS,aAAa;YAAC;SAAS;QAAEC,aAAa;IAAe;IAChG;QAAEH,MAAM;QAAYC,WAAWP;QAAUQ,aAAa;YAAC;SAAS;QAAEC,aAAa;IAAa;IAC5F;QACEH,MAAM;QACNC,WAAWH;QACXI,aAAa;YAAC;SAAS;QACvBC,aAAa;IACf;IACA;QAAEH,MAAM;QAAUC,WAAWT;QAAQU,aAAa;YAAC;YAAU;SAAO;QAAEC,aAAa;IAAY;IAC/F;QACE,mBAAmB;QACnBH,MAAM;QACNC,WAAWJ;QACXK,aAAa;YAAC;YAAU;YAAQ;SAAW;QAC3CC,aAAa;IACf;IACA;QAAEH,MAAM;QAAYC,WAAWL;QAAUM,aAAa;YAAC;SAAS;QAAEC,aAAa;IAAc;IAC7F;QAAEH,MAAM;QAAWC,WAAWV;QAASY,aAAa;IAAY;IAChE;QAAEH,MAAM;QAAYC,WAAWN;IAAS;CACzC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/useMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAmB1E,eAAO,MAAM,OAAO,eAAgB,aAAa;;;;;;;;CAyEhD,CAAA"}
1
+ {"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Actions/hooks/menu/useMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAmB1E,eAAO,MAAM,OAAO,eAAgB,aAAa;;;;;;;;CAyEhD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/useMenu.tsx"],"sourcesContent":["'use client'\n\nimport { useField, useFieldProps } from '@payloadcms/ui'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport type { ActionMenuItems, UseMenuEvents } from '../../../../types.js'\n\nimport { Compose, Proofread, Rephrase } from './items.js'\nimport { menuItemsMap } from './itemsMap.js'\nimport styles from './menu.module.scss'\n\nconst getActiveComponent = (ac) => {\n switch (ac) {\n case 'Proofread':\n return Proofread\n case 'Rephrase':\n return Rephrase\n case 'Compose':\n return Compose\n default:\n return Rephrase\n }\n}\n\nexport const useMenu = (menuEvents: UseMenuEvents) => {\n const { type: fieldType, path: pathFromContext } = useFieldProps()\n const field = useField({ path: pathFromContext })\n const [activeComponent, setActiveComponent] = useState<ActionMenuItems>('Rephrase')\n\n const { initialValue, value } = field\n\n useEffect(() => {\n if (!value) {\n setActiveComponent('Compose')\n return\n }\n\n if (menuItemsMap.some((i) => i.excludedFor?.includes(fieldType))) {\n setActiveComponent('Compose')\n return\n }\n\n if (typeof value === 'string' && value !== initialValue) {\n setActiveComponent('Proofread')\n } else {\n setActiveComponent('Rephrase')\n }\n }, [initialValue, value, fieldType])\n\n const MemoizedActiveComponent = useMemo(() => {\n return ({ isLoading }) => {\n const ActiveComponent = getActiveComponent(activeComponent)\n const activeItem = menuItemsMap.find((i) => i.name === activeComponent)\n return (\n <ActiveComponent disabled={isLoading} hideIcon onClick={menuEvents[`on${activeComponent}`]}>\n {isLoading && activeItem.loadingText}\n </ActiveComponent>\n )\n }\n }, [activeComponent, menuEvents])\n\n const filteredMenuItems = useMemo(\n () =>\n menuItemsMap.filter((i) => i.name !== activeComponent && !i.excludedFor?.includes(fieldType)),\n [activeComponent, fieldType],\n )\n\n const MemoizedMenu = useMemo(() => {\n return ({ isLoading, onClose }) => (\n <div className={styles.menu}>\n {filteredMenuItems.map((i) => {\n const Action = i.component\n return (\n <Action\n disabled={isLoading}\n key={i.name}\n onClick={(data) => {\n if (i.name !== 'Settings') {\n setActiveComponent(i.name)\n }\n\n menuEvents[`on${i.name}`](data)\n onClose()\n }}\n >\n {isLoading && i.loadingText}\n </Action>\n )\n })}\n </div>\n )\n }, [filteredMenuItems, menuEvents])\n\n return {\n ActiveComponent: MemoizedActiveComponent,\n Menu: MemoizedMenu,\n }\n}\n"],"names":["useField","useFieldProps","React","useEffect","useMemo","useState","Compose","Proofread","Rephrase","menuItemsMap","styles","getActiveComponent","ac","useMenu","menuEvents","type","fieldType","path","pathFromContext","field","activeComponent","setActiveComponent","initialValue","value","some","i","excludedFor","includes","MemoizedActiveComponent","isLoading","ActiveComponent","activeItem","find","name","disabled","hideIcon","onClick","loadingText","filteredMenuItems","filter","MemoizedMenu","onClose","div","className","menu","map","Action","component","data","Menu"],"mappings":"AAAA;;AAEA,SAASA,QAAQ,EAAEC,aAAa,QAAQ,iBAAgB;AACxD,OAAOC,SAASC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAO;AAI3D,SAASC,OAAO,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,aAAY;AACzD,SAASC,YAAY,QAAQ,gBAAe;AAC5C,OAAOC,YAAY,qBAAoB;AAEvC,MAAMC,qBAAqB,CAACC;IAC1B,OAAQA;QACN,KAAK;YACH,OAAOL;QACT,KAAK;YACH,OAAOC;QACT,KAAK;YACH,OAAOF;QACT;YACE,OAAOE;IACX;AACF;AAEA,OAAO,MAAMK,UAAU,CAACC;IACtB,MAAM,EAAEC,MAAMC,SAAS,EAAEC,MAAMC,eAAe,EAAE,GAAGjB;IACnD,MAAMkB,QAAQnB,SAAS;QAAEiB,MAAMC;IAAgB;IAC/C,MAAM,CAACE,iBAAiBC,mBAAmB,GAAGhB,SAA0B;IAExE,MAAM,EAAEiB,YAAY,EAAEC,KAAK,EAAE,GAAGJ;IAEhChB,UAAU;QACR,IAAI,CAACoB,OAAO;YACVF,mBAAmB;YACnB;QACF;QAEA,IAAIZ,aAAae,IAAI,CAAC,CAACC,IAAMA,EAAEC,WAAW,EAAEC,SAASX,aAAa;YAChEK,mBAAmB;YACnB;QACF;QAEA,IAAI,OAAOE,UAAU,YAAYA,UAAUD,cAAc;YACvDD,mBAAmB;QACrB,OAAO;YACLA,mBAAmB;QACrB;IACF,GAAG;QAACC;QAAcC;QAAOP;KAAU;IAEnC,MAAMY,0BAA0BxB,QAAQ;QACtC,OAAO,CAAC,EAAEyB,SAAS,EAAE;YACnB,MAAMC,kBAAkBnB,mBAAmBS;YAC3C,MAAMW,aAAatB,aAAauB,IAAI,CAAC,CAACP,IAAMA,EAAEQ,IAAI,KAAKb;YACvD,qBACE,KAACU;gBAAgBI,UAAUL;gBAAWM,QAAQ;gBAACC,SAAStB,UAAU,CAAC,CAAC,EAAE,EAAEM,gBAAgB,CAAC,CAAC;0BACvFS,aAAaE,WAAWM,WAAW;;QAG1C;IACF,GAAG;QAACjB;QAAiBN;KAAW;IAEhC,MAAMwB,oBAAoBlC,QACxB,IACEK,aAAa8B,MAAM,CAAC,CAACd,IAAMA,EAAEQ,IAAI,KAAKb,mBAAmB,CAACK,EAAEC,WAAW,EAAEC,SAASX,aACpF;QAACI;QAAiBJ;KAAU;IAG9B,MAAMwB,eAAepC,QAAQ;QAC3B,OAAO,CAAC,EAAEyB,SAAS,EAAEY,OAAO,EAAE,iBAC5B,KAACC;gBAAIC,WAAWjC,OAAOkC,IAAI;0BACxBN,kBAAkBO,GAAG,CAAC,CAACpB;oBACtB,MAAMqB,SAASrB,EAAEsB,SAAS;oBAC1B,qBACE,KAACD;wBACCZ,UAAUL;wBAEVO,SAAS,CAACY;4BACR,IAAIvB,EAAEQ,IAAI,KAAK,YAAY;gCACzBZ,mBAAmBI,EAAEQ,IAAI;4BAC3B;4BAEAnB,UAAU,CAAC,CAAC,EAAE,EAAEW,EAAEQ,IAAI,CAAC,CAAC,CAAC,CAACe;4BAC1BP;wBACF;kCAECZ,aAAaJ,EAAEY,WAAW;uBAVtBZ,EAAEQ,IAAI;gBAajB;;IAGN,GAAG;QAACK;QAAmBxB;KAAW;IAElC,OAAO;QACLgB,iBAAiBF;QACjBqB,MAAMT;IACR;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/ui/Actions/hooks/menu/useMenu.tsx"],"sourcesContent":["'use client'\n\nimport { useField, useFieldProps } from '@payloadcms/ui'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport type { ActionMenuItems, UseMenuEvents } from '../../../../types.js'\n\nimport { Compose, Proofread, Rephrase } from './items.js'\nimport { menuItemsMap } from './itemsMap.js'\nimport styles from './menu.module.scss'\n\nconst getActiveComponent = (ac) => {\n switch (ac) {\n case 'Proofread':\n return Proofread\n case 'Rephrase':\n return Rephrase\n case 'Compose':\n return Compose\n default:\n return Rephrase\n }\n}\n\nexport const useMenu = (menuEvents: UseMenuEvents) => {\n const { type: fieldType, path: pathFromContext } = useFieldProps()\n const field = useField({ path: pathFromContext })\n const [activeComponent, setActiveComponent] = useState<ActionMenuItems>('Rephrase')\n\n const { initialValue, value } = field\n\n useEffect(() => {\n if (!value) {\n setActiveComponent('Compose')\n return\n }\n\n if (menuItemsMap.some((i) => i.excludedFor?.includes(fieldType))) {\n setActiveComponent('Compose')\n return\n }\n\n if (typeof value === 'string' && value !== initialValue) {\n setActiveComponent('Proofread')\n } else {\n setActiveComponent('Rephrase')\n }\n }, [initialValue, value, fieldType])\n\n const MemoizedActiveComponent = useMemo(() => {\n return ({ isLoading }) => {\n const ActiveComponent = getActiveComponent(activeComponent)\n const activeItem = menuItemsMap.find((i) => i.name === activeComponent)\n return (\n <ActiveComponent disabled={isLoading} hideIcon onClick={menuEvents[`on${activeComponent}`]}>\n {isLoading && activeItem.loadingText}\n </ActiveComponent>\n )\n }\n }, [activeComponent, menuEvents])\n\n const filteredMenuItems = useMemo(\n () =>\n menuItemsMap.filter((i) => i.name !== activeComponent && !i.excludedFor?.includes(fieldType)),\n [activeComponent, fieldType],\n )\n\n const MemoizedMenu = useMemo(() => {\n return ({ isLoading, onClose }) => (\n <div className={styles.menu}>\n {filteredMenuItems.map((i) => {\n const Action = i.component\n return (\n <Action\n disabled={isLoading}\n key={i.name}\n onClick={(data) => {\n if (i.name !== 'Settings') {\n setActiveComponent(i.name)\n }\n\n menuEvents[`on${i.name}`](data)\n onClose()\n }}\n >\n {isLoading && i.loadingText}\n </Action>\n )\n })}\n </div>\n )\n }, [filteredMenuItems, menuEvents])\n\n return {\n ActiveComponent: MemoizedActiveComponent,\n Menu: MemoizedMenu,\n }\n}\n"],"names":["useField","useFieldProps","React","useEffect","useMemo","useState","Compose","Proofread","Rephrase","menuItemsMap","styles","getActiveComponent","ac","useMenu","menuEvents","type","fieldType","path","pathFromContext","field","activeComponent","setActiveComponent","initialValue","value","some","i","excludedFor","includes","MemoizedActiveComponent","isLoading","ActiveComponent","activeItem","find","name","disabled","hideIcon","onClick","loadingText","filteredMenuItems","filter","MemoizedMenu","onClose","div","className","menu","map","Action","component","data","Menu"],"mappings":"AAAA;;AAEA,SAASA,QAAQ,EAAEC,aAAa,QAAQ,iBAAgB;AACxD,OAAOC,SAASC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAO;AAI3D,SAASC,OAAO,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,aAAY;AACzD,SAASC,YAAY,QAAQ,gBAAe;AAC5C,OAAOC,YAAY,qBAAoB;AAEvC,MAAMC,qBAAqB,CAACC;IAC1B,OAAQA;QACN,KAAK;YACH,OAAOL;QACT,KAAK;YACH,OAAOC;QACT,KAAK;YACH,OAAOF;QACT;YACE,OAAOE;IACX;AACF;AAEA,OAAO,MAAMK,UAAU,CAACC;IACtB,MAAM,EAAEC,MAAMC,SAAS,EAAEC,MAAMC,eAAe,EAAE,GAAGjB;IACnD,MAAMkB,QAAQnB,SAAS;QAAEiB,MAAMC;IAAgB;IAC/C,MAAM,CAACE,iBAAiBC,mBAAmB,GAAGhB,SAA0B;IAExE,MAAM,EAAEiB,YAAY,EAAEC,KAAK,EAAE,GAAGJ;IAEhChB,UAAU;QACR,IAAI,CAACoB,OAAO;YACVF,mBAAmB;YACnB;QACF;QAEA,IAAIZ,aAAae,IAAI,CAAC,CAACC,IAAMA,EAAEC,WAAW,EAAEC,SAASX,aAAa;YAChEK,mBAAmB;YACnB;QACF;QAEA,IAAI,OAAOE,UAAU,YAAYA,UAAUD,cAAc;YACvDD,mBAAmB;QACrB,OAAO;YACLA,mBAAmB;QACrB;IACF,GAAG;QAACC;QAAcC;QAAOP;KAAU;IAEnC,MAAMY,0BAA0BxB,QAAQ;QACtC,OAAO,CAAC,EAAEyB,SAAS,EAAE;YACnB,MAAMC,kBAAkBnB,mBAAmBS;YAC3C,MAAMW,aAAatB,aAAauB,IAAI,CAAC,CAACP,IAAMA,EAAEQ,IAAI,KAAKb;YACvD,qBACE,KAACU;gBAAgBI,UAAUL;gBAAWM,QAAQ;gBAACC,SAAStB,UAAU,CAAC,CAAC,EAAE,EAAEM,gBAAgB,CAAC,CAAC;0BACvFS,aAAaE,WAAWM,WAAW;;QAG1C;IACF,GAAG;QAACjB;QAAiBN;KAAW;IAEhC,MAAMwB,oBAAoBlC,QACxB,IACEK,aAAa8B,MAAM,CAAC,CAACd,IAAMA,EAAEQ,IAAI,KAAKb,mBAAmB,CAACK,EAAEC,WAAW,EAAEC,SAASX,aACpF;QAACI;QAAiBJ;KAAU;IAG9B,MAAMwB,eAAepC,QAAQ;QAC3B,OAAO,CAAC,EAAEyB,SAAS,EAAEY,OAAO,EAAE,iBAC5B,KAACC;gBAAIC,WAAWjC,OAAOkC,IAAI;0BACxBN,kBAAkBO,GAAG,CAAC,CAACpB;oBACtB,MAAMqB,SAASrB,EAAEsB,SAAS;oBAC1B,qBACE,KAACD;wBACCZ,UAAUL;wBAEVO,SAAS,CAACY;4BACR,IAAIvB,EAAEQ,IAAI,KAAK,YAAY;gCACzBZ,mBAAmBI,EAAEQ,IAAI;4BAC3B;4BAEAnB,UAAU,CAAC,CAAC,EAAE,EAAEW,EAAEQ,IAAI,CAAC,CAAC,CAAC,CAACe;4BAC1BP;wBACF;kCAECZ,aAAaJ,EAAEY,WAAW;uBAVtBZ,EAAEQ,IAAI;gBAajB;;IAGN,GAAG;QAACK;QAAmBxB;KAAW;IAElC,OAAO;QACLgB,iBAAiBF;QACjBqB,MAAMT;IACR;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGenerate.d.ts","sourceRoot":"","sources":["../../../../src/ui/Compose/hooks/useGenerate.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAA;AAa1E,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAGzE,eAAO,MAAM,WAAW;yBAuKH,oBAAoB;;CAoBxC,CAAA"}
1
+ {"version":3,"file":"useGenerate.d.ts","sourceRoot":"","sources":["../../../../src/ui/Actions/hooks/useGenerate.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAA;AAa1E,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAGzE,eAAO,MAAM,WAAW;yBAuKH,oBAAoB;;CAoBxC,CAAA"}
@@ -145,7 +145,8 @@ export const useGenerate = ()=>{
145
145
  }, [
146
146
  getData,
147
147
  localFromContext?.code,
148
- instructionId
148
+ instructionId,
149
+ setValue
149
150
  ]);
150
151
  const generate = useCallback(async (options)=>{
151
152
  if (type === 'richText') {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/ui/Compose/hooks/useGenerate.ts"],"sourcesContent":["import type { ClientCollectionConfig, UploadField } from 'payload'\n\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport {\n useConfig,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n} from '@payloadcms/ui'\nimport { useCompletion, experimental_useObject as useObject } from 'ai/react'\nimport { useCallback, useEffect } from 'react'\n\nimport type { ActionMenuItems, GenerateTextarea } from '../../../types.js'\n\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n} from '../../../defaults.js'\nimport { useInstructions } from '../../../providers/InstructionsProvider/useInstructions.js'\nimport { getFieldBySchemaPath } from '../../../utilities/getFieldBySchemaPath.js'\nimport { jsonSchemaToZod } from '../../../utilities/jsonToZod.js'\nimport { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js'\nimport { useHistory } from './useHistory.js'\n\ntype ActionCallbackParams = { action: ActionMenuItems; params?: unknown }\n\n//TODO: DONATION IDEA - Add a url to donate in cli when user installs the plugin and uses it for couple of times.\nexport const useGenerate = () => {\n const { type, path: pathFromContext, schemaPath } = useFieldProps()\n\n const editorConfigContext = useEditorConfigContext()\n const { editor } = editorConfigContext\n\n const { docConfig } = useDocumentInfo()\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const { set: setHistory } = useHistory()\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n const { getData } = useForm()\n const localFromContext = useLocale()\n const {\n config: { collections },\n } = useConfig()\n const collection = collections.find((collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE)\n const { custom: { editorConfig } = {} } = collection.admin\n const { schema: DocumentSchema = {} } = editorConfig || {}\n const lexicalZodSchema = jsonSchemaToZod(DocumentSchema)\n\n const {\n isLoading: loadingObject,\n object,\n stop, // TODO: Implement this function\n submit,\n } = useObject({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating object:', error)\n },\n onFinish: (result) => {\n if (result.object) {\n setHistory(result.object)\n setValue(result.object)\n } else {\n console.log('onFinish: result ', result)\n }\n },\n schema: lexicalZodSchema,\n })\n\n useEffect(() => {\n if (!object) return\n\n requestAnimationFrame(() => {\n if (!editor) {\n setValue(object)\n return\n }\n\n // Currently this is being used as setValue for RichText component does not render new changes right away.\n setSafeLexicalState(object, editor)\n })\n }, [object])\n\n const {\n complete,\n completion,\n isLoading: loadingCompletion,\n } = useCompletion({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating text:', error)\n },\n onFinish: (prompt, result) => {\n setHistory(result)\n },\n streamProtocol: 'data',\n })\n\n useEffect(() => {\n if (!completion) return\n\n requestAnimationFrame(() => {\n setValue(completion)\n })\n }, [completion])\n\n const streamObject = useCallback(\n ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n submit({\n doc,\n locale: localFromContext?.code,\n options,\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const streamText = useCallback(\n async ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n await complete('', {\n body: {\n doc,\n locale: localFromContext?.code,\n options,\n },\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const generateUpload = useCallback(async () => {\n const doc = getData()\n\n const fieldInfo = getFieldBySchemaPath(\n docConfig as ClientCollectionConfig,\n schemaPath,\n ) as UploadField\n\n return fetch(`/api${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {\n body: JSON.stringify({\n doc,\n locale: localFromContext?.code,\n options: {\n instructionId,\n uploadCollectionSlug: fieldInfo.relationTo || 'media',\n },\n } satisfies Parameters<GenerateTextarea>[0]),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n .then(async (uploadResponse) => {\n if (uploadResponse.ok) {\n const { result } = await uploadResponse.json()\n if (!result) throw new Error('generateUpload: Something went wrong')\n\n setValue(result?.id)\n setHistory(result?.id)\n } else {\n const { errors = [] } = await uploadResponse.json()\n const errStr = errors.map((error) => error.message).join(', ')\n throw new Error(errStr)\n }\n return uploadResponse\n })\n .catch((error) => {\n console.error('Error generating your upload', error)\n })\n }, [getData, localFromContext?.code, instructionId])\n\n const generate = useCallback(\n async (options?: ActionCallbackParams) => {\n if (type === 'richText') {\n return streamObject(options)\n }\n\n if (['text', 'textarea'].includes(type)) {\n return streamText(options)\n }\n\n if (type === 'upload') {\n return generateUpload()\n }\n },\n [generateUpload, streamObject, streamText, type],\n )\n\n return {\n generate,\n isLoading: loadingCompletion || loadingObject,\n }\n}\n"],"names":["useEditorConfigContext","useConfig","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useCompletion","experimental_useObject","useObject","useCallback","useEffect","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","useInstructions","getFieldBySchemaPath","jsonSchemaToZod","setSafeLexicalState","useHistory","useGenerate","type","path","pathFromContext","schemaPath","editorConfigContext","editor","docConfig","setValue","set","setHistory","id","instructionId","getData","localFromContext","config","collections","collection","find","slug","custom","editorConfig","admin","schema","DocumentSchema","lexicalZodSchema","isLoading","loadingObject","object","stop","submit","api","onError","error","console","onFinish","result","log","requestAnimationFrame","complete","completion","loadingCompletion","prompt","streamProtocol","streamObject","action","params","doc","options","actionParams","locale","code","streamText","body","generateUpload","fieldInfo","fetch","JSON","stringify","uploadCollectionSlug","relationTo","credentials","headers","method","then","uploadResponse","ok","json","Error","errors","errStr","map","message","join","catch","generate","includes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/ui/Actions/hooks/useGenerate.ts"],"sourcesContent":["import type { ClientCollectionConfig, UploadField } from 'payload'\n\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport {\n useConfig,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n} from '@payloadcms/ui'\nimport { useCompletion, experimental_useObject as useObject } from 'ai/react'\nimport { useCallback, useEffect } from 'react'\n\nimport type { ActionMenuItems, GenerateTextarea } from '../../../types.js'\n\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n} from '../../../defaults.js'\nimport { useInstructions } from '../../../providers/InstructionsProvider/useInstructions.js'\nimport { getFieldBySchemaPath } from '../../../utilities/getFieldBySchemaPath.js'\nimport { jsonSchemaToZod } from '../../../utilities/jsonToZod.js'\nimport { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js'\nimport { useHistory } from './useHistory.js'\n\ntype ActionCallbackParams = { action: ActionMenuItems; params?: unknown }\n\n//TODO: DONATION IDEA - Add a url to donate in cli when user installs the plugin and uses it for couple of times.\nexport const useGenerate = () => {\n const { type, path: pathFromContext, schemaPath } = useFieldProps()\n\n const editorConfigContext = useEditorConfigContext()\n const { editor } = editorConfigContext\n\n const { docConfig } = useDocumentInfo()\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const { set: setHistory } = useHistory()\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n const { getData } = useForm()\n const localFromContext = useLocale()\n const {\n config: { collections },\n } = useConfig()\n const collection = collections.find((collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE)\n const { custom: { editorConfig } = {} } = collection.admin\n const { schema: DocumentSchema = {} } = editorConfig || {}\n const lexicalZodSchema = jsonSchemaToZod(DocumentSchema)\n\n const {\n isLoading: loadingObject,\n object,\n stop, // TODO: Implement this function\n submit,\n } = useObject({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating object:', error)\n },\n onFinish: (result) => {\n if (result.object) {\n setHistory(result.object)\n setValue(result.object)\n } else {\n console.log('onFinish: result ', result)\n }\n },\n schema: lexicalZodSchema,\n })\n\n useEffect(() => {\n if (!object) return\n\n requestAnimationFrame(() => {\n if (!editor) {\n setValue(object)\n return\n }\n\n // Currently this is being used as setValue for RichText component does not render new changes right away.\n setSafeLexicalState(object, editor)\n })\n }, [object])\n\n const {\n complete,\n completion,\n isLoading: loadingCompletion,\n } = useCompletion({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating text:', error)\n },\n onFinish: (prompt, result) => {\n setHistory(result)\n },\n streamProtocol: 'data',\n })\n\n useEffect(() => {\n if (!completion) return\n\n requestAnimationFrame(() => {\n setValue(completion)\n })\n }, [completion])\n\n const streamObject = useCallback(\n ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n submit({\n doc,\n locale: localFromContext?.code,\n options,\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const streamText = useCallback(\n async ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n await complete('', {\n body: {\n doc,\n locale: localFromContext?.code,\n options,\n },\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const generateUpload = useCallback(async () => {\n const doc = getData()\n\n const fieldInfo = getFieldBySchemaPath(\n docConfig as ClientCollectionConfig,\n schemaPath,\n ) as UploadField\n\n return fetch(`/api${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {\n body: JSON.stringify({\n doc,\n locale: localFromContext?.code,\n options: {\n instructionId,\n uploadCollectionSlug: fieldInfo.relationTo || 'media',\n },\n } satisfies Parameters<GenerateTextarea>[0]),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n .then(async (uploadResponse) => {\n if (uploadResponse.ok) {\n const { result } = await uploadResponse.json()\n if (!result) throw new Error('generateUpload: Something went wrong')\n\n setValue(result?.id)\n setHistory(result?.id)\n } else {\n const { errors = [] } = await uploadResponse.json()\n const errStr = errors.map((error) => error.message).join(', ')\n throw new Error(errStr)\n }\n return uploadResponse\n })\n .catch((error) => {\n console.error('Error generating your upload', error)\n })\n }, [getData, localFromContext?.code, instructionId, setValue])\n\n const generate = useCallback(\n async (options?: ActionCallbackParams) => {\n if (type === 'richText') {\n return streamObject(options)\n }\n\n if (['text', 'textarea'].includes(type)) {\n return streamText(options)\n }\n\n if (type === 'upload') {\n return generateUpload()\n }\n },\n [generateUpload, streamObject, streamText, type],\n )\n\n return {\n generate,\n isLoading: loadingCompletion || loadingObject,\n }\n}\n"],"names":["useEditorConfigContext","useConfig","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useCompletion","experimental_useObject","useObject","useCallback","useEffect","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","useInstructions","getFieldBySchemaPath","jsonSchemaToZod","setSafeLexicalState","useHistory","useGenerate","type","path","pathFromContext","schemaPath","editorConfigContext","editor","docConfig","setValue","set","setHistory","id","instructionId","getData","localFromContext","config","collections","collection","find","slug","custom","editorConfig","admin","schema","DocumentSchema","lexicalZodSchema","isLoading","loadingObject","object","stop","submit","api","onError","error","console","onFinish","result","log","requestAnimationFrame","complete","completion","loadingCompletion","prompt","streamProtocol","streamObject","action","params","doc","options","actionParams","locale","code","streamText","body","generateUpload","fieldInfo","fetch","JSON","stringify","uploadCollectionSlug","relationTo","credentials","headers","method","then","uploadResponse","ok","json","Error","errors","errStr","map","message","join","catch","generate","includes"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistory.d.ts","sourceRoot":"","sources":["../../../../src/ui/Actions/hooks/useHistory.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,UAAU;;;;;gBAgEZ,GAAG;;CAoEb,CAAA"}
@@ -23,9 +23,7 @@ export const useHistory = ()=>{
23
23
  }
24
24
  }, []);
25
25
  const saveToLocalStorage = useCallback((newGlobalHistory)=>{
26
- if (typeof localStorage !== 'undefined') {
27
- localStorage.setItem(STORAGE_KEY, JSON.stringify(newGlobalHistory));
28
- }
26
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(newGlobalHistory));
29
27
  }, []);
30
28
  // Clear previous history
31
29
  const clearHistory = useCallback(()=>{
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/Actions/hooks/useHistory.ts"],"sourcesContent":["'use client'\n\nimport { useDocumentInfo, useField, useFieldProps } from '@payloadcms/ui'\nimport { useCallback, useEffect } from 'react'\n\nimport { PLUGIN_NAME } from '../../../defaults.js'\n\nconst STORAGE_KEY = `${PLUGIN_NAME}-fields-history`\n\ninterface HistoryState {\n [path: string]: {\n currentIndex: number\n history: any[]\n }\n}\n\nexport const useHistory = () => {\n const { id } = useDocumentInfo()\n const { path: pathFromContext, schemaPath } = useFieldProps()\n const { value: currentFieldValue } = useField<string>({\n path: pathFromContext,\n })\n\n const fieldKey = `${id}.${schemaPath}`\n\n const getLatestHistory = useCallback((): HistoryState => {\n try {\n // This condition is applied, as it was somehow triggering on server side\n if (typeof localStorage !== 'undefined') {\n return JSON.parse(localStorage.getItem(STORAGE_KEY) || '{}')\n }\n return {}\n } catch (e) {\n console.error('Error parsing history:', e)\n return {}\n }\n }, [])\n\n const saveToLocalStorage = useCallback((newGlobalHistory: HistoryState) => {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(newGlobalHistory))\n }, [])\n\n // Clear previous history\n const clearHistory = useCallback(() => {\n const latestHistory = { ...getLatestHistory() }\n Object.keys(latestHistory).forEach((k) => {\n if (!k.startsWith(id.toString())) {\n delete latestHistory[k]\n }\n })\n saveToLocalStorage(latestHistory)\n }, [id, fieldKey, getLatestHistory, saveToLocalStorage])\n\n useEffect(() => {\n // This is applied to clear out the document history which is not currently in use\n clearHistory()\n\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || {\n currentIndex: -1,\n history: [],\n }\n\n let newIndex = currentIndex\n if (currentIndex == -1) {\n newIndex = 0\n if (currentFieldValue) {\n history[newIndex] = currentFieldValue\n }\n }\n\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n\n saveToLocalStorage(newGlobalHistory)\n }, [fieldKey])\n\n const set = useCallback(\n (data: any) => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || {\n currentIndex: -1,\n history: [],\n }\n const newHistory = [...history.slice(0, currentIndex + 1), data]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newHistory.length - 1, history: newHistory },\n }\n saveToLocalStorage(newGlobalHistory)\n return data\n },\n [fieldKey, getLatestHistory, saveToLocalStorage],\n )\n\n const undo = useCallback(() => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n if (currentIndex > 0) {\n const newIndex = currentIndex - 1\n const newValue = history[newIndex]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n saveToLocalStorage(newGlobalHistory)\n return newValue\n }\n return undefined\n }, [fieldKey, getLatestHistory, saveToLocalStorage])\n\n const redo = useCallback(() => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n if (currentIndex < history.length - 1) {\n const newIndex = currentIndex + 1\n const newValue = history[newIndex]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n saveToLocalStorage(newGlobalHistory)\n return newValue\n }\n return undefined\n }, [fieldKey, getLatestHistory, saveToLocalStorage])\n\n const getLatestFieldHistory = useCallback(() => {\n const latestHistory = getLatestHistory()\n return latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n }, [getLatestHistory, fieldKey])\n\n const fieldHistory = getLatestFieldHistory()\n\n const canUndo = fieldHistory.currentIndex > 0\n const canRedo = fieldHistory.currentIndex < fieldHistory.history.length - 1\n const currentValue = fieldHistory.history[fieldHistory.currentIndex]\n\n return {\n canRedo,\n canUndo,\n currentValue,\n redo,\n set,\n undo,\n }\n}\n"],"names":["useDocumentInfo","useField","useFieldProps","useCallback","useEffect","PLUGIN_NAME","STORAGE_KEY","useHistory","id","path","pathFromContext","schemaPath","value","currentFieldValue","fieldKey","getLatestHistory","localStorage","JSON","parse","getItem","e","console","error","saveToLocalStorage","newGlobalHistory","setItem","stringify","clearHistory","latestHistory","Object","keys","forEach","k","startsWith","toString","currentIndex","history","newIndex","set","data","newHistory","slice","length","undo","newValue","undefined","redo","getLatestFieldHistory","fieldHistory","canUndo","canRedo","currentValue"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateFieldsConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/updateFieldsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,uBAAuB,EAAE,gBAAgB,CAAA;CAC1C;AAED,eAAO,MAAM,kBAAkB,qBAAsB,gBAAgB,KAAG,kBA0FvE,CAAA"}
1
+ {"version":3,"file":"updateFieldsConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/updateFieldsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,uBAAuB,EAAE,gBAAgB,CAAA;CAC1C;AAED,eAAO,MAAM,kBAAkB,qBAAsB,gBAAgB,KAAG,kBAgGvE,CAAA"}
@@ -31,10 +31,8 @@ export const updateFieldsConfig = (collectionConfig)=>{
31
31
  'upload'
32
32
  ].includes(field.type)) {
33
33
  let customField = {};
34
- // Custom fields don't fully adhere to the Payload schema, making it difficult to
35
- // determine which components support injecting ComposeField as a Description.
36
34
  if (field.admin?.components?.Field || field.admin?.components?.Description) {
37
- // TODO: Do something?
35
+ customComponentsFound = true;
38
36
  }
39
37
  return {
40
38
  ...field,
@@ -42,7 +40,7 @@ export const updateFieldsConfig = (collectionConfig)=>{
42
40
  ...field.admin,
43
41
  components: {
44
42
  ...field.admin?.components || {},
45
- Description: '@ai-stack/payloadcms/fields#ComposeField',
43
+ Description: '@ai-stack/payloadcms/fields#DescriptionField',
46
44
  ...customField
47
45
  }
48
46
  }
@@ -80,6 +78,12 @@ export const updateFieldsConfig = (collectionConfig)=>{
80
78
  ...collectionConfig,
81
79
  fields: collectionConfig.fields.map((field)=>updateField(field))
82
80
  };
81
+ if (customComponentsFound) {
82
+ console.warn(`\n— AI Plugin Alert 🚨:
83
+ Uh-oh, custom component(s) spotted! We might not be able to inject the AI Composer automatically for these components 🤖.
84
+ No worries, though! You can add it manually using below path:
85
+ '@ai-stack/payloadcms/fields#DescriptionField'.\n`);
86
+ }
83
87
  return {
84
88
  schemaPathMap,
85
89
  updatedCollectionConfig
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, string>\n updatedCollectionConfig: CollectionConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n let customComponentsFound = false\n function updateField(field: any, parentPath = ''): any {\n const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name\n const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`\n\n if (field.admin?.disabled || field.admin?.readOnly || field.admin?.hidden) {\n return field\n }\n\n // Map field path for global fieldInstructionsMap to load related instructions\n // This is done due to save extra API call to get instructions when Field components are loaded in admin\n // Doing is will only call instructions data when user clicks on settings\n if (['richText', 'text', 'textarea', 'upload'].includes(field.type)) {\n schemaPathMap = {\n ...schemaPathMap,\n [currentSchemaPath]: {\n type: field.type,\n label: field.label || field.name,\n },\n }\n }\n\n // Inject AI actions, richText is not included here as it has to be explicitly defined by user\n if (['text', 'textarea', 'upload'].includes(field.type)) {\n let customField = {}\n\n // Custom fields don't fully adhere to the Payload schema, making it difficult to\n // determine which components support injecting ComposeField as a Description.\n if (field.admin?.components?.Field || field.admin?.components?.Description) {\n // TODO: Do something?\n }\n\n return {\n ...field,\n admin: {\n ...field.admin,\n components: {\n ...(field.admin?.components || {}),\n Description: '@ai-stack/payloadcms/fields#ComposeField',\n ...customField,\n },\n },\n }\n }\n\n if (field.fields) {\n return {\n ...field,\n fields: field.fields.map((subField: any) => updateField(subField, currentPath)),\n }\n }\n\n if (field.tabs) {\n return {\n ...field,\n tabs: field.tabs.map((tab: any) => {\n return {\n ...tab,\n fields: tab.fields.map((subField: any) => updateField(subField, tab.name)),\n }\n }),\n }\n }\n\n if (field.blocks) {\n return {\n ...field,\n blocks: field.blocks.map((block: any) => ({\n ...block,\n fields: block.fields.map((subField: any) =>\n updateField(subField, `${currentPath}.${block.slug}`),\n ),\n })),\n }\n }\n\n return field\n }\n\n const updatedCollectionConfig = {\n ...collectionConfig,\n fields: collectionConfig.fields.map((field) => updateField(field)),\n }\n\n return {\n schemaPathMap,\n updatedCollectionConfig,\n }\n}\n"],"names":["updateFieldsConfig","collectionConfig","schemaPathMap","customComponentsFound","updateField","field","parentPath","currentPath","name","currentSchemaPath","slug","admin","disabled","readOnly","hidden","includes","type","label","customField","components","Field","Description","fields","map","subField","tabs","tab","blocks","block","updatedCollectionConfig"],"mappings":"AAOA,OAAO,MAAMA,qBAAqB,CAACC;IACjC,IAAIC,gBAAgB,CAAC;IACrB,IAAIC,wBAAwB;IAC5B,SAASC,YAAYC,KAAU,EAAEC,aAAa,EAAE;QAC9C,MAAMC,cAAcD,aAAa,CAAC,EAAEA,WAAW,CAAC,EAAED,MAAMG,IAAI,CAAC,CAAC,GAAGH,MAAMG,IAAI;QAC3E,MAAMC,oBAAoB,CAAC,EAAER,iBAAiBS,IAAI,CAAC,CAAC,EAAEH,YAAY,CAAC;QAEnE,IAAIF,MAAMM,KAAK,EAAEC,YAAYP,MAAMM,KAAK,EAAEE,YAAYR,MAAMM,KAAK,EAAEG,QAAQ;YACzE,OAAOT;QACT;QAEA,8EAA8E;QAC9E,wGAAwG;QACxG,yEAAyE;QACzE,IAAI;YAAC;YAAY;YAAQ;YAAY;SAAS,CAACU,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACnEd,gBAAgB;gBACd,GAAGA,aAAa;gBAChB,CAACO,kBAAkB,EAAE;oBACnBO,MAAMX,MAAMW,IAAI;oBAChBC,OAAOZ,MAAMY,KAAK,IAAIZ,MAAMG,IAAI;gBAClC;YACF;QACF;QAEA,8FAA8F;QAC9F,IAAI;YAAC;YAAQ;YAAY;SAAS,CAACO,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACvD,IAAIE,cAAc,CAAC;YAEnB,iFAAiF;YACjF,8EAA8E;YAC9E,IAAIb,MAAMM,KAAK,EAAEQ,YAAYC,SAASf,MAAMM,KAAK,EAAEQ,YAAYE,aAAa;YAC1E,sBAAsB;YACxB;YAEA,OAAO;gBACL,GAAGhB,KAAK;gBACRM,OAAO;oBACL,GAAGN,MAAMM,KAAK;oBACdQ,YAAY;wBACV,GAAId,MAAMM,KAAK,EAAEQ,cAAc,CAAC,CAAC;wBACjCE,aAAa;wBACb,GAAGH,WAAW;oBAChB;gBACF;YACF;QACF;QAEA,IAAIb,MAAMiB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGjB,KAAK;gBACRiB,QAAQjB,MAAMiB,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBpB,YAAYoB,UAAUjB;YACpE;QACF;QAEA,IAAIF,MAAMoB,IAAI,EAAE;YACd,OAAO;gBACL,GAAGpB,KAAK;gBACRoB,MAAMpB,MAAMoB,IAAI,CAACF,GAAG,CAAC,CAACG;oBACpB,OAAO;wBACL,GAAGA,GAAG;wBACNJ,QAAQI,IAAIJ,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBpB,YAAYoB,UAAUE,IAAIlB,IAAI;oBAC1E;gBACF;YACF;QACF;QAEA,IAAIH,MAAMsB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGtB,KAAK;gBACRsB,QAAQtB,MAAMsB,MAAM,CAACJ,GAAG,CAAC,CAACK,QAAgB,CAAA;wBACxC,GAAGA,KAAK;wBACRN,QAAQM,MAAMN,MAAM,CAACC,GAAG,CAAC,CAACC,WACxBpB,YAAYoB,UAAU,CAAC,EAAEjB,YAAY,CAAC,EAAEqB,MAAMlB,IAAI,CAAC,CAAC;oBAExD,CAAA;YACF;QACF;QAEA,OAAOL;IACT;IAEA,MAAMwB,0BAA0B;QAC9B,GAAG5B,gBAAgB;QACnBqB,QAAQrB,iBAAiBqB,MAAM,CAACC,GAAG,CAAC,CAAClB,QAAUD,YAAYC;IAC7D;IAEA,OAAO;QACLH;QACA2B;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, string>\n updatedCollectionConfig: CollectionConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n let customComponentsFound = false\n function updateField(field: any, parentPath = ''): any {\n const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name\n const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`\n\n if (field.admin?.disabled || field.admin?.readOnly || field.admin?.hidden) {\n return field\n }\n\n // Map field path for global fieldInstructionsMap to load related instructions\n // This is done due to save extra API call to get instructions when Field components are loaded in admin\n // Doing is will only call instructions data when user clicks on settings\n if (['richText', 'text', 'textarea', 'upload'].includes(field.type)) {\n schemaPathMap = {\n ...schemaPathMap,\n [currentSchemaPath]: {\n type: field.type,\n label: field.label || field.name,\n },\n }\n }\n\n // Inject AI actions, richText is not included here as it has to be explicitly defined by user\n if (['text', 'textarea', 'upload'].includes(field.type)) {\n let customField = {}\n if (field.admin?.components?.Field || field.admin?.components?.Description) {\n customComponentsFound = true\n }\n\n return {\n ...field,\n admin: {\n ...field.admin,\n components: {\n ...(field.admin?.components || {}),\n Description: '@ai-stack/payloadcms/fields#DescriptionField',\n ...customField,\n },\n },\n }\n }\n\n if (field.fields) {\n return {\n ...field,\n fields: field.fields.map((subField: any) => updateField(subField, currentPath)),\n }\n }\n\n if (field.tabs) {\n return {\n ...field,\n tabs: field.tabs.map((tab: any) => {\n return {\n ...tab,\n fields: tab.fields.map((subField: any) => updateField(subField, tab.name)),\n }\n }),\n }\n }\n\n if (field.blocks) {\n return {\n ...field,\n blocks: field.blocks.map((block: any) => ({\n ...block,\n fields: block.fields.map((subField: any) =>\n updateField(subField, `${currentPath}.${block.slug}`),\n ),\n })),\n }\n }\n\n return field\n }\n\n const updatedCollectionConfig = {\n ...collectionConfig,\n fields: collectionConfig.fields.map((field) => updateField(field)),\n }\n\n if (customComponentsFound) {\n console.warn(\n `\\n— AI Plugin Alert 🚨:\n Uh-oh, custom component(s) spotted! We might not be able to inject the AI Composer automatically for these components 🤖.\n No worries, though! You can add it manually using below path:\n '@ai-stack/payloadcms/fields#DescriptionField'.\\n`,\n )\n }\n\n return {\n schemaPathMap,\n updatedCollectionConfig,\n }\n}\n"],"names":["updateFieldsConfig","collectionConfig","schemaPathMap","customComponentsFound","updateField","field","parentPath","currentPath","name","currentSchemaPath","slug","admin","disabled","readOnly","hidden","includes","type","label","customField","components","Field","Description","fields","map","subField","tabs","tab","blocks","block","updatedCollectionConfig","console","warn"],"mappings":"AAOA,OAAO,MAAMA,qBAAqB,CAACC;IACjC,IAAIC,gBAAgB,CAAC;IACrB,IAAIC,wBAAwB;IAC5B,SAASC,YAAYC,KAAU,EAAEC,aAAa,EAAE;QAC9C,MAAMC,cAAcD,aAAa,CAAC,EAAEA,WAAW,CAAC,EAAED,MAAMG,IAAI,CAAC,CAAC,GAAGH,MAAMG,IAAI;QAC3E,MAAMC,oBAAoB,CAAC,EAAER,iBAAiBS,IAAI,CAAC,CAAC,EAAEH,YAAY,CAAC;QAEnE,IAAIF,MAAMM,KAAK,EAAEC,YAAYP,MAAMM,KAAK,EAAEE,YAAYR,MAAMM,KAAK,EAAEG,QAAQ;YACzE,OAAOT;QACT;QAEA,8EAA8E;QAC9E,wGAAwG;QACxG,yEAAyE;QACzE,IAAI;YAAC;YAAY;YAAQ;YAAY;SAAS,CAACU,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACnEd,gBAAgB;gBACd,GAAGA,aAAa;gBAChB,CAACO,kBAAkB,EAAE;oBACnBO,MAAMX,MAAMW,IAAI;oBAChBC,OAAOZ,MAAMY,KAAK,IAAIZ,MAAMG,IAAI;gBAClC;YACF;QACF;QAEA,8FAA8F;QAC9F,IAAI;YAAC;YAAQ;YAAY;SAAS,CAACO,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACvD,IAAIE,cAAc,CAAC;YACnB,IAAIb,MAAMM,KAAK,EAAEQ,YAAYC,SAASf,MAAMM,KAAK,EAAEQ,YAAYE,aAAa;gBAC1ElB,wBAAwB;YAC1B;YAEA,OAAO;gBACL,GAAGE,KAAK;gBACRM,OAAO;oBACL,GAAGN,MAAMM,KAAK;oBACdQ,YAAY;wBACV,GAAId,MAAMM,KAAK,EAAEQ,cAAc,CAAC,CAAC;wBACjCE,aAAa;wBACb,GAAGH,WAAW;oBAChB;gBACF;YACF;QACF;QAEA,IAAIb,MAAMiB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGjB,KAAK;gBACRiB,QAAQjB,MAAMiB,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBpB,YAAYoB,UAAUjB;YACpE;QACF;QAEA,IAAIF,MAAMoB,IAAI,EAAE;YACd,OAAO;gBACL,GAAGpB,KAAK;gBACRoB,MAAMpB,MAAMoB,IAAI,CAACF,GAAG,CAAC,CAACG;oBACpB,OAAO;wBACL,GAAGA,GAAG;wBACNJ,QAAQI,IAAIJ,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBpB,YAAYoB,UAAUE,IAAIlB,IAAI;oBAC1E;gBACF;YACF;QACF;QAEA,IAAIH,MAAMsB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGtB,KAAK;gBACRsB,QAAQtB,MAAMsB,MAAM,CAACJ,GAAG,CAAC,CAACK,QAAgB,CAAA;wBACxC,GAAGA,KAAK;wBACRN,QAAQM,MAAMN,MAAM,CAACC,GAAG,CAAC,CAACC,WACxBpB,YAAYoB,UAAU,CAAC,EAAEjB,YAAY,CAAC,EAAEqB,MAAMlB,IAAI,CAAC,CAAC;oBAExD,CAAA;YACF;QACF;QAEA,OAAOL;IACT;IAEA,MAAMwB,0BAA0B;QAC9B,GAAG5B,gBAAgB;QACnBqB,QAAQrB,iBAAiBqB,MAAM,CAACC,GAAG,CAAC,CAAClB,QAAUD,YAAYC;IAC7D;IAEA,IAAIF,uBAAuB;QACzB2B,QAAQC,IAAI,CACV,CAAC;;;mDAG4C,CAAC;IAElD;IAEA,OAAO;QACL7B;QACA2B;IACF;AACF,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-stack/payloadcms",
3
- "version": "3.0.0-beta.104",
3
+ "version": "3.0.0-beta.104.1",
4
4
  "private": false,
5
5
  "bugs": "https://github.com/ashbuilds/payload-ai/issues",
6
6
  "repository": "https://github.com/ashbuilds/payload-ai",
@@ -20,33 +20,43 @@
20
20
  "ai-writing-tool"
21
21
  ],
22
22
  "type": "module",
23
- "main": "./dist/index.js",
24
- "types": "./dist/index.d.ts",
23
+ "main": "dist/index.js",
24
+ "types": "dist/index.d.ts",
25
25
  "exports": {
26
26
  ".": {
27
27
  "import": "./dist/index.js",
28
- "types": "./dist/index.d.ts",
29
- "default": "./dist/index.js"
28
+ "require": "./dist/index.js",
29
+ "types": "./dist/index.d.ts"
30
30
  },
31
- "./types": {
32
- "import": "./dist/exports/types.js",
33
- "types": "./dist/exports/types.d.ts",
34
- "default": "./dist/exports/types.js"
31
+ "./client": {
32
+ "import": "./dist/exports/client.js",
33
+ "types": "./dist/exports/client.d.ts",
34
+ "default": "./dist/exports/client.js"
35
35
  },
36
36
  "./fields": {
37
37
  "import": "./dist/exports/fields.js",
38
38
  "types": "./dist/exports/fields.d.ts",
39
39
  "default": "./dist/exports/fields.js"
40
40
  },
41
- "./client": {
42
- "import": "./dist/exports/client.js",
43
- "types": "./dist/exports/client.d.ts",
44
- "default": "./dist/exports/client.js"
41
+ "./types": {
42
+ "import": "./dist/exports/types.js",
43
+ "types": "./dist/exports/types.d.ts",
44
+ "default": "./dist/exports/types.js"
45
45
  }
46
46
  },
47
47
  "files": [
48
48
  "dist"
49
49
  ],
50
+ "scripts": {
51
+ "build": "pnpm build:types && pnpm build:swc",
52
+ "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths --copy-files",
53
+ "build:dev": "pnpm build --watch",
54
+ "build:types": "tsc --emitDeclarationOnly",
55
+ "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
56
+ "lint": "eslint src",
57
+ "lint:fix": "eslint --fix src",
58
+ "prepublishOnly": "pnpm clean && pnpm build"
59
+ },
50
60
  "dependencies": {
51
61
  "@ai-sdk/anthropic": "^0.0.38",
52
62
  "@ai-sdk/openai": "^0.0.43",
@@ -58,25 +68,24 @@
58
68
  "@lexical/html": "^0.16.1",
59
69
  "ai": "^3.3.20",
60
70
  "elevenlabs": "^0.8.2",
61
- "get-input-selection": "^1.1.4",
62
71
  "handlebars": "4.7.8",
63
72
  "handlebars-async-helpers": "^1.0.6",
64
73
  "langchain": "^0.2.17",
65
74
  "lexical": "^0.17.0",
66
75
  "locale-codes": "^1.3.1",
67
- "lodash.isequal": "^4.5.0",
68
76
  "openai": "^4.56.1",
69
- "scroll-into-view-if-needed": "^3.1.0",
70
- "textarea-caret": "^3.0.2",
71
77
  "zod": "^3.23.8",
72
- "zod-to-json-schema": "^3.23.2"
78
+ "zod-to-json-schema": "^3.23.2",
79
+ "get-input-selection": "^1.1.4",
80
+ "lodash.isequal": "^4.5.0",
81
+ "scroll-into-view-if-needed": "^3.1.0",
82
+ "textarea-caret": "^3.0.2"
73
83
  },
74
84
  "devDependencies": {
75
85
  "@eslint/compat": "^1.1.1",
76
86
  "@eslint/js": "^9.9.1",
77
87
  "@swc/cli": "0.4.0",
78
88
  "@types/dot-object": "2.1.6",
79
- "@types/handlebars": "^4.1.0",
80
89
  "@types/react": "npm:types-react@19.0.0-beta.2",
81
90
  "@types/react-dom": "npm:types-react-dom@19.0.0-beta.2",
82
91
  "@typescript-eslint/eslint-plugin": "^7.18.0",
@@ -93,7 +102,7 @@
93
102
  "eslint-plugin-react-hooks": "^4.6.2",
94
103
  "eslint-plugin-regexp": "^2.6.0",
95
104
  "globals": "^15.9.0",
96
- "payload": "3.0.0-beta.104",
105
+ "payload": "3.0.0-beta.95",
97
106
  "prettier": "^3.3.3",
98
107
  "react": "19.0.0-rc-f994737d14-20240522",
99
108
  "react-dom": "19.0.0-rc-f994737d14-20240522",
@@ -102,23 +111,38 @@
102
111
  "typescript-eslint": "^7.18.0"
103
112
  },
104
113
  "peerDependencies": {
105
- "@payloadcms/richtext-lexical": "3.0.0-beta.104",
106
- "@payloadcms/translations": "3.0.0-beta.104",
107
- "@payloadcms/ui": "3.0.0-beta.104",
108
- "payload": "3.0.0-beta.104"
114
+ "@payloadcms/richtext-lexical": "3.0.0-beta.95",
115
+ "@payloadcms/translations": "3.0.0-beta.95",
116
+ "@payloadcms/ui": "3.0.0-beta.95",
117
+ "payload": "3.0.0-beta.95"
109
118
  },
110
119
  "publishConfig": {
120
+ "main": "./dist/index.js",
121
+ "types": "./dist/index.d.ts",
111
122
  "@ai-stack:registry": "https://registry.npmjs.org",
112
123
  "access": "public",
113
- "provenance": true
114
- },
115
- "scripts": {
116
- "build": "pnpm build:types && pnpm build:swc",
117
- "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths --copy-files",
118
- "build:dev": "pnpm build --watch",
119
- "build:types": "tsc --emitDeclarationOnly",
120
- "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
121
- "lint": "eslint src",
122
- "lint:fix": "eslint --fix src"
124
+ "provenance": true,
125
+ "exports": {
126
+ ".": {
127
+ "import": "./dist/index.js",
128
+ "types": "./dist/index.d.ts",
129
+ "default": "./dist/index.js"
130
+ },
131
+ "./types": {
132
+ "import": "./dist/exports/types.js",
133
+ "types": "./dist/exports/types.d.ts",
134
+ "default": "./dist/exports/types.js"
135
+ },
136
+ "./fields": {
137
+ "import": "./dist/exports/fields.js",
138
+ "types": "./dist/exports/fields.d.ts",
139
+ "default": "./dist/exports/fields.js"
140
+ },
141
+ "./client": {
142
+ "import": "./dist/exports/client.js",
143
+ "types": "./dist/exports/client.d.ts",
144
+ "default": "./dist/exports/client.js"
145
+ }
146
+ }
123
147
  }
124
- }
148
+ }
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import { FieldDescriptionClientProps } from 'payload';
3
- export declare const ComposeField: React.FC<FieldDescriptionClientProps>;
4
- //# sourceMappingURL=ComposeField.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComposeField.d.ts","sourceRoot":"","sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAErD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAO9D,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"sourcesContent":["'use client'\n\nimport { useFieldProps } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\nimport { FieldDescriptionClientProps } from 'payload'\n\nexport const ComposeField: React.FC<FieldDescriptionClientProps> = (props) => {\n const { schemaPath } = useFieldProps()\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n return <Compose descriptionProps={props} instructionId={instructionId} />\n}\n"],"names":["useFieldProps","React","useInstructions","Compose","ComposeField","props","schemaPath","id","instructionId","path","descriptionProps"],"mappings":"AAAA;;AAEA,SAASA,aAAa,QAAQ,iBAAgB;AAC9C,OAAOC,WAAW,QAAO;AAEzB,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AAGrD,OAAO,MAAMC,eAAsD,CAACC;IAClE,MAAM,EAAEC,UAAU,EAAE,GAAGN;IACvB,MAAM,EAAEO,IAAIC,aAAa,EAAE,GAAGN,gBAAgB;QAC5CO,MAAMH;IACR;IAEA,qBAAO,KAACH;QAAQO,kBAAkBL;QAAOG,eAAeA;;AAC1D,EAAC"}
@@ -1,2 +0,0 @@
1
- export declare const ComposeFeatureComponent: () => import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=ComposeFeatureComponent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComposeFeatureComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/ComposeFeatureComponent.tsx"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,+CAQnC,CAAA"}
@@ -1,9 +0,0 @@
1
- import { FC } from 'react';
2
- import { FieldDescriptionClientProps } from 'payload';
3
- type ComposeProps = {
4
- descriptionProps?: FieldDescriptionClientProps;
5
- instructionId: string;
6
- };
7
- export declare const Compose: FC<ComposeProps>;
8
- export {};
9
- //# sourceMappingURL=Compose.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Compose.d.ts","sourceRoot":"","sources":["../../../src/ui/Compose/Compose.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAE,EAAE,EAA4C,MAAM,OAAO,CAAA;AAS3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAiBrD,KAAK,YAAY,GAAG;IAClB,gBAAgB,CAAC,EAAE,2BAA2B,CAAA;IAC9C,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAgJpC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/ui/Compose/Compose.tsx"],"sourcesContent":["'use client'\n\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport { FieldDescription, Popup, useDocumentDrawer, useField, useFieldProps } from '@payloadcms/ui'\nimport React, { FC, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../../defaults.js'\nimport { setSafeLexicalState } from '../../utilities/setSafeLexicalState.js'\nimport { PluginIcon } from '../Icons/Icons.js'\nimport { UndoRedoActions } from './UndoRedoActions.js'\nimport styles from './compose.module.scss'\nimport { useMenu } from './hooks/menu/useMenu.js'\nimport { useGenerate } from './hooks/useGenerate.js'\nimport { FieldDescriptionClientProps } from 'payload'\n\nfunction findParentWithClass(element, className) {\n // Base case: if the element is null or we've reached the top of the DOM\n if (!element || element === document.body) {\n return null\n }\n\n // Check if the current element has the class we're looking for\n if (element.classList.contains(className)) {\n return element\n }\n\n // Recursively call the function on the parent element\n return findParentWithClass(element.parentElement, className)\n}\n\ntype ComposeProps = {\n descriptionProps?: FieldDescriptionClientProps\n instructionId: string\n}\n\nexport const Compose: FC<ComposeProps> = (props) => {\n const [DocumentDrawer, _, { closeDrawer, openDrawer }] = useDocumentDrawer({\n id: props.instructionId,\n collectionSlug: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const { type: fieldType, path: pathFromContext, schemaPath } = useFieldProps()\n const { editor: lexicalEditor, editorContainerRef } = useEditorConfigContext()\n\n // Below snippet is used to show/hide the actions menu on AI enabled fields\n const [input, setInput] = useState(null)\n const actionsRef = useRef(null)\n\n // Set input element for current field\n useEffect(() => {\n if (!actionsRef.current) return\n\n const fieldId = `field-${pathFromContext.replace(/\\./g, '__')}`\n const inputElement = document.getElementById(fieldId)\n\n if (!inputElement && fieldType === 'richText') {\n setInput(editorContainerRef.current)\n } else {\n actionsRef.current.setAttribute('for', fieldId)\n setInput(inputElement)\n }\n }, [pathFromContext, schemaPath, actionsRef, editorContainerRef])\n\n // Show or hide actions menu on field\n useEffect(() => {\n if (!input || !actionsRef.current) return\n\n actionsRef.current.classList.add(styles.actions_hidden)\n input.addEventListener('click', (event) => {\n document.querySelectorAll('.ai-plugin-active')?.forEach((element) => {\n const actionElement = element.querySelector(`.${styles.actions}`)\n if (actionElement) {\n actionElement.classList.add(styles.actions_hidden)\n element.classList.remove('ai-plugin-active')\n }\n })\n\n actionsRef.current.classList.remove(styles.actions_hidden)\n const parentWithClass = findParentWithClass(event.target, 'field-type')\n parentWithClass.classList.add('ai-plugin-active')\n })\n }, [input, actionsRef])\n\n const [isProcessing, setIsProcessing] = useState(false)\n const { generate, isLoading } = useGenerate()\n\n const { ActiveComponent, Menu } = useMenu({\n onCompose: async () => {\n console.log('Composing...')\n setIsProcessing(true)\n await generate({\n action: 'Compose',\n }).finally(() => {\n setIsProcessing(false)\n })\n },\n onExpand: async () => {\n console.log('Expanding...')\n await generate({\n action: 'Expand',\n })\n },\n onProofread: async () => {\n console.log('Proofreading...')\n await generate({\n action: 'Proofread',\n })\n },\n onRephrase: async () => {\n console.log('Rephrasing...')\n await generate({\n action: 'Rephrase',\n })\n },\n onSettings: openDrawer,\n onSimplify: async () => {\n console.log('Simplifying...')\n await generate({\n action: 'Simplify',\n })\n },\n onSummarize: async () => {\n console.log('Summarizing...')\n await generate({\n action: 'Summarize',\n })\n },\n onTranslate: async (data) => {\n console.log('Translating...')\n await generate({\n action: 'Translate',\n params: data,\n })\n },\n })\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const setIfValueIsLexicalState = useCallback((val: any) => {\n if (val.root && lexicalEditor) {\n setSafeLexicalState(JSON.stringify(val), lexicalEditor)\n }\n\n // DO NOT PROVIDE lexicalEditor as a dependency, it freaks out and does not update the editor after first undo/redo\n }, [])\n\n return (\n <React.Fragment>\n <label className={`${styles.actions}`} onClick={(e) => e.preventDefault()} ref={actionsRef}>\n <DocumentDrawer\n onSave={() => {\n closeDrawer()\n }}\n />\n <Popup\n button={<PluginIcon isLoading={isProcessing || isLoading} />}\n render={({ close }) => {\n return <Menu isLoading={isProcessing || isLoading} onClose={close} />\n }}\n verticalAlign=\"bottom\"\n />\n <ActiveComponent isLoading={isProcessing || isLoading} />\n <UndoRedoActions\n onChange={(val) => {\n setValue(val)\n setIfValueIsLexicalState(val)\n }}\n />\n </label>\n {/*Render incoming description field*/}\n {props.descriptionProps ? (\n <div>\n <FieldDescription {...props.descriptionProps} />\n </div>\n ) : null}\n </React.Fragment>\n )\n}\n"],"names":["useEditorConfigContext","FieldDescription","Popup","useDocumentDrawer","useField","useFieldProps","React","useCallback","useEffect","useRef","useState","PLUGIN_INSTRUCTIONS_TABLE","setSafeLexicalState","PluginIcon","UndoRedoActions","styles","useMenu","useGenerate","findParentWithClass","element","className","document","body","classList","contains","parentElement","Compose","props","DocumentDrawer","_","closeDrawer","openDrawer","id","instructionId","collectionSlug","type","fieldType","path","pathFromContext","schemaPath","editor","lexicalEditor","editorContainerRef","input","setInput","actionsRef","current","fieldId","replace","inputElement","getElementById","setAttribute","add","actions_hidden","addEventListener","event","querySelectorAll","forEach","actionElement","querySelector","actions","remove","parentWithClass","target","isProcessing","setIsProcessing","generate","isLoading","ActiveComponent","Menu","onCompose","console","log","action","finally","onExpand","onProofread","onRephrase","onSettings","onSimplify","onSummarize","onTranslate","data","params","setValue","setIfValueIsLexicalState","val","root","JSON","stringify","Fragment","label","onClick","e","preventDefault","ref","onSave","button","render","close","onClose","verticalAlign","onChange","descriptionProps","div"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/ui/Compose/UndoRedoActions.tsx"],"sourcesContent":["import { useHistory } from './hooks/useHistory.js'\nimport React, { MouseEventHandler, useCallback, useEffect, useState } from 'react'\n\nexport const UndoRedoActions = ({ onChange }: { onChange: (val: unknown) => void }) => {\n const { canRedo, canUndo, redo, undo } = useHistory()\n\n const redoHistoryValue = useCallback<MouseEventHandler>(\n (event) => {\n event.stopPropagation()\n\n const value = redo()\n if (value) {\n onChange(value)\n }\n },\n [redo],\n )\n\n const undoHistoryValue = useCallback<MouseEventHandler>(\n (event) => {\n event.stopPropagation()\n\n const value = undo()\n if (value) {\n onChange(value)\n }\n },\n [undo],\n )\n\n // Delay rendering until the client-side hydration is complete\n const [isMounted, setIsMounted] = useState(false)\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n if (!isMounted || (!canUndo && !canRedo)) return null\n\n return (\n <>\n <button\n onClick={undoHistoryValue}\n type=\"button\"\n disabled={!canUndo}\n className={`btn btn--size-small btn--style-secondary ${!canUndo && 'btn--disabled'}`}\n style={{ marginBlock: 0 }}\n >\n Undo\n </button>\n <button\n onClick={redoHistoryValue}\n type=\"button\"\n disabled={!canRedo}\n className={`btn btn--size-small btn--style-secondary ${!canRedo && 'btn--disabled'}`}\n style={{ marginBlock: 0 }}\n >\n Redo\n </button>\n </>\n )\n}\n"],"names":["useHistory","React","useCallback","useEffect","useState","UndoRedoActions","onChange","canRedo","canUndo","redo","undo","redoHistoryValue","event","stopPropagation","value","undoHistoryValue","isMounted","setIsMounted","button","onClick","type","disabled","className","style","marginBlock"],"mappings":";AAAA,SAASA,UAAU,QAAQ,wBAAuB;AAClD,OAAOC,SAA4BC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAElF,OAAO,MAAMC,kBAAkB,CAAC,EAAEC,QAAQ,EAAwC;IAChF,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAE,GAAGV;IAEzC,MAAMW,mBAAmBT,YACvB,CAACU;QACCA,MAAMC,eAAe;QAErB,MAAMC,QAAQL;QACd,IAAIK,OAAO;YACTR,SAASQ;QACX;IACF,GACA;QAACL;KAAK;IAGR,MAAMM,mBAAmBb,YACvB,CAACU;QACCA,MAAMC,eAAe;QAErB,MAAMC,QAAQJ;QACd,IAAII,OAAO;YACTR,SAASQ;QACX;IACF,GACA;QAACJ;KAAK;IAGR,8DAA8D;IAC9D,MAAM,CAACM,WAAWC,aAAa,GAAGb,SAAS;IAE3CD,UAAU;QACRc,aAAa;IACf,GAAG,EAAE;IAEL,IAAI,CAACD,aAAc,CAACR,WAAW,CAACD,SAAU,OAAO;IAEjD,qBACE;;0BACE,KAACW;gBACCC,SAASJ;gBACTK,MAAK;gBACLC,UAAU,CAACb;gBACXc,WAAW,CAAC,yCAAyC,EAAE,CAACd,WAAW,gBAAgB,CAAC;gBACpFe,OAAO;oBAAEC,aAAa;gBAAE;0BACzB;;0BAGD,KAACN;gBACCC,SAASR;gBACTS,MAAK;gBACLC,UAAU,CAACd;gBACXe,WAAW,CAAC,yCAAyC,EAAE,CAACf,WAAW,gBAAgB,CAAC;gBACpFgB,OAAO;oBAAEC,aAAa;gBAAE;0BACzB;;;;AAKP,EAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TranslateMenu.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/TranslateMenu.tsx"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa;;6CA0EzB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useHistory.d.ts","sourceRoot":"","sources":["../../../../src/ui/Compose/hooks/useHistory.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,UAAU;;;;;gBAkEZ,GAAG;;CAoEb,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/ui/Compose/hooks/useHistory.ts"],"sourcesContent":["'use client'\n\nimport { useDocumentInfo, useField, useFieldProps } from '@payloadcms/ui'\nimport { useCallback, useEffect } from 'react'\n\nimport { PLUGIN_NAME } from '../../../defaults.js'\n\nconst STORAGE_KEY = `${PLUGIN_NAME}-fields-history`\n\ninterface HistoryState {\n [path: string]: {\n currentIndex: number\n history: any[]\n }\n}\n\nexport const useHistory = () => {\n const { id } = useDocumentInfo()\n const { path: pathFromContext, schemaPath } = useFieldProps()\n const { value: currentFieldValue } = useField<string>({\n path: pathFromContext,\n })\n\n const fieldKey = `${id}.${schemaPath}`\n\n const getLatestHistory = useCallback((): HistoryState => {\n try {\n // This condition is applied, as it was somehow triggering on server side\n if (typeof localStorage !== 'undefined') {\n return JSON.parse(localStorage.getItem(STORAGE_KEY) || '{}')\n }\n return {}\n } catch (e) {\n console.error('Error parsing history:', e)\n return {}\n }\n }, [])\n\n const saveToLocalStorage = useCallback((newGlobalHistory: HistoryState) => {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(newGlobalHistory))\n }\n }, [])\n\n // Clear previous history\n const clearHistory = useCallback(() => {\n const latestHistory = { ...getLatestHistory() }\n Object.keys(latestHistory).forEach((k) => {\n if (!k.startsWith(id.toString())) {\n delete latestHistory[k]\n }\n })\n saveToLocalStorage(latestHistory)\n }, [id, fieldKey, getLatestHistory, saveToLocalStorage])\n\n useEffect(() => {\n // This is applied to clear out the document history which is not currently in use\n clearHistory()\n\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || {\n currentIndex: -1,\n history: [],\n }\n\n let newIndex = currentIndex\n if (currentIndex == -1) {\n newIndex = 0\n if (currentFieldValue) {\n history[newIndex] = currentFieldValue\n }\n }\n\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n\n saveToLocalStorage(newGlobalHistory)\n }, [fieldKey])\n\n const set = useCallback(\n (data: any) => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || {\n currentIndex: -1,\n history: [],\n }\n const newHistory = [...history.slice(0, currentIndex + 1), data]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newHistory.length - 1, history: newHistory },\n }\n saveToLocalStorage(newGlobalHistory)\n return data\n },\n [fieldKey, getLatestHistory, saveToLocalStorage],\n )\n\n const undo = useCallback(() => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n if (currentIndex > 0) {\n const newIndex = currentIndex - 1\n const newValue = history[newIndex]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n saveToLocalStorage(newGlobalHistory)\n return newValue\n }\n return undefined\n }, [fieldKey, getLatestHistory, saveToLocalStorage])\n\n const redo = useCallback(() => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n if (currentIndex < history.length - 1) {\n const newIndex = currentIndex + 1\n const newValue = history[newIndex]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n saveToLocalStorage(newGlobalHistory)\n return newValue\n }\n return undefined\n }, [fieldKey, getLatestHistory, saveToLocalStorage])\n\n const getLatestFieldHistory = useCallback(() => {\n const latestHistory = getLatestHistory()\n return latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n }, [getLatestHistory, fieldKey])\n\n const fieldHistory = getLatestFieldHistory()\n\n const canUndo = fieldHistory.currentIndex > 0\n const canRedo = fieldHistory.currentIndex < fieldHistory.history.length - 1\n const currentValue = fieldHistory.history[fieldHistory.currentIndex]\n\n return {\n canRedo,\n canUndo,\n currentValue,\n redo,\n set,\n undo,\n }\n}\n"],"names":["useDocumentInfo","useField","useFieldProps","useCallback","useEffect","PLUGIN_NAME","STORAGE_KEY","useHistory","id","path","pathFromContext","schemaPath","value","currentFieldValue","fieldKey","getLatestHistory","localStorage","JSON","parse","getItem","e","console","error","saveToLocalStorage","newGlobalHistory","setItem","stringify","clearHistory","latestHistory","Object","keys","forEach","k","startsWith","toString","currentIndex","history","newIndex","set","data","newHistory","slice","length","undo","newValue","undefined","redo","getLatestFieldHistory","fieldHistory","canUndo","canRedo","currentValue"],"mappings":"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"}
File without changes