@payloadcms/richtext-lexical 3.59.0-internal.898dbd3 → 3.59.0-internal.917c03d

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 (81) hide show
  1. package/dist/exports/client/Field-CJFETHA3.js +2 -0
  2. package/dist/exports/client/Field-CJFETHA3.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-TSIENULZ.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-TSIENULZ.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/chunk-BQCXN3B4.js +2 -0
  7. package/dist/exports/client/chunk-BQCXN3B4.js.map +7 -0
  8. package/dist/exports/client/chunk-XNERFY6G.js +2 -0
  9. package/dist/exports/client/chunk-XNERFY6G.js.map +7 -0
  10. package/dist/exports/client/component-CYFKY3IL.js +2 -0
  11. package/dist/exports/client/component-CYFKY3IL.js.map +7 -0
  12. package/dist/exports/client/componentInline-NGTRUSGB.js +2 -0
  13. package/dist/exports/client/index.js +24 -24
  14. package/dist/exports/client/index.js.map +3 -3
  15. package/dist/features/blocks/client/component/BlockContent.d.ts.map +1 -1
  16. package/dist/features/blocks/client/component/BlockContent.js +4 -1
  17. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  18. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  19. package/dist/features/blocks/client/component/index.js +15 -12
  20. package/dist/features/blocks/client/component/index.js.map +1 -1
  21. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  22. package/dist/features/blocks/client/componentInline/index.js +13 -10
  23. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  24. package/dist/features/blocks/premade/CodeBlock/Component/Block.d.ts +1 -1
  25. package/dist/features/blocks/premade/CodeBlock/Component/Block.d.ts.map +1 -1
  26. package/dist/features/blocks/premade/CodeBlock/Component/Block.js +20 -15
  27. package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
  28. package/dist/features/blocks/premade/CodeBlock/Component/Code.d.ts +8 -0
  29. package/dist/features/blocks/premade/CodeBlock/Component/Code.d.ts.map +1 -1
  30. package/dist/features/blocks/premade/CodeBlock/Component/Code.js +15 -0
  31. package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -1
  32. package/dist/features/blocks/server/i18n.js +38 -38
  33. package/dist/features/blocks/server/i18n.js.map +1 -1
  34. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
  35. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +5 -3
  36. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  37. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  38. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -1
  39. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  40. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  41. package/dist/features/relationship/client/components/RelationshipComponent.js +5 -9
  42. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  43. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  44. package/dist/features/toolbars/fixed/client/Toolbar/index.js +7 -1
  45. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  46. package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
  47. package/dist/features/toolbars/inline/client/Toolbar/index.js +3 -1
  48. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  49. package/dist/features/upload/client/component/index.d.ts.map +1 -1
  50. package/dist/features/upload/client/component/index.js +6 -5
  51. package/dist/features/upload/client/component/index.js.map +1 -1
  52. package/dist/field/RenderLexical/index.d.ts.map +1 -1
  53. package/dist/field/RenderLexical/index.js +1 -0
  54. package/dist/field/RenderLexical/index.js.map +1 -1
  55. package/dist/field/bundled.css +1 -1
  56. package/dist/field/rscEntry.d.ts.map +1 -1
  57. package/dist/field/rscEntry.js +2 -0
  58. package/dist/field/rscEntry.js.map +1 -1
  59. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  60. package/dist/lexical/LexicalEditor.js +20 -26
  61. package/dist/lexical/LexicalEditor.js.map +1 -1
  62. package/dist/utilities/buildInitialState.d.ts +1 -0
  63. package/dist/utilities/buildInitialState.d.ts.map +1 -1
  64. package/dist/utilities/buildInitialState.js +1 -0
  65. package/dist/utilities/buildInitialState.js.map +1 -1
  66. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  67. package/dist/utilities/fieldsDrawer/DrawerContent.js +7 -3
  68. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  69. package/package.json +6 -6
  70. package/dist/exports/client/Field-2MCIQXRP.js +0 -2
  71. package/dist/exports/client/Field-2MCIQXRP.js.map +0 -7
  72. package/dist/exports/client/RelationshipComponent-APF3CN47.js +0 -2
  73. package/dist/exports/client/RelationshipComponent-APF3CN47.js.map +0 -7
  74. package/dist/exports/client/chunk-CYLMY5ZJ.js +0 -2
  75. package/dist/exports/client/chunk-CYLMY5ZJ.js.map +0 -7
  76. package/dist/exports/client/chunk-K47TNP5J.js +0 -2
  77. package/dist/exports/client/chunk-K47TNP5J.js.map +0 -7
  78. package/dist/exports/client/component-VDJI45F2.js +0 -2
  79. package/dist/exports/client/component-VDJI45F2.js.map +0 -7
  80. package/dist/exports/client/componentInline-AGFSKAY4.js +0 -2
  81. /package/dist/exports/client/{componentInline-AGFSKAY4.js.map → componentInline-NGTRUSGB.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","names":["i18n","ar","inlineBlocks","create","edit","label","remove","az","bg","cs","da","de","en","es","et","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sl","sv","ta","th","tr","uk","vi","zh"],"sources":["../../../../src/features/blocks/server/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n inlineBlocks: {\n create: 'أنشئ {{label}}',\n edit: 'تحرير {{التسمية}}',\n label: 'الكتل الداخلية',\n remove: 'إزالة {{التسمية}}',\n },\n label: 'كتل',\n },\n az: {\n inlineBlocks: {\n create: 'Yarat {{label}}',\n edit: '{{label}} redaktə et',\n label: 'Sıralı Bloklar',\n remove: '{{label}} silin',\n },\n label: 'Bloklar',\n },\n bg: {\n inlineBlocks: {\n create: 'Създайте {{етикет}}',\n edit: 'Редактирай {{етикет}}',\n label: 'Вградени блокове',\n remove: 'Премахнете {{етикет}}',\n },\n label: 'Блокове',\n },\n cs: {\n inlineBlocks: {\n create: 'Vytvořte {{štítek}}',\n edit: 'Upravit {{label}}',\n label: 'Inline bloky',\n remove: 'Odstraňte {{label}}',\n },\n label: 'Bloky',\n },\n da: {\n inlineBlocks: {\n create: 'Opret {{label}}',\n edit: 'Rediger {{label}}',\n label: 'Indlejrede blokke',\n remove: 'Fjern {{label}}',\n },\n label: 'Blokke',\n },\n de: {\n inlineBlocks: {\n create: 'Erstelle {{label}}',\n edit: 'Bearbeite {{label}}',\n label: 'Inline-Blöcke',\n remove: 'Entferne {{label}}',\n },\n label: 'Blöcke',\n },\n en: {\n inlineBlocks: {\n create: 'Create {{label}}',\n edit: 'Edit {{label}}',\n label: 'Inline Blocks',\n remove: 'Remove {{label}}',\n },\n label: 'Blocks',\n },\n es: {\n inlineBlocks: {\n create: 'Crear {{etiqueta}}',\n edit: 'Editar {{etiqueta}}',\n label: 'Bloques en línea',\n remove: 'Eliminar {{label}}',\n },\n label: 'Bloques',\n },\n et: {\n inlineBlocks: {\n create: 'Loo {{label}}',\n edit: 'Muuda {{label}}',\n label: 'Sisseehitatud plokid',\n remove: 'Eemalda {{label}}',\n },\n label: 'Plokk',\n },\n fa: {\n inlineBlocks: {\n create: 'ایجاد {{برچسب}}',\n edit: 'ویرایش {{برچسب}}',\n label: 'بلوک‌های درون خطی',\n remove: 'حذف {{برچسب}}',\n },\n label: 'بلوک ها',\n },\n fr: {\n inlineBlocks: {\n create: 'Créer {{label}}',\n edit: 'Modifier {{label}}',\n label: 'Blocs en ligne',\n remove: 'Supprimer {{label}}',\n },\n label: 'Blocs',\n },\n he: {\n inlineBlocks: {\n create: 'צור {{תווית}}',\n edit: 'ערוך {{תווית}}',\n label: 'בלוקים משורשרים',\n remove: 'הסר {{תווית}}',\n },\n label: 'חסימות',\n },\n hr: {\n inlineBlocks: {\n create: 'Stvori {{oznaka}}',\n edit: 'Uredi {{label}}',\n label: 'Unutrašnji blokovi',\n remove: 'Ukloni {{oznaka}}',\n },\n label: 'Blokovi',\n },\n hu: {\n inlineBlocks: {\n create: 'Hozzon létre {{címke}}',\n edit: 'Szerkesztés {{címke}}',\n label: 'Beágyazott blokkok',\n remove: 'Távolítsa el a {{label}}',\n },\n label: 'Blokkok',\n },\n it: {\n inlineBlocks: {\n create: 'Crea {{etichetta}}',\n edit: 'Modifica {{label}}',\n label: 'Blocchi in linea',\n remove: 'Rimuovi {{label}}',\n },\n label: 'Blocchi',\n },\n ja: {\n inlineBlocks: {\n create: '{{label}}を作成する',\n edit: '{{label}}を編集する',\n label: 'インラインブロック',\n remove: '{{ラベル}}を削除します',\n },\n label: 'ブロック',\n },\n ko: {\n inlineBlocks: {\n create: '{{label}} 생성하기',\n edit: '{{label}} 수정하기',\n label: '인라인 블록',\n remove: '{{label}} 제거하세요',\n },\n label: '블록',\n },\n my: {\n inlineBlocks: {\n create: 'Cipta {{label}}',\n edit: 'Sunting {{label}}',\n label: 'Inline Blocks [SKIPPED]',\n remove: 'Buang {{label}}',\n },\n label: 'တံတားများ',\n },\n nb: {\n inlineBlocks: {\n create: 'Opprett {{label}}',\n edit: 'Rediger {{label}}',\n label: 'In-line blokker',\n remove: 'Fjern {{label}}',\n },\n label: 'Blokker',\n },\n nl: {\n inlineBlocks: {\n create: 'Maak {{label}}',\n edit: 'Bewerk {{label}}',\n label: 'Inline Blocks',\n remove: 'Verwijder {{label}}',\n },\n label: 'Blokken',\n },\n pl: {\n inlineBlocks: {\n create: 'Utwórz {{label}}',\n edit: 'Edytuj {{etykieta}}',\n label: 'Blokowanie w linii',\n remove: 'Usuń {{etykieta}}',\n },\n label: 'Bloki',\n },\n pt: {\n inlineBlocks: {\n create: 'Crie {{label}}',\n edit: 'Editar {{label}}',\n label: 'Blocos em linha',\n remove: 'Remova {{label}}',\n },\n label: 'Blocos',\n },\n ro: {\n inlineBlocks: {\n create: 'Creează {{eticheta}}',\n edit: 'Editați {{eticheta}}',\n label: 'Blocuri in linie',\n remove: 'Ștergeți {{etichetă}}',\n },\n label: 'Blocuri',\n },\n rs: {\n inlineBlocks: {\n create: 'Креирај {{label}}',\n edit: 'Измени {{label}}',\n label: 'Уметнути блокови',\n remove: 'Уклони {{label}}',\n },\n label: 'Блокови',\n },\n 'rs-latin': {\n inlineBlocks: {\n create: 'Kreiraj {{label}}',\n edit: 'Izmeni {{label}}',\n label: 'Umetnuti blokovi',\n remove: 'Ukloni {{oznaka}}',\n },\n label: 'Blokovi',\n },\n ru: {\n inlineBlocks: {\n create: 'Создать {{label}}',\n edit: 'Изменить {{метка}}',\n label: 'Встроенные блоки',\n remove: 'Удалить {{метка}}',\n },\n label: 'Блоки',\n },\n sk: {\n inlineBlocks: {\n create: 'Vytvorte {{označenie}}',\n edit: 'Upraviť {{label}}',\n label: 'Inline bloky',\n remove: 'Odstráňte {{label}}',\n },\n label: 'Bloky',\n },\n sl: {\n inlineBlocks: {\n create: 'Ustvari {{oznaka}}',\n edit: 'Uredi {{label}}',\n label: 'Vrstični bloki',\n remove: 'Odstrani {{label}}',\n },\n label: 'Bloki',\n },\n sv: {\n inlineBlocks: {\n create: 'Skapa {{label}}',\n edit: 'Redigera {{etikett}}',\n label: 'Inline-blockar',\n remove: 'Ta bort {{etikett}}',\n },\n label: 'Block',\n },\n ta: {\n inlineBlocks: {\n create: '{{label}} உருவாக்கவும்',\n edit: '{{label}} திருத்தவும்',\n label: 'இன்லைன் தொகுதிகள்',\n remove: '{{label}} நீக்கவும்',\n },\n label: 'தொகுதிகள்',\n },\n th: {\n inlineBlocks: {\n create: 'สร้าง {{label}}',\n edit: 'แก้ไข {{label}}',\n label: 'บล็อกแบบอินไลน์',\n remove: 'ลบ {{label}}',\n },\n label: 'บล็อค',\n },\n tr: {\n inlineBlocks: {\n create: '{{Etiketi}} oluşturun',\n edit: \"{{Etiket}}'i düzenleyin\",\n label: 'Satır İçi Bloklar',\n remove: '{{Etiketi}} kaldırın',\n },\n label: 'Bloklar',\n },\n uk: {\n inlineBlocks: {\n create: 'Створити {{label}}',\n edit: 'Редагувати {{label}}',\n label: 'Вбудовані блоки',\n remove: 'Видалити {{мітку}}',\n },\n label: 'Блоки',\n },\n vi: {\n inlineBlocks: {\n create: 'Tạo {{label}}',\n edit: 'Chỉnh sửa {{nhãn}}',\n label: 'Khối nội tuyến',\n remove: 'Xóa {{nhãn}}',\n },\n label: 'Khối',\n },\n zh: {\n inlineBlocks: {\n create: '创建{{label}}',\n edit: '编辑 {{label}}',\n label: '内联块',\n remove: '删除{{label}}',\n },\n label: '区块',\n },\n 'zh-TW': {\n inlineBlocks: {\n create: '創建 {{label}}',\n edit: '編輯 {{label}}',\n label: '內聯區塊',\n remove: '移除 {{label}}',\n },\n label: '區塊',\n },\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"i18n.js","names":["i18n","ar","inlineBlocks","create","edit","label","remove","az","bg","cs","da","de","en","es","et","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sl","sv","ta","th","tr","uk","vi","zh"],"sources":["../../../../src/features/blocks/server/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n inlineBlocks: {\n create: 'أنشئ {{label}}',\n edit: 'تحرير {{label}}',\n label: 'الكتل الداخلية',\n remove: 'إزالة {{label}}',\n },\n label: 'كتل',\n },\n az: {\n inlineBlocks: {\n create: 'Yarat {{label}}',\n edit: '{{label}} redaktə et',\n label: 'Sıralı Bloklar',\n remove: '{{label}} silin',\n },\n label: 'Bloklar',\n },\n bg: {\n inlineBlocks: {\n create: 'Създайте {{label}}',\n edit: 'Редактирай {{label}}',\n label: 'Вградени блокове',\n remove: 'Премахнете {{label}}',\n },\n label: 'Блокове',\n },\n cs: {\n inlineBlocks: {\n create: 'Vytvořte {{label}}',\n edit: 'Upravit {{label}}',\n label: 'Inline bloky',\n remove: 'Odstraňte {{label}}',\n },\n label: 'Bloky',\n },\n da: {\n inlineBlocks: {\n create: 'Opret {{label}}',\n edit: 'Rediger {{label}}',\n label: 'Indlejrede blokke',\n remove: 'Fjern {{label}}',\n },\n label: 'Blokke',\n },\n de: {\n inlineBlocks: {\n create: 'Erstelle {{label}}',\n edit: 'Bearbeite {{label}}',\n label: 'Inline-Blöcke',\n remove: 'Entferne {{label}}',\n },\n label: 'Blöcke',\n },\n en: {\n inlineBlocks: {\n create: 'Create {{label}}',\n edit: 'Edit {{label}}',\n label: 'Inline Blocks',\n remove: 'Remove {{label}}',\n },\n label: 'Blocks',\n },\n es: {\n inlineBlocks: {\n create: 'Crear {{label}}',\n edit: 'Editar {{label}}',\n label: 'Bloques en línea',\n remove: 'Eliminar {{label}}',\n },\n label: 'Bloques',\n },\n et: {\n inlineBlocks: {\n create: 'Loo {{label}}',\n edit: 'Muuda {{label}}',\n label: 'Sisseehitatud plokid',\n remove: 'Eemalda {{label}}',\n },\n label: 'Plokk',\n },\n fa: {\n inlineBlocks: {\n create: 'ایجاد {{label}}',\n edit: 'ویرایش {{label}}',\n label: 'بلوک‌های درون خطی',\n remove: 'حذف {{label}}',\n },\n label: 'بلوک ها',\n },\n fr: {\n inlineBlocks: {\n create: 'Créer {{label}}',\n edit: 'Modifier {{label}}',\n label: 'Blocs en ligne',\n remove: 'Supprimer {{label}}',\n },\n label: 'Blocs',\n },\n he: {\n inlineBlocks: {\n create: 'צור {{label}}',\n edit: 'ערוך {{label}}',\n label: 'בלוקים משורשרים',\n remove: 'הסר {{label}}',\n },\n label: 'חסימות',\n },\n hr: {\n inlineBlocks: {\n create: 'Stvori {{label}}',\n edit: 'Uredi {{label}}',\n label: 'Unutrašnji blokovi',\n remove: 'Ukloni {{label}}',\n },\n label: 'Blokovi',\n },\n hu: {\n inlineBlocks: {\n create: 'Hozzon létre {{label}}',\n edit: 'Szerkesztés {{label}}',\n label: 'Beágyazott blokkok',\n remove: 'Távolítsa el a {{label}}',\n },\n label: 'Blokkok',\n },\n it: {\n inlineBlocks: {\n create: 'Crea {{label}}',\n edit: 'Modifica {{label}}',\n label: 'Blocchi in linea',\n remove: 'Rimuovi {{label}}',\n },\n label: 'Blocchi',\n },\n ja: {\n inlineBlocks: {\n create: '{{label}}を作成する',\n edit: '{{label}}を編集する',\n label: 'インラインブロック',\n remove: '{{label}}を削除します',\n },\n label: 'ブロック',\n },\n ko: {\n inlineBlocks: {\n create: '{{label}} 생성하기',\n edit: '{{label}} 수정하기',\n label: '인라인 블록',\n remove: '{{label}} 제거하세요',\n },\n label: '블록',\n },\n my: {\n inlineBlocks: {\n create: 'Cipta {{label}}',\n edit: 'Sunting {{label}}',\n label: 'Inline Blocks [SKIPPED]',\n remove: 'Buang {{label}}',\n },\n label: 'တံတားများ',\n },\n nb: {\n inlineBlocks: {\n create: 'Opprett {{label}}',\n edit: 'Rediger {{label}}',\n label: 'In-line blokker',\n remove: 'Fjern {{label}}',\n },\n label: 'Blokker',\n },\n nl: {\n inlineBlocks: {\n create: 'Maak {{label}}',\n edit: 'Bewerk {{label}}',\n label: 'Inline Blocks',\n remove: 'Verwijder {{label}}',\n },\n label: 'Blokken',\n },\n pl: {\n inlineBlocks: {\n create: 'Utwórz {{label}}',\n edit: 'Edytuj {{label}}',\n label: 'Blokowanie w linii',\n remove: 'Usuń {{label}}',\n },\n label: 'Bloki',\n },\n pt: {\n inlineBlocks: {\n create: 'Crie {{label}}',\n edit: 'Editar {{label}}',\n label: 'Blocos em linha',\n remove: 'Remova {{label}}',\n },\n label: 'Blocos',\n },\n ro: {\n inlineBlocks: {\n create: 'Creează {{label}}',\n edit: 'Editați {{label}}',\n label: 'Blocuri in linie',\n remove: 'Ștergeți {{label}}',\n },\n label: 'Blocuri',\n },\n rs: {\n inlineBlocks: {\n create: 'Креирај {{label}}',\n edit: 'Измени {{label}}',\n label: 'Уметнути блокови',\n remove: 'Уклони {{label}}',\n },\n label: 'Блокови',\n },\n 'rs-latin': {\n inlineBlocks: {\n create: 'Kreiraj {{label}}',\n edit: 'Izmeni {{label}}',\n label: 'Umetnuti blokovi',\n remove: 'Ukloni {{label}}',\n },\n label: 'Blokovi',\n },\n ru: {\n inlineBlocks: {\n create: 'Создать {{label}}',\n edit: 'Изменить {{label}}',\n label: 'Встроенные блоки',\n remove: 'Удалить {{label}}',\n },\n label: 'Блоки',\n },\n sk: {\n inlineBlocks: {\n create: 'Vytvorte {{label}}',\n edit: 'Upraviť {{label}}',\n label: 'Inline bloky',\n remove: 'Odstráňte {{label}}',\n },\n label: 'Bloky',\n },\n sl: {\n inlineBlocks: {\n create: 'Ustvari {{label}}',\n edit: 'Uredi {{label}}',\n label: 'Vrstični bloki',\n remove: 'Odstrani {{label}}',\n },\n label: 'Bloki',\n },\n sv: {\n inlineBlocks: {\n create: 'Skapa {{label}}',\n edit: 'Redigera {{label}}',\n label: 'Inline-blockar',\n remove: 'Ta bort {{label}}',\n },\n label: 'Block',\n },\n ta: {\n inlineBlocks: {\n create: '{{label}} உருவாக்கவும்',\n edit: '{{label}} திருத்தவும்',\n label: 'இன்லைன் தொகுதிகள்',\n remove: '{{label}} நீக்கவும்',\n },\n label: 'தொகுதிகள்',\n },\n th: {\n inlineBlocks: {\n create: 'สร้าง {{label}}',\n edit: 'แก้ไข {{label}}',\n label: 'บล็อกแบบอินไลน์',\n remove: 'ลบ {{label}}',\n },\n label: 'บล็อค',\n },\n tr: {\n inlineBlocks: {\n create: '{{label}} oluşturun',\n edit: \"{{label}}'i düzenleyin\",\n label: 'Satır İçi Bloklar',\n remove: '{{label}} kaldırın',\n },\n label: 'Bloklar',\n },\n uk: {\n inlineBlocks: {\n create: 'Створити {{label}}',\n edit: 'Редагувати {{label}}',\n label: 'Вбудовані блоки',\n remove: 'Видалити {{label}}',\n },\n label: 'Блоки',\n },\n vi: {\n inlineBlocks: {\n create: 'Tạo {{label}}',\n edit: 'Chỉnh sửa {{label}}',\n label: 'Khối nội tuyến',\n remove: 'Xóa {{label}}',\n },\n label: 'Khối',\n },\n zh: {\n inlineBlocks: {\n create: '创建{{label}}',\n edit: '编辑 {{label}}',\n label: '内联块',\n remove: '删除{{label}}',\n },\n label: '区块',\n },\n 'zh-TW': {\n inlineBlocks: {\n create: '創建 {{label}}',\n edit: '編輯 {{label}}',\n label: '內聯區塊',\n remove: '移除 {{label}}',\n },\n label: '區塊',\n },\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA6Q9B,wBAAgB,uBAAuB,CAAC,EACtC,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,CAO3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA+Q9B,wBAAgB,uBAAuB,CAAC,EACtC,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,CAQ3B"}
@@ -3,6 +3,7 @@
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
5
5
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
6
+ import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
6
7
  import { $getTableAndElementByKey, $getTableColumnIndexFromTableCellNode, $getTableRowIndexFromTableCellNode, $insertTableColumnAtSelection, $insertTableRowAtSelection, $isTableCellNode, $isTableNode, getTableElement, TableNode } from '@lexical/table';
7
8
  import { $findMatchingParent, mergeRegister } from '@lexical/utils';
8
9
  import { $getNearestNodeFromDOMNode, isHTMLElement } from 'lexical';
@@ -16,6 +17,7 @@ function TableHoverActionsContainer({
16
17
  anchorElem
17
18
  }) {
18
19
  const [editor] = useLexicalComposerContext();
20
+ const isEditable = useLexicalEditable();
19
21
  const editorConfig = useEditorConfigContext();
20
22
  const [isShownRow, setShownRow] = useState(false);
21
23
  const [isShownColumn, setShownColumn] = useState(false);
@@ -181,7 +183,7 @@ function TableHoverActionsContainer({
181
183
  }
182
184
  });
183
185
  };
184
- if (!editor?.isEditable()) {
186
+ if (!isEditable) {
185
187
  return null;
186
188
  }
187
189
  return /*#__PURE__*/_jsxs(_Fragment, {
@@ -226,8 +228,8 @@ export function TableHoverActionsPlugin(t0) {
226
228
  anchorElem: t1
227
229
  } = t0;
228
230
  const anchorElem = t1 === undefined ? document.body : t1;
229
- const [editor] = useLexicalComposerContext();
230
- if (!editor?.isEditable()) {
231
+ const isEditable = useLexicalEditable();
232
+ if (!isEditable) {
231
233
  return null;
232
234
  }
233
235
  let t2;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$getTableAndElementByKey","$getTableColumnIndexFromTableCellNode","$getTableRowIndexFromTableCellNode","$insertTableColumnAtSelection","$insertTableRowAtSelection","$isTableCellNode","$isTableNode","getTableElement","TableNode","$findMatchingParent","mergeRegister","$getNearestNodeFromDOMNode","isHTMLElement","useEffect","useMemo","useRef","useState","React","createPortal","useEditorConfigContext","useDebounce","BUTTON_WIDTH_PX","TableHoverActionsContainer","anchorElem","editor","editorConfig","isShownRow","setShownRow","isShownColumn","setShownColumn","shouldListenMouseMove","setShouldListenMouseMove","position","setPosition","tableSetRef","Set","tableCellDOMNodeRef","debouncedOnMouseMove","event","isOutside","tableDOMNode","getMouseInfo","lexical","current","hoveredRowNode","hoveredColumnNode","tableDOMElement","getEditorState","read","maybeTableCell","table","node","getElementByKey","getKey","rowCount","getChildrenSize","colCount","getChildAtIndex","rowIndex","colIndex","tableContainerElement","parentElement","bottom","tableElemBottom","height","tableElemHeight","left","tableElemLeft","right","tableElemRight","width","tableElemWidth","y","tableElemY","getBoundingClientRect","tableHasScroll","classList","contains","scrollWidth","clientWidth","editorElemLeft","editorElemY","offsetLeft","top","offsetWidth","tableResizeObserver","ResizeObserver","document","addEventListener","removeEventListener","registerMutationListener","mutations","resetObserver","key","type","add","delete","disconnect","tableKey","tableElement","observe","size","skipInitialization","insertAction","insertRow","update","maybeTableNode","selectEnd","isEditable","_jsxs","_Fragment","_jsx","className","theme","tableAddRows","onClick","style","tableAddColumns","target","closest","tableCell","tableCellResizer","TableHoverActionsPlugin","t0","$","t1","undefined","body","t2"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableRowNode } from '@lexical/table'\nimport type { EditorConfig, NodeKey } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport {\n $getTableAndElementByKey,\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumnAtSelection,\n $insertTableRowAtSelection,\n $isTableCellNode,\n $isTableNode,\n getTableElement,\n TableNode,\n} from '@lexical/table'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode, isHTMLElement } from 'lexical'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useDebounce } from '../../utils/useDebounce.js'\n\nconst BUTTON_WIDTH_PX = 20\n\nfunction TableHoverActionsContainer({\n anchorElem,\n}: {\n anchorElem: HTMLElement\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const editorConfig = useEditorConfigContext()\n const [isShownRow, setShownRow] = useState<boolean>(false)\n const [isShownColumn, setShownColumn] = useState<boolean>(false)\n const [shouldListenMouseMove, setShouldListenMouseMove] = useState<boolean>(false)\n const [position, setPosition] = useState({})\n const tableSetRef = useRef<Set<NodeKey>>(new Set())\n const tableCellDOMNodeRef = useRef<HTMLElement | null>(null)\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { isOutside, tableDOMNode } = getMouseInfo(event, editorConfig.editorConfig?.lexical)\n\n if (isOutside) {\n setShownRow(false)\n setShownColumn(false)\n return\n }\n\n if (!tableDOMNode) {\n return\n }\n\n tableCellDOMNodeRef.current = tableDOMNode\n\n let hoveredRowNode: null | TableCellNode = null\n let hoveredColumnNode: null | TableCellNode = null\n let tableDOMElement: HTMLElement | null = null\n\n editor.getEditorState().read(\n () => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode)\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) => $isTableNode(node))\n if (!$isTableNode(table)) {\n return\n }\n\n tableDOMElement = getTableElement(table, editor.getElementByKey(table.getKey()))\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize()\n const colCount = (table.getChildAtIndex(0) as TableRowNode)?.getChildrenSize()\n\n const rowIndex = $getTableRowIndexFromTableCellNode(maybeTableCell)\n const colIndex = $getTableColumnIndexFromTableCellNode(maybeTableCell)\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell\n }\n }\n }\n },\n { editor },\n )\n\n if (!tableDOMElement) {\n return\n }\n\n // this is the scrollable div container of the table (in case of overflow)\n const tableContainerElement = (tableDOMElement as HTMLTableElement).parentElement\n\n if (!tableContainerElement) {\n return\n }\n\n const {\n bottom: tableElemBottom,\n height: tableElemHeight,\n left: tableElemLeft,\n right: tableElemRight,\n width: tableElemWidth,\n y: tableElemY,\n } = (tableDOMElement as HTMLTableElement).getBoundingClientRect()\n\n let tableHasScroll = false\n if (\n tableContainerElement &&\n tableContainerElement.classList.contains('LexicalEditorTheme__tableScrollableWrapper')\n ) {\n tableHasScroll = tableContainerElement.scrollWidth > tableContainerElement.clientWidth\n }\n\n const { left: editorElemLeft, y: editorElemY } = anchorElem.getBoundingClientRect()\n\n if (hoveredRowNode) {\n setShownColumn(false)\n setShownRow(true)\n setPosition({\n height: BUTTON_WIDTH_PX,\n left:\n tableHasScroll && tableContainerElement\n ? tableContainerElement.offsetLeft\n : tableElemLeft - editorElemLeft,\n top: tableElemBottom - editorElemY + 5,\n width:\n tableHasScroll && tableContainerElement\n ? tableContainerElement.offsetWidth\n : tableElemWidth,\n })\n } else if (hoveredColumnNode) {\n setShownColumn(true)\n setShownRow(false)\n setPosition({\n height: tableElemHeight,\n left: tableElemRight - editorElemLeft + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n })\n }\n },\n 50,\n 250,\n )\n\n // Hide the buttons on any table dimensions change to prevent last row cells\n // overlap behind the 'Add Row' button when text entry changes cell height\n const tableResizeObserver = useMemo(() => {\n return new ResizeObserver(() => {\n setShownRow(false)\n setShownColumn(false)\n })\n }, [])\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return\n }\n\n document.addEventListener('mousemove', debouncedOnMouseMove)\n\n return () => {\n setShownRow(false)\n setShownColumn(false)\n\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n }\n }, [shouldListenMouseMove, debouncedOnMouseMove])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(\n () => {\n let resetObserver = false\n for (const [key, type] of mutations) {\n switch (type) {\n case 'created': {\n tableSetRef.current.add(key)\n resetObserver = true\n break\n }\n case 'destroyed': {\n tableSetRef.current.delete(key)\n resetObserver = true\n break\n }\n default:\n break\n }\n }\n if (resetObserver) {\n // Reset resize observers\n tableResizeObserver.disconnect()\n for (const tableKey of tableSetRef.current) {\n const { tableElement } = $getTableAndElementByKey(tableKey)\n tableResizeObserver.observe(tableElement)\n }\n setShouldListenMouseMove(tableSetRef.current.size > 0)\n }\n },\n { editor },\n )\n },\n { skipInitialization: false },\n ),\n )\n }, [editor, tableResizeObserver])\n\n const insertAction = (insertRow: boolean) => {\n editor.update(() => {\n if (tableCellDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(tableCellDOMNodeRef.current)\n maybeTableNode?.selectEnd()\n if (insertRow) {\n $insertTableRowAtSelection()\n setShownRow(false)\n } else {\n $insertTableColumnAtSelection()\n setShownColumn(false)\n }\n }\n })\n }\n\n if (!editor?.isEditable()) {\n return null\n }\n\n return (\n <>\n {isShownRow && (\n <button\n aria-label=\"Add Row\"\n className={editorConfig.editorConfig.lexical.theme.tableAddRows}\n onClick={() => insertAction(true)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n {isShownColumn && (\n <button\n aria-label=\"Add Column\"\n className={editorConfig.editorConfig.lexical.theme.tableAddColumns}\n onClick={() => insertAction(false)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n </>\n )\n}\n\nfunction getMouseInfo(\n event: MouseEvent,\n editorConfig: EditorConfig,\n): {\n isOutside: boolean\n tableDOMNode: HTMLElement | null\n} {\n const target = event.target\n\n if (isHTMLElement(target)) {\n const tableDOMNode = target.closest<HTMLElement>(\n `td.${editorConfig.theme.tableCell}, th.${editorConfig.theme.tableCell}`,\n )\n\n const isOutside = !(\n tableDOMNode ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddRows}`) ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddColumns}`) ||\n target.closest<HTMLElement>(`div.${editorConfig.theme.tableCellResizer}`)\n )\n\n return { isOutside, tableDOMNode }\n } else {\n return { isOutside: true, tableDOMNode: null }\n }\n}\n\nexport function TableHoverActionsPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): null | React.ReactPortal {\n const [editor] = useLexicalComposerContext()\n if (!editor?.isEditable()) {\n return null\n }\n\n return createPortal(<TableHoverActionsContainer anchorElem={anchorElem} />, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$getTableAndElementByKey","$getTableColumnIndexFromTableCellNode","$getTableRowIndexFromTableCellNode","$insertTableColumnAtSelection","$insertTableRowAtSelection","$isTableCellNode","$isTableNode","getTableElement","TableNode","$findMatchingParent","mergeRegister","$getNearestNodeFromDOMNode","isHTMLElement","useEffect","useMemo","useRef","useState","React","createPortal","useEditorConfigContext","useDebounce","BUTTON_WIDTH_PX","TableHoverActionsContainer","anchorElem","editor","isEditable","editorConfig","isShownRow","setShownRow","isShownColumn","setShownColumn","shouldListenMouseMove","setShouldListenMouseMove","position","setPosition","tableSetRef","Set","tableCellDOMNodeRef","debouncedOnMouseMove","event","isOutside","tableDOMNode","getMouseInfo","lexical","current","hoveredRowNode","hoveredColumnNode","tableDOMElement","getEditorState","read","maybeTableCell","table","node","getElementByKey","getKey","rowCount","getChildrenSize","colCount","getChildAtIndex","rowIndex","colIndex","tableContainerElement","parentElement","bottom","tableElemBottom","height","tableElemHeight","left","tableElemLeft","right","tableElemRight","width","tableElemWidth","y","tableElemY","getBoundingClientRect","tableHasScroll","classList","contains","scrollWidth","clientWidth","editorElemLeft","editorElemY","offsetLeft","top","offsetWidth","tableResizeObserver","ResizeObserver","document","addEventListener","removeEventListener","registerMutationListener","mutations","resetObserver","key","type","add","delete","disconnect","tableKey","tableElement","observe","size","skipInitialization","insertAction","insertRow","update","maybeTableNode","selectEnd","_jsxs","_Fragment","_jsx","className","theme","tableAddRows","onClick","style","tableAddColumns","target","closest","tableCell","tableCellResizer","TableHoverActionsPlugin","t0","$","t1","undefined","body","t2"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableRowNode } from '@lexical/table'\nimport type { EditorConfig, NodeKey } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $getTableAndElementByKey,\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumnAtSelection,\n $insertTableRowAtSelection,\n $isTableCellNode,\n $isTableNode,\n getTableElement,\n TableNode,\n} from '@lexical/table'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode, isHTMLElement } from 'lexical'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useDebounce } from '../../utils/useDebounce.js'\n\nconst BUTTON_WIDTH_PX = 20\n\nfunction TableHoverActionsContainer({\n anchorElem,\n}: {\n anchorElem: HTMLElement\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n const editorConfig = useEditorConfigContext()\n const [isShownRow, setShownRow] = useState<boolean>(false)\n const [isShownColumn, setShownColumn] = useState<boolean>(false)\n const [shouldListenMouseMove, setShouldListenMouseMove] = useState<boolean>(false)\n const [position, setPosition] = useState({})\n const tableSetRef = useRef<Set<NodeKey>>(new Set())\n const tableCellDOMNodeRef = useRef<HTMLElement | null>(null)\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { isOutside, tableDOMNode } = getMouseInfo(event, editorConfig.editorConfig?.lexical)\n\n if (isOutside) {\n setShownRow(false)\n setShownColumn(false)\n return\n }\n\n if (!tableDOMNode) {\n return\n }\n\n tableCellDOMNodeRef.current = tableDOMNode\n\n let hoveredRowNode: null | TableCellNode = null\n let hoveredColumnNode: null | TableCellNode = null\n let tableDOMElement: HTMLElement | null = null\n\n editor.getEditorState().read(\n () => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode)\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) => $isTableNode(node))\n if (!$isTableNode(table)) {\n return\n }\n\n tableDOMElement = getTableElement(table, editor.getElementByKey(table.getKey()))\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize()\n const colCount = (table.getChildAtIndex(0) as TableRowNode)?.getChildrenSize()\n\n const rowIndex = $getTableRowIndexFromTableCellNode(maybeTableCell)\n const colIndex = $getTableColumnIndexFromTableCellNode(maybeTableCell)\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell\n }\n }\n }\n },\n { editor },\n )\n\n if (!tableDOMElement) {\n return\n }\n\n // this is the scrollable div container of the table (in case of overflow)\n const tableContainerElement = (tableDOMElement as HTMLTableElement).parentElement\n\n if (!tableContainerElement) {\n return\n }\n\n const {\n bottom: tableElemBottom,\n height: tableElemHeight,\n left: tableElemLeft,\n right: tableElemRight,\n width: tableElemWidth,\n y: tableElemY,\n } = (tableDOMElement as HTMLTableElement).getBoundingClientRect()\n\n let tableHasScroll = false\n if (\n tableContainerElement &&\n tableContainerElement.classList.contains('LexicalEditorTheme__tableScrollableWrapper')\n ) {\n tableHasScroll = tableContainerElement.scrollWidth > tableContainerElement.clientWidth\n }\n\n const { left: editorElemLeft, y: editorElemY } = anchorElem.getBoundingClientRect()\n\n if (hoveredRowNode) {\n setShownColumn(false)\n setShownRow(true)\n setPosition({\n height: BUTTON_WIDTH_PX,\n left:\n tableHasScroll && tableContainerElement\n ? tableContainerElement.offsetLeft\n : tableElemLeft - editorElemLeft,\n top: tableElemBottom - editorElemY + 5,\n width:\n tableHasScroll && tableContainerElement\n ? tableContainerElement.offsetWidth\n : tableElemWidth,\n })\n } else if (hoveredColumnNode) {\n setShownColumn(true)\n setShownRow(false)\n setPosition({\n height: tableElemHeight,\n left: tableElemRight - editorElemLeft + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n })\n }\n },\n 50,\n 250,\n )\n\n // Hide the buttons on any table dimensions change to prevent last row cells\n // overlap behind the 'Add Row' button when text entry changes cell height\n const tableResizeObserver = useMemo(() => {\n return new ResizeObserver(() => {\n setShownRow(false)\n setShownColumn(false)\n })\n }, [])\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return\n }\n\n document.addEventListener('mousemove', debouncedOnMouseMove)\n\n return () => {\n setShownRow(false)\n setShownColumn(false)\n\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n }\n }, [shouldListenMouseMove, debouncedOnMouseMove])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(\n () => {\n let resetObserver = false\n for (const [key, type] of mutations) {\n switch (type) {\n case 'created': {\n tableSetRef.current.add(key)\n resetObserver = true\n break\n }\n case 'destroyed': {\n tableSetRef.current.delete(key)\n resetObserver = true\n break\n }\n default:\n break\n }\n }\n if (resetObserver) {\n // Reset resize observers\n tableResizeObserver.disconnect()\n for (const tableKey of tableSetRef.current) {\n const { tableElement } = $getTableAndElementByKey(tableKey)\n tableResizeObserver.observe(tableElement)\n }\n setShouldListenMouseMove(tableSetRef.current.size > 0)\n }\n },\n { editor },\n )\n },\n { skipInitialization: false },\n ),\n )\n }, [editor, tableResizeObserver])\n\n const insertAction = (insertRow: boolean) => {\n editor.update(() => {\n if (tableCellDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(tableCellDOMNodeRef.current)\n maybeTableNode?.selectEnd()\n if (insertRow) {\n $insertTableRowAtSelection()\n setShownRow(false)\n } else {\n $insertTableColumnAtSelection()\n setShownColumn(false)\n }\n }\n })\n }\n\n if (!isEditable) {\n return null\n }\n\n return (\n <>\n {isShownRow && (\n <button\n aria-label=\"Add Row\"\n className={editorConfig.editorConfig.lexical.theme.tableAddRows}\n onClick={() => insertAction(true)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n {isShownColumn && (\n <button\n aria-label=\"Add Column\"\n className={editorConfig.editorConfig.lexical.theme.tableAddColumns}\n onClick={() => insertAction(false)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n </>\n )\n}\n\nfunction getMouseInfo(\n event: MouseEvent,\n editorConfig: EditorConfig,\n): {\n isOutside: boolean\n tableDOMNode: HTMLElement | null\n} {\n const target = event.target\n\n if (isHTMLElement(target)) {\n const tableDOMNode = target.closest<HTMLElement>(\n `td.${editorConfig.theme.tableCell}, th.${editorConfig.theme.tableCell}`,\n )\n\n const isOutside = !(\n tableDOMNode ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddRows}`) ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddColumns}`) ||\n target.closest<HTMLElement>(`div.${editorConfig.theme.tableCellResizer}`)\n )\n\n return { isOutside, tableDOMNode }\n } else {\n return { isOutside: true, tableDOMNode: null }\n }\n}\n\nexport function TableHoverActionsPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): null | React.ReactPortal {\n const isEditable = useLexicalEditable()\n\n if (!isEditable) {\n return null\n }\n\n return createPortal(<TableHoverActionsContainer anchorElem={anchorElem} />, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAqBvE,wBAAgB,UAAU,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,WAAW,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAkYvF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAqBvE,wBAAgB,UAAU,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,WAAW,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAmYvF"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
4
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js';
5
+ import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
5
6
  import { $findMatchingParent, mergeRegister } from '@lexical/utils';
6
7
  import { getTranslation } from '@payloadcms/translations';
7
8
  import { CloseMenuIcon, EditIcon, ExternalLinkIcon, formatDrawerSlug, useConfig, useEditDepth, useLocale, useTranslation } from '@payloadcms/ui';
@@ -35,6 +36,7 @@ export function LinkEditor({
35
36
  },
36
37
  uuid
37
38
  } = useEditorConfigContext();
39
+ const isEditable = useLexicalEditable();
38
40
  const {
39
41
  config,
40
42
  getEntityConfig
@@ -249,7 +251,7 @@ export function LinkEditor({
249
251
  className: "link-input__label-pure",
250
252
  children: linkLabel
251
253
  })]
252
- }) : null, editor.isEditable() && /*#__PURE__*/_jsxs(React.Fragment, {
254
+ }) : null, isEditable && /*#__PURE__*/_jsxs(React.Fragment, {
253
255
  children: [/*#__PURE__*/_jsx("button", {
254
256
  "aria-label": "Edit link",
255
257
  className: "link-edit",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useLexicalComposerContext","$findMatchingParent","mergeRegister","getTranslation","CloseMenuIcon","EditIcon","ExternalLinkIcon","formatDrawerSlug","useConfig","useEditDepth","useLocale","useTranslation","requests","$getSelection","$isLineBreakNode","$isRangeSelection","COMMAND_PRIORITY_HIGH","COMMAND_PRIORITY_LOW","getDOMSelection","KEY_ESCAPE_COMMAND","SELECTION_CHANGE_COMMAND","React","useCallback","useEffect","useRef","useState","useEditorConfigContext","getSelectedNode","setFloatingElemPositionForLinkEditor","FieldsDrawer","useLexicalDrawer","$isAutoLinkNode","$createLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","TOGGLE_LINK_WITH_MODAL_COMMAND","preventDefault","event","LinkEditor","anchorElem","editor","linkNode","setLinkNode","editorRef","linkUrl","setLinkUrl","linkLabel","setLinkLabel","fieldProps","schemaPath","uuid","config","getEntityConfig","i18n","t","stateData","setStateData","editDepth","isLink","setIsLink","selectedNodes","setSelectedNodes","locale","isAutoLink","setIsAutoLink","drawerSlug","slug","depth","toggleDrawer","setNotLink","current","style","opacity","transform","undefined","$updateLinkEditor","selection","selectedNodeDomRect","focusNode","getElementByKey","getKey","getBoundingClientRect","focusLinkParent","badNode","getNodes","filter","node","find","is","fields","getFields","data","id","getID","text","getTextContent","linkType","url","routes","admin","doc","relationTo","value","relatedField","collectionSlug","label","String","collection","Error","loadingLabel","labels","singular","replace","get","serverURL","api","headers","language","params","code","then","res","ok","status","json","useAsTitle","title","catch","editorElem","nativeSelection","_window","activeElement","document","rootElement","getRootElement","contains","anchorNode","getRangeAt","y","className","registerCommand","payload","dispatchCommand","scrollerElem","parentElement","update","getEditorState","read","window","addEventListener","removeEventListener","registerUpdateListener","editorState","_jsxs","Fragment","_jsx","ref","length","href","rel","target","__fields","newTab","_Fragment","isEditable","onClick","onMouseDown","tabIndex","type","drawerTitle","featureKey","handleDrawerSubmit","newLinkPayload","bareLinkFields","linkParent","getParent","schemaPathSuffix"],"sources":["../../../../../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport type { ElementNode, LexicalNode } from 'lexical'\nimport type { Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CloseMenuIcon,\n EditIcon,\n ExternalLinkIcon,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport { requests } from '@payloadcms/ui/shared'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { LinkNode } from '../../../../nodes/LinkNode.js'\nimport type { LinkFields } from '../../../../nodes/types.js'\nimport type { LinkPayload } from '../types.js'\n\nimport { useEditorConfigContext } from '../../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getSelectedNode } from '../../../../../../lexical/utils/getSelectedNode.js'\nimport { setFloatingElemPositionForLinkEditor } from '../../../../../../lexical/utils/setFloatingElemPositionForLinkEditor.js'\nimport { FieldsDrawer } from '../../../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDrawer } from '../../../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isAutoLinkNode } from '../../../../nodes/AutoLinkNode.js'\nimport { $createLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from '../../../../nodes/LinkNode.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './commands.js'\n\nfunction preventDefault(\n event: React.KeyboardEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>,\n): void {\n event.preventDefault()\n}\n\nexport function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n // TO-DO: There are several states that should not be state, because they\n // are derived from linkNode (linkUrl, linkLabel, stateData, isLink, isAutoLink...)\n const [linkNode, setLinkNode] = useState<LinkNode>()\n\n const editorRef = useRef<HTMLDivElement | null>(null)\n const [linkUrl, setLinkUrl] = useState<null | string>(null)\n const [linkLabel, setLinkLabel] = useState<null | string>(null)\n\n const {\n fieldProps: { schemaPath },\n uuid,\n } = useEditorConfigContext()\n\n const { config, getEntityConfig } = useConfig()\n\n const { i18n, t } = useTranslation<object, 'lexical:link:loadingWithEllipsis'>()\n\n const [stateData, setStateData] = useState<\n ({ id?: string; text: string } & LinkFields) | undefined\n >()\n\n const editDepth = useEditDepth()\n const [isLink, setIsLink] = useState(false)\n const [selectedNodes, setSelectedNodes] = useState<LexicalNode[]>([])\n const locale = useLocale()\n\n const [isAutoLink, setIsAutoLink] = useState(false)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-rich-text-link-` + uuid,\n depth: editDepth,\n })\n\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n const setNotLink = useCallback(() => {\n setIsLink(false)\n if (editorRef && editorRef.current) {\n editorRef.current.style.opacity = '0'\n editorRef.current.style.transform = 'translate(-10000px, -10000px)'\n }\n setIsAutoLink(false)\n setLinkUrl(null)\n setLinkLabel(null)\n setSelectedNodes([])\n setStateData(undefined)\n }, [setIsLink, setLinkUrl, setLinkLabel, setSelectedNodes])\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n let selectedNodeDomRect: DOMRect | undefined\n\n if (!$isRangeSelection(selection) || !selection) {\n void setNotLink()\n return\n }\n\n // Handle the data displayed in the floating link editor & drawer when you click on a link node\n\n const focusNode = getSelectedNode(selection)\n selectedNodeDomRect = editor.getElementByKey(focusNode.getKey())?.getBoundingClientRect()\n const focusLinkParent = $findMatchingParent(focusNode, $isLinkNode)\n\n // Prevent link modal from showing if selection spans further than the link: https://github.com/facebook/lexical/issues/4064\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode)\n return (\n (focusLinkParent && !focusLinkParent.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkParent))\n )\n })\n\n if (focusLinkParent == null || badNode) {\n setNotLink()\n return\n }\n setLinkNode(focusLinkParent)\n\n const fields = focusLinkParent.getFields()\n\n // Initial state:\n const data: { text: string } & LinkFields = {\n ...fields,\n id: focusLinkParent.getID(),\n text: focusLinkParent.getTextContent(),\n }\n\n if (fields?.linkType === 'custom') {\n setLinkUrl(fields?.url ?? null)\n setLinkLabel(null)\n } else {\n // internal link\n setLinkUrl(\n `${config.routes.admin === '/' ? '' : config.routes.admin}/collections/${fields?.doc?.relationTo}/${\n fields?.doc?.value\n }`,\n )\n\n const relatedField = fields?.doc?.relationTo\n ? getEntityConfig({ collectionSlug: fields?.doc?.relationTo })\n : undefined\n if (!relatedField) {\n // Usually happens if the user removed all default fields. In this case, we let them specify the label or do not display the label at all.\n // label could be a virtual field the user added. This is useful if they want to use the link feature for things other than links.\n setLinkLabel(fields?.label ? String(fields?.label) : null)\n setLinkUrl(fields?.url ? String(fields?.url) : null)\n } else {\n const id = typeof fields.doc?.value === 'object' ? fields.doc.value.id : fields.doc?.value\n const collection = fields.doc?.relationTo\n if (!id || !collection) {\n throw new Error(`Focus link parent is missing doc.value or doc.relationTo`)\n }\n\n const loadingLabel = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('lexical:link:loadingWithEllipsis', i18n)}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(loadingLabel)\n\n requests\n .get(`${config.serverURL}${config.routes.api}/${collection}/${id}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n params: {\n depth: 0,\n locale: locale?.code,\n },\n })\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(`HTTP error! Status: ${res.status}`)\n }\n const data = await res.json()\n const useAsTitle = relatedField?.admin?.useAsTitle || 'id'\n const title = data[useAsTitle]\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${title}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\n .catch(() => {\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('general:untitled', i18n)} - ID: ${id}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\n }\n }\n\n setStateData(data)\n setIsLink(true)\n setSelectedNodes(selection ? selection?.getNodes() : [])\n\n if ($isAutoLinkNode(focusLinkParent)) {\n setIsAutoLink(true)\n } else {\n setIsAutoLink(false)\n }\n\n const editorElem = editorRef.current\n const nativeSelection = getDOMSelection(editor._window)\n const { activeElement } = document\n\n if (editorElem === null) {\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n if (!selectedNodeDomRect) {\n // Get the DOM rect of the selected node using the native selection. This sometimes produces the wrong\n // result, which is why we use lexical's selection preferably.\n selectedNodeDomRect = nativeSelection.getRangeAt(0).getBoundingClientRect()\n }\n\n if (selectedNodeDomRect != null) {\n selectedNodeDomRect.y += 40\n setFloatingElemPositionForLinkEditor(selectedNodeDomRect, editorElem, anchorElem)\n }\n } else if (activeElement == null || activeElement.className !== 'link-input') {\n if (rootElement !== null) {\n setFloatingElemPositionForLinkEditor(null, editorElem, anchorElem)\n }\n setLinkUrl(null)\n setLinkLabel(null)\n }\n\n return true\n }, [\n editor,\n setNotLink,\n config.routes.admin,\n config.routes.api,\n config.serverURL,\n getEntityConfig,\n t,\n i18n,\n locale?.code,\n anchorElem,\n ])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_WITH_MODAL_COMMAND,\n (payload: LinkPayload) => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, payload)\n\n // Now, open the modal\n $updateLinkEditor()\n toggleDrawer()\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateLinkEditor, toggleDrawer, drawerSlug])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = (): void => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }\n\n window.addEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [anchorElem.parentElement, editor, $updateLinkEditor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n void $updateLinkEditor()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n void $updateLinkEditor()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setNotLink()\n\n return true\n }\n return false\n },\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }, [editor, $updateLinkEditor, isLink, setNotLink])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }, [editor, $updateLinkEditor])\n\n return (\n <React.Fragment>\n <div className=\"link-editor\" ref={editorRef}>\n <div className=\"link-input\">\n {linkUrl && linkUrl.length > 0 ? (\n <a href={linkUrl} rel=\"noopener noreferrer\" target=\"_blank\">\n {linkNode?.__fields.newTab ? <ExternalLinkIcon /> : null}\n {linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl}\n </a>\n ) : linkLabel != null && linkLabel.length > 0 ? (\n <>\n {linkNode?.__fields.newTab ? <ExternalLinkIcon /> : null}\n <span className=\"link-input__label-pure\">{linkLabel}</span>\n </>\n ) : null}\n\n {editor.isEditable() && (\n <React.Fragment>\n <button\n aria-label=\"Edit link\"\n className=\"link-edit\"\n onClick={(event) => {\n event.preventDefault()\n toggleDrawer()\n }}\n onMouseDown={preventDefault}\n tabIndex={0}\n type=\"button\"\n >\n <EditIcon />\n </button>\n {!isAutoLink && (\n <button\n aria-label=\"Remove link\"\n className=\"link-trash\"\n onClick={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }}\n onMouseDown={preventDefault}\n tabIndex={0}\n type=\"button\"\n >\n <CloseMenuIcon />\n </button>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n <FieldsDrawer\n className=\"lexical-link-edit-drawer\"\n data={stateData}\n drawerSlug={drawerSlug}\n drawerTitle={t('fields:editLink')}\n featureKey=\"link\"\n handleDrawerSubmit={(fields: FormState, data: Data) => {\n const newLinkPayload = data as { text: string } & LinkFields\n\n const bareLinkFields: LinkFields = {\n ...newLinkPayload,\n }\n delete bareLinkFields.text\n\n // See: https://github.com/facebook/lexical/pull/5536. This updates autolink nodes to link nodes whenever a change was made (which is good!).\n editor.update(() => {\n const selection = $getSelection()\n let linkParent: ElementNode | null = null\n if ($isRangeSelection(selection)) {\n linkParent = getSelectedNode(selection).getParent()\n } else {\n if (selectedNodes.length) {\n linkParent = selectedNodes[0]?.getParent() ?? null\n }\n }\n\n if (linkParent && $isAutoLinkNode(linkParent)) {\n const linkNode = $createLinkNode({\n fields: bareLinkFields,\n })\n linkParent.replace(linkNode, true)\n }\n })\n\n // Needs to happen AFTER a potential auto link => link node conversion, as otherwise, the updated text to display may be lost due to\n // it being applied to the auto link node instead of the link node.\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: bareLinkFields,\n selectedNodes,\n text: newLinkPayload.text,\n })\n }}\n schemaPath={schemaPath}\n schemaPathSuffix=\"fields\"\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalEditable","$findMatchingParent","mergeRegister","getTranslation","CloseMenuIcon","EditIcon","ExternalLinkIcon","formatDrawerSlug","useConfig","useEditDepth","useLocale","useTranslation","requests","$getSelection","$isLineBreakNode","$isRangeSelection","COMMAND_PRIORITY_HIGH","COMMAND_PRIORITY_LOW","getDOMSelection","KEY_ESCAPE_COMMAND","SELECTION_CHANGE_COMMAND","React","useCallback","useEffect","useRef","useState","useEditorConfigContext","getSelectedNode","setFloatingElemPositionForLinkEditor","FieldsDrawer","useLexicalDrawer","$isAutoLinkNode","$createLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","TOGGLE_LINK_WITH_MODAL_COMMAND","preventDefault","event","LinkEditor","anchorElem","editor","linkNode","setLinkNode","editorRef","linkUrl","setLinkUrl","linkLabel","setLinkLabel","fieldProps","schemaPath","uuid","isEditable","config","getEntityConfig","i18n","t","stateData","setStateData","editDepth","isLink","setIsLink","selectedNodes","setSelectedNodes","locale","isAutoLink","setIsAutoLink","drawerSlug","slug","depth","toggleDrawer","setNotLink","current","style","opacity","transform","undefined","$updateLinkEditor","selection","selectedNodeDomRect","focusNode","getElementByKey","getKey","getBoundingClientRect","focusLinkParent","badNode","getNodes","filter","node","find","is","fields","getFields","data","id","getID","text","getTextContent","linkType","url","routes","admin","doc","relationTo","value","relatedField","collectionSlug","label","String","collection","Error","loadingLabel","labels","singular","replace","get","serverURL","api","headers","language","params","code","then","res","ok","status","json","useAsTitle","title","catch","editorElem","nativeSelection","_window","activeElement","document","rootElement","getRootElement","contains","anchorNode","getRangeAt","y","className","registerCommand","payload","dispatchCommand","scrollerElem","parentElement","update","getEditorState","read","window","addEventListener","removeEventListener","registerUpdateListener","editorState","_jsxs","Fragment","_jsx","ref","length","href","rel","target","__fields","newTab","_Fragment","onClick","onMouseDown","tabIndex","type","drawerTitle","featureKey","handleDrawerSubmit","newLinkPayload","bareLinkFields","linkParent","getParent","schemaPathSuffix"],"sources":["../../../../../../../src/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.tsx"],"sourcesContent":["'use client'\nimport type { ElementNode, LexicalNode } from 'lexical'\nimport type { Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CloseMenuIcon,\n EditIcon,\n ExternalLinkIcon,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport { requests } from '@payloadcms/ui/shared'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { LinkNode } from '../../../../nodes/LinkNode.js'\nimport type { LinkFields } from '../../../../nodes/types.js'\nimport type { LinkPayload } from '../types.js'\n\nimport { useEditorConfigContext } from '../../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getSelectedNode } from '../../../../../../lexical/utils/getSelectedNode.js'\nimport { setFloatingElemPositionForLinkEditor } from '../../../../../../lexical/utils/setFloatingElemPositionForLinkEditor.js'\nimport { FieldsDrawer } from '../../../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDrawer } from '../../../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isAutoLinkNode } from '../../../../nodes/AutoLinkNode.js'\nimport { $createLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from '../../../../nodes/LinkNode.js'\nimport { TOGGLE_LINK_WITH_MODAL_COMMAND } from './commands.js'\n\nfunction preventDefault(\n event: React.KeyboardEvent<HTMLInputElement> | React.MouseEvent<HTMLElement>,\n): void {\n event.preventDefault()\n}\n\nexport function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n // TO-DO: There are several states that should not be state, because they\n // are derived from linkNode (linkUrl, linkLabel, stateData, isLink, isAutoLink...)\n const [linkNode, setLinkNode] = useState<LinkNode>()\n\n const editorRef = useRef<HTMLDivElement | null>(null)\n const [linkUrl, setLinkUrl] = useState<null | string>(null)\n const [linkLabel, setLinkLabel] = useState<null | string>(null)\n\n const {\n fieldProps: { schemaPath },\n uuid,\n } = useEditorConfigContext()\n const isEditable = useLexicalEditable()\n\n const { config, getEntityConfig } = useConfig()\n\n const { i18n, t } = useTranslation<object, 'lexical:link:loadingWithEllipsis'>()\n\n const [stateData, setStateData] = useState<\n ({ id?: string; text: string } & LinkFields) | undefined\n >()\n\n const editDepth = useEditDepth()\n const [isLink, setIsLink] = useState(false)\n const [selectedNodes, setSelectedNodes] = useState<LexicalNode[]>([])\n const locale = useLocale()\n\n const [isAutoLink, setIsAutoLink] = useState(false)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-rich-text-link-` + uuid,\n depth: editDepth,\n })\n\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n const setNotLink = useCallback(() => {\n setIsLink(false)\n if (editorRef && editorRef.current) {\n editorRef.current.style.opacity = '0'\n editorRef.current.style.transform = 'translate(-10000px, -10000px)'\n }\n setIsAutoLink(false)\n setLinkUrl(null)\n setLinkLabel(null)\n setSelectedNodes([])\n setStateData(undefined)\n }, [setIsLink, setLinkUrl, setLinkLabel, setSelectedNodes])\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n let selectedNodeDomRect: DOMRect | undefined\n\n if (!$isRangeSelection(selection) || !selection) {\n void setNotLink()\n return\n }\n\n // Handle the data displayed in the floating link editor & drawer when you click on a link node\n\n const focusNode = getSelectedNode(selection)\n selectedNodeDomRect = editor.getElementByKey(focusNode.getKey())?.getBoundingClientRect()\n const focusLinkParent = $findMatchingParent(focusNode, $isLinkNode)\n\n // Prevent link modal from showing if selection spans further than the link: https://github.com/facebook/lexical/issues/4064\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode)\n return (\n (focusLinkParent && !focusLinkParent.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkParent))\n )\n })\n\n if (focusLinkParent == null || badNode) {\n setNotLink()\n return\n }\n setLinkNode(focusLinkParent)\n\n const fields = focusLinkParent.getFields()\n\n // Initial state:\n const data: { text: string } & LinkFields = {\n ...fields,\n id: focusLinkParent.getID(),\n text: focusLinkParent.getTextContent(),\n }\n\n if (fields?.linkType === 'custom') {\n setLinkUrl(fields?.url ?? null)\n setLinkLabel(null)\n } else {\n // internal link\n setLinkUrl(\n `${config.routes.admin === '/' ? '' : config.routes.admin}/collections/${fields?.doc?.relationTo}/${\n fields?.doc?.value\n }`,\n )\n\n const relatedField = fields?.doc?.relationTo\n ? getEntityConfig({ collectionSlug: fields?.doc?.relationTo })\n : undefined\n if (!relatedField) {\n // Usually happens if the user removed all default fields. In this case, we let them specify the label or do not display the label at all.\n // label could be a virtual field the user added. This is useful if they want to use the link feature for things other than links.\n setLinkLabel(fields?.label ? String(fields?.label) : null)\n setLinkUrl(fields?.url ? String(fields?.url) : null)\n } else {\n const id = typeof fields.doc?.value === 'object' ? fields.doc.value.id : fields.doc?.value\n const collection = fields.doc?.relationTo\n if (!id || !collection) {\n throw new Error(`Focus link parent is missing doc.value or doc.relationTo`)\n }\n\n const loadingLabel = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('lexical:link:loadingWithEllipsis', i18n)}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(loadingLabel)\n\n requests\n .get(`${config.serverURL}${config.routes.api}/${collection}/${id}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n params: {\n depth: 0,\n locale: locale?.code,\n },\n })\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(`HTTP error! Status: ${res.status}`)\n }\n const data = await res.json()\n const useAsTitle = relatedField?.admin?.useAsTitle || 'id'\n const title = data[useAsTitle]\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${title}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\n .catch(() => {\n const label = t('fields:linkedTo', {\n label: `${getTranslation(relatedField.labels.singular, i18n)} - ${t('general:untitled', i18n)} - ID: ${id}`,\n }).replace(/<[^>]*>?/g, '')\n setLinkLabel(label)\n })\n }\n }\n\n setStateData(data)\n setIsLink(true)\n setSelectedNodes(selection ? selection?.getNodes() : [])\n\n if ($isAutoLinkNode(focusLinkParent)) {\n setIsAutoLink(true)\n } else {\n setIsAutoLink(false)\n }\n\n const editorElem = editorRef.current\n const nativeSelection = getDOMSelection(editor._window)\n const { activeElement } = document\n\n if (editorElem === null) {\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n if (!selectedNodeDomRect) {\n // Get the DOM rect of the selected node using the native selection. This sometimes produces the wrong\n // result, which is why we use lexical's selection preferably.\n selectedNodeDomRect = nativeSelection.getRangeAt(0).getBoundingClientRect()\n }\n\n if (selectedNodeDomRect != null) {\n selectedNodeDomRect.y += 40\n setFloatingElemPositionForLinkEditor(selectedNodeDomRect, editorElem, anchorElem)\n }\n } else if (activeElement == null || activeElement.className !== 'link-input') {\n if (rootElement !== null) {\n setFloatingElemPositionForLinkEditor(null, editorElem, anchorElem)\n }\n setLinkUrl(null)\n setLinkLabel(null)\n }\n\n return true\n }, [\n editor,\n setNotLink,\n config.routes.admin,\n config.routes.api,\n config.serverURL,\n getEntityConfig,\n t,\n i18n,\n locale?.code,\n anchorElem,\n ])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n TOGGLE_LINK_WITH_MODAL_COMMAND,\n (payload: LinkPayload) => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, payload)\n\n // Now, open the modal\n $updateLinkEditor()\n toggleDrawer()\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateLinkEditor, toggleDrawer, drawerSlug])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = (): void => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }\n\n window.addEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n\n if (scrollerElem != null) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [anchorElem.parentElement, editor, $updateLinkEditor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n void $updateLinkEditor()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n void $updateLinkEditor()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setNotLink()\n\n return true\n }\n return false\n },\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }, [editor, $updateLinkEditor, isLink, setNotLink])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n void $updateLinkEditor()\n })\n }, [editor, $updateLinkEditor])\n\n return (\n <React.Fragment>\n <div className=\"link-editor\" ref={editorRef}>\n <div className=\"link-input\">\n {linkUrl && linkUrl.length > 0 ? (\n <a href={linkUrl} rel=\"noopener noreferrer\" target=\"_blank\">\n {linkNode?.__fields.newTab ? <ExternalLinkIcon /> : null}\n {linkLabel != null && linkLabel.length > 0 ? linkLabel : linkUrl}\n </a>\n ) : linkLabel != null && linkLabel.length > 0 ? (\n <>\n {linkNode?.__fields.newTab ? <ExternalLinkIcon /> : null}\n <span className=\"link-input__label-pure\">{linkLabel}</span>\n </>\n ) : null}\n\n {isEditable && (\n <React.Fragment>\n <button\n aria-label=\"Edit link\"\n className=\"link-edit\"\n onClick={(event) => {\n event.preventDefault()\n toggleDrawer()\n }}\n onMouseDown={preventDefault}\n tabIndex={0}\n type=\"button\"\n >\n <EditIcon />\n </button>\n {!isAutoLink && (\n <button\n aria-label=\"Remove link\"\n className=\"link-trash\"\n onClick={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }}\n onMouseDown={preventDefault}\n tabIndex={0}\n type=\"button\"\n >\n <CloseMenuIcon />\n </button>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n <FieldsDrawer\n className=\"lexical-link-edit-drawer\"\n data={stateData}\n drawerSlug={drawerSlug}\n drawerTitle={t('fields:editLink')}\n featureKey=\"link\"\n handleDrawerSubmit={(fields: FormState, data: Data) => {\n const newLinkPayload = data as { text: string } & LinkFields\n\n const bareLinkFields: LinkFields = {\n ...newLinkPayload,\n }\n delete bareLinkFields.text\n\n // See: https://github.com/facebook/lexical/pull/5536. This updates autolink nodes to link nodes whenever a change was made (which is good!).\n editor.update(() => {\n const selection = $getSelection()\n let linkParent: ElementNode | null = null\n if ($isRangeSelection(selection)) {\n linkParent = getSelectedNode(selection).getParent()\n } else {\n if (selectedNodes.length) {\n linkParent = selectedNodes[0]?.getParent() ?? null\n }\n }\n\n if (linkParent && $isAutoLinkNode(linkParent)) {\n const linkNode = $createLinkNode({\n fields: bareLinkFields,\n })\n linkParent.replace(linkNode, true)\n }\n })\n\n // Needs to happen AFTER a potential auto link => link node conversion, as otherwise, the updated text to display may be lost due to\n // it being applied to the auto link node instead of the link node.\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, {\n fields: bareLinkFields,\n selectedNodes,\n text: newLinkPayload.text,\n })\n }}\n schemaPath={schemaPath}\n schemaPathSuffix=\"fields\"\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"RelationshipComponent.d.ts","sourceRoot":"","sources":["../../../../../src/features/relationship/client/components/RelationshipComponent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAMhD,OAAO,KAAoD,MAAM,OAAO,CAAA;AAExE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAK9E,OAAO,cAAc,CAAA;AAQrB,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,gBAAgB,CAAA;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAgHD,eAAO,MAAM,qBAAqB,UAAW,KAAK,KAAG,KAAK,CAAC,SAE1D,CAAA"}
1
+ {"version":3,"file":"RelationshipComponent.d.ts","sourceRoot":"","sources":["../../../../../src/features/relationship/client/components/RelationshipComponent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAOhD,OAAO,KAAoD,MAAM,OAAO,CAAA;AAExE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAG9E,OAAO,cAAc,CAAA;AASrB,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,gBAAgB,CAAA;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AA8GD,eAAO,MAAM,qBAAqB,UAAW,KAAK,KAAG,KAAK,CAAC,SAE1D,CAAA"}
@@ -2,11 +2,11 @@
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js';
5
+ import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
5
6
  import { getTranslation } from '@payloadcms/translations';
6
7
  import { Button, useConfig, usePayloadAPI, useTranslation } from '@payloadcms/ui';
7
8
  import { $getNodeByKey } from 'lexical';
8
9
  import React, { useCallback, useReducer, useRef, useState } from 'react';
9
- import { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js';
10
10
  import { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js';
11
11
  import { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from '../drawer/commands.js';
12
12
  const baseClass = 'lexical-relationship';
@@ -26,11 +26,7 @@ const Component = props => {
26
26
  }
27
27
  const relationshipElemRef = useRef(null);
28
28
  const [editor] = useLexicalComposerContext();
29
- const {
30
- fieldProps: {
31
- readOnly
32
- }
33
- } = useEditorConfigContext();
29
+ const isEditable = useLexicalEditable();
34
30
  const {
35
31
  config: {
36
32
  routes: {
@@ -94,12 +90,12 @@ const Component = props => {
94
90
  children: data ? data[relatedCollection?.admin?.useAsTitle || 'id'] : value
95
91
  })
96
92
  })]
97
- }), editor.isEditable() && /*#__PURE__*/_jsxs("div", {
93
+ }), isEditable && /*#__PURE__*/_jsxs("div", {
98
94
  className: `${baseClass}__actions`,
99
95
  children: [/*#__PURE__*/_jsx(Button, {
100
96
  buttonStyle: "icon-label",
101
97
  className: `${baseClass}__swapButton`,
102
- disabled: readOnly,
98
+ disabled: !isEditable,
103
99
  el: "button",
104
100
  icon: "swap",
105
101
  onClick: () => {
@@ -116,7 +112,7 @@ const Component = props => {
116
112
  }), /*#__PURE__*/_jsx(Button, {
117
113
  buttonStyle: "icon-label",
118
114
  className: `${baseClass}__removeButton`,
119
- disabled: readOnly,
115
+ disabled: !isEditable,
120
116
  icon: "x",
121
117
  onClick: e => {
122
118
  e.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"RelationshipComponent.js","names":["useLexicalComposerContext","getTranslation","Button","useConfig","usePayloadAPI","useTranslation","$getNodeByKey","React","useCallback","useReducer","useRef","useState","useEditorConfigContext","useLexicalDocumentDrawer","INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND","baseClass","initialParams","depth","Component","props","data","relationTo","value","nodeKey","Error","relationshipElemRef","editor","fieldProps","readOnly","config","routes","api","serverURL","getEntityConfig","relatedCollection","collectionSlug","i18n","t","cacheBust","dispatchCacheBust","state","setParams","slug","closeDocumentDrawer","DocumentDrawer","DocumentDrawerToggler","id","removeRelationship","update","remove","updateRelationship","_jsxs","className","contentEditable","ref","_jsx","label","labels","singular","admin","useAsTitle","isEditable","buttonStyle","disabled","el","icon","onClick","dispatchCommand","replace","round","tooltip","e","preventDefault","onSave","RelationshipComponent"],"sources":["../../../../../src/features/relationship/client/components/RelationshipComponent.tsx"],"sourcesContent":["'use client'\nimport type { ElementFormatType } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { getTranslation } from '@payloadcms/translations'\nimport { Button, useConfig, usePayloadAPI, useTranslation } from '@payloadcms/ui'\nimport { $getNodeByKey } from 'lexical'\nimport React, { useCallback, useReducer, useRef, useState } from 'react'\n\nimport type { RelationshipData } from '../../server/nodes/RelationshipNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport './index.scss'\n\nconst baseClass = 'lexical-relationship'\n\nconst initialParams = {\n depth: 0,\n}\n\ntype Props = {\n className?: string\n data: RelationshipData\n format?: ElementFormatType\n nodeKey?: string\n}\n\nconst Component: React.FC<Props> = (props) => {\n const {\n data: { relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Relationship value should be a string or number. The Lexical Relationship component should not receive the populated value object.',\n )\n }\n\n const relationshipElemRef = useRef<HTMLDivElement | null>(null)\n\n const [editor] = useLexicalComposerContext()\n const {\n fieldProps: { readOnly },\n } = useEditorConfigContext()\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const [relatedCollection] = useState(() => getEntityConfig({ collectionSlug: relationTo }))\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n const removeRelationship = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey!)?.remove()\n })\n }, [editor, nodeKey])\n\n const updateRelationship = React.useCallback(() => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n closeDocumentDrawer()\n dispatchCacheBust()\n }, [cacheBust, setParams, closeDocumentDrawer])\n\n return (\n <div className={baseClass} contentEditable={false} ref={relationshipElemRef}>\n <div className={`${baseClass}__wrap`}>\n <p className={`${baseClass}__label`}>\n {t('fields:labelRelationship', {\n label: relatedCollection.labels?.singular\n ? getTranslation(relatedCollection.labels?.singular, i18n)\n : relatedCollection.slug,\n })}\n </p>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <p className={`${baseClass}__title`}>\n {data ? data[relatedCollection?.admin?.useAsTitle || 'id'] : value}\n </p>\n </DocumentDrawerToggler>\n </div>\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__swapButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n if (nodeKey) {\n editor.dispatchCommand(INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }\n }}\n round\n tooltip={t('fields:swapRelationship')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeRelationship()\n }}\n round\n tooltip={t('fields:removeRelationship')}\n />\n </div>\n )}\n\n {!!value && <DocumentDrawer onSave={updateRelationship} />}\n </div>\n )\n}\n\nexport const RelationshipComponent = (props: Props): React.ReactNode => {\n return <Component {...props} />\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,yBAAyB,QAAQ;AAC1C,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,EAAEC,SAAS,EAAEC,aAAa,EAAEC,cAAc,QAAQ;AACjE,SAASC,aAAa,QAAQ;AAC9B,OAAOC,KAAA,IAASC,WAAW,EAAEC,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAIjE,SAASC,sBAAsB,QAAQ;AACvC,SAASC,wBAAwB,QAAQ;AACzC,SAASC,uCAAuC,QAAQ;AAGxD,MAAMC,SAAA,GAAY;AAElB,MAAMC,aAAA,GAAgB;EACpBC,KAAA,EAAO;AACT;AASA,MAAMC,SAAA,GAA8BC,KAAA;EAClC,MAAM;IACJC,IAAA,EAAM;MAAEC,UAAU;MAAEC;IAAK,CAAE;IAC3BC;EAAO,CACR,GAAGJ,KAAA;EAEJ,IAAI,OAAOG,KAAA,KAAU,UAAU;IAC7B,MAAM,IAAIE,KAAA,CACR;EAEJ;EAEA,MAAMC,mBAAA,GAAsBf,MAAA,CAA8B;EAE1D,MAAM,CAACgB,MAAA,CAAO,GAAG1B,yBAAA;EACjB,MAAM;IACJ2B,UAAA,EAAY;MAAEC;IAAQ;EAAE,CACzB,GAAGhB,sBAAA;EACJ,MAAM;IACJiB,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS,CACV;IACDC;EAAe,CAChB,GAAG9B,SAAA;EAEJ,MAAM,CAAC+B,iBAAA,CAAkB,GAAGvB,QAAA,CAAS,MAAMsB,eAAA,CAAgB;IAAEE,cAAA,EAAgBd;EAAW;EAExF,MAAM;IAAEe,IAAI;IAAEC;EAAC,CAAE,GAAGhC,cAAA;EACpB,MAAM,CAACiC,SAAA,EAAWC,iBAAA,CAAkB,GAAG9B,UAAA,CAAY+B,KAAA,IAAUA,KAAA,GAAQ,GAAG;EACxE,MAAM,CAAC;IAAEpB;EAAI,CAAE,EAAE;IAAEqB;EAAS,CAAE,CAAC,GAAGrC,aAAA,CAChC,GAAG4B,SAAA,GAAYD,GAAA,IAAOG,iBAAA,CAAkBQ,IAAI,IAAIpB,KAAA,EAAO,EACvD;IAAEN;EAAc;EAGlB,MAAM;IAAE2B,mBAAmB;IAAEC,cAAc;IAAEC;EAAqB,CAAE,GAAGhC,wBAAA,CAAyB;IAC9FiC,EAAA,EAAIxB,KAAA;IACJa,cAAA,EAAgBD,iBAAA,CAAkBQ;EACpC;EAEA,MAAMK,kBAAA,GAAqBvC,WAAA,CAAY;IACrCkB,MAAA,CAAOsB,MAAM,CAAC;MACZ1C,aAAA,CAAciB,OAAA,GAAW0B,MAAA;IAC3B;EACF,GAAG,CAACvB,MAAA,EAAQH,OAAA,CAAQ;EAEpB,MAAM2B,kBAAA,GAAqB3C,KAAA,CAAMC,WAAW,CAAC;IAC3CiC,SAAA,CAAU;MACR,GAAGzB,aAAa;MAChBsB;IACF;IAEAK,mBAAA;IACAJ,iBAAA;EACF,GAAG,CAACD,SAAA,EAAWG,SAAA,EAAWE,mBAAA,CAAoB;EAE9C,oBACEQ,KAAA,CAAC;IAAIC,SAAA,EAAWrC,SAAA;IAAWsC,eAAA,EAAiB;IAAOC,GAAA,EAAK7B,mBAAA;4BACtD0B,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGrC,SAAA,QAAiB;8BAClCwC,IAAA,CAAC;QAAEH,SAAA,EAAW,GAAGrC,SAAA,SAAkB;kBAChCsB,CAAA,CAAE,4BAA4B;UAC7BmB,KAAA,EAAOtB,iBAAA,CAAkBuB,MAAM,EAAEC,QAAA,GAC7BzD,cAAA,CAAeiC,iBAAA,CAAkBuB,MAAM,EAAEC,QAAA,EAAUtB,IAAA,IACnDF,iBAAA,CAAkBQ;QACxB;uBAEFa,IAAA,CAACV,qBAAA;QAAsBO,SAAA,EAAW,GAAGrC,SAAA,sBAA+B;kBAClE,aAAAwC,IAAA,CAAC;UAAEH,SAAA,EAAW,GAAGrC,SAAA,SAAkB;oBAChCK,IAAA,GAAOA,IAAI,CAACc,iBAAA,EAAmByB,KAAA,EAAOC,UAAA,IAAc,KAAK,GAAGtC;;;QAIlEI,MAAA,CAAOmC,UAAU,mBAChBV,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGrC,SAAA,WAAoB;8BACrCwC,IAAA,CAACrD,MAAA;QACC4D,WAAA,EAAY;QACZV,SAAA,EAAW,GAAGrC,SAAA,cAAuB;QACrCgD,QAAA,EAAUnC,QAAA;QACVoC,EAAA,EAAG;QACHC,IAAA,EAAK;QACLC,OAAA,EAASA,CAAA;UACP,IAAI3C,OAAA,EAAS;YACXG,MAAA,CAAOyC,eAAe,CAACrD,uCAAA,EAAyC;cAC9DsD,OAAA,EAAS;gBAAE7C;cAAQ;YACrB;UACF;QACF;QACA8C,KAAK;QACLC,OAAA,EAASjC,CAAA,CAAE;uBAEbkB,IAAA,CAACrD,MAAA;QACC4D,WAAA,EAAY;QACZV,SAAA,EAAW,GAAGrC,SAAA,gBAAyB;QACvCgD,QAAA,EAAUnC,QAAA;QACVqC,IAAA,EAAK;QACLC,OAAA,EAAUK,CAAA;UACRA,CAAA,CAAEC,cAAc;UAChBzB,kBAAA;QACF;QACAsB,KAAK;QACLC,OAAA,EAASjC,CAAA,CAAE;;QAKhB,CAAC,CAACf,KAAA,iBAASiC,IAAA,CAACX,cAAA;MAAe6B,MAAA,EAAQvB;;;AAG1C;AAEA,OAAO,MAAMwB,qBAAA,GAAyBvD,KAAA;EACpC,oBAAOoC,IAAA,CAACrC,SAAA;IAAW,GAAGC;;AACxB","ignoreList":[]}
1
+ {"version":3,"file":"RelationshipComponent.js","names":["useLexicalComposerContext","useLexicalEditable","getTranslation","Button","useConfig","usePayloadAPI","useTranslation","$getNodeByKey","React","useCallback","useReducer","useRef","useState","useLexicalDocumentDrawer","INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND","baseClass","initialParams","depth","Component","props","data","relationTo","value","nodeKey","Error","relationshipElemRef","editor","isEditable","config","routes","api","serverURL","getEntityConfig","relatedCollection","collectionSlug","i18n","t","cacheBust","dispatchCacheBust","state","setParams","slug","closeDocumentDrawer","DocumentDrawer","DocumentDrawerToggler","id","removeRelationship","update","remove","updateRelationship","_jsxs","className","contentEditable","ref","_jsx","label","labels","singular","admin","useAsTitle","buttonStyle","disabled","el","icon","onClick","dispatchCommand","replace","round","tooltip","e","preventDefault","onSave","RelationshipComponent"],"sources":["../../../../../src/features/relationship/client/components/RelationshipComponent.tsx"],"sourcesContent":["'use client'\nimport type { ElementFormatType } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport { Button, useConfig, usePayloadAPI, useTranslation } from '@payloadcms/ui'\nimport { $getNodeByKey } from 'lexical'\nimport React, { useCallback, useReducer, useRef, useState } from 'react'\n\nimport type { RelationshipData } from '../../server/nodes/RelationshipNode.js'\n\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport './index.scss'\nimport { INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\n\nconst baseClass = 'lexical-relationship'\n\nconst initialParams = {\n depth: 0,\n}\n\ntype Props = {\n className?: string\n data: RelationshipData\n format?: ElementFormatType\n nodeKey?: string\n}\n\nconst Component: React.FC<Props> = (props) => {\n const {\n data: { relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Relationship value should be a string or number. The Lexical Relationship component should not receive the populated value object.',\n )\n }\n\n const relationshipElemRef = useRef<HTMLDivElement | null>(null)\n\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const [relatedCollection] = useState(() => getEntityConfig({ collectionSlug: relationTo }))\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n const removeRelationship = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey!)?.remove()\n })\n }, [editor, nodeKey])\n\n const updateRelationship = React.useCallback(() => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n closeDocumentDrawer()\n dispatchCacheBust()\n }, [cacheBust, setParams, closeDocumentDrawer])\n\n return (\n <div className={baseClass} contentEditable={false} ref={relationshipElemRef}>\n <div className={`${baseClass}__wrap`}>\n <p className={`${baseClass}__label`}>\n {t('fields:labelRelationship', {\n label: relatedCollection.labels?.singular\n ? getTranslation(relatedCollection.labels?.singular, i18n)\n : relatedCollection.slug,\n })}\n </p>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <p className={`${baseClass}__title`}>\n {data ? data[relatedCollection?.admin?.useAsTitle || 'id'] : value}\n </p>\n </DocumentDrawerToggler>\n </div>\n {isEditable && (\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__swapButton`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n if (nodeKey) {\n editor.dispatchCommand(INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }\n }}\n round\n tooltip={t('fields:swapRelationship')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={!isEditable}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeRelationship()\n }}\n round\n tooltip={t('fields:removeRelationship')}\n />\n </div>\n )}\n\n {!!value && <DocumentDrawer onSave={updateRelationship} />}\n </div>\n )\n}\n\nexport const RelationshipComponent = (props: Props): React.ReactNode => {\n return <Component {...props} />\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,yBAAyB,QAAQ;AAC1C,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,EAAEC,SAAS,EAAEC,aAAa,EAAEC,cAAc,QAAQ;AACjE,SAASC,aAAa,QAAQ;AAC9B,OAAOC,KAAA,IAASC,WAAW,EAAEC,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAIjE,SAASC,wBAAwB,QAAQ;AAEzC,SAASC,uCAAuC,QAAQ;AAExD,MAAMC,SAAA,GAAY;AAElB,MAAMC,aAAA,GAAgB;EACpBC,KAAA,EAAO;AACT;AASA,MAAMC,SAAA,GAA8BC,KAAA;EAClC,MAAM;IACJC,IAAA,EAAM;MAAEC,UAAU;MAAEC;IAAK,CAAE;IAC3BC;EAAO,CACR,GAAGJ,KAAA;EAEJ,IAAI,OAAOG,KAAA,KAAU,UAAU;IAC7B,MAAM,IAAIE,KAAA,CACR;EAEJ;EAEA,MAAMC,mBAAA,GAAsBd,MAAA,CAA8B;EAE1D,MAAM,CAACe,MAAA,CAAO,GAAG1B,yBAAA;EACjB,MAAM2B,UAAA,GAAa1B,kBAAA;EACnB,MAAM;IACJ2B,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS,CACV;IACDC;EAAe,CAChB,GAAG5B,SAAA;EAEJ,MAAM,CAAC6B,iBAAA,CAAkB,GAAGrB,QAAA,CAAS,MAAMoB,eAAA,CAAgB;IAAEE,cAAA,EAAgBb;EAAW;EAExF,MAAM;IAAEc,IAAI;IAAEC;EAAC,CAAE,GAAG9B,cAAA;EACpB,MAAM,CAAC+B,SAAA,EAAWC,iBAAA,CAAkB,GAAG5B,UAAA,CAAY6B,KAAA,IAAUA,KAAA,GAAQ,GAAG;EACxE,MAAM,CAAC;IAAEnB;EAAI,CAAE,EAAE;IAAEoB;EAAS,CAAE,CAAC,GAAGnC,aAAA,CAChC,GAAG0B,SAAA,GAAYD,GAAA,IAAOG,iBAAA,CAAkBQ,IAAI,IAAInB,KAAA,EAAO,EACvD;IAAEN;EAAc;EAGlB,MAAM;IAAE0B,mBAAmB;IAAEC,cAAc;IAAEC;EAAqB,CAAE,GAAG/B,wBAAA,CAAyB;IAC9FgC,EAAA,EAAIvB,KAAA;IACJY,cAAA,EAAgBD,iBAAA,CAAkBQ;EACpC;EAEA,MAAMK,kBAAA,GAAqBrC,WAAA,CAAY;IACrCiB,MAAA,CAAOqB,MAAM,CAAC;MACZxC,aAAA,CAAcgB,OAAA,GAAWyB,MAAA;IAC3B;EACF,GAAG,CAACtB,MAAA,EAAQH,OAAA,CAAQ;EAEpB,MAAM0B,kBAAA,GAAqBzC,KAAA,CAAMC,WAAW,CAAC;IAC3C+B,SAAA,CAAU;MACR,GAAGxB,aAAa;MAChBqB;IACF;IAEAK,mBAAA;IACAJ,iBAAA;EACF,GAAG,CAACD,SAAA,EAAWG,SAAA,EAAWE,mBAAA,CAAoB;EAE9C,oBACEQ,KAAA,CAAC;IAAIC,SAAA,EAAWpC,SAAA;IAAWqC,eAAA,EAAiB;IAAOC,GAAA,EAAK5B,mBAAA;4BACtDyB,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGpC,SAAA,QAAiB;8BAClCuC,IAAA,CAAC;QAAEH,SAAA,EAAW,GAAGpC,SAAA,SAAkB;kBAChCqB,CAAA,CAAE,4BAA4B;UAC7BmB,KAAA,EAAOtB,iBAAA,CAAkBuB,MAAM,EAAEC,QAAA,GAC7BvD,cAAA,CAAe+B,iBAAA,CAAkBuB,MAAM,EAAEC,QAAA,EAAUtB,IAAA,IACnDF,iBAAA,CAAkBQ;QACxB;uBAEFa,IAAA,CAACV,qBAAA;QAAsBO,SAAA,EAAW,GAAGpC,SAAA,sBAA+B;kBAClE,aAAAuC,IAAA,CAAC;UAAEH,SAAA,EAAW,GAAGpC,SAAA,SAAkB;oBAChCK,IAAA,GAAOA,IAAI,CAACa,iBAAA,EAAmByB,KAAA,EAAOC,UAAA,IAAc,KAAK,GAAGrC;;;QAIlEK,UAAA,iBACCuB,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGpC,SAAA,WAAoB;8BACrCuC,IAAA,CAACnD,MAAA;QACCyD,WAAA,EAAY;QACZT,SAAA,EAAW,GAAGpC,SAAA,cAAuB;QACrC8C,QAAA,EAAU,CAAClC,UAAA;QACXmC,EAAA,EAAG;QACHC,IAAA,EAAK;QACLC,OAAA,EAASA,CAAA;UACP,IAAIzC,OAAA,EAAS;YACXG,MAAA,CAAOuC,eAAe,CAACnD,uCAAA,EAAyC;cAC9DoD,OAAA,EAAS;gBAAE3C;cAAQ;YACrB;UACF;QACF;QACA4C,KAAK;QACLC,OAAA,EAAShC,CAAA,CAAE;uBAEbkB,IAAA,CAACnD,MAAA;QACCyD,WAAA,EAAY;QACZT,SAAA,EAAW,GAAGpC,SAAA,gBAAyB;QACvC8C,QAAA,EAAU,CAAClC,UAAA;QACXoC,IAAA,EAAK;QACLC,OAAA,EAAUK,CAAA;UACRA,CAAA,CAAEC,cAAc;UAChBxB,kBAAA;QACF;QACAqB,KAAK;QACLC,OAAA,EAAShC,CAAA,CAAE;;QAKhB,CAAC,CAACd,KAAA,iBAASgC,IAAA,CAACX,cAAA;MAAe4B,MAAA,EAAQtB;;;AAG1C;AAEA,OAAO,MAAMuB,qBAAA,GAAyBrD,KAAA;EACpC,oBAAOmC,IAAA,CAACpC,SAAA;IAAW,GAAGC;;AACxB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/toolbars/fixed/client/Toolbar/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAKrE,OAAO,cAAc,CAAA;AAoQrB,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAAC,wBAAwB,CAkCxE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/toolbars/fixed/client/Toolbar/index.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAIrE,OAAO,cAAc,CAAA;AAuQrB,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAAC,wBAAwB,CAsCxE,CAAA"}
@@ -3,6 +3,7 @@
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js';
6
+ import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
6
7
  import { useScrollInfo, useThrottledEffect, useTranslation } from '@payloadcms/ui';
7
8
  import * as React from 'react';
8
9
  import { useMemo } from 'react';
@@ -183,6 +184,7 @@ function FixedToolbar({
183
184
  parentWithFixedToolbar
184
185
  }) {
185
186
  const currentToolbarRef = React.useRef(null);
187
+ const isEditable = useLexicalEditable();
186
188
  const {
187
189
  y
188
190
  } = useScrollInfo();
@@ -237,7 +239,7 @@ function FixedToolbar({
237
239
  event.stopPropagation();
238
240
  },
239
241
  ref: currentToolbarRef,
240
- children: editor.isEditable() && /*#__PURE__*/_jsx(React.Fragment, {
242
+ children: isEditable && /*#__PURE__*/_jsx(React.Fragment, {
241
243
  children: editorConfig?.features && editorConfig.features?.toolbarFixed?.groups.map((group, i) => {
242
244
  return /*#__PURE__*/_jsx(ToolbarGroupComponent, {
243
245
  anchorElem: anchorElem,
@@ -269,6 +271,10 @@ export const FixedToolbarPlugin = t0 => {
269
271
  } = t0;
270
272
  const [currentEditor] = useLexicalComposerContext();
271
273
  const editorConfigContext = useEditorConfigContext();
274
+ const isEditable = useLexicalEditable();
275
+ if (!isEditable) {
276
+ return null;
277
+ }
272
278
  const {
273
279
  editorConfig: currentEditorConfig
274
280
  } = editorConfigContext;