@trycourier/react-designer 0.0.0-canary-20250714142320 → 0.0.0-canary-20250820153811

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 +21 -20
  2. package/dist/cjs/index.css +1 -1
  3. package/dist/cjs/index.css.map +2 -2
  4. package/dist/cjs/index.js +38 -40
  5. package/dist/cjs/index.js.map +4 -4
  6. package/dist/cjs/styles.css +83 -10
  7. package/dist/components/Providers/BrandProvider.d.ts +0 -12
  8. package/dist/components/Providers/TemplateProvider.d.ts +7 -12
  9. package/dist/components/Providers/api/common.d.ts +1 -1
  10. package/dist/components/Providers/api/template.d.ts +1 -1
  11. package/dist/components/Providers/index.d.ts +4 -2
  12. package/dist/components/Providers/store.d.ts +15 -5
  13. package/dist/components/Providers/useBrandActions.d.ts +13 -0
  14. package/dist/components/Providers/useTemplateActions.d.ts +19 -0
  15. package/dist/components/TemplateEditor/Channels/Email/Email.d.ts +3 -3
  16. package/dist/components/TemplateEditor/Channels/Email/EmailEditor.d.ts +1 -1
  17. package/dist/components/TemplateEditor/Channels/Email/index.d.ts +1 -0
  18. package/dist/components/TemplateEditor/Channels/Inbox/Inbox.d.ts +1 -1
  19. package/dist/components/TemplateEditor/Channels/Push/Push.d.ts +1 -1
  20. package/dist/components/TemplateEditor/Channels/Push/PushEditor.d.ts +1 -2
  21. package/dist/components/TemplateEditor/Channels/SMS/SMS.d.ts +1 -1
  22. package/dist/components/TemplateEditor/Channels/useChannels.d.ts +1 -0
  23. package/dist/components/TemplateEditor/Layout/Layout.d.ts +1 -0
  24. package/dist/components/TemplateEditor/TemplateEditor.d.ts +1 -1
  25. package/dist/components/TemplateEditor/index.d.ts +3 -1
  26. package/dist/components/extensions/FixedChannelPaste/FixedChannelPaste.d.ts +11 -0
  27. package/dist/components/extensions/FixedChannelPaste/FixedChannelPaste.test.d.ts +1 -0
  28. package/dist/components/extensions/FixedChannelPaste/index.d.ts +2 -0
  29. package/dist/components/extensions/FixedChannelSelection/FixedChannelSelection.d.ts +14 -0
  30. package/dist/components/extensions/FixedChannelSelection/FixedChannelSelection.test.d.ts +1 -0
  31. package/dist/components/extensions/FixedChannelSelection/index.d.ts +1 -0
  32. package/dist/components/extensions/Variable/VariablePaste.d.ts +2 -0
  33. package/dist/components/extensions/Variable/VariablePaste.test.d.ts +1 -0
  34. package/dist/components/extensions/Variable/index.d.ts +1 -0
  35. package/dist/components/extensions/extension-kit.d.ts +1 -1
  36. package/dist/components/extensions/index.d.ts +3 -1
  37. package/dist/components/ui/PreviewPanel/PreviewPanel.d.ts +3 -2
  38. package/dist/components/ui/Status/Status.d.ts +4 -1
  39. package/dist/components/ui-kit/AlertDialog/AlertDialog.d.ts +20 -0
  40. package/dist/components/ui-kit/AlertDialog/index.d.ts +1 -0
  41. package/dist/components/ui-kit/Button/Button.d.ts +1 -2
  42. package/dist/components/ui-kit/index.d.ts +1 -0
  43. package/dist/esm/index.css +1 -1
  44. package/dist/esm/index.css.map +2 -2
  45. package/dist/esm/index.js +38 -40
  46. package/dist/esm/index.js.map +4 -4
  47. package/dist/esm/styles.css +83 -10
  48. package/dist/styles.css +83 -10
  49. package/package.json +3 -2
@@ -884,6 +884,9 @@ body {
884
884
  .courier-invisible {
885
885
  visibility: hidden;
886
886
  }
887
+ .courier-fixed {
888
+ position: fixed;
889
+ }
887
890
  .courier-absolute {
888
891
  position: absolute;
889
892
  }
@@ -917,6 +920,9 @@ body {
917
920
  .courier-left-\[-20px\] {
918
921
  left: -20px;
919
922
  }
923
+ .courier-left-\[50\%\] {
924
+ left: 50%;
925
+ }
920
926
  .courier-right-0 {
921
927
  right: 0px;
922
928
  }
@@ -959,6 +965,9 @@ body {
959
965
  .courier-top-\[245px\] {
960
966
  top: 245px;
961
967
  }
968
+ .courier-top-\[50\%\] {
969
+ top: 50%;
970
+ }
962
971
  .courier-z-0 {
963
972
  z-index: 0;
964
973
  }
@@ -1318,6 +1327,9 @@ body {
1318
1327
  .courier-max-w-4xl {
1319
1328
  max-width: 56rem;
1320
1329
  }
1330
+ .courier-max-w-lg {
1331
+ max-width: 32rem;
1332
+ }
1321
1333
  .courier-flex-1 {
1322
1334
  flex: 1 1 0%;
1323
1335
  }
@@ -1406,6 +1418,9 @@ body {
1406
1418
  .courier-flex-col {
1407
1419
  flex-direction: column;
1408
1420
  }
1421
+ .courier-flex-col-reverse {
1422
+ flex-direction: column-reverse;
1423
+ }
1409
1424
  .courier-flex-wrap {
1410
1425
  flex-wrap: wrap;
1411
1426
  }
@@ -1654,6 +1669,9 @@ body {
1654
1669
  --tw-bg-opacity: 1;
1655
1670
  background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
1656
1671
  }
1672
+ .courier-bg-\[\#0a0a0a52\] {
1673
+ background-color: #0a0a0a52;
1674
+ }
1657
1675
  .courier-bg-\[\#3B82F6\] {
1658
1676
  --tw-bg-opacity: 1;
1659
1677
  background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));
@@ -2172,6 +2190,9 @@ body {
2172
2190
  .courier-duration-100 {
2173
2191
  transition-duration: 100ms;
2174
2192
  }
2193
+ .courier-duration-200 {
2194
+ transition-duration: 200ms;
2195
+ }
2175
2196
  .courier-duration-300 {
2176
2197
  transition-duration: 300ms;
2177
2198
  }
@@ -2199,6 +2220,9 @@ body {
2199
2220
  .courier-duration-100 {
2200
2221
  animation-duration: 100ms;
2201
2222
  }
2223
+ .courier-duration-200 {
2224
+ animation-duration: 200ms;
2225
+ }
2202
2226
  .courier-duration-300 {
2203
2227
  animation-duration: 300ms;
2204
2228
  }
@@ -2395,34 +2419,43 @@ body {
2395
2419
  .courier-editor-main >div {
2396
2420
  width: 100%;
2397
2421
  }
2398
- .courier-editor-preview-mode.courier-editor-preview-mode-mobile .courier-editor-main {
2422
+ .courier-editor-preview-mode.courier-editor-preview-mode-mobile .courier-editor-main, .courier-editor-readonly.courier-editor-preview-mode-mobile .courier-editor-main {
2399
2423
  max-width: 24rem;
2400
2424
  }
2401
- .courier-editor-preview-mode.courier-editor-preview-mode-mobile .courier-editor-main:hover >button {
2425
+ .courier-editor-preview-mode.courier-editor-preview-mode-mobile .courier-editor-main:hover >button, .courier-editor-readonly.courier-editor-preview-mode-mobile .courier-editor-main:hover >button {
2402
2426
  display: none;
2403
2427
  }
2404
- .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow * {
2428
+ .courier-editor-preview-mode .ProseMirror, .courier-editor-readonly .ProseMirror {
2405
2429
  pointer-events: none;
2406
2430
  }
2407
- .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow * {
2431
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow *, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock *, .courier-editor-readonly .ProseMirror>.react-renderer.node-button *, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider *, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph *, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading *, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote *, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow * {
2432
+ pointer-events: none;
2433
+ }
2434
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote *, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow *, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock *, .courier-editor-readonly .ProseMirror>.react-renderer.node-button *, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider *, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph *, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading *, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote *, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow * {
2408
2435
  cursor: default;
2409
2436
  }
2410
- .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow [data-cypress="draggable-handle"] {
2437
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-button [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-divider [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-heading [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow [data-cypress="draggable-handle"] {
2438
+ display: none;
2439
+ }
2440
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock .selected-element .courier-actions-panel, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button .selected-element .courier-actions-panel, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider .selected-element .courier-actions-panel, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph .selected-element .courier-actions-panel, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading .selected-element .courier-actions-panel, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote .selected-element .courier-actions-panel, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow .selected-element .courier-actions-panel, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock .selected-element .courier-actions-panel, .courier-editor-readonly .ProseMirror>.react-renderer.node-button .selected-element .courier-actions-panel, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider .selected-element .courier-actions-panel, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph .selected-element .courier-actions-panel, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading .selected-element .courier-actions-panel, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote .selected-element .courier-actions-panel, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow .selected-element .courier-actions-panel {
2411
2441
  display: none;
2412
2442
  }
2413
- .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:active [data-cypress="draggable-handle"] {
2443
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock .selected-element .node-element::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button .selected-element .node-element::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider .selected-element .node-element::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph .selected-element .node-element::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading .selected-element .node-element::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote .selected-element .node-element::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow .selected-element .node-element::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock .selected-element .node-element::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-button .selected-element .node-element::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider .selected-element .node-element::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph .selected-element .node-element::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading .selected-element .node-element::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote .selected-element .node-element::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow .selected-element .node-element::before {
2414
2444
  display: none;
2415
2445
  }
2416
- .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:active .node-element.courier-empty-image::before {
2446
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:active [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock:active [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-button:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-button:active [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-divider:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-divider:active [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph:active [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-heading:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-heading:active [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote:active [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow:active [data-cypress="draggable-handle"] {
2417
2447
  display: none;
2418
2448
  }
2419
- .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock .courier-empty-image {
2449
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-button:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-divider:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:hover .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:hover .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:active .node-element>div::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:active .node-element>hr::before, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-buttonRow:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock:hover .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock:hover .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock:active .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock:active .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-button:hover .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-button:hover .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-button:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-button:active .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-button:active .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-button:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider:hover .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider:hover .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider:active .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider:active .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-divider:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph:hover .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph:hover .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph:active .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph:active .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading:hover .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading:hover .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading:active .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading:active .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote:hover .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote:hover .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote:active .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote:active .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow:hover .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow:hover .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow:active .node-element>div::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow:active .node-element>hr::before, .courier-editor-readonly .ProseMirror>.react-renderer.node-buttonRow:active .node-element.courier-empty-image::before {
2420
2450
  display: none;
2421
2451
  }
2422
- .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph .is-empty p::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph .is-empty blockquote::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote .is-empty p::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote .is-empty blockquote::after {
2452
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-imageBlock .courier-empty-image, .courier-editor-readonly .ProseMirror>.react-renderer.node-imageBlock .courier-empty-image {
2423
2453
  display: none;
2424
2454
  }
2425
- .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading .is-empty h1::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading .is-empty h2::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading .is-empty h3::after {
2455
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph .is-empty p::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-paragraph .is-empty blockquote::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote .is-empty p::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-blockquote .is-empty blockquote::after, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph .is-empty p::after, .courier-editor-readonly .ProseMirror>.react-renderer.node-paragraph .is-empty blockquote::after, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote .is-empty p::after, .courier-editor-readonly .ProseMirror>.react-renderer.node-blockquote .is-empty blockquote::after {
2456
+ display: none;
2457
+ }
2458
+ .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading .is-empty h1::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading .is-empty h2::after, .courier-editor-preview-mode .ProseMirror>.react-renderer.node-heading .is-empty h3::after, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading .is-empty h1::after, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading .is-empty h2::after, .courier-editor-readonly .ProseMirror>.react-renderer.node-heading .is-empty h3::after {
2426
2459
  display: none;
2427
2460
  }
2428
2461
  .courier-sms-editor {
@@ -3349,6 +3382,18 @@ body {
3349
3382
  .data-\[side\=top\]\:courier-slide-in-from-bottom-2[data-side="top"] {
3350
3383
  --tw-enter-translate-y: 0.5rem;
3351
3384
  }
3385
+ .data-\[state\=closed\]\:courier-slide-out-to-left-1\/2[data-state="closed"] {
3386
+ --tw-exit-translate-x: -50%;
3387
+ }
3388
+ .data-\[state\=closed\]\:courier-slide-out-to-top-\[48\%\][data-state="closed"] {
3389
+ --tw-exit-translate-y: -48%;
3390
+ }
3391
+ .data-\[state\=open\]\:courier-slide-in-from-left-1\/2[data-state="open"] {
3392
+ --tw-enter-translate-x: -50%;
3393
+ }
3394
+ .data-\[state\=open\]\:courier-slide-in-from-top-\[48\%\][data-state="open"] {
3395
+ --tw-enter-translate-y: -48%;
3396
+ }
3352
3397
  .dark\:courier-border-foreground:is(.courier-dark *) {
3353
3398
  border-color: var(--foreground);
3354
3399
  }
@@ -3482,6 +3527,34 @@ body {
3482
3527
  --tw-text-opacity: 1;
3483
3528
  color: rgb(229 229 229 / var(--tw-text-opacity, 1));
3484
3529
  }
3530
+ @media (min-width: 640px) {
3531
+
3532
+ .sm\:courier-mt-0 {
3533
+ margin-top: 0px;
3534
+ }
3535
+
3536
+ .sm\:courier-flex-row {
3537
+ flex-direction: row;
3538
+ }
3539
+
3540
+ .sm\:courier-justify-end {
3541
+ justify-content: flex-end;
3542
+ }
3543
+
3544
+ .sm\:courier-space-x-2 > :not([hidden]) ~ :not([hidden]) {
3545
+ --tw-space-x-reverse: 0;
3546
+ margin-right: calc(0.5rem * var(--tw-space-x-reverse));
3547
+ margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
3548
+ }
3549
+
3550
+ .sm\:courier-rounded-lg {
3551
+ border-radius: var(--radius);
3552
+ }
3553
+
3554
+ .sm\:courier-text-left {
3555
+ text-align: left;
3556
+ }
3557
+ }
3485
3558
  @media (min-width: 768px) {
3486
3559
 
3487
3560
  .md\:courier-text-sm {
@@ -1,14 +1,2 @@
1
1
  import type { BasicProviderProps } from "./Providers.types";
2
- export declare function useBrandActions(): {
3
- getTenant: (options?: {
4
- includeBrand?: boolean;
5
- } | undefined) => Promise<void>;
6
- saveBrand: (settings?: Record<string, unknown> | undefined) => Promise<any>;
7
- publishBrand: () => Promise<any>;
8
- isTenantLoading: boolean | null;
9
- isTenantSaving: boolean | null;
10
- isTenantPublishing: boolean | null;
11
- tenantError: string | null;
12
- tenantData: import("./store").TenantData | null;
13
- };
14
2
  export declare const BrandProvider: import("react").NamedExoticComponent<BasicProviderProps>;
@@ -1,18 +1,13 @@
1
1
  import type { BasicProviderProps } from "./Providers.types";
2
- export declare function useTemplateActions(): {
3
- getTenant: (options?: {
4
- includeBrand?: boolean;
5
- } | undefined) => Promise<void>;
6
- saveTemplate: (routing: import("./store").MessageRouting) => Promise<any>;
7
- publishTemplate: () => Promise<any>;
8
- isTenantLoading: boolean | null;
9
- isTenantSaving: boolean | null;
10
- isTenantPublishing: boolean | null;
11
- tenantError: string | null;
12
- tenantData: import("./store").TenantData | null;
13
- };
2
+ import { useTemplateActions } from "./useTemplateActions";
14
3
  type TemplateProviderProps = BasicProviderProps & {
15
4
  templateId: string;
5
+ getTemplate?: (actions: ReturnType<typeof useTemplateActions>) => Promise<void>;
6
+ saveTemplate?: (actions: ReturnType<typeof useTemplateActions>, options?: any) => Promise<void>;
7
+ };
8
+ export declare const overrideFunctions: {
9
+ getTemplate: TemplateProviderProps["getTemplate"] | null;
10
+ saveTemplate: TemplateProviderProps["saveTemplate"] | null;
16
11
  };
17
12
  export declare const TemplateProvider: import("react").NamedExoticComponent<TemplateProviderProps>;
18
13
  export {};
@@ -1,4 +1,4 @@
1
- export declare const getTenantAtom: import("jotai").WritableAtom<null, [options?: {
1
+ export declare const getTemplateAtom: import("jotai").WritableAtom<null, [options?: {
2
2
  includeBrand?: boolean;
3
3
  } | undefined], Promise<void>> & {
4
4
  init: null;
@@ -1,5 +1,5 @@
1
1
  import { type MessageRouting } from "../store";
2
- export declare const saveTemplateAtom: import("jotai").WritableAtom<null, [routing: MessageRouting], Promise<any>> & {
2
+ export declare const saveTemplateAtom: import("jotai").WritableAtom<null, [routing?: MessageRouting | undefined], Promise<any>> & {
3
3
  init: null;
4
4
  };
5
5
  export declare const publishTemplateAtom: import("jotai").WritableAtom<null, [], Promise<any>> & {
@@ -1,3 +1,5 @@
1
- export { TemplateProvider, useTemplateActions } from "./TemplateProvider";
2
- export { BrandProvider, useBrandActions } from "./BrandProvider";
1
+ export { BrandProvider } from "./BrandProvider";
3
2
  export * from "./store";
3
+ export { TemplateProvider } from "./TemplateProvider";
4
+ export { useBrandActions } from "./useBrandActions";
5
+ export { useTemplateActions } from "./useTemplateActions";
@@ -92,21 +92,31 @@ export declare const tenantIdAtom: import("jotai").PrimitiveAtom<string> & {
92
92
  export declare const templateIdAtom: import("jotai").PrimitiveAtom<string> & {
93
93
  init: string;
94
94
  };
95
- export declare const tenantDataAtom: import("jotai").PrimitiveAtom<TenantData | null> & {
95
+ export declare const templateDataAtom: import("jotai").PrimitiveAtom<TenantData | null> & {
96
96
  init: TenantData | null;
97
97
  };
98
- export declare const isTenantLoadingAtom: import("jotai").PrimitiveAtom<boolean | null> & {
98
+ export declare const isTemplateLoadingAtom: import("jotai").PrimitiveAtom<boolean | null> & {
99
99
  init: boolean | null;
100
100
  };
101
- export declare const isTenantSavingAtom: import("jotai").PrimitiveAtom<boolean | null> & {
101
+ export declare const isTemplateSavingAtom: import("jotai").PrimitiveAtom<boolean | null> & {
102
102
  init: boolean | null;
103
103
  };
104
- export declare const isTenantPublishingAtom: import("jotai").PrimitiveAtom<boolean | null> & {
104
+ export declare const isTemplatePublishingAtom: import("jotai").PrimitiveAtom<boolean | null> & {
105
105
  init: boolean | null;
106
106
  };
107
- export declare const tenantErrorAtom: import("jotai").PrimitiveAtom<string | null> & {
107
+ export declare const templateErrorAtom: import("jotai").PrimitiveAtom<string | null> & {
108
108
  init: string | null;
109
109
  };
110
110
  export declare const brandApplyAtom: import("jotai").PrimitiveAtom<boolean> & {
111
111
  init: boolean;
112
112
  };
113
+ export declare const getTemplateOverrideAtom: import("jotai").PrimitiveAtom<((options?: {
114
+ includeBrand?: boolean;
115
+ }) => Promise<void>) | null> & {
116
+ init: ((options?: {
117
+ includeBrand?: boolean;
118
+ }) => Promise<void>) | null;
119
+ };
120
+ export declare const saveTemplateOverrideAtom: import("jotai").PrimitiveAtom<((actions: any, options?: any) => Promise<void>) | null> & {
121
+ init: ((actions: any, options?: any) => Promise<void>) | null;
122
+ };
@@ -0,0 +1,13 @@
1
+ export declare function useBrandActions(): {
2
+ getTemplate: (options?: {
3
+ includeBrand?: boolean;
4
+ }) => Promise<void>;
5
+ saveTemplate: (options?: any) => Promise<void>;
6
+ saveBrand: (settings?: Record<string, unknown> | undefined) => Promise<any>;
7
+ publishBrand: () => Promise<any>;
8
+ isTemplateLoading: boolean | null;
9
+ isTemplateSaving: boolean | null;
10
+ isTemplatePublishing: boolean | null;
11
+ templateError: string | null;
12
+ templateData: import("./store").TenantData | null;
13
+ };
@@ -0,0 +1,19 @@
1
+ export declare function useTemplateActions(): {
2
+ getTemplate: (options?: {
3
+ includeBrand?: boolean;
4
+ }) => Promise<void>;
5
+ saveTemplate: (options?: any) => Promise<void>;
6
+ publishTemplate: () => Promise<any>;
7
+ isTemplateLoading: boolean | null;
8
+ setIsTemplateLoading: (args_0: boolean | ((prev: boolean | null) => boolean | null) | null) => void;
9
+ isTemplateSaving: boolean | null;
10
+ setIsTemplateSaving: (args_0: boolean | ((prev: boolean | null) => boolean | null) | null) => void;
11
+ isTemplatePublishing: boolean | null;
12
+ setIsTemplatePublishing: (args_0: boolean | ((prev: boolean | null) => boolean | null) | null) => void;
13
+ templateError: string | null;
14
+ setTemplateError: (args_0: string | ((prev: string | null) => string | null) | null) => void;
15
+ templateData: import("./store").TenantData | null;
16
+ setTemplateData: (args_0: import("./store").TenantData | ((prev: import("./store").TenantData | null) => import("./store").TenantData | null) | null) => void;
17
+ templateEditorContent: import("../../types").ElementalContent | null | undefined;
18
+ setTemplateEditorContent: (args_0: import("../../types").ElementalContent | ((prev: import("../../types").ElementalContent | null | undefined) => import("../../types").ElementalContent | null | undefined) | null | undefined) => void;
19
+ };
@@ -25,9 +25,9 @@ export interface EmailProps extends Pick<TemplateEditorProps, "hidePublish" | "b
25
25
  headerRenderer?: ({ hidePublish, channels, routing, }: {
26
26
  hidePublish?: boolean;
27
27
  channels?: ChannelType[];
28
- routing: MessageRouting;
28
+ routing?: MessageRouting;
29
29
  }) => React.ReactNode;
30
- render?: ({ subject, handleSubjectChange, selectedNode, setSelectedNode, previewMode, emailEditor, ref, isBrandApply, brandSettings, items, content, strategy, syncEditorItems, brandEditorContent, tenantData, togglePreviewMode, }: {
30
+ render?: ({ subject, handleSubjectChange, selectedNode, setSelectedNode, previewMode, emailEditor, ref, isBrandApply, brandSettings, items, content, strategy, syncEditorItems, brandEditorContent, templateData, togglePreviewMode, }: {
31
31
  subject: string | null;
32
32
  handleSubjectChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
33
33
  selectedNode: Node | null;
@@ -42,7 +42,7 @@ export interface EmailProps extends Pick<TemplateEditorProps, "hidePublish" | "b
42
42
  strategy: SortingStrategy;
43
43
  syncEditorItems: (editor: Editor) => void;
44
44
  brandEditorContent: string | null;
45
- tenantData: TenantData | null;
45
+ templateData: TenantData | null;
46
46
  togglePreviewMode: (mode: "desktop" | "mobile" | undefined) => void;
47
47
  }) => React.ReactNode;
48
48
  }
@@ -5,7 +5,7 @@ declare global {
5
5
  editor: Editor | null;
6
6
  }
7
7
  }
8
- interface EmailEditorProps {
8
+ export interface EmailEditorProps {
9
9
  value?: TiptapDoc;
10
10
  readOnly?: boolean;
11
11
  subject?: string | null;
@@ -1,2 +1,3 @@
1
1
  export * from "./Email";
2
2
  export * from "./EmailLayout";
3
+ export * from "./EmailEditor";
@@ -22,7 +22,7 @@ export interface InboxProps extends Pick<TemplateEditorProps, "hidePublish" | "t
22
22
  headerRenderer?: ({ hidePublish, channels, routing, }: {
23
23
  hidePublish?: boolean;
24
24
  channels?: ChannelType[];
25
- routing: MessageRouting;
25
+ routing?: MessageRouting;
26
26
  }) => React.ReactNode;
27
27
  render?: (props: InboxRenderProps) => React.ReactNode;
28
28
  }
@@ -20,7 +20,7 @@ export interface PushProps extends Pick<TemplateEditorProps, "hidePublish" | "th
20
20
  headerRenderer?: ({ hidePublish, channels, routing, }: {
21
21
  hidePublish?: boolean;
22
22
  channels?: ChannelType[];
23
- routing: MessageRouting;
23
+ routing?: MessageRouting;
24
24
  }) => React.ReactNode;
25
25
  render?: (props: PushRenderProps) => React.ReactNode;
26
26
  }
@@ -1,6 +1,5 @@
1
1
  import type { HTMLAttributes } from "react";
2
2
  import { type PushRenderProps } from "./Push";
3
- interface PushEditorProps extends PushRenderProps, Omit<HTMLAttributes<HTMLDivElement>, "content"> {
3
+ export interface PushEditorProps extends PushRenderProps, Omit<HTMLAttributes<HTMLDivElement>, "content"> {
4
4
  }
5
5
  export declare const PushEditor: ({ content, extensions, editable, autofocus, onUpdate, className, }: PushEditorProps) => import("react/jsx-runtime").JSX.Element;
6
- export {};
@@ -21,7 +21,7 @@ export interface SMSProps extends Pick<TemplateEditorProps, "hidePublish" | "the
21
21
  headerRenderer?: ({ hidePublish, channels, routing, }: {
22
22
  hidePublish?: boolean;
23
23
  channels?: ChannelType[];
24
- routing: MessageRouting;
24
+ routing?: MessageRouting;
25
25
  }) => React.ReactNode;
26
26
  render?: (props: SMSRenderProps) => React.ReactNode;
27
27
  }
@@ -7,6 +7,7 @@ export declare const useChannels: ({ channels, routing, }: {
7
7
  enabledChannels: Channel[];
8
8
  disabledChannels: Channel[];
9
9
  channel: ChannelType;
10
+ channelOptions: Channel[];
10
11
  setChannel: (channelType: ChannelType) => void;
11
12
  addChannel: (channelType: ChannelType) => void;
12
13
  removeChannel: (channelToRemove: ChannelType) => Promise<void>;
@@ -1,6 +1,7 @@
1
1
  import { type HTMLAttributes } from "react";
2
2
  export declare const ChannelRootContainer: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
3
3
  previewMode: "desktop" | "mobile" | undefined;
4
+ readOnly?: boolean;
4
5
  } & import("react").RefAttributes<HTMLDivElement>>;
5
6
  export declare const EditorSidebar: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
6
7
  previewMode: "desktop" | "mobile" | undefined;
@@ -14,6 +14,6 @@ export interface TemplateEditorProps {
14
14
  brandEditor?: boolean;
15
15
  brandProps?: BrandEditorProps;
16
16
  channels?: ChannelType[];
17
- routing: MessageRouting;
17
+ routing?: MessageRouting;
18
18
  }
19
19
  export declare const TemplateEditor: import("react").NamedExoticComponent<TemplateEditorProps>;
@@ -12,6 +12,8 @@ export declare const EmailChannel: import("react").MemoExoticComponent<import("r
12
12
  export declare const SMSChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").SMSProps & import("react").RefAttributes<HTMLDivElement>>>;
13
13
  export declare const PushChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").PushProps & import("react").RefAttributes<HTMLDivElement>>>;
14
14
  export declare const InboxChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").InboxProps & import("react").RefAttributes<HTMLDivElement>>>;
15
- export { EmailEditorContainer, EmailEditorMain } from "./Channels/Email";
15
+ export { EmailEditorContainer, EmailEditorMain, type EmailEditorProps, type InboxEditorProps, type PushEditorProps, type SMSEditorProps, } from "./Channels";
16
16
  export { ChannelRootContainer, EditorSidebar } from "./Layout";
17
17
  export { InboxEditor, PushEditor, SMSEditor } from "./Channels";
18
+ export { useAutoSave } from "@/hooks/useAutoSave";
19
+ export { Status as TemplateStatus } from "@/components/ui/Status";
@@ -0,0 +1,11 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import { PluginKey } from "@tiptap/pm/state";
3
+ export interface FixedChannelPasteOptions {
4
+ /**
5
+ * Channels that have fixed element structure (like PushEditor, SMS, Inbox)
6
+ * For these channels, multi-element paste should be converted to merged text
7
+ */
8
+ fixedChannels?: string[];
9
+ }
10
+ export declare const FixedChannelPastePlugin: PluginKey<any>;
11
+ export declare const FixedChannelPaste: Extension<FixedChannelPasteOptions, any>;
@@ -0,0 +1,2 @@
1
+ export { FixedChannelPaste } from "./FixedChannelPaste";
2
+ export type { FixedChannelPasteOptions } from "./FixedChannelPaste";
@@ -0,0 +1,14 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import { PluginKey } from "@tiptap/pm/state";
3
+ export interface FixedChannelSelectionOptions {
4
+ channels: Array<"push" | "sms" | "inbox">;
5
+ }
6
+ declare module "@tiptap/core" {
7
+ interface Commands<ReturnType> {
8
+ fixedChannelSelection: {
9
+ constrainSelectionToElement: () => ReturnType;
10
+ };
11
+ }
12
+ }
13
+ export declare const FixedChannelSelectionPlugin: PluginKey<any>;
14
+ export declare const FixedChannelSelection: Extension<FixedChannelSelectionOptions, any>;
@@ -0,0 +1 @@
1
+ export { FixedChannelSelection, type FixedChannelSelectionOptions } from "./FixedChannelSelection";
@@ -0,0 +1,2 @@
1
+ import { Extension } from "@tiptap/core";
2
+ export declare const VariablePaste: Extension<any, any>;
@@ -1,2 +1,3 @@
1
1
  export * from "./Variable";
2
2
  export * from "./Variable.types";
3
+ export * from "./VariablePaste";
@@ -2,5 +2,5 @@ import type { Node } from "@tiptap/pm/model";
2
2
  export declare const ExtensionKit: (options?: {
3
3
  variables?: Record<string, unknown>;
4
4
  setSelectedNode?: (node: Node) => void;
5
- }) => (import("@tiptap/core").Node<any, any> | import("@tiptap/core").Extension<import("./FileHandler/FileHandler").FileHandlerOptions, any> | import("@tiptap/core").Extension<import("./Selection").SelectionOptions, any> | import("@tiptap/core").Extension<import("./Variable").VariableOptions, any> | import("@tiptap/core").Extension<import("@tiptap/starter-kit").StarterKitOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-color").ColorOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-underline").UnderlineOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-typography").TypographyOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-placeholder").PlaceholderOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-dropcursor").DropcursorOptions, any>)[];
5
+ }) => (import("@tiptap/core").Node<any, any> | import("@tiptap/core").Extension<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-underline").UnderlineOptions, any>)[];
6
6
  export default ExtensionKit;
@@ -14,6 +14,8 @@ export { Divider } from "./Divider";
14
14
  export { Document } from "./Document";
15
15
  export * from "./DragPlaceholder";
16
16
  export { FileHandler } from "./FileHandler";
17
+ export { FixedChannelPaste } from "./FixedChannelPaste";
18
+ export { FixedChannelSelection } from "./FixedChannelSelection";
17
19
  export { Heading } from "./Heading";
18
20
  export { ImageBlock } from "./ImageBlock";
19
21
  export { Link } from "./Link";
@@ -21,4 +23,4 @@ export { Paragraph } from "./Paragraph";
21
23
  export { Selection } from "./Selection";
22
24
  export { SlashMenu } from "./SlashMenu";
23
25
  export { UniqueId } from "./UniqueId";
24
- export { Variable, VariableNode } from "./Variable";
26
+ export { Variable, VariableNode, VariablePaste } from "./Variable";
@@ -1,6 +1,7 @@
1
- interface PreviewPanelProps {
1
+ import type { HTMLAttributes } from "react";
2
+ interface PreviewPanelProps extends HTMLAttributes<HTMLDivElement> {
2
3
  previewMode: "desktop" | "mobile" | undefined;
3
4
  togglePreviewMode: (mode?: "desktop" | "mobile" | undefined) => void;
4
5
  }
5
- export declare const PreviewPanel: ({ previewMode, togglePreviewMode }: PreviewPanelProps) => import("react/jsx-runtime").JSX.Element;
6
+ export declare const PreviewPanel: ({ previewMode, togglePreviewMode, ...props }: PreviewPanelProps) => import("react/jsx-runtime").JSX.Element;
6
7
  export {};
@@ -2,6 +2,9 @@ interface StatusProps {
2
2
  isError?: boolean;
3
3
  isSaving?: boolean | null;
4
4
  isLoading?: boolean;
5
+ renderIsSaving?: (isSaving: boolean) => React.ReactNode;
6
+ renderIsError?: (isError: boolean) => React.ReactNode;
7
+ renderSaved?: (isSaved: boolean) => React.ReactNode;
5
8
  }
6
- export declare const Status: ({ isError, isSaving, isLoading }: StatusProps) => import("react/jsx-runtime").JSX.Element | null;
9
+ export declare const Status: ({ isError, isSaving, isLoading, renderIsSaving, renderIsError, renderSaved, }: StatusProps) => string | number | boolean | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
7
10
  export {};