@wix/ricos 11.20.5 → 11.21.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 (1116) hide show
  1. package/css/all-plugins-viewer.css +143 -143
  2. package/css/plugin-audio-viewer.global.css +3 -3
  3. package/css/plugin-audio-viewer.global.inject.mjs +4 -4
  4. package/css/plugin-button-viewer.global.css +1 -1
  5. package/css/plugin-button-viewer.global.inject.mjs +2 -2
  6. package/css/plugin-card-viewer.global.css +1 -1
  7. package/css/plugin-card-viewer.global.inject.mjs +2 -2
  8. package/css/plugin-collapsible-list-viewer.global.css +1 -1
  9. package/css/plugin-collapsible-list-viewer.global.inject.mjs +2 -2
  10. package/css/plugin-divider-viewer.global.css +1 -1
  11. package/css/plugin-divider-viewer.global.inject.mjs +2 -2
  12. package/css/plugin-file-upload-viewer.global.css +1 -1
  13. package/css/plugin-file-upload-viewer.global.inject.mjs +2 -2
  14. package/css/plugin-gallery-viewer.global.css +1 -1
  15. package/css/plugin-gallery-viewer.global.inject.mjs +2 -2
  16. package/css/plugin-giphy-viewer.global.css +1 -1
  17. package/css/plugin-giphy-viewer.global.inject.mjs +2 -2
  18. package/css/plugin-hashtag-viewer.global.css +1 -1
  19. package/css/plugin-hashtag-viewer.global.inject.mjs +2 -2
  20. package/css/plugin-html-viewer.global.css +1 -1
  21. package/css/plugin-html-viewer.global.inject.mjs +2 -2
  22. package/css/plugin-image-viewer.global.css +1 -1
  23. package/css/plugin-image-viewer.global.inject.mjs +2 -2
  24. package/css/plugin-link-preview-viewer.global.css +2 -2
  25. package/css/plugin-link-preview-viewer.global.inject.mjs +3 -3
  26. package/css/plugin-link-viewer.global.css +1 -1
  27. package/css/plugin-link-viewer.global.inject.mjs +2 -2
  28. package/css/plugin-mentions-viewer.global.css +1 -1
  29. package/css/plugin-mentions-viewer.global.inject.mjs +2 -2
  30. package/css/plugin-paywall-viewer.global.css +1 -1
  31. package/css/plugin-paywall-viewer.global.inject.mjs +2 -2
  32. package/css/plugin-smart-block-viewer.global.css +1 -1
  33. package/css/plugin-smart-block-viewer.global.inject.mjs +2 -2
  34. package/css/plugin-social-polls-viewer.global.css +1 -1
  35. package/css/plugin-social-polls-viewer.global.inject.mjs +2 -2
  36. package/css/plugin-spoiler-viewer.global.css +1 -1
  37. package/css/plugin-spoiler-viewer.global.inject.mjs +2 -2
  38. package/css/plugin-table-viewer.global.css +3 -3
  39. package/css/plugin-table-viewer.global.inject.mjs +4 -4
  40. package/css/plugin-toc-viewer.global.css +1 -1
  41. package/css/plugin-toc-viewer.global.inject.mjs +2 -2
  42. package/css/plugin-vertical-embed-viewer.global.css +2 -2
  43. package/css/plugin-vertical-embed-viewer.global.inject.mjs +3 -3
  44. package/css/plugin-video-viewer.global.css +1 -1
  45. package/css/plugin-video-viewer.global.inject.mjs +2 -2
  46. package/css/ricos-viewer.global.css +1 -1
  47. package/css/ricos-viewer.global.inject.mjs +2 -2
  48. package/dist/cjs/_shared/dropdown-modal/dropdown-modal-scss.js +2 -2
  49. package/dist/cjs/_shared/dropdown-modal/dropdown-modal-scss.js.map +1 -1
  50. package/dist/cjs/_shared/figure/add-caption-button-scss.js +9 -9
  51. package/dist/cjs/_shared/figure/add-caption-button-scss.js.map +1 -1
  52. package/dist/cjs/_shared/figure/viewer-caption-scss.js +2 -2
  53. package/dist/cjs/_shared/figure/viewer-caption-scss.js.map +1 -1
  54. package/dist/cjs/_shared/figure/viewer-figure-scss.js +1 -1
  55. package/dist/cjs/_shared/figure/viewer-figure-scss.js.map +1 -1
  56. package/dist/cjs/_shared/get-lock-icon.js +25 -0
  57. package/dist/cjs/_shared/get-lock-icon.js.map +7 -0
  58. package/dist/cjs/_shared/link-modal/open-link-modal/modal-desktop.js +3 -2
  59. package/dist/cjs/_shared/link-modal/open-link-modal/modal-desktop.js.map +2 -2
  60. package/dist/cjs/_shared/link-modal/open-link-modal/modal-mobile.js +3 -2
  61. package/dist/cjs/_shared/link-modal/open-link-modal/modal-mobile.js.map +2 -2
  62. package/dist/cjs/_shared/link-modal/open-link-modal/types.js.map +1 -1
  63. package/dist/cjs/_shared/link-modal/open-link-modal.js +4 -2
  64. package/dist/cjs/_shared/link-modal/open-link-modal.js.map +2 -2
  65. package/dist/cjs/_shared/link-modal/toggle-link-modal.js +4 -2
  66. package/dist/cjs/_shared/link-modal/toggle-link-modal.js.map +2 -2
  67. package/dist/cjs/_shared/list-item-divider/list-item-divider-scss.js +1 -1
  68. package/dist/cjs/_shared/list-item-divider/list-item-divider-scss.js.map +1 -1
  69. package/dist/cjs/_shared/list-item-select/list-item-select-scss.js +2 -2
  70. package/dist/cjs/_shared/list-item-select/list-item-select-scss.js.map +1 -1
  71. package/dist/cjs/_shared/list-item-toggle/list-item-toggle-scss.js +3 -3
  72. package/dist/cjs/_shared/list-item-toggle/list-item-toggle-scss.js.map +1 -1
  73. package/dist/cjs/_shared/overlay-hoc/overlay-hoc-scss.js +1 -1
  74. package/dist/cjs/_shared/overlay-hoc/overlay-hoc-scss.js.map +1 -1
  75. package/dist/cjs/_shared/plugin-toolbar/create-link-button.js +11 -11
  76. package/dist/cjs/_shared/plugin-toolbar/create-link-button.js.map +2 -2
  77. package/dist/cjs/_shared/plugin-toolbar/plugin-toolbar-buttons-ids.js +1 -0
  78. package/dist/cjs/_shared/plugin-toolbar/plugin-toolbar-buttons-ids.js.map +2 -2
  79. package/dist/cjs/_shared/plugin-toolbar/separator/toolbar-button-separator-scss.js +2 -2
  80. package/dist/cjs/_shared/plugin-toolbar/separator/toolbar-button-separator-scss.js.map +1 -1
  81. package/dist/cjs/_shared/plugin-toolbar/url-link-button/url-link-button-scss.js +2 -2
  82. package/dist/cjs/_shared/plugin-toolbar/url-link-button/url-link-button-scss.js.map +1 -1
  83. package/dist/cjs/_shared/prompt-input-area/attachment-bar/attachment-bar-scss.js +7 -7
  84. package/dist/cjs/_shared/prompt-input-area/attachment-bar/attachment-bar-scss.js.map +1 -1
  85. package/dist/cjs/_shared/prompt-input-area/prompt-input-area-scss.js +13 -13
  86. package/dist/cjs/_shared/prompt-input-area/prompt-input-area-scss.js.map +1 -1
  87. package/dist/cjs/_shared/prompt-input-area/widget-prompt-input-area-scss.js +8 -8
  88. package/dist/cjs/_shared/prompt-input-area/widget-prompt-input-area-scss.js.map +1 -1
  89. package/dist/cjs/_shared/request-service-provider/consts.js +0 -2
  90. package/dist/cjs/_shared/request-service-provider/consts.js.map +2 -2
  91. package/dist/cjs/_shared/request-service-provider/create-instance-wix-client.js +57 -0
  92. package/dist/cjs/_shared/request-service-provider/create-instance-wix-client.js.map +7 -0
  93. package/dist/cjs/_shared/request-service-provider/media-manager-uploader.js +68 -35
  94. package/dist/cjs/_shared/request-service-provider/media-manager-uploader.js.map +2 -2
  95. package/dist/cjs/_shared/request-service-provider/parse-instance.js.map +2 -2
  96. package/dist/cjs/_shared/request-service-provider/use-get-wix-client-promise.js +2 -10
  97. package/dist/cjs/_shared/request-service-provider/use-get-wix-client-promise.js.map +2 -2
  98. package/dist/cjs/_shared/shape-select-modal/shape-select-modal-content-scss.js +7 -7
  99. package/dist/cjs/_shared/shape-select-modal/shape-select-modal-content-scss.js.map +1 -1
  100. package/dist/cjs/_shared/shape-view-renderer/shape-view-renderer-scss.js +2 -2
  101. package/dist/cjs/_shared/shape-view-renderer/shape-view-renderer-scss.js.map +1 -1
  102. package/dist/cjs/_shared/toolbar-button/toolbar-button-scss.js +3 -3
  103. package/dist/cjs/_shared/toolbar-button/toolbar-button-scss.js.map +1 -1
  104. package/dist/cjs/bundled-dependencies/ai-assistant-avatar.js +4 -4
  105. package/dist/cjs/bundled-dependencies/ai-assistant-avatar.js.map +1 -1
  106. package/dist/cjs/editor-common/editor-events-context.js.map +2 -2
  107. package/dist/cjs/editor-common/statics/styles/general-scss.js +18 -18
  108. package/dist/cjs/editor-common/statics/styles/general-scss.js.map +1 -1
  109. package/dist/cjs/plugin-ai/ai-content-modal/ai-content-modal-scss.js +8 -8
  110. package/dist/cjs/plugin-ai/ai-content-modal/ai-content-modal-scss.js.map +1 -1
  111. package/dist/cjs/plugin-ai/ai-content-modal/feed/feed-scss.js +2 -2
  112. package/dist/cjs/plugin-ai/ai-content-modal/feed/feed-scss.js.map +1 -1
  113. package/dist/cjs/plugin-ai/ai-content-modal/no-selection-message/no-selection-message-scss.js +1 -1
  114. package/dist/cjs/plugin-ai/ai-content-modal/no-selection-message/no-selection-message-scss.js.map +1 -1
  115. package/dist/cjs/plugin-ai/ai-content-modal/text-cursor/text-cursor-scss.js +2 -2
  116. package/dist/cjs/plugin-ai/ai-content-modal/text-cursor/text-cursor-scss.js.map +1 -1
  117. package/dist/cjs/plugin-ai/ai-content-modal/textual-prompt-input-area/textual-prompt-input-area-scss.js +5 -5
  118. package/dist/cjs/plugin-ai/ai-content-modal/textual-prompt-input-area/textual-prompt-input-area-scss.js.map +1 -1
  119. package/dist/cjs/plugin-ai/ai-image-modal/ai-image-modal-scss.js +6 -6
  120. package/dist/cjs/plugin-ai/ai-image-modal/ai-image-modal-scss.js.map +1 -1
  121. package/dist/cjs/plugin-ai/ai-plus-button/ai-plus-button-scss.js +1 -1
  122. package/dist/cjs/plugin-ai/ai-plus-button/ai-plus-button-scss.js.map +1 -1
  123. package/dist/cjs/plugin-ai/error-message/error-message-scss.js +1 -1
  124. package/dist/cjs/plugin-ai/error-message/error-message-scss.js.map +1 -1
  125. package/dist/cjs/plugin-ai/prompt-input-area/prompt-input-area-scss.js +4 -4
  126. package/dist/cjs/plugin-ai/prompt-input-area/prompt-input-area-scss.js.map +1 -1
  127. package/dist/cjs/plugin-ai/toolbar/toolbar-button-scss.js +2 -2
  128. package/dist/cjs/plugin-ai/toolbar/toolbar-button-scss.js.map +1 -1
  129. package/dist/cjs/plugin-animation/animation-panel-scss.js +9 -9
  130. package/dist/cjs/plugin-animation/animation-panel-scss.js.map +1 -1
  131. package/dist/cjs/plugin-audio/statics/styles/audio-embed-scss.js +1 -1
  132. package/dist/cjs/plugin-audio/statics/styles/audio-embed-scss.js.map +1 -1
  133. package/dist/cjs/plugin-audio/statics/styles/audio-scss.js +21 -21
  134. package/dist/cjs/plugin-audio/statics/styles/audio-scss.js.map +1 -1
  135. package/dist/cjs/plugin-audio/statics/styles/icon-button-scss.js +1 -1
  136. package/dist/cjs/plugin-audio/statics/styles/icon-button-scss.js.map +1 -1
  137. package/dist/cjs/plugin-audio/statics/styles/settings-modal-scss.js +1 -1
  138. package/dist/cjs/plugin-audio/statics/styles/settings-modal-scss.js.map +1 -1
  139. package/dist/cjs/plugin-audio/statics/styles/sound-control-scss.js +2 -2
  140. package/dist/cjs/plugin-audio/statics/styles/sound-control-scss.js.map +1 -1
  141. package/dist/cjs/plugin-block-drag-handle/styles-scss.js +8 -8
  142. package/dist/cjs/plugin-block-drag-handle/styles-scss.js.map +1 -1
  143. package/dist/cjs/plugin-button/components/button-text-field.js +70 -0
  144. package/dist/cjs/plugin-button/components/button-text-field.js.map +7 -0
  145. package/dist/cjs/plugin-button/constants.js +4 -5
  146. package/dist/cjs/plugin-button/constants.js.map +2 -2
  147. package/dist/cjs/plugin-button/data-hooks.js +6 -6
  148. package/dist/cjs/plugin-button/data-hooks.js.map +2 -2
  149. package/dist/cjs/plugin-button/get-toolbar-buttons.js +54 -26
  150. package/dist/cjs/plugin-button/get-toolbar-buttons.js.map +2 -2
  151. package/dist/cjs/plugin-button/modals/action-button-text-modal.js +59 -0
  152. package/dist/cjs/plugin-button/modals/action-button-text-modal.js.map +7 -0
  153. package/dist/cjs/plugin-button/modals/settings-modal-content.js +10 -49
  154. package/dist/cjs/plugin-button/modals/settings-modal-content.js.map +2 -2
  155. package/dist/cjs/plugin-button/modals/settings-modal.js +1 -6
  156. package/dist/cjs/plugin-button/modals/settings-modal.js.map +2 -2
  157. package/dist/cjs/plugin-button/statics/styles/button-input-modal-scss.js +2 -2
  158. package/dist/cjs/plugin-button/statics/styles/button-input-modal-scss.js.map +1 -1
  159. package/dist/cjs/plugin-button/statics/styles/{settings-component-scss.js → button-text-field-scss.js} +7 -7
  160. package/dist/cjs/plugin-button/statics/styles/button-text-field-scss.js.map +7 -0
  161. package/dist/cjs/plugin-button/statics/styles/default-styles-scss.js +5 -3
  162. package/dist/cjs/plugin-button/statics/styles/default-styles-scss.js.map +2 -2
  163. package/dist/cjs/plugin-button/testkit/button-settings.uni.driver.js +52 -18
  164. package/dist/cjs/plugin-button/testkit/button-settings.uni.driver.js.map +3 -3
  165. package/dist/cjs/plugin-button/testkit/button.testkit.js +15 -1
  166. package/dist/cjs/plugin-button/testkit/button.testkit.js.map +2 -2
  167. package/dist/cjs/plugin-button/tiptap/component.js +53 -5
  168. package/dist/cjs/plugin-button/tiptap/component.js.map +3 -3
  169. package/dist/cjs/plugin-button/tiptap/tiptap.js +19 -1
  170. package/dist/cjs/plugin-button/tiptap/tiptap.js.map +2 -2
  171. package/dist/cjs/plugin-button/viewer/button-viewer.js +8 -6
  172. package/dist/cjs/plugin-button/viewer/button-viewer.js.map +2 -2
  173. package/dist/cjs/plugin-card/card-scss.js +19 -19
  174. package/dist/cjs/plugin-card/card-scss.js.map +1 -1
  175. package/dist/cjs/plugin-card/card-viewer-scss.js +6 -6
  176. package/dist/cjs/plugin-card/card-viewer-scss.js.map +1 -1
  177. package/dist/cjs/plugin-code-block/statics/styles/code-block-scss.js +6 -6
  178. package/dist/cjs/plugin-code-block/statics/styles/code-block-scss.js.map +1 -1
  179. package/dist/cjs/plugin-collapsible-list/statics/styles/collapsible-list-component-scss.js +6 -6
  180. package/dist/cjs/plugin-collapsible-list/statics/styles/collapsible-list-component-scss.js.map +1 -1
  181. package/dist/cjs/plugin-collapsible-list/statics/styles/collapsible-list-pair-scss.js +18 -18
  182. package/dist/cjs/plugin-collapsible-list/statics/styles/collapsible-list-pair-scss.js.map +1 -1
  183. package/dist/cjs/plugin-collapsible-list/statics/styles/collapsible-list-settings-scss.js +2 -2
  184. package/dist/cjs/plugin-collapsible-list/statics/styles/collapsible-list-settings-scss.js.map +1 -1
  185. package/dist/cjs/plugin-collapsible-list/statics/styles/new-pair-button-scss.js +3 -3
  186. package/dist/cjs/plugin-collapsible-list/statics/styles/new-pair-button-scss.js.map +1 -1
  187. package/dist/cjs/plugin-divider/statics/styles/divider-viewer-scss.js +13 -13
  188. package/dist/cjs/plugin-divider/statics/styles/divider-viewer-scss.js.map +1 -1
  189. package/dist/cjs/plugin-divider/toolbar/modals/divider-design-panel-scss.js +1 -1
  190. package/dist/cjs/plugin-divider/toolbar/modals/divider-design-panel-scss.js.map +1 -1
  191. package/dist/cjs/plugin-emoji/modals/emoji-suggestions-modal-scss.js +1 -1
  192. package/dist/cjs/plugin-emoji/modals/emoji-suggestions-modal-scss.js.map +1 -1
  193. package/dist/cjs/plugin-figure/tiptap/caption-scss.js +3 -3
  194. package/dist/cjs/plugin-figure/tiptap/caption-scss.js.map +1 -1
  195. package/dist/cjs/plugin-figure/tiptap/figure-scss.js +3 -3
  196. package/dist/cjs/plugin-figure/tiptap/figure-scss.js.map +1 -1
  197. package/dist/cjs/plugin-file-upload/statics/styles/file-upload-viewer-scss.js +15 -15
  198. package/dist/cjs/plugin-file-upload/statics/styles/file-upload-viewer-scss.js.map +1 -1
  199. package/dist/cjs/plugin-gallery/media/create-gallery-media-url.js +4 -1
  200. package/dist/cjs/plugin-gallery/media/create-gallery-media-url.js.map +2 -2
  201. package/dist/cjs/plugin-gallery/modals/settings/gallery-settings-modal-scss.js +3 -3
  202. package/dist/cjs/plugin-gallery/modals/settings/gallery-settings-modal-scss.js.map +1 -1
  203. package/dist/cjs/plugin-gallery/modals/settings/layout-settings/layout-controls-section/image-ratio-control-scss.js +6 -6
  204. package/dist/cjs/plugin-gallery/modals/settings/layout-settings/layout-controls-section/image-ratio-control-scss.js.map +1 -1
  205. package/dist/cjs/plugin-gallery/modals/settings/layout-settings/layout-controls-section/thumbnail-alignment-control-scss.js +5 -5
  206. package/dist/cjs/plugin-gallery/modals/settings/layout-settings/layout-controls-section/thumbnail-alignment-control-scss.js.map +1 -1
  207. package/dist/cjs/plugin-gallery/modals/settings/media-settings/media-list/sortable-item-scss.js +1 -1
  208. package/dist/cjs/plugin-gallery/modals/settings/media-settings/media-list/sortable-item-scss.js.map +1 -1
  209. package/dist/cjs/plugin-gallery/modals/settings/media-settings/media-list/sortable-list-scss.js +3 -3
  210. package/dist/cjs/plugin-gallery/modals/settings/media-settings/media-list/sortable-list-scss.js.map +1 -1
  211. package/dist/cjs/plugin-gallery/statics/styles/gallery-component-scss.js +1 -1
  212. package/dist/cjs/plugin-gallery/statics/styles/gallery-component-scss.js.map +1 -1
  213. package/dist/cjs/plugin-gallery/statics/styles/gallery-media-scss.js +21 -21
  214. package/dist/cjs/plugin-gallery/statics/styles/gallery-media-scss.js.map +1 -1
  215. package/dist/cjs/plugin-gallery/statics/styles/viewer-scss.js +1 -1
  216. package/dist/cjs/plugin-gallery/statics/styles/viewer-scss.js.map +1 -1
  217. package/dist/cjs/plugin-gallery/viewer/layout-collage-scss.js +5 -5
  218. package/dist/cjs/plugin-gallery/viewer/layout-collage-scss.js.map +1 -1
  219. package/dist/cjs/plugin-gallery/viewer/layout-column-scss.js +4 -4
  220. package/dist/cjs/plugin-gallery/viewer/layout-column-scss.js.map +1 -1
  221. package/dist/cjs/plugin-gallery/viewer/layout-fullsize-scss.js +4 -4
  222. package/dist/cjs/plugin-gallery/viewer/layout-fullsize-scss.js.map +1 -1
  223. package/dist/cjs/plugin-gallery/viewer/layout-grid-scss.js +2 -2
  224. package/dist/cjs/plugin-gallery/viewer/layout-grid-scss.js.map +1 -1
  225. package/dist/cjs/plugin-gallery/viewer/layout-masonry-scss.js +7 -7
  226. package/dist/cjs/plugin-gallery/viewer/layout-masonry-scss.js.map +1 -1
  227. package/dist/cjs/plugin-gallery/viewer/layout-panorama-scss.js +1 -1
  228. package/dist/cjs/plugin-gallery/viewer/layout-panorama-scss.js.map +1 -1
  229. package/dist/cjs/plugin-gallery/viewer/layout-slider-scss.js +6 -6
  230. package/dist/cjs/plugin-gallery/viewer/layout-slider-scss.js.map +1 -1
  231. package/dist/cjs/plugin-gallery/viewer/layout-thumbnail-scss.js +11 -11
  232. package/dist/cjs/plugin-gallery/viewer/layout-thumbnail-scss.js.map +1 -1
  233. package/dist/cjs/plugin-giphy/components/giphy-selector-scss.js +9 -9
  234. package/dist/cjs/plugin-giphy/components/giphy-selector-scss.js.map +1 -1
  235. package/dist/cjs/plugin-giphy/viewer/giphy-viewer-scss.js +4 -4
  236. package/dist/cjs/plugin-giphy/viewer/giphy-viewer-scss.js.map +1 -1
  237. package/dist/cjs/plugin-giphy/viewer/play-icon-scss.js +2 -2
  238. package/dist/cjs/plugin-giphy/viewer/play-icon-scss.js.map +1 -1
  239. package/dist/cjs/plugin-hashtag/statics/hashtag-scss.js +2 -2
  240. package/dist/cjs/plugin-hashtag/statics/hashtag-scss.js.map +1 -1
  241. package/dist/cjs/plugin-headings/dropdown/headings-dropdown-scss.js +5 -5
  242. package/dist/cjs/plugin-headings/dropdown/headings-dropdown-scss.js.map +1 -1
  243. package/dist/cjs/plugin-html/statics/styles/HtmlComponent-scss.js +2 -2
  244. package/dist/cjs/plugin-html/statics/styles/HtmlComponent-scss.js.map +1 -1
  245. package/dist/cjs/plugin-html/statics/styles/Iframe-scss.js +1 -1
  246. package/dist/cjs/plugin-html/statics/styles/Iframe-scss.js.map +1 -1
  247. package/dist/cjs/plugin-html/tiptap/ai-widget-scss.js +2 -2
  248. package/dist/cjs/plugin-html/tiptap/ai-widget-scss.js.map +1 -1
  249. package/dist/cjs/plugin-html/tiptap/loader-scss.js +9 -9
  250. package/dist/cjs/plugin-html/tiptap/loader-scss.js.map +1 -1
  251. package/dist/cjs/plugin-html/tiptap/preset-bar/preset-bar-scss.js +2 -2
  252. package/dist/cjs/plugin-html/tiptap/preset-bar/preset-bar-scss.js.map +1 -1
  253. package/dist/cjs/plugin-html/viewer/html-viewer.js +67 -5
  254. package/dist/cjs/plugin-html/viewer/html-viewer.js.map +2 -2
  255. package/dist/cjs/plugin-image/components/corner-radius-handles-scss.js +4 -4
  256. package/dist/cjs/plugin-image/components/corner-radius-handles-scss.js.map +1 -1
  257. package/dist/cjs/plugin-image/components/crop-edge-handles-scss.js +1 -1
  258. package/dist/cjs/plugin-image/components/crop-edge-handles-scss.js.map +1 -1
  259. package/dist/cjs/plugin-image/context.js +2 -4
  260. package/dist/cjs/plugin-image/context.js.map +2 -2
  261. package/dist/cjs/plugin-image/crop-overlay/crop-overlay-scss.js +14 -14
  262. package/dist/cjs/plugin-image/crop-overlay/crop-overlay-scss.js.map +1 -1
  263. package/dist/cjs/plugin-image/fetch-media-token.js +22 -9
  264. package/dist/cjs/plugin-image/fetch-media-token.js.map +2 -2
  265. package/dist/cjs/plugin-image/get-toolbar-buttons.js +4 -1
  266. package/dist/cjs/plugin-image/get-toolbar-buttons.js.map +2 -2
  267. package/dist/cjs/plugin-image/statics/styles/image-viewer-scss.js +20 -20
  268. package/dist/cjs/plugin-image/statics/styles/image-viewer-scss.js.map +1 -1
  269. package/dist/cjs/plugin-image/statics/styles/settings-modal-scss.js +1 -1
  270. package/dist/cjs/plugin-image/statics/styles/settings-modal-scss.js.map +1 -1
  271. package/dist/cjs/plugin-image/toolbar/shape-crop-modal-scss.js +4 -4
  272. package/dist/cjs/plugin-image/toolbar/shape-crop-modal-scss.js.map +1 -1
  273. package/dist/cjs/plugin-inline-ai/ai-selection-tooltip-scss.js +10 -10
  274. package/dist/cjs/plugin-inline-ai/ai-selection-tooltip-scss.js.map +1 -1
  275. package/dist/cjs/plugin-inline-ai/aria-avatar-row-scss.js +1 -1
  276. package/dist/cjs/plugin-inline-ai/aria-avatar-row-scss.js.map +1 -1
  277. package/dist/cjs/plugin-inline-ai/aria-surface-row-scss.js +4 -4
  278. package/dist/cjs/plugin-inline-ai/aria-surface-row-scss.js.map +1 -1
  279. package/dist/cjs/plugin-inline-ai/html-placeholder-scss.js +3 -3
  280. package/dist/cjs/plugin-inline-ai/html-placeholder-scss.js.map +1 -1
  281. package/dist/cjs/plugin-inline-ai/modal-scss.js +9 -9
  282. package/dist/cjs/plugin-inline-ai/modal-scss.js.map +1 -1
  283. package/dist/cjs/plugin-inline-ai/pending-widget-placeholder-scss.js +12 -12
  284. package/dist/cjs/plugin-inline-ai/pending-widget-placeholder-scss.js.map +1 -1
  285. package/dist/cjs/plugin-inline-ai/spinner-scss.js +2 -2
  286. package/dist/cjs/plugin-inline-ai/spinner-scss.js.map +1 -1
  287. package/dist/cjs/plugin-inline-ai/toolbar/toolbar-button-scss.js +2 -2
  288. package/dist/cjs/plugin-inline-ai/toolbar/toolbar-button-scss.js.map +1 -1
  289. package/dist/cjs/plugin-line-spacing/custom-spacing-editor-modal/custom-spacing-editor-modal-scss.js +1 -1
  290. package/dist/cjs/plugin-line-spacing/custom-spacing-editor-modal/custom-spacing-editor-modal-scss.js.map +1 -1
  291. package/dist/cjs/plugin-link/statics/link-viewer-scss.js +4 -4
  292. package/dist/cjs/plugin-link/statics/link-viewer-scss.js.map +1 -1
  293. package/dist/cjs/plugin-link/toolbar/anchor-link-button-scss.js +1 -1
  294. package/dist/cjs/plugin-link/toolbar/anchor-link-button-scss.js.map +1 -1
  295. package/dist/cjs/plugin-link-preview/statics/styles/insert-modal-scss.js +1 -1
  296. package/dist/cjs/plugin-link-preview/statics/styles/insert-modal-scss.js.map +1 -1
  297. package/dist/cjs/plugin-link-preview/statics/styles/link-preview-scss.js +18 -18
  298. package/dist/cjs/plugin-link-preview/statics/styles/link-preview-scss.js.map +1 -1
  299. package/dist/cjs/plugin-link-preview/statics/styles/settings-modal-scss.js +1 -1
  300. package/dist/cjs/plugin-link-preview/statics/styles/settings-modal-scss.js.map +1 -1
  301. package/dist/cjs/plugin-mentions/statics/mention-list-scss.js +3 -3
  302. package/dist/cjs/plugin-mentions/statics/mention-list-scss.js.map +1 -1
  303. package/dist/cjs/plugin-mentions/statics/mentions-scss.js +4 -4
  304. package/dist/cjs/plugin-mentions/statics/mentions-scss.js.map +1 -1
  305. package/dist/cjs/plugin-paywall/paywall-fallback-scss.js +1 -1
  306. package/dist/cjs/plugin-paywall/paywall-fallback-scss.js.map +1 -1
  307. package/dist/cjs/plugin-smart-block/components/cell-accessory-scss.js +22 -22
  308. package/dist/cjs/plugin-smart-block/components/cell-accessory-scss.js.map +1 -1
  309. package/dist/cjs/plugin-smart-block/components/cell-quote-glyph-scss.js +3 -3
  310. package/dist/cjs/plugin-smart-block/components/cell-quote-glyph-scss.js.map +1 -1
  311. package/dist/cjs/plugin-smart-block/components/cell-star-rating-scss.js +4 -4
  312. package/dist/cjs/plugin-smart-block/components/cell-star-rating-scss.js.map +1 -1
  313. package/dist/cjs/plugin-smart-block/components/cell-stat-scss.js +20 -20
  314. package/dist/cjs/plugin-smart-block/components/cell-stat-scss.js.map +1 -1
  315. package/dist/cjs/plugin-smart-block/components/circle-donut-scss.js +7 -7
  316. package/dist/cjs/plugin-smart-block/components/circle-donut-scss.js.map +1 -1
  317. package/dist/cjs/plugin-smart-block/components/shape-overlay-scss.js +1 -1
  318. package/dist/cjs/plugin-smart-block/components/shape-overlay-scss.js.map +1 -1
  319. package/dist/cjs/plugin-smart-block/components/smart-block-view-scss.js +50 -50
  320. package/dist/cjs/plugin-smart-block/components/smart-block-view-scss.js.map +1 -1
  321. package/dist/cjs/plugin-smart-block/components/stars-scss.js +8 -8
  322. package/dist/cjs/plugin-smart-block/components/stars-scss.js.map +1 -1
  323. package/dist/cjs/plugin-smart-block/modals/variant-picker-scss.js +7 -7
  324. package/dist/cjs/plugin-smart-block/modals/variant-picker-scss.js.map +1 -1
  325. package/dist/cjs/plugin-smart-block/tiptap/smart-block-editor-scss.js +13 -13
  326. package/dist/cjs/plugin-smart-block/tiptap/smart-block-editor-scss.js.map +1 -1
  327. package/dist/cjs/plugin-social-polls/components/image-upload/image-upload-scss.js +9 -9
  328. package/dist/cjs/plugin-social-polls/components/image-upload/image-upload-scss.js.map +1 -1
  329. package/dist/cjs/plugin-social-polls/components/insert-modal/insert-modal-scss.js +1 -1
  330. package/dist/cjs/plugin-social-polls/components/insert-modal/insert-modal-scss.js.map +1 -1
  331. package/dist/cjs/plugin-social-polls/components/poll-header/poll-header-scss.js +3 -3
  332. package/dist/cjs/plugin-social-polls/components/poll-header/poll-header-scss.js.map +1 -1
  333. package/dist/cjs/plugin-social-polls/components/poll-option/option-scss.js +23 -23
  334. package/dist/cjs/plugin-social-polls/components/poll-option/option-scss.js.map +1 -1
  335. package/dist/cjs/plugin-social-polls/components/poll-option/webview/option-webview-scss.js +24 -24
  336. package/dist/cjs/plugin-social-polls/components/poll-option/webview/option-webview-scss.js.map +1 -1
  337. package/dist/cjs/plugin-social-polls/components/poll-scss.js +19 -19
  338. package/dist/cjs/plugin-social-polls/components/poll-scss.js.map +1 -1
  339. package/dist/cjs/plugin-social-polls/components/settings-modal/settings-modal-scss.js +2 -2
  340. package/dist/cjs/plugin-social-polls/components/settings-modal/settings-modal-scss.js.map +1 -1
  341. package/dist/cjs/plugin-social-polls/components/text-field/text-field-scss.js +12 -12
  342. package/dist/cjs/plugin-social-polls/components/text-field/text-field-scss.js.map +1 -1
  343. package/dist/cjs/plugin-social-polls/components/voted-users/voted-users-scss.js +20 -20
  344. package/dist/cjs/plugin-social-polls/components/voted-users/voted-users-scss.js.map +1 -1
  345. package/dist/cjs/plugin-spoiler/statics/styles/spoiler-scss.js +18 -18
  346. package/dist/cjs/plugin-spoiler/statics/styles/spoiler-scss.js.map +1 -1
  347. package/dist/cjs/plugin-table/modals/table-grid-selector-scss.js +5 -5
  348. package/dist/cjs/plugin-table/modals/table-grid-selector-scss.js.map +1 -1
  349. package/dist/cjs/plugin-table/statics/styles/cell-scss.js +15 -15
  350. package/dist/cjs/plugin-table/statics/styles/cell-scss.js.map +1 -1
  351. package/dist/cjs/plugin-table/statics/styles/resizer-scss.js +18 -18
  352. package/dist/cjs/plugin-table/statics/styles/resizer-scss.js.map +1 -1
  353. package/dist/cjs/plugin-table/statics/styles/table-settings-modal-scss.js +1 -1
  354. package/dist/cjs/plugin-table/statics/styles/table-settings-modal-scss.js.map +1 -1
  355. package/dist/cjs/plugin-table/statics/styles/table-viewer-scss.js +6 -6
  356. package/dist/cjs/plugin-table/statics/styles/table-viewer-scss.js.map +1 -1
  357. package/dist/cjs/plugin-table/tiptap/decorations/tableHandles-scss.js +9 -9
  358. package/dist/cjs/plugin-table/tiptap/decorations/tableHandles-scss.js.map +1 -1
  359. package/dist/cjs/plugin-table/tiptap/plugins/table-scss.js +33 -33
  360. package/dist/cjs/plugin-table/tiptap/plugins/table-scss.js.map +1 -1
  361. package/dist/cjs/plugin-table/toolbar/modals/border-scope-selector-scss.js +2 -2
  362. package/dist/cjs/plugin-table/toolbar/modals/border-scope-selector-scss.js.map +1 -1
  363. package/dist/cjs/plugin-text-color/text-button-color-scss.js +2 -2
  364. package/dist/cjs/plugin-text-color/text-button-color-scss.js.map +1 -1
  365. package/dist/cjs/plugin-toc/toc-view-scss.js +2 -2
  366. package/dist/cjs/plugin-toc/toc-view-scss.js.map +1 -1
  367. package/dist/cjs/plugin-vertical-embed/components/Ribbon-scss.js +3 -3
  368. package/dist/cjs/plugin-vertical-embed/components/Ribbon-scss.js.map +1 -1
  369. package/dist/cjs/plugin-vertical-embed/components/card-content-scss.js +23 -23
  370. package/dist/cjs/plugin-vertical-embed/components/card-content-scss.js.map +1 -1
  371. package/dist/cjs/plugin-vertical-embed/components/card-scss.js +19 -19
  372. package/dist/cjs/plugin-vertical-embed/components/card-scss.js.map +1 -1
  373. package/dist/cjs/plugin-vertical-embed/components/description-scss.js +2 -2
  374. package/dist/cjs/plugin-vertical-embed/components/description-scss.js.map +1 -1
  375. package/dist/cjs/plugin-vertical-embed/modals/settings-modal-scss.js +2 -2
  376. package/dist/cjs/plugin-vertical-embed/modals/settings-modal-scss.js.map +1 -1
  377. package/dist/cjs/plugin-vertical-embed/tiptap/component-scss.js +10 -10
  378. package/dist/cjs/plugin-vertical-embed/tiptap/component-scss.js.map +1 -1
  379. package/dist/cjs/plugin-vertical-embed/toolbar/items-list-scss.js +1 -1
  380. package/dist/cjs/plugin-vertical-embed/toolbar/items-list-scss.js.map +1 -1
  381. package/dist/cjs/plugin-vertical-embed/viewer/vertical-embed-viewer-scss.js +6 -6
  382. package/dist/cjs/plugin-vertical-embed/viewer/vertical-embed-viewer-scss.js.map +1 -1
  383. package/dist/cjs/plugin-video/statics/styles/default-video-styles-scss.js +8 -8
  384. package/dist/cjs/plugin-video/statics/styles/default-video-styles-scss.js.map +1 -1
  385. package/dist/cjs/plugin-video/statics/styles/video-viewer-scss.js +3 -3
  386. package/dist/cjs/plugin-video/statics/styles/video-viewer-scss.js.map +1 -1
  387. package/dist/cjs/plugin-video/toolbar/embed-video-scss.js +1 -1
  388. package/dist/cjs/plugin-video/toolbar/embed-video-scss.js.map +1 -1
  389. package/dist/cjs/ricos-common-plugins/font-size/dropdown/font-size-dropdown-scss.js +1 -1
  390. package/dist/cjs/ricos-common-plugins/font-size/dropdown/font-size-dropdown-scss.js.map +1 -1
  391. package/dist/cjs/ricos-common-plugins/gap-spacer/gap-spacer-component/gap-spacer-styles-scss.js +8 -8
  392. package/dist/cjs/ricos-common-plugins/gap-spacer/gap-spacer-component/gap-spacer-styles-scss.js.map +1 -1
  393. package/dist/cjs/ricos-common-plugins/layout/layout-node-view.js +3 -13
  394. package/dist/cjs/ricos-common-plugins/layout/layout-node-view.js.map +2 -2
  395. package/dist/cjs/ricos-common-plugins/layout/layouts-scss.js +33 -33
  396. package/dist/cjs/ricos-common-plugins/layout/layouts-scss.js.map +2 -2
  397. package/dist/cjs/ricos-common-plugins/layout/section-dividers/section-dividers-panel-scss.js +2 -2
  398. package/dist/cjs/ricos-common-plugins/layout/section-dividers/section-dividers-panel-scss.js.map +1 -1
  399. package/dist/cjs/ricos-common-plugins/layout/section-dividers/section-dividers-scss.js +4 -4
  400. package/dist/cjs/ricos-common-plugins/layout/section-dividers/section-dividers-scss.js.map +1 -1
  401. package/dist/cjs/ricos-common-plugins/quick-actions/modal/modal-scss.js +2 -2
  402. package/dist/cjs/ricos-common-plugins/quick-actions/modal/modal-scss.js.map +1 -1
  403. package/dist/cjs/ricos-common-plugins/statics/styles-scss.js +18 -18
  404. package/dist/cjs/ricos-common-plugins/statics/styles-scss.js.map +1 -1
  405. package/dist/cjs/ricos-common-plugins/title/headings-scss.js +8 -8
  406. package/dist/cjs/ricos-common-plugins/title/headings-scss.js.map +1 -1
  407. package/dist/cjs/ricos-content/velo-adapter/nativeElements/add-image.js.map +2 -2
  408. package/dist/cjs/ricos-editor/statics/styles/editor-styles-scss.js +9 -9
  409. package/dist/cjs/ricos-editor/statics/styles/editor-styles-scss.js.map +1 -1
  410. package/dist/cjs/ricos-editor/tiptap/ricos-editor.js +3 -1
  411. package/dist/cjs/ricos-editor/tiptap/ricos-editor.js.map +2 -2
  412. package/dist/cjs/ricos-media/resolve-file-url.js +20 -13
  413. package/dist/cjs/ricos-media/resolve-file-url.js.map +2 -2
  414. package/dist/cjs/ricos-modals/statics/styles/drawer-scss.js +9 -9
  415. package/dist/cjs/ricos-modals/statics/styles/drawer-scss.js.map +1 -1
  416. package/dist/cjs/ricos-modals/statics/styles/fullscreen-scss.js +1 -1
  417. package/dist/cjs/ricos-modals/statics/styles/fullscreen-scss.js.map +1 -1
  418. package/dist/cjs/ricos-modals/statics/styles/popper-scss.js +3 -3
  419. package/dist/cjs/ricos-modals/statics/styles/popper-scss.js.map +1 -1
  420. package/dist/cjs/ricos-schema/next-schema/jtd-to-ts.js +12 -4
  421. package/dist/cjs/ricos-schema/next-schema/jtd-to-ts.js.map +2 -2
  422. package/dist/cjs/ricos-schema/next-schema/version.js +1 -1
  423. package/dist/cjs/ricos-schema/next-schema/version.js.map +1 -1
  424. package/dist/cjs/ricos-styles/statics/styles/style-presets-scss.js +4 -4
  425. package/dist/cjs/ricos-styles/statics/styles/style-presets-scss.js.map +1 -1
  426. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/blockquote/blockquote-scss.js +3 -3
  427. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/blockquote/blockquote-scss.js.map +1 -1
  428. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/codeblock/codeblock-scss.js +3 -3
  429. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/codeblock/codeblock-scss.js.map +1 -1
  430. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/heading/heading-scss.js +9 -9
  431. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/heading/heading-scss.js.map +1 -1
  432. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/layout/layout-scss.js +10 -10
  433. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/layout/layout-scss.js.map +1 -1
  434. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/lists/lists-scss.js +6 -6
  435. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/lists/lists-scss.js.map +1 -1
  436. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/paragraph/paragraph-scss.js +4 -4
  437. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/paragraph/paragraph-scss.js.map +1 -1
  438. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/plugins/link-viewer-wrapper-scss.js +2 -2
  439. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/plugins/link-viewer-wrapper-scss.js.map +1 -1
  440. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/plugins/plugin-scss.js +15 -15
  441. package/dist/cjs/ricos-viewer-next/ContentViewer/rericos/renderers/plugins/plugin-scss.js.map +1 -1
  442. package/dist/cjs/ricos-viewer-next/modals/fullscreen/fullscreen-carousel.js +2 -1
  443. package/dist/cjs/ricos-viewer-next/modals/fullscreen/fullscreen-carousel.js.map +2 -2
  444. package/dist/cjs/ricos-viewer-next/modals/fullscreen/fullscreen-scss.js +12 -12
  445. package/dist/cjs/ricos-viewer-next/modals/fullscreen/fullscreen-scss.js.map +1 -1
  446. package/dist/cjs/ricos-viewer-next/statics/alignment-scss.js +16 -16
  447. package/dist/cjs/ricos-viewer-next/statics/alignment-scss.js.map +1 -1
  448. package/dist/cjs/ricos-viewer-next/statics/indentation-scss.js +7 -7
  449. package/dist/cjs/ricos-viewer-next/statics/indentation-scss.js.map +1 -1
  450. package/dist/cjs/ricos-viewer-next/statics/rich-content-viewer-scss.js +9 -9
  451. package/dist/cjs/ricos-viewer-next/statics/rich-content-viewer-scss.js.map +1 -1
  452. package/dist/cjs/ricos-viewer-next/statics/rtl-scss.js +2 -2
  453. package/dist/cjs/ricos-viewer-next/statics/rtl-scss.js.map +1 -1
  454. package/dist/cjs/ricos-viewer-next/testkit.js +1 -0
  455. package/dist/cjs/ricos-viewer-next/testkit.js.map +2 -2
  456. package/dist/cjs/text-selection-toolbar/statics/styles/viewer-inline-toolbar-scss.js +2 -2
  457. package/dist/cjs/text-selection-toolbar/statics/styles/viewer-inline-toolbar-scss.js.map +1 -1
  458. package/dist/cjs/tiptap-editor/statics/styles/tiptap-editor-styles-scss.js +13 -13
  459. package/dist/cjs/tiptap-editor/statics/styles/tiptap-editor-styles-scss.js.map +1 -1
  460. package/dist/cjs/tiptap-extensions/placeholder-scss.js +1 -1
  461. package/dist/cjs/tiptap-extensions/placeholder-scss.js.map +1 -1
  462. package/dist/cjs/tiptap-extensions/statics/styles-scss.js +4 -4
  463. package/dist/cjs/tiptap-extensions/statics/styles-scss.js.map +1 -1
  464. package/dist/cjs/toolbars-v3/components/InsertPluginToolbar/insert-plugin-toolbar-scss.js +1 -1
  465. package/dist/cjs/toolbars-v3/components/InsertPluginToolbar/insert-plugin-toolbar-scss.js.map +1 -1
  466. package/dist/cjs/toolbars-v3/components/Toolbar/RicosDesktopToolbar/OverflownButtons-scss.js +3 -3
  467. package/dist/cjs/toolbars-v3/components/Toolbar/RicosDesktopToolbar/OverflownButtons-scss.js.map +1 -1
  468. package/dist/cjs/toolbars-v3/components/Toolbar/RicosDesktopToolbar/RicosDesktopToolbar-scss.js +3 -3
  469. package/dist/cjs/toolbars-v3/components/Toolbar/RicosDesktopToolbar/RicosDesktopToolbar-scss.js.map +1 -1
  470. package/dist/cjs/toolbars-v3/components/Toolbar/RicosDesktopToolbar/RicosDesktopToolbarWrapper-scss.js +4 -4
  471. package/dist/cjs/toolbars-v3/components/Toolbar/RicosDesktopToolbar/RicosDesktopToolbarWrapper-scss.js.map +1 -1
  472. package/dist/cjs/toolbars-v3/components/Toolbar/RicosMobileToolbar/RicosMobileToolbar-scss.js +9 -9
  473. package/dist/cjs/toolbars-v3/components/Toolbar/RicosMobileToolbar/RicosMobileToolbar-scss.js.map +1 -1
  474. package/dist/cjs/toolbars-v3/components/Toolbar/RicosMobileToolbar/mobile-toolbar-overlay/mobile-toolbar-overlay-scss.js +1 -1
  475. package/dist/cjs/toolbars-v3/components/Toolbar/RicosMobileToolbar/mobile-toolbar-overlay/mobile-toolbar-overlay-scss.js.map +1 -1
  476. package/dist/cjs/toolbars-v3/components/buttons/AddPluginMenuButtons/AddPluginMenuMobileButton-scss.js +1 -1
  477. package/dist/cjs/toolbars-v3/components/buttons/AddPluginMenuButtons/AddPluginMenuMobileButton-scss.js.map +1 -1
  478. package/dist/cjs/toolbars-v3/components/buttons/FontSizeButton/FontSizeButton-scss.js +5 -5
  479. package/dist/cjs/toolbars-v3/components/buttons/FontSizeButton/FontSizeButton-scss.js.map +1 -1
  480. package/dist/cjs/toolbars-v3/modals/FloatingPluginMenu/styles/floating-add-plugin-menu-scss.js +6 -6
  481. package/dist/cjs/toolbars-v3/modals/FloatingPluginMenu/styles/floating-add-plugin-menu-scss.js.map +1 -1
  482. package/dist/cjs/toolbars-v3/ricos-toolbars/footer/FooterToolbar-scss.js +1 -1
  483. package/dist/cjs/toolbars-v3/ricos-toolbars/footer/FooterToolbar-scss.js.map +1 -1
  484. package/dist/cjs/toolbars-v3/ricos-toolbars/formatting/use-toolbars-items-config.js.map +2 -2
  485. package/dist/cjs/ui-components/Components/Image-scss.js +1 -1
  486. package/dist/cjs/ui-components/Components/Image-scss.js.map +1 -1
  487. package/dist/cjs/ui-components/Components/double-loader-scss.js +4 -4
  488. package/dist/cjs/ui-components/Components/double-loader-scss.js.map +1 -1
  489. package/dist/cjs/ui-components/color-picker/button-color-swatches/button-color-swatches-scss.js +2 -2
  490. package/dist/cjs/ui-components/color-picker/button-color-swatches/button-color-swatches-scss.js.map +1 -1
  491. package/dist/cjs/ui-components/color-picker/new-color-picker/components/gradient-picker/gradient-picker-scss.js +13 -13
  492. package/dist/cjs/ui-components/color-picker/new-color-picker/components/gradient-picker/gradient-picker-scss.js.map +1 -1
  493. package/dist/cjs/ui-components/color-picker/new-color-picker/components/new-color-swatches/new-color-swatches-scss.js +1 -1
  494. package/dist/cjs/ui-components/color-picker/new-color-picker/components/new-color-swatches/new-color-swatches-scss.js.map +1 -1
  495. package/dist/cjs/ui-components/color-picker/new-color-picker/components/simple-color-picker/simple-color-picker-scss.js +2 -2
  496. package/dist/cjs/ui-components/color-picker/new-color-picker/components/simple-color-picker/simple-color-picker-scss.js.map +1 -1
  497. package/dist/cjs/ui-components/color-picker/new-color-picker/components/single-color-swatch/single-color-swatch-scss.js +2 -2
  498. package/dist/cjs/ui-components/color-picker/new-color-picker/components/single-color-swatch/single-color-swatch-scss.js.map +1 -1
  499. package/dist/cjs/ui-components/color-picker/new-color-picker/new-color-picker-scss.js +1 -1
  500. package/dist/cjs/ui-components/color-picker/new-color-picker/new-color-picker-scss.js.map +1 -1
  501. package/dist/cjs/ui-components/input-with-slider/input-with-slider-scss.js +1 -1
  502. package/dist/cjs/ui-components/input-with-slider/input-with-slider-scss.js.map +1 -1
  503. package/dist/cjs/ui-components/layout-background-loader/layout-background-loader-scss.js +3 -3
  504. package/dist/cjs/ui-components/layout-background-loader/layout-background-loader-scss.js.map +1 -1
  505. package/dist/cjs/ui-components/modal-layout/floating-layout/floating-desktop-layout-scss.js +1 -1
  506. package/dist/cjs/ui-components/modal-layout/floating-layout/floating-desktop-layout-scss.js.map +1 -1
  507. package/dist/cjs/ui-components/modal-layout/fullscreen-mobile-layout/fullscreen-mobile-layout-scss.js +4 -4
  508. package/dist/cjs/ui-components/modal-layout/fullscreen-mobile-layout/fullscreen-mobile-layout-scss.js.map +1 -1
  509. package/dist/cjs/ui-components/panel/panel-scss.js +2 -2
  510. package/dist/cjs/ui-components/panel/panel-scss.js.map +1 -1
  511. package/dist/cjs/ui-components/panel-header/panel-header-scss.js +1 -1
  512. package/dist/cjs/ui-components/panel-header/panel-header-scss.js.map +1 -1
  513. package/dist/cjs/ui-components/settings-panel-discard-modal/settings-panel-discard-modal-scss.js +1 -1
  514. package/dist/cjs/ui-components/settings-panel-discard-modal/settings-panel-discard-modal-scss.js.map +1 -1
  515. package/dist/cjs/ui-components/statics/styles/generic-error-scss.js +1 -1
  516. package/dist/cjs/ui-components/statics/styles/generic-error-scss.js.map +1 -1
  517. package/dist/cjs/ui-components/statics/styles/loaders-scss.js +8 -8
  518. package/dist/cjs/ui-components/statics/styles/loaders-scss.js.map +1 -1
  519. package/dist/cjs/ui-components/statics/styles/media-item-error-msg-scss.js +3 -3
  520. package/dist/cjs/ui-components/statics/styles/media-item-error-msg-scss.js.map +1 -1
  521. package/dist/cjs/ui-components/statics/styles/slider-scss.js +5 -5
  522. package/dist/cjs/ui-components/statics/styles/slider-scss.js.map +1 -1
  523. package/dist/cjs/ui-components/thumbnail-picker/thumbnail-picker-scss.js +1 -1
  524. package/dist/cjs/ui-components/thumbnail-picker/thumbnail-picker-scss.js.map +1 -1
  525. package/dist/cjs/ui-components/wixel-assistant/assistant-timeline-scss.js +16 -16
  526. package/dist/cjs/ui-components/wixel-assistant/assistant-timeline-scss.js.map +1 -1
  527. package/dist/cjs/wix-rich-content-common/statics/styles/fonts-scss.js +1 -1
  528. package/dist/cjs/wix-rich-content-common/statics/styles/fonts-scss.js.map +1 -1
  529. package/dist/cjs/wix-rich-content-common/statics/styles/general-scss.js +11 -11
  530. package/dist/cjs/wix-rich-content-common/statics/styles/general-scss.js.map +1 -1
  531. package/dist/es/_shared/dropdown-modal/dropdown-modal-scss.js +5 -5
  532. package/dist/es/_shared/dropdown-modal/dropdown-modal-scss.js.map +1 -1
  533. package/dist/es/_shared/figure/add-caption-button-scss.js +11 -11
  534. package/dist/es/_shared/figure/add-caption-button-scss.js.map +1 -1
  535. package/dist/es/_shared/figure/viewer-caption-scss.js +2 -2
  536. package/dist/es/_shared/figure/viewer-caption-scss.js.map +1 -1
  537. package/dist/es/_shared/figure/viewer-figure-scss.js +1 -1
  538. package/dist/es/_shared/figure/viewer-figure-scss.js.map +1 -1
  539. package/dist/es/_shared/get-lock-icon.js +5 -0
  540. package/dist/es/_shared/get-lock-icon.js.map +7 -0
  541. package/dist/es/_shared/link-modal/open-link-modal/modal-desktop.js +3 -2
  542. package/dist/es/_shared/link-modal/open-link-modal/modal-desktop.js.map +2 -2
  543. package/dist/es/_shared/link-modal/open-link-modal/modal-mobile.js +3 -2
  544. package/dist/es/_shared/link-modal/open-link-modal/modal-mobile.js.map +2 -2
  545. package/dist/es/_shared/link-modal/open-link-modal.js +4 -2
  546. package/dist/es/_shared/link-modal/open-link-modal.js.map +2 -2
  547. package/dist/es/_shared/link-modal/toggle-link-modal.js +4 -2
  548. package/dist/es/_shared/link-modal/toggle-link-modal.js.map +2 -2
  549. package/dist/es/_shared/list-item-divider/list-item-divider-scss.js +3 -3
  550. package/dist/es/_shared/list-item-divider/list-item-divider-scss.js.map +1 -1
  551. package/dist/es/_shared/list-item-select/list-item-select-scss.js +4 -4
  552. package/dist/es/_shared/list-item-select/list-item-select-scss.js.map +1 -1
  553. package/dist/es/_shared/list-item-toggle/list-item-toggle-scss.js +5 -5
  554. package/dist/es/_shared/list-item-toggle/list-item-toggle-scss.js.map +1 -1
  555. package/dist/es/_shared/overlay-hoc/overlay-hoc-scss.js +3 -3
  556. package/dist/es/_shared/overlay-hoc/overlay-hoc-scss.js.map +1 -1
  557. package/dist/es/_shared/plugin-toolbar/create-link-button.js +11 -11
  558. package/dist/es/_shared/plugin-toolbar/create-link-button.js.map +2 -2
  559. package/dist/es/_shared/plugin-toolbar/plugin-toolbar-buttons-ids.js +1 -0
  560. package/dist/es/_shared/plugin-toolbar/plugin-toolbar-buttons-ids.js.map +2 -2
  561. package/dist/es/_shared/plugin-toolbar/separator/toolbar-button-separator-scss.js +4 -4
  562. package/dist/es/_shared/plugin-toolbar/separator/toolbar-button-separator-scss.js.map +1 -1
  563. package/dist/es/_shared/plugin-toolbar/url-link-button/url-link-button-scss.js +4 -4
  564. package/dist/es/_shared/plugin-toolbar/url-link-button/url-link-button-scss.js.map +1 -1
  565. package/dist/es/_shared/prompt-input-area/attachment-bar/attachment-bar-scss.js +9 -9
  566. package/dist/es/_shared/prompt-input-area/attachment-bar/attachment-bar-scss.js.map +1 -1
  567. package/dist/es/_shared/prompt-input-area/prompt-input-area-scss.js +15 -15
  568. package/dist/es/_shared/prompt-input-area/prompt-input-area-scss.js.map +1 -1
  569. package/dist/es/_shared/prompt-input-area/widget-prompt-input-area-scss.js +10 -10
  570. package/dist/es/_shared/prompt-input-area/widget-prompt-input-area-scss.js.map +1 -1
  571. package/dist/es/_shared/request-service-provider/consts.js +0 -2
  572. package/dist/es/_shared/request-service-provider/consts.js.map +2 -2
  573. package/dist/es/_shared/request-service-provider/create-instance-wix-client.js +27 -0
  574. package/dist/es/_shared/request-service-provider/create-instance-wix-client.js.map +7 -0
  575. package/dist/es/_shared/request-service-provider/media-manager-uploader.js +58 -35
  576. package/dist/es/_shared/request-service-provider/media-manager-uploader.js.map +2 -2
  577. package/dist/es/_shared/request-service-provider/parse-instance.js.map +2 -2
  578. package/dist/es/_shared/request-service-provider/use-get-wix-client-promise.js +2 -10
  579. package/dist/es/_shared/request-service-provider/use-get-wix-client-promise.js.map +2 -2
  580. package/dist/es/_shared/shape-select-modal/shape-select-modal-content-scss.js +9 -9
  581. package/dist/es/_shared/shape-select-modal/shape-select-modal-content-scss.js.map +1 -1
  582. package/dist/es/_shared/shape-view-renderer/shape-view-renderer-scss.js +4 -4
  583. package/dist/es/_shared/shape-view-renderer/shape-view-renderer-scss.js.map +1 -1
  584. package/dist/es/_shared/toolbar-button/toolbar-button-scss.js +5 -5
  585. package/dist/es/_shared/toolbar-button/toolbar-button-scss.js.map +1 -1
  586. package/dist/es/bundled-dependencies/ai-assistant-avatar.js +6 -6
  587. package/dist/es/bundled-dependencies/ai-assistant-avatar.js.map +1 -1
  588. package/dist/es/editor-common/editor-events-context.js.map +2 -2
  589. package/dist/es/editor-common/statics/styles/general-scss.js +20 -20
  590. package/dist/es/editor-common/statics/styles/general-scss.js.map +1 -1
  591. package/dist/es/plugin-ai/ai-content-modal/ai-content-modal-scss.js +10 -10
  592. package/dist/es/plugin-ai/ai-content-modal/ai-content-modal-scss.js.map +1 -1
  593. package/dist/es/plugin-ai/ai-content-modal/feed/feed-scss.js +4 -4
  594. package/dist/es/plugin-ai/ai-content-modal/feed/feed-scss.js.map +1 -1
  595. package/dist/es/plugin-ai/ai-content-modal/no-selection-message/no-selection-message-scss.js +3 -3
  596. package/dist/es/plugin-ai/ai-content-modal/no-selection-message/no-selection-message-scss.js.map +1 -1
  597. package/dist/es/plugin-ai/ai-content-modal/text-cursor/text-cursor-scss.js +4 -4
  598. package/dist/es/plugin-ai/ai-content-modal/text-cursor/text-cursor-scss.js.map +1 -1
  599. package/dist/es/plugin-ai/ai-content-modal/textual-prompt-input-area/textual-prompt-input-area-scss.js +7 -7
  600. package/dist/es/plugin-ai/ai-content-modal/textual-prompt-input-area/textual-prompt-input-area-scss.js.map +1 -1
  601. package/dist/es/plugin-ai/ai-image-modal/ai-image-modal-scss.js +8 -8
  602. package/dist/es/plugin-ai/ai-image-modal/ai-image-modal-scss.js.map +1 -1
  603. package/dist/es/plugin-ai/ai-plus-button/ai-plus-button-scss.js +3 -3
  604. package/dist/es/plugin-ai/ai-plus-button/ai-plus-button-scss.js.map +1 -1
  605. package/dist/es/plugin-ai/error-message/error-message-scss.js +3 -3
  606. package/dist/es/plugin-ai/error-message/error-message-scss.js.map +1 -1
  607. package/dist/es/plugin-ai/prompt-input-area/prompt-input-area-scss.js +6 -6
  608. package/dist/es/plugin-ai/prompt-input-area/prompt-input-area-scss.js.map +1 -1
  609. package/dist/es/plugin-ai/toolbar/toolbar-button-scss.js +4 -4
  610. package/dist/es/plugin-ai/toolbar/toolbar-button-scss.js.map +1 -1
  611. package/dist/es/plugin-animation/animation-panel-scss.js +11 -11
  612. package/dist/es/plugin-animation/animation-panel-scss.js.map +1 -1
  613. package/dist/es/plugin-audio/statics/styles/audio-embed-scss.js +3 -3
  614. package/dist/es/plugin-audio/statics/styles/audio-embed-scss.js.map +1 -1
  615. package/dist/es/plugin-audio/statics/styles/audio-scss.js +21 -21
  616. package/dist/es/plugin-audio/statics/styles/audio-scss.js.map +1 -1
  617. package/dist/es/plugin-audio/statics/styles/icon-button-scss.js +1 -1
  618. package/dist/es/plugin-audio/statics/styles/icon-button-scss.js.map +1 -1
  619. package/dist/es/plugin-audio/statics/styles/settings-modal-scss.js +3 -3
  620. package/dist/es/plugin-audio/statics/styles/settings-modal-scss.js.map +1 -1
  621. package/dist/es/plugin-audio/statics/styles/sound-control-scss.js +2 -2
  622. package/dist/es/plugin-audio/statics/styles/sound-control-scss.js.map +1 -1
  623. package/dist/es/plugin-audio/viewer-styles-inject.js +4 -4
  624. package/dist/es/plugin-block-drag-handle/styles-scss.js +10 -10
  625. package/dist/es/plugin-block-drag-handle/styles-scss.js.map +1 -1
  626. package/dist/es/plugin-button/components/button-text-field.js +40 -0
  627. package/dist/es/plugin-button/components/button-text-field.js.map +7 -0
  628. package/dist/es/plugin-button/constants.js +4 -5
  629. package/dist/es/plugin-button/constants.js.map +2 -2
  630. package/dist/es/plugin-button/data-hooks.js +6 -6
  631. package/dist/es/plugin-button/data-hooks.js.map +2 -2
  632. package/dist/es/plugin-button/get-toolbar-buttons.js +55 -27
  633. package/dist/es/plugin-button/get-toolbar-buttons.js.map +2 -2
  634. package/dist/es/plugin-button/modals/action-button-text-modal.js +34 -0
  635. package/dist/es/plugin-button/modals/action-button-text-modal.js.map +7 -0
  636. package/dist/es/plugin-button/modals/settings-modal-content.js +12 -57
  637. package/dist/es/plugin-button/modals/settings-modal-content.js.map +2 -2
  638. package/dist/es/plugin-button/modals/settings-modal.js +3 -8
  639. package/dist/es/plugin-button/modals/settings-modal.js.map +2 -2
  640. package/dist/es/plugin-button/statics/styles/button-input-modal-scss.js +4 -4
  641. package/dist/es/plugin-button/statics/styles/button-input-modal-scss.js.map +1 -1
  642. package/dist/es/plugin-button/statics/styles/{settings-component-scss.js → button-text-field-scss.js} +6 -6
  643. package/dist/es/plugin-button/statics/styles/button-text-field-scss.js.map +7 -0
  644. package/dist/es/plugin-button/statics/styles/default-styles-scss.js +5 -3
  645. package/dist/es/plugin-button/statics/styles/default-styles-scss.js.map +2 -2
  646. package/dist/es/plugin-button/testkit/button-settings.uni.driver.js +50 -15
  647. package/dist/es/plugin-button/testkit/button-settings.uni.driver.js.map +2 -2
  648. package/dist/es/plugin-button/testkit/button.testkit.js +21 -2
  649. package/dist/es/plugin-button/testkit/button.testkit.js.map +2 -2
  650. package/dist/es/plugin-button/tiptap/component.js +53 -5
  651. package/dist/es/plugin-button/tiptap/component.js.map +2 -2
  652. package/dist/es/plugin-button/tiptap/tiptap.js +20 -2
  653. package/dist/es/plugin-button/tiptap/tiptap.js.map +2 -2
  654. package/dist/es/plugin-button/viewer/button-viewer.js +8 -6
  655. package/dist/es/plugin-button/viewer/button-viewer.js.map +2 -2
  656. package/dist/es/plugin-button/viewer-styles-inject.js +2 -2
  657. package/dist/es/plugin-card/card-scss.js +19 -19
  658. package/dist/es/plugin-card/card-scss.js.map +1 -1
  659. package/dist/es/plugin-card/card-viewer-scss.js +6 -6
  660. package/dist/es/plugin-card/card-viewer-scss.js.map +1 -1
  661. package/dist/es/plugin-card/viewer-styles-inject.js +2 -2
  662. package/dist/es/plugin-code-block/statics/styles/code-block-scss.js +8 -8
  663. package/dist/es/plugin-code-block/statics/styles/code-block-scss.js.map +1 -1
  664. package/dist/es/plugin-collapsible-list/statics/styles/collapsible-list-component-scss.js +6 -6
  665. package/dist/es/plugin-collapsible-list/statics/styles/collapsible-list-component-scss.js.map +1 -1
  666. package/dist/es/plugin-collapsible-list/statics/styles/collapsible-list-pair-scss.js +18 -18
  667. package/dist/es/plugin-collapsible-list/statics/styles/collapsible-list-pair-scss.js.map +1 -1
  668. package/dist/es/plugin-collapsible-list/statics/styles/collapsible-list-settings-scss.js +4 -4
  669. package/dist/es/plugin-collapsible-list/statics/styles/collapsible-list-settings-scss.js.map +1 -1
  670. package/dist/es/plugin-collapsible-list/statics/styles/new-pair-button-scss.js +5 -5
  671. package/dist/es/plugin-collapsible-list/statics/styles/new-pair-button-scss.js.map +1 -1
  672. package/dist/es/plugin-collapsible-list/viewer-styles-inject.js +2 -2
  673. package/dist/es/plugin-divider/statics/styles/divider-viewer-scss.js +13 -13
  674. package/dist/es/plugin-divider/statics/styles/divider-viewer-scss.js.map +1 -1
  675. package/dist/es/plugin-divider/toolbar/modals/divider-design-panel-scss.js +3 -3
  676. package/dist/es/plugin-divider/toolbar/modals/divider-design-panel-scss.js.map +1 -1
  677. package/dist/es/plugin-divider/viewer-styles-inject.js +2 -2
  678. package/dist/es/plugin-emoji/modals/emoji-suggestions-modal-scss.js +3 -3
  679. package/dist/es/plugin-emoji/modals/emoji-suggestions-modal-scss.js.map +1 -1
  680. package/dist/es/plugin-figure/tiptap/caption-scss.js +5 -5
  681. package/dist/es/plugin-figure/tiptap/caption-scss.js.map +1 -1
  682. package/dist/es/plugin-figure/tiptap/figure-scss.js +5 -5
  683. package/dist/es/plugin-figure/tiptap/figure-scss.js.map +1 -1
  684. package/dist/es/plugin-file-upload/statics/styles/file-upload-viewer-scss.js +15 -15
  685. package/dist/es/plugin-file-upload/statics/styles/file-upload-viewer-scss.js.map +1 -1
  686. package/dist/es/plugin-file-upload/viewer-styles-inject.js +2 -2
  687. package/dist/es/plugin-gallery/media/create-gallery-media-url.js +4 -1
  688. package/dist/es/plugin-gallery/media/create-gallery-media-url.js.map +2 -2
  689. package/dist/es/plugin-gallery/modals/settings/gallery-settings-modal-scss.js +5 -5
  690. package/dist/es/plugin-gallery/modals/settings/gallery-settings-modal-scss.js.map +1 -1
  691. package/dist/es/plugin-gallery/modals/settings/layout-settings/layout-controls-section/image-ratio-control-scss.js +8 -8
  692. package/dist/es/plugin-gallery/modals/settings/layout-settings/layout-controls-section/image-ratio-control-scss.js.map +1 -1
  693. package/dist/es/plugin-gallery/modals/settings/layout-settings/layout-controls-section/thumbnail-alignment-control-scss.js +7 -7
  694. package/dist/es/plugin-gallery/modals/settings/layout-settings/layout-controls-section/thumbnail-alignment-control-scss.js.map +1 -1
  695. package/dist/es/plugin-gallery/modals/settings/media-settings/media-list/sortable-item-scss.js +3 -3
  696. package/dist/es/plugin-gallery/modals/settings/media-settings/media-list/sortable-item-scss.js.map +1 -1
  697. package/dist/es/plugin-gallery/modals/settings/media-settings/media-list/sortable-list-scss.js +5 -5
  698. package/dist/es/plugin-gallery/modals/settings/media-settings/media-list/sortable-list-scss.js.map +1 -1
  699. package/dist/es/plugin-gallery/statics/styles/gallery-component-scss.js +3 -3
  700. package/dist/es/plugin-gallery/statics/styles/gallery-component-scss.js.map +1 -1
  701. package/dist/es/plugin-gallery/statics/styles/gallery-media-scss.js +21 -21
  702. package/dist/es/plugin-gallery/statics/styles/gallery-media-scss.js.map +1 -1
  703. package/dist/es/plugin-gallery/statics/styles/viewer-scss.js +1 -1
  704. package/dist/es/plugin-gallery/statics/styles/viewer-scss.js.map +1 -1
  705. package/dist/es/plugin-gallery/viewer/layout-collage-scss.js +5 -5
  706. package/dist/es/plugin-gallery/viewer/layout-collage-scss.js.map +1 -1
  707. package/dist/es/plugin-gallery/viewer/layout-column-scss.js +4 -4
  708. package/dist/es/plugin-gallery/viewer/layout-column-scss.js.map +1 -1
  709. package/dist/es/plugin-gallery/viewer/layout-fullsize-scss.js +4 -4
  710. package/dist/es/plugin-gallery/viewer/layout-fullsize-scss.js.map +1 -1
  711. package/dist/es/plugin-gallery/viewer/layout-grid-scss.js +2 -2
  712. package/dist/es/plugin-gallery/viewer/layout-grid-scss.js.map +1 -1
  713. package/dist/es/plugin-gallery/viewer/layout-masonry-scss.js +7 -7
  714. package/dist/es/plugin-gallery/viewer/layout-masonry-scss.js.map +1 -1
  715. package/dist/es/plugin-gallery/viewer/layout-panorama-scss.js +1 -1
  716. package/dist/es/plugin-gallery/viewer/layout-panorama-scss.js.map +1 -1
  717. package/dist/es/plugin-gallery/viewer/layout-slider-scss.js +6 -6
  718. package/dist/es/plugin-gallery/viewer/layout-slider-scss.js.map +1 -1
  719. package/dist/es/plugin-gallery/viewer/layout-thumbnail-scss.js +11 -11
  720. package/dist/es/plugin-gallery/viewer/layout-thumbnail-scss.js.map +1 -1
  721. package/dist/es/plugin-gallery/viewer-styles-inject.js +2 -2
  722. package/dist/es/plugin-giphy/components/giphy-selector-scss.js +11 -11
  723. package/dist/es/plugin-giphy/components/giphy-selector-scss.js.map +1 -1
  724. package/dist/es/plugin-giphy/viewer/giphy-viewer-scss.js +4 -4
  725. package/dist/es/plugin-giphy/viewer/giphy-viewer-scss.js.map +1 -1
  726. package/dist/es/plugin-giphy/viewer/play-icon-scss.js +2 -2
  727. package/dist/es/plugin-giphy/viewer/play-icon-scss.js.map +1 -1
  728. package/dist/es/plugin-giphy/viewer-styles-inject.js +2 -2
  729. package/dist/es/plugin-hashtag/statics/hashtag-scss.js +2 -2
  730. package/dist/es/plugin-hashtag/statics/hashtag-scss.js.map +1 -1
  731. package/dist/es/plugin-hashtag/viewer-styles-inject.js +2 -2
  732. package/dist/es/plugin-headings/dropdown/headings-dropdown-scss.js +9 -9
  733. package/dist/es/plugin-headings/dropdown/headings-dropdown-scss.js.map +1 -1
  734. package/dist/es/plugin-html/statics/styles/HtmlComponent-scss.js +2 -2
  735. package/dist/es/plugin-html/statics/styles/HtmlComponent-scss.js.map +1 -1
  736. package/dist/es/plugin-html/statics/styles/Iframe-scss.js +1 -1
  737. package/dist/es/plugin-html/statics/styles/Iframe-scss.js.map +1 -1
  738. package/dist/es/plugin-html/tiptap/ai-widget-scss.js +4 -4
  739. package/dist/es/plugin-html/tiptap/ai-widget-scss.js.map +1 -1
  740. package/dist/es/plugin-html/tiptap/loader-scss.js +11 -11
  741. package/dist/es/plugin-html/tiptap/loader-scss.js.map +1 -1
  742. package/dist/es/plugin-html/tiptap/preset-bar/preset-bar-scss.js +4 -4
  743. package/dist/es/plugin-html/tiptap/preset-bar/preset-bar-scss.js.map +1 -1
  744. package/dist/es/plugin-html/viewer/html-viewer.js +75 -6
  745. package/dist/es/plugin-html/viewer/html-viewer.js.map +2 -2
  746. package/dist/es/plugin-html/viewer-styles-inject.js +2 -2
  747. package/dist/es/plugin-image/components/corner-radius-handles-scss.js +6 -6
  748. package/dist/es/plugin-image/components/corner-radius-handles-scss.js.map +1 -1
  749. package/dist/es/plugin-image/components/crop-edge-handles-scss.js +3 -3
  750. package/dist/es/plugin-image/components/crop-edge-handles-scss.js.map +1 -1
  751. package/dist/es/plugin-image/context.js +2 -4
  752. package/dist/es/plugin-image/context.js.map +2 -2
  753. package/dist/es/plugin-image/crop-overlay/crop-overlay-scss.js +16 -16
  754. package/dist/es/plugin-image/crop-overlay/crop-overlay-scss.js.map +1 -1
  755. package/dist/es/plugin-image/fetch-media-token.js +12 -9
  756. package/dist/es/plugin-image/fetch-media-token.js.map +2 -2
  757. package/dist/es/plugin-image/get-toolbar-buttons.js +4 -1
  758. package/dist/es/plugin-image/get-toolbar-buttons.js.map +2 -2
  759. package/dist/es/plugin-image/statics/styles/image-viewer-scss.js +20 -20
  760. package/dist/es/plugin-image/statics/styles/image-viewer-scss.js.map +1 -1
  761. package/dist/es/plugin-image/statics/styles/settings-modal-scss.js +3 -3
  762. package/dist/es/plugin-image/statics/styles/settings-modal-scss.js.map +1 -1
  763. package/dist/es/plugin-image/toolbar/shape-crop-modal-scss.js +6 -6
  764. package/dist/es/plugin-image/toolbar/shape-crop-modal-scss.js.map +1 -1
  765. package/dist/es/plugin-image/viewer-styles-inject.js +2 -2
  766. package/dist/es/plugin-inline-ai/ai-selection-tooltip-scss.js +12 -12
  767. package/dist/es/plugin-inline-ai/ai-selection-tooltip-scss.js.map +1 -1
  768. package/dist/es/plugin-inline-ai/aria-avatar-row-scss.js +3 -3
  769. package/dist/es/plugin-inline-ai/aria-avatar-row-scss.js.map +1 -1
  770. package/dist/es/plugin-inline-ai/aria-surface-row-scss.js +6 -6
  771. package/dist/es/plugin-inline-ai/aria-surface-row-scss.js.map +1 -1
  772. package/dist/es/plugin-inline-ai/html-placeholder-scss.js +5 -5
  773. package/dist/es/plugin-inline-ai/html-placeholder-scss.js.map +1 -1
  774. package/dist/es/plugin-inline-ai/modal-scss.js +11 -11
  775. package/dist/es/plugin-inline-ai/modal-scss.js.map +1 -1
  776. package/dist/es/plugin-inline-ai/pending-widget-placeholder-scss.js +14 -14
  777. package/dist/es/plugin-inline-ai/pending-widget-placeholder-scss.js.map +1 -1
  778. package/dist/es/plugin-inline-ai/spinner-scss.js +4 -4
  779. package/dist/es/plugin-inline-ai/spinner-scss.js.map +1 -1
  780. package/dist/es/plugin-inline-ai/toolbar/toolbar-button-scss.js +4 -4
  781. package/dist/es/plugin-inline-ai/toolbar/toolbar-button-scss.js.map +1 -1
  782. package/dist/es/plugin-line-spacing/custom-spacing-editor-modal/custom-spacing-editor-modal-scss.js +3 -3
  783. package/dist/es/plugin-line-spacing/custom-spacing-editor-modal/custom-spacing-editor-modal-scss.js.map +1 -1
  784. package/dist/es/plugin-link/statics/link-viewer-scss.js +4 -4
  785. package/dist/es/plugin-link/statics/link-viewer-scss.js.map +1 -1
  786. package/dist/es/plugin-link/toolbar/anchor-link-button-scss.js +3 -3
  787. package/dist/es/plugin-link/toolbar/anchor-link-button-scss.js.map +1 -1
  788. package/dist/es/plugin-link/viewer-styles-inject.js +2 -2
  789. package/dist/es/plugin-link-preview/statics/styles/insert-modal-scss.js +3 -3
  790. package/dist/es/plugin-link-preview/statics/styles/insert-modal-scss.js.map +1 -1
  791. package/dist/es/plugin-link-preview/statics/styles/link-preview-scss.js +18 -18
  792. package/dist/es/plugin-link-preview/statics/styles/link-preview-scss.js.map +1 -1
  793. package/dist/es/plugin-link-preview/statics/styles/settings-modal-scss.js +3 -3
  794. package/dist/es/plugin-link-preview/statics/styles/settings-modal-scss.js.map +1 -1
  795. package/dist/es/plugin-link-preview/viewer-styles-inject.js +3 -3
  796. package/dist/es/plugin-mentions/statics/mention-list-scss.js +6 -6
  797. package/dist/es/plugin-mentions/statics/mention-list-scss.js.map +1 -1
  798. package/dist/es/plugin-mentions/statics/mentions-scss.js +4 -4
  799. package/dist/es/plugin-mentions/statics/mentions-scss.js.map +1 -1
  800. package/dist/es/plugin-mentions/viewer-styles-inject.js +2 -2
  801. package/dist/es/plugin-paywall/paywall-fallback-scss.js +1 -1
  802. package/dist/es/plugin-paywall/paywall-fallback-scss.js.map +1 -1
  803. package/dist/es/plugin-smart-block/components/cell-accessory-scss.js +22 -22
  804. package/dist/es/plugin-smart-block/components/cell-accessory-scss.js.map +1 -1
  805. package/dist/es/plugin-smart-block/components/cell-quote-glyph-scss.js +3 -3
  806. package/dist/es/plugin-smart-block/components/cell-quote-glyph-scss.js.map +1 -1
  807. package/dist/es/plugin-smart-block/components/cell-star-rating-scss.js +4 -4
  808. package/dist/es/plugin-smart-block/components/cell-star-rating-scss.js.map +1 -1
  809. package/dist/es/plugin-smart-block/components/cell-stat-scss.js +20 -20
  810. package/dist/es/plugin-smart-block/components/cell-stat-scss.js.map +1 -1
  811. package/dist/es/plugin-smart-block/components/circle-donut-scss.js +7 -7
  812. package/dist/es/plugin-smart-block/components/circle-donut-scss.js.map +1 -1
  813. package/dist/es/plugin-smart-block/components/shape-overlay-scss.js +3 -3
  814. package/dist/es/plugin-smart-block/components/shape-overlay-scss.js.map +1 -1
  815. package/dist/es/plugin-smart-block/components/smart-block-view-scss.js +50 -50
  816. package/dist/es/plugin-smart-block/components/smart-block-view-scss.js.map +1 -1
  817. package/dist/es/plugin-smart-block/components/stars-scss.js +8 -8
  818. package/dist/es/plugin-smart-block/components/stars-scss.js.map +1 -1
  819. package/dist/es/plugin-smart-block/modals/variant-picker-scss.js +9 -9
  820. package/dist/es/plugin-smart-block/modals/variant-picker-scss.js.map +1 -1
  821. package/dist/es/plugin-smart-block/tiptap/smart-block-editor-scss.js +15 -15
  822. package/dist/es/plugin-smart-block/tiptap/smart-block-editor-scss.js.map +1 -1
  823. package/dist/es/plugin-smart-block/viewer-styles-inject.js +2 -2
  824. package/dist/es/plugin-social-polls/components/image-upload/image-upload-scss.js +9 -9
  825. package/dist/es/plugin-social-polls/components/image-upload/image-upload-scss.js.map +1 -1
  826. package/dist/es/plugin-social-polls/components/insert-modal/insert-modal-scss.js +3 -3
  827. package/dist/es/plugin-social-polls/components/insert-modal/insert-modal-scss.js.map +1 -1
  828. package/dist/es/plugin-social-polls/components/poll-header/poll-header-scss.js +3 -3
  829. package/dist/es/plugin-social-polls/components/poll-header/poll-header-scss.js.map +1 -1
  830. package/dist/es/plugin-social-polls/components/poll-option/option-scss.js +23 -23
  831. package/dist/es/plugin-social-polls/components/poll-option/option-scss.js.map +1 -1
  832. package/dist/es/plugin-social-polls/components/poll-option/webview/option-webview-scss.js +24 -24
  833. package/dist/es/plugin-social-polls/components/poll-option/webview/option-webview-scss.js.map +1 -1
  834. package/dist/es/plugin-social-polls/components/poll-scss.js +19 -19
  835. package/dist/es/plugin-social-polls/components/poll-scss.js.map +1 -1
  836. package/dist/es/plugin-social-polls/components/settings-modal/settings-modal-scss.js +4 -4
  837. package/dist/es/plugin-social-polls/components/settings-modal/settings-modal-scss.js.map +1 -1
  838. package/dist/es/plugin-social-polls/components/text-field/text-field-scss.js +12 -12
  839. package/dist/es/plugin-social-polls/components/text-field/text-field-scss.js.map +1 -1
  840. package/dist/es/plugin-social-polls/components/voted-users/voted-users-scss.js +20 -20
  841. package/dist/es/plugin-social-polls/components/voted-users/voted-users-scss.js.map +1 -1
  842. package/dist/es/plugin-social-polls/viewer-styles-inject.js +2 -2
  843. package/dist/es/plugin-spoiler/statics/styles/spoiler-scss.js +18 -18
  844. package/dist/es/plugin-spoiler/statics/styles/spoiler-scss.js.map +1 -1
  845. package/dist/es/plugin-spoiler/viewer-styles-inject.js +2 -2
  846. package/dist/es/plugin-table/modals/table-grid-selector-scss.js +7 -7
  847. package/dist/es/plugin-table/modals/table-grid-selector-scss.js.map +1 -1
  848. package/dist/es/plugin-table/statics/styles/cell-scss.js +15 -15
  849. package/dist/es/plugin-table/statics/styles/cell-scss.js.map +1 -1
  850. package/dist/es/plugin-table/statics/styles/resizer-scss.js +20 -20
  851. package/dist/es/plugin-table/statics/styles/resizer-scss.js.map +1 -1
  852. package/dist/es/plugin-table/statics/styles/table-settings-modal-scss.js +3 -3
  853. package/dist/es/plugin-table/statics/styles/table-settings-modal-scss.js.map +1 -1
  854. package/dist/es/plugin-table/statics/styles/table-viewer-scss.js +6 -6
  855. package/dist/es/plugin-table/statics/styles/table-viewer-scss.js.map +1 -1
  856. package/dist/es/plugin-table/tiptap/decorations/tableHandles-scss.js +11 -11
  857. package/dist/es/plugin-table/tiptap/decorations/tableHandles-scss.js.map +1 -1
  858. package/dist/es/plugin-table/tiptap/plugins/table-scss.js +35 -35
  859. package/dist/es/plugin-table/tiptap/plugins/table-scss.js.map +1 -1
  860. package/dist/es/plugin-table/toolbar/modals/border-scope-selector-scss.js +4 -4
  861. package/dist/es/plugin-table/toolbar/modals/border-scope-selector-scss.js.map +1 -1
  862. package/dist/es/plugin-table/viewer-styles-inject.js +4 -4
  863. package/dist/es/plugin-text-color/text-button-color-scss.js +4 -4
  864. package/dist/es/plugin-text-color/text-button-color-scss.js.map +1 -1
  865. package/dist/es/plugin-toc/toc-view-scss.js +2 -2
  866. package/dist/es/plugin-toc/toc-view-scss.js.map +1 -1
  867. package/dist/es/plugin-toc/viewer-styles-inject.js +2 -2
  868. package/dist/es/plugin-vertical-embed/components/Ribbon-scss.js +3 -3
  869. package/dist/es/plugin-vertical-embed/components/Ribbon-scss.js.map +1 -1
  870. package/dist/es/plugin-vertical-embed/components/card-content-scss.js +23 -23
  871. package/dist/es/plugin-vertical-embed/components/card-content-scss.js.map +1 -1
  872. package/dist/es/plugin-vertical-embed/components/card-scss.js +19 -19
  873. package/dist/es/plugin-vertical-embed/components/card-scss.js.map +1 -1
  874. package/dist/es/plugin-vertical-embed/components/description-scss.js +2 -2
  875. package/dist/es/plugin-vertical-embed/components/description-scss.js.map +1 -1
  876. package/dist/es/plugin-vertical-embed/modals/settings-modal-scss.js +4 -4
  877. package/dist/es/plugin-vertical-embed/modals/settings-modal-scss.js.map +1 -1
  878. package/dist/es/plugin-vertical-embed/tiptap/component-scss.js +12 -12
  879. package/dist/es/plugin-vertical-embed/tiptap/component-scss.js.map +1 -1
  880. package/dist/es/plugin-vertical-embed/toolbar/items-list-scss.js +3 -3
  881. package/dist/es/plugin-vertical-embed/toolbar/items-list-scss.js.map +1 -1
  882. package/dist/es/plugin-vertical-embed/viewer/vertical-embed-viewer-scss.js +6 -6
  883. package/dist/es/plugin-vertical-embed/viewer/vertical-embed-viewer-scss.js.map +1 -1
  884. package/dist/es/plugin-vertical-embed/viewer-styles-inject.js +3 -3
  885. package/dist/es/plugin-video/statics/styles/default-video-styles-scss.js +10 -10
  886. package/dist/es/plugin-video/statics/styles/default-video-styles-scss.js.map +1 -1
  887. package/dist/es/plugin-video/statics/styles/video-viewer-scss.js +3 -3
  888. package/dist/es/plugin-video/statics/styles/video-viewer-scss.js.map +1 -1
  889. package/dist/es/plugin-video/toolbar/embed-video-scss.js +3 -3
  890. package/dist/es/plugin-video/toolbar/embed-video-scss.js.map +1 -1
  891. package/dist/es/plugin-video/viewer-styles-inject.js +2 -2
  892. package/dist/es/ricos-common-plugins/font-size/dropdown/font-size-dropdown-scss.js +3 -3
  893. package/dist/es/ricos-common-plugins/font-size/dropdown/font-size-dropdown-scss.js.map +1 -1
  894. package/dist/es/ricos-common-plugins/gap-spacer/gap-spacer-component/gap-spacer-styles-scss.js +10 -10
  895. package/dist/es/ricos-common-plugins/gap-spacer/gap-spacer-component/gap-spacer-styles-scss.js.map +1 -1
  896. package/dist/es/ricos-common-plugins/layout/layout-node-view.js +3 -13
  897. package/dist/es/ricos-common-plugins/layout/layout-node-view.js.map +2 -2
  898. package/dist/es/ricos-common-plugins/layout/layouts-scss.js +35 -35
  899. package/dist/es/ricos-common-plugins/layout/layouts-scss.js.map +2 -2
  900. package/dist/es/ricos-common-plugins/layout/section-dividers/section-dividers-panel-scss.js +4 -4
  901. package/dist/es/ricos-common-plugins/layout/section-dividers/section-dividers-panel-scss.js.map +1 -1
  902. package/dist/es/ricos-common-plugins/layout/section-dividers/section-dividers-scss.js +6 -6
  903. package/dist/es/ricos-common-plugins/layout/section-dividers/section-dividers-scss.js.map +1 -1
  904. package/dist/es/ricos-common-plugins/quick-actions/modal/modal-scss.js +4 -4
  905. package/dist/es/ricos-common-plugins/quick-actions/modal/modal-scss.js.map +1 -1
  906. package/dist/es/ricos-common-plugins/statics/styles-scss.js +20 -20
  907. package/dist/es/ricos-common-plugins/statics/styles-scss.js.map +1 -1
  908. package/dist/es/ricos-common-plugins/title/headings-scss.js +10 -10
  909. package/dist/es/ricos-common-plugins/title/headings-scss.js.map +1 -1
  910. package/dist/es/ricos-content/velo-adapter/nativeElements/add-image.js.map +2 -2
  911. package/dist/es/ricos-editor/statics/styles/editor-styles-scss.js +11 -11
  912. package/dist/es/ricos-editor/statics/styles/editor-styles-scss.js.map +1 -1
  913. package/dist/es/ricos-editor/tiptap/ricos-editor.js +3 -1
  914. package/dist/es/ricos-editor/tiptap/ricos-editor.js.map +2 -2
  915. package/dist/es/ricos-media/resolve-file-url.js +10 -13
  916. package/dist/es/ricos-media/resolve-file-url.js.map +2 -2
  917. package/dist/es/ricos-modals/statics/styles/drawer-scss.js +11 -11
  918. package/dist/es/ricos-modals/statics/styles/drawer-scss.js.map +1 -1
  919. package/dist/es/ricos-modals/statics/styles/fullscreen-scss.js +3 -3
  920. package/dist/es/ricos-modals/statics/styles/fullscreen-scss.js.map +1 -1
  921. package/dist/es/ricos-modals/statics/styles/popper-scss.js +5 -5
  922. package/dist/es/ricos-modals/statics/styles/popper-scss.js.map +1 -1
  923. package/dist/es/ricos-schema/next-schema/jtd-to-ts.js +13 -5
  924. package/dist/es/ricos-schema/next-schema/jtd-to-ts.js.map +2 -2
  925. package/dist/es/ricos-schema/next-schema/version.js +1 -1
  926. package/dist/es/ricos-schema/next-schema/version.js.map +1 -1
  927. package/dist/es/ricos-styles/statics/styles/style-presets-scss.js +8 -8
  928. package/dist/es/ricos-styles/statics/styles/style-presets-scss.js.map +1 -1
  929. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/blockquote/blockquote-scss.js +3 -3
  930. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/blockquote/blockquote-scss.js.map +1 -1
  931. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/codeblock/codeblock-scss.js +3 -3
  932. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/codeblock/codeblock-scss.js.map +1 -1
  933. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/heading/heading-scss.js +9 -9
  934. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/heading/heading-scss.js.map +1 -1
  935. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/layout/layout-scss.js +10 -10
  936. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/layout/layout-scss.js.map +1 -1
  937. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/lists/lists-scss.js +6 -6
  938. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/lists/lists-scss.js.map +1 -1
  939. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/paragraph/paragraph-scss.js +4 -4
  940. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/paragraph/paragraph-scss.js.map +1 -1
  941. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/plugins/link-viewer-wrapper-scss.js +2 -2
  942. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/plugins/link-viewer-wrapper-scss.js.map +1 -1
  943. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/plugins/plugin-scss.js +15 -15
  944. package/dist/es/ricos-viewer-next/ContentViewer/rericos/renderers/plugins/plugin-scss.js.map +1 -1
  945. package/dist/es/ricos-viewer-next/modals/fullscreen/fullscreen-carousel.js +2 -1
  946. package/dist/es/ricos-viewer-next/modals/fullscreen/fullscreen-carousel.js.map +2 -2
  947. package/dist/es/ricos-viewer-next/modals/fullscreen/fullscreen-scss.js +14 -14
  948. package/dist/es/ricos-viewer-next/modals/fullscreen/fullscreen-scss.js.map +1 -1
  949. package/dist/es/ricos-viewer-next/statics/alignment-scss.js +16 -16
  950. package/dist/es/ricos-viewer-next/statics/alignment-scss.js.map +1 -1
  951. package/dist/es/ricos-viewer-next/statics/indentation-scss.js +7 -7
  952. package/dist/es/ricos-viewer-next/statics/indentation-scss.js.map +1 -1
  953. package/dist/es/ricos-viewer-next/statics/rich-content-viewer-scss.js +9 -9
  954. package/dist/es/ricos-viewer-next/statics/rich-content-viewer-scss.js.map +1 -1
  955. package/dist/es/ricos-viewer-next/statics/rtl-scss.js +2 -2
  956. package/dist/es/ricos-viewer-next/statics/rtl-scss.js.map +1 -1
  957. package/dist/es/ricos-viewer-next/testkit.js +1 -0
  958. package/dist/es/ricos-viewer-next/testkit.js.map +2 -2
  959. package/dist/es/text-selection-toolbar/statics/styles/viewer-inline-toolbar-scss.js +4 -4
  960. package/dist/es/text-selection-toolbar/statics/styles/viewer-inline-toolbar-scss.js.map +1 -1
  961. package/dist/es/tiptap-editor/statics/styles/tiptap-editor-styles-scss.js +15 -15
  962. package/dist/es/tiptap-editor/statics/styles/tiptap-editor-styles-scss.js.map +1 -1
  963. package/dist/es/tiptap-extensions/placeholder-scss.js +3 -3
  964. package/dist/es/tiptap-extensions/placeholder-scss.js.map +1 -1
  965. package/dist/es/tiptap-extensions/statics/styles-scss.js +6 -6
  966. package/dist/es/tiptap-extensions/statics/styles-scss.js.map +1 -1
  967. package/dist/es/toolbars-v3/components/InsertPluginToolbar/insert-plugin-toolbar-scss.js +3 -3
  968. package/dist/es/toolbars-v3/components/InsertPluginToolbar/insert-plugin-toolbar-scss.js.map +1 -1
  969. package/dist/es/toolbars-v3/components/Toolbar/RicosDesktopToolbar/OverflownButtons-scss.js +5 -5
  970. package/dist/es/toolbars-v3/components/Toolbar/RicosDesktopToolbar/OverflownButtons-scss.js.map +1 -1
  971. package/dist/es/toolbars-v3/components/Toolbar/RicosDesktopToolbar/RicosDesktopToolbar-scss.js +5 -5
  972. package/dist/es/toolbars-v3/components/Toolbar/RicosDesktopToolbar/RicosDesktopToolbar-scss.js.map +1 -1
  973. package/dist/es/toolbars-v3/components/Toolbar/RicosDesktopToolbar/RicosDesktopToolbarWrapper-scss.js +6 -6
  974. package/dist/es/toolbars-v3/components/Toolbar/RicosDesktopToolbar/RicosDesktopToolbarWrapper-scss.js.map +1 -1
  975. package/dist/es/toolbars-v3/components/Toolbar/RicosMobileToolbar/RicosMobileToolbar-scss.js +11 -11
  976. package/dist/es/toolbars-v3/components/Toolbar/RicosMobileToolbar/RicosMobileToolbar-scss.js.map +1 -1
  977. package/dist/es/toolbars-v3/components/Toolbar/RicosMobileToolbar/mobile-toolbar-overlay/mobile-toolbar-overlay-scss.js +3 -3
  978. package/dist/es/toolbars-v3/components/Toolbar/RicosMobileToolbar/mobile-toolbar-overlay/mobile-toolbar-overlay-scss.js.map +1 -1
  979. package/dist/es/toolbars-v3/components/buttons/AddPluginMenuButtons/AddPluginMenuMobileButton-scss.js +5 -5
  980. package/dist/es/toolbars-v3/components/buttons/AddPluginMenuButtons/AddPluginMenuMobileButton-scss.js.map +1 -1
  981. package/dist/es/toolbars-v3/components/buttons/FontSizeButton/FontSizeButton-scss.js +7 -7
  982. package/dist/es/toolbars-v3/components/buttons/FontSizeButton/FontSizeButton-scss.js.map +1 -1
  983. package/dist/es/toolbars-v3/modals/FloatingPluginMenu/styles/floating-add-plugin-menu-scss.js +8 -8
  984. package/dist/es/toolbars-v3/modals/FloatingPluginMenu/styles/floating-add-plugin-menu-scss.js.map +1 -1
  985. package/dist/es/toolbars-v3/ricos-toolbars/footer/FooterToolbar-scss.js +3 -3
  986. package/dist/es/toolbars-v3/ricos-toolbars/footer/FooterToolbar-scss.js.map +1 -1
  987. package/dist/es/toolbars-v3/ricos-toolbars/formatting/use-toolbars-items-config.js.map +2 -2
  988. package/dist/es/ui-components/Components/Image-scss.js +3 -3
  989. package/dist/es/ui-components/Components/Image-scss.js.map +1 -1
  990. package/dist/es/ui-components/Components/double-loader-scss.js +6 -6
  991. package/dist/es/ui-components/Components/double-loader-scss.js.map +1 -1
  992. package/dist/es/ui-components/color-picker/button-color-swatches/button-color-swatches-scss.js +4 -4
  993. package/dist/es/ui-components/color-picker/button-color-swatches/button-color-swatches-scss.js.map +1 -1
  994. package/dist/es/ui-components/color-picker/new-color-picker/components/gradient-picker/gradient-picker-scss.js +15 -15
  995. package/dist/es/ui-components/color-picker/new-color-picker/components/gradient-picker/gradient-picker-scss.js.map +1 -1
  996. package/dist/es/ui-components/color-picker/new-color-picker/components/new-color-swatches/new-color-swatches-scss.js +3 -3
  997. package/dist/es/ui-components/color-picker/new-color-picker/components/new-color-swatches/new-color-swatches-scss.js.map +1 -1
  998. package/dist/es/ui-components/color-picker/new-color-picker/components/simple-color-picker/simple-color-picker-scss.js +4 -4
  999. package/dist/es/ui-components/color-picker/new-color-picker/components/simple-color-picker/simple-color-picker-scss.js.map +1 -1
  1000. package/dist/es/ui-components/color-picker/new-color-picker/components/single-color-swatch/single-color-swatch-scss.js +4 -4
  1001. package/dist/es/ui-components/color-picker/new-color-picker/components/single-color-swatch/single-color-swatch-scss.js.map +1 -1
  1002. package/dist/es/ui-components/color-picker/new-color-picker/new-color-picker-scss.js +3 -3
  1003. package/dist/es/ui-components/color-picker/new-color-picker/new-color-picker-scss.js.map +1 -1
  1004. package/dist/es/ui-components/input-with-slider/input-with-slider-scss.js +3 -3
  1005. package/dist/es/ui-components/input-with-slider/input-with-slider-scss.js.map +1 -1
  1006. package/dist/es/ui-components/layout-background-loader/layout-background-loader-scss.js +5 -5
  1007. package/dist/es/ui-components/layout-background-loader/layout-background-loader-scss.js.map +1 -1
  1008. package/dist/es/ui-components/modal-layout/floating-layout/floating-desktop-layout-scss.js +3 -3
  1009. package/dist/es/ui-components/modal-layout/floating-layout/floating-desktop-layout-scss.js.map +1 -1
  1010. package/dist/es/ui-components/modal-layout/fullscreen-mobile-layout/fullscreen-mobile-layout-scss.js +6 -6
  1011. package/dist/es/ui-components/modal-layout/fullscreen-mobile-layout/fullscreen-mobile-layout-scss.js.map +1 -1
  1012. package/dist/es/ui-components/panel/panel-scss.js +4 -4
  1013. package/dist/es/ui-components/panel/panel-scss.js.map +1 -1
  1014. package/dist/es/ui-components/panel-header/panel-header-scss.js +3 -3
  1015. package/dist/es/ui-components/panel-header/panel-header-scss.js.map +1 -1
  1016. package/dist/es/ui-components/settings-panel-discard-modal/settings-panel-discard-modal-scss.js +3 -3
  1017. package/dist/es/ui-components/settings-panel-discard-modal/settings-panel-discard-modal-scss.js.map +1 -1
  1018. package/dist/es/ui-components/statics/styles/generic-error-scss.js +3 -3
  1019. package/dist/es/ui-components/statics/styles/generic-error-scss.js.map +1 -1
  1020. package/dist/es/ui-components/statics/styles/loaders-scss.js +10 -10
  1021. package/dist/es/ui-components/statics/styles/loaders-scss.js.map +1 -1
  1022. package/dist/es/ui-components/statics/styles/media-item-error-msg-scss.js +5 -5
  1023. package/dist/es/ui-components/statics/styles/media-item-error-msg-scss.js.map +1 -1
  1024. package/dist/es/ui-components/statics/styles/slider-scss.js +9 -9
  1025. package/dist/es/ui-components/statics/styles/slider-scss.js.map +1 -1
  1026. package/dist/es/ui-components/thumbnail-picker/thumbnail-picker-scss.js +3 -3
  1027. package/dist/es/ui-components/thumbnail-picker/thumbnail-picker-scss.js.map +1 -1
  1028. package/dist/es/ui-components/wixel-assistant/assistant-timeline-scss.js +18 -18
  1029. package/dist/es/ui-components/wixel-assistant/assistant-timeline-scss.js.map +1 -1
  1030. package/dist/es/wix-rich-content-common/statics/styles/fonts-scss.js +3 -3
  1031. package/dist/es/wix-rich-content-common/statics/styles/fonts-scss.js.map +1 -1
  1032. package/dist/es/wix-rich-content-common/statics/styles/general-scss.js +13 -13
  1033. package/dist/es/wix-rich-content-common/statics/styles/general-scss.js.map +1 -1
  1034. package/dist/src/_shared/get-all-plugin-testkits.d.ts +4 -0
  1035. package/dist/src/_shared/get-all-plugin-testkits.d.ts.map +1 -1
  1036. package/dist/src/_shared/get-lock-icon.d.ts +2 -0
  1037. package/dist/src/_shared/get-lock-icon.d.ts.map +1 -0
  1038. package/dist/src/_shared/link-modal/open-link-modal/modal-desktop.d.ts.map +1 -1
  1039. package/dist/src/_shared/link-modal/open-link-modal/modal-mobile.d.ts.map +1 -1
  1040. package/dist/src/_shared/link-modal/open-link-modal/types.d.ts +5 -0
  1041. package/dist/src/_shared/link-modal/open-link-modal/types.d.ts.map +1 -1
  1042. package/dist/src/_shared/link-modal/open-link-modal.d.ts +3 -1
  1043. package/dist/src/_shared/link-modal/open-link-modal.d.ts.map +1 -1
  1044. package/dist/src/_shared/link-modal/toggle-link-modal.d.ts +3 -1
  1045. package/dist/src/_shared/link-modal/toggle-link-modal.d.ts.map +1 -1
  1046. package/dist/src/_shared/plugin-toolbar/create-link-button.d.ts +6 -1
  1047. package/dist/src/_shared/plugin-toolbar/create-link-button.d.ts.map +1 -1
  1048. package/dist/src/_shared/plugin-toolbar/plugin-toolbar-buttons-ids.d.ts +1 -0
  1049. package/dist/src/_shared/plugin-toolbar/plugin-toolbar-buttons-ids.d.ts.map +1 -1
  1050. package/dist/src/_shared/request-service-provider/consts.d.ts +0 -1
  1051. package/dist/src/_shared/request-service-provider/consts.d.ts.map +1 -1
  1052. package/dist/src/_shared/request-service-provider/create-instance-wix-client.d.ts +3 -0
  1053. package/dist/src/_shared/request-service-provider/create-instance-wix-client.d.ts.map +1 -0
  1054. package/dist/src/_shared/request-service-provider/create-instance-wix-client.spec.d.ts +2 -0
  1055. package/dist/src/_shared/request-service-provider/create-instance-wix-client.spec.d.ts.map +1 -0
  1056. package/dist/src/_shared/request-service-provider/media-manager-uploader.d.ts +3 -2
  1057. package/dist/src/_shared/request-service-provider/media-manager-uploader.d.ts.map +1 -1
  1058. package/dist/src/_shared/request-service-provider/media-manager-uploader.spec.d.ts +2 -0
  1059. package/dist/src/_shared/request-service-provider/media-manager-uploader.spec.d.ts.map +1 -0
  1060. package/dist/src/_shared/request-service-provider/parse-instance.d.ts +2 -0
  1061. package/dist/src/_shared/request-service-provider/parse-instance.d.ts.map +1 -1
  1062. package/dist/src/_shared/request-service-provider/use-get-wix-client-promise.d.ts.map +1 -1
  1063. package/dist/src/plugin-button/components/{settings-component.d.ts → button-text-field.d.ts} +7 -3
  1064. package/dist/src/plugin-button/components/button-text-field.d.ts.map +1 -0
  1065. package/dist/src/plugin-button/constants.d.ts +3 -5
  1066. package/dist/src/plugin-button/constants.d.ts.map +1 -1
  1067. package/dist/src/plugin-button/data-hooks.d.ts +3 -3
  1068. package/dist/src/plugin-button/data-hooks.d.ts.map +1 -1
  1069. package/dist/src/plugin-button/get-toolbar-buttons.d.ts +2 -2
  1070. package/dist/src/plugin-button/get-toolbar-buttons.d.ts.map +1 -1
  1071. package/dist/src/plugin-button/modals/action-button-text-modal.d.ts +10 -0
  1072. package/dist/src/plugin-button/modals/action-button-text-modal.d.ts.map +1 -0
  1073. package/dist/src/plugin-button/modals/settings-modal-content.d.ts +0 -4
  1074. package/dist/src/plugin-button/modals/settings-modal-content.d.ts.map +1 -1
  1075. package/dist/src/plugin-button/modals/settings-modal.d.ts +0 -2
  1076. package/dist/src/plugin-button/modals/settings-modal.d.ts.map +1 -1
  1077. package/dist/src/plugin-button/testkit/action-button.testkit.d.ts +2 -0
  1078. package/dist/src/plugin-button/testkit/action-button.testkit.d.ts.map +1 -1
  1079. package/dist/src/plugin-button/testkit/button-settings.uni.driver.d.ts +17 -3
  1080. package/dist/src/plugin-button/testkit/button-settings.uni.driver.d.ts.map +1 -1
  1081. package/dist/src/plugin-button/testkit/button.testkit.d.ts +4 -0
  1082. package/dist/src/plugin-button/testkit/button.testkit.d.ts.map +1 -1
  1083. package/dist/src/plugin-button/testkit/link-button.testkit.d.ts +2 -0
  1084. package/dist/src/plugin-button/testkit/link-button.testkit.d.ts.map +1 -1
  1085. package/dist/src/plugin-button/tiptap/component.d.ts.map +1 -1
  1086. package/dist/src/plugin-button/tiptap/tiptap.d.ts.map +1 -1
  1087. package/dist/src/plugin-button/viewer/button-viewer.d.ts +3 -1
  1088. package/dist/src/plugin-button/viewer/button-viewer.d.ts.map +1 -1
  1089. package/dist/src/plugin-gallery/media/create-gallery-media-url.d.ts.map +1 -1
  1090. package/dist/src/plugin-html/viewer/html-viewer.d.ts.map +1 -1
  1091. package/dist/src/plugin-html/viewer/html-viewer.spec.d.ts +2 -0
  1092. package/dist/src/plugin-html/viewer/html-viewer.spec.d.ts.map +1 -0
  1093. package/dist/src/plugin-image/context.d.ts.map +1 -1
  1094. package/dist/src/plugin-image/fetch-media-token.d.ts +2 -2
  1095. package/dist/src/plugin-image/fetch-media-token.d.ts.map +1 -1
  1096. package/dist/src/ricos-common-plugins/layout/layout-node-view.d.ts.map +1 -1
  1097. package/dist/src/ricos-content/normalization/Fixtures/text-wrap-content-state.d.ts +1 -1
  1098. package/dist/src/ricos-editor/tiptap/ricos-editor.d.ts.map +1 -1
  1099. package/dist/src/ricos-media/resolve-file-url.d.ts.map +1 -1
  1100. package/dist/src/ricos-schema/next-schema/jtd-to-ts.d.ts.map +1 -1
  1101. package/dist/src/ricos-schema/next-schema/version.d.ts +1 -1
  1102. package/dist/src/ricos-styles/tests/test-cases.d.ts +3 -3
  1103. package/dist/src/ricos-viewer-next/modals/fullscreen/fullscreen-carousel.d.ts.map +1 -1
  1104. package/dist/src/ricos-viewer-next/testkit.d.ts +1 -8
  1105. package/dist/src/ricos-viewer-next/testkit.d.ts.map +1 -1
  1106. package/dist/src/testkit.d.ts +9 -8
  1107. package/dist/src/testkit.d.ts.map +1 -1
  1108. package/generated/public.d.ts +5 -0
  1109. package/package.json +18 -14
  1110. package/dist/cjs/plugin-button/components/settings-component.js +0 -72
  1111. package/dist/cjs/plugin-button/components/settings-component.js.map +0 -7
  1112. package/dist/cjs/plugin-button/statics/styles/settings-component-scss.js.map +0 -7
  1113. package/dist/es/plugin-button/components/settings-component.js +0 -42
  1114. package/dist/es/plugin-button/components/settings-component.js.map +0 -7
  1115. package/dist/es/plugin-button/statics/styles/settings-component-scss.js.map +0 -7
  1116. package/dist/src/plugin-button/components/settings-component.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/ricos-common-plugins/layout/layout-node-view.ts"],
4
- "sourcesContent": ["import classNames from 'classnames';\nimport type { Node as ProseMirrorNode } from 'prosemirror-model';\n\nimport {\n getLayoutWrapperDataHook,\n LAYOUT_HANDLE,\n PAYWALL_DIVIDER,\n} from './../../ricos-common-plugins/layout/data-hooks.js';\nimport { createResizeHandler } from './../../ricos-common-plugins/resizable/create-resize-handler.js';\nimport { TIPTAP_LAYOUT_CELL_TYPE, TIPTAP_LAYOUT_TYPE } from './../../ricos-content/index.js';\nimport type { ModalService } from './../../ricos-modals/index.js';\nimport type { Node as NodeOld } from './../../ricos-schema/legacy/wix/rich_content/v1/index.js';\nimport { Node_Type } from './../../ricos-schema/next-schema/index.js';\nimport type { Gradient } from './../../ricos-types/color-palette-types.js';\nimport type { RicosPalette } from './../../ricos-types/index.js';\nimport type { ExtensionProps } from './../../ricos-types/tiptap.js';\nimport { buildResponsiveCss } from './../../_shared/build-responsive-css.js';\nimport { TRANSPARENT_HEX_COLOR } from './../../_shared/colors.js';\nimport { getMoveIcon } from './../../_shared/drag-handle-icons.js';\nimport { getElementScale } from './../../_shared/get-element-scale.js';\nimport { isEdgeBanner } from './../../_shared/is-edge-banner.js';\nimport { logInvariant } from './../../_shared/log-invariant.js';\nimport { isPaywallLayoutNode } from './../../_shared/paywall/paywall-selection.js';\nimport type { PmLayoutNode } from './../../_shared/pm-node-types.js';\nimport { resolveBackwardCompatOverlay } from './../../_shared/resolve-backward-compat-overlay.js';\nimport { schemaGradientToCss } from './../../_shared/schema-gradient-to-css.js';\nimport { resolveDocumentColorToCss } from './../../_shared/theme-color-token.js';\nimport type { NodeViewRenderer, NodeViewRendererProps } from './../../tiptap/index.js';\nimport { findParentNodeClosestToPos } from './../../tiptap/index.js';\nimport type { Node as PmNode, ResolvedPos } from './../../tiptap/pm/model.js';\nimport { NodeSelection } from './../../tiptap/pm/state.js';\nimport { getContrastYIQ } from './../../wix-rich-content-common/Utils/color-utils.js';\nimport { findNodeById } from './../../tiptap-editor/helpers/index.js';\n\nimport staticsStyles from '../statics/styles-scss.js';\nimport { setAttr, setChild, setClass, setStyleVar, setText } from './idempotent-dom.js';\nimport { isEditorOrModalActive } from './is-editor-or-modal-active.js';\nimport { layoutConverter } from './layout-converter.js';\nimport { getResolvedLayoutFillColor, getResolvedLayoutFillGradient } from './layout-fill.js';\nimport styles from './layouts-scss.js';\nimport { DIVIDER_PRESETS, getDividerLayers } from './section-dividers/divider-presets.js';\nimport {\n LAYOUT_DEFAULTS,\n MAX_CELLS,\n MAX_COLUMNS,\n MAX_VERTICAL_MARGIN,\n MIN_COL_SPAN,\n} from './shared-with-viewer.js';\nimport type { LayoutExtensionStorage } from './shared.js';\nimport { balanceLayoutCells, findLayoutOfCell, getImageUrl } from './shared.js';\n\ntype LayoutNodeViewState = {\n columnTemplate: number[];\n isResizing: boolean;\n isDragging: boolean;\n invalid: 'none' | 'left' | 'right';\n dropCursorPosition: null | number;\n isDraggingOver: boolean;\n};\n\ntype LayoutNodeViewOptions = {\n disableInteractions: boolean;\n breakoutRule: ExtensionProps['breakoutRule'];\n isMobile: boolean;\n suppressDragHandle?: boolean;\n colorPalette?: RicosPalette;\n modals?: ModalService;\n t: (key: string) => string;\n};\n\nexport const layoutNodeView =\n ({\n disableInteractions,\n breakoutRule,\n isMobile,\n suppressDragHandle,\n colorPalette,\n modals,\n t,\n }: LayoutNodeViewOptions): NodeViewRenderer =>\n ({ node, getPos, editor }) => {\n const state: LayoutNodeViewState = {\n columnTemplate: getGridTemplateColumns(node),\n isResizing: false,\n isDragging: false,\n invalid: 'none',\n dropCursorPosition: null,\n isDraggingOver: false,\n };\n const resizableHandlerCleanups: (() => void)[] = [];\n const layoutWrapper = document.createElement('div');\n layoutWrapper.setAttribute('data-layout-wrapper', '');\n layoutWrapper.setAttribute('data-hook', getLayoutWrapperDataHook(node.attrs.id));\n layoutWrapper.classList.add(styles.layoutWrapper);\n\n if (disableInteractions) {\n layoutWrapper.classList.add(styles.disabled);\n }\n\n const layoutStyle = document.createElement('style');\n layoutStyle.setAttribute('data-layout-style', node.attrs.id);\n layoutWrapper.append(layoutStyle);\n\n const layoutElement = document.createElement('div');\n\n // Wrap layoutElement in a container that will hold resize handles.\n // ProseMirror only manages contentDOM (layoutElement), so handles\n // attached to layoutContainer won't be removed during DOM reconciliation.\n const layoutContainer = document.createElement('div');\n layoutContainer.setAttribute('data-resize-container', '');\n layoutContainer.classList.add(styles.layoutContainer);\n layoutContainer.append(layoutElement);\n\n const hasBreakout = breakoutRule\n ? breakoutRule({\n node: layoutConverter.fromPm.convert(node.toJSON()) as NodeOld,\n }) === 'fullWidth'\n : false;\n\n if (hasBreakout) {\n layoutWrapper.classList.add(styles.breakoutMargin);\n }\n\n const breakoutWrapper = document.createElement('div');\n breakoutWrapper.setAttribute('data-breakout', 'normal');\n // The layout's root carries no inline padding — this wrapper's box is what bounds\n // the visible content. Declare that for geometry consumers (see\n // _shared/get-content-edge-element.ts).\n breakoutWrapper.setAttribute('data-content-edge', '');\n breakoutWrapper.append(layoutContainer);\n\n layoutWrapper.append(breakoutWrapper);\n\n const dropCursorElement = document.createElement('div');\n dropCursorElement.classList.add(styles.dropCursor);\n\n // Built on first use and then kept: most layouts are not paywalls.\n let paywallDivider: HTMLDivElement | undefined;\n const syncPaywallDivider = (wrapper: HTMLElement, show: boolean) => {\n if (!show && !paywallDivider) {\n return;\n }\n const divider = (paywallDivider ??= createPaywallDivider(t));\n setChild(wrapper, divider, show);\n };\n\n const setState = (newState: Partial<LayoutNodeViewState>) => {\n // We need to keep ref to state object as updates can be triggered by ProseMirror and by us manually. We also we\n // need to keep latest state values in event listeners avoiding closure issues\n const isStateEqual = Object.entries(newState).every(\n ([key, value]) => state[key as keyof LayoutNodeViewState] === value\n );\n if (isStateEqual) {\n return;\n }\n Object.assign(state, newState);\n\n updateLayoutView({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n });\n };\n\n updateLayoutView({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n });\n\n const runLayoutUpdate = () =>\n updateLayoutView({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n });\n const onFocus = () => {\n runLayoutUpdate();\n };\n const onBlur = ({ event }: { event: FocusEvent }) => {\n // Skip update when focus moves to an element within the layout (e.g. cell handle, resize handle)\n if (event.relatedTarget && layoutWrapper.contains(event.relatedTarget as Node)) {\n return;\n }\n runLayoutUpdate();\n };\n editor.on('selectionUpdate', runLayoutUpdate);\n editor.on('focus', onFocus);\n editor.on('blur', onBlur);\n\n // Refresh chrome when a modal opens/closes — opening a settings modal blurs\n // the editor before the modal mount, and we want the selection to stay\n // visible while the modal is up. The modal service's pub/sub wiring is\n // attached after the editor is constructed, so defer to a microtask.\n let modalSubsCancelled = false;\n let modalSubs: { cancel: () => void }[] = [];\n queueMicrotask(() => {\n if (modalSubsCancelled || !modals) {\n return;\n }\n modalSubs = [modals.onModalOpened(runLayoutUpdate), modals.onModalClosed(runLayoutUpdate)];\n });\n\n const removeFocusListeners = () => {\n editor.off('selectionUpdate', runLayoutUpdate);\n editor.off('focus', onFocus);\n editor.off('blur', onBlur);\n modalSubsCancelled = true;\n modalSubs.forEach(s => s.cancel());\n };\n\n const cleanups = disableInteractions\n ? [removeFocusListeners]\n : [\n removeFocusListeners,\n attachCellResizeHandler({ layoutElement, state, editor, setState }),\n attachCellDragHandler({ layoutElement, editor, setState }),\n attachLayoutEventHandlers({\n layoutWrapper,\n layoutElement,\n editor,\n setState,\n }),\n ];\n\n return {\n dom: layoutWrapper,\n contentDOM: layoutElement,\n update: (newNode: PmNode) => {\n if (newNode.type !== node.type) {\n return false;\n }\n if (!state.isResizing) {\n state.columnTemplate = getGridTemplateColumns(newNode);\n }\n // oxlint-disable-next-line no-param-reassign\n node = newNode;\n updateLayoutView({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node: newNode,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n });\n return true;\n },\n ignoreMutation: (mutation: MutationRecord | { type: 'selection'; target: Node }) => {\n const isMutatingLayoutStyle = mutation.target === layoutStyle;\n const isMutatingDataAttribute =\n mutation.type === 'attributes' && mutation.attributeName?.startsWith('data-');\n const isMutatingLayoutAttribute =\n mutation.target === layoutElement && mutation.type === 'attributes';\n const isMutatingLayoutWrapperAttribute =\n mutation.target === layoutWrapper && mutation.type === 'attributes';\n const isMutatingLayoutWrapperChildren =\n mutation.target === layoutWrapper && mutation.type === 'childList';\n // Divider elements are fully owned by applySectionDivider — a real\n // style change (e.g. dragging the height slider while the layout is\n // selected) must not make ProseMirror reparse the node view, which\n // would drop the layout's NodeSelection.\n const isMutatingSectionDivider =\n mutation.target instanceof Element &&\n (mutation.target.hasAttribute('data-layout-divider') ||\n mutation.target.hasAttribute('data-layout-dividers-clip'));\n const isMutatingDropCursor = mutation.target === dropCursorElement;\n // Ignore mutations to breakout wrapper\n const isMutatingBreakoutWrapper = mutation.target === breakoutWrapper;\n // Ignore mutations to layout container (resize handles are attached here)\n const isMutatingLayoutContainer = mutation.target === layoutContainer;\n\n return (\n isMutatingLayoutStyle ||\n isMutatingDataAttribute ||\n isMutatingLayoutAttribute ||\n isMutatingLayoutWrapperAttribute ||\n isMutatingLayoutWrapperChildren ||\n isMutatingSectionDivider ||\n isMutatingDropCursor ||\n isMutatingBreakoutWrapper ||\n isMutatingLayoutContainer\n );\n },\n destroy: () => {\n cleanups.forEach(cleanup => cleanup());\n resizableHandlerCleanups.forEach(cleanup => cleanup());\n resizableHandlerCleanups.length = 0;\n },\n };\n };\n\nconst attachResizeHandlers = ({\n layoutContainer,\n layoutWrapper,\n editor,\n node,\n resizableHandlerCleanups,\n}: Pick<NodeViewRendererProps, 'editor' | 'node'> & {\n layoutContainer: HTMLDivElement;\n layoutWrapper: HTMLDivElement;\n resizableHandlerCleanups: (() => void)[];\n}) => {\n const minWidth = 200;\n\n const cleanupHorizontalResizeHandler = createResizeHandler({\n resizeElement: layoutContainer,\n isEnabled: true,\n getMinWidth: () => minWidth,\n getMaxWidth: () => {\n const nodeContainer = layoutContainer.closest('[data-breakout=\"normal\"]') as HTMLElement;\n const nodeContentStyles = window.getComputedStyle(nodeContainer);\n const paddingStart = parseInt(nodeContentStyles.paddingInlineStart) || 0;\n const paddingEnd = parseInt(nodeContentStyles.paddingInlineEnd) || 0;\n\n return Math.max(minWidth, nodeContainer.clientWidth - paddingStart - paddingEnd);\n },\n enable: { left: true, right: true },\n lockAspectRatio: false,\n setMaxWidthAsPercentage: true,\n alignment: 'CENTER',\n onResize: () => {\n // Visual update during resize is handled by CSS variable --ricos-internal-resize-width\n // Editor state is updated only in onResizeStop to avoid lag\n },\n onResizeStop: ({ width, isMaxWidth }) => {\n editor\n .chain()\n .setContainerWidth(node.attrs.id, isMaxWidth ? null : width)\n .run();\n },\n });\n resizableHandlerCleanups.push(cleanupHorizontalResizeHandler);\n\n // Create vertical resize handler. Both top and bottom margins are linked\n // (change together). The handle sits on the layout's \"free\" edge:\n // - footer banner (BOTTOM) → top edge (where it meets the content above)\n // - top banner / regular layout → bottom edge\n const isFooterBanner = node.attrs.banner?.position === 'BOTTOM';\n const cleanupVerticalResize = createVerticalMarginResizeHandler({\n layoutWrapper,\n position: isFooterBanner ? 'top' : 'bottom',\n minPadding: 0,\n onResize: (newPadding: number) => {\n editor\n .chain()\n .updateNodeAttrsById(node.attrs.id, {\n backdropPaddingTop: newPadding,\n backdropPaddingBottom: newPadding,\n })\n .run();\n },\n });\n resizableHandlerCleanups.push(cleanupVerticalResize);\n};\n\nconst updateLayoutView = ({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n}: Pick<NodeViewRendererProps, 'node' | 'getPos' | 'editor'> & {\n layoutWrapper: HTMLDivElement;\n layoutStyle: HTMLStyleElement;\n layoutElement: HTMLDivElement;\n layoutContainer: HTMLDivElement;\n breakoutWrapper: HTMLDivElement;\n dropCursorElement: HTMLDivElement;\n syncPaywallDivider: (wrapper: HTMLElement, show: boolean) => void;\n state: LayoutNodeViewState;\n resizableHandlerCleanups: (() => void)[];\n isMobile: boolean;\n suppressDragHandle?: boolean;\n disableInteractions: boolean;\n colorPalette?: RicosPalette;\n modals?: ModalService;\n}) => {\n const { $to, $from } = editor.state.selection;\n const pos = getPos();\n const layoutEnd = pos + node.nodeSize;\n const isSelected = pos === $from.pos && layoutEnd === $to.pos;\n const isInSelection = pos >= $from.pos && layoutEnd <= $to.pos;\n const inLayout = isInLayout($to, node.attrs.id);\n const isCellSelected = isCellInLayoutSelected($to, $from, node.attrs.id, editor);\n // A NodeSelection on a block inside a cell, or on a container holding this layout, owns\n // the drag affordance: the layout's grips and resize handles next to it would read as\n // more handles for that node.\n const isOtherNodeSelected =\n editor.state.selection instanceof NodeSelection &&\n !isSelected &&\n !isCellSelected &&\n (inLayout || isInSelection);\n // While a modal is open the editor blurs, but the user is still acting on\n // this layout — keep chrome visible only when it is the strict NodeSelection\n // target. Cursor-in-layout / range-covers-layout / cell-selected chrome\n // requires real editor focus.\n const shouldShowActiveLayoutStyles =\n editor.view.hasFocus() || (isEditorOrModalActive(editor.view, modals) && isSelected);\n const scopeValue = `${node.attrs.id}-${node.attrs.responsivenessBreakpoint}-${node.attrs.responsivenessBehaviour}`;\n const isWrapping = node.attrs.responsivenessBehaviour === 'WRAP';\n const isBanner = isEdgeBanner(node.attrs.banner);\n // Show side resize handles when layout is selected, a cell is selected, cursor is inside the layout, or during column resize\n const shouldShowResize =\n shouldShowActiveLayoutStyles &&\n !isOtherNodeSelected &&\n (isSelected || isInSelection || isCellSelected || inLayout || state.isResizing);\n\n // Resize handler lifecycle (transition-only).\n const hasResizeHandlers = resizableHandlerCleanups.length > 0;\n if (hasResizeHandlers && !shouldShowResize) {\n resizableHandlerCleanups.forEach(cleanup => cleanup());\n resizableHandlerCleanups.length = 0;\n } else if (shouldShowResize && !hasResizeHandlers && !disableInteractions) {\n attachResizeHandlers({\n layoutContainer,\n layoutWrapper,\n editor,\n node,\n resizableHandlerCleanups,\n });\n }\n\n // Drag handle (creation-only; subsequent runs just update its data-hook).\n const existingDragHandleWrapper = breakoutWrapper.querySelector(\n '[data-layout-drag-handle-wrapper]'\n ) as HTMLDivElement | null;\n if (!isBanner && !suppressDragHandle && !existingDragHandleWrapper) {\n createLayoutDragHandle({ breakoutWrapper, layoutElement, nodeId: node.attrs.id, editor });\n } else if ((isBanner || suppressDragHandle) && existingDragHandleWrapper) {\n existingDragHandleWrapper.remove();\n } else if (!isBanner && existingDragHandleWrapper) {\n const existingDragHandle = existingDragHandleWrapper.querySelector(\n '[data-layout-handle]'\n ) as HTMLButtonElement | null;\n if (existingDragHandle) {\n setAttr(existingDragHandle, 'data-hook', `${LAYOUT_HANDLE}-${node.attrs.id}`);\n }\n }\n\n // layoutWrapper: classes, data attributes.\n layoutWrapper.classList.toggle(styles.withVerticalResize, shouldShowResize);\n const isPaywall = isPaywallLayoutNode(node);\n layoutWrapper.classList.toggle(styles.paywall, isPaywall);\n // Gated on an editable editor as well as paywall-ness, so the divider never shows in the\n // viewer. Appended last in the wrapper and absolutely positioned by layouts.scss.\n syncPaywallDivider(layoutWrapper, isPaywall && editor.isEditable);\n setAttr(\n layoutWrapper,\n 'data-layout-banner',\n isBanner ? (node.attrs.banner?.position === 'BOTTOM' ? 'bottom' : 'top') : null\n );\n\n // layoutWrapper: refresh data-hook so it tracks the node id across updates.\n setAttr(layoutWrapper, 'data-hook', getLayoutWrapperDataHook(node.attrs.id));\n\n // layoutElement: data attributes, class set, column template var.\n setAttr(layoutElement, 'data-layout-container', node.attrs.id);\n setAttr(layoutElement, 'data-layout-scope', scopeValue);\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-column-template',\n formatGridTemplateColumns(state.columnTemplate)\n );\n setClass(\n layoutElement,\n classNames({\n [styles.layout]: true,\n [styles.designOnLayout]: !node.attrs.designTarget || node.attrs.designTarget === 'LAYOUT',\n [styles.designOnCell]: node.attrs.designTarget === 'CELL',\n [styles.mobile]: isMobile,\n [styles.draggingOver]: state.isDraggingOver || state.dropCursorPosition !== null,\n [styles.invalidLeft]: state.invalid === 'left',\n [styles.invalidRight]: state.invalid === 'right',\n [styles.resizing]: state.isResizing,\n [styles.dragging]: state.isDragging,\n [styles.layoutSelected]: shouldShowActiveLayoutStyles && isInSelection,\n [styles.inLayout]: shouldShowActiveLayoutStyles && inLayout,\n [styles.bannerMargin]: isEdgeBanner(node.attrs.banner),\n })\n );\n\n // layoutContainer: custom width.\n const customWidth = node.attrs.containerData?.width?.custom;\n setStyleVar(\n layoutContainer,\n '--ricos-internal-layout-width',\n customWidth ? `${customWidth}px` : null\n );\n\n // layoutStyle: responsive container query CSS.\n const maxWidth = node.attrs.responsivenessBreakpoint\n ? parseInt(node.attrs.responsivenessBreakpoint, 10)\n : LAYOUT_DEFAULTS.responsivenessBreakpoint;\n const responsiveRules = [\n {\n selector: `[data-layout-scope=\"${scopeValue}\"].${styles.layout}`,\n declarations: `\n --ricos-internal-layout-display: ${isWrapping ? 'flex' : 'grid'};\n --ricos-internal-layout-justify-content: ${isWrapping ? 'center' : 'auto'};\n --ricos-internal-layout-grid-template: grid-template-columns: minmax(0, 1fr);\n --ricos-internal-layout-cell-min-width: ${\n isWrapping\n ? `${Math.floor(node.attrs.responsivenessBreakpoint / node.childCount)}px`\n : '100%'\n };\n --ricos-internal-layout-cell-height: ${isWrapping ? 'auto' : '100%'};\n `,\n },\n {\n selector: `[data-layout-scope=\"${scopeValue}\"] .${styles.resizeHandler}`,\n declarations: 'display: none;',\n },\n ];\n setText(\n layoutStyle,\n `\n @supports not (contain: inline-size) {\n @media only screen and (max-width: ${maxWidth}px) {\n ${responsiveRules.map(({ selector, declarations }) => `${selector} {${declarations}}`).join('\\n')}\n }\n }\n ${buildResponsiveCss(`(width < ${maxWidth}px)`, responsiveRules)}\n `\n );\n\n // dropCursor: presence + position.\n const showDropCursor = state.dropCursorPosition !== null;\n setStyleVar(\n dropCursorElement,\n '--ricos-internal-layout-drop-cursor-position',\n showDropCursor ? `${state.dropCursorPosition}px` : null\n );\n setChild(layoutWrapper, dropCursorElement, showDropCursor);\n\n // Background fill (gradient OR color OR none).\n const backgroundGradient = getResolvedLayoutFillGradient(\n node.attrs.background,\n node.attrs.backgroundColor\n );\n const backgroundColorValue = getResolvedLayoutFillColor(\n node.attrs.background,\n node.attrs.backgroundColor\n );\n applyFill(layoutElement, {\n gradient: backgroundGradient,\n color: backgroundColorValue,\n gradientVar: '--ricos-internal-layout-background-gradient',\n colorVar: '--ricos-internal-layout-background-color',\n colorPalette,\n });\n\n // Background image.\n applyImage(layoutElement, node.attrs.backgroundImage, '--ricos-internal-layout-background-image');\n\n // Background image overlay (only visible when image present): gradient > color-with-opacity.\n applyImageOverlay(layoutElement, {\n image: node.attrs.backgroundImage,\n gradient: backgroundGradient,\n color: backgroundColorValue,\n overlayVar: '--ricos-internal-layout-background-overlay',\n });\n\n // Border + radius + gap on layoutElement.\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-border-color',\n node.attrs.borderColor\n ? (resolveDocumentColorToCss(node.attrs.borderColor) ?? node.attrs.borderColor)\n : null\n );\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-border-width',\n node.attrs.borderColor ? `${node.attrs.borderWidth}px` : null\n );\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-border-radius',\n node.attrs.borderRadius ? `${node.attrs.borderRadius}px` : null\n );\n // NB: existing code wrote `--ricos-internal-layout-vertical-gap` only on removal,\n // and `--ricos-internal-layout-gap` only on set. Preserved as-is to avoid behavior change.\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-gap',\n typeof node.attrs.gap === 'number' ? `${node.attrs.gap}px` : null\n );\n if (typeof node.attrs.gap !== 'number') {\n setStyleVar(layoutElement, '--ricos-internal-layout-vertical-gap', null);\n }\n\n // Backdrop fill (gradient OR color OR none).\n const backdropGradient = getResolvedLayoutFillGradient(\n node.attrs.backdrop,\n node.attrs.backdropColor\n );\n const backdropColorValue = getResolvedLayoutFillColor(\n node.attrs.backdrop,\n node.attrs.backdropColor\n );\n applyFill(layoutWrapper, {\n gradient: backdropGradient,\n color: backdropColorValue,\n gradientVar: '--ricos-internal-layout-backdrop-gradient',\n colorVar: '--ricos-internal-layout-backdrop-color',\n colorPalette,\n });\n\n // Backdrop image.\n applyImage(layoutWrapper, node.attrs.backdropImage, '--ricos-internal-layout-backdrop-image');\n\n // Backdrop padding.\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-backdrop-padding-top',\n node.attrs.backdropPaddingTop ? `${node.attrs.backdropPaddingTop}px` : null\n );\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-backdrop-padding-bottom',\n node.attrs.backdropPaddingBottom ? `${node.attrs.backdropPaddingBottom}px` : null\n );\n\n // Backdrop image overlay (only visible when image present): gradient > color-with-opacity.\n applyImageOverlay(layoutWrapper, {\n image: node.attrs.backdropImage,\n gradient: backdropGradient,\n color: backdropColorValue,\n overlayVar: '--ricos-internal-layout-backdrop-overlay',\n });\n\n // Cell padding (4-side, with css-shorthand-style fallbacks: cellPadding[i] || [i-2] || [0]).\n const cellPadding =\n node.attrs.cellPadding && node.attrs.cellPadding.length > 0 ? node.attrs.cellPadding : null;\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-cell-padding-top',\n cellPadding ? `${cellPadding[0]}px` : null\n );\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-cell-padding-right',\n cellPadding ? `${cellPadding[1] ?? cellPadding[0]}px` : null\n );\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-cell-padding-bottom',\n cellPadding ? `${cellPadding[2] ?? cellPadding[0]}px` : null\n );\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-cell-padding-left',\n cellPadding ? `${cellPadding[3] ?? cellPadding[1] ?? cellPadding[0]}px` : null\n );\n\n // Section dividers (decorative shape bands at the layout's top/bottom edge).\n applySectionDivider(layoutWrapper, node.attrs.topDivider, 'top');\n applySectionDivider(layoutWrapper, node.attrs.bottomDivider, 'bottom');\n\n // Cell vertical alignment.\n const verticalAlignment =\n node.attrs.cellVerticalAlignment === 'TOP'\n ? 'flex-start'\n : node.attrs.cellVerticalAlignment === 'BOTTOM'\n ? 'flex-end'\n : node.attrs.cellVerticalAlignment\n ? 'center'\n : null;\n setStyleVar(layoutWrapper, '--ricos-internal-layout-cell-vertical-alignment', verticalAlignment);\n};\n\n// Create/update/remove the divider band for one layout edge. A divider is one\n// element per layer (base shape + optional stacked copies) inside a clip\n// element that both edges share — a direct child of layoutWrapper (ProseMirror\n// only manages contentDOM, and ignoreMutation covers the divider elements) —\n// anchored to the wrapper's edges so the shape touches the layout box on all\n// sides and bands taller than the layout crop instead of escaping it. Heights\n// scale only the shapes, never the layout box. Per-layer presentation is\n// inline styles (fully-owned elements, overwritten wholesale each pass); only\n// the edge-wide color/flip flow through CSS variables on layoutWrapper.\nconst appliedDividers = new WeakMap<HTMLElement, { top?: unknown; bottom?: unknown }>();\n\nconst applySectionDivider = (\n layoutWrapper: HTMLElement,\n divider: PmLayoutNode['attrs']['topDivider'],\n edge: 'top' | 'bottom'\n) => {\n // updateLayoutView runs on every selection update, and divider attrs are\n // immutable PM objects — reference equality means the masks and styles below\n // are already applied, so skip the SVG data-URI recomputation and selector\n // queries entirely.\n const applied = appliedDividers.get(layoutWrapper) ?? {};\n if (applied[edge] === divider) {\n return;\n }\n applied[edge] = divider;\n appliedDividers.set(layoutWrapper, applied);\n\n const varPrefix = `--ricos-internal-layout-${edge}-divider`;\n let clipElement = layoutWrapper.querySelector<HTMLElement>(\n ':scope > [data-layout-dividers-clip]'\n );\n const existing = clipElement\n ? Array.from(\n clipElement.querySelectorAll<HTMLElement>(`:scope > [data-layout-divider=\"${edge}\"]`)\n )\n : [];\n // Paint order: DOM order = array order, base shape last (on top).\n const layers = divider ? getDividerLayers(divider) : [];\n\n existing.slice(layers.length).forEach(el => el.remove());\n\n if (layers.length && !clipElement) {\n clipElement = document.createElement('div');\n clipElement.setAttribute('contenteditable', 'false');\n clipElement.setAttribute('data-layout-dividers-clip', '');\n clipElement.classList.add(styles.sectionDividerClip);\n layoutWrapper.append(clipElement);\n }\n\n // Both edges' layers share the clip element, so DOM order decides cross-edge\n // paint order. The viewer always renders top layers before bottom (bottom\n // paints above top) — anchor new top-edge elements before any bottom-edge\n // ones so the stacking matches regardless of which divider the user applied\n // first.\n const insertBeforeElement =\n edge === 'top' && clipElement\n ? clipElement.querySelector(':scope > [data-layout-divider=\"bottom\"]')\n : null;\n\n layers.forEach((layer, index) => {\n let el = existing[index];\n if (!el) {\n el = document.createElement('div');\n el.setAttribute('contenteditable', 'false');\n el.setAttribute('data-layout-divider', edge);\n el.classList.add(\n styles.sectionDivider,\n edge === 'top' ? styles.sectionDividerTop : styles.sectionDividerBottom\n );\n clipElement!.insertBefore(el, insertBeforeElement);\n }\n setAttr(el, 'data-divider-layer', String(index));\n setAttr(\n el,\n 'style',\n `height:${layer.height};opacity:${layer.opacity};` +\n `mask-image:${layer.mask};-webkit-mask-image:${layer.mask};` +\n `mask-size:${layer.maskSize};-webkit-mask-size:${layer.maskSize};` +\n `mask-repeat:${layer.maskRepeat};-webkit-mask-repeat:${layer.maskRepeat};` +\n (layer.maskPosition\n ? `mask-position:${layer.maskPosition};-webkit-mask-position:${layer.maskPosition};`\n : '')\n );\n });\n\n setStyleVar(\n layoutWrapper,\n `${varPrefix}-color`,\n divider?.color ? (resolveDocumentColorToCss(divider.color) ?? divider.color) : null\n );\n setStyleVar(\n layoutWrapper,\n `${varPrefix}-flip`,\n divider && (divider.flipped ?? DIVIDER_PRESETS[divider.type].defaultFlipped) ? '-1' : null\n );\n};\n\ntype ApplyFillArgs = {\n gradient: ReturnType<typeof getResolvedLayoutFillGradient>;\n color: ReturnType<typeof getResolvedLayoutFillColor>;\n gradientVar: string;\n colorVar: string;\n colorPalette?: RicosPalette;\n};\n\n// Apply a fill (gradient OR solid color) to an element via CSS variables.\n// Mirrors the original three-way precedence: gradient > color > none.\nconst applyFill = (\n el: HTMLElement,\n { gradient, color, gradientVar, colorVar, colorPalette }: ApplyFillArgs\n) => {\n setStyleVar(el, gradientVar, gradient ? schemaGradientToCss(gradient as Gradient) : null);\n setStyleVar(\n el,\n colorVar,\n !gradient && color ? (resolveDocumentColorToCss(color) ?? color) : null\n );\n setStyleVar(\n el,\n '--ricos-internal-selection-color-tuple',\n !gradient && color && color !== TRANSPARENT_HEX_COLOR\n ? getContrastYIQ(color, colorPalette) === 'black'\n ? '0, 0, 0'\n : '255, 255, 255'\n : null\n );\n};\n\n// Apply an optional background/backdrop image to an element via CSS variables.\nconst applyImage = (\n el: HTMLElement,\n image: PmNode['attrs']['backgroundImage'] | undefined,\n varPrefix: string\n) => {\n const imageUrl = image\n ? (image.media?.src.url ?? (image.media?.src.id && getImageUrl(image.media)))\n : null;\n setStyleVar(el, `${varPrefix}-src`, imageUrl ? `url(${imageUrl})` : null);\n setStyleVar(el, `${varPrefix}-opacity`, image?.opacity ? `${image.opacity}%` : null);\n setStyleVar(el, `${varPrefix}-scaling`, image?.scaling ? image.scaling.toLowerCase() : null);\n setStyleVar(\n el,\n `${varPrefix}-position`,\n image?.position ? image.position.toLowerCase().split('_').join(' ') : null\n );\n // Blur is independent of any color overlay — both layers stack.\n setStyleVar(el, `${varPrefix}-blur`, image?.blur ? `blur(${image.blur}px)` : null);\n};\n\ntype ApplyImageOverlayArgs = {\n image: PmNode['attrs']['backgroundImage'] | undefined;\n gradient: ReturnType<typeof getResolvedLayoutFillGradient>;\n color: ReturnType<typeof getResolvedLayoutFillColor>;\n overlayVar: string;\n};\n\n// Apply a color/gradient overlay to a background/backdrop image. Only set when an image is present.\n// `image.overlay` (new model) is authoritative when present; otherwise the legacy `background`/\n// `backdrop` fill is rendered through the image's opacity. Gradient takes precedence over color.\nconst applyImageOverlay = (\n el: HTMLElement,\n { image, gradient, color, overlayVar }: ApplyImageOverlayArgs\n) => {\n let overlay: string | null = null;\n if (image) {\n if (image.overlay) {\n overlay =\n image.overlay.type === 'GRADIENT'\n ? schemaGradientToCss(image.overlay.gradient as Gradient)\n : (resolveDocumentColorToCss(image.overlay.color) ?? image.overlay.color);\n } else if (gradient) {\n overlay = schemaGradientToCss(gradient as Gradient);\n } else if (color) {\n overlay = resolveBackwardCompatOverlay(\n resolveDocumentColorToCss(color) ?? color,\n image.opacity ?? 100,\n 100\n );\n }\n }\n setStyleVar(el, overlayVar, overlay);\n};\n\n// The editor-only marker of the free/paid cut. Pure chrome — it adds no document node.\n// Built once per view, so its translated labels are fixed for the view's lifetime.\nconst createPaywallDivider = (t: (key: string) => string): HTMLDivElement => {\n const divider = document.createElement('div');\n divider.className = styles.paywallDivider;\n divider.setAttribute('data-hook', PAYWALL_DIVIDER);\n divider.setAttribute('aria-hidden', 'true');\n divider.setAttribute('contenteditable', 'false');\n\n const label = document.createElement('span');\n label.className = styles.paywallDividerLabel;\n\n const arrowUp = document.createElement('span');\n arrowUp.className = styles.paywallDividerArrow;\n arrowUp.textContent = '↑';\n\n const arrowDown = document.createElement('span');\n arrowDown.className = styles.paywallDividerArrow;\n arrowDown.textContent = '↓';\n\n label.append(\n document.createTextNode(`${t('GatedContent_Divider_NonSubscribersView')} `),\n arrowUp,\n document.createTextNode(' / '),\n arrowDown,\n document.createTextNode(` ${t('GatedContent_Divider_SubscribersOnlyBelow')}`)\n );\n divider.append(label);\n return divider;\n};\n\nconst getGridTemplateColumns = (node: PmNode) => {\n const cols: number[] = [];\n\n node.content.forEach(cell => {\n if ((cell.type.name as unknown as Node_Type) === Node_Type.LAYOUT_CELL) {\n cols.push(cell.attrs.colSpan);\n }\n });\n\n return cols;\n};\n\nconst formatGridTemplateColumns = (colSpans: number[]) => {\n return colSpans.map(col => `minmax(0, ${col}fr)`).join(' ');\n};\n\ntype LayoutDragHandleProps = {\n breakoutWrapper: HTMLElement;\n layoutElement: HTMLElement;\n nodeId: string;\n editor: NodeViewRendererProps['editor'];\n};\n\nconst createLayoutDragHandle = ({\n breakoutWrapper,\n layoutElement,\n nodeId,\n editor,\n}: LayoutDragHandleProps): (() => void) => {\n // Create drag handle wrapper with contenteditable=false to prevent selection\n const layoutDragHandleWrapper = document.createElement('div');\n layoutDragHandleWrapper.setAttribute('contenteditable', 'false');\n layoutDragHandleWrapper.setAttribute('data-layout-drag-handle-wrapper', '');\n layoutDragHandleWrapper.classList.add(styles.layoutHandlerWrapper);\n\n // Create the drag handle button\n const layoutDragHandle = document.createElement('button');\n layoutDragHandle.setAttribute('data-drag-handle', '');\n layoutDragHandle.setAttribute('data-layout-handle', '');\n layoutDragHandle.setAttribute('data-hook', `${LAYOUT_HANDLE}-${nodeId}`);\n layoutDragHandle.setAttribute('type', 'button');\n layoutDragHandle.classList.add(styles.layoutHandler);\n layoutDragHandle.innerHTML = getMoveIcon();\n\n // Click handler for selecting layout\n const handleClick = () => {\n const layoutId = layoutElement.getAttribute('data-layout-container');\n if (layoutId) {\n editor.chain().selectLayout(layoutId).focus().run();\n }\n };\n\n layoutDragHandle.addEventListener('click', handleClick);\n layoutDragHandleWrapper.append(layoutDragHandle);\n breakoutWrapper.append(layoutDragHandleWrapper);\n\n // Return cleanup function\n return () => {\n layoutDragHandle.removeEventListener('click', handleClick);\n if (layoutDragHandleWrapper.parentNode === breakoutWrapper) {\n breakoutWrapper.removeChild(layoutDragHandleWrapper);\n }\n };\n};\n\ntype VerticalMarginResizeHandlerProps = {\n layoutWrapper: HTMLElement;\n position: 'top' | 'bottom';\n minPadding: number;\n onResize: (newPadding: number) => void;\n};\n\nconst createVerticalMarginResizeHandler = ({\n layoutWrapper,\n position,\n minPadding,\n onResize,\n}: VerticalMarginResizeHandlerProps): (() => void) => {\n // Create the resize handle element\n const handle = document.createElement('div');\n handle.className = position === 'top' ? staticsStyles.handlerTop : staticsStyles.handlerBottom;\n handle.setAttribute('data-hook', `ricos-resize-handler-${position}`);\n\n // Ensure layoutWrapper has position: relative for absolute positioning\n const originalPosition = layoutWrapper.style.position;\n if (!originalPosition || originalPosition === 'static') {\n layoutWrapper.style.position = 'relative';\n }\n\n layoutWrapper.appendChild(handle);\n\n let startY = 0;\n let startPadding = 0;\n let currentPointerId: number | null = null;\n\n const removePointerListeners = () => {\n handle.removeEventListener('pointermove', handlePointerMove);\n handle.removeEventListener('pointerup', handlePointerUp);\n handle.removeEventListener('pointercancel', handlePointerUp);\n handle.removeEventListener('lostpointercapture', handleLostPointerCapture);\n };\n\n /**\n * End the resize: release capture, remove listeners, commit final padding, clear state.\n * When clientY is provided (normal pointerup), final padding is computed from delta.\n * When not provided (lostpointercapture or pointerId mismatch), padding is read from current computed style.\n */\n const finishResize = (clientY?: number) => {\n if (currentPointerId === null) {\n return;\n }\n\n if (handle.hasPointerCapture(currentPointerId)) {\n handle.releasePointerCapture(currentPointerId);\n }\n\n removePointerListeners();\n\n let newPadding: number;\n if (clientY !== undefined) {\n const deltaY = clientY - startY;\n const adjustedDelta = position === 'top' ? -deltaY : deltaY;\n newPadding = Math.round(\n Math.max(minPadding, Math.min(MAX_VERTICAL_MARGIN, startPadding + adjustedDelta * 0.55))\n );\n } else {\n const computedStyle = window.getComputedStyle(layoutWrapper);\n const paddingProp = position === 'top' ? 'paddingTop' : 'paddingBottom';\n const computed = parseInt(computedStyle[paddingProp], 10);\n newPadding = !isNaN(computed)\n ? Math.max(minPadding, Math.min(MAX_VERTICAL_MARGIN, computed))\n : minPadding;\n }\n\n layoutWrapper.style.setProperty(\n '--ricos-internal-layout-backdrop-padding-top',\n `${newPadding}px`\n );\n layoutWrapper.style.setProperty(\n '--ricos-internal-layout-backdrop-padding-bottom',\n `${newPadding}px`\n );\n\n onResize(newPadding);\n currentPointerId = null;\n };\n\n const handleLostPointerCapture = (event: PointerEvent) => {\n if (currentPointerId === null || event.pointerId !== currentPointerId) {\n return;\n }\n finishResize();\n };\n\n const handlePointerDown = (event: PointerEvent) => {\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n currentPointerId = event.pointerId;\n startY = event.clientY;\n\n // Read current padding from computed style - this always reflects the actual rendered value\n const computedStyle = window.getComputedStyle(layoutWrapper);\n const paddingProp = position === 'top' ? 'paddingTop' : 'paddingBottom';\n const computed = parseInt(computedStyle[paddingProp], 10);\n startPadding = !isNaN(computed) ? computed : 0;\n\n handle.setPointerCapture(event.pointerId);\n handle.addEventListener('pointermove', handlePointerMove);\n handle.addEventListener('pointerup', handlePointerUp);\n handle.addEventListener('pointercancel', handlePointerUp);\n handle.addEventListener('lostpointercapture', handleLostPointerCapture);\n };\n\n const handlePointerMove = (event: PointerEvent) => {\n if (currentPointerId === null || currentPointerId !== event.pointerId) {\n return;\n }\n\n const deltaY = event.clientY - startY;\n // For top handle, dragging up (negative deltaY) should increase padding\n // For bottom handle, dragging down (positive deltaY) should increase padding\n const adjustedDelta = position === 'top' ? -deltaY : deltaY;\n const newPadding = Math.round(\n Math.max(minPadding, Math.min(MAX_VERTICAL_MARGIN, startPadding + adjustedDelta * 0.55))\n );\n\n // Update visual feedback immediately via CSS variables (both top and bottom for linked margins)\n layoutWrapper.style.setProperty(\n '--ricos-internal-layout-backdrop-padding-top',\n `${newPadding}px`\n );\n layoutWrapper.style.setProperty(\n '--ricos-internal-layout-backdrop-padding-bottom',\n `${newPadding}px`\n );\n };\n\n const handlePointerUp = (event: PointerEvent) => {\n if (currentPointerId === null) {\n return;\n }\n if (currentPointerId !== event.pointerId) {\n // Mismatch: still clean up so we don't leave capture/listeners stuck\n finishResize();\n return;\n }\n\n finishResize(event.clientY);\n };\n\n handle.addEventListener('pointerdown', handlePointerDown);\n\n // Return cleanup function\n return () => {\n if (currentPointerId !== null && handle.hasPointerCapture(currentPointerId)) {\n handle.releasePointerCapture(currentPointerId);\n }\n removePointerListeners();\n handle.removeEventListener('pointerdown', handlePointerDown);\n\n if (handle.parentNode === layoutWrapper) {\n layoutWrapper.removeChild(handle);\n }\n\n if (!originalPosition || originalPosition === 'static') {\n layoutWrapper.style.position = originalPosition || '';\n }\n };\n};\n\nconst isInLayout = ($pos: ResolvedPos, nodeId: string) => {\n const layoutNode = findParentNodeClosestToPos(\n $pos,\n node => node.type?.name === TIPTAP_LAYOUT_TYPE\n )?.node;\n\n return layoutNode?.attrs.id === nodeId;\n};\n\nconst isCellInLayoutSelected = (\n $to: ResolvedPos,\n $from: ResolvedPos,\n layoutId: string,\n editor: NodeViewRendererProps['editor']\n): boolean => {\n // Check if a cell node is selected (NodeSelection)\n const selection = editor.state.selection;\n if (!(selection instanceof NodeSelection)) {\n return false;\n }\n\n const selectedNode = selection.node;\n if (selectedNode?.type.name !== TIPTAP_LAYOUT_CELL_TYPE) {\n return false;\n }\n\n // Check if this cell belongs to this layout\n const layoutNode = findParentNodeClosestToPos(\n $from,\n node => node.type?.name === TIPTAP_LAYOUT_TYPE\n )?.node;\n\n return layoutNode?.attrs.id === layoutId;\n};\n\nconst getCellParent = (node: ProseMirrorNode, cellId: string): ProseMirrorNode | null => {\n let parent: ProseMirrorNode | null = null;\n node.descendants((child, _pos, par) => {\n if (child.attrs.id === cellId) {\n parent = par;\n }\n });\n\n return parent;\n};\n\nconst getCellIndex = (node: PmNode, cellId: string) => {\n let index = -1;\n\n node.content.forEach((cell, _offset, i) => {\n if (cell.attrs.id === cellId) {\n index = i;\n }\n });\n\n return index;\n};\n\nconst isDraggingCell = (editor: NodeViewRendererProps['editor']) => {\n const slice = editor.view.dragging?.slice;\n\n if (!slice) {\n return false;\n }\n\n return (\n slice.openStart === 0 &&\n slice.openEnd === 0 &&\n slice.content.childCount === 1 &&\n editor.view.dragging?.slice.content.firstChild?.type.name === TIPTAP_LAYOUT_CELL_TYPE\n );\n};\n\nconst attachCellResizeHandler = ({\n layoutElement,\n state,\n editor,\n setState,\n}: Pick<NodeViewRendererProps, 'editor'> & {\n layoutElement: HTMLElement;\n state: LayoutNodeViewState;\n setState: (state: Partial<LayoutNodeViewState>) => void;\n}) => {\n const onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0) {\n return;\n }\n const dragHandle: HTMLElement | null = (event.target as HTMLElement)?.closest(\n '[data-layout-cell-resize-handle]'\n );\n\n if (!dragHandle || !event.currentTarget) {\n return;\n }\n\n const cellNodeId = dragHandle.dataset.layoutCellResizeHandle;\n\n if (!cellNodeId) {\n logInvariant(\n Error(\n 'Cell resize prevented. No cell id found! Make sure to add the data-layout-cell-resize-handle attribute to the drag handle'\n )\n );\n return;\n }\n event.preventDefault();\n\n // Set resizing state immediately to hide the blue selection overlay\n setState({ isResizing: true });\n\n const layoutNode = getCellParent(editor.state.doc, cellNodeId);\n\n if (!layoutNode) {\n logInvariant(Error('Cell resize prevented. Draggable cell has no parent!'));\n return;\n }\n\n const index = getCellIndex(layoutNode, cellNodeId);\n const currentOffset = event.clientX;\n const parentRect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const fractionInPixels = parentRect.width / MAX_COLUMNS;\n const minColumnWidth = fractionInPixels * MIN_COL_SPAN;\n const columnTemplateInFractionsByPixel = state.columnTemplate.map(\n col => col * fractionInPixels\n );\n\n // Clear any existing selection when starting resize\n window.getSelection()?.removeAllRanges();\n\n // Prevent any selection from starting during resize\n const preventSelection = (e: Event) => {\n e.preventDefault();\n };\n document.addEventListener('selectstart', preventSelection);\n\n setState({\n columnTemplate: columnTemplateInFractionsByPixel,\n isResizing: true,\n });\n\n const onDrag = (event: PointerEvent) => {\n event.preventDefault();\n let invalid: 'none' | 'left' | 'right' = 'none';\n\n const offset = currentOffset - event.clientX;\n\n const newTemplate = [...columnTemplateInFractionsByPixel];\n newTemplate[index] = columnTemplateInFractionsByPixel[index] + offset;\n newTemplate[index - 1] = columnTemplateInFractionsByPixel[index - 1] - offset;\n\n if (newTemplate[index] < minColumnWidth) {\n const diff = minColumnWidth - newTemplate[index];\n newTemplate[index] = minColumnWidth;\n newTemplate[index - 1] -= diff;\n invalid = 'right';\n }\n\n if (newTemplate[index - 1] < minColumnWidth) {\n const diff = minColumnWidth - newTemplate[index - 1];\n newTemplate[index - 1] = minColumnWidth;\n newTemplate[index] -= diff;\n invalid = 'left';\n }\n\n if (newTemplate.some(col => col < minColumnWidth)) {\n setState({ invalid });\n return;\n }\n\n setState({\n columnTemplate: newTemplate,\n invalid,\n });\n };\n\n const stopDrag = (event: PointerEvent) => {\n event.preventDefault();\n\n // Remove selection prevention listener\n document.removeEventListener('selectstart', preventSelection);\n\n // Clear any text selection that occurred during resize\n window.getSelection()?.removeAllRanges();\n\n const templateInFractions = state.columnTemplate.map(col => {\n return Math.round(col / fractionInPixels);\n });\n\n const diff = MAX_COLUMNS - templateInFractions.reduce((acc, val) => acc + val, 0);\n templateInFractions[index] += diff;\n\n editor\n .chain()\n .setCellsColSpan(layoutNode.attrs.id, templateInFractions)\n .selectLayout(layoutNode.attrs.id)\n .focus()\n .run();\n\n setState({\n invalid: 'none',\n isResizing: false,\n columnTemplate: templateInFractions,\n });\n\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointermove', onDrag);\n };\n\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointermove', onDrag);\n };\n\n layoutElement.addEventListener('pointerdown', onPointerDown);\n\n return () => {\n layoutElement.removeEventListener('pointerdown', onPointerDown);\n };\n};\n\nconst attachCellDragHandler = ({\n layoutElement,\n editor,\n setState,\n}: Pick<NodeViewRendererProps, 'editor'> & {\n layoutElement: HTMLElement;\n setState: (state: Partial<LayoutNodeViewState>) => void;\n}) => {\n const onDragStart = (event: DragEvent) => {\n const raw = event.target;\n const element = raw instanceof Element ? raw : raw instanceof Text ? raw.parentElement : null;\n if (!element) {\n return;\n }\n\n if (element.closest('[data-block-drag-handle]')) {\n return;\n }\n\n const cellElement = element.closest('[data-layout-cell]') as HTMLElement | null;\n const cellNodeId = cellElement?.getAttribute('data-layout-cell');\n if (!cellNodeId || !cellElement) {\n return;\n }\n\n // Drags from inner draggable nodes (buttons, images, etc.) bubble through here too.\n // Only treat this as a cell drag when the cell itself is the closest draggable element.\n const draggableAncestor = element.closest('[draggable=\"true\"]');\n if (draggableAncestor !== cellElement) {\n return;\n }\n\n editor.commands.selectCell(cellNodeId);\n event.dataTransfer?.setDragImage(cellElement, 0, 0);\n\n // Capture the source layout now, while the cell is still inside it. When the\n // cell is dropped outside any layout it ends up orphaned; cell-normalizing\n // uses this to re-wrap it in a layout that keeps the source styling and to\n // remove the now-drained source layout. Keyed by layout id (preserved across\n // the drop) rather than cell id (regenerated on the card-paste path).\n const sourceLayout = findLayoutOfCell(editor.state.doc, cellNodeId);\n (editor.storage[TIPTAP_LAYOUT_TYPE] as LayoutExtensionStorage).draggedCellSourceLayout =\n sourceLayout\n ? {\n layoutId: sourceLayout.node.attrs.id,\n attrs: sourceLayout.node.attrs,\n // Only the source layout that held this cell *alone* should be removed\n // after the drop. A multi-cell source keeps its remaining cell(s).\n wasOnlyCell: sourceLayout.node.childCount === 1,\n }\n : null;\n };\n\n // This is heavily based on prosemirror-view `drop` event. We only need this because PM-View can't\n // handle position resolving for vertical content.\n // https://github.com/ProseMirror/prosemirror-view/blob/0954f523ee0a193f7db3992702e6a3979ade89b8/src/input.ts#L702\n const onDrop = (event: DragEvent) => {\n if (!isDraggingCell(editor)) {\n // Non-cell drops are not this node view's business — the editor's own handlers\n // (block drag handle, PM's built-in drop) resolve them.\n setState({ dropCursorPosition: null, isDraggingOver: false });\n return;\n }\n if (!event.target) {\n return;\n }\n event.stopPropagation();\n setState({ dropCursorPosition: null, isDraggingOver: false });\n const view = editor.view;\n const dragging = view.dragging;\n const slice = dragging?.slice;\n view.dragging = null;\n\n if (!slice) {\n logInvariant(Error('Cell Drag prevented. PM view has no dragging slice'));\n return;\n }\n\n const sourceCell = slice.content.firstChild;\n const sourceCellId = sourceCell?.attrs.id;\n const eventPos = view.posAtDOM(event.target as HTMLElement, 0);\n const $eventPos = view.state.doc.resolve(eventPos);\n if (!eventPos || !sourceCellId) {\n logInvariant(Error('Cell Drag prevented. Cannot resolve event position or source cell id'));\n return;\n }\n\n const layoutNode = findParentNodeClosestToPos(\n $eventPos,\n node => node.type?.name === TIPTAP_LAYOUT_TYPE\n )?.node;\n\n if (!layoutNode) {\n logInvariant(Error('Cell Drag prevented. Cannot resolve target layout node'));\n return;\n }\n\n const cellIndexInSourceLayout = getCellIndex(layoutNode, sourceCellId);\n const isCellMovedToOtherLayout = cellIndexInSourceLayout === -1;\n if (layoutNode.childCount >= MAX_CELLS && isCellMovedToOtherLayout) {\n return;\n }\n\n const { node: cellNode, pos: cellPos } = findParentNodeClosestToPos(\n $eventPos,\n node => node.type?.name === TIPTAP_LAYOUT_CELL_TYPE\n ) ?? { node: null, pos: -1 };\n\n if (!cellNode || (layoutNode.childCount === 1 && layoutNode.firstChild === sourceCell)) {\n return;\n }\n\n const layout = event.currentTarget as HTMLElement;\n const layoutRect = layout.getBoundingClientRect();\n const cell = (event.target as HTMLElement).closest('[data-layout-cell]');\n\n if (!cell) {\n logInvariant(Error('Cell Drag prevented. Cannot find cell element'));\n return;\n }\n\n const mouseXInLayout = event.clientX - layoutRect.left;\n const cellRect = cell.getBoundingClientRect();\n\n const insertPos =\n mouseXInLayout < cellRect.left - layoutRect.left + cellRect.width / 2\n ? cellPos\n : cellPos + cellNode?.nodeSize;\n\n if (!insertPos) {\n logInvariant(Error('Cell Drag prevented. Cannot resolve insert position'));\n return;\n }\n\n event.preventDefault();\n\n const tr = view.state.tr;\n // @ts-expect-error\n const { node } = dragging;\n\n if (node) {\n node.replace(tr);\n } else {\n tr.deleteSelection();\n }\n\n const pos = tr.mapping.map(insertPos);\n const beforeInsert = tr.doc;\n\n if (!slice.content.firstChild) {\n return;\n }\n\n tr.replaceRangeWith(pos, pos, slice.content.firstChild);\n\n if (tr.doc.eq(beforeInsert)) {\n return;\n }\n\n const $pos = tr.doc.resolve(pos);\n\n tr.setSelection(new NodeSelection($pos));\n\n if (sourceCellId) {\n const sourceLayoutNode = findLayoutOfCell(view.state.doc, sourceCellId);\n if (sourceLayoutNode) {\n // If cell was moved to another layout, balance the cells in the source layout\n const sourceLayoutInNewTr = findNodeById(tr, sourceLayoutNode.node.attrs.id).pop();\n if (sourceLayoutInNewTr && isCellMovedToOtherLayout) {\n balanceLayoutCells(tr, sourceLayoutInNewTr.node, sourceLayoutInNewTr.pos);\n }\n }\n\n // If cell was moved to another layout, balance the cells in the target layout\n const targetLayoutNode = findLayoutOfCell(tr.doc, sourceCellId);\n if (targetLayoutNode && isCellMovedToOtherLayout) {\n balanceLayoutCells(tr, targetLayoutNode.node, targetLayoutNode.pos);\n }\n }\n\n view.focus();\n view.dispatch(tr);\n };\n\n const onDragOver = (event: DragEvent) => {\n setState({\n isDraggingOver: true,\n });\n\n if (!isDraggingCell(editor)) {\n // Not a cell reorder — let the event bubble unclaimed so the editor's own\n // handlers resolve it (the block drag handle or ProseMirror's built-in dragover,\n // either of which calls preventDefault itself to keep the drop allowed).\n // preventDefault() here would mark the event defaultPrevented, and ProseMirror's\n // eventBelongsToView() drops any such event — starving those handlers and leaving\n // their last published drop-cursor position stale.\n return;\n }\n\n event.preventDefault();\n\n const layout = event.currentTarget as HTMLElement;\n const layoutWrapper = layout.closest('[data-layout-wrapper]');\n\n if (!layoutWrapper) {\n return;\n }\n\n const scale = getElementScale(layout);\n const layoutWrapperRect = layoutWrapper.getBoundingClientRect();\n const cellDropAreas = [...layout.querySelectorAll('[data-layout-cell]')].reduce(\n (acc, cell, index) => {\n const rect = cell.getBoundingClientRect();\n const prevCell = acc[acc.length - 1];\n const left = rect.left - layoutWrapperRect.left;\n return [\n ...acc,\n {\n left: index === 0 ? left : left - (left - prevCell.right) / 2,\n right: rect.right - layoutWrapperRect.left,\n width: rect.width,\n },\n ];\n },\n [] as { left: number; right: number; width: number }[]\n );\n const mouseXInLayout = event.clientX - layoutWrapperRect.left;\n const cellInsideIndex = cellDropAreas.findIndex(cell => {\n return mouseXInLayout > cell.left && mouseXInLayout < cell.right;\n });\n\n if (cellInsideIndex === -1) {\n return;\n }\n\n const cellInside = cellDropAreas[cellInsideIndex];\n const dropIndex =\n mouseXInLayout < cellInside.left + cellInside.width / 2\n ? cellInsideIndex\n : cellInsideIndex + 1;\n\n setState({\n dropCursorPosition:\n (dropIndex >= cellDropAreas.length\n ? cellDropAreas[cellDropAreas.length - 1].right\n : cellDropAreas[dropIndex].left) / scale.scaleX,\n });\n };\n\n const onDragLeave = (event: DragEvent) => {\n if ((event.currentTarget as HTMLElement).contains(event.relatedTarget as HTMLElement)) {\n return;\n }\n\n setState({\n dropCursorPosition: null,\n isDraggingOver: false,\n });\n };\n\n layoutElement.addEventListener('dragstart', onDragStart);\n layoutElement.addEventListener('drop', onDrop);\n layoutElement.addEventListener('dragover', onDragOver);\n layoutElement.addEventListener('dragleave', onDragLeave);\n\n return () => {\n layoutElement.removeEventListener('dragstart', onDragStart);\n layoutElement.removeEventListener('drop', onDrop);\n layoutElement.removeEventListener('dragover', onDragOver);\n layoutElement.removeEventListener('dragleave', onDragLeave);\n };\n};\n\nconst attachLayoutEventHandlers = ({\n layoutWrapper,\n layoutElement,\n editor,\n setState,\n}: Pick<NodeViewRendererProps, 'editor'> & {\n layoutWrapper: HTMLElement;\n layoutElement: HTMLElement;\n setState: (state: Partial<LayoutNodeViewState>) => void;\n}) => {\n const onClick = (event: MouseEvent) => {\n const raw = event.target;\n const element = raw instanceof Element ? raw : raw instanceof Text ? raw.parentElement : null;\n if (\n element?.closest('[data-layout-cell]') ||\n element?.closest('[data-layout-drag-handle-wrapper]') ||\n element?.closest('[data-resize-handle]')\n ) {\n return;\n }\n const layoutId = layoutElement.getAttribute('data-layout-container');\n if (layoutId) {\n editor.chain().selectLayout(layoutId).focus().run();\n }\n };\n\n const onDragStart = (event: DragEvent) => {\n const raw = event.target;\n const element = raw instanceof Element ? raw : raw instanceof Text ? raw.parentElement : null;\n const cell = element?.closest('[data-layout-cell]');\n const layoutId = layoutElement.getAttribute('data-layout-container');\n\n if (cell) {\n return;\n }\n\n // Prevent dragging banner layouts - they should stay at their edge\n if (layoutWrapper.hasAttribute('data-layout-banner')) {\n event.preventDefault();\n return;\n }\n\n if (layoutId) {\n editor.commands.selectLayout(layoutId);\n }\n event.dataTransfer?.setDragImage(layoutElement, 0, 0);\n setState({ isDragging: true });\n\n const removeDragging = () => {\n setState({ isDragging: false });\n window.removeEventListener('pointerup', removeDragging);\n };\n\n window.addEventListener('pointerup', removeDragging);\n };\n\n layoutWrapper.addEventListener('click', onClick);\n layoutWrapper.addEventListener('dragstart', onDragStart);\n\n return () => {\n layoutWrapper.removeEventListener('click', onClick);\n layoutWrapper.removeEventListener('dragstart', onDragStart);\n };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import classNames from 'classnames';\nimport type { Node as ProseMirrorNode } from 'prosemirror-model';\n\nimport {\n getLayoutWrapperDataHook,\n LAYOUT_HANDLE,\n PAYWALL_DIVIDER,\n} from './../../ricos-common-plugins/layout/data-hooks.js';\nimport { createResizeHandler } from './../../ricos-common-plugins/resizable/create-resize-handler.js';\nimport { TIPTAP_LAYOUT_CELL_TYPE, TIPTAP_LAYOUT_TYPE } from './../../ricos-content/index.js';\nimport type { ModalService } from './../../ricos-modals/index.js';\nimport type { Node as NodeOld } from './../../ricos-schema/legacy/wix/rich_content/v1/index.js';\nimport { Node_Type } from './../../ricos-schema/next-schema/index.js';\nimport type { Gradient } from './../../ricos-types/color-palette-types.js';\nimport type { RicosPalette } from './../../ricos-types/index.js';\nimport type { ExtensionProps } from './../../ricos-types/tiptap.js';\nimport { buildResponsiveCss } from './../../_shared/build-responsive-css.js';\nimport { TRANSPARENT_HEX_COLOR } from './../../_shared/colors.js';\nimport { getMoveIcon } from './../../_shared/drag-handle-icons.js';\nimport { getElementScale } from './../../_shared/get-element-scale.js';\nimport { getLockIcon } from './../../_shared/get-lock-icon.js';\nimport { isEdgeBanner } from './../../_shared/is-edge-banner.js';\nimport { logInvariant } from './../../_shared/log-invariant.js';\nimport { isPaywallLayoutNode } from './../../_shared/paywall/paywall-selection.js';\nimport type { PmLayoutNode } from './../../_shared/pm-node-types.js';\nimport { resolveBackwardCompatOverlay } from './../../_shared/resolve-backward-compat-overlay.js';\nimport { schemaGradientToCss } from './../../_shared/schema-gradient-to-css.js';\nimport { resolveDocumentColorToCss } from './../../_shared/theme-color-token.js';\nimport type { NodeViewRenderer, NodeViewRendererProps } from './../../tiptap/index.js';\nimport { findParentNodeClosestToPos } from './../../tiptap/index.js';\nimport type { Node as PmNode, ResolvedPos } from './../../tiptap/pm/model.js';\nimport { NodeSelection } from './../../tiptap/pm/state.js';\nimport { getContrastYIQ } from './../../wix-rich-content-common/Utils/color-utils.js';\nimport { findNodeById } from './../../tiptap-editor/helpers/index.js';\n\nimport staticsStyles from '../statics/styles-scss.js';\nimport { setAttr, setChild, setClass, setStyleVar, setText } from './idempotent-dom.js';\nimport { isEditorOrModalActive } from './is-editor-or-modal-active.js';\nimport { layoutConverter } from './layout-converter.js';\nimport { getResolvedLayoutFillColor, getResolvedLayoutFillGradient } from './layout-fill.js';\nimport styles from './layouts-scss.js';\nimport { DIVIDER_PRESETS, getDividerLayers } from './section-dividers/divider-presets.js';\nimport {\n LAYOUT_DEFAULTS,\n MAX_CELLS,\n MAX_COLUMNS,\n MAX_VERTICAL_MARGIN,\n MIN_COL_SPAN,\n} from './shared-with-viewer.js';\nimport type { LayoutExtensionStorage } from './shared.js';\nimport { balanceLayoutCells, findLayoutOfCell, getImageUrl } from './shared.js';\n\ntype LayoutNodeViewState = {\n columnTemplate: number[];\n isResizing: boolean;\n isDragging: boolean;\n invalid: 'none' | 'left' | 'right';\n dropCursorPosition: null | number;\n isDraggingOver: boolean;\n};\n\ntype LayoutNodeViewOptions = {\n disableInteractions: boolean;\n breakoutRule: ExtensionProps['breakoutRule'];\n isMobile: boolean;\n suppressDragHandle?: boolean;\n colorPalette?: RicosPalette;\n modals?: ModalService;\n t: (key: string) => string;\n};\n\nexport const layoutNodeView =\n ({\n disableInteractions,\n breakoutRule,\n isMobile,\n suppressDragHandle,\n colorPalette,\n modals,\n t,\n }: LayoutNodeViewOptions): NodeViewRenderer =>\n ({ node, getPos, editor }) => {\n const state: LayoutNodeViewState = {\n columnTemplate: getGridTemplateColumns(node),\n isResizing: false,\n isDragging: false,\n invalid: 'none',\n dropCursorPosition: null,\n isDraggingOver: false,\n };\n const resizableHandlerCleanups: (() => void)[] = [];\n const layoutWrapper = document.createElement('div');\n layoutWrapper.setAttribute('data-layout-wrapper', '');\n layoutWrapper.setAttribute('data-hook', getLayoutWrapperDataHook(node.attrs.id));\n layoutWrapper.classList.add(styles.layoutWrapper);\n\n if (disableInteractions) {\n layoutWrapper.classList.add(styles.disabled);\n }\n\n const layoutStyle = document.createElement('style');\n layoutStyle.setAttribute('data-layout-style', node.attrs.id);\n layoutWrapper.append(layoutStyle);\n\n const layoutElement = document.createElement('div');\n\n // Wrap layoutElement in a container that will hold resize handles.\n // ProseMirror only manages contentDOM (layoutElement), so handles\n // attached to layoutContainer won't be removed during DOM reconciliation.\n const layoutContainer = document.createElement('div');\n layoutContainer.setAttribute('data-resize-container', '');\n layoutContainer.classList.add(styles.layoutContainer);\n layoutContainer.append(layoutElement);\n\n const hasBreakout = breakoutRule\n ? breakoutRule({\n node: layoutConverter.fromPm.convert(node.toJSON()) as NodeOld,\n }) === 'fullWidth'\n : false;\n\n if (hasBreakout) {\n layoutWrapper.classList.add(styles.breakoutMargin);\n }\n\n const breakoutWrapper = document.createElement('div');\n breakoutWrapper.setAttribute('data-breakout', 'normal');\n // The layout's root carries no inline padding — this wrapper's box is what bounds\n // the visible content. Declare that for geometry consumers (see\n // _shared/get-content-edge-element.ts).\n breakoutWrapper.setAttribute('data-content-edge', '');\n breakoutWrapper.append(layoutContainer);\n\n layoutWrapper.append(breakoutWrapper);\n\n const dropCursorElement = document.createElement('div');\n dropCursorElement.classList.add(styles.dropCursor);\n\n // Built on first use and then kept: most layouts are not paywalls.\n let paywallDivider: HTMLDivElement | undefined;\n const syncPaywallDivider = (wrapper: HTMLElement, show: boolean) => {\n if (!show && !paywallDivider) {\n return;\n }\n const divider = (paywallDivider ??= createPaywallDivider(t));\n setChild(wrapper, divider, show);\n };\n\n const setState = (newState: Partial<LayoutNodeViewState>) => {\n // We need to keep ref to state object as updates can be triggered by ProseMirror and by us manually. We also we\n // need to keep latest state values in event listeners avoiding closure issues\n const isStateEqual = Object.entries(newState).every(\n ([key, value]) => state[key as keyof LayoutNodeViewState] === value\n );\n if (isStateEqual) {\n return;\n }\n Object.assign(state, newState);\n\n updateLayoutView({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n });\n };\n\n updateLayoutView({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n });\n\n const runLayoutUpdate = () =>\n updateLayoutView({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n });\n const onFocus = () => {\n runLayoutUpdate();\n };\n const onBlur = ({ event }: { event: FocusEvent }) => {\n // Skip update when focus moves to an element within the layout (e.g. cell handle, resize handle)\n if (event.relatedTarget && layoutWrapper.contains(event.relatedTarget as Node)) {\n return;\n }\n runLayoutUpdate();\n };\n editor.on('selectionUpdate', runLayoutUpdate);\n editor.on('focus', onFocus);\n editor.on('blur', onBlur);\n\n // Refresh chrome when a modal opens/closes — opening a settings modal blurs\n // the editor before the modal mount, and we want the selection to stay\n // visible while the modal is up. The modal service's pub/sub wiring is\n // attached after the editor is constructed, so defer to a microtask.\n let modalSubsCancelled = false;\n let modalSubs: { cancel: () => void }[] = [];\n queueMicrotask(() => {\n if (modalSubsCancelled || !modals) {\n return;\n }\n modalSubs = [modals.onModalOpened(runLayoutUpdate), modals.onModalClosed(runLayoutUpdate)];\n });\n\n const removeFocusListeners = () => {\n editor.off('selectionUpdate', runLayoutUpdate);\n editor.off('focus', onFocus);\n editor.off('blur', onBlur);\n modalSubsCancelled = true;\n modalSubs.forEach(s => s.cancel());\n };\n\n const cleanups = disableInteractions\n ? [removeFocusListeners]\n : [\n removeFocusListeners,\n attachCellResizeHandler({ layoutElement, state, editor, setState }),\n attachCellDragHandler({ layoutElement, editor, setState }),\n attachLayoutEventHandlers({\n layoutWrapper,\n layoutElement,\n editor,\n setState,\n }),\n ];\n\n return {\n dom: layoutWrapper,\n contentDOM: layoutElement,\n update: (newNode: PmNode) => {\n if (newNode.type !== node.type) {\n return false;\n }\n if (!state.isResizing) {\n state.columnTemplate = getGridTemplateColumns(newNode);\n }\n // oxlint-disable-next-line no-param-reassign\n node = newNode;\n updateLayoutView({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node: newNode,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n });\n return true;\n },\n ignoreMutation: (mutation: MutationRecord | { type: 'selection'; target: Node }) => {\n const isMutatingLayoutStyle = mutation.target === layoutStyle;\n const isMutatingDataAttribute =\n mutation.type === 'attributes' && mutation.attributeName?.startsWith('data-');\n const isMutatingLayoutAttribute =\n mutation.target === layoutElement && mutation.type === 'attributes';\n const isMutatingLayoutWrapperAttribute =\n mutation.target === layoutWrapper && mutation.type === 'attributes';\n const isMutatingLayoutWrapperChildren =\n mutation.target === layoutWrapper && mutation.type === 'childList';\n // Divider elements are fully owned by applySectionDivider — a real\n // style change (e.g. dragging the height slider while the layout is\n // selected) must not make ProseMirror reparse the node view, which\n // would drop the layout's NodeSelection.\n const isMutatingSectionDivider =\n mutation.target instanceof Element &&\n (mutation.target.hasAttribute('data-layout-divider') ||\n mutation.target.hasAttribute('data-layout-dividers-clip'));\n const isMutatingDropCursor = mutation.target === dropCursorElement;\n // Ignore mutations to breakout wrapper\n const isMutatingBreakoutWrapper = mutation.target === breakoutWrapper;\n // Ignore mutations to layout container (resize handles are attached here)\n const isMutatingLayoutContainer = mutation.target === layoutContainer;\n\n return (\n isMutatingLayoutStyle ||\n isMutatingDataAttribute ||\n isMutatingLayoutAttribute ||\n isMutatingLayoutWrapperAttribute ||\n isMutatingLayoutWrapperChildren ||\n isMutatingSectionDivider ||\n isMutatingDropCursor ||\n isMutatingBreakoutWrapper ||\n isMutatingLayoutContainer\n );\n },\n destroy: () => {\n cleanups.forEach(cleanup => cleanup());\n resizableHandlerCleanups.forEach(cleanup => cleanup());\n resizableHandlerCleanups.length = 0;\n },\n };\n };\n\nconst attachResizeHandlers = ({\n layoutContainer,\n layoutWrapper,\n editor,\n node,\n resizableHandlerCleanups,\n}: Pick<NodeViewRendererProps, 'editor' | 'node'> & {\n layoutContainer: HTMLDivElement;\n layoutWrapper: HTMLDivElement;\n resizableHandlerCleanups: (() => void)[];\n}) => {\n const minWidth = 200;\n\n const cleanupHorizontalResizeHandler = createResizeHandler({\n resizeElement: layoutContainer,\n isEnabled: true,\n getMinWidth: () => minWidth,\n getMaxWidth: () => {\n const nodeContainer = layoutContainer.closest('[data-breakout=\"normal\"]') as HTMLElement;\n const nodeContentStyles = window.getComputedStyle(nodeContainer);\n const paddingStart = parseInt(nodeContentStyles.paddingInlineStart) || 0;\n const paddingEnd = parseInt(nodeContentStyles.paddingInlineEnd) || 0;\n\n return Math.max(minWidth, nodeContainer.clientWidth - paddingStart - paddingEnd);\n },\n enable: { left: true, right: true },\n lockAspectRatio: false,\n setMaxWidthAsPercentage: true,\n alignment: 'CENTER',\n onResize: () => {\n // Visual update during resize is handled by CSS variable --ricos-internal-resize-width\n // Editor state is updated only in onResizeStop to avoid lag\n },\n onResizeStop: ({ width, isMaxWidth }) => {\n editor\n .chain()\n .setContainerWidth(node.attrs.id, isMaxWidth ? null : width)\n .run();\n },\n });\n resizableHandlerCleanups.push(cleanupHorizontalResizeHandler);\n\n // Create vertical resize handler. Both top and bottom margins are linked\n // (change together). The handle sits on the layout's \"free\" edge:\n // - footer banner (BOTTOM) → top edge (where it meets the content above)\n // - top banner / regular layout → bottom edge\n const isFooterBanner = node.attrs.banner?.position === 'BOTTOM';\n const cleanupVerticalResize = createVerticalMarginResizeHandler({\n layoutWrapper,\n position: isFooterBanner ? 'top' : 'bottom',\n minPadding: 0,\n onResize: (newPadding: number) => {\n editor\n .chain()\n .updateNodeAttrsById(node.attrs.id, {\n backdropPaddingTop: newPadding,\n backdropPaddingBottom: newPadding,\n })\n .run();\n },\n });\n resizableHandlerCleanups.push(cleanupVerticalResize);\n};\n\nconst updateLayoutView = ({\n layoutWrapper,\n layoutStyle,\n layoutElement,\n layoutContainer,\n breakoutWrapper,\n dropCursorElement,\n syncPaywallDivider,\n state,\n node,\n getPos,\n editor,\n resizableHandlerCleanups,\n isMobile,\n suppressDragHandle,\n disableInteractions,\n colorPalette,\n modals,\n}: Pick<NodeViewRendererProps, 'node' | 'getPos' | 'editor'> & {\n layoutWrapper: HTMLDivElement;\n layoutStyle: HTMLStyleElement;\n layoutElement: HTMLDivElement;\n layoutContainer: HTMLDivElement;\n breakoutWrapper: HTMLDivElement;\n dropCursorElement: HTMLDivElement;\n syncPaywallDivider: (wrapper: HTMLElement, show: boolean) => void;\n state: LayoutNodeViewState;\n resizableHandlerCleanups: (() => void)[];\n isMobile: boolean;\n suppressDragHandle?: boolean;\n disableInteractions: boolean;\n colorPalette?: RicosPalette;\n modals?: ModalService;\n}) => {\n const { $to, $from } = editor.state.selection;\n const pos = getPos();\n const layoutEnd = pos + node.nodeSize;\n const isSelected = pos === $from.pos && layoutEnd === $to.pos;\n const isInSelection = pos >= $from.pos && layoutEnd <= $to.pos;\n const inLayout = isInLayout($to, node.attrs.id);\n const isCellSelected = isCellInLayoutSelected($to, $from, node.attrs.id, editor);\n // A NodeSelection on a block inside a cell, or on a container holding this layout, owns\n // the drag affordance: the layout's grips and resize handles next to it would read as\n // more handles for that node.\n const isOtherNodeSelected =\n editor.state.selection instanceof NodeSelection &&\n !isSelected &&\n !isCellSelected &&\n (inLayout || isInSelection);\n // While a modal is open the editor blurs, but the user is still acting on\n // this layout — keep chrome visible only when it is the strict NodeSelection\n // target. Cursor-in-layout / range-covers-layout / cell-selected chrome\n // requires real editor focus.\n const shouldShowActiveLayoutStyles =\n editor.view.hasFocus() || (isEditorOrModalActive(editor.view, modals) && isSelected);\n const scopeValue = `${node.attrs.id}-${node.attrs.responsivenessBreakpoint}-${node.attrs.responsivenessBehaviour}`;\n const isWrapping = node.attrs.responsivenessBehaviour === 'WRAP';\n const isBanner = isEdgeBanner(node.attrs.banner);\n // Show side resize handles when layout is selected, a cell is selected, cursor is inside the layout, or during column resize\n const shouldShowResize =\n shouldShowActiveLayoutStyles &&\n !isOtherNodeSelected &&\n (isSelected || isInSelection || isCellSelected || inLayout || state.isResizing);\n\n // Resize handler lifecycle (transition-only).\n const hasResizeHandlers = resizableHandlerCleanups.length > 0;\n if (hasResizeHandlers && !shouldShowResize) {\n resizableHandlerCleanups.forEach(cleanup => cleanup());\n resizableHandlerCleanups.length = 0;\n } else if (shouldShowResize && !hasResizeHandlers && !disableInteractions) {\n attachResizeHandlers({\n layoutContainer,\n layoutWrapper,\n editor,\n node,\n resizableHandlerCleanups,\n });\n }\n\n // Drag handle (creation-only; subsequent runs just update its data-hook).\n const existingDragHandleWrapper = breakoutWrapper.querySelector(\n '[data-layout-drag-handle-wrapper]'\n ) as HTMLDivElement | null;\n if (!isBanner && !suppressDragHandle && !existingDragHandleWrapper) {\n createLayoutDragHandle({ breakoutWrapper, layoutElement, nodeId: node.attrs.id, editor });\n } else if ((isBanner || suppressDragHandle) && existingDragHandleWrapper) {\n existingDragHandleWrapper.remove();\n } else if (!isBanner && existingDragHandleWrapper) {\n const existingDragHandle = existingDragHandleWrapper.querySelector(\n '[data-layout-handle]'\n ) as HTMLButtonElement | null;\n if (existingDragHandle) {\n setAttr(existingDragHandle, 'data-hook', `${LAYOUT_HANDLE}-${node.attrs.id}`);\n }\n }\n\n // layoutWrapper: classes, data attributes.\n layoutWrapper.classList.toggle(styles.withVerticalResize, shouldShowResize);\n const isPaywall = isPaywallLayoutNode(node);\n layoutWrapper.classList.toggle(styles.paywall, isPaywall);\n // Gated on an editable editor as well as paywall-ness, so the divider never shows in the\n // viewer. Appended last in the wrapper and absolutely positioned by layouts.scss.\n syncPaywallDivider(layoutWrapper, isPaywall && editor.isEditable);\n setAttr(\n layoutWrapper,\n 'data-layout-banner',\n isBanner ? (node.attrs.banner?.position === 'BOTTOM' ? 'bottom' : 'top') : null\n );\n\n // layoutWrapper: refresh data-hook so it tracks the node id across updates.\n setAttr(layoutWrapper, 'data-hook', getLayoutWrapperDataHook(node.attrs.id));\n\n // layoutElement: data attributes, class set, column template var.\n setAttr(layoutElement, 'data-layout-container', node.attrs.id);\n setAttr(layoutElement, 'data-layout-scope', scopeValue);\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-column-template',\n formatGridTemplateColumns(state.columnTemplate)\n );\n setClass(\n layoutElement,\n classNames({\n [styles.layout]: true,\n [styles.designOnLayout]: !node.attrs.designTarget || node.attrs.designTarget === 'LAYOUT',\n [styles.designOnCell]: node.attrs.designTarget === 'CELL',\n [styles.mobile]: isMobile,\n [styles.draggingOver]: state.isDraggingOver || state.dropCursorPosition !== null,\n [styles.invalidLeft]: state.invalid === 'left',\n [styles.invalidRight]: state.invalid === 'right',\n [styles.resizing]: state.isResizing,\n [styles.dragging]: state.isDragging,\n [styles.layoutSelected]: shouldShowActiveLayoutStyles && isInSelection,\n [styles.inLayout]: shouldShowActiveLayoutStyles && inLayout,\n [styles.bannerMargin]: isEdgeBanner(node.attrs.banner),\n })\n );\n\n // layoutContainer: custom width.\n const customWidth = node.attrs.containerData?.width?.custom;\n setStyleVar(\n layoutContainer,\n '--ricos-internal-layout-width',\n customWidth ? `${customWidth}px` : null\n );\n\n // layoutStyle: responsive container query CSS.\n const maxWidth = node.attrs.responsivenessBreakpoint\n ? parseInt(node.attrs.responsivenessBreakpoint, 10)\n : LAYOUT_DEFAULTS.responsivenessBreakpoint;\n const responsiveRules = [\n {\n selector: `[data-layout-scope=\"${scopeValue}\"].${styles.layout}`,\n declarations: `\n --ricos-internal-layout-display: ${isWrapping ? 'flex' : 'grid'};\n --ricos-internal-layout-justify-content: ${isWrapping ? 'center' : 'auto'};\n --ricos-internal-layout-grid-template: grid-template-columns: minmax(0, 1fr);\n --ricos-internal-layout-cell-min-width: ${\n isWrapping\n ? `${Math.floor(node.attrs.responsivenessBreakpoint / node.childCount)}px`\n : '100%'\n };\n --ricos-internal-layout-cell-height: ${isWrapping ? 'auto' : '100%'};\n `,\n },\n {\n selector: `[data-layout-scope=\"${scopeValue}\"] .${styles.resizeHandler}`,\n declarations: 'display: none;',\n },\n ];\n setText(\n layoutStyle,\n `\n @supports not (contain: inline-size) {\n @media only screen and (max-width: ${maxWidth}px) {\n ${responsiveRules.map(({ selector, declarations }) => `${selector} {${declarations}}`).join('\\n')}\n }\n }\n ${buildResponsiveCss(`(width < ${maxWidth}px)`, responsiveRules)}\n `\n );\n\n // dropCursor: presence + position.\n const showDropCursor = state.dropCursorPosition !== null;\n setStyleVar(\n dropCursorElement,\n '--ricos-internal-layout-drop-cursor-position',\n showDropCursor ? `${state.dropCursorPosition}px` : null\n );\n setChild(layoutWrapper, dropCursorElement, showDropCursor);\n\n // Background fill (gradient OR color OR none).\n const backgroundGradient = getResolvedLayoutFillGradient(\n node.attrs.background,\n node.attrs.backgroundColor\n );\n const backgroundColorValue = getResolvedLayoutFillColor(\n node.attrs.background,\n node.attrs.backgroundColor\n );\n applyFill(layoutElement, {\n gradient: backgroundGradient,\n color: backgroundColorValue,\n gradientVar: '--ricos-internal-layout-background-gradient',\n colorVar: '--ricos-internal-layout-background-color',\n colorPalette,\n });\n\n // Background image.\n applyImage(layoutElement, node.attrs.backgroundImage, '--ricos-internal-layout-background-image');\n\n // Background image overlay (only visible when image present): gradient > color-with-opacity.\n applyImageOverlay(layoutElement, {\n image: node.attrs.backgroundImage,\n gradient: backgroundGradient,\n color: backgroundColorValue,\n overlayVar: '--ricos-internal-layout-background-overlay',\n });\n\n // Border + radius + gap on layoutElement.\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-border-color',\n node.attrs.borderColor\n ? (resolveDocumentColorToCss(node.attrs.borderColor) ?? node.attrs.borderColor)\n : null\n );\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-border-width',\n node.attrs.borderColor ? `${node.attrs.borderWidth}px` : null\n );\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-border-radius',\n node.attrs.borderRadius ? `${node.attrs.borderRadius}px` : null\n );\n // NB: existing code wrote `--ricos-internal-layout-vertical-gap` only on removal,\n // and `--ricos-internal-layout-gap` only on set. Preserved as-is to avoid behavior change.\n setStyleVar(\n layoutElement,\n '--ricos-internal-layout-gap',\n typeof node.attrs.gap === 'number' ? `${node.attrs.gap}px` : null\n );\n if (typeof node.attrs.gap !== 'number') {\n setStyleVar(layoutElement, '--ricos-internal-layout-vertical-gap', null);\n }\n\n // Backdrop fill (gradient OR color OR none).\n const backdropGradient = getResolvedLayoutFillGradient(\n node.attrs.backdrop,\n node.attrs.backdropColor\n );\n const backdropColorValue = getResolvedLayoutFillColor(\n node.attrs.backdrop,\n node.attrs.backdropColor\n );\n applyFill(layoutWrapper, {\n gradient: backdropGradient,\n color: backdropColorValue,\n gradientVar: '--ricos-internal-layout-backdrop-gradient',\n colorVar: '--ricos-internal-layout-backdrop-color',\n colorPalette,\n });\n\n // Backdrop image.\n applyImage(layoutWrapper, node.attrs.backdropImage, '--ricos-internal-layout-backdrop-image');\n\n // Backdrop padding.\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-backdrop-padding-top',\n node.attrs.backdropPaddingTop ? `${node.attrs.backdropPaddingTop}px` : null\n );\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-backdrop-padding-bottom',\n node.attrs.backdropPaddingBottom ? `${node.attrs.backdropPaddingBottom}px` : null\n );\n\n // Backdrop image overlay (only visible when image present): gradient > color-with-opacity.\n applyImageOverlay(layoutWrapper, {\n image: node.attrs.backdropImage,\n gradient: backdropGradient,\n color: backdropColorValue,\n overlayVar: '--ricos-internal-layout-backdrop-overlay',\n });\n\n // Cell padding (4-side, with css-shorthand-style fallbacks: cellPadding[i] || [i-2] || [0]).\n const cellPadding =\n node.attrs.cellPadding && node.attrs.cellPadding.length > 0 ? node.attrs.cellPadding : null;\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-cell-padding-top',\n cellPadding ? `${cellPadding[0]}px` : null\n );\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-cell-padding-right',\n cellPadding ? `${cellPadding[1] ?? cellPadding[0]}px` : null\n );\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-cell-padding-bottom',\n cellPadding ? `${cellPadding[2] ?? cellPadding[0]}px` : null\n );\n setStyleVar(\n layoutWrapper,\n '--ricos-internal-layout-cell-padding-left',\n cellPadding ? `${cellPadding[3] ?? cellPadding[1] ?? cellPadding[0]}px` : null\n );\n\n // Section dividers (decorative shape bands at the layout's top/bottom edge).\n applySectionDivider(layoutWrapper, node.attrs.topDivider, 'top');\n applySectionDivider(layoutWrapper, node.attrs.bottomDivider, 'bottom');\n\n // Cell vertical alignment.\n const verticalAlignment =\n node.attrs.cellVerticalAlignment === 'TOP'\n ? 'flex-start'\n : node.attrs.cellVerticalAlignment === 'BOTTOM'\n ? 'flex-end'\n : node.attrs.cellVerticalAlignment\n ? 'center'\n : null;\n setStyleVar(layoutWrapper, '--ricos-internal-layout-cell-vertical-alignment', verticalAlignment);\n};\n\n// Create/update/remove the divider band for one layout edge. A divider is one\n// element per layer (base shape + optional stacked copies) inside a clip\n// element that both edges share — a direct child of layoutWrapper (ProseMirror\n// only manages contentDOM, and ignoreMutation covers the divider elements) —\n// anchored to the wrapper's edges so the shape touches the layout box on all\n// sides and bands taller than the layout crop instead of escaping it. Heights\n// scale only the shapes, never the layout box. Per-layer presentation is\n// inline styles (fully-owned elements, overwritten wholesale each pass); only\n// the edge-wide color/flip flow through CSS variables on layoutWrapper.\nconst appliedDividers = new WeakMap<HTMLElement, { top?: unknown; bottom?: unknown }>();\n\nconst applySectionDivider = (\n layoutWrapper: HTMLElement,\n divider: PmLayoutNode['attrs']['topDivider'],\n edge: 'top' | 'bottom'\n) => {\n // updateLayoutView runs on every selection update, and divider attrs are\n // immutable PM objects — reference equality means the masks and styles below\n // are already applied, so skip the SVG data-URI recomputation and selector\n // queries entirely.\n const applied = appliedDividers.get(layoutWrapper) ?? {};\n if (applied[edge] === divider) {\n return;\n }\n applied[edge] = divider;\n appliedDividers.set(layoutWrapper, applied);\n\n const varPrefix = `--ricos-internal-layout-${edge}-divider`;\n let clipElement = layoutWrapper.querySelector<HTMLElement>(\n ':scope > [data-layout-dividers-clip]'\n );\n const existing = clipElement\n ? Array.from(\n clipElement.querySelectorAll<HTMLElement>(`:scope > [data-layout-divider=\"${edge}\"]`)\n )\n : [];\n // Paint order: DOM order = array order, base shape last (on top).\n const layers = divider ? getDividerLayers(divider) : [];\n\n existing.slice(layers.length).forEach(el => el.remove());\n\n if (layers.length && !clipElement) {\n clipElement = document.createElement('div');\n clipElement.setAttribute('contenteditable', 'false');\n clipElement.setAttribute('data-layout-dividers-clip', '');\n clipElement.classList.add(styles.sectionDividerClip);\n layoutWrapper.append(clipElement);\n }\n\n // Both edges' layers share the clip element, so DOM order decides cross-edge\n // paint order. The viewer always renders top layers before bottom (bottom\n // paints above top) — anchor new top-edge elements before any bottom-edge\n // ones so the stacking matches regardless of which divider the user applied\n // first.\n const insertBeforeElement =\n edge === 'top' && clipElement\n ? clipElement.querySelector(':scope > [data-layout-divider=\"bottom\"]')\n : null;\n\n layers.forEach((layer, index) => {\n let el = existing[index];\n if (!el) {\n el = document.createElement('div');\n el.setAttribute('contenteditable', 'false');\n el.setAttribute('data-layout-divider', edge);\n el.classList.add(\n styles.sectionDivider,\n edge === 'top' ? styles.sectionDividerTop : styles.sectionDividerBottom\n );\n clipElement!.insertBefore(el, insertBeforeElement);\n }\n setAttr(el, 'data-divider-layer', String(index));\n setAttr(\n el,\n 'style',\n `height:${layer.height};opacity:${layer.opacity};` +\n `mask-image:${layer.mask};-webkit-mask-image:${layer.mask};` +\n `mask-size:${layer.maskSize};-webkit-mask-size:${layer.maskSize};` +\n `mask-repeat:${layer.maskRepeat};-webkit-mask-repeat:${layer.maskRepeat};` +\n (layer.maskPosition\n ? `mask-position:${layer.maskPosition};-webkit-mask-position:${layer.maskPosition};`\n : '')\n );\n });\n\n setStyleVar(\n layoutWrapper,\n `${varPrefix}-color`,\n divider?.color ? (resolveDocumentColorToCss(divider.color) ?? divider.color) : null\n );\n setStyleVar(\n layoutWrapper,\n `${varPrefix}-flip`,\n divider && (divider.flipped ?? DIVIDER_PRESETS[divider.type].defaultFlipped) ? '-1' : null\n );\n};\n\ntype ApplyFillArgs = {\n gradient: ReturnType<typeof getResolvedLayoutFillGradient>;\n color: ReturnType<typeof getResolvedLayoutFillColor>;\n gradientVar: string;\n colorVar: string;\n colorPalette?: RicosPalette;\n};\n\n// Apply a fill (gradient OR solid color) to an element via CSS variables.\n// Mirrors the original three-way precedence: gradient > color > none.\nconst applyFill = (\n el: HTMLElement,\n { gradient, color, gradientVar, colorVar, colorPalette }: ApplyFillArgs\n) => {\n setStyleVar(el, gradientVar, gradient ? schemaGradientToCss(gradient as Gradient) : null);\n setStyleVar(\n el,\n colorVar,\n !gradient && color ? (resolveDocumentColorToCss(color) ?? color) : null\n );\n setStyleVar(\n el,\n '--ricos-internal-selection-color-tuple',\n !gradient && color && color !== TRANSPARENT_HEX_COLOR\n ? getContrastYIQ(color, colorPalette) === 'black'\n ? '0, 0, 0'\n : '255, 255, 255'\n : null\n );\n};\n\n// Apply an optional background/backdrop image to an element via CSS variables.\nconst applyImage = (\n el: HTMLElement,\n image: PmNode['attrs']['backgroundImage'] | undefined,\n varPrefix: string\n) => {\n const imageUrl = image\n ? (image.media?.src.url ?? (image.media?.src.id && getImageUrl(image.media)))\n : null;\n setStyleVar(el, `${varPrefix}-src`, imageUrl ? `url(${imageUrl})` : null);\n setStyleVar(el, `${varPrefix}-opacity`, image?.opacity ? `${image.opacity}%` : null);\n setStyleVar(el, `${varPrefix}-scaling`, image?.scaling ? image.scaling.toLowerCase() : null);\n setStyleVar(\n el,\n `${varPrefix}-position`,\n image?.position ? image.position.toLowerCase().split('_').join(' ') : null\n );\n // Blur is independent of any color overlay — both layers stack.\n setStyleVar(el, `${varPrefix}-blur`, image?.blur ? `blur(${image.blur}px)` : null);\n};\n\ntype ApplyImageOverlayArgs = {\n image: PmNode['attrs']['backgroundImage'] | undefined;\n gradient: ReturnType<typeof getResolvedLayoutFillGradient>;\n color: ReturnType<typeof getResolvedLayoutFillColor>;\n overlayVar: string;\n};\n\n// Apply a color/gradient overlay to a background/backdrop image. Only set when an image is present.\n// `image.overlay` (new model) is authoritative when present; otherwise the legacy `background`/\n// `backdrop` fill is rendered through the image's opacity. Gradient takes precedence over color.\nconst applyImageOverlay = (\n el: HTMLElement,\n { image, gradient, color, overlayVar }: ApplyImageOverlayArgs\n) => {\n let overlay: string | null = null;\n if (image) {\n if (image.overlay) {\n overlay =\n image.overlay.type === 'GRADIENT'\n ? schemaGradientToCss(image.overlay.gradient as Gradient)\n : (resolveDocumentColorToCss(image.overlay.color) ?? image.overlay.color);\n } else if (gradient) {\n overlay = schemaGradientToCss(gradient as Gradient);\n } else if (color) {\n overlay = resolveBackwardCompatOverlay(\n resolveDocumentColorToCss(color) ?? color,\n image.opacity ?? 100,\n 100\n );\n }\n }\n setStyleVar(el, overlayVar, overlay);\n};\n\n// The editor-only marker of the free/paid cut. Pure chrome — it adds no document node.\n// Built once per view, so its translated labels are fixed for the view's lifetime.\nconst createPaywallDivider = (t: (key: string) => string): HTMLDivElement => {\n const divider = document.createElement('div');\n divider.className = styles.paywallDivider;\n divider.setAttribute('data-hook', PAYWALL_DIVIDER);\n divider.setAttribute('aria-hidden', 'true');\n divider.setAttribute('contenteditable', 'false');\n\n const label = document.createElement('span');\n label.className = styles.paywallDividerLabel;\n label.innerHTML = getLockIcon(styles.paywallDividerIcon);\n label.append(document.createTextNode(t('GatedContent_Divider_SubscribersOnlyBelow')));\n divider.append(label);\n return divider;\n};\n\nconst getGridTemplateColumns = (node: PmNode) => {\n const cols: number[] = [];\n\n node.content.forEach(cell => {\n if ((cell.type.name as unknown as Node_Type) === Node_Type.LAYOUT_CELL) {\n cols.push(cell.attrs.colSpan);\n }\n });\n\n return cols;\n};\n\nconst formatGridTemplateColumns = (colSpans: number[]) => {\n return colSpans.map(col => `minmax(0, ${col}fr)`).join(' ');\n};\n\ntype LayoutDragHandleProps = {\n breakoutWrapper: HTMLElement;\n layoutElement: HTMLElement;\n nodeId: string;\n editor: NodeViewRendererProps['editor'];\n};\n\nconst createLayoutDragHandle = ({\n breakoutWrapper,\n layoutElement,\n nodeId,\n editor,\n}: LayoutDragHandleProps): (() => void) => {\n // Create drag handle wrapper with contenteditable=false to prevent selection\n const layoutDragHandleWrapper = document.createElement('div');\n layoutDragHandleWrapper.setAttribute('contenteditable', 'false');\n layoutDragHandleWrapper.setAttribute('data-layout-drag-handle-wrapper', '');\n layoutDragHandleWrapper.classList.add(styles.layoutHandlerWrapper);\n\n // Create the drag handle button\n const layoutDragHandle = document.createElement('button');\n layoutDragHandle.setAttribute('data-drag-handle', '');\n layoutDragHandle.setAttribute('data-layout-handle', '');\n layoutDragHandle.setAttribute('data-hook', `${LAYOUT_HANDLE}-${nodeId}`);\n layoutDragHandle.setAttribute('type', 'button');\n layoutDragHandle.classList.add(styles.layoutHandler);\n layoutDragHandle.innerHTML = getMoveIcon();\n\n // Click handler for selecting layout\n const handleClick = () => {\n const layoutId = layoutElement.getAttribute('data-layout-container');\n if (layoutId) {\n editor.chain().selectLayout(layoutId).focus().run();\n }\n };\n\n layoutDragHandle.addEventListener('click', handleClick);\n layoutDragHandleWrapper.append(layoutDragHandle);\n breakoutWrapper.append(layoutDragHandleWrapper);\n\n // Return cleanup function\n return () => {\n layoutDragHandle.removeEventListener('click', handleClick);\n if (layoutDragHandleWrapper.parentNode === breakoutWrapper) {\n breakoutWrapper.removeChild(layoutDragHandleWrapper);\n }\n };\n};\n\ntype VerticalMarginResizeHandlerProps = {\n layoutWrapper: HTMLElement;\n position: 'top' | 'bottom';\n minPadding: number;\n onResize: (newPadding: number) => void;\n};\n\nconst createVerticalMarginResizeHandler = ({\n layoutWrapper,\n position,\n minPadding,\n onResize,\n}: VerticalMarginResizeHandlerProps): (() => void) => {\n // Create the resize handle element\n const handle = document.createElement('div');\n handle.className = position === 'top' ? staticsStyles.handlerTop : staticsStyles.handlerBottom;\n handle.setAttribute('data-hook', `ricos-resize-handler-${position}`);\n\n // Ensure layoutWrapper has position: relative for absolute positioning\n const originalPosition = layoutWrapper.style.position;\n if (!originalPosition || originalPosition === 'static') {\n layoutWrapper.style.position = 'relative';\n }\n\n layoutWrapper.appendChild(handle);\n\n let startY = 0;\n let startPadding = 0;\n let currentPointerId: number | null = null;\n\n const removePointerListeners = () => {\n handle.removeEventListener('pointermove', handlePointerMove);\n handle.removeEventListener('pointerup', handlePointerUp);\n handle.removeEventListener('pointercancel', handlePointerUp);\n handle.removeEventListener('lostpointercapture', handleLostPointerCapture);\n };\n\n /**\n * End the resize: release capture, remove listeners, commit final padding, clear state.\n * When clientY is provided (normal pointerup), final padding is computed from delta.\n * When not provided (lostpointercapture or pointerId mismatch), padding is read from current computed style.\n */\n const finishResize = (clientY?: number) => {\n if (currentPointerId === null) {\n return;\n }\n\n if (handle.hasPointerCapture(currentPointerId)) {\n handle.releasePointerCapture(currentPointerId);\n }\n\n removePointerListeners();\n\n let newPadding: number;\n if (clientY !== undefined) {\n const deltaY = clientY - startY;\n const adjustedDelta = position === 'top' ? -deltaY : deltaY;\n newPadding = Math.round(\n Math.max(minPadding, Math.min(MAX_VERTICAL_MARGIN, startPadding + adjustedDelta * 0.55))\n );\n } else {\n const computedStyle = window.getComputedStyle(layoutWrapper);\n const paddingProp = position === 'top' ? 'paddingTop' : 'paddingBottom';\n const computed = parseInt(computedStyle[paddingProp], 10);\n newPadding = !isNaN(computed)\n ? Math.max(minPadding, Math.min(MAX_VERTICAL_MARGIN, computed))\n : minPadding;\n }\n\n layoutWrapper.style.setProperty(\n '--ricos-internal-layout-backdrop-padding-top',\n `${newPadding}px`\n );\n layoutWrapper.style.setProperty(\n '--ricos-internal-layout-backdrop-padding-bottom',\n `${newPadding}px`\n );\n\n onResize(newPadding);\n currentPointerId = null;\n };\n\n const handleLostPointerCapture = (event: PointerEvent) => {\n if (currentPointerId === null || event.pointerId !== currentPointerId) {\n return;\n }\n finishResize();\n };\n\n const handlePointerDown = (event: PointerEvent) => {\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n currentPointerId = event.pointerId;\n startY = event.clientY;\n\n // Read current padding from computed style - this always reflects the actual rendered value\n const computedStyle = window.getComputedStyle(layoutWrapper);\n const paddingProp = position === 'top' ? 'paddingTop' : 'paddingBottom';\n const computed = parseInt(computedStyle[paddingProp], 10);\n startPadding = !isNaN(computed) ? computed : 0;\n\n handle.setPointerCapture(event.pointerId);\n handle.addEventListener('pointermove', handlePointerMove);\n handle.addEventListener('pointerup', handlePointerUp);\n handle.addEventListener('pointercancel', handlePointerUp);\n handle.addEventListener('lostpointercapture', handleLostPointerCapture);\n };\n\n const handlePointerMove = (event: PointerEvent) => {\n if (currentPointerId === null || currentPointerId !== event.pointerId) {\n return;\n }\n\n const deltaY = event.clientY - startY;\n // For top handle, dragging up (negative deltaY) should increase padding\n // For bottom handle, dragging down (positive deltaY) should increase padding\n const adjustedDelta = position === 'top' ? -deltaY : deltaY;\n const newPadding = Math.round(\n Math.max(minPadding, Math.min(MAX_VERTICAL_MARGIN, startPadding + adjustedDelta * 0.55))\n );\n\n // Update visual feedback immediately via CSS variables (both top and bottom for linked margins)\n layoutWrapper.style.setProperty(\n '--ricos-internal-layout-backdrop-padding-top',\n `${newPadding}px`\n );\n layoutWrapper.style.setProperty(\n '--ricos-internal-layout-backdrop-padding-bottom',\n `${newPadding}px`\n );\n };\n\n const handlePointerUp = (event: PointerEvent) => {\n if (currentPointerId === null) {\n return;\n }\n if (currentPointerId !== event.pointerId) {\n // Mismatch: still clean up so we don't leave capture/listeners stuck\n finishResize();\n return;\n }\n\n finishResize(event.clientY);\n };\n\n handle.addEventListener('pointerdown', handlePointerDown);\n\n // Return cleanup function\n return () => {\n if (currentPointerId !== null && handle.hasPointerCapture(currentPointerId)) {\n handle.releasePointerCapture(currentPointerId);\n }\n removePointerListeners();\n handle.removeEventListener('pointerdown', handlePointerDown);\n\n if (handle.parentNode === layoutWrapper) {\n layoutWrapper.removeChild(handle);\n }\n\n if (!originalPosition || originalPosition === 'static') {\n layoutWrapper.style.position = originalPosition || '';\n }\n };\n};\n\nconst isInLayout = ($pos: ResolvedPos, nodeId: string) => {\n const layoutNode = findParentNodeClosestToPos(\n $pos,\n node => node.type?.name === TIPTAP_LAYOUT_TYPE\n )?.node;\n\n return layoutNode?.attrs.id === nodeId;\n};\n\nconst isCellInLayoutSelected = (\n $to: ResolvedPos,\n $from: ResolvedPos,\n layoutId: string,\n editor: NodeViewRendererProps['editor']\n): boolean => {\n // Check if a cell node is selected (NodeSelection)\n const selection = editor.state.selection;\n if (!(selection instanceof NodeSelection)) {\n return false;\n }\n\n const selectedNode = selection.node;\n if (selectedNode?.type.name !== TIPTAP_LAYOUT_CELL_TYPE) {\n return false;\n }\n\n // Check if this cell belongs to this layout\n const layoutNode = findParentNodeClosestToPos(\n $from,\n node => node.type?.name === TIPTAP_LAYOUT_TYPE\n )?.node;\n\n return layoutNode?.attrs.id === layoutId;\n};\n\nconst getCellParent = (node: ProseMirrorNode, cellId: string): ProseMirrorNode | null => {\n let parent: ProseMirrorNode | null = null;\n node.descendants((child, _pos, par) => {\n if (child.attrs.id === cellId) {\n parent = par;\n }\n });\n\n return parent;\n};\n\nconst getCellIndex = (node: PmNode, cellId: string) => {\n let index = -1;\n\n node.content.forEach((cell, _offset, i) => {\n if (cell.attrs.id === cellId) {\n index = i;\n }\n });\n\n return index;\n};\n\nconst isDraggingCell = (editor: NodeViewRendererProps['editor']) => {\n const slice = editor.view.dragging?.slice;\n\n if (!slice) {\n return false;\n }\n\n return (\n slice.openStart === 0 &&\n slice.openEnd === 0 &&\n slice.content.childCount === 1 &&\n editor.view.dragging?.slice.content.firstChild?.type.name === TIPTAP_LAYOUT_CELL_TYPE\n );\n};\n\nconst attachCellResizeHandler = ({\n layoutElement,\n state,\n editor,\n setState,\n}: Pick<NodeViewRendererProps, 'editor'> & {\n layoutElement: HTMLElement;\n state: LayoutNodeViewState;\n setState: (state: Partial<LayoutNodeViewState>) => void;\n}) => {\n const onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0) {\n return;\n }\n const dragHandle: HTMLElement | null = (event.target as HTMLElement)?.closest(\n '[data-layout-cell-resize-handle]'\n );\n\n if (!dragHandle || !event.currentTarget) {\n return;\n }\n\n const cellNodeId = dragHandle.dataset.layoutCellResizeHandle;\n\n if (!cellNodeId) {\n logInvariant(\n Error(\n 'Cell resize prevented. No cell id found! Make sure to add the data-layout-cell-resize-handle attribute to the drag handle'\n )\n );\n return;\n }\n event.preventDefault();\n\n // Set resizing state immediately to hide the blue selection overlay\n setState({ isResizing: true });\n\n const layoutNode = getCellParent(editor.state.doc, cellNodeId);\n\n if (!layoutNode) {\n logInvariant(Error('Cell resize prevented. Draggable cell has no parent!'));\n return;\n }\n\n const index = getCellIndex(layoutNode, cellNodeId);\n const currentOffset = event.clientX;\n const parentRect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const fractionInPixels = parentRect.width / MAX_COLUMNS;\n const minColumnWidth = fractionInPixels * MIN_COL_SPAN;\n const columnTemplateInFractionsByPixel = state.columnTemplate.map(\n col => col * fractionInPixels\n );\n\n // Clear any existing selection when starting resize\n window.getSelection()?.removeAllRanges();\n\n // Prevent any selection from starting during resize\n const preventSelection = (e: Event) => {\n e.preventDefault();\n };\n document.addEventListener('selectstart', preventSelection);\n\n setState({\n columnTemplate: columnTemplateInFractionsByPixel,\n isResizing: true,\n });\n\n const onDrag = (event: PointerEvent) => {\n event.preventDefault();\n let invalid: 'none' | 'left' | 'right' = 'none';\n\n const offset = currentOffset - event.clientX;\n\n const newTemplate = [...columnTemplateInFractionsByPixel];\n newTemplate[index] = columnTemplateInFractionsByPixel[index] + offset;\n newTemplate[index - 1] = columnTemplateInFractionsByPixel[index - 1] - offset;\n\n if (newTemplate[index] < minColumnWidth) {\n const diff = minColumnWidth - newTemplate[index];\n newTemplate[index] = minColumnWidth;\n newTemplate[index - 1] -= diff;\n invalid = 'right';\n }\n\n if (newTemplate[index - 1] < minColumnWidth) {\n const diff = minColumnWidth - newTemplate[index - 1];\n newTemplate[index - 1] = minColumnWidth;\n newTemplate[index] -= diff;\n invalid = 'left';\n }\n\n if (newTemplate.some(col => col < minColumnWidth)) {\n setState({ invalid });\n return;\n }\n\n setState({\n columnTemplate: newTemplate,\n invalid,\n });\n };\n\n const stopDrag = (event: PointerEvent) => {\n event.preventDefault();\n\n // Remove selection prevention listener\n document.removeEventListener('selectstart', preventSelection);\n\n // Clear any text selection that occurred during resize\n window.getSelection()?.removeAllRanges();\n\n const templateInFractions = state.columnTemplate.map(col => {\n return Math.round(col / fractionInPixels);\n });\n\n const diff = MAX_COLUMNS - templateInFractions.reduce((acc, val) => acc + val, 0);\n templateInFractions[index] += diff;\n\n editor\n .chain()\n .setCellsColSpan(layoutNode.attrs.id, templateInFractions)\n .selectLayout(layoutNode.attrs.id)\n .focus()\n .run();\n\n setState({\n invalid: 'none',\n isResizing: false,\n columnTemplate: templateInFractions,\n });\n\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointermove', onDrag);\n };\n\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointermove', onDrag);\n };\n\n layoutElement.addEventListener('pointerdown', onPointerDown);\n\n return () => {\n layoutElement.removeEventListener('pointerdown', onPointerDown);\n };\n};\n\nconst attachCellDragHandler = ({\n layoutElement,\n editor,\n setState,\n}: Pick<NodeViewRendererProps, 'editor'> & {\n layoutElement: HTMLElement;\n setState: (state: Partial<LayoutNodeViewState>) => void;\n}) => {\n const onDragStart = (event: DragEvent) => {\n const raw = event.target;\n const element = raw instanceof Element ? raw : raw instanceof Text ? raw.parentElement : null;\n if (!element) {\n return;\n }\n\n if (element.closest('[data-block-drag-handle]')) {\n return;\n }\n\n const cellElement = element.closest('[data-layout-cell]') as HTMLElement | null;\n const cellNodeId = cellElement?.getAttribute('data-layout-cell');\n if (!cellNodeId || !cellElement) {\n return;\n }\n\n // Drags from inner draggable nodes (buttons, images, etc.) bubble through here too.\n // Only treat this as a cell drag when the cell itself is the closest draggable element.\n const draggableAncestor = element.closest('[draggable=\"true\"]');\n if (draggableAncestor !== cellElement) {\n return;\n }\n\n editor.commands.selectCell(cellNodeId);\n event.dataTransfer?.setDragImage(cellElement, 0, 0);\n\n // Capture the source layout now, while the cell is still inside it. When the\n // cell is dropped outside any layout it ends up orphaned; cell-normalizing\n // uses this to re-wrap it in a layout that keeps the source styling and to\n // remove the now-drained source layout. Keyed by layout id (preserved across\n // the drop) rather than cell id (regenerated on the card-paste path).\n const sourceLayout = findLayoutOfCell(editor.state.doc, cellNodeId);\n (editor.storage[TIPTAP_LAYOUT_TYPE] as LayoutExtensionStorage).draggedCellSourceLayout =\n sourceLayout\n ? {\n layoutId: sourceLayout.node.attrs.id,\n attrs: sourceLayout.node.attrs,\n // Only the source layout that held this cell *alone* should be removed\n // after the drop. A multi-cell source keeps its remaining cell(s).\n wasOnlyCell: sourceLayout.node.childCount === 1,\n }\n : null;\n };\n\n // This is heavily based on prosemirror-view `drop` event. We only need this because PM-View can't\n // handle position resolving for vertical content.\n // https://github.com/ProseMirror/prosemirror-view/blob/0954f523ee0a193f7db3992702e6a3979ade89b8/src/input.ts#L702\n const onDrop = (event: DragEvent) => {\n if (!isDraggingCell(editor)) {\n // Non-cell drops are not this node view's business — the editor's own handlers\n // (block drag handle, PM's built-in drop) resolve them.\n setState({ dropCursorPosition: null, isDraggingOver: false });\n return;\n }\n if (!event.target) {\n return;\n }\n event.stopPropagation();\n setState({ dropCursorPosition: null, isDraggingOver: false });\n const view = editor.view;\n const dragging = view.dragging;\n const slice = dragging?.slice;\n view.dragging = null;\n\n if (!slice) {\n logInvariant(Error('Cell Drag prevented. PM view has no dragging slice'));\n return;\n }\n\n const sourceCell = slice.content.firstChild;\n const sourceCellId = sourceCell?.attrs.id;\n const eventPos = view.posAtDOM(event.target as HTMLElement, 0);\n const $eventPos = view.state.doc.resolve(eventPos);\n if (!eventPos || !sourceCellId) {\n logInvariant(Error('Cell Drag prevented. Cannot resolve event position or source cell id'));\n return;\n }\n\n const layoutNode = findParentNodeClosestToPos(\n $eventPos,\n node => node.type?.name === TIPTAP_LAYOUT_TYPE\n )?.node;\n\n if (!layoutNode) {\n logInvariant(Error('Cell Drag prevented. Cannot resolve target layout node'));\n return;\n }\n\n const cellIndexInSourceLayout = getCellIndex(layoutNode, sourceCellId);\n const isCellMovedToOtherLayout = cellIndexInSourceLayout === -1;\n if (layoutNode.childCount >= MAX_CELLS && isCellMovedToOtherLayout) {\n return;\n }\n\n const { node: cellNode, pos: cellPos } = findParentNodeClosestToPos(\n $eventPos,\n node => node.type?.name === TIPTAP_LAYOUT_CELL_TYPE\n ) ?? { node: null, pos: -1 };\n\n if (!cellNode || (layoutNode.childCount === 1 && layoutNode.firstChild === sourceCell)) {\n return;\n }\n\n const layout = event.currentTarget as HTMLElement;\n const layoutRect = layout.getBoundingClientRect();\n const cell = (event.target as HTMLElement).closest('[data-layout-cell]');\n\n if (!cell) {\n logInvariant(Error('Cell Drag prevented. Cannot find cell element'));\n return;\n }\n\n const mouseXInLayout = event.clientX - layoutRect.left;\n const cellRect = cell.getBoundingClientRect();\n\n const insertPos =\n mouseXInLayout < cellRect.left - layoutRect.left + cellRect.width / 2\n ? cellPos\n : cellPos + cellNode?.nodeSize;\n\n if (!insertPos) {\n logInvariant(Error('Cell Drag prevented. Cannot resolve insert position'));\n return;\n }\n\n event.preventDefault();\n\n const tr = view.state.tr;\n // @ts-expect-error\n const { node } = dragging;\n\n if (node) {\n node.replace(tr);\n } else {\n tr.deleteSelection();\n }\n\n const pos = tr.mapping.map(insertPos);\n const beforeInsert = tr.doc;\n\n if (!slice.content.firstChild) {\n return;\n }\n\n tr.replaceRangeWith(pos, pos, slice.content.firstChild);\n\n if (tr.doc.eq(beforeInsert)) {\n return;\n }\n\n const $pos = tr.doc.resolve(pos);\n\n tr.setSelection(new NodeSelection($pos));\n\n if (sourceCellId) {\n const sourceLayoutNode = findLayoutOfCell(view.state.doc, sourceCellId);\n if (sourceLayoutNode) {\n // If cell was moved to another layout, balance the cells in the source layout\n const sourceLayoutInNewTr = findNodeById(tr, sourceLayoutNode.node.attrs.id).pop();\n if (sourceLayoutInNewTr && isCellMovedToOtherLayout) {\n balanceLayoutCells(tr, sourceLayoutInNewTr.node, sourceLayoutInNewTr.pos);\n }\n }\n\n // If cell was moved to another layout, balance the cells in the target layout\n const targetLayoutNode = findLayoutOfCell(tr.doc, sourceCellId);\n if (targetLayoutNode && isCellMovedToOtherLayout) {\n balanceLayoutCells(tr, targetLayoutNode.node, targetLayoutNode.pos);\n }\n }\n\n view.focus();\n view.dispatch(tr);\n };\n\n const onDragOver = (event: DragEvent) => {\n setState({\n isDraggingOver: true,\n });\n\n if (!isDraggingCell(editor)) {\n // Not a cell reorder — let the event bubble unclaimed so the editor's own\n // handlers resolve it (the block drag handle or ProseMirror's built-in dragover,\n // either of which calls preventDefault itself to keep the drop allowed).\n // preventDefault() here would mark the event defaultPrevented, and ProseMirror's\n // eventBelongsToView() drops any such event — starving those handlers and leaving\n // their last published drop-cursor position stale.\n return;\n }\n\n event.preventDefault();\n\n const layout = event.currentTarget as HTMLElement;\n const layoutWrapper = layout.closest('[data-layout-wrapper]');\n\n if (!layoutWrapper) {\n return;\n }\n\n const scale = getElementScale(layout);\n const layoutWrapperRect = layoutWrapper.getBoundingClientRect();\n const cellDropAreas = [...layout.querySelectorAll('[data-layout-cell]')].reduce(\n (acc, cell, index) => {\n const rect = cell.getBoundingClientRect();\n const prevCell = acc[acc.length - 1];\n const left = rect.left - layoutWrapperRect.left;\n return [\n ...acc,\n {\n left: index === 0 ? left : left - (left - prevCell.right) / 2,\n right: rect.right - layoutWrapperRect.left,\n width: rect.width,\n },\n ];\n },\n [] as { left: number; right: number; width: number }[]\n );\n const mouseXInLayout = event.clientX - layoutWrapperRect.left;\n const cellInsideIndex = cellDropAreas.findIndex(cell => {\n return mouseXInLayout > cell.left && mouseXInLayout < cell.right;\n });\n\n if (cellInsideIndex === -1) {\n return;\n }\n\n const cellInside = cellDropAreas[cellInsideIndex];\n const dropIndex =\n mouseXInLayout < cellInside.left + cellInside.width / 2\n ? cellInsideIndex\n : cellInsideIndex + 1;\n\n setState({\n dropCursorPosition:\n (dropIndex >= cellDropAreas.length\n ? cellDropAreas[cellDropAreas.length - 1].right\n : cellDropAreas[dropIndex].left) / scale.scaleX,\n });\n };\n\n const onDragLeave = (event: DragEvent) => {\n if ((event.currentTarget as HTMLElement).contains(event.relatedTarget as HTMLElement)) {\n return;\n }\n\n setState({\n dropCursorPosition: null,\n isDraggingOver: false,\n });\n };\n\n layoutElement.addEventListener('dragstart', onDragStart);\n layoutElement.addEventListener('drop', onDrop);\n layoutElement.addEventListener('dragover', onDragOver);\n layoutElement.addEventListener('dragleave', onDragLeave);\n\n return () => {\n layoutElement.removeEventListener('dragstart', onDragStart);\n layoutElement.removeEventListener('drop', onDrop);\n layoutElement.removeEventListener('dragover', onDragOver);\n layoutElement.removeEventListener('dragleave', onDragLeave);\n };\n};\n\nconst attachLayoutEventHandlers = ({\n layoutWrapper,\n layoutElement,\n editor,\n setState,\n}: Pick<NodeViewRendererProps, 'editor'> & {\n layoutWrapper: HTMLElement;\n layoutElement: HTMLElement;\n setState: (state: Partial<LayoutNodeViewState>) => void;\n}) => {\n const onClick = (event: MouseEvent) => {\n const raw = event.target;\n const element = raw instanceof Element ? raw : raw instanceof Text ? raw.parentElement : null;\n if (\n element?.closest('[data-layout-cell]') ||\n element?.closest('[data-layout-drag-handle-wrapper]') ||\n element?.closest('[data-resize-handle]')\n ) {\n return;\n }\n const layoutId = layoutElement.getAttribute('data-layout-container');\n if (layoutId) {\n editor.chain().selectLayout(layoutId).focus().run();\n }\n };\n\n const onDragStart = (event: DragEvent) => {\n const raw = event.target;\n const element = raw instanceof Element ? raw : raw instanceof Text ? raw.parentElement : null;\n const cell = element?.closest('[data-layout-cell]');\n const layoutId = layoutElement.getAttribute('data-layout-container');\n\n if (cell) {\n return;\n }\n\n // Prevent dragging banner layouts - they should stay at their edge\n if (layoutWrapper.hasAttribute('data-layout-banner')) {\n event.preventDefault();\n return;\n }\n\n if (layoutId) {\n editor.commands.selectLayout(layoutId);\n }\n event.dataTransfer?.setDragImage(layoutElement, 0, 0);\n setState({ isDragging: true });\n\n const removeDragging = () => {\n setState({ isDragging: false });\n window.removeEventListener('pointerup', removeDragging);\n };\n\n window.addEventListener('pointerup', removeDragging);\n };\n\n layoutWrapper.addEventListener('click', onClick);\n layoutWrapper.addEventListener('dragstart', onDragStart);\n\n return () => {\n layoutWrapper.removeEventListener('click', onClick);\n layoutWrapper.removeEventListener('dragstart', onDragStart);\n };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["event", "node"]
7
7
  }
@@ -1,6 +1,6 @@
1
- var styleDataHash = "0c7cc4af";
1
+ var styleDataHash = "cbd50d28";
2
2
  const injectCss = (() => {
3
- var css = `._7coMu{inset:0;overflow:hidden;pointer-events:none;position:absolute;z-index:1}.nTXNT{left:0;pointer-events:none;position:absolute;right:0}.VzOB-{background-color:var(--ricos-internal-layout-top-divider-color,currentColor);top:0;transform:scale(var(--ricos-internal-layout-top-divider-flip,1),-1)}.-SOcz{background-color:var(--ricos-internal-layout-bottom-divider-color,currentColor);bottom:0;transform:scaleX(var(--ricos-internal-layout-bottom-divider-flip,1))}.UqICm{--ricos-internal-layout-cell-outline-color:#a8caff;background:var(--ricos-internal-layout-backdrop-gradient,var(--ricos-internal-layout-backdrop-color,transparent));outline:1.5px solid transparent;padding-bottom:var(--ricos-internal-layout-backdrop-padding-bottom,0);padding-top:var(--ricos-internal-layout-backdrop-padding-top,0);position:relative}.UqICm.vV1uo,.UqICm:hover{outline-color:var(--ricos-internal-layout-cell-outline-color)}.UqICm:hover .Kw8NT .TP8sm{outline-color:var(--ricos-internal-layout-cell-outline-color)}.UqICm:before{background-image:var(--ricos-internal-layout-backdrop-image-src);background-position:var(--ricos-internal-layout-backdrop-image-position);background-repeat:no-repeat;background-size:var(--ricos-internal-layout-backdrop-image-scaling);bottom:0;clip-path:inset(0);content:"";filter:var(--ricos-internal-layout-backdrop-image-blur,none);left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:0}.UqICm:after{background:var(--ricos-internal-layout-backdrop-overlay,transparent);bottom:0;clip-path:inset(0);content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:1}.UqICm.P8vSD{margin:0}*+.UqICm{margin-top:20px}.UqICm ._6Gobf{display:none}.UqICm .wQLux:has(.vRrS7.-xjFA)+._6Gobf,.UqICm .wQLux:has(.vRrS7.GwIZH)+._6Gobf,.UqICm .wQLux:has(.vRrS7.f6Thp)+._6Gobf,.UqICm .wQLux:has(.vRrS7.gnN8l)+._6Gobf{display:block}.UqICm .RaoGy{align-items:center;background:#fff;border:1px solid #dfe5eb;border-radius:50%;bottom:-12px;box-shadow:0 2px 4px 0 rgba(23,25,28,.1);cursor:grab;display:flex;height:24px;justify-content:center;left:50%;padding:0;position:absolute;transform:translate(-50%,100%);width:24px;z-index:4}.UqICm .RaoGy:active{cursor:grabbing}.UqICm.UYNVj{margin-top:0}.UqICm .omC2x{background:#116dff;bottom:0;left:calc(var(--ricos-internal-layout-drop-cursor-position) - 1px);position:absolute;top:0;width:2px;z-index:5}.UqICm .omC2x:before{border:2px solid #116dff;border-radius:50%;content:"";height:6px;left:-2px;position:absolute;top:-5px;width:6px}.UqICm._27yw1{outline-color:transparent!important}.UqICm._27yw1:hover,.UqICm._27yw1:hover .Kw8NT .TP8sm{outline-color:transparent!important}.UqICm._27yw1 .C3-U0,.UqICm._27yw1 .Zxv3c,.UqICm._27yw1 ._6Gobf{display:none!important}.UqICm._9B-Cl:has(.LFgb1){margin-bottom:40px}.UqICm._9B-Cl .LFgb1{align-items:center;color:var(--ricos-text-color-low,#646464);display:flex;font-size:13px;gap:12px;left:0;letter-spacing:.06em;margin-top:12px;pointer-events:none;position:absolute;right:0;text-transform:uppercase;top:100%;user-select:none}.UqICm._9B-Cl .LFgb1:after,.UqICm._9B-Cl .LFgb1:before{background:rgba(var(--ricos-text-color-tuple,33,33,33),.15);content:"";flex:1;height:1px}.UqICm._9B-Cl .fkYP9{white-space:nowrap}.UqICm._9B-Cl ._7rxv0{color:#116dff}.wQLux{--ricos-internal-layout-display:grid;--ricos-internal-layout-handler-cursor:col-resize;--ricos-internal-layout-handler-color:#116dff;clear:both;margin:0 auto;position:relative;width:min(100%,var(--ricos-internal-resize-width,var(--ricos-internal-layout-width,initial)));z-index:2}.vRrS7{display:var(--ricos-internal-layout-display,grid);flex-wrap:wrap;gap:var(--ricos-internal-layout-gap,20px);grid-template-columns:var(--ricos-internal-layout-grid-template,var(--ricos-internal-layout-column-template));justify-content:var(--ricos-internal-layout-justify-content,auto);position:relative;transition:grid-template-columns .1s ease-out;width:100%;will-change:grid-template-columns;z-index:2}[data-layout-banner] .vRrS7{grid-template-columns:var(--ricos-internal-layout-column-template)!important}[data-layout-banner] .vRrS7.gnN8l{transition:none!important}.vRrS7.IfPPx .Kw8NT,.vRrS7.Y0F-w{background:var(--ricos-internal-layout-background-gradient,var(--ricos-internal-layout-background-color,transparent));border:var(--ricos-internal-layout-border-width,0) solid var(--ricos-internal-layout-border-color);border-radius:var(--ricos-internal-layout-border-radius,0)}.vRrS7.IfPPx .Kw8NT:before,.vRrS7.Y0F-w:before{background-image:var(--ricos-internal-layout-background-image-src);background-position:var(--ricos-internal-layout-background-image-position);background-repeat:no-repeat;background-size:var(--ricos-internal-layout-background-image-scaling);bottom:0;clip-path:inset(0 round var(--ricos-internal-layout-border-radius,0));content:"";filter:var(--ricos-internal-layout-background-image-blur,none);left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:0}.vRrS7.IfPPx .Kw8NT:after,.vRrS7.Y0F-w:after{background:var(--ricos-internal-layout-background-overlay,transparent);bottom:0;clip-path:inset(0 round var(--ricos-internal-layout-border-radius,0));content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:1}@supports not (contain:inline-size){@media only screen and (max-width:480px){.vRrS7{gap:min(20px,var(--ricos-internal-layout-gap,20px))}}}@container (width < 480px){.vRrS7:where(:not([data-ricos-responsive=viewport],[data-ricos-responsive=viewport] *)){gap:min(20px,var(--ricos-internal-layout-gap,20px))}}@media (width < 480px){.vRrS7:where([data-ricos-responsive=viewport]),:where([data-ricos-responsive=viewport]) .vRrS7{gap:min(20px,var(--ricos-internal-layout-gap,20px))}}.vRrS7.a-uMs{--ricos-internal-layout-display:flex;--ricos-internal-layout-justify-content:center;--ricos-internal-layout-cell-min-width:100%;--ricos-internal-layout-cell-height:auto}.vRrS7.a-uMs .Zxv3c{display:none}.vRrS7.gnN8l{transition:none!important}.vRrS7.gnN8l,.vRrS7.gnN8l *{user-select:none!important}.vRrS7.szfYm{--ricos-layout-handler-color:#e62214;--ricos-layout-handler-cursor:e-resize}.vRrS7.nONwb{--ricos-layout-handler-color:#e62214;--ricos-layout-handler-cursor:w-resize}.vRrS7.-xjFA .Kw8NT .TP8sm,.vRrS7.Cs9Te .Kw8NT .TP8sm,.vRrS7.GwIZH .Kw8NT .TP8sm,.vRrS7.gnN8l .Kw8NT .TP8sm,.vRrS7:focus .Kw8NT .TP8sm,.vRrS7:hover .Kw8NT .TP8sm{outline-color:var(--ricos-internal-layout-cell-outline-color)}.vRrS7 .Kw8NT{display:flex;flex-direction:column;height:var(--ricos-internal-layout-cell-height,100%);max-width:var(--ricos-internal-layout-cell-min-width,auto);min-width:min(100%,var(--ricos-internal-layout-cell-min-width,0));position:relative;z-index:3}.vRrS7 .Kw8NT .TP8sm{display:flex;flex-direction:column;flex-grow:1;justify-content:var(--ricos-internal-layout-cell-vertical-alignment);outline:1.5px solid transparent;padding:var(--ricos-internal-layout-cell-padding-top,12px) var(--ricos-internal-layout-cell-padding-right,0) var(--ricos-internal-layout-cell-padding-bottom,12px) var(--ricos-internal-layout-cell-padding-left,0);position:relative;z-index:2}@supports not (contain:inline-size){@media only screen and (max-width:480px){.vRrS7 .Kw8NT .TP8sm{padding:min(16px,var(--ricos-internal-layout-cell-padding-top,16px)) min(16px,var(--ricos-internal-layout-cell-padding-right,16px)) min(16px,var(--ricos-internal-layout-cell-padding-bottom,16px)) min(16px,var(--ricos-internal-layout-cell-padding-left,16px))}}}@container (width < 480px){.vRrS7 .Kw8NT .TP8sm:where(:not([data-ricos-responsive=viewport],[data-ricos-responsive=viewport] *)){padding:min(16px,var(--ricos-internal-layout-cell-padding-top,16px)) min(16px,var(--ricos-internal-layout-cell-padding-right,16px)) min(16px,var(--ricos-internal-layout-cell-padding-bottom,16px)) min(16px,var(--ricos-internal-layout-cell-padding-left,16px))}}@media (width < 480px){.vRrS7 .Kw8NT .TP8sm:where([data-ricos-responsive=viewport]),:where([data-ricos-responsive=viewport]) .vRrS7 .Kw8NT .TP8sm{padding:min(16px,var(--ricos-internal-layout-cell-padding-top,16px)) min(16px,var(--ricos-internal-layout-cell-padding-right,16px)) min(16px,var(--ricos-internal-layout-cell-padding-bottom,16px)) min(16px,var(--ricos-internal-layout-cell-padding-left,16px))}}.vRrS7 .Kw8NT .C3-U0{align-items:center;background:#fff;border-radius:18px;box-shadow:0 0 6px rgba(0,6,36,.05);box-shadow:0 0 6px 0 rgba(0,6,36,.1),0 2px 4px 0 rgba(0,6,36,.05);color:#000624;cursor:grab;display:none;height:18px;justify-content:center;left:50%;margin:0;outline:1px solid rgba(0,6,36,.302);padding:0 12px;position:absolute;top:0;transform:translate(-50%,-50%);transition:color .15s ease,background-color .15s ease;width:42px;z-index:3}.vRrS7 .Kw8NT .C3-U0:hover{background:#116dff;box-shadow:0 0 0 2px rgba(0,6,36,.1),0 0 6px 0 rgba(0,6,36,.1),0 2px 4px 0 rgba(0,6,36,.05);color:#fff;outline-color:#fff;outline-width:1.5px}.vRrS7 .Kw8NT .C3-U0:active{background:#0f62e6;box-shadow:0 0 0 2px rgba(0,6,36,.1),0 0 6px 0 rgba(0,6,36,.1),0 2px 4px 0 rgba(0,6,36,.05);color:#fff;outline-color:#fff;outline-width:1.5px}.vRrS7 .Kw8NT .C3-U0:active{cursor:grabbing}.vRrS7 .Kw8NT .C3-U0:before{bottom:-1px;content:"";height:1px;left:0;position:absolute;right:0}.vRrS7.GwIZH:after{background-color:rgba(17,109,255,.1);bottom:0;content:"";left:0;opacity:1;outline:1.5px solid #116dff;pointer-events:none;position:absolute;right:0;top:0;z-index:2}.vRrS7.GwIZH .Kw8NT .TP8sm{outline-color:rgba(17,109,255,.2)}.vRrS7.GwIZH .Kw8NT .C3-U0{display:none}.vRrS7 .Kw8NT.CaBxP{background-color:rgba(17,109,255,.1);z-index:4}.vRrS7 .Kw8NT.CaBxP .TP8sm{outline-color:#116dff}.vRrS7 .Kw8NT.CaBxP .C3-U0{background:#116dff;box-shadow:0 0 6px 0 rgba(0,6,36,.1),0 2px 4px 0 rgba(0,6,36,.05);color:#fff;outline:none;transition:color .15s ease,background-color .15s ease}.vRrS7 .Kw8NT.CaBxP .C3-U0:hover{background:#0f62e6;color:#fff}.vRrS7 .Kw8NT.CaBxP .C3-U0:active{background:#084ebd;color:#fff}.vRrS7 .Kw8NT.CaBxP .ricos-selection,.vRrS7 .Kw8NT.CaBxP ::selection,.vRrS7.GwIZH .Kw8NT .ricos-selection,.vRrS7.GwIZH .Kw8NT ::selection,.vRrS7.gnN8l .Kw8NT .ricos-selection,.vRrS7.gnN8l .Kw8NT ::selection{background-color:transparent!important}.vRrS7.GwIZH .ricos-selection,.vRrS7.gnN8l .ricos-selection{background-color:transparent!important}.vRrS7.-xjFA .C3-U0,.vRrS7.Cs9Te .C3-U0,.vRrS7.GwIZH .C3-U0,.vRrS7.gnN8l .C3-U0{display:flex;z-index:4}.Zxv3c{--ricos-internal-resize-handler-width:max(15px,var(--ricos-internal-layout-gap,0px));--ricos-internal-resize-handler-background-start:calc(50% - 1px);--ricos-internal-resize-handler-background-end:calc(50% + 1px);bottom:-1px;display:flex;left:calc(var(--ricos-internal-resize-handler-width)/2*-1);position:absolute!important;top:0;transform:translateX(max(-50%,var(--ricos-internal-layout-gap,0px)/2 * -1));width:var(--ricos-internal-resize-handler-width);z-index:3}.Zxv3c:active,.vRrS7:not(.gnN8l) .Zxv3c:hover{background:linear-gradient(90deg,transparent,transparent var(--ricos-internal-resize-handler-background-start),var(--ricos-internal-layout-handler-color) var(--ricos-internal-resize-handler-background-start),var(--ricos-internal-layout-handler-color) var(--ricos-internal-resize-handler-background-end),transparent var(--ricos-internal-resize-handler-background-end));cursor:var(--ricos-internal-layout-handler-cursor)}`;
3
+ var css = `.Ahc5U{inset:0;overflow:hidden;pointer-events:none;position:absolute;z-index:1}.d2vWr{left:0;pointer-events:none;position:absolute;right:0}.cedGp{background-color:var(--ricos-internal-layout-top-divider-color,currentColor);top:0;transform:scale(var(--ricos-internal-layout-top-divider-flip,1),-1)}.GArkg{background-color:var(--ricos-internal-layout-bottom-divider-color,currentColor);bottom:0;transform:scaleX(var(--ricos-internal-layout-bottom-divider-flip,1))}.Uny0D{--ricos-internal-layout-cell-outline-color:#a8caff;background:var(--ricos-internal-layout-backdrop-gradient,var(--ricos-internal-layout-backdrop-color,transparent));outline:1.5px solid transparent;padding-bottom:var(--ricos-internal-layout-backdrop-padding-bottom,0);padding-top:var(--ricos-internal-layout-backdrop-padding-top,0);position:relative}.Uny0D.-EuA7,.Uny0D:hover{outline-color:var(--ricos-internal-layout-cell-outline-color)}.Uny0D:hover .DEyEZ .APkNS{outline-color:var(--ricos-internal-layout-cell-outline-color)}.Uny0D:before{background-image:var(--ricos-internal-layout-backdrop-image-src);background-position:var(--ricos-internal-layout-backdrop-image-position);background-repeat:no-repeat;background-size:var(--ricos-internal-layout-backdrop-image-scaling);bottom:0;clip-path:inset(0);content:"";filter:var(--ricos-internal-layout-backdrop-image-blur,none);left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:0}.Uny0D:after{background:var(--ricos-internal-layout-backdrop-overlay,transparent);bottom:0;clip-path:inset(0);content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:1}.Uny0D.cf-3H{margin:0}*+.Uny0D{margin-top:20px}.Uny0D .dHwoU{display:none}.Uny0D ._2VcbN:has(.gEycQ.PrYI0)+.dHwoU,.Uny0D ._2VcbN:has(.gEycQ._4J4ZZ)+.dHwoU,.Uny0D ._2VcbN:has(.gEycQ._8EbuL)+.dHwoU,.Uny0D ._2VcbN:has(.gEycQ.aWqHB)+.dHwoU{display:block}.Uny0D .C5l5r{align-items:center;background:#fff;border:1px solid #dfe5eb;border-radius:50%;bottom:-12px;box-shadow:0 2px 4px 0 rgba(23,25,28,.1);cursor:grab;display:flex;height:24px;justify-content:center;left:50%;padding:0;position:absolute;transform:translate(-50%,100%);width:24px;z-index:4}.Uny0D .C5l5r:active{cursor:grabbing}.Uny0D.qTLWO{margin-top:0}.Uny0D ._4Y2b9{background:#116dff;bottom:0;left:calc(var(--ricos-internal-layout-drop-cursor-position) - 1px);position:absolute;top:0;width:2px;z-index:5}.Uny0D ._4Y2b9:before{border:2px solid #116dff;border-radius:50%;content:"";height:6px;left:-2px;position:absolute;top:-5px;width:6px}.Uny0D.wUOQs{outline-color:transparent!important}.Uny0D.wUOQs:hover,.Uny0D.wUOQs:hover .DEyEZ .APkNS{outline-color:transparent!important}.Uny0D.wUOQs .cVj-m,.Uny0D.wUOQs .dHwoU,.Uny0D.wUOQs .kusp-{display:none!important}.Uny0D.ezX-g:has(.HRry6){margin-bottom:40px}.Uny0D.ezX-g[data-breakout=normal]{--ricos-internal-paywall-divider-outer-start:var(--ricos-breakout-normal-padding-start,0);--ricos-internal-paywall-divider-outer-end:var(--ricos-breakout-normal-padding-end,0)}.Uny0D.ezX-g[data-breakout=fullWidth]{--ricos-internal-paywall-divider-outer-start:var(--ricos-breakout-full-width-padding-start,0);--ricos-internal-paywall-divider-outer-end:var(--ricos-breakout-full-width-padding-end,0)}.Uny0D.ezX-g .HRry6{align-items:center;color:var(--ricos-text-color-low,#646464);display:flex;font-size:12px;font-weight:500;gap:6px;inset-inline-end:var(--ricos-internal-paywall-divider-outer-end,0);inset-inline-start:var(--ricos-internal-paywall-divider-outer-start,0);line-height:18px;margin-top:12px;padding-inline-end:var(--ricos-breakout-normal-padding-end,0);padding-inline-start:var(--ricos-breakout-normal-padding-start,0);pointer-events:none;position:absolute;text-transform:uppercase;top:100%;user-select:none}.Uny0D.ezX-g .HRry6:after,.Uny0D.ezX-g .HRry6:before{background:rgba(var(--ricos-text-color-tuple,33,33,33),.15);content:"";flex:1;height:1px}.Uny0D.ezX-g .IsdbH{align-items:center;display:flex;gap:3px;padding-inline-end:6px;white-space:nowrap}.Uny0D.ezX-g .jAzvV{flex-shrink:0}._2VcbN{--ricos-internal-layout-display:grid;--ricos-internal-layout-handler-cursor:col-resize;--ricos-internal-layout-handler-color:#116dff;clear:both;margin:0 auto;position:relative;width:min(100%,var(--ricos-internal-resize-width,var(--ricos-internal-layout-width,initial)));z-index:2}.gEycQ{display:var(--ricos-internal-layout-display,grid);flex-wrap:wrap;gap:var(--ricos-internal-layout-gap,20px);grid-template-columns:var(--ricos-internal-layout-grid-template,var(--ricos-internal-layout-column-template));justify-content:var(--ricos-internal-layout-justify-content,auto);position:relative;transition:grid-template-columns .1s ease-out;width:100%;will-change:grid-template-columns;z-index:2}[data-layout-banner] .gEycQ{grid-template-columns:var(--ricos-internal-layout-column-template)!important}[data-layout-banner] .gEycQ._8EbuL{transition:none!important}.gEycQ._5RDn9,.gEycQ.x9ENo .DEyEZ{background:var(--ricos-internal-layout-background-gradient,var(--ricos-internal-layout-background-color,transparent));border:var(--ricos-internal-layout-border-width,0) solid var(--ricos-internal-layout-border-color);border-radius:var(--ricos-internal-layout-border-radius,0)}.gEycQ._5RDn9:before,.gEycQ.x9ENo .DEyEZ:before{background-image:var(--ricos-internal-layout-background-image-src);background-position:var(--ricos-internal-layout-background-image-position);background-repeat:no-repeat;background-size:var(--ricos-internal-layout-background-image-scaling);bottom:0;clip-path:inset(0 round var(--ricos-internal-layout-border-radius,0));content:"";filter:var(--ricos-internal-layout-background-image-blur,none);left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:0}.gEycQ._5RDn9:after,.gEycQ.x9ENo .DEyEZ:after{background:var(--ricos-internal-layout-background-overlay,transparent);bottom:0;clip-path:inset(0 round var(--ricos-internal-layout-border-radius,0));content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:1}@supports not (contain:inline-size){@media only screen and (max-width:480px){.gEycQ{gap:min(20px,var(--ricos-internal-layout-gap,20px))}}}@container (width < 480px){.gEycQ:where(:not([data-ricos-responsive=viewport],[data-ricos-responsive=viewport] *)){gap:min(20px,var(--ricos-internal-layout-gap,20px))}}@media (width < 480px){.gEycQ:where([data-ricos-responsive=viewport]),:where([data-ricos-responsive=viewport]) .gEycQ{gap:min(20px,var(--ricos-internal-layout-gap,20px))}}.gEycQ.X86QL{--ricos-internal-layout-display:flex;--ricos-internal-layout-justify-content:center;--ricos-internal-layout-cell-min-width:100%;--ricos-internal-layout-cell-height:auto}.gEycQ.X86QL .kusp-{display:none}.gEycQ._8EbuL{transition:none!important}.gEycQ._8EbuL,.gEycQ._8EbuL *{user-select:none!important}.gEycQ.jbxNq{--ricos-layout-handler-color:#e62214;--ricos-layout-handler-cursor:e-resize}.gEycQ.nDudx{--ricos-layout-handler-color:#e62214;--ricos-layout-handler-cursor:w-resize}.gEycQ._4J4ZZ .DEyEZ .APkNS,.gEycQ._8EbuL .DEyEZ .APkNS,.gEycQ.aWqHB .DEyEZ .APkNS,.gEycQ.i5eOh .DEyEZ .APkNS,.gEycQ:focus .DEyEZ .APkNS,.gEycQ:hover .DEyEZ .APkNS{outline-color:var(--ricos-internal-layout-cell-outline-color)}.gEycQ .DEyEZ{display:flex;flex-direction:column;height:var(--ricos-internal-layout-cell-height,100%);max-width:var(--ricos-internal-layout-cell-min-width,auto);min-width:min(100%,var(--ricos-internal-layout-cell-min-width,0));position:relative;z-index:3}.gEycQ .DEyEZ .APkNS{display:flex;flex-direction:column;flex-grow:1;justify-content:var(--ricos-internal-layout-cell-vertical-alignment);outline:1.5px solid transparent;padding:var(--ricos-internal-layout-cell-padding-top,12px) var(--ricos-internal-layout-cell-padding-right,0) var(--ricos-internal-layout-cell-padding-bottom,12px) var(--ricos-internal-layout-cell-padding-left,0);position:relative;z-index:2}@supports not (contain:inline-size){@media only screen and (max-width:480px){.gEycQ .DEyEZ .APkNS{padding:min(16px,var(--ricos-internal-layout-cell-padding-top,16px)) min(16px,var(--ricos-internal-layout-cell-padding-right,16px)) min(16px,var(--ricos-internal-layout-cell-padding-bottom,16px)) min(16px,var(--ricos-internal-layout-cell-padding-left,16px))}}}@container (width < 480px){.gEycQ .DEyEZ .APkNS:where(:not([data-ricos-responsive=viewport],[data-ricos-responsive=viewport] *)){padding:min(16px,var(--ricos-internal-layout-cell-padding-top,16px)) min(16px,var(--ricos-internal-layout-cell-padding-right,16px)) min(16px,var(--ricos-internal-layout-cell-padding-bottom,16px)) min(16px,var(--ricos-internal-layout-cell-padding-left,16px))}}@media (width < 480px){.gEycQ .DEyEZ .APkNS:where([data-ricos-responsive=viewport]),:where([data-ricos-responsive=viewport]) .gEycQ .DEyEZ .APkNS{padding:min(16px,var(--ricos-internal-layout-cell-padding-top,16px)) min(16px,var(--ricos-internal-layout-cell-padding-right,16px)) min(16px,var(--ricos-internal-layout-cell-padding-bottom,16px)) min(16px,var(--ricos-internal-layout-cell-padding-left,16px))}}.gEycQ .DEyEZ .cVj-m{align-items:center;background:#fff;border-radius:18px;box-shadow:0 0 6px rgba(0,6,36,.05);box-shadow:0 0 6px 0 rgba(0,6,36,.1),0 2px 4px 0 rgba(0,6,36,.05);color:#000624;cursor:grab;display:none;height:18px;justify-content:center;left:50%;margin:0;outline:1px solid rgba(0,6,36,.302);padding:0 12px;position:absolute;top:0;transform:translate(-50%,-50%);transition:color .15s ease,background-color .15s ease;width:42px;z-index:3}.gEycQ .DEyEZ .cVj-m:hover{background:#116dff;box-shadow:0 0 0 2px rgba(0,6,36,.1),0 0 6px 0 rgba(0,6,36,.1),0 2px 4px 0 rgba(0,6,36,.05);color:#fff;outline-color:#fff;outline-width:1.5px}.gEycQ .DEyEZ .cVj-m:active{background:#0f62e6;box-shadow:0 0 0 2px rgba(0,6,36,.1),0 0 6px 0 rgba(0,6,36,.1),0 2px 4px 0 rgba(0,6,36,.05);color:#fff;outline-color:#fff;outline-width:1.5px}.gEycQ .DEyEZ .cVj-m:active{cursor:grabbing}.gEycQ .DEyEZ .cVj-m:before{bottom:-1px;content:"";height:1px;left:0;position:absolute;right:0}.gEycQ.aWqHB:after{background-color:rgba(17,109,255,.1);bottom:0;content:"";left:0;opacity:1;outline:1.5px solid #116dff;pointer-events:none;position:absolute;right:0;top:0;z-index:2}.gEycQ.aWqHB .DEyEZ .APkNS{outline-color:rgba(17,109,255,.2)}.gEycQ.aWqHB .DEyEZ .cVj-m{display:none}.gEycQ .DEyEZ.HI3e8{background-color:rgba(17,109,255,.1);z-index:4}.gEycQ .DEyEZ.HI3e8 .APkNS{outline-color:#116dff}.gEycQ .DEyEZ.HI3e8 .cVj-m{background:#116dff;box-shadow:0 0 6px 0 rgba(0,6,36,.1),0 2px 4px 0 rgba(0,6,36,.05);color:#fff;outline:none;transition:color .15s ease,background-color .15s ease}.gEycQ .DEyEZ.HI3e8 .cVj-m:hover{background:#0f62e6;color:#fff}.gEycQ .DEyEZ.HI3e8 .cVj-m:active{background:#084ebd;color:#fff}.gEycQ .DEyEZ.HI3e8 .ricos-selection,.gEycQ .DEyEZ.HI3e8 ::selection,.gEycQ._8EbuL .DEyEZ .ricos-selection,.gEycQ._8EbuL .DEyEZ ::selection,.gEycQ.aWqHB .DEyEZ .ricos-selection,.gEycQ.aWqHB .DEyEZ ::selection{background-color:transparent!important}.gEycQ._8EbuL .ricos-selection,.gEycQ.aWqHB .ricos-selection{background-color:transparent!important}.gEycQ._4J4ZZ .cVj-m,.gEycQ._8EbuL .cVj-m,.gEycQ.aWqHB .cVj-m,.gEycQ.i5eOh .cVj-m{display:flex;z-index:4}.kusp-{--ricos-internal-resize-handler-width:max(15px,var(--ricos-internal-layout-gap,0px));--ricos-internal-resize-handler-background-start:calc(50% - 1px);--ricos-internal-resize-handler-background-end:calc(50% + 1px);bottom:-1px;display:flex;left:calc(var(--ricos-internal-resize-handler-width)/2*-1);position:absolute!important;top:0;transform:translateX(max(-50%,var(--ricos-internal-layout-gap,0px)/2 * -1));width:var(--ricos-internal-resize-handler-width);z-index:3}.gEycQ:not(._8EbuL) .kusp-:hover,.kusp-:active{background:linear-gradient(90deg,transparent,transparent var(--ricos-internal-resize-handler-background-start),var(--ricos-internal-layout-handler-color) var(--ricos-internal-resize-handler-background-start),var(--ricos-internal-layout-handler-color) var(--ricos-internal-resize-handler-background-end),transparent var(--ricos-internal-resize-handler-background-end));cursor:var(--ricos-internal-layout-handler-cursor)}`;
4
4
  var isTest = typeof process !== "undefined" && process.env && false;
5
5
  if (isTest || !css || typeof document === "undefined") {
6
6
  return;
@@ -21,39 +21,39 @@ const injectCss = (() => {
21
21
  });
22
22
  injectCss();
23
23
  var layouts_default = {
24
- "sectionDividerClip": "_7coMu",
25
- "sectionDivider": "nTXNT",
26
- "sectionDividerTop": "VzOB-",
27
- "sectionDividerBottom": "-SOcz",
28
- "layoutWrapper": "UqICm",
29
- "withVerticalResize": "vV1uo",
30
- "cell": "Kw8NT",
31
- "cellContent": "TP8sm",
32
- "breakoutMargin": "P8vSD",
33
- "layoutHandlerWrapper": "_6Gobf",
34
- "layoutContainer": "wQLux",
35
- "layout": "vRrS7",
36
- "layoutSelected": "GwIZH",
37
- "dragging": "f6Thp",
38
- "resizing": "gnN8l",
39
- "inLayout": "-xjFA",
40
- "layoutHandler": "RaoGy",
41
- "bannerMargin": "UYNVj",
42
- "dropCursor": "omC2x",
43
- "disabled": "_27yw1",
44
- "resizeHandler": "Zxv3c",
45
- "columnHandlerContainer": "C3-U0",
46
- "paywall": "_9B-Cl",
47
- "paywallDivider": "LFgb1",
48
- "paywallDividerLabel": "fkYP9",
49
- "paywallDividerArrow": "_7rxv0",
50
- "designOnLayout": "Y0F-w",
51
- "designOnCell": "IfPPx",
52
- "mobile": "a-uMs",
53
- "invalidLeft": "szfYm",
54
- "invalidRight": "nONwb",
55
- "draggingOver": "Cs9Te",
56
- "cellSelected": "CaBxP"
24
+ "sectionDividerClip": "Ahc5U",
25
+ "sectionDivider": "d2vWr",
26
+ "sectionDividerTop": "cedGp",
27
+ "sectionDividerBottom": "GArkg",
28
+ "layoutWrapper": "Uny0D",
29
+ "withVerticalResize": "-EuA7",
30
+ "cell": "DEyEZ",
31
+ "cellContent": "APkNS",
32
+ "breakoutMargin": "cf-3H",
33
+ "layoutHandlerWrapper": "dHwoU",
34
+ "layoutContainer": "_2VcbN",
35
+ "layout": "gEycQ",
36
+ "layoutSelected": "aWqHB",
37
+ "dragging": "PrYI0",
38
+ "resizing": "_8EbuL",
39
+ "inLayout": "_4J4ZZ",
40
+ "layoutHandler": "C5l5r",
41
+ "bannerMargin": "qTLWO",
42
+ "dropCursor": "_4Y2b9",
43
+ "disabled": "wUOQs",
44
+ "resizeHandler": "kusp-",
45
+ "columnHandlerContainer": "cVj-m",
46
+ "paywall": "ezX-g",
47
+ "paywallDivider": "HRry6",
48
+ "paywallDividerLabel": "IsdbH",
49
+ "paywallDividerIcon": "jAzvV",
50
+ "designOnLayout": "_5RDn9",
51
+ "designOnCell": "x9ENo",
52
+ "mobile": "X86QL",
53
+ "invalidLeft": "jbxNq",
54
+ "invalidRight": "nDudx",
55
+ "draggingOver": "i5eOh",
56
+ "cellSelected": "HI3e8"
57
57
  };
58
58
  export {
59
59
  layouts_default as default,