@trycourier/react-designer 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +70 -0
  2. package/dist/cjs/index.js +66 -59
  3. package/dist/cjs/index.js.map +4 -4
  4. package/dist/cjs/styles.css +105 -36
  5. package/dist/components/Providers/TemplateProvider.d.ts +2 -0
  6. package/dist/components/TemplateEditor/Channels/Email/EmailEditor.d.ts +3 -1
  7. package/dist/components/TemplateEditor/Channels/Inbox/InboxEditor.d.ts +3 -1
  8. package/dist/components/TemplateEditor/Channels/MSTeams/MSTeams.d.ts +6 -1
  9. package/dist/components/TemplateEditor/Channels/MSTeams/MSTeamsEditor.d.ts +3 -1
  10. package/dist/components/TemplateEditor/Channels/MSTeams/SideBar/MSTeamsSideBarItemDetails.d.ts +8 -0
  11. package/dist/components/TemplateEditor/Channels/MSTeams/SideBar/index.d.ts +1 -0
  12. package/dist/components/TemplateEditor/Channels/MSTeams/index.d.ts +1 -1
  13. package/dist/components/TemplateEditor/Channels/Push/PushEditor.d.ts +3 -1
  14. package/dist/components/TemplateEditor/Channels/SMS/SMSEditor.d.ts +3 -1
  15. package/dist/components/TemplateEditor/Channels/Slack/Slack.d.ts +6 -1
  16. package/dist/components/TemplateEditor/Channels/Slack/SlackEditor.d.ts +3 -1
  17. package/dist/components/TemplateEditor/VariableViewModeSync.d.ts +24 -0
  18. package/dist/components/TemplateEditor/index.d.ts +1 -1
  19. package/dist/components/TemplateEditor/store.d.ts +16 -1
  20. package/dist/components/extensions/Button/Button.d.ts +0 -3
  21. package/dist/components/extensions/Button/ButtonComponent.d.ts +2 -3
  22. package/dist/components/extensions/Button/buttonUtils.d.ts +13 -0
  23. package/dist/components/extensions/HardBreak/HardBreak.d.ts +12 -0
  24. package/dist/components/extensions/HardBreak/index.d.ts +1 -0
  25. package/dist/components/extensions/List/List.d.ts +0 -1
  26. package/dist/components/extensions/List/List.types.d.ts +0 -10
  27. package/dist/components/extensions/List/ListForm.d.ts +6 -1
  28. package/dist/components/extensions/Variable/index.d.ts +2 -0
  29. package/dist/components/extensions/Variable/variable-storage.types.d.ts +26 -0
  30. package/dist/components/extensions/Variable/variable-storage.utils.d.ts +72 -0
  31. package/dist/components/extensions/extension-kit.d.ts +17 -0
  32. package/dist/components/extensions/index.d.ts +1 -1
  33. package/dist/components/ui/TextMenu/hooks/useTextmenuCommands.d.ts +0 -1
  34. package/dist/components/ui-kit/Button/Button.d.ts +1 -1
  35. package/dist/components/ui-kit/Toggle/Toggle.d.ts +2 -2
  36. package/dist/components/ui-kit/ToggleGroup/ToggleGroup.d.ts +2 -2
  37. package/dist/components/utils/shadowDomDndFix.d.ts +47 -0
  38. package/dist/esm/index.js +66 -59
  39. package/dist/esm/index.js.map +4 -4
  40. package/dist/esm/styles.css +105 -36
  41. package/dist/hooks/useAutoSave.d.ts +1 -0
  42. package/dist/index.d.ts +1 -0
  43. package/dist/lib/testHelpers.d.ts +21 -1
  44. package/dist/lib/utils/convertElementalToTiptap/convertElementalToTiptap.d.ts +6 -1
  45. package/dist/lib/utils/getTitle/index.d.ts +1 -1
  46. package/dist/lib/utils/getTitle/preserveStorageFormat.d.ts +7 -0
  47. package/dist/styles.css +105 -36
  48. package/dist/types/elemental.types.d.ts +0 -4
  49. package/package.json +6 -1
package/README.md CHANGED
@@ -859,6 +859,76 @@ The Brand Provider component is responsible for managing brand-related state and
859
859
  | tenantId | string | Yes | The unique identifier for the tenant whose brand settings are being edited. |
860
860
  | token | string | Yes | Authentication token (JWT or ClientKey) used to authorize brand-related API requests. |
861
861
 
862
+ ## Shadow DOM Usage
863
+
864
+ If you render the Courier Editor inside a [Shadow DOM](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM) (e.g., for style isolation), drag-and-drop functionality will not work out of the box. This is a known incompatibility with the underlying [pragmatic-drag-and-drop](https://github.com/atlassian/pragmatic-drag-and-drop) library, which relies on `event.target` to identify dragged elements. Shadow DOM re-targets events to the shadow host, breaking this detection.
865
+
866
+ We provide a utility function `applyShadowDomDndFix` that patches event handling to restore drag-and-drop support inside a Shadow DOM.
867
+
868
+ ### Setup
869
+
870
+ Call `applyShadowDomDndFix(shadowRoot)` **after** creating the shadow root but **before** rendering the editor. Store the returned cleanup function and call it when unmounting.
871
+
872
+ ```tsx
873
+ import { useEffect, useRef } from "react";
874
+ import { createRoot } from "react-dom/client";
875
+ import {
876
+ TemplateEditor,
877
+ TemplateProvider,
878
+ applyShadowDomDndFix,
879
+ } from "@trycourier/react-designer";
880
+ import "@trycourier/react-designer/styles.css";
881
+
882
+ function EditorInShadowDom() {
883
+ const containerRef = useRef<HTMLDivElement>(null);
884
+
885
+ useEffect(() => {
886
+ const container = containerRef.current;
887
+ if (!container) return;
888
+
889
+ // 1. Create Shadow DOM
890
+ const shadowRoot = container.attachShadow({ mode: "open" });
891
+
892
+ // 2. Apply DnD fix BEFORE rendering the editor
893
+ const cleanupDndFix = applyShadowDomDndFix(shadowRoot);
894
+
895
+ // 3. Inject styles into shadow root
896
+ const link = document.createElement("link");
897
+ link.rel = "stylesheet";
898
+ link.href = "/path/to/react-designer/styles.css";
899
+ shadowRoot.appendChild(link);
900
+
901
+ // 4. Render the editor
902
+ const mountPoint = document.createElement("div");
903
+ shadowRoot.appendChild(mountPoint);
904
+
905
+ const root = createRoot(mountPoint);
906
+ root.render(
907
+ <TemplateProvider
908
+ templateId="my-template"
909
+ tenantId="my-tenant"
910
+ token="my-token"
911
+ >
912
+ <TemplateEditor />
913
+ </TemplateProvider>
914
+ );
915
+
916
+ // 5. Cleanup on unmount
917
+ return () => {
918
+ cleanupDndFix();
919
+ root.unmount();
920
+ };
921
+ }, []);
922
+
923
+ return <div ref={containerRef} />;
924
+ }
925
+ ```
926
+
927
+ ### Known Limitations
928
+
929
+ - **Drag handles are disabled in Shadow DOM.** In a normal DOM context, blocks can only be dragged by the grip icon on the left. Inside a Shadow DOM, blocks become draggable from anywhere on the element. This is because pragmatic-drag-and-drop's internal handle validation is not compatible with Shadow DOM event re-targeting.
930
+ - **Global patch.** The fix monkey-patches `Event.prototype.target` while active. Always call the cleanup function when unmounting to restore normal behavior.
931
+
862
932
  # Limitations
863
933
 
864
934
  **React Only**