@prolibu-suite/cobalt-core 0.10.3 → 0.11.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 (736) hide show
  1. package/custom-elements.json +4385 -389
  2. package/dist/cjs/co-accordion.cjs.entry.js +3 -3
  3. package/dist/cjs/co-action-bar.cjs.entry.js +3 -3
  4. package/dist/cjs/co-app-shell.cjs.entry.js +3 -3
  5. package/dist/cjs/co-audio-player.cjs.entry.js +4 -4
  6. package/dist/cjs/co-autocomplete.cjs.entry.js +2 -2
  7. package/dist/cjs/co-avatar-group.cjs.entry.js +1 -1
  8. package/dist/cjs/co-avatar.cjs.entry.js +7 -4
  9. package/dist/cjs/co-badge.cjs.entry.js +2 -2
  10. package/dist/cjs/co-bottom-sheet.cjs.entry.js +5 -5
  11. package/dist/cjs/co-breadcrumb-item.cjs.entry.js +3 -3
  12. package/dist/cjs/co-breadcrumb.cjs.entry.js +2 -2
  13. package/dist/cjs/co-button-group.cjs.entry.js +3 -3
  14. package/dist/cjs/co-button.cjs.entry.js +9 -7
  15. package/dist/cjs/co-calendar-month_2.cjs.entry.js +4 -4
  16. package/dist/cjs/co-calendar_3.cjs.entry.js +72 -27
  17. package/dist/cjs/co-card.cjs.entry.js +3 -3
  18. package/dist/cjs/co-carousel-item.cjs.entry.js +2 -2
  19. package/dist/cjs/co-carousel.cjs.entry.js +3 -3
  20. package/dist/cjs/co-checkbox-group.cjs.entry.js +1 -1
  21. package/dist/cjs/co-checkbox.cjs.entry.js +13 -5
  22. package/dist/cjs/co-chip_2.cjs.entry.js +28 -6
  23. package/dist/cjs/co-color-area.cjs.entry.js +169 -0
  24. package/dist/cjs/co-color-picker.cjs.entry.js +5 -5
  25. package/dist/cjs/co-color-slider.cjs.entry.js +189 -0
  26. package/dist/cjs/co-column-picker.cjs.entry.js +3 -3
  27. package/dist/cjs/co-combobox.cjs.entry.js +5 -5
  28. package/dist/cjs/co-command-search.cjs.entry.js +5 -5
  29. package/dist/cjs/co-data-table-pagination.cjs.entry.js +5 -5
  30. package/dist/cjs/co-data-table.cjs.entry.js +3 -3
  31. package/dist/cjs/co-date-picker.cjs.entry.js +2 -2
  32. package/dist/cjs/co-date-range-picker.cjs.entry.js +2 -2
  33. package/dist/cjs/co-date-range.cjs.entry.js +2 -2
  34. package/dist/cjs/co-date-time-picker.cjs.entry.js +4 -4
  35. package/dist/cjs/co-document-editor.cjs.entry.js +1161 -0
  36. package/dist/cjs/co-drive-card.cjs.entry.js +2 -2
  37. package/dist/cjs/co-drop-zone.cjs.entry.js +2 -2
  38. package/dist/cjs/co-emoji-picker.cjs.entry.js +3 -3
  39. package/dist/cjs/co-empty-state.cjs.entry.js +3 -3
  40. package/dist/cjs/co-event-calendar.cjs.entry.js +3 -3
  41. package/dist/cjs/co-event-popover.cjs.entry.js +3 -3
  42. package/dist/cjs/co-fab.cjs.entry.js +3 -3
  43. package/dist/cjs/co-file-field.cjs.entry.js +8 -8
  44. package/dist/cjs/co-file-type-tile.cjs.entry.js +3 -3
  45. package/dist/cjs/co-gradient-bar.cjs.entry.js +220 -0
  46. package/dist/cjs/co-helper-text.cjs.entry.js +3 -3
  47. package/dist/cjs/co-icon-button.cjs.entry.js +49 -9
  48. package/dist/cjs/co-icon.cjs.entry.js +3 -3
  49. package/dist/cjs/co-input.cjs.entry.js +14 -8
  50. package/dist/cjs/co-json-field.cjs.entry.js +5 -5
  51. package/dist/cjs/{co-tooltip.cjs.entry.js → co-kbd_2.cjs.entry.js} +194 -6
  52. package/dist/cjs/co-lightbox.cjs.entry.js +5 -5
  53. package/dist/cjs/co-list-footer.cjs.entry.js +2 -2
  54. package/dist/cjs/co-list-item.cjs.entry.js +5 -5
  55. package/dist/cjs/co-loader.cjs.entry.js +1 -1
  56. package/dist/cjs/co-media-thumb.cjs.entry.js +3 -3
  57. package/dist/cjs/co-menu-divider.cjs.entry.js +3 -3
  58. package/dist/cjs/co-menu-item.cjs.entry.js +41 -43
  59. package/dist/cjs/co-menu.cjs.entry.js +81 -5
  60. package/dist/cjs/co-modal.cjs.entry.js +350 -7
  61. package/dist/cjs/co-navbar.cjs.entry.js +3 -3
  62. package/dist/cjs/co-number-field.cjs.entry.js +5 -5
  63. package/dist/cjs/co-overlay.cjs.entry.js +8 -4
  64. package/dist/cjs/co-page-header.cjs.entry.js +2 -2
  65. package/dist/cjs/co-phone-field.cjs.entry.js +3 -3
  66. package/dist/cjs/co-popover.cjs.entry.js +81 -6
  67. package/dist/cjs/co-progress-bar.cjs.entry.js +3 -3
  68. package/dist/cjs/co-progress-circle.cjs.entry.js +3 -3
  69. package/dist/cjs/co-provider-logo_2.cjs.entry.js +2 -2
  70. package/dist/cjs/co-radio-group.cjs.entry.js +4 -4
  71. package/dist/cjs/co-radio.cjs.entry.js +4 -4
  72. package/dist/cjs/co-rating.cjs.entry.js +4 -4
  73. package/dist/cjs/co-ref-field.cjs.entry.js +5 -5
  74. package/dist/cjs/co-rich-text-editor.cjs.entry.js +26 -92
  75. package/dist/cjs/co-rich-text-toolbar.cjs.entry.js +79 -20
  76. package/dist/cjs/co-rich-text-viewer.cjs.entry.js +9 -2
  77. package/dist/cjs/co-row.cjs.entry.js +3 -3
  78. package/dist/cjs/co-segmented-bar.cjs.entry.js +3 -3
  79. package/dist/cjs/co-select.cjs.entry.js +158 -29
  80. package/dist/cjs/co-separator.cjs.entry.js +2 -2
  81. package/dist/cjs/co-sidebar-nav.cjs.entry.js +20 -5
  82. package/dist/cjs/co-sidebar.cjs.entry.js +3 -3
  83. package/dist/cjs/co-slider.cjs.entry.js +203 -23
  84. package/dist/cjs/co-swatch-grid.cjs.entry.js +121 -0
  85. package/dist/cjs/co-switch.cjs.entry.js +5 -5
  86. package/dist/cjs/co-tab-group.cjs.entry.js +113 -4
  87. package/dist/cjs/co-tab.cjs.entry.js +15 -5
  88. package/dist/cjs/co-tags-field.cjs.entry.js +8 -8
  89. package/dist/cjs/co-textarea.cjs.entry.js +6 -6
  90. package/dist/cjs/co-tile.cjs.entry.js +61 -0
  91. package/dist/cjs/co-time-field.cjs.entry.js +2 -2
  92. package/dist/cjs/co-toast.cjs.entry.js +3 -3
  93. package/dist/cjs/co-toggle-button-group.cjs.entry.js +26 -5
  94. package/dist/cjs/co-toggle-button.cjs.entry.js +67 -6
  95. package/dist/cjs/co-transfer-list.cjs.entry.js +3 -3
  96. package/dist/cjs/co-tree-item.cjs.entry.js +110 -0
  97. package/dist/cjs/co-video.cjs.entry.js +3 -3
  98. package/dist/cjs/cobalt.cjs.js +2 -2
  99. package/dist/cjs/{color-CML2Cfdh.js → color-DQVrQGi0.js} +10 -5
  100. package/dist/cjs/{fieldChip-B6YIGU1V.js → fieldChip-C7MxxBVO.js} +1 -1
  101. package/dist/cjs/gradientStops-CMpH4fB_.js +153 -0
  102. package/dist/cjs/hsv-DpfSF3M2.js +95 -0
  103. package/dist/cjs/{index-MDAnKsze.js → index-bHoidDwv.js} +67 -27
  104. package/dist/cjs/index-oMHzCXm6.js +144 -0
  105. package/dist/cjs/loader.cjs.js +2 -2
  106. package/dist/cjs/{index-2kMmd5-a.js → pagination-DV43TRj9.js} +1780 -297
  107. package/dist/cjs/{positioning-CyatXeT_.js → positioning-CILo5esi.js} +45 -18
  108. package/dist/cjs/{requiredMark-D-t-IPN0.js → requiredMark-21yHvvZS.js} +1 -1
  109. package/dist/cjs/rich-text-host-ueFSfW-6.js +119 -0
  110. package/dist/cjs/{richTextI18n-B28uAhh4.js → richTextI18n-DXGIv5w1.js} +45 -0
  111. package/dist/cjs/submenu-RlaX6irw.js +65 -0
  112. package/dist/cjs/{toolbar-config-CYACt9hh.js → toolbar-config-DczL6C4W.js} +32 -0
  113. package/dist/cobalt/cobalt.css +1 -1
  114. package/dist/cobalt/cobalt.esm.js +1 -1
  115. package/dist/cobalt/{p-ee149fd2.entry.js → p-05000ef3.entry.js} +1 -1
  116. package/dist/cobalt/p-06689166.entry.js +1 -0
  117. package/dist/cobalt/{p-1dc55e43.entry.js → p-0a5cfed0.entry.js} +1 -1
  118. package/dist/cobalt/p-1289131f.entry.js +1 -0
  119. package/dist/cobalt/{p-c7d7d7f7.entry.js → p-136beb2c.entry.js} +1 -1
  120. package/dist/cobalt/{p-b437eff6.entry.js → p-1693b614.entry.js} +1 -1
  121. package/dist/cobalt/p-1bfb69ae.entry.js +1 -0
  122. package/dist/cobalt/{p-2c9dba2f.entry.js → p-1f3d5313.entry.js} +1 -1
  123. package/dist/cobalt/{p-b821d9de.entry.js → p-22233b31.entry.js} +1 -1
  124. package/dist/cobalt/{p-c30b4cb5.entry.js → p-26fa36f8.entry.js} +1 -1
  125. package/dist/cobalt/p-2794c500.entry.js +1 -0
  126. package/dist/cobalt/p-297b55cd.entry.js +1 -0
  127. package/dist/cobalt/{p-17244412.entry.js → p-2a2b0c7a.entry.js} +1 -1
  128. package/dist/cobalt/{p-2636b7eb.entry.js → p-2e5702a0.entry.js} +1 -1
  129. package/dist/cobalt/p-3011c84f.entry.js +1 -0
  130. package/dist/cobalt/{p-4d65e713.entry.js → p-30760f77.entry.js} +1 -1
  131. package/dist/cobalt/{p-6dd220e0.entry.js → p-3b9a8e86.entry.js} +1 -1
  132. package/dist/cobalt/p-4111fefa.entry.js +1 -0
  133. package/dist/cobalt/{p-a32b20eb.entry.js → p-44edde81.entry.js} +1 -1
  134. package/dist/cobalt/{p-292b0389.entry.js → p-45007758.entry.js} +1 -1
  135. package/dist/cobalt/p-48c23310.entry.js +1 -0
  136. package/dist/cobalt/p-4b327483.entry.js +1 -0
  137. package/dist/cobalt/p-4c6caa41.entry.js +1 -0
  138. package/dist/cobalt/{p-000a15b8.entry.js → p-5534a64f.entry.js} +1 -1
  139. package/dist/cobalt/p-5573985a.entry.js +1 -0
  140. package/dist/cobalt/p-57d250ad.entry.js +1 -0
  141. package/dist/cobalt/{p-826ee074.entry.js → p-59d3e8fc.entry.js} +1 -1
  142. package/dist/cobalt/{p-4592ca00.entry.js → p-5a32b9a2.entry.js} +1 -1
  143. package/dist/cobalt/p-5b2aa70e.entry.js +1 -0
  144. package/dist/cobalt/{p-d29bb0fa.entry.js → p-5d6e02dd.entry.js} +1 -1
  145. package/dist/cobalt/{p-623cc195.entry.js → p-608d251d.entry.js} +1 -1
  146. package/dist/cobalt/{p-011dc80b.entry.js → p-66fc1528.entry.js} +1 -1
  147. package/dist/cobalt/{p-11c5ce78.entry.js → p-67ad9544.entry.js} +1 -1
  148. package/dist/cobalt/{p-290066ef.entry.js → p-6c157ea2.entry.js} +1 -1
  149. package/dist/cobalt/{p-a2462d7a.entry.js → p-6d541199.entry.js} +1 -1
  150. package/dist/cobalt/{p-58d9b650.entry.js → p-7376f4ed.entry.js} +1 -1
  151. package/dist/cobalt/{p-39a50e7f.entry.js → p-7569375a.entry.js} +1 -1
  152. package/dist/cobalt/{p-7b5c555c.entry.js → p-763698b3.entry.js} +1 -1
  153. package/dist/cobalt/{p-f57dffca.entry.js → p-7675cebe.entry.js} +1 -1
  154. package/dist/cobalt/p-78a20284.entry.js +1 -0
  155. package/dist/cobalt/{p-aa9400bf.entry.js → p-7f3523ce.entry.js} +1 -1
  156. package/dist/cobalt/{p-24196410.entry.js → p-86b6fd81.entry.js} +1 -1
  157. package/dist/cobalt/{p-996f4e38.entry.js → p-889563d5.entry.js} +1 -1
  158. package/dist/cobalt/{p-eadfd661.entry.js → p-8ab5b396.entry.js} +1 -1
  159. package/dist/cobalt/{p-c91d4fc6.entry.js → p-8b2e4579.entry.js} +1 -1
  160. package/dist/cobalt/p-8cd3acaa.entry.js +1 -0
  161. package/dist/cobalt/{p-23ab0cc5.entry.js → p-8f701eac.entry.js} +1 -1
  162. package/dist/cobalt/p-90fad0f9.entry.js +1 -0
  163. package/dist/cobalt/{p-76249983.entry.js → p-97a4fbba.entry.js} +1 -1
  164. package/dist/cobalt/p-9b46a8fe.entry.js +1 -0
  165. package/dist/cobalt/{p-ee2023da.entry.js → p-9bee9dc8.entry.js} +1 -1
  166. package/dist/cobalt/{p-2f9cbbd5.entry.js → p-9cf10331.entry.js} +1 -1
  167. package/dist/cobalt/p-9dc01092.entry.js +1 -0
  168. package/dist/cobalt/p-9e406172.entry.js +1 -0
  169. package/dist/cobalt/p-B1JT7us1.js +1 -0
  170. package/dist/cobalt/{p-BRbgGqLw.js → p-BVGGRfNG.js} +1 -1
  171. package/dist/cobalt/p-BmdKHBZP.js +1 -0
  172. package/dist/cobalt/p-BtliEQAT.js +1 -0
  173. package/dist/cobalt/p-COJdaKBU.js +1 -0
  174. package/dist/cobalt/{p-BAYo-RBt.js → p-CRxTFT_z.js} +1 -1
  175. package/dist/cobalt/p-CYN5B3IQ.js +1 -0
  176. package/dist/cobalt/p-DJkaRtbb.js +2 -0
  177. package/dist/cobalt/p-DU-KOQ8L.js +1 -0
  178. package/dist/cobalt/p-DXLeDZvr.js +1 -0
  179. package/dist/cobalt/{p-D_zA1Pv4.js → p-DgJovDdy.js} +1 -1
  180. package/dist/cobalt/p-RVQJEYxa.js +1 -0
  181. package/dist/cobalt/{p-1861fe41.entry.js → p-a07dedd1.entry.js} +1 -1
  182. package/dist/cobalt/{p-08e42e00.entry.js → p-a336178b.entry.js} +1 -1
  183. package/dist/cobalt/{p-f9a7b7c6.entry.js → p-a52ed6ff.entry.js} +1 -1
  184. package/dist/cobalt/{p-aaca6dab.entry.js → p-a930cdd7.entry.js} +1 -1
  185. package/dist/cobalt/{p-eb82358d.entry.js → p-b1994bb4.entry.js} +1 -1
  186. package/dist/cobalt/p-b2b13da8.entry.js +1 -0
  187. package/dist/cobalt/{p-c2ebf0ec.entry.js → p-b5ec4286.entry.js} +1 -1
  188. package/dist/cobalt/p-b9401dd7.entry.js +1 -0
  189. package/dist/cobalt/p-b9dfb333.entry.js +1 -0
  190. package/dist/cobalt/p-bc3ba0cd.entry.js +1 -0
  191. package/dist/cobalt/{p-d375014b.entry.js → p-bc4fbfa6.entry.js} +1 -1
  192. package/dist/cobalt/{p-d0b2c418.entry.js → p-c109a1e1.entry.js} +1 -1
  193. package/dist/cobalt/{p-ee9a623d.entry.js → p-c1caa112.entry.js} +1 -1
  194. package/dist/cobalt/p-c9990662.entry.js +1 -0
  195. package/dist/cobalt/p-cc4b51fa.entry.js +1 -0
  196. package/dist/cobalt/p-cc5989e9.entry.js +1 -0
  197. package/dist/cobalt/{p-e4264532.entry.js → p-ce2b2048.entry.js} +1 -1
  198. package/dist/cobalt/p-d1c378ff.entry.js +1 -0
  199. package/dist/cobalt/p-d1e83525.entry.js +1 -0
  200. package/dist/cobalt/{p-59963937.entry.js → p-d1f47915.entry.js} +1 -1
  201. package/dist/cobalt/{p-28764b8e.entry.js → p-d4979025.entry.js} +1 -1
  202. package/dist/cobalt/p-d6e7c258.entry.js +1 -0
  203. package/dist/cobalt/p-d75d2f3d.entry.js +1 -0
  204. package/dist/cobalt/p-db42c4ab.entry.js +1 -0
  205. package/dist/cobalt/{p-44c4e4a3.entry.js → p-e4ff2fcb.entry.js} +1 -1
  206. package/dist/cobalt/p-e6116149.entry.js +1 -0
  207. package/dist/cobalt/{p-0c004735.entry.js → p-e99ddf9c.entry.js} +1 -1
  208. package/dist/cobalt/{p-1cc818ca.entry.js → p-ea24eea8.entry.js} +1 -1
  209. package/dist/cobalt/{p-07416e31.entry.js → p-ea564148.entry.js} +1 -1
  210. package/dist/cobalt/{p-8471abe2.entry.js → p-ec7a6bf2.entry.js} +1 -1
  211. package/dist/cobalt/{p-fb2d1144.entry.js → p-ee42dca6.entry.js} +1 -1
  212. package/dist/cobalt/{p-49834b8e.entry.js → p-ee88ec40.entry.js} +1 -1
  213. package/dist/cobalt/p-eeb114da.entry.js +1 -0
  214. package/dist/cobalt/{p-f6691108.entry.js → p-f0898e21.entry.js} +1 -1
  215. package/dist/cobalt/p-f246946a.entry.js +1 -0
  216. package/dist/cobalt/{p-b90d41e4.entry.js → p-f5934cd9.entry.js} +1 -1
  217. package/dist/cobalt/p-f5e1873d.entry.js +1 -0
  218. package/dist/cobalt/p-f60bd4d6.entry.js +1 -0
  219. package/dist/cobalt/p-f813569c.entry.js +1 -0
  220. package/dist/cobalt/{p-f7eb1a40.entry.js → p-f8c7941f.entry.js} +1 -1
  221. package/dist/cobalt/{p-44ea675f.entry.js → p-f8d3c71e.entry.js} +1 -1
  222. package/dist/cobalt/{p-91e73a92.entry.js → p-ffbe955a.entry.js} +1 -1
  223. package/dist/cobalt/p-xnrKkNWQ.js +1 -0
  224. package/dist/collection/collection-manifest.json +8 -0
  225. package/dist/collection/components/co-accordion/co-accordion.js +2 -2
  226. package/dist/collection/components/co-action-bar/co-action-bar.js +2 -2
  227. package/dist/collection/components/co-app-shell/co-app-shell.js +2 -2
  228. package/dist/collection/components/co-audio-player/co-audio-player.js +3 -3
  229. package/dist/collection/components/co-autocomplete/co-autocomplete.js +1 -1
  230. package/dist/collection/components/co-avatar/co-avatar.css +11 -2
  231. package/dist/collection/components/co-avatar/co-avatar.js +7 -4
  232. package/dist/collection/components/co-avatar-group/co-avatar-group.js +1 -1
  233. package/dist/collection/components/co-badge/co-badge.js +1 -1
  234. package/dist/collection/components/co-bottom-sheet/co-bottom-sheet.js +4 -4
  235. package/dist/collection/components/co-breadcrumb/co-breadcrumb.js +1 -1
  236. package/dist/collection/components/co-breadcrumb-item/co-breadcrumb-item.js +2 -2
  237. package/dist/collection/components/co-button/co-button.css +73 -6
  238. package/dist/collection/components/co-button/co-button.js +33 -11
  239. package/dist/collection/components/co-button-group/co-button-group.js +2 -2
  240. package/dist/collection/components/co-calendar/calendarMarks.js +40 -0
  241. package/dist/collection/components/co-calendar/co-calendar.css +11 -1
  242. package/dist/collection/components/co-calendar/co-calendar.js +82 -20
  243. package/dist/collection/components/co-calendar-month/co-calendar-month.js +1 -1
  244. package/dist/collection/components/co-calendar-timegrid/co-calendar-timegrid.js +2 -2
  245. package/dist/collection/components/co-card/co-card.js +2 -2
  246. package/dist/collection/components/co-carousel/co-carousel.js +2 -2
  247. package/dist/collection/components/co-carousel-item/co-carousel-item.js +1 -1
  248. package/dist/collection/components/co-checkbox/co-checkbox.css +43 -1
  249. package/dist/collection/components/co-checkbox/co-checkbox.js +31 -3
  250. package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +1 -1
  251. package/dist/collection/components/co-chip/co-chip.js +2 -2
  252. package/dist/collection/components/co-color-area/co-color-area.css +83 -0
  253. package/dist/collection/components/co-color-area/co-color-area.js +341 -0
  254. package/dist/collection/components/co-color-picker/co-color-picker.js +2 -2
  255. package/dist/collection/components/co-color-slider/co-color-slider.css +115 -0
  256. package/dist/collection/components/co-color-slider/co-color-slider.js +353 -0
  257. package/dist/collection/components/co-column-picker/co-column-picker.js +2 -2
  258. package/dist/collection/components/co-combobox/co-combobox.js +4 -4
  259. package/dist/collection/components/co-command-search/co-command-search.js +5 -5
  260. package/dist/collection/components/co-data-table/co-data-table.js +3 -3
  261. package/dist/collection/components/co-data-table-pagination/co-data-table-pagination.js +4 -4
  262. package/dist/collection/components/co-date-field/co-date-field.js +4 -4
  263. package/dist/collection/components/co-date-range/co-date-range.js +1 -1
  264. package/dist/collection/components/co-date-range-picker/co-date-range-picker.js +2 -2
  265. package/dist/collection/components/co-date-time-picker/co-date-time-picker.js +3 -3
  266. package/dist/collection/components/co-document-editor/change-throttle.js +30 -0
  267. package/dist/collection/components/co-document-editor/co-document-editor.css +438 -0
  268. package/dist/collection/components/co-document-editor/co-document-editor.js +1542 -0
  269. package/dist/collection/components/co-document-editor/document-props.js +40 -0
  270. package/dist/collection/components/co-document-editor/header-tools.js +11 -0
  271. package/dist/collection/components/co-document-editor/image-bar.js +66 -0
  272. package/dist/collection/components/co-document-editor/page-styles.js +90 -0
  273. package/dist/collection/components/co-document-editor/zoom.js +45 -0
  274. package/dist/collection/components/co-drive-card/co-drive-card.js +1 -1
  275. package/dist/collection/components/co-drop-zone/co-drop-zone.js +1 -1
  276. package/dist/collection/components/co-emoji-picker/co-emoji-picker.js +2 -2
  277. package/dist/collection/components/co-empty-state/co-empty-state.js +2 -2
  278. package/dist/collection/components/co-event-calendar/co-event-calendar.js +2 -2
  279. package/dist/collection/components/co-event-popover/co-event-popover.js +1 -1
  280. package/dist/collection/components/co-fab/co-fab.js +2 -2
  281. package/dist/collection/components/co-file-field/co-file-field.js +6 -6
  282. package/dist/collection/components/co-file-type-tile/co-file-type-tile.js +2 -2
  283. package/dist/collection/components/co-gradient-bar/co-gradient-bar.css +138 -0
  284. package/dist/collection/components/co-gradient-bar/co-gradient-bar.js +407 -0
  285. package/dist/collection/components/co-helper-text/co-helper-text.js +2 -2
  286. package/dist/collection/components/co-icon/co-icon.js +2 -2
  287. package/dist/collection/components/co-icon-button/co-icon-button.css +95 -19
  288. package/dist/collection/components/co-icon-button/co-icon-button.js +120 -10
  289. package/dist/collection/components/co-input/co-input.css +122 -0
  290. package/dist/collection/components/co-input/co-input.js +37 -11
  291. package/dist/collection/components/co-json-field/co-json-field.js +3 -3
  292. package/dist/collection/components/co-kbd/co-kbd.css +99 -0
  293. package/dist/collection/components/co-kbd/co-kbd.js +291 -0
  294. package/dist/collection/components/co-lightbox/co-lightbox.js +4 -4
  295. package/dist/collection/components/co-list-footer/co-list-footer.js +1 -1
  296. package/dist/collection/components/co-list-item/co-list-item.js +4 -4
  297. package/dist/collection/components/co-media-thumb/co-media-thumb.js +2 -2
  298. package/dist/collection/components/co-menu/co-menu.css +60 -0
  299. package/dist/collection/components/co-menu/co-menu.js +143 -3
  300. package/dist/collection/components/co-menu-divider/co-menu-divider.css +17 -0
  301. package/dist/collection/components/co-menu-divider/co-menu-divider.js +1 -1
  302. package/dist/collection/components/co-menu-item/co-menu-item.css +42 -6
  303. package/dist/collection/components/co-menu-item/co-menu-item.js +58 -4
  304. package/dist/collection/components/co-modal/co-modal.css +212 -1
  305. package/dist/collection/components/co-modal/co-modal.js +339 -9
  306. package/dist/collection/components/co-navbar/co-navbar.js +2 -2
  307. package/dist/collection/components/co-number-field/co-number-field.js +3 -3
  308. package/dist/collection/components/co-option-list/co-option-list.css +64 -21
  309. package/dist/collection/components/co-option-list/co-option-list.js +43 -3
  310. package/dist/collection/components/co-overlay/co-overlay.js +7 -3
  311. package/dist/collection/components/co-page-header/co-page-header.js +1 -1
  312. package/dist/collection/components/co-phone-field/co-phone-field.js +1 -1
  313. package/dist/collection/components/co-popover/co-popover.css +15 -2
  314. package/dist/collection/components/co-popover/co-popover.js +144 -5
  315. package/dist/collection/components/co-progress-bar/co-progress-bar.js +2 -2
  316. package/dist/collection/components/co-progress-circle/co-progress-circle.js +2 -2
  317. package/dist/collection/components/co-radio/co-radio.js +3 -3
  318. package/dist/collection/components/co-radio-group/co-radio-group.js +4 -4
  319. package/dist/collection/components/co-rating/co-rating.js +3 -3
  320. package/dist/collection/components/co-ref-field/co-ref-field.js +5 -5
  321. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.js +23 -90
  322. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.css +12 -0
  323. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.js +123 -18
  324. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.js +8 -1
  325. package/dist/collection/components/co-row/co-row.js +2 -2
  326. package/dist/collection/components/co-segmented-bar/co-segmented-bar.js +3 -3
  327. package/dist/collection/components/co-select/co-select.css +194 -10
  328. package/dist/collection/components/co-select/co-select.js +163 -32
  329. package/dist/collection/components/co-select/virtualRows.js +57 -0
  330. package/dist/collection/components/co-separator/co-separator.js +1 -1
  331. package/dist/collection/components/co-sidebar/co-sidebar.js +2 -2
  332. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.css +10 -0
  333. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +19 -4
  334. package/dist/collection/components/co-skeleton/co-skeleton.js +1 -1
  335. package/dist/collection/components/co-slider/co-slider.css +148 -5
  336. package/dist/collection/components/co-slider/co-slider.js +240 -21
  337. package/dist/collection/components/co-swatch-grid/co-swatch-grid.css +56 -0
  338. package/dist/collection/components/co-swatch-grid/co-swatch-grid.js +292 -0
  339. package/dist/collection/components/co-switch/co-switch.js +3 -3
  340. package/dist/collection/components/co-tab/co-tab.css +60 -0
  341. package/dist/collection/components/co-tab/co-tab.js +36 -6
  342. package/dist/collection/components/co-tab-group/co-tab-group.css +24 -0
  343. package/dist/collection/components/co-tab-group/co-tab-group.js +124 -2
  344. package/dist/collection/components/co-tab-group/revealTab.js +26 -0
  345. package/dist/collection/components/co-tags-field/co-tags-field.js +5 -5
  346. package/dist/collection/components/co-textarea/co-textarea.js +4 -4
  347. package/dist/collection/components/co-tile/co-tile.css +63 -0
  348. package/dist/collection/components/co-tile/co-tile.js +162 -0
  349. package/dist/collection/components/co-time-field/co-time-field.js +1 -1
  350. package/dist/collection/components/co-toast/co-toast.js +4 -4
  351. package/dist/collection/components/co-toggle-button/co-toggle-button.css +101 -0
  352. package/dist/collection/components/co-toggle-button/co-toggle-button.js +80 -8
  353. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.css +21 -0
  354. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +28 -7
  355. package/dist/collection/components/co-tooltip/co-tooltip.css +36 -0
  356. package/dist/collection/components/co-tooltip/co-tooltip.js +51 -3
  357. package/dist/collection/components/co-transfer-list/co-transfer-list.js +3 -3
  358. package/dist/collection/components/co-tree-item/co-tree-item.css +226 -0
  359. package/dist/collection/components/co-tree-item/co-tree-item.js +353 -0
  360. package/dist/collection/components/co-tree-item/treeItemI18n.js +16 -0
  361. package/dist/collection/components/co-video/co-video.js +2 -2
  362. package/dist/collection/utils/color.js +9 -5
  363. package/dist/collection/utils/dragMove.js +95 -0
  364. package/dist/collection/utils/gradientBarI18n.js +24 -0
  365. package/dist/collection/utils/gradientStops.js +142 -0
  366. package/dist/collection/utils/hsv.js +114 -0
  367. package/dist/collection/utils/kbdI18n.js +29 -0
  368. package/dist/collection/utils/positioning.js +44 -18
  369. package/dist/collection/utils/rich-text-host.js +109 -0
  370. package/dist/collection/utils/richTextI18n.js +45 -0
  371. package/dist/collection/utils/submenu.js +23 -3
  372. package/dist/collection/utils/swatchGridI18n.js +14 -0
  373. package/dist/collection/utils/test/fake-block-layout.js +41 -0
  374. package/dist/collection/utils/test/prosemirror-dom-shim.js +17 -0
  375. package/dist/collection/utils/test/shared-contract-css.js +9 -0
  376. package/dist/components/co-accordion.js +1 -1
  377. package/dist/components/co-action-bar.js +1 -1
  378. package/dist/components/co-app-shell.js +1 -1
  379. package/dist/components/co-audio-player.js +1 -1
  380. package/dist/components/co-autocomplete.js +1 -1
  381. package/dist/components/co-avatar-group.js +1 -1
  382. package/dist/components/co-avatar.js +1 -1
  383. package/dist/components/co-badge.js +1 -1
  384. package/dist/components/co-bottom-sheet.js +1 -1
  385. package/dist/components/co-breadcrumb-item.js +1 -1
  386. package/dist/components/co-breadcrumb.js +1 -1
  387. package/dist/components/co-button-group.js +1 -1
  388. package/dist/components/co-button.js +1 -1
  389. package/dist/components/co-calendar-month.js +1 -1
  390. package/dist/components/co-calendar-timegrid.js +1 -1
  391. package/dist/components/co-calendar.js +1 -1
  392. package/dist/components/co-card.js +1 -1
  393. package/dist/components/co-carousel-item.js +1 -1
  394. package/dist/components/co-carousel.js +1 -1
  395. package/dist/components/co-checkbox-group.js +1 -1
  396. package/dist/components/co-checkbox.js +1 -1
  397. package/dist/components/co-chip.js +1 -1
  398. package/dist/components/co-color-area.d.ts +11 -0
  399. package/dist/components/co-color-area.js +1 -0
  400. package/dist/components/co-color-picker.js +1 -1
  401. package/dist/components/co-color-slider.d.ts +11 -0
  402. package/dist/components/co-color-slider.js +1 -0
  403. package/dist/components/co-column-picker.js +1 -1
  404. package/dist/components/co-combobox.js +1 -1
  405. package/dist/components/co-command-search.js +1 -1
  406. package/dist/components/co-data-table-pagination.js +1 -1
  407. package/dist/components/co-data-table.js +1 -1
  408. package/dist/components/co-date-field.js +1 -1
  409. package/dist/components/co-date-picker.js +1 -1
  410. package/dist/components/co-date-range-picker.js +1 -1
  411. package/dist/components/co-date-range.js +1 -1
  412. package/dist/components/co-date-time-picker.js +1 -1
  413. package/dist/components/co-document-editor.d.ts +11 -0
  414. package/dist/components/co-document-editor.js +1 -0
  415. package/dist/components/co-drawer.js +1 -1
  416. package/dist/components/co-drive-card.js +1 -1
  417. package/dist/components/co-drop-zone.js +1 -1
  418. package/dist/components/co-emoji-picker.js +1 -1
  419. package/dist/components/co-empty-state.js +1 -1
  420. package/dist/components/co-event-calendar.js +1 -1
  421. package/dist/components/co-event-popover.js +1 -1
  422. package/dist/components/co-fab.js +1 -1
  423. package/dist/components/co-file-field.js +1 -1
  424. package/dist/components/co-file-type-tile.js +1 -1
  425. package/dist/components/co-gradient-bar.d.ts +11 -0
  426. package/dist/components/co-gradient-bar.js +1 -0
  427. package/dist/components/co-helper-text.js +1 -1
  428. package/dist/components/co-icon-button.js +1 -1
  429. package/dist/components/co-icon.js +1 -1
  430. package/dist/components/co-input.js +1 -1
  431. package/dist/components/co-json-field.js +1 -1
  432. package/dist/components/co-kbd.d.ts +11 -0
  433. package/dist/components/co-kbd.js +1 -0
  434. package/dist/components/co-lightbox.js +1 -1
  435. package/dist/components/co-list-footer.js +1 -1
  436. package/dist/components/co-list-item.js +1 -1
  437. package/dist/components/co-media-thumb.js +1 -1
  438. package/dist/components/co-menu-divider.js +1 -1
  439. package/dist/components/co-menu-item.js +1 -1
  440. package/dist/components/co-menu.js +1 -1
  441. package/dist/components/co-modal.js +1 -1
  442. package/dist/components/co-navbar.js +1 -1
  443. package/dist/components/co-number-field.js +1 -1
  444. package/dist/components/co-option-list.js +1 -1
  445. package/dist/components/co-overlay.js +1 -1
  446. package/dist/components/co-page-header.js +1 -1
  447. package/dist/components/co-phone-field.js +1 -1
  448. package/dist/components/co-popover.js +1 -1
  449. package/dist/components/co-progress-bar.js +1 -1
  450. package/dist/components/co-progress-circle.js +1 -1
  451. package/dist/components/co-radio-group.js +1 -1
  452. package/dist/components/co-radio.js +1 -1
  453. package/dist/components/co-rating.js +1 -1
  454. package/dist/components/co-ref-field.js +1 -1
  455. package/dist/components/co-rich-text-editor.js +1 -1
  456. package/dist/components/co-rich-text-toolbar.js +1 -1
  457. package/dist/components/co-rich-text-viewer.js +1 -1
  458. package/dist/components/co-row.js +1 -1
  459. package/dist/components/co-segmented-bar.js +1 -1
  460. package/dist/components/co-select.js +1 -1
  461. package/dist/components/co-separator.js +1 -1
  462. package/dist/components/co-sidebar-nav.js +1 -1
  463. package/dist/components/co-sidebar.js +1 -1
  464. package/dist/components/co-skeleton.js +1 -1
  465. package/dist/components/co-slider.js +1 -1
  466. package/dist/components/co-swatch-grid.d.ts +11 -0
  467. package/dist/components/co-swatch-grid.js +1 -0
  468. package/dist/components/co-switch.js +1 -1
  469. package/dist/components/co-tab-group.js +1 -1
  470. package/dist/components/co-tab.js +1 -1
  471. package/dist/components/co-tags-field.js +1 -1
  472. package/dist/components/co-textarea.js +1 -1
  473. package/dist/components/co-tile.d.ts +11 -0
  474. package/dist/components/co-tile.js +1 -0
  475. package/dist/components/co-time-field.js +1 -1
  476. package/dist/components/co-toast.js +1 -1
  477. package/dist/components/co-toggle-button-group.js +1 -1
  478. package/dist/components/co-toggle-button.js +1 -1
  479. package/dist/components/co-tooltip.js +1 -1
  480. package/dist/components/co-transfer-list.js +1 -1
  481. package/dist/components/co-tree-item.d.ts +11 -0
  482. package/dist/components/co-tree-item.js +1 -0
  483. package/dist/components/co-video.js +1 -1
  484. package/dist/components/index.js +1 -1
  485. package/dist/components/p-B1JT7us1.js +1 -0
  486. package/dist/components/{p-Nt4JJxbL.js → p-B20o5exO.js} +1 -1
  487. package/dist/components/{p-DNJAIVfI.js → p-B3kKOgsA.js} +1 -1
  488. package/dist/components/{p-P4HlMBlL.js → p-BIDSDP05.js} +1 -1
  489. package/dist/components/p-BOqtnWTJ.js +1 -0
  490. package/dist/components/p-BQltjDw5.js +1 -0
  491. package/dist/components/p-BR0LYW9v.js +1 -0
  492. package/dist/components/{p-BRbgGqLw.js → p-BVGGRfNG.js} +1 -1
  493. package/dist/components/p-BZDl9aFl.js +1 -0
  494. package/dist/components/p-BcXdId8y.js +1 -0
  495. package/dist/components/p-BmdKHBZP.js +1 -0
  496. package/dist/components/{p-NNxjElcX.js → p-BraiMwgs.js} +1 -1
  497. package/dist/components/p-BtliEQAT.js +1 -0
  498. package/dist/components/p-Bymi-A7C.js +1 -0
  499. package/dist/components/p-C-f8wTqe.js +1 -0
  500. package/dist/components/{p-BhCVadcA.js → p-C1jZYtUS.js} +1 -1
  501. package/dist/components/{p-CT2enQ6h.js → p-C3G8oPgU.js} +1 -1
  502. package/dist/components/{p-cndRd_-U.js → p-CGH3E8uK.js} +1 -1
  503. package/dist/components/p-COJdaKBU.js +1 -0
  504. package/dist/components/{p-BAYo-RBt.js → p-CRxTFT_z.js} +1 -1
  505. package/dist/components/{p-Du_CgT5E.js → p-CfJgypOl.js} +1 -1
  506. package/dist/components/{p-uxdXViMV.js → p-ChwSnCFf.js} +1 -1
  507. package/dist/components/{p-Dc_Kbari.js → p-CpGEV0iM.js} +1 -1
  508. package/dist/components/{p-DvR45CLa.js → p-D9or2g4j.js} +1 -1
  509. package/dist/components/{p-e5KibEs8.js → p-DJ468fPu.js} +1 -1
  510. package/dist/components/{p-DFlJMEJ-.js → p-DKXCr-hE.js} +1 -1
  511. package/dist/components/p-DU-KOQ8L.js +1 -0
  512. package/dist/components/p-DXLeDZvr.js +1 -0
  513. package/dist/components/{p-BGDqldEg.js → p-DfcPGitr.js} +1 -1
  514. package/dist/components/p-Dg-Ti_Bf.js +1 -0
  515. package/dist/components/p-Dh_eRYKu.js +1 -0
  516. package/dist/components/p-Dp650Gpp.js +1 -0
  517. package/dist/components/p-FA1kBmZ-.js +1 -0
  518. package/dist/components/p-RVQJEYxa.js +1 -0
  519. package/dist/components/p-d4rf3H8p.js +1 -0
  520. package/dist/components/{p-Dxa7c4Ap.js → p-dnaee7fS.js} +1 -1
  521. package/dist/components/p-f2xwcrXa.js +1 -0
  522. package/dist/esm/co-accordion.entry.js +3 -3
  523. package/dist/esm/co-action-bar.entry.js +3 -3
  524. package/dist/esm/co-app-shell.entry.js +3 -3
  525. package/dist/esm/co-audio-player.entry.js +4 -4
  526. package/dist/esm/co-autocomplete.entry.js +2 -2
  527. package/dist/esm/co-avatar-group.entry.js +1 -1
  528. package/dist/esm/co-avatar.entry.js +7 -4
  529. package/dist/esm/co-badge.entry.js +2 -2
  530. package/dist/esm/co-bottom-sheet.entry.js +5 -5
  531. package/dist/esm/co-breadcrumb-item.entry.js +3 -3
  532. package/dist/esm/co-breadcrumb.entry.js +2 -2
  533. package/dist/esm/co-button-group.entry.js +3 -3
  534. package/dist/esm/co-button.entry.js +9 -7
  535. package/dist/esm/co-calendar-month_2.entry.js +4 -4
  536. package/dist/esm/co-calendar_3.entry.js +72 -27
  537. package/dist/esm/co-card.entry.js +3 -3
  538. package/dist/esm/co-carousel-item.entry.js +2 -2
  539. package/dist/esm/co-carousel.entry.js +3 -3
  540. package/dist/esm/co-checkbox-group.entry.js +1 -1
  541. package/dist/esm/co-checkbox.entry.js +13 -5
  542. package/dist/esm/co-chip_2.entry.js +28 -6
  543. package/dist/esm/co-color-area.entry.js +167 -0
  544. package/dist/esm/co-color-picker.entry.js +5 -5
  545. package/dist/esm/co-color-slider.entry.js +187 -0
  546. package/dist/esm/co-column-picker.entry.js +3 -3
  547. package/dist/esm/co-combobox.entry.js +5 -5
  548. package/dist/esm/co-command-search.entry.js +5 -5
  549. package/dist/esm/co-data-table-pagination.entry.js +5 -5
  550. package/dist/esm/co-data-table.entry.js +3 -3
  551. package/dist/esm/co-date-picker.entry.js +2 -2
  552. package/dist/esm/co-date-range-picker.entry.js +2 -2
  553. package/dist/esm/co-date-range.entry.js +2 -2
  554. package/dist/esm/co-date-time-picker.entry.js +4 -4
  555. package/dist/esm/co-document-editor.entry.js +1159 -0
  556. package/dist/esm/co-drive-card.entry.js +2 -2
  557. package/dist/esm/co-drop-zone.entry.js +2 -2
  558. package/dist/esm/co-emoji-picker.entry.js +3 -3
  559. package/dist/esm/co-empty-state.entry.js +3 -3
  560. package/dist/esm/co-event-calendar.entry.js +3 -3
  561. package/dist/esm/co-event-popover.entry.js +3 -3
  562. package/dist/esm/co-fab.entry.js +3 -3
  563. package/dist/esm/co-file-field.entry.js +8 -8
  564. package/dist/esm/co-file-type-tile.entry.js +3 -3
  565. package/dist/esm/co-gradient-bar.entry.js +218 -0
  566. package/dist/esm/co-helper-text.entry.js +3 -3
  567. package/dist/esm/co-icon-button.entry.js +49 -9
  568. package/dist/esm/co-icon.entry.js +3 -3
  569. package/dist/esm/co-input.entry.js +14 -8
  570. package/dist/esm/co-json-field.entry.js +5 -5
  571. package/dist/esm/{co-tooltip.entry.js → co-kbd_2.entry.js} +194 -7
  572. package/dist/esm/co-lightbox.entry.js +5 -5
  573. package/dist/esm/co-list-footer.entry.js +2 -2
  574. package/dist/esm/co-list-item.entry.js +5 -5
  575. package/dist/esm/co-loader.entry.js +1 -1
  576. package/dist/esm/co-media-thumb.entry.js +3 -3
  577. package/dist/esm/co-menu-divider.entry.js +3 -3
  578. package/dist/esm/co-menu-item.entry.js +39 -41
  579. package/dist/esm/co-menu.entry.js +81 -5
  580. package/dist/esm/co-modal.entry.js +350 -7
  581. package/dist/esm/co-navbar.entry.js +3 -3
  582. package/dist/esm/co-number-field.entry.js +5 -5
  583. package/dist/esm/co-overlay.entry.js +8 -4
  584. package/dist/esm/co-page-header.entry.js +2 -2
  585. package/dist/esm/co-phone-field.entry.js +3 -3
  586. package/dist/esm/co-popover.entry.js +81 -6
  587. package/dist/esm/co-progress-bar.entry.js +3 -3
  588. package/dist/esm/co-progress-circle.entry.js +3 -3
  589. package/dist/esm/co-provider-logo_2.entry.js +2 -2
  590. package/dist/esm/co-radio-group.entry.js +4 -4
  591. package/dist/esm/co-radio.entry.js +4 -4
  592. package/dist/esm/co-rating.entry.js +4 -4
  593. package/dist/esm/co-ref-field.entry.js +5 -5
  594. package/dist/esm/co-rich-text-editor.entry.js +26 -92
  595. package/dist/esm/co-rich-text-toolbar.entry.js +79 -20
  596. package/dist/esm/co-rich-text-viewer.entry.js +9 -2
  597. package/dist/esm/co-row.entry.js +3 -3
  598. package/dist/esm/co-segmented-bar.entry.js +3 -3
  599. package/dist/esm/co-select.entry.js +158 -29
  600. package/dist/esm/co-separator.entry.js +2 -2
  601. package/dist/esm/co-sidebar-nav.entry.js +20 -5
  602. package/dist/esm/co-sidebar.entry.js +3 -3
  603. package/dist/esm/co-slider.entry.js +203 -23
  604. package/dist/esm/co-swatch-grid.entry.js +119 -0
  605. package/dist/esm/co-switch.entry.js +5 -5
  606. package/dist/esm/co-tab-group.entry.js +113 -4
  607. package/dist/esm/co-tab.entry.js +15 -5
  608. package/dist/esm/co-tags-field.entry.js +8 -8
  609. package/dist/esm/co-textarea.entry.js +6 -6
  610. package/dist/esm/co-tile.entry.js +59 -0
  611. package/dist/esm/co-time-field.entry.js +2 -2
  612. package/dist/esm/co-toast.entry.js +3 -3
  613. package/dist/esm/co-toggle-button-group.entry.js +26 -5
  614. package/dist/esm/co-toggle-button.entry.js +67 -6
  615. package/dist/esm/co-transfer-list.entry.js +3 -3
  616. package/dist/esm/co-tree-item.entry.js +108 -0
  617. package/dist/esm/co-video.entry.js +3 -3
  618. package/dist/esm/cobalt.js +3 -3
  619. package/dist/esm/{color-BRbgGqLw.js → color-BVGGRfNG.js} +10 -6
  620. package/dist/esm/{fieldChip-uyggU8VV.js → fieldChip-B2ctp2m6.js} +1 -1
  621. package/dist/esm/gradientStops-DDK0y8ra.js +145 -0
  622. package/dist/esm/hsv-COJdaKBU.js +90 -0
  623. package/dist/esm/index-Cpo8HTwr.js +142 -0
  624. package/dist/esm/{index-DH5lfRNj.js → index-DJkaRtbb.js} +67 -28
  625. package/dist/esm/loader.js +3 -3
  626. package/dist/esm/{index-BBIYyvq-.js → pagination-D9OfZUnY.js} +1728 -297
  627. package/dist/esm/{positioning-DFHRS9cJ.js → positioning-BtliEQAT.js} +45 -19
  628. package/dist/esm/{requiredMark-BCJUuZvC.js → requiredMark-D5C5NzOE.js} +1 -1
  629. package/dist/esm/rich-text-host-BmdKHBZP.js +111 -0
  630. package/dist/esm/{richTextI18n-BYKAgwq3.js → richTextI18n-xnrKkNWQ.js} +45 -0
  631. package/dist/esm/submenu-DU-KOQ8L.js +57 -0
  632. package/dist/esm/{toolbar-config-BAYo-RBt.js → toolbar-config-CRxTFT_z.js} +32 -0
  633. package/dist/types/components/co-avatar/co-avatar.d.ts +4 -2
  634. package/dist/types/components/co-button/co-button.d.ts +6 -4
  635. package/dist/types/components/co-calendar/calendarMarks.d.ts +15 -0
  636. package/dist/types/components/co-calendar/co-calendar.d.ts +16 -0
  637. package/dist/types/components/co-checkbox/co-checkbox.d.ts +7 -0
  638. package/dist/types/components/co-color-area/co-color-area.d.ts +64 -0
  639. package/dist/types/components/co-color-slider/co-color-slider.d.ts +61 -0
  640. package/dist/types/components/co-date-time-picker/co-date-time-picker.d.ts +1 -1
  641. package/dist/types/components/co-document-editor/change-throttle.d.ts +9 -0
  642. package/dist/types/components/co-document-editor/co-document-editor.d.ts +276 -0
  643. package/dist/types/components/co-document-editor/document-props.d.ts +6 -0
  644. package/dist/types/components/co-document-editor/header-tools.d.ts +11 -0
  645. package/dist/types/components/co-document-editor/image-bar.d.ts +50 -0
  646. package/dist/types/components/co-document-editor/page-styles.d.ts +1 -0
  647. package/dist/types/components/co-document-editor/zoom.d.ts +26 -0
  648. package/dist/types/components/co-gradient-bar/co-gradient-bar.d.ts +72 -0
  649. package/dist/types/components/co-icon-button/co-icon-button.d.ts +34 -2
  650. package/dist/types/components/co-input/co-input.d.ts +14 -5
  651. package/dist/types/components/co-kbd/co-kbd.d.ts +43 -0
  652. package/dist/types/components/co-menu/co-menu.d.ts +40 -1
  653. package/dist/types/components/co-menu-item/co-menu-item.d.ts +17 -0
  654. package/dist/types/components/co-modal/co-modal.d.ts +111 -2
  655. package/dist/types/components/co-option-list/co-option-list.d.ts +8 -0
  656. package/dist/types/components/co-option-list/optionListLogic.d.ts +3 -0
  657. package/dist/types/components/co-popover/co-popover.d.ts +38 -0
  658. package/dist/types/components/co-rich-text-editor/co-rich-text-editor.d.ts +2 -5
  659. package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +17 -2
  660. package/dist/types/components/co-select/co-select.d.ts +47 -5
  661. package/dist/types/components/co-select/virtualRows.d.ts +44 -0
  662. package/dist/types/components/co-slider/co-slider.d.ts +143 -1
  663. package/dist/types/components/co-swatch-grid/co-swatch-grid.d.ts +37 -0
  664. package/dist/types/components/co-tab/co-tab.d.ts +12 -2
  665. package/dist/types/components/co-tab-group/co-tab-group.d.ts +37 -0
  666. package/dist/types/components/co-tab-group/revealTab.d.ts +29 -0
  667. package/dist/types/components/co-tile/co-tile.d.ts +40 -0
  668. package/dist/types/components/co-toggle-button/co-toggle-button.d.ts +37 -2
  669. package/dist/types/components/co-toggle-button-group/co-toggle-button-group.d.ts +20 -2
  670. package/dist/types/components/co-tooltip/co-tooltip.d.ts +12 -0
  671. package/dist/types/components/co-tree-item/co-tree-item.d.ts +73 -0
  672. package/dist/types/components/co-tree-item/treeItemI18n.d.ts +6 -0
  673. package/dist/types/components.d.ts +1748 -91
  674. package/dist/types/utils/color.d.ts +9 -1
  675. package/dist/types/utils/dragMove.d.ts +63 -0
  676. package/dist/types/utils/gradientBarI18n.d.ts +8 -0
  677. package/dist/types/utils/gradientStops.d.ts +63 -0
  678. package/dist/types/utils/hsv.d.ts +44 -0
  679. package/dist/types/utils/kbdI18n.d.ts +25 -0
  680. package/dist/types/utils/positioning.d.ts +24 -0
  681. package/dist/types/utils/rich-text-host.d.ts +41 -0
  682. package/dist/types/utils/richTextI18n.d.ts +15 -0
  683. package/dist/types/utils/submenu.d.ts +16 -2
  684. package/dist/types/utils/swatchGridI18n.d.ts +6 -0
  685. package/dist/types/utils/test/fake-block-layout.d.ts +7 -0
  686. package/dist/types/utils/test/prosemirror-dom-shim.d.ts +1 -0
  687. package/dist/types/utils/test/shared-contract-css.d.ts +9 -0
  688. package/package.json +5 -5
  689. package/dist/cobalt/p-0678c797.entry.js +0 -1
  690. package/dist/cobalt/p-216a63ee.entry.js +0 -1
  691. package/dist/cobalt/p-39dc4ec8.entry.js +0 -1
  692. package/dist/cobalt/p-3d31c575.entry.js +0 -1
  693. package/dist/cobalt/p-410bee4d.entry.js +0 -1
  694. package/dist/cobalt/p-416795f5.entry.js +0 -1
  695. package/dist/cobalt/p-56551580.entry.js +0 -1
  696. package/dist/cobalt/p-58137c9e.entry.js +0 -1
  697. package/dist/cobalt/p-5a3e4c81.entry.js +0 -1
  698. package/dist/cobalt/p-5c756787.entry.js +0 -1
  699. package/dist/cobalt/p-67f3b9d6.entry.js +0 -1
  700. package/dist/cobalt/p-6a4f3179.entry.js +0 -1
  701. package/dist/cobalt/p-71cbc53c.entry.js +0 -1
  702. package/dist/cobalt/p-72e52af7.entry.js +0 -1
  703. package/dist/cobalt/p-8530ad16.entry.js +0 -1
  704. package/dist/cobalt/p-8a74bf7d.entry.js +0 -1
  705. package/dist/cobalt/p-8e05b979.entry.js +0 -1
  706. package/dist/cobalt/p-8ebc0c12.entry.js +0 -1
  707. package/dist/cobalt/p-8f2199ff.entry.js +0 -1
  708. package/dist/cobalt/p-9246e09c.entry.js +0 -1
  709. package/dist/cobalt/p-99a655f6.entry.js +0 -1
  710. package/dist/cobalt/p-BYKAgwq3.js +0 -1
  711. package/dist/cobalt/p-CJW9H3Gi.js +0 -1
  712. package/dist/cobalt/p-DFHRS9cJ.js +0 -1
  713. package/dist/cobalt/p-DH5lfRNj.js +0 -2
  714. package/dist/cobalt/p-a1b422ca.entry.js +0 -1
  715. package/dist/cobalt/p-ade07307.entry.js +0 -1
  716. package/dist/cobalt/p-b698188c.entry.js +0 -1
  717. package/dist/cobalt/p-bde32f8b.entry.js +0 -1
  718. package/dist/cobalt/p-db805569.entry.js +0 -1
  719. package/dist/cobalt/p-e3aae282.entry.js +0 -1
  720. package/dist/cobalt/p-e49a564c.entry.js +0 -1
  721. package/dist/cobalt/p-ef301976.entry.js +0 -1
  722. package/dist/cobalt/p-f4e1c3c3.entry.js +0 -1
  723. package/dist/cobalt/p-fMqVDypp.js +0 -1
  724. package/dist/components/p-2EOI1nrz.js +0 -1
  725. package/dist/components/p-7TncUlLN.js +0 -1
  726. package/dist/components/p-B4NCaKrR.js +0 -1
  727. package/dist/components/p-BJh68Jqe.js +0 -1
  728. package/dist/components/p-BrAFTkAn.js +0 -1
  729. package/dist/components/p-Bsh0JMGf.js +0 -1
  730. package/dist/components/p-CJW9H3Gi.js +0 -1
  731. package/dist/components/p-CWCYYQrF.js +0 -1
  732. package/dist/components/p-D7Lhxz7L.js +0 -1
  733. package/dist/components/p-DFHRS9cJ.js +0 -1
  734. package/dist/components/p-DRP8D9ro.js +0 -1
  735. package/dist/components/p-DTPYZwaZ.js +0 -1
  736. package/dist/components/p-Dcg4krSX.js +0 -1
@@ -0,0 +1,1159 @@
1
+ import { r as registerInstance, c as createEvent, f as forceUpdate, h, H as Host, a as getElement } from './index-DJkaRtbb.js';
2
+ import { g as getRichTextStrings } from './richTextI18n-xnrKkNWQ.js';
3
+ import { b as parseFeatures, s as syncToolbarEditor } from './rich-text-host-BmdKHBZP.js';
4
+ import { B as getImageLayoutMode, F as FIELD_SYNC_META, E as headerImageWidth, w as writePrintHtml, r as readPrintHtml, Q as resolvePageSize, s as sanitize, q as Pagination, x as collectFields, z as createEditor, W as setFieldValuesInHtml, I as IMAGE_LAYOUT_MODES, P as PAGE_GAP_PX, G as layoutBox } from './pagination-D9OfZUnY.js';
5
+ import './purify.es-B2QLgWrz.js';
6
+
7
+ /** Ventana de `coChange`: avisa como mucho cada 250 ms (nunca por tecla). */
8
+ const DOC_CHANGE_THROTTLE_MS = 250;
9
+ function createThrottle(ms, fn) {
10
+ let timer = null;
11
+ return {
12
+ run() {
13
+ if (timer)
14
+ return;
15
+ timer = setTimeout(() => {
16
+ timer = null;
17
+ fn();
18
+ }, ms);
19
+ },
20
+ flush() {
21
+ if (!timer)
22
+ return;
23
+ clearTimeout(timer);
24
+ timer = null;
25
+ fn();
26
+ },
27
+ cancel() {
28
+ if (timer)
29
+ clearTimeout(timer);
30
+ timer = null;
31
+ },
32
+ get pending() {
33
+ return timer !== null;
34
+ },
35
+ };
36
+ }
37
+
38
+ const DEFAULT_MARGINS = { top: 38, right: 38, bottom: 38, left: 38 };
39
+ const NAMED = new Set(['letter', 'a4', 'legal']);
40
+ /** `true` o `'true'`. Un `'false'` que dejó el multipart de V1 cuenta como falso (spec §3.6). */
41
+ function toBoolIntent(v) {
42
+ return v === true || v === 'true';
43
+ }
44
+ function parsePageSize(v) {
45
+ if (typeof v === 'string') {
46
+ if (NAMED.has(v))
47
+ return v;
48
+ try {
49
+ return parsePageSize(JSON.parse(v));
50
+ }
51
+ catch (_a) {
52
+ return 'letter';
53
+ }
54
+ }
55
+ if (v && typeof v === 'object') {
56
+ const { width, height } = v;
57
+ if (Number(width) > 0 && Number(height) > 0)
58
+ return { width: Number(width), height: Number(height) };
59
+ }
60
+ return 'letter';
61
+ }
62
+ function parseMargins(v) {
63
+ let raw = v;
64
+ if (typeof v === 'string') {
65
+ try {
66
+ raw = JSON.parse(v);
67
+ }
68
+ catch (_a) {
69
+ return Object.assign({}, DEFAULT_MARGINS);
70
+ }
71
+ }
72
+ if (!raw || typeof raw !== 'object')
73
+ return Object.assign({}, DEFAULT_MARGINS);
74
+ const m = raw;
75
+ const pick = (k) => (Number.isFinite(Number(m[k])) && m[k] !== undefined ? Number(m[k]) : DEFAULT_MARGINS[k]);
76
+ return { top: pick('top'), right: pick('right'), bottom: pick('bottom'), left: pick('left') };
77
+ }
78
+
79
+ /**
80
+ * Acota el CSS de impresión del host (SharedContractUtils: editorCss + defaultCss)
81
+ * a UNA hoja: cada selector queda bajo `:where(scope)`; `*`, `html`, `body` y `:root`
82
+ * pasan a ser la hoja (el `*` global de defaultCss no puede escapar a la página).
83
+ * Se entra en @media/@supports, se conserva @keyframes y se descartan las
84
+ * reglas que no aplican a pantalla o traerían red (@page, @font-face, @import).
85
+ */
86
+ const DROP_STATEMENTS = /@(import|charset|namespace)[^;]*;/gi;
87
+ function scopePageStyles(css, scope) {
88
+ if (!css)
89
+ return '';
90
+ const src = css.replace(/\/\*[\s\S]*?\*\//g, '').replace(DROP_STATEMENTS, '');
91
+ return scopeBlock(src, scope).trim();
92
+ }
93
+ function matchingBrace(src, open) {
94
+ let depth = 0;
95
+ let quote = null;
96
+ for (let i = open; i < src.length; i += 1) {
97
+ const c = src[i];
98
+ if (quote) {
99
+ if (c === quote && src[i - 1] !== '\\')
100
+ quote = null;
101
+ continue;
102
+ }
103
+ if (c === '"' || c === "'")
104
+ quote = c;
105
+ else if (c === '{')
106
+ depth += 1;
107
+ else if (c === '}') {
108
+ depth -= 1;
109
+ if (depth === 0)
110
+ return i;
111
+ }
112
+ }
113
+ return -1;
114
+ }
115
+ /**
116
+ * El scope va dentro de `:where()`: especificidad 0. Cada regla del host conserva la
117
+ * especificidad que tenía en el PDF, y la geometría propia de la hoja (clases del
118
+ * componente, ≥ (0,1,0)) le gana a sus resets (`* { padding: 0 }`, `.tiptap table td`…).
119
+ *
120
+ * Excepción del `*`: en el PDF es CSS de autor y le gana a la UA de `pre`/`code`
121
+ * (`font-family: monospace`). En la app, el normalize global (Quasar: `code, kbd, pre, samp
122
+ * { font-family: monospace }`, (0,0,1)) es de autor y le ganaba al `:where(scope) *` (0,0,0):
123
+ * un bloque de código medía distinto en la hoja que en el PDF. `:where(scope) :is(pre, code)`
124
+ * sube el reset a (0,0,1): empata con el normalize y gana por orden (el `<style>` de la hoja
125
+ * vive dentro del documento, después de las hojas globales del `<head>`), y sigue perdiendo
126
+ * contra cualquier regla del host más específica o posterior (`.tiptap pre`, `pre {…}`), como en
127
+ * el PDF. `inherit` desde la hoja no sirve: un `pre` hijo directo de `.ProseMirror` heredaría la
128
+ * fuente del contenedor (Geist) y no la del `*` (Roboto) que ve el PDF.
129
+ */
130
+ function scopeSelector(sel, scope) {
131
+ const s = sel.trim();
132
+ if (!s)
133
+ return '';
134
+ const root = `:where(${scope})`;
135
+ if (s === '*')
136
+ return `${root}, ${root} *, ${root} :is(pre, code)`;
137
+ const rest = s.replace(/^(?:(?:html|body|:root)(?=$|[\s>+~.#:[])\s*)+/i, '').trim();
138
+ return rest ? `${root} ${rest}` : root;
139
+ }
140
+ function scopeBlock(src, scope) {
141
+ let out = '';
142
+ let i = 0;
143
+ while (i < src.length) {
144
+ const open = src.indexOf('{', i);
145
+ if (open === -1)
146
+ break;
147
+ const close = matchingBrace(src, open);
148
+ if (close === -1)
149
+ break;
150
+ const prelude = src.slice(i, open).trim();
151
+ const body = src.slice(open + 1, close);
152
+ i = close + 1;
153
+ if (!prelude)
154
+ continue;
155
+ if (prelude.startsWith('@')) {
156
+ const at = prelude.slice(1).split(/[\s(]/)[0].toLowerCase();
157
+ if (at === 'media' || at === 'supports')
158
+ out += `${prelude}{${scopeBlock(body, scope)}}`;
159
+ else if (at.endsWith('keyframes'))
160
+ out += `${prelude}{${body}}`;
161
+ continue; // @page, @font-face y cualquier otra at-rule: fuera
162
+ }
163
+ const selectors = prelude.split(',').map((x) => scopeSelector(x, scope)).filter(Boolean);
164
+ if (selectors.length)
165
+ out += `${selectors.join(', ')}{${body}}`;
166
+ }
167
+ return out;
168
+ }
169
+
170
+ /** Aire lateral que se descuenta del lienzo al ajustar al ancho (2 × --co-spacing-lg). */
171
+ const ZOOM_GUTTER_PX = 32;
172
+ /** Escala para que la hoja entre en el ancho disponible: nunca agranda, nunca baja de 25 %. */
173
+ function fitScale(available, pageWidth) {
174
+ if (!(available > 0) || !(pageWidth > 0))
175
+ return 1;
176
+ const s = Math.min(1, Math.max(0.25, available / pageWidth));
177
+ return Math.round(s * 1000) / 1000;
178
+ }
179
+ /** Tope del zoom libre (pinza / ctrl+rueda). El piso es el mismo de «Ajustar al ancho». */
180
+ const ZOOM_MIN = 0.25;
181
+ const ZOOM_MAX = 3;
182
+ /** Acota la escala a [ZOOM_MIN, ZOOM_MAX] y la redondea a milésimas (NaN → 1). */
183
+ function clampScale(scale) {
184
+ if (!Number.isFinite(scale))
185
+ return 1;
186
+ return Math.round(Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, scale)) * 1000) / 1000;
187
+ }
188
+ /**
189
+ * Nueva escala para un evento `wheel` con ctrlKey (la pinza del trackpad llega así en Chrome,
190
+ * Edge y Firefox; también ctrl+rueda del mouse). Exponencial: acercar y alejar el mismo delta
191
+ * vuelve al punto de partida, y la velocidad se siente igual a cualquier escala.
192
+ */
193
+ function pinchScale(current, deltaY) {
194
+ if (!Number.isFinite(deltaY))
195
+ return current;
196
+ return clampScale(current * Math.exp(-deltaY * 0.01));
197
+ }
198
+ /**
199
+ * Punto del papel (px de layout, sin escala) bajo el cursor: `stageStart` es el borde de la hoja
200
+ * escalada en pantalla (getBoundingClientRect), `scale` la escala que el DOM refleja HOY.
201
+ */
202
+ function paperPoint(client, stageStart, scale) {
203
+ if (!(scale > 0))
204
+ return 0;
205
+ return (client - stageStart) / scale;
206
+ }
207
+ /**
208
+ * Cuánto hay que correr el scroll para que el punto `paper` vuelva a quedar bajo el cursor,
209
+ * medido DESPUÉS del render con la escala nueva (la hoja está centrada y el lienzo tiene
210
+ * relleno fijo: predecir la posición falla, medirla no).
211
+ */
212
+ function anchorCorrection(stageStart, paper, scale, client) {
213
+ return stageStart + paper * scale - client;
214
+ }
215
+
216
+ /**
217
+ * Herramientas de la banda del encabezado en edición (interruptor de número de
218
+ * página + ✓). La fila cuelga ENCIMA de la banda, dentro del margen superior de la
219
+ * hoja, y el papel tiene `overflow: clip`: tiene que entrar en el margen mínimo
220
+ * (10 mm = 38 px) o se recorta. `co-icon-button size="sm"` mide 48 px: el tamaño va
221
+ * por `box-size`. Fila = max(✓, switch de 24) + padding + borde (ver la prueba).
222
+ */
223
+ const HEADER_TOOL_BOX_PX = 28;
224
+ const HEADER_TOOL_ICON_PX = 16;
225
+
226
+ /**
227
+ * Barra de diseño de imagen (4 modos de V1). Vive DENTRO del papel, que tiene
228
+ * `overflow: clip`: su posición se decide acá para que nunca quede recortada.
229
+ * Las medidas son las del CSS (`.co-doc-editor__image-bar` / `__image-mode`,
230
+ * ver la prueba): se calculan sin medir el DOM porque la barra todavía no existe
231
+ * cuando se decide dónde va.
232
+ */
233
+ const IMAGE_MODE_ICONS = {
234
+ inline: 'image-square',
235
+ 'wrap-left': 'text-align-left',
236
+ 'wrap-right': 'text-align-right',
237
+ break: 'rows',
238
+ };
239
+ const IMAGE_MODE_ICON_PX = 16;
240
+ /** 4 botones × 28 + 3 separaciones de 2 + relleno 2 × 2 + borde 1 × 2. */
241
+ const IMAGE_BAR_SIZE = { width: 124, height: 34 };
242
+ /** Aire entre la imagen y la barra. */
243
+ const IMAGE_BAR_GAP_PX = 4;
244
+ /**
245
+ * Debajo de la imagen (por defecto: una imagen pegada al margen superior no la
246
+ * saca por arriba); si no entra debajo (final del papel), encima; si tampoco,
247
+ * dentro de la imagen, sobre su borde inferior. En horizontal se acota al papel.
248
+ * Un papel sin medidas (0) no acota.
249
+ */
250
+ function imageBarPosition(img, sheet, bar = IMAGE_BAR_SIZE, gap = IMAGE_BAR_GAP_PX) {
251
+ const below = img.top + img.height + gap;
252
+ const above = img.top - gap - bar.height;
253
+ let top = below;
254
+ let placement = 'below';
255
+ if (sheet.height > 0 && below + bar.height > sheet.height) {
256
+ if (above >= 0) {
257
+ top = above;
258
+ placement = 'above';
259
+ }
260
+ else {
261
+ top = Math.max(0, Math.min(img.top + img.height - gap - bar.height, sheet.height - bar.height));
262
+ placement = 'inside';
263
+ }
264
+ }
265
+ let left = img.left;
266
+ if (sheet.width > 0)
267
+ left = Math.max(0, Math.min(left, sheet.width - bar.width));
268
+ return { top, left, placement };
269
+ }
270
+ /** `offsetLeft` acumulado hasta `root` (par de `layoutBox`, que da el top). */
271
+ function layoutLeft(el, root) {
272
+ let left = 0;
273
+ let node = el;
274
+ while (node && node !== root) {
275
+ left += node.offsetLeft;
276
+ node = node.offsetParent;
277
+ }
278
+ return left;
279
+ }
280
+ /**
281
+ * Ancho con el que nace una imagen insertada (nota T8 / plan B §6.4): sin `width`,
282
+ * V1 la abre a 800 px, más que la columna (≈740 en carta). Nunca pasa de la columna.
283
+ */
284
+ function defaultImageWidth(naturalWidth, columnWidth) {
285
+ const natural = naturalWidth > 0 ? naturalWidth : 0;
286
+ const column = columnWidth > 0 ? columnWidth : 0;
287
+ const w = natural && column ? Math.min(natural, column) : natural || column;
288
+ return w ? Math.max(1, Math.round(w)) : null;
289
+ }
290
+
291
+ const coDocumentEditorCss = () => `co-document-editor{display:block;height:100%;min-height:0}.co-doc-editor{--co-doc-canvas:var(--co-semantic-surface-muted);--co-doc-sheet-shadow:0 1px 3px var(--co-color-opacity-negro-16), 0 0 0 1px var(--co-color-opacity-negro-8);display:flex;flex-direction:column;height:100%;min-height:0;background:var(--co-doc-canvas);color:var(--co-semantic-text-default);font-family:var(--co-font-family-primary)}.co-doc-editor__bar{display:flex;align-items:center;gap:var(--co-spacing-sm2);min-width:0;padding-inline:var(--co-spacing-md);background:var(--co-semantic-surface-page);border-bottom:1px solid var(--co-semantic-border-subtle)}.co-doc-editor__toolbar{flex:1 1 auto;min-width:0}.co-doc-editor__body{flex:1 1 auto;display:flex;min-height:0}.co-doc-editor__body>[slot='aside']{flex:0 0 var(--co-doc-aside-width, 320px);width:var(--co-doc-aside-width, 320px);min-width:0;min-height:0;box-sizing:border-box;border-left:1px solid var(--co-semantic-border-subtle)}.co-doc-editor__canvas{flex:1 1 auto;min-width:0;overflow:auto;box-sizing:border-box;padding:var(--co-spacing-2xl) var(--co-spacing-lg)}.co-doc-editor__content .ProseMirror{position:relative;outline:none}.co-doc-editor--loading .co-doc-editor__content{visibility:hidden}.co-doc-field{--co-doc-field-bg:var(--co-color-primary-amarillo);background:var(--co-doc-field-bg);box-shadow:0 0 0 2px var(--co-doc-field-bg);border-radius:var(--co-border-radius-xxs);color:var(--co-color-base-negro);cursor:pointer}.co-doc-field--empty{--co-doc-field-bg:color-mix(in srgb, var(--co-color-primary-amarillo) 55%, var(--co-color-base-blanco))}.co-doc-field--required.co-doc-field--empty{box-shadow:0 0 0 2px var(--co-doc-field-bg), inset 0 -2px 0 var(--co-color-status-error)}.co-doc-field__input{width:14ch;border:0;outline:1px solid var(--co-semantic-border-focus);background:var(--co-color-base-blanco);font:inherit}.co-doc-signature{display:inline-flex;align-items:center;justify-content:center;vertical-align:top;box-sizing:border-box;outline:1px dashed var(--co-color-primary-azul);outline-offset:-1px;background:color-mix(in srgb, var(--co-color-primary-azul) 6%, transparent);color:var(--co-color-primary-azul);font-size:var(--co-font-size-12);user-select:none}.co-doc-hb{background:color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent);border-radius:var(--co-border-radius-xxs)}.co-doc-editor__zoom{display:inline-flex;flex-shrink:0;align-items:center;gap:var(--co-spacing-xxs);margin-inline-start:auto}.co-doc-editor__zoom-level{min-width:5ch;padding-inline:var(--co-spacing-xs);font-size:var(--co-font-size-13);font-variant-numeric:tabular-nums;text-align:end;color:var(--co-semantic-text-secondary)}.co-doc-editor__zoom-btn{padding:var(--co-spacing-xs) var(--co-spacing-sm2);border:0;border-radius:var(--co-border-radius-xs);background:transparent;color:var(--co-semantic-text-secondary);font:inherit;font-size:var(--co-font-size-13);white-space:nowrap;cursor:pointer}.co-doc-editor__zoom-btn:hover{background:var(--co-semantic-surface-hover)}.co-doc-editor__zoom-btn--active{background:var(--co-semantic-surface-hover);color:var(--co-semantic-text-default)}.co-doc-editor__zoom-btn:focus-visible{outline:1px solid var(--co-semantic-border-focus);box-shadow:0 0 0 2px var(--co-semantic-border-focus-ring)}.co-doc-editor__zoom-frame{margin-inline:auto}.co-doc-editor__stage{width:var(--co-doc-page-w);transform-origin:top left}.co-doc-editor__sheet{--co-semantic-surface-page:var(--co-color-base-blanco);--co-semantic-surface-hover:var(--co-color-opacity-negro-8);--co-semantic-text-default:var(--co-color-base-negro);--co-semantic-text-secondary:var(--co-color-gray-600);--co-semantic-text-muted:var(--co-color-gray-500);--co-semantic-border-default:var(--co-color-opacity-negro-16);--co-semantic-border-subtle:var(--co-color-opacity-negro-8);--co-semantic-border-field:var(--co-color-opacity-negro-25);--co-semantic-border-focus:var(--co-color-opacity-negro-50);--co-semantic-border-focus-ring:var(--co-color-opacity-negro-8);position:relative;width:var(--co-doc-page-w);min-height:calc(var(--co-doc-pages, 1) * var(--co-doc-page-h) + (var(--co-doc-pages, 1) - 1) * var(--co-doc-gap));box-sizing:border-box;padding-top:calc(var(--co-doc-margin-top) + var(--co-doc-header-h, 0px));padding-right:var(--co-doc-margin-right);padding-bottom:var(--co-doc-margin-bottom);padding-left:var(--co-doc-margin-left);overflow:clip;background:var(--co-color-base-blanco);color:var(--co-color-base-negro);color-scheme:light;box-shadow:var(--co-doc-sheet-shadow)}.co-doc-editor__paper{display:contents;color:var(--co-semantic-text-default)}.co-doc-editor .co-doc-editor__sheet .co-doc-editor__content .ProseMirror.tiptap{padding:0 !important;min-height:1em}.co-doc-editor__header-band{position:absolute;top:var(--co-doc-margin-top);left:var(--co-doc-margin-left);right:var(--co-doc-margin-right);height:var(--co-doc-header-h);box-sizing:border-box}.co-doc-editor__header-band[hidden]{display:none}.co-doc-editor__header-band:hover{outline:1px dashed var(--co-color-opacity-negro-25)}.co-doc-editor__header-static{display:flex;align-items:center;justify-content:space-between;height:100%;overflow:hidden;font-size:var(--co-font-size-12);line-height:1.5;user-select:none}.co-doc-editor__header-html{flex:1 1 auto;min-width:0;max-height:100%;overflow:hidden}.co-doc-editor__page-number{flex-shrink:0;margin-inline-start:var(--co-spacing-sm2);white-space:nowrap;color:var(--co-color-gray-600)}.co-doc-page-gap,.co-doc-page-gap__foot,.co-doc-page-gap__between,.co-doc-page-gap__head{margin:0 !important;padding:0 !important;border-width:0 !important;box-sizing:border-box !important}.co-doc-editor__sheet .co-doc-page-gap{position:relative;margin-left:calc(-1 * var(--co-doc-margin-left)) !important;margin-right:calc(-1 * var(--co-doc-margin-right)) !important;user-select:none}.co-doc-page-gap__between{background:var(--co-doc-canvas);border-image:linear-gradient(var(--co-doc-canvas), var(--co-doc-canvas)) fill 0 / 0 / 0 100vmax;box-shadow:inset 0 1px 0 var(--co-color-opacity-negro-8), inset 0 4px 3px -3px var(--co-color-opacity-negro-16), inset 0 -1px 0 var(--co-color-opacity-negro-8)}:is(ul,ol)>.co-doc-page-gap{list-style:none}.co-doc-editor__sheet .co-doc-page-gap__head{padding-top:var(--co-doc-margin-top) !important;padding-left:var(--co-doc-margin-left) !important;padding-right:var(--co-doc-margin-right) !important}.co-doc-page-gap-row>td{padding:0 !important;border:0 !important;background:transparent !important}.co-doc-editor__header-band--editing,.co-doc-editor__header-band--editing:hover{outline:1px solid var(--co-semantic-border-focus);outline-offset:2px}.co-doc-editor__header-editing{display:flex;align-items:center;gap:var(--co-spacing-sm2);height:100%}.co-doc-editor__header-editor{flex:1 1 auto;min-width:0;max-height:100%;overflow:hidden;font-size:var(--co-font-size-12);line-height:1.5}.co-doc-editor__header-editor .ProseMirror{outline:none}.co-doc-editor__header-tools{position:absolute;right:0;bottom:100%;display:flex;align-items:center;gap:var(--co-spacing-xs);padding:var(--co-spacing-xxs) var(--co-spacing-xs);box-sizing:border-box;background:var(--co-semantic-surface-page);border:1px solid var(--co-semantic-border-default);border-radius:var(--co-border-radius-xs)}.co-doc-editor__image-bar{position:absolute;z-index:2;display:flex;gap:var(--co-spacing-xxs);padding:var(--co-spacing-xxs);box-sizing:border-box;background:var(--co-semantic-surface-page);border:1px solid var(--co-semantic-border-default);border-radius:var(--co-border-radius-xs);user-select:none}.co-doc-editor__image-bar co-tooltip{display:inline-flex}.co-doc-editor__image-mode{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;border-radius:var(--co-border-radius-xxs);background:transparent;color:var(--co-semantic-text-default);cursor:pointer}.co-doc-editor__image-mode:hover,.co-doc-editor__image-mode--active{background:var(--co-semantic-surface-hover)}.co-doc-editor__image-mode--active{box-shadow:inset 0 0 0 1px var(--co-semantic-border-focus)}.co-doc-editor__image-mode:focus-visible{outline:1px solid var(--co-semantic-border-focus);box-shadow:0 0 0 2px var(--co-semantic-border-focus-ring)}.co-doc-editor__image-mode--active:focus-visible{box-shadow:inset 0 0 0 1px var(--co-semantic-border-focus), 0 0 0 2px var(--co-semantic-border-focus-ring)}`;
292
+
293
+ let instanceSeq = 0;
294
+ const CoDocumentEditor = class {
295
+ constructor(hostRef) {
296
+ registerInstance(this, hostRef);
297
+ this.coChange = createEvent(this, "coChange", 3);
298
+ this.coFieldsChange = createEvent(this, "coFieldsChange", 3);
299
+ this.coHeaderChange = createEvent(this, "coHeaderChange", 3);
300
+ this.coPagesChange = createEvent(this, "coPagesChange", 3);
301
+ this.coAction = createEvent(this, "coAction", 3);
302
+ this.coReady = createEvent(this, "coReady", 3);
303
+ /** Cuerpo: HTML de impresión (tolera el que guardó V1) o JSON de ProseMirror como string. */
304
+ this.value = null;
305
+ /** HTML del encabezado (banda superior de cada hoja). Vacío = sin encabezado. */
306
+ this.headerHtml = '';
307
+ /** Número de página en la banda. Se lee como intención: `true` o `'true'`. */
308
+ this.showPageNumber = false;
309
+ /** `letter` | `a4` | `legal` o `{width, height}` en px a 96 dpi (objeto o JSON). */
310
+ this.pageSize = 'letter';
311
+ /** Alto de la banda del encabezado en px (cuando hay encabezado). */
312
+ this.headerHeight = 45;
313
+ /** CSS de impresión del host; se acota a la hoja. */
314
+ this.pageStyles = '';
315
+ this.readonly = false;
316
+ /** BCP-47 para los textos de la UI ('es', 'en', 'pt-BR'…). */
317
+ this.locale = 'en';
318
+ this.ready = false;
319
+ this.pageCount = 1;
320
+ /** `custom` = zoom libre por gesto (pinza del trackpad / ctrl+rueda); la escala queda donde la dejó el usuario. */
321
+ this.zoomMode = 'fit';
322
+ this.scale = 1;
323
+ this.stageHeight = 0;
324
+ /** La banda del encabezado está en edición (editor `print-header` montado). */
325
+ this.headerEditing = false;
326
+ /** Interruptor de número de página mientras se edita (se confirma con el encabezado). */
327
+ this.draftShowPageNumber = false;
328
+ /** Barra de diseño de la imagen seleccionada en el cuerpo (null = no hay). Posición en px del papel. */
329
+ this.imageBar = null;
330
+ /** Encabezado vigente (confirmado). La Task 16 lo cambia al confirmar la banda. */
331
+ this.currentHeaderHtml = '';
332
+ this.currentShowPageNumber = false;
333
+ /** JSON del encabezado confirmado (lista de campos sin montar un editor). */
334
+ this.headerDoc = null;
335
+ this.instanceId = String(++instanceSeq);
336
+ this.applyingExternal = false;
337
+ this.lastAppliedValue = null;
338
+ this.userDirty = false;
339
+ this.lastFieldsKey = '';
340
+ /** src de imágenes insertadas por el usuario sin `width`: al cargar reciben uno (nota T8). */
341
+ this.pendingImageSrcs = new Set();
342
+ this.changeThrottle = createThrottle(DOC_CHANGE_THROTTLE_MS, () => this.emitPendingChange());
343
+ /**
344
+ * Barra bajo la imagen seleccionada (corre en cada transacción del cuerpo). Solo
345
+ * cambia el estado si cambió algo: sin re-render por tecla ni bucles.
346
+ */
347
+ this.updateImageBar = () => {
348
+ const ed = this.editor;
349
+ const sel = ed === null || ed === void 0 ? void 0 : ed.state.selection;
350
+ const node = sel === null || sel === void 0 ? void 0 : sel.node;
351
+ if (!ed || this.readonly || !node || node.type.name !== 'image') {
352
+ if (this.imageBar)
353
+ this.imageBar = null;
354
+ return;
355
+ }
356
+ const dom = ed.view.nodeDOM(sel.from);
357
+ const sheet = this.el.querySelector('.co-doc-editor__sheet');
358
+ if (!dom || !sheet) {
359
+ if (this.imageBar)
360
+ this.imageBar = null;
361
+ return;
362
+ }
363
+ // px de layout (no los altera el zoom: la barra vive dentro del escenario escalado).
364
+ const box = layoutBox(dom, sheet);
365
+ const pos = imageBarPosition({ top: box.top, height: box.height, left: layoutLeft(dom, sheet)}, { width: sheet.offsetWidth, height: sheet.offsetHeight });
366
+ const mode = getImageLayoutMode({ wrapperStyle: node.attrs.wrapperStyle, containerStyle: node.attrs.containerStyle });
367
+ const cur = this.imageBar;
368
+ if (!cur || cur.mode !== mode || cur.top !== pos.top || cur.left !== pos.left)
369
+ this.imageBar = { mode, top: pos.top, left: pos.left };
370
+ };
371
+ /** Una imagen insertada sin ancho nace acotada a la columna (V1 la abriría a 800 px). */
372
+ this.onBodyImageLoad = (e) => {
373
+ const img = e.target;
374
+ const ed = this.editor;
375
+ if (!ed || !img || img.tagName !== 'IMG')
376
+ return;
377
+ const src = img.getAttribute('src') || '';
378
+ if (!this.pendingImageSrcs.has(src))
379
+ return;
380
+ let target = -1;
381
+ ed.state.doc.descendants((n, pos) => {
382
+ if (target >= 0)
383
+ return false;
384
+ if (n.type.name === 'image' && !n.attrs.width && n.attrs.src === src)
385
+ target = pos;
386
+ return true;
387
+ });
388
+ const node = target >= 0 ? ed.state.doc.nodeAt(target) : null;
389
+ if (!node)
390
+ return;
391
+ const m = this.marginsPx;
392
+ const width = defaultImageWidth(img.naturalWidth, this.pageSizePx.width - m.left - m.right);
393
+ if (!width)
394
+ return;
395
+ // Quedan otras del mismo src sin ancho: su propio `load` las toma.
396
+ let more = false;
397
+ ed.state.doc.descendants((n, pos) => {
398
+ if (pos !== target && n.type.name === 'image' && !n.attrs.width && n.attrs.src === src)
399
+ more = true;
400
+ return !more;
401
+ });
402
+ if (!more)
403
+ this.pendingImageSrcs.delete(src);
404
+ const wasSelected = ed.state.selection.node && ed.state.selection.from === target;
405
+ ed.view.dispatch(ed.state.tr.setNodeMarkup(target, undefined, Object.assign(Object.assign({}, node.attrs), { width })));
406
+ if (wasSelected)
407
+ ed.commands.setNodeSelection(target);
408
+ };
409
+ /** Al salir del editor (p. ej. mousedown en «Cerrar») el aviso no espera la ventana. */
410
+ this.onEditorBlur = () => {
411
+ this.changeThrottle.flush();
412
+ };
413
+ this.onHostKeydown = (e) => {
414
+ if (e.key === 'Escape')
415
+ this.changeThrottle.flush();
416
+ };
417
+ this.onTransaction = ({ transaction }) => {
418
+ if (!transaction.docChanged)
419
+ return;
420
+ const external = this.applyingExternal || !!transaction.getMeta(FIELD_SYNC_META);
421
+ if (!external) {
422
+ this.userDirty = true;
423
+ this.trackInsertedImages(transaction);
424
+ }
425
+ this.changeThrottle.run();
426
+ };
427
+ /** La barra emite coAction burbujeante: se corta acá y solo salen los botones del host. */
428
+ this.handleToolbarAction = (e) => {
429
+ e.stopPropagation();
430
+ const { action, payload } = e.detail || {};
431
+ // Se reemite EXACTAMENTE el detalle de la barra para los botones del host; las
432
+ // acciones propias de la barra (bold…) no salen del componente. `documentHeader`
433
+ // abre la banda y tampoco se reemite.
434
+ if (payload && payload.extra === true)
435
+ this.coAction.emit({ action, payload: { extra: true } });
436
+ else if (action === 'documentHeader')
437
+ this.startHeaderEdit();
438
+ };
439
+ /* ── Banda del encabezado en edición (como V1: doble clic o «Encabezado»; clic afuera o ✓ confirma; Esc cancela) ── */
440
+ this.startHeaderEdit = () => {
441
+ if (this.readonly || this.headerEditing || !this.editor)
442
+ return;
443
+ this.draftShowPageNumber = this.currentShowPageNumber;
444
+ this.headerEditing = true; // el render monta .co-doc-editor__header-editor y componentDidRender el editor
445
+ this.refreshPagination(); // sin encabezado previo, la banda aparece y corre el cuerpo
446
+ };
447
+ /** Cambios en la banda: solo la lista de campos (decisión 16: el encabezado no emite coChange). */
448
+ this.onHeaderTransaction = ({ transaction }) => {
449
+ if (transaction.docChanged)
450
+ this.changeThrottle.run();
451
+ };
452
+ /** Como fitHeaderImage de V1: una imagen sin ancho se ajusta a la banda (40×400) al cargar. */
453
+ this.onHeaderImageLoad = (e) => {
454
+ const img = e.target;
455
+ const ed = this.headerEditor;
456
+ if (!ed || !img || img.tagName !== 'IMG')
457
+ return;
458
+ const width = headerImageWidth({ w: img.naturalWidth, h: img.naturalHeight });
459
+ if (!width)
460
+ return;
461
+ let target = -1;
462
+ try {
463
+ const pos = ed.view.posAtDOM(img, 0);
464
+ const node = ed.state.doc.nodeAt(pos);
465
+ if (node && node.type.name === 'image')
466
+ target = pos;
467
+ }
468
+ catch (_a) {
469
+ /* el img ya no está en el editor */
470
+ }
471
+ if (target < 0) {
472
+ const src = img.getAttribute('src');
473
+ ed.state.doc.descendants((node, pos) => {
474
+ if (target >= 0)
475
+ return false;
476
+ if (node.type.name === 'image' && !node.attrs.width && node.attrs.src === src)
477
+ target = pos;
478
+ return true;
479
+ });
480
+ }
481
+ const node = target >= 0 ? ed.state.doc.nodeAt(target) : null;
482
+ if (!node || node.attrs.width)
483
+ return;
484
+ ed.view.dispatch(ed.state.tr.setNodeMarkup(target, undefined, Object.assign(Object.assign({}, node.attrs), { width })));
485
+ };
486
+ /** Clic afuera de la banda (y de la barra, que la edita) confirma. */
487
+ this.onDocumentPointer = (e) => {
488
+ const path = e.composedPath();
489
+ if (this.headerBandEl && path.includes(this.headerBandEl))
490
+ return;
491
+ if (this.toolbarEl && path.includes(this.toolbarEl))
492
+ return;
493
+ this.commitHeader();
494
+ };
495
+ /**
496
+ * Esc cancela y NO sigue hasta el editor ni burbujea al host (no cierra el overlay
497
+ * de abajo). Convive con `onHostKeydown`: el host captura antes (es ancestro) y
498
+ * solo adelanta el coChange pendiente del cuerpo.
499
+ */
500
+ this.onHeaderKeydown = (e) => {
501
+ var _a;
502
+ if (e.key !== 'Escape' || e.isComposing)
503
+ return;
504
+ // Desde la barra: si tiene un panel abierto (color, enlace, tamaño…) el Esc es suyo y lo cierra.
505
+ const toolbar = this.toolbarEl;
506
+ if (toolbar && e.currentTarget === toolbar && ((_a = toolbar.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('[aria-expanded="true"]')))
507
+ return;
508
+ e.preventDefault();
509
+ e.stopPropagation();
510
+ this.cancelHeader(true);
511
+ };
512
+ /**
513
+ * `restoreFocus`: confirmar con el ✓ (teclado o clic) desmonta el botón enfocado →
514
+ * el foco vuelve al cuerpo. El clic afuera NO lo toca: el foco ya se fue adonde se hizo clic.
515
+ */
516
+ this.commitHeader = (restoreFocus = false) => {
517
+ var _a;
518
+ const ed = this.headerEditor;
519
+ if (!ed)
520
+ return;
521
+ const refocus = restoreFocus && this.focusIsInBandOrLost();
522
+ const html = ed.isEmpty ? '' : writePrintHtml(ed.state.doc, 'print-header', this.resolvedFeatures);
523
+ const showPageNumber = this.draftShowPageNumber;
524
+ this.teardownHeaderEditor();
525
+ this.currentHeaderHtml = html;
526
+ this.currentShowPageNumber = showPageNumber;
527
+ this.headerDoc = html ? readPrintHtml(html, 'print-header', this.resolvedFeatures) : null;
528
+ this.headerEditing = false;
529
+ this.refreshPagination();
530
+ this.coHeaderChange.emit({ html, showPageNumber });
531
+ this.emitFieldsIfChanged();
532
+ if (refocus)
533
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.focus();
534
+ };
535
+ /** `restoreFocus` solo para la cancelación del usuario (Esc); un cambio de prop no roba el foco. */
536
+ this.cancelHeader = (restoreFocus = false) => {
537
+ var _a;
538
+ if (!this.headerEditing)
539
+ return;
540
+ this.teardownHeaderEditor();
541
+ this.headerEditing = false;
542
+ this.refreshPagination();
543
+ this.emitFieldsIfChanged();
544
+ if (restoreFocus)
545
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.focus();
546
+ };
547
+ /** Escala que refleja el DOM (se actualiza en componentDidRender). */
548
+ this.renderedScale = 1;
549
+ this.onCanvasWheel = (e) => {
550
+ // ctrlKey = pinza del trackpad (Chrome/Edge/Firefox) o ctrl+rueda; ⌘+rueda en mac también.
551
+ if (!e.ctrlKey && !e.metaKey)
552
+ return;
553
+ e.preventDefault();
554
+ // deltaMode 1 = líneas (rueda de mouse clásica): ~16px por línea.
555
+ const delta = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY;
556
+ this.zoomTo(pinchScale(this.scale, delta), e.clientX, e.clientY);
557
+ };
558
+ /** Safari no manda la pinza como ctrl+wheel sino como GestureEvent (escala acumulada desde el inicio). */
559
+ this.gestureBase = 1;
560
+ this.onGestureStart = (e) => {
561
+ e.preventDefault();
562
+ this.gestureBase = this.scale;
563
+ };
564
+ this.onGestureChange = (e) => {
565
+ var _a, _b, _c, _d;
566
+ e.preventDefault();
567
+ const rect = (_a = this.canvasEl) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
568
+ const cx = (_b = e.clientX) !== null && _b !== void 0 ? _b : (rect ? rect.left + rect.width / 2 : 0);
569
+ const cy = (_c = e.clientY) !== null && _c !== void 0 ? _c : (rect ? rect.top + rect.height / 2 : 0);
570
+ this.zoomTo(clampScale(this.gestureBase * ((_d = e.scale) !== null && _d !== void 0 ? _d : 1)), cx, cy);
571
+ };
572
+ }
573
+ get s() {
574
+ return getRichTextStrings(this.locale);
575
+ }
576
+ get resolvedFeatures() {
577
+ var _a;
578
+ return (_a = parseFeatures(this.features)) !== null && _a !== void 0 ? _a : {};
579
+ }
580
+ get parsedExtraItems() {
581
+ const v = parseFeatures(this.extraItems);
582
+ return Array.isArray(v) ? v : [];
583
+ }
584
+ get pageSizePx() {
585
+ return resolvePageSize(parsePageSize(this.pageSize));
586
+ }
587
+ get marginsPx() {
588
+ return parseMargins(this.margins);
589
+ }
590
+ /** Con la banda en edición hay banda aunque el encabezado confirmado esté vacío. */
591
+ get hasHeader() {
592
+ return !!this.currentHeaderHtml || this.headerEditing;
593
+ }
594
+ get sanitizedHeaderHtml() {
595
+ return sanitize(this.currentHeaderHtml, 'print-header');
596
+ }
597
+ get pageScope() {
598
+ return `.co-doc-editor__sheet[data-co-doc="${this.instanceId}"]`;
599
+ }
600
+ /** Editor que maneja la barra: el del encabezado mientras la banda está en edición. */
601
+ get activeEditor() {
602
+ var _a;
603
+ return (_a = this.headerEditor) !== null && _a !== void 0 ? _a : this.editor;
604
+ }
605
+ /** «Encabezado» en la barra: apagado en solo lectura y con la banda ya abierta. */
606
+ get documentHeaderEnabled() {
607
+ return !this.readonly && !this.headerEditing;
608
+ }
609
+ /** Paginación del cuerpo: tamaño, márgenes y banda del encabezado. */
610
+ buildCustomExtensions() {
611
+ return [
612
+ Pagination.configure({
613
+ page: this.pageSizePx,
614
+ margins: this.marginsPx,
615
+ header: { height: this.hasHeader ? this.headerHeight : 0 },
616
+ footer: { height: 0 },
617
+ renderHeader: (page, count) => this.buildHeaderClone(page, count),
618
+ onPagesChange: (n) => {
619
+ this.pageCount = n;
620
+ this.coPagesChange.emit(n);
621
+ },
622
+ }),
623
+ ];
624
+ }
625
+ /** Campos del cuerpo y, detrás, los del encabezado (el que se edita o el confirmado). */
626
+ collectAllFields() {
627
+ if (!this.editor)
628
+ return [];
629
+ const list = collectFields(this.editor.state.doc);
630
+ const header = this.headerEditor ? this.headerEditor.state.doc : this.headerDoc;
631
+ if (header)
632
+ collectFields(header, list);
633
+ return list;
634
+ }
635
+ connectedCallback() {
636
+ // Captura sobre el host: el Escape pasa por acá antes que el listener del drawer/modal
637
+ // que cierra. No se frena la propagación: solo se adelanta el coChange pendiente.
638
+ this.el.addEventListener('keydown', this.onHostKeydown, true);
639
+ }
640
+ componentWillLoad() {
641
+ // H3: el harness de specs no aplica los defaults de clase de @State.
642
+ this.ready = false;
643
+ this.pageCount = 1;
644
+ this.zoomMode = 'fit';
645
+ this.scale = 1;
646
+ this.stageHeight = 0;
647
+ this.headerEditing = false;
648
+ this.draftShowPageNumber = false;
649
+ this.imageBar = null;
650
+ }
651
+ componentDidLoad() {
652
+ var _a, _b, _c;
653
+ if (!this.contentEl)
654
+ return;
655
+ this.syncHeaderFromProps();
656
+ this.editor = createEditor({
657
+ preset: 'print',
658
+ element: this.contentEl,
659
+ // Nota T14: el contenido inicial pasa por readPrintHtml (parseBody), igual que todo setContent posterior.
660
+ content: this.value ? this.parseBody(this.value) : null,
661
+ editable: !this.readonly,
662
+ features: this.resolvedFeatures,
663
+ labels: { signature: (n) => `${this.s.signature} ${n}`, fieldName: this.s.fieldNamePlaceholder },
664
+ customExtensions: this.buildCustomExtensions(),
665
+ imageUpload: this.imageUpload,
666
+ });
667
+ this.lastAppliedValue = this.value;
668
+ this.wireEditor(this.editor);
669
+ this.applyPageStyles();
670
+ if (typeof ResizeObserver !== 'undefined') {
671
+ this.resizeObserver = new ResizeObserver(() => this.updateScale());
672
+ if (this.canvasEl)
673
+ this.resizeObserver.observe(this.canvasEl);
674
+ if (this.stageEl)
675
+ this.resizeObserver.observe(this.stageEl);
676
+ }
677
+ // passive:false — sin preventDefault la pinza hace zoom de TODA la página del navegador.
678
+ (_a = this.canvasEl) === null || _a === void 0 ? void 0 : _a.addEventListener('wheel', this.onCanvasWheel, { passive: false });
679
+ (_b = this.canvasEl) === null || _b === void 0 ? void 0 : _b.addEventListener('gesturestart', this.onGestureStart);
680
+ (_c = this.canvasEl) === null || _c === void 0 ? void 0 : _c.addEventListener('gesturechange', this.onGestureChange);
681
+ this.updateScale();
682
+ this.syncToolbar();
683
+ this.ready = true;
684
+ this.emitFieldsIfChanged();
685
+ this.coReady.emit();
686
+ }
687
+ componentDidRender() {
688
+ this.applyPendingAnchor();
689
+ if (this.headerEditing && !this.headerEditor && this.headerMountEl)
690
+ this.mountHeaderEditor();
691
+ this.syncToolbar();
692
+ }
693
+ disconnectedCallback() {
694
+ var _a, _b, _c, _d;
695
+ this.el.removeEventListener('keydown', this.onHostKeydown, true);
696
+ this.changeThrottle.cancel();
697
+ (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
698
+ this.resizeObserver = undefined;
699
+ (_b = this.canvasEl) === null || _b === void 0 ? void 0 : _b.removeEventListener('wheel', this.onCanvasWheel);
700
+ (_c = this.canvasEl) === null || _c === void 0 ? void 0 : _c.removeEventListener('gesturestart', this.onGestureStart);
701
+ (_d = this.canvasEl) === null || _d === void 0 ? void 0 : _d.removeEventListener('gesturechange', this.onGestureChange);
702
+ // H9: soltar la barra ANTES de destruir, o re-renderiza con un editor destruido.
703
+ if (this.toolbarEl)
704
+ this.toolbarEl.editor = undefined;
705
+ this.teardownHeaderEditor(false);
706
+ this.headerEditing = false;
707
+ if (this.editor) {
708
+ this.editor.off('transaction', this.onTransaction);
709
+ this.editor.off('blur', this.onEditorBlur);
710
+ this.editor.off('transaction', this.updateImageBar);
711
+ this.editor.view.dom.removeEventListener('load', this.onBodyImageLoad, true);
712
+ this.editor.destroy();
713
+ }
714
+ this.editor = undefined;
715
+ this.pendingImageSrcs.clear();
716
+ this.imageBar = null;
717
+ }
718
+ onValueChange(next) {
719
+ if (next === this.lastAppliedValue)
720
+ return;
721
+ // Eco del host: devolvió por `value` lo que getPrintHtml() dio. Re-aplicarlo movería el cursor.
722
+ // Solo corre cuando cambia la prop (nunca por tecla).
723
+ if (this.editor && next && next === writePrintHtml(this.editor.state.doc, 'print', this.resolvedFeatures)) {
724
+ this.lastAppliedValue = next;
725
+ return;
726
+ }
727
+ this.applyBody(next);
728
+ }
729
+ onReadonlyChange() {
730
+ var _a;
731
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.setEditable(!this.readonly);
732
+ if (this.readonly && this.headerEditing)
733
+ this.cancelHeader();
734
+ this.updateImageBar();
735
+ }
736
+ onPageGeometryChange() {
737
+ this.refreshPagination();
738
+ this.updateScale();
739
+ }
740
+ onHeaderPropsChange() {
741
+ if (this.headerEditing)
742
+ return; // lo que se está editando manda hasta confirmar o cancelar
743
+ this.syncHeaderFromProps();
744
+ this.refreshPagination();
745
+ this.emitFieldsIfChanged();
746
+ }
747
+ onPageStylesChange() {
748
+ this.applyPageStyles();
749
+ }
750
+ onLabelChange() {
751
+ if (this.editor)
752
+ this.editor.view.dom.setAttribute('aria-label', this.label || this.s.documentEditor);
753
+ }
754
+ /** «Página N / M» de las bandas de salto sale del idioma: redibujarlas. */
755
+ onLocaleChange() {
756
+ if (this.currentShowPageNumber)
757
+ this.refreshPagination();
758
+ }
759
+ /* ── Métodos públicos ── */
760
+ /** Cuerpo en la forma canónica de impresión (spec §3.4). */
761
+ async getPrintHtml() {
762
+ if (!this.editor)
763
+ return '';
764
+ return writePrintHtml(this.editor.state.doc, 'print', this.resolvedFeatures);
765
+ }
766
+ /**
767
+ * HTML del encabezado confirmado: el de la prop tal cual, o la forma canónica
768
+ * si pasó por la banda o por `setFieldValues`. Lo que se está editando en la
769
+ * banda sin confirmar NO cuenta.
770
+ */
771
+ async getHeaderHtml() {
772
+ return this.currentHeaderHtml;
773
+ }
774
+ async getJSON() {
775
+ return this.editor ? this.editor.getJSON() : null;
776
+ }
777
+ /**
778
+ * Emite YA el `coChange` pendiente (no-op si no hay). El host lo llama antes de
779
+ * decidir «cambios sin aplicar» (cerrar, navegar): `coChange` sale al final de
780
+ * la ventana de 250 ms y una edición recién tipeada todavía no avisó.
781
+ * El blur del editor y un Escape dentro del componente lo hacen solos.
782
+ */
783
+ async flushChange() {
784
+ this.changeThrottle.flush();
785
+ }
786
+ /**
787
+ * ¿Cuerpo vacío? En print un documento vacío NO serializa a `''`
788
+ * (`<p><br class="ProseMirror-trailingBreak"></p>`): el host pregunta acá.
789
+ */
790
+ async isEmpty() {
791
+ return this.editor ? this.editor.isEmpty : true;
792
+ }
793
+ /** Reemplaza el cuerpo (HTML de impresión, V1 incluido). A diferencia del RTE, NO emite coChange. */
794
+ async setContent(html) {
795
+ this.applyBody(html);
796
+ }
797
+ /**
798
+ * Valores de los campos (cuerpo y encabezado) en UNA transacción por editor; no
799
+ * cuenta como edición del usuario ni emite coHeaderChange. Con la banda abierta
800
+ * se aplican también al confirmado, así cancelar no los pierde.
801
+ */
802
+ async setFieldValues(values) {
803
+ var _a, _b;
804
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.setFieldValues(values);
805
+ (_b = this.headerEditor) === null || _b === void 0 ? void 0 : _b.commands.setFieldValues(values);
806
+ if (!this.currentHeaderHtml)
807
+ return;
808
+ const next = setFieldValuesInHtml(this.currentHeaderHtml, values, 'print-header', this.resolvedFeatures);
809
+ if (next === this.currentHeaderHtml)
810
+ return;
811
+ this.currentHeaderHtml = next;
812
+ this.headerDoc = readPrintHtml(next, 'print-header', this.resolvedFeatures);
813
+ if (!this.headerEditing) {
814
+ this.refreshPagination(); // las bandas de salto clonan el encabezado
815
+ forceUpdate(this);
816
+ }
817
+ }
818
+ async insertField(name, opts) {
819
+ var _a;
820
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.chain().focus().insertField(name, opts).run();
821
+ }
822
+ async insertSignatureSlot() {
823
+ var _a;
824
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.chain().focus().insertSignatureSlot().run();
825
+ }
826
+ async focusEditor() {
827
+ var _a;
828
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.focus();
829
+ }
830
+ async getEditorInstance() {
831
+ var _a;
832
+ return (_a = this.editor) !== null && _a !== void 0 ? _a : null;
833
+ }
834
+ /* ── internos ── */
835
+ /** Listeners y atributos del editor del cuerpo. */
836
+ wireEditor(editor) {
837
+ const dom = editor.view.dom;
838
+ dom.classList.add('tiptap');
839
+ dom.setAttribute('aria-label', this.label || this.s.documentEditor);
840
+ dom.setAttribute('aria-multiline', 'true');
841
+ editor.on('transaction', this.onTransaction);
842
+ editor.on('transaction', this.updateImageBar);
843
+ editor.on('blur', this.onEditorBlur);
844
+ // `load` no burbujea: se escucha en captura.
845
+ dom.addEventListener('load', this.onBodyImageLoad, true);
846
+ }
847
+ imageModeLabel(mode) {
848
+ const s = this.s;
849
+ return { inline: s.imageLayoutInline, 'wrap-left': s.imageLayoutWrapLeft, 'wrap-right': s.imageLayoutWrapRight, break: s.imageLayoutBreak }[mode];
850
+ }
851
+ /**
852
+ * Sin `.focus()`: con el mouse el mousedown de la barra ya no le quita el foco al
853
+ * editor, y con el teclado el foco se queda en el botón (se puede seguir en la barra).
854
+ * H7: el comando re-selecciona el nodo, así la barra sigue tras el cambio.
855
+ */
856
+ setImageMode(mode) {
857
+ var _a;
858
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.setImageLayoutMode(mode);
859
+ this.updateImageBar();
860
+ }
861
+ /** Imágenes que entran por una transacción del usuario sin `width` (barra, pegar, soltar, subida). */
862
+ trackInsertedImages(transaction) {
863
+ var _a, _b, _c;
864
+ // Deshacer/rehacer REPONE una imagen que ya existía (p. ej. una de V1 sin ancho): no es
865
+ // una inserción, y estamparle ancho cambiaría el HTML de V1 y vaciaría la pila de rehacer.
866
+ // `history$` = PluginKey('history') de prosemirror-history (el undoRedo de StarterKit).
867
+ if (transaction.getMeta('history$'))
868
+ return;
869
+ const found = [];
870
+ for (const step of transaction.steps) {
871
+ (_c = (_b = (_a = step.slice) === null || _a === void 0 ? void 0 : _a.content) === null || _b === void 0 ? void 0 : _b.descendants) === null || _c === void 0 ? void 0 : _c.call(_b, (n) => {
872
+ if (n.type.name === 'image' && !n.attrs.width && n.attrs.src)
873
+ found.push(n.attrs.src);
874
+ });
875
+ }
876
+ if (!found.length)
877
+ return;
878
+ // Un cambio de modo (setNodeMarkup) reescribe la MISMA imagen: la que ya estaba no es nueva.
879
+ const before = new Set();
880
+ transaction.before.descendants((n) => {
881
+ if (n.type.name === 'image' && !n.attrs.width)
882
+ before.add(n.attrs.src);
883
+ });
884
+ found.forEach((src) => {
885
+ if (!before.has(src))
886
+ this.pendingImageSrcs.add(src);
887
+ });
888
+ }
889
+ /** JSON de ProseMirror como string, o HTML de impresión (V1 incluido) por el lector tolerante. */
890
+ parseBody(v) {
891
+ const t = v.trim();
892
+ if (t.startsWith('{')) {
893
+ try {
894
+ return JSON.parse(t);
895
+ }
896
+ catch (_a) {
897
+ /* no era JSON: se lee como HTML */
898
+ }
899
+ }
900
+ return readPrintHtml(v, 'print', this.resolvedFeatures);
901
+ }
902
+ applyBody(v) {
903
+ if (!this.editor)
904
+ return;
905
+ // Otro cuerpo: lo pendiente del anterior ya no es «insertado» (una V1 con la misma src no se toca).
906
+ this.pendingImageSrcs.clear();
907
+ this.applyingExternal = true;
908
+ try {
909
+ if (!v)
910
+ this.editor.commands.clearContent(false);
911
+ else
912
+ this.editor.commands.setContent(this.parseBody(v), { emitUpdate: false });
913
+ }
914
+ finally {
915
+ this.applyingExternal = false;
916
+ this.lastAppliedValue = v;
917
+ }
918
+ }
919
+ emitPendingChange() {
920
+ if (!this.editor)
921
+ return;
922
+ this.emitFieldsIfChanged();
923
+ if (this.userDirty) {
924
+ this.userDirty = false;
925
+ this.coChange.emit();
926
+ }
927
+ }
928
+ emitFieldsIfChanged() {
929
+ const fields = this.collectAllFields();
930
+ const key = JSON.stringify(fields);
931
+ if (key === this.lastFieldsKey)
932
+ return;
933
+ this.lastFieldsKey = key;
934
+ this.coFieldsChange.emit(fields);
935
+ }
936
+ syncToolbar() {
937
+ syncToolbarEditor(this.toolbarEl, this.activeEditor, this.imageUpload);
938
+ }
939
+ syncHeaderFromProps() {
940
+ this.currentHeaderHtml = this.headerHtml || '';
941
+ this.currentShowPageNumber = toBoolIntent(this.showPageNumber);
942
+ this.headerDoc = this.currentHeaderHtml ? readPrintHtml(this.currentHeaderHtml, 'print-header', this.resolvedFeatures) : null;
943
+ }
944
+ mountHeaderEditor() {
945
+ var _a, _b;
946
+ const editor = createEditor({
947
+ preset: 'print-header',
948
+ element: this.headerMountEl,
949
+ content: this.currentHeaderHtml ? readPrintHtml(this.currentHeaderHtml, 'print-header', this.resolvedFeatures) : null,
950
+ editable: true,
951
+ features: { fields: this.resolvedFeatures.fields },
952
+ labels: { fieldName: this.s.fieldNamePlaceholder },
953
+ imageUpload: this.imageUpload,
954
+ });
955
+ this.headerEditor = editor;
956
+ const dom = editor.view.dom;
957
+ dom.classList.add('tiptap');
958
+ dom.setAttribute('aria-label', this.s.documentHeader);
959
+ editor.on('transaction', this.onHeaderTransaction);
960
+ // `load` no burbujea: se escucha en captura.
961
+ dom.addEventListener('load', this.onHeaderImageLoad, true);
962
+ document.addEventListener('mousedown', this.onDocumentPointer, true);
963
+ (_a = this.headerBandEl) === null || _a === void 0 ? void 0 : _a.addEventListener('keydown', this.onHeaderKeydown, true);
964
+ // Con la banda abierta la barra edita el encabezado: su Esc también cancela la banda.
965
+ (_b = this.toolbarEl) === null || _b === void 0 ? void 0 : _b.addEventListener('keydown', this.onHeaderKeydown, true);
966
+ editor.commands.focus('end');
967
+ this.syncToolbar();
968
+ }
969
+ /** `resync`: devolverle la barra al cuerpo (no al desconectar: la barra ya se soltó). */
970
+ teardownHeaderEditor(resync = true) {
971
+ var _a, _b;
972
+ document.removeEventListener('mousedown', this.onDocumentPointer, true);
973
+ (_a = this.headerBandEl) === null || _a === void 0 ? void 0 : _a.removeEventListener('keydown', this.onHeaderKeydown, true);
974
+ (_b = this.toolbarEl) === null || _b === void 0 ? void 0 : _b.removeEventListener('keydown', this.onHeaderKeydown, true);
975
+ const ed = this.headerEditor;
976
+ this.headerEditor = undefined;
977
+ // H9: la barra suelta el editor del encabezado ANTES de que se destruya.
978
+ if (resync)
979
+ this.syncToolbar();
980
+ else if (this.toolbarEl && ed && this.toolbarEl.editor === ed)
981
+ this.toolbarEl.editor = undefined;
982
+ if (ed) {
983
+ ed.off('transaction', this.onHeaderTransaction);
984
+ ed.view.dom.removeEventListener('load', this.onHeaderImageLoad, true);
985
+ ed.destroy();
986
+ }
987
+ }
988
+ /** ¿El foco está en la banda (editor, interruptor, ✓) o se perdió al `<body>`? */
989
+ focusIsInBandOrLost() {
990
+ const active = document.activeElement;
991
+ return !active || active === document.body || !!(this.headerBandEl && this.headerBandEl.contains(active));
992
+ }
993
+ /** Tamaño, márgenes o banda cambiaron: la extensión redibuja bandas y vuelve a medir. */
994
+ refreshPagination() {
995
+ var _a;
996
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.setPaginationOptions({
997
+ page: this.pageSizePx,
998
+ margins: this.marginsPx,
999
+ header: { height: this.hasHeader ? this.headerHeight : 0 },
1000
+ });
1001
+ }
1002
+ applyPageStyles() {
1003
+ if (this.styleEl)
1004
+ this.styleEl.textContent = scopePageStyles(this.pageStyles, this.pageScope);
1005
+ }
1006
+ /** Cabecera de la hoja `page` dentro de una banda de salto (DOM imperativo: la pinta un widget). */
1007
+ buildHeaderClone(page, count) {
1008
+ if (!this.currentHeaderHtml)
1009
+ return null;
1010
+ const el = document.createElement('div');
1011
+ el.className = 'co-doc-editor__header-static';
1012
+ el.style.height = `${this.headerHeight}px`;
1013
+ const html = document.createElement('div');
1014
+ html.className = 'co-doc-editor__header-html';
1015
+ html.innerHTML = this.sanitizedHeaderHtml;
1016
+ el.appendChild(html);
1017
+ if (this.currentShowPageNumber) {
1018
+ const n = document.createElement('span');
1019
+ n.className = 'co-doc-editor__page-number';
1020
+ n.textContent = `${this.s.page} ${page} / ${count}`;
1021
+ el.appendChild(n);
1022
+ }
1023
+ return el;
1024
+ }
1025
+ updateScale() {
1026
+ var _a, _b, _c, _d;
1027
+ if (this.zoomMode !== 'custom') {
1028
+ const next = this.zoomMode === 'actual' ? 1 : fitScale(((_b = (_a = this.canvasEl) === null || _a === void 0 ? void 0 : _a.clientWidth) !== null && _b !== void 0 ? _b : 0) - ZOOM_GUTTER_PX, this.pageSizePx.width);
1029
+ if (next !== this.scale)
1030
+ this.scale = next;
1031
+ }
1032
+ const h = (_d = (_c = this.stageEl) === null || _c === void 0 ? void 0 : _c.offsetHeight) !== null && _d !== void 0 ? _d : 0;
1033
+ if (h !== this.stageHeight)
1034
+ this.stageHeight = h;
1035
+ }
1036
+ /**
1037
+ * Zoom libre anclado al cursor: guarda el punto del PAPEL bajo el puntero (con la escala que el
1038
+ * DOM muestra ahora) y, tras el render, corrige el scroll midiendo dónde quedó. Varios eventos
1039
+ * antes de un render reusan el mismo punto: la hoja todavía no se movió.
1040
+ */
1041
+ zoomTo(next, clientX, clientY) {
1042
+ if (!this.canvasEl || !this.stageEl || next === this.scale)
1043
+ return;
1044
+ if (!this.pendingAnchor) {
1045
+ const r = this.stageEl.getBoundingClientRect();
1046
+ this.pendingAnchor = {
1047
+ px: paperPoint(clientX, r.left, this.renderedScale),
1048
+ py: paperPoint(clientY, r.top, this.renderedScale),
1049
+ cx: clientX,
1050
+ cy: clientY,
1051
+ };
1052
+ }
1053
+ else {
1054
+ this.pendingAnchor.cx = clientX;
1055
+ this.pendingAnchor.cy = clientY;
1056
+ }
1057
+ this.zoomMode = 'custom';
1058
+ this.scale = next;
1059
+ }
1060
+ applyPendingAnchor() {
1061
+ const a = this.pendingAnchor;
1062
+ const canvas = this.canvasEl;
1063
+ this.renderedScale = this.scale;
1064
+ if (!a || !canvas || !this.stageEl)
1065
+ return;
1066
+ this.pendingAnchor = undefined;
1067
+ const r = this.stageEl.getBoundingClientRect();
1068
+ canvas.scrollLeft += anchorCorrection(r.left, a.px, this.scale, a.cx);
1069
+ canvas.scrollTop += anchorCorrection(r.top, a.py, this.scale, a.cy);
1070
+ }
1071
+ setZoom(mode) {
1072
+ this.zoomMode = mode;
1073
+ this.updateScale();
1074
+ }
1075
+ /**
1076
+ * Banda de la primera hoja. Siempre montada (oculta con `hidden`); doble clic la
1077
+ * vuelve un editor `print-header` con el interruptor de número de página.
1078
+ */
1079
+ renderHeaderBand() {
1080
+ const s = this.s;
1081
+ return (h("div", { key: "header-band", class: { 'co-doc-editor__header-band': true, 'co-doc-editor__header-band--editing': this.headerEditing }, part: "header-band", hidden: !this.hasHeader, ref: (el) => (this.headerBandEl = el), onDblClick: () => this.startHeaderEdit() }, this.headerEditing ? (h("div", { key: "header-editing", class: "co-doc-editor__header-editing" }, h("div", { class: "co-doc-editor__header-editor", ref: (el) => (this.headerMountEl = el) }), h("div", { class: "co-doc-editor__header-tools" }, h("co-switch", { checked: this.draftShowPageNumber, label: s.pageNumber, disabled: false, required: false, status: "default", onCoChange: (e) => {
1082
+ e.stopPropagation(); // su coChange burbujea: no es el coChange del documento
1083
+ this.draftShowPageNumber = !!e.detail;
1084
+ } }), h("co-tooltip", { content: s.confirmHeader }, h("co-icon-button", { icon: "check", variant: "ghost", size: "xs", boxSize: HEADER_TOOL_BOX_PX, iconSize: HEADER_TOOL_ICON_PX, label: s.confirmHeader, onClick: () => this.commitHeader(true) }))))) : (h("div", { key: "header-static", class: "co-doc-editor__header-static" }, h("div", { class: "co-doc-editor__header-html", innerHTML: this.sanitizedHeaderHtml }), this.currentShowPageNumber && h("span", { class: "co-doc-editor__page-number" }, `${s.page} 1 / ${this.pageCount}`)))));
1085
+ }
1086
+ /** Controles flotantes sobre la hoja: la barra de diseño de la imagen seleccionada. */
1087
+ renderOverlays() {
1088
+ const bar = this.imageBar;
1089
+ if (!bar || this.readonly || this.headerEditing)
1090
+ return null;
1091
+ return (h("div", { key: "image-bar", class: "co-doc-editor__image-bar", role: "toolbar", "aria-label": this.s.imageLayoutLabel, style: { top: `${bar.top}px`, left: `${bar.left}px` }, onMouseDown: (e) => e.preventDefault() }, IMAGE_LAYOUT_MODES.map((mode) => {
1092
+ const label = this.imageModeLabel(mode);
1093
+ const active = bar.mode === mode;
1094
+ // <button> nativo (no co-icon-button): necesita aria-pressed, que ningún co-* reenvía.
1095
+ return (h("co-tooltip", { key: mode, content: label }, h("button", { type: "button", class: { 'co-doc-editor__image-mode': true, 'co-doc-editor__image-mode--active': active }, "data-mode": mode, "aria-label": label, "aria-pressed": String(active), onClick: () => this.setImageMode(mode) }, h("co-icon", { name: IMAGE_MODE_ICONS[mode], size: IMAGE_MODE_ICON_PX, "aria-hidden": "true" }))));
1096
+ })));
1097
+ }
1098
+ render() {
1099
+ const s = this.s;
1100
+ const page = this.pageSizePx;
1101
+ const m = this.marginsPx;
1102
+ const headerH = this.hasHeader ? this.headerHeight : 0;
1103
+ const sheetVars = {
1104
+ '--co-doc-page-w': `${page.width}px`,
1105
+ '--co-doc-page-h': `${page.height}px`,
1106
+ '--co-doc-margin-top': `${m.top}px`,
1107
+ '--co-doc-margin-right': `${m.right}px`,
1108
+ '--co-doc-margin-bottom': `${m.bottom}px`,
1109
+ '--co-doc-margin-left': `${m.left}px`,
1110
+ '--co-doc-header-h': `${headerH}px`,
1111
+ '--co-doc-pages': String(this.pageCount),
1112
+ '--co-doc-gap': `${PAGE_GAP_PX}px`,
1113
+ };
1114
+ const frameStyle = {
1115
+ width: `${page.width * this.scale}px`,
1116
+ height: this.stageHeight ? `${this.stageHeight * this.scale}px` : 'auto',
1117
+ };
1118
+ const zoomButton = (mode, label) => (h("button", { key: '3a2671fec095ced83d7c345f817770833a3ea2c3', type: "button", class: { 'co-doc-editor__zoom-btn': true, 'co-doc-editor__zoom-btn--active': this.zoomMode === mode }, "aria-pressed": String(this.zoomMode === mode), onClick: () => this.setZoom(mode) }, label));
1119
+ return (h(Host, { key: '9f52b22003b54313cf5231804a476690778b22b6' }, h("div", { key: '88184e065b0f6184c3d06097c4243d1ebe7bc6c5', class: { 'co-doc-editor': true, 'co-doc-editor--readonly': this.readonly, 'co-doc-editor--loading': !this.ready }, part: "wrapper" }, h("div", { key: 'a1cf9f2eb7c23f8a4ca9b2f5098222f54d0168a8', class: "co-doc-editor__bar", part: "bar" }, !this.readonly && (h("co-rich-text-toolbar", { key: '889ae86009703a14bec362608e2e81770f963ff0', class: "co-doc-editor__toolbar", part: "toolbar", variant: "document", position: "top", disabled: false, locale: this.locale, attachmentsEnabled: false, documentHeaderEnabled: this.documentHeaderEnabled, extraItems: this.parsedExtraItems, onCoAction: this.handleToolbarAction, ref: (el) => (this.toolbarEl = el) })), h("div", { key: 'ed349a7dd902fa1569e9efb4e77611835bfa4236', class: "co-doc-editor__zoom", role: "group", "aria-label": s.zoom }, this.zoomMode === 'custom' && h("span", { key: 'a80bfe10a8fea8822084935ed8dbf6b7c0835b2c', class: "co-doc-editor__zoom-level" }, `${Math.round(this.scale * 100)} %`), zoomButton('fit', s.zoomFit), zoomButton('actual', s.zoomActual))), h("div", { key: 'dd283d50eb5712d34e5568727be504aa972a3b2a', class: "co-doc-editor__body" }, h("div", { key: '972162fb86e9b560bcf9d86e50a548cb8fea1d7b', class: "co-doc-editor__canvas", part: "canvas", ref: (el) => (this.canvasEl = el) }, h("div", { key: '409e773a4ba786ea867816a8715585dce000d618', class: "co-doc-editor__zoom-frame", style: frameStyle }, h("div", { key: '0ad67ae01d7aebb0f7f7fd1cacbddc2db3c7c7cc', class: "co-doc-editor__stage", style: { transform: `scale(${this.scale})` }, ref: (el) => (this.stageEl = el) }, h("div", { key: 'e8ca10170b25ff5bd4ebf9382205c1b84bae844a', class: "co-doc-editor__sheet", part: "sheet", "data-co-doc": this.instanceId, style: sheetVars }, h("style", { key: "page-styles", "data-co-doc-page-styles": "", ref: (el) => (this.styleEl = el) }), h("div", { key: "paper", class: "co-doc-editor__paper", "data-theme": "light" }, this.renderHeaderBand(), h("div", { key: "content", class: "co-doc-editor__content", ref: (el) => (this.contentEl = el) }), this.renderOverlays()))))), h("slot", { key: '9a3f5af0b445a56513ac894ac7a6ff67314e611d', name: "aside" })))));
1120
+ }
1121
+ get el() { return getElement(this); }
1122
+ static get watchers() { return {
1123
+ "value": [{
1124
+ "onValueChange": 0
1125
+ }],
1126
+ "readonly": [{
1127
+ "onReadonlyChange": 0
1128
+ }],
1129
+ "pageSize": [{
1130
+ "onPageGeometryChange": 0
1131
+ }],
1132
+ "margins": [{
1133
+ "onPageGeometryChange": 0
1134
+ }],
1135
+ "headerHeight": [{
1136
+ "onPageGeometryChange": 0
1137
+ }],
1138
+ "headerHtml": [{
1139
+ "onHeaderPropsChange": 0
1140
+ }],
1141
+ "showPageNumber": [{
1142
+ "onHeaderPropsChange": 0
1143
+ }],
1144
+ "pageStyles": [{
1145
+ "onPageStylesChange": 0
1146
+ }],
1147
+ "label": [{
1148
+ "onLabelChange": 0
1149
+ }],
1150
+ "locale": [{
1151
+ "onLabelChange": 0
1152
+ }, {
1153
+ "onLocaleChange": 0
1154
+ }]
1155
+ }; }
1156
+ };
1157
+ CoDocumentEditor.style = coDocumentEditorCss();
1158
+
1159
+ export { CoDocumentEditor as co_document_editor };