@trycourier/react-designer 0.5.0 → 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 -60
  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 -60
  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
@@ -447,6 +447,23 @@
447
447
  .ProseMirror .ProseMirror-gapcursor + .node-blockquote:hover:is(.courier-dark *) {
448
448
  outline-color: #a3a3a3;
449
449
  }
450
+ /* Hard break wrapper for cursor positioning */
451
+ .ProseMirror .hard-break-wrapper {
452
+ display: inline;
453
+ white-space: pre;
454
+ }
455
+ /* Ensure cursor is visible before inline nodes after line breaks */
456
+ .ProseMirror .hard-break-wrapper + [data-node-view-wrapper] {
457
+ display: inline;
458
+ }
459
+ /* Custom cursor indicator for positions where browser can't render native cursor */
460
+ .ProseMirror .variable-cursor-indicator {
461
+ pointer-events: none;
462
+ }
463
+ @keyframes cursor-blink {
464
+ 0%, 100% { opacity: 1; }
465
+ 50% { opacity: 0; }
466
+ }
450
467
  *, ::before, ::after {
451
468
  --tw-border-spacing-x: 0;
452
469
  --tw-border-spacing-y: 0;
@@ -1000,15 +1017,18 @@ body {
1000
1017
  .courier-z-50 {
1001
1018
  z-index: 50;
1002
1019
  }
1020
+ .courier-z-\[40\] {
1021
+ z-index: 40;
1022
+ }
1023
+ .courier-z-\[50\] {
1024
+ z-index: 50;
1025
+ }
1003
1026
  .courier-z-\[9999\] {
1004
1027
  z-index: 9999;
1005
1028
  }
1006
1029
  .courier-z-\[999\] {
1007
1030
  z-index: 999;
1008
1031
  }
1009
- .courier-z-\[9\] {
1010
- z-index: 9;
1011
- }
1012
1032
  .\!courier-m-0 {
1013
1033
  margin: 0px !important;
1014
1034
  }
@@ -1033,6 +1053,10 @@ body {
1033
1053
  margin-left: -1rem;
1034
1054
  margin-right: -1rem;
1035
1055
  }
1056
+ .courier-mx-0 {
1057
+ margin-left: 0px;
1058
+ margin-right: 0px;
1059
+ }
1036
1060
  .courier-mx-1 {
1037
1061
  margin-left: 0.25rem;
1038
1062
  margin-right: 0.25rem;
@@ -1049,10 +1073,6 @@ body {
1049
1073
  margin-left: auto;
1050
1074
  margin-right: auto;
1051
1075
  }
1052
- .courier-my-0 {
1053
- margin-top: 0px;
1054
- margin-bottom: 0px;
1055
- }
1056
1076
  .courier-my-1 {
1057
1077
  margin-top: 0.25rem;
1058
1078
  margin-bottom: 0.25rem;
@@ -1252,9 +1272,6 @@ body {
1252
1272
  .courier-h-\[25px\] {
1253
1273
  height: 25px;
1254
1274
  }
1255
- .courier-h-\[28px\] {
1256
- height: 28px;
1257
- }
1258
1275
  .courier-h-\[48px\] {
1259
1276
  height: 48px;
1260
1277
  }
@@ -1372,8 +1389,8 @@ body {
1372
1389
  .courier-w-\[360px\] {
1373
1390
  width: 360px;
1374
1391
  }
1375
- .courier-w-\[80vw\] {
1376
- width: 80vw;
1392
+ .courier-w-\[85\%\] {
1393
+ width: 85%;
1377
1394
  }
1378
1395
  .courier-w-auto {
1379
1396
  width: auto;
@@ -1536,6 +1553,9 @@ body {
1536
1553
  .courier-flex-wrap {
1537
1554
  flex-wrap: wrap;
1538
1555
  }
1556
+ .courier-flex-nowrap {
1557
+ flex-wrap: nowrap;
1558
+ }
1539
1559
  .courier-content-center {
1540
1560
  align-content: center;
1541
1561
  }
@@ -1609,9 +1629,15 @@ body {
1609
1629
  .courier-overflow-hidden {
1610
1630
  overflow: hidden;
1611
1631
  }
1632
+ .courier-overflow-x-auto {
1633
+ overflow-x: auto;
1634
+ }
1612
1635
  .courier-overflow-y-auto {
1613
1636
  overflow-y: auto;
1614
1637
  }
1638
+ .courier-overflow-y-clip {
1639
+ overflow-y: clip;
1640
+ }
1615
1641
  .courier-truncate {
1616
1642
  overflow: hidden;
1617
1643
  text-overflow: ellipsis;
@@ -1620,6 +1646,9 @@ body {
1620
1646
  .courier-text-ellipsis {
1621
1647
  text-overflow: ellipsis;
1622
1648
  }
1649
+ .\!courier-whitespace-nowrap {
1650
+ white-space: nowrap !important;
1651
+ }
1623
1652
  .courier-whitespace-nowrap {
1624
1653
  white-space: nowrap;
1625
1654
  }
@@ -2226,9 +2255,6 @@ body {
2226
2255
  .courier-uppercase {
2227
2256
  text-transform: uppercase;
2228
2257
  }
2229
- .courier-leading-\[28px\] {
2230
- line-height: 28px;
2231
- }
2232
2258
  .courier-leading-none {
2233
2259
  line-height: 1;
2234
2260
  }
@@ -2266,6 +2292,10 @@ body {
2266
2292
  .courier-text-accent-foreground {
2267
2293
  color: var(--accent-foreground);
2268
2294
  }
2295
+ .courier-text-black {
2296
+ --tw-text-opacity: 1;
2297
+ color: rgb(0 0 0 / var(--tw-text-opacity, 1));
2298
+ }
2269
2299
  .courier-text-blue-700 {
2270
2300
  --tw-text-opacity: 1;
2271
2301
  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
@@ -2342,6 +2372,9 @@ body {
2342
2372
  .courier-underline {
2343
2373
  text-decoration-line: underline;
2344
2374
  }
2375
+ .courier-no-underline {
2376
+ text-decoration-line: none;
2377
+ }
2345
2378
  .courier-antialiased {
2346
2379
  -webkit-font-smoothing: antialiased;
2347
2380
  -moz-osx-font-smoothing: grayscale;
@@ -2754,6 +2787,19 @@ body {
2754
2787
  .courier-editor-preview-mode .ProseMirror, .courier-editor-readonly .ProseMirror {
2755
2788
  pointer-events: none;
2756
2789
  }
2790
+ /* Re-enable pointer events for clickable elements in preview mode */
2791
+ .courier-editor-preview-mode .ProseMirror a.link, .courier-editor-readonly .ProseMirror a.link {
2792
+ pointer-events: auto !important;
2793
+ cursor: pointer !important;
2794
+ }
2795
+ /* Button link wrapper in preview mode */
2796
+ .courier-editor-preview-mode .ProseMirror a.button-link-wrapper, .courier-editor-readonly .ProseMirror a.button-link-wrapper {
2797
+ pointer-events: auto !important;
2798
+ cursor: pointer !important;
2799
+ text-decoration: none;
2800
+ color: inherit;
2801
+ display: block;
2802
+ }
2757
2803
  .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-list *, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-buttonRow *, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column *, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode *, .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-list *, .courier-editor-readonly .ProseMirror > .react-renderer.node-buttonRow *, .courier-editor-readonly .ProseMirror > .react-renderer.node-column *, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode * {
2758
2804
  pointer-events: none;
2759
2805
  }
@@ -2772,7 +2818,10 @@ body {
2772
2818
  .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-list:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list: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-preview-mode .ProseMirror > .react-renderer.node-column:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover [data-cypress="draggable-handle"], .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode: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-list:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror > .react-renderer.node-list: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"], .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover [data-cypress="draggable-handle"], .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active [data-cypress="draggable-handle"] {
2773
2819
  display: none;
2774
2820
  }
2775
- .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-list:hover .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:hover .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:active .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:active .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list: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-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:active .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:active .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode: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-list:hover .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:hover .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:active .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:active .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list: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, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element.courier-empty-image::before {
2821
+ .courier-editor-preview-mode .ProseMirror > .react-renderer.node-imageBlock:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-imageBlock:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-button:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-button:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-divider:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-divider:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-paragraph:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-paragraph:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-heading:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-heading:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-blockquote:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-blockquote:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-buttonRow:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-buttonRow:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-imageBlock:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-imageBlock:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-button:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-button:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-divider:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-divider:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-paragraph:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-paragraph:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-heading:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-heading:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-blockquote:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-blockquote:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-buttonRow:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-buttonRow:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element::before {
2822
+ display: none;
2823
+ }
2824
+ .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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-imageBlock:hover .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-imageBlock:active .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-button:hover .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-button:active .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-divider:hover .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-divider:active .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-paragraph:hover .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-paragraph:active .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-heading:hover .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-heading:active .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-blockquote:hover .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-blockquote:active .node-element > ol::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-list:hover .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:hover .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:hover .node-element > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:hover .node-element > ol::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:active .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:active .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:active .node-element > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list:active .node-element > ol::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-list: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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-buttonRow:hover .node-element > ol::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 > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-buttonRow:active .node-element > ol::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-buttonRow:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element > ol::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element > ol::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column:active .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element > ol::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:hover .node-element.courier-empty-image::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:active .node-element > div::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:active .node-element > hr::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:active .node-element > ul::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode:active .node-element > ol::before, .courier-editor-preview-mode .ProseMirror > .react-renderer.node-customCode: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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-imageBlock:hover .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-imageBlock:active .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-button:hover .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-button:active .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-divider:hover .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-divider:active .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-paragraph:hover .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-paragraph:active .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-heading:hover .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-heading:active .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-blockquote:hover .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-blockquote:active .node-element > ol::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-blockquote:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:hover .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:hover .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:hover .node-element > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:hover .node-element > ol::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:active .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:active .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:active .node-element > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list:active .node-element > ol::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-list: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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-buttonRow:hover .node-element > ol::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 > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-buttonRow:active .node-element > ol::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-buttonRow:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element > ol::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element > ol::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-column:active .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element > ol::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:hover .node-element.courier-empty-image::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element > div::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element > hr::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element > ul::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element > ol::before, .courier-editor-readonly .ProseMirror > .react-renderer.node-customCode:active .node-element.courier-empty-image::before {
2776
2825
  display: none;
2777
2826
  }
2778
2827
  .courier-editor-preview-mode .ProseMirror > .react-renderer.node-column .draggable-content-wrapper > .node-element > div, .courier-editor-readonly .ProseMirror > .react-renderer.node-column .draggable-content-wrapper > .node-element > div {
@@ -3083,10 +3132,6 @@ body {
3083
3132
  margin-top: 0px;
3084
3133
  margin-bottom: 0px;
3085
3134
  }
3086
- .ProseMirror > .react-renderer .node-variable {
3087
- margin-left: 0.25rem !important;
3088
- margin-right: 0.25rem !important;
3089
- }
3090
3135
  .ProseMirror > .react-renderer .node-variable {
3091
3136
  display: inline-block;
3092
3137
  }
@@ -4736,6 +4781,8 @@ body {
4736
4781
  }
4737
4782
  .courier-variable-chip {
4738
4783
  position: relative;
4784
+ margin-left: 0.125rem;
4785
+ margin-right: 0.125rem;
4739
4786
  display: inline-flex;
4740
4787
  max-width: 100%;
4741
4788
  align-items: center;
@@ -4832,7 +4879,11 @@ body {
4832
4879
  }
4833
4880
  /* Variable Input placeholder styles */
4834
4881
  .variable-input-placeholder {
4882
+ position: relative;
4835
4883
  cursor: text;
4884
+ padding-left: 1px;
4885
+
4886
+ /* Position placeholder absolutely so cursor appears at start */
4836
4887
  }
4837
4888
  .variable-input-placeholder .ProseMirror {
4838
4889
  width: 100%;
@@ -4843,12 +4894,6 @@ body {
4843
4894
  .variable-input-placeholder .ProseMirror p {
4844
4895
  margin: 0px;
4845
4896
  }
4846
- .variable-input-placeholder .ProseMirror p {
4847
- height: 28px;
4848
- }
4849
- .variable-input-placeholder .ProseMirror p {
4850
- width: 100%;
4851
- }
4852
4897
  .variable-input-placeholder .ProseMirror p {
4853
4898
  cursor: text;
4854
4899
  }
@@ -4858,21 +4903,24 @@ body {
4858
4903
  .variable-input-placeholder .ProseMirror p {
4859
4904
  padding: 0px;
4860
4905
  }
4861
- .variable-input-placeholder .ProseMirror p {
4862
- line-height: 28px;
4863
- }
4864
4906
  .variable-input-placeholder .ProseMirror p {
4865
4907
  outline: 2px solid transparent;
4866
4908
  outline-offset: 2px;
4867
4909
  }
4868
4910
  .variable-input-placeholder .ProseMirror p.is-editor-empty:first-child::before,
4869
- .variable-input-placeholder .ProseMirror p.is-empty:first-child::before {
4870
- content: attr(data-placeholder);
4871
- float: left;
4872
- color: var(--muted-foreground);
4873
- pointer-events: none;
4874
- height: 0;
4875
- }
4911
+ .variable-input-placeholder .ProseMirror p.is-empty:first-child::before {
4912
+ content: attr(data-placeholder);
4913
+ color: var(--muted-foreground);
4914
+ pointer-events: none;
4915
+ position: absolute;
4916
+ left: 1px; /* Match the padding */
4917
+ top: 50%;
4918
+ transform: translateY(-50%);
4919
+ }
4920
+ /* Hide scrollbar for variable input while keeping scroll functionality */
4921
+ .variable-input-no-scrollbar::-webkit-scrollbar {
4922
+ display: none;
4923
+ }
4876
4924
  .file\:courier-border-0::file-selector-button {
4877
4925
  border-width: 0px;
4878
4926
  }
@@ -5407,9 +5455,18 @@ body {
5407
5455
  .\[\&\>svg\]\:courier-shrink-0>svg {
5408
5456
  flex-shrink: 0;
5409
5457
  }
5458
+ .\[\&_\.ProseMirror\]\:courier-inline-flex .ProseMirror {
5459
+ display: inline-flex;
5460
+ }
5410
5461
  .\[\&_\.ProseMirror\]\:courier-min-h-\[20px\] .ProseMirror {
5411
5462
  min-height: 20px;
5412
5463
  }
5464
+ .\[\&_\.ProseMirror\]\:courier-flex-nowrap .ProseMirror {
5465
+ flex-wrap: nowrap;
5466
+ }
5467
+ .\[\&_\.ProseMirror\]\:courier-items-center .ProseMirror {
5468
+ align-items: center;
5469
+ }
5413
5470
  .\[\&_\.ProseMirror\]\:courier-border-none .ProseMirror {
5414
5471
  border-style: none;
5415
5472
  }
@@ -5420,6 +5477,18 @@ body {
5420
5477
  outline: 2px solid transparent;
5421
5478
  outline-offset: 2px;
5422
5479
  }
5480
+ .\[\&_\.tiptap\]\:courier-inline-flex .tiptap {
5481
+ display: inline-flex;
5482
+ }
5483
+ .\[\&_\.tiptap\]\:courier-flex-nowrap .tiptap {
5484
+ flex-wrap: nowrap;
5485
+ }
5486
+ .\[\&_\.tiptap\]\:courier-items-center .tiptap {
5487
+ align-items: center;
5488
+ }
5489
+ .\[\&_\.tiptap\]\:courier-whitespace-nowrap .tiptap {
5490
+ white-space: nowrap;
5491
+ }
5423
5492
  .\[\&_\.tiptap\]\:courier-border-none .tiptap {
5424
5493
  border-style: none;
5425
5494
  }
@@ -14,6 +14,8 @@ export declare const useUploadImage: () => UploadImageFunction | null;
14
14
  type TemplateProviderProps = BasicProviderProps & {
15
15
  templateId: string;
16
16
  uploadImage?: UploadImageFunction;
17
+ variables?: Record<string, unknown>;
18
+ disableVariablesAutocomplete?: boolean;
17
19
  };
18
20
  export declare const TemplateProvider: import("react").NamedExoticComponent<TemplateProviderProps>;
19
21
  export {};
@@ -1,3 +1,4 @@
1
+ import { type VariableViewMode } from "@/components/TemplateEditor/store";
1
2
  import type { TiptapDoc } from "@/types";
2
3
  import type { Editor } from "@tiptap/core";
3
4
  export interface EmailEditorProps {
@@ -6,8 +7,9 @@ export interface EmailEditorProps {
6
7
  subject?: string | null;
7
8
  variables?: Record<string, unknown>;
8
9
  disableVariablesAutocomplete?: boolean;
10
+ variableViewMode?: VariableViewMode;
9
11
  onDestroy?: () => void;
10
12
  onUpdate?: (editor: Editor) => void;
11
13
  }
12
- declare const EmailEditor: ({ value, readOnly, onDestroy, onUpdate, subject: propSubject, variables, disableVariablesAutocomplete, }: EmailEditorProps) => import("react/jsx-runtime").JSX.Element;
14
+ declare const EmailEditor: ({ value, readOnly, onDestroy, onUpdate, subject: propSubject, variables, disableVariablesAutocomplete, variableViewMode, }: EmailEditorProps) => import("react/jsx-runtime").JSX.Element;
13
15
  export default EmailEditor;
@@ -1,5 +1,7 @@
1
1
  import type { InboxRenderProps } from "./Inbox";
2
+ import { type VariableViewMode } from "../../store";
2
3
  export interface InboxEditorProps extends InboxRenderProps {
3
4
  readOnly?: boolean;
5
+ variableViewMode?: VariableViewMode;
4
6
  }
5
- export declare const InboxEditor: ({ content, extensions, editable, autofocus, onUpdate, readOnly, }: InboxEditorProps) => import("react/jsx-runtime").JSX.Element | null;
7
+ export declare const InboxEditor: ({ content, extensions, editable, autofocus, onUpdate, readOnly, variableViewMode, }: InboxEditorProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -27,6 +27,7 @@ export interface MSTeamsRenderProps {
27
27
  };
28
28
  selectedNode: Node | null;
29
29
  msteamsEditor: Editor | null;
30
+ textMenuConfig: TextMenuConfig;
30
31
  }
31
32
  export interface MSTeamsProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "disableVariablesAutocomplete" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
32
33
  readOnly?: boolean;
@@ -37,6 +38,10 @@ export interface MSTeamsProps extends Pick<TemplateEditorProps, "hidePublish" |
37
38
  }) => React.ReactNode;
38
39
  render?: (props: MSTeamsRenderProps) => React.ReactNode;
39
40
  }
40
- export declare const MSTeamsConfig: TextMenuConfig;
41
+ /**
42
+ * Get text menu configuration for an MS Teams node based on selection state
43
+ * This function applies MS Teams-specific constraints while respecting text selection
44
+ */
45
+ export declare const getTextMenuConfigForMSTeamsNode: (nodeName: string, hasTextSelection?: boolean) => TextMenuConfig;
41
46
  export declare const MSTeams: React.MemoExoticComponent<React.ForwardRefExoticComponent<MSTeamsProps & React.RefAttributes<HTMLDivElement>>>;
42
47
  export {};
@@ -1,5 +1,7 @@
1
1
  import type { MSTeamsRenderProps } from "./MSTeams";
2
+ import { type VariableViewMode } from "../../store";
2
3
  export interface MSTeamsEditorProps extends MSTeamsRenderProps {
3
4
  readOnly?: boolean;
5
+ variableViewMode?: VariableViewMode;
4
6
  }
5
- export declare const MSTeamsEditor: ({ content, extensions, editable, autofocus, onUpdate, readOnly, }: MSTeamsEditorProps) => import("react/jsx-runtime").JSX.Element | null;
7
+ export declare const MSTeamsEditor: ({ content, extensions, editable, autofocus, onUpdate, readOnly, variableViewMode, textMenuConfig, }: MSTeamsEditorProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,8 @@
1
+ import type { Node as ProseMirrorNode } from "@tiptap/pm/model";
2
+ import type { Editor } from "@tiptap/react";
3
+ export interface MSTeamsSideBarItemDetailsProps {
4
+ element: ProseMirrorNode | null;
5
+ editor: Editor | null;
6
+ defaultElement: React.ReactNode;
7
+ }
8
+ export declare const MSTeamsSideBarItemDetails: ({ element, editor, defaultElement, }: MSTeamsSideBarItemDetailsProps) => string | number | boolean | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
@@ -1 +1,2 @@
1
1
  export * from "./SideBar";
2
+ export * from "./MSTeamsSideBarItemDetails";
@@ -2,4 +2,4 @@ export * from "./MSTeams";
2
2
  export * from "./MSTeamsEditor";
3
3
  export * from "./MSTeamsFrame";
4
4
  export * from "./MSTeamsLayout";
5
- export { MSTeamsSideBar } from "./SideBar";
5
+ export * from "./SideBar";
@@ -1,6 +1,8 @@
1
1
  import type { HTMLAttributes } from "react";
2
2
  import { type PushRenderProps } from "./Push";
3
+ import { type VariableViewMode } from "../../store";
3
4
  export interface PushEditorProps extends PushRenderProps, Omit<HTMLAttributes<HTMLDivElement>, "content"> {
4
5
  readOnly?: boolean;
6
+ variableViewMode?: VariableViewMode;
5
7
  }
6
- export declare const PushEditor: ({ content, extensions, editable, autofocus, onUpdate, className, readOnly, }: PushEditorProps) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const PushEditor: ({ content, extensions, editable, autofocus, onUpdate, className, readOnly, variableViewMode, }: PushEditorProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,8 @@
1
1
  import type { HTMLAttributes } from "react";
2
2
  import type { SMSRenderProps } from "./SMS";
3
+ import { type VariableViewMode } from "../../store";
3
4
  export interface SMSEditorProps extends SMSRenderProps, Omit<HTMLAttributes<HTMLDivElement>, "content"> {
4
5
  readOnly?: boolean;
6
+ variableViewMode?: VariableViewMode;
5
7
  }
6
- export declare const SMSEditor: ({ content, extensions, editable, autofocus, onUpdate, className, readOnly, }: SMSEditorProps) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const SMSEditor: ({ content, extensions, editable, autofocus, onUpdate, className, readOnly, variableViewMode, }: SMSEditorProps) => import("react/jsx-runtime").JSX.Element;
@@ -27,6 +27,7 @@ export interface SlackRenderProps {
27
27
  };
28
28
  selectedNode: Node | null;
29
29
  slackEditor: Editor | null;
30
+ textMenuConfig: TextMenuConfig;
30
31
  }
31
32
  export interface SlackProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "disableVariablesAutocomplete" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
32
33
  readOnly?: boolean;
@@ -37,6 +38,10 @@ export interface SlackProps extends Pick<TemplateEditorProps, "hidePublish" | "t
37
38
  }) => React.ReactNode;
38
39
  render?: (props: SlackRenderProps) => React.ReactNode;
39
40
  }
40
- export declare const SlackConfig: TextMenuConfig;
41
+ /**
42
+ * Get text menu configuration for a Slack node based on selection state
43
+ * This function applies Slack-specific constraints while respecting text selection
44
+ */
45
+ export declare const getTextMenuConfigForSlackNode: (nodeName: string, hasTextSelection?: boolean) => TextMenuConfig;
41
46
  export declare const Slack: React.MemoExoticComponent<React.ForwardRefExoticComponent<SlackProps & React.RefAttributes<HTMLDivElement>>>;
42
47
  export {};
@@ -1,5 +1,7 @@
1
1
  import type { SlackRenderProps } from "./Slack";
2
+ import { type VariableViewMode } from "../../store";
2
3
  export interface SlackEditorProps extends SlackRenderProps {
3
4
  readOnly?: boolean;
5
+ variableViewMode?: VariableViewMode;
4
6
  }
5
- export declare const SlackEditor: ({ content, extensions, editable, autofocus, onUpdate, readOnly, }: SlackEditorProps) => import("react/jsx-runtime").JSX.Element | null;
7
+ export declare const SlackEditor: ({ content, extensions, editable, autofocus, onUpdate, readOnly, variableViewMode, textMenuConfig, }: SlackEditorProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,24 @@
1
+ import { type VariableViewMode } from "./store";
2
+ import { getVariableViewMode } from "../extensions/Variable/variable-storage.utils";
3
+ interface VariableViewModeSyncProps {
4
+ variableViewMode: VariableViewMode;
5
+ }
6
+ /**
7
+ * Syncs the variableViewMode prop to editor storage and dispatches a transaction
8
+ * to notify VariableView components to re-render.
9
+ *
10
+ * This component should be placed inside an EditorProvider.
11
+ */
12
+ export declare const VariableViewModeSync: ({ variableViewMode }: VariableViewModeSyncProps) => null;
13
+ /**
14
+ * Hook to get the current variable view mode from the editor.
15
+ * Useful for reading the variable view mode outside of VariableView components.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const { editor } = useCurrentEditor();
20
+ * const viewMode = useVariableViewMode(editor);
21
+ * ```
22
+ */
23
+ export declare function useVariableViewMode(editor: Parameters<typeof getVariableViewMode>[0]): VariableViewMode;
24
+ export {};
@@ -4,7 +4,7 @@ export { default as EmailEditor } from "./Channels/Email/EmailEditor";
4
4
  export * from "./TemplateEditor";
5
5
  export { SideBar as EmailSideBar, SideBarItemDetails as EmailSideBarItemDetails, } from "./Channels/Email/SideBar";
6
6
  export { SideBar as InboxSideBar } from "./Channels/Inbox/SideBar";
7
- export { MSTeamsSideBar } from "./Channels/MSTeams/SideBar";
7
+ export { MSTeamsSideBar, MSTeamsSideBarItemDetails } from "./Channels/MSTeams/SideBar";
8
8
  export { SlackSideBar, SlackSideBarItemDetails } from "./Channels/Slack/SideBar";
9
9
  export { EmailEditorContainer, EmailEditorMain, type EmailEditorProps, type InboxEditorProps, type MSTeamsEditorProps, type PushEditorProps, type SlackEditorProps, type SMSEditorProps, } from "./Channels";
10
10
  export declare const EmailChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").EmailProps & import("react").RefAttributes<HTMLDivElement>>>;
@@ -39,9 +39,24 @@ export declare const disableVariablesAutocompleteAtom: import("jotai").Primitive
39
39
  export declare const variableValidationAtom: import("jotai").PrimitiveAtom<VariableValidationConfig | undefined> & {
40
40
  init: VariableValidationConfig | undefined;
41
41
  };
42
+ export type VariableViewMode = "show-variables" | "wysiwyg";
42
43
  export declare const isDraggingAtom: import("jotai").PrimitiveAtom<boolean> & {
43
44
  init: boolean;
44
45
  };
46
+ /**
47
+ * Increments or decrements the form updating counter.
48
+ * When true, increments the counter (starting an update).
49
+ * When false, decrements the counter (ending an update).
50
+ */
51
+ export declare const setFormUpdating: (value: boolean) => void;
52
+ /**
53
+ * Returns true if any form update is in progress (counter > 0)
54
+ */
55
+ export declare const getFormUpdating: () => boolean;
56
+ /**
57
+ * Resets the form updating counter to 0 (for cleanup/testing)
58
+ */
59
+ export declare const resetFormUpdating: () => void;
45
60
  export declare const pendingAutoSaveAtom: import("jotai").PrimitiveAtom<ElementalContent | null> & {
46
61
  init: ElementalContent | null;
47
62
  };
@@ -58,7 +73,7 @@ export declare const flushAllPendingUpdates: (flushFunctions: Map<string, FlushF
58
73
  /**
59
74
  * Available block element types that can be used in the sidebar
60
75
  */
61
- export type BlockElementType = "heading" | "text" | "image" | "spacer" | "divider" | "button" | "customCode" | "column" | "blockquote";
76
+ export type BlockElementType = "heading" | "text" | "image" | "spacer" | "divider" | "button" | "customCode" | "column" | "blockquote" | "list";
62
77
  /**
63
78
  * Attributes that can be set as defaults or in presets for blocks.
64
79
  * Types match the actual TipTap node attribute types for each extension.
@@ -4,9 +4,6 @@ declare module "@tiptap/core" {
4
4
  interface Commands<ReturnType> {
5
5
  button: {
6
6
  setButton: (props: Partial<ButtonProps>) => ReturnType;
7
- toggleBold: () => ReturnType;
8
- toggleItalic: () => ReturnType;
9
- toggleUnderline: () => ReturnType;
10
7
  };
11
8
  }
12
9
  }
@@ -4,9 +4,8 @@ import type { ButtonProps } from "./Button.types";
4
4
  export declare const ButtonComponent: React.FC<ButtonProps & {
5
5
  nodeKey?: string;
6
6
  selected?: boolean;
7
- fontWeight?: string;
8
- isUnderline?: boolean;
9
- isStrike?: boolean;
10
7
  children?: React.ReactNode;
8
+ isPreviewMode?: boolean;
9
+ link?: string;
11
10
  }>;
12
11
  export declare const ButtonComponentNode: (props: NodeViewProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import type { Node as ProseMirrorNode } from "@tiptap/pm/model";
2
+ import type { EditorState, Transaction } from "@tiptap/pm/state";
3
+ export declare function findButtonNodeById(doc: ProseMirrorNode, id: string): {
4
+ pos: number;
5
+ node: ProseMirrorNode;
6
+ } | null;
7
+ export declare function findButtonNodeAtPosition(doc: ProseMirrorNode, position: number): {
8
+ pos: number;
9
+ node: ProseMirrorNode;
10
+ } | null;
11
+ export declare function extractButtonTextContent(node: ProseMirrorNode): string;
12
+ export declare function syncButtonContentToLabelAttr(state: EditorState): Transaction | null;
13
+ export declare function updateButtonLabelAndContent(tr: Transaction, buttonPos: number, newLabel: string): boolean;