@prolibu-suite/cobalt-core 0.10.4 → 0.11.1

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 (824) hide show
  1. package/README.md +12 -5
  2. package/custom-elements.json +7034 -1203
  3. package/dist/cjs/co-accordion.cjs.entry.js +3 -3
  4. package/dist/cjs/co-action-bar.cjs.entry.js +3 -3
  5. package/dist/cjs/co-app-shell.cjs.entry.js +3 -3
  6. package/dist/cjs/co-audio-player.cjs.entry.js +4 -4
  7. package/dist/cjs/co-autocomplete.cjs.entry.js +12 -5
  8. package/dist/cjs/co-avatar-group.cjs.entry.js +3 -3
  9. package/dist/cjs/co-avatar.cjs.entry.js +7 -4
  10. package/dist/cjs/co-badge.cjs.entry.js +2 -2
  11. package/dist/cjs/co-bottom-sheet.cjs.entry.js +5 -5
  12. package/dist/cjs/co-breadcrumb-item.cjs.entry.js +3 -3
  13. package/dist/cjs/co-breadcrumb.cjs.entry.js +2 -2
  14. package/dist/cjs/co-button-group.cjs.entry.js +4 -3
  15. package/dist/cjs/co-button.cjs.entry.js +9 -7
  16. package/dist/cjs/co-calendar-month_2.cjs.entry.js +16 -4
  17. package/dist/cjs/co-calendar_3.cjs.entry.js +76 -27
  18. package/dist/cjs/co-card.cjs.entry.js +3 -3
  19. package/dist/cjs/co-carousel-item.cjs.entry.js +2 -2
  20. package/dist/cjs/co-carousel.cjs.entry.js +6 -3
  21. package/dist/cjs/co-checkbox-group.cjs.entry.js +4 -4
  22. package/dist/cjs/co-checkbox.cjs.entry.js +13 -5
  23. package/dist/cjs/co-chip_2.cjs.entry.js +20 -7
  24. package/dist/cjs/co-color-area.cjs.entry.js +169 -0
  25. package/dist/cjs/co-color-picker.cjs.entry.js +5 -5
  26. package/dist/cjs/co-color-slider.cjs.entry.js +189 -0
  27. package/dist/cjs/co-column-picker.cjs.entry.js +23 -3
  28. package/dist/cjs/co-combobox.cjs.entry.js +5 -5
  29. package/dist/cjs/co-command-search.cjs.entry.js +5 -5
  30. package/dist/cjs/co-data-table-pagination.cjs.entry.js +5 -5
  31. package/dist/cjs/co-data-table.cjs.entry.js +3 -3
  32. package/dist/cjs/co-date-picker.cjs.entry.js +10 -2
  33. package/dist/cjs/co-date-range-picker.cjs.entry.js +11 -2
  34. package/dist/cjs/co-date-range.cjs.entry.js +8 -2
  35. package/dist/cjs/co-date-time-picker.cjs.entry.js +11 -4
  36. package/dist/cjs/co-document-editor.cjs.entry.js +1167 -0
  37. package/dist/cjs/co-drive-card.cjs.entry.js +2 -2
  38. package/dist/cjs/co-drop-zone.cjs.entry.js +2 -2
  39. package/dist/cjs/co-emoji-picker.cjs.entry.js +3 -3
  40. package/dist/cjs/co-empty-state.cjs.entry.js +3 -3
  41. package/dist/cjs/co-event-calendar.cjs.entry.js +5 -3
  42. package/dist/cjs/co-event-popover.cjs.entry.js +7 -3
  43. package/dist/cjs/co-fab.cjs.entry.js +7 -3
  44. package/dist/cjs/co-file-field.cjs.entry.js +12 -8
  45. package/dist/cjs/co-file-type-tile.cjs.entry.js +3 -3
  46. package/dist/cjs/co-gradient-bar.cjs.entry.js +220 -0
  47. package/dist/cjs/co-helper-text.cjs.entry.js +3 -3
  48. package/dist/cjs/co-icon-button.cjs.entry.js +48 -9
  49. package/dist/cjs/co-icon.cjs.entry.js +3 -3
  50. package/dist/cjs/co-input.cjs.entry.js +14 -8
  51. package/dist/cjs/co-json-field.cjs.entry.js +10 -5
  52. package/dist/cjs/{co-tooltip.cjs.entry.js → co-kbd_2.cjs.entry.js} +194 -6
  53. package/dist/cjs/co-lightbox.cjs.entry.js +5 -5
  54. package/dist/cjs/co-list-footer.cjs.entry.js +2 -2
  55. package/dist/cjs/co-list-item.cjs.entry.js +5 -5
  56. package/dist/cjs/co-loader.cjs.entry.js +1 -1
  57. package/dist/cjs/co-media-thumb.cjs.entry.js +3 -3
  58. package/dist/cjs/co-menu-divider.cjs.entry.js +3 -3
  59. package/dist/cjs/co-menu-item.cjs.entry.js +41 -43
  60. package/dist/cjs/co-menu.cjs.entry.js +81 -5
  61. package/dist/cjs/co-modal.cjs.entry.js +350 -7
  62. package/dist/cjs/co-navbar.cjs.entry.js +3 -3
  63. package/dist/cjs/co-number-field.cjs.entry.js +11 -5
  64. package/dist/cjs/co-overlay.cjs.entry.js +8 -4
  65. package/dist/cjs/co-page-header.cjs.entry.js +2 -2
  66. package/dist/cjs/co-phone-field.cjs.entry.js +3 -3
  67. package/dist/cjs/co-popover.cjs.entry.js +69 -6
  68. package/dist/cjs/co-progress-bar.cjs.entry.js +3 -3
  69. package/dist/cjs/co-progress-circle.cjs.entry.js +3 -3
  70. package/dist/cjs/co-provider-logo_2.cjs.entry.js +2 -2
  71. package/dist/cjs/co-radio-group.cjs.entry.js +4 -4
  72. package/dist/cjs/co-radio.cjs.entry.js +4 -4
  73. package/dist/cjs/co-rating.cjs.entry.js +11 -4
  74. package/dist/cjs/co-ref-field.cjs.entry.js +14 -5
  75. package/dist/cjs/co-rich-text-editor.cjs.entry.js +40 -92
  76. package/dist/cjs/co-rich-text-toolbar.cjs.entry.js +80 -20
  77. package/dist/cjs/co-rich-text-viewer.cjs.entry.js +9 -2
  78. package/dist/cjs/co-row.cjs.entry.js +3 -3
  79. package/dist/cjs/co-segmented-bar.cjs.entry.js +3 -3
  80. package/dist/cjs/co-select.cjs.entry.js +171 -29
  81. package/dist/cjs/co-separator.cjs.entry.js +2 -2
  82. package/dist/cjs/co-sidebar-nav.cjs.entry.js +20 -5
  83. package/dist/cjs/co-sidebar.cjs.entry.js +3 -3
  84. package/dist/cjs/co-slider.cjs.entry.js +209 -23
  85. package/dist/cjs/co-swatch-grid.cjs.entry.js +121 -0
  86. package/dist/cjs/co-switch.cjs.entry.js +5 -5
  87. package/dist/cjs/co-tab-group.cjs.entry.js +113 -4
  88. package/dist/cjs/co-tab.cjs.entry.js +15 -5
  89. package/dist/cjs/co-tags-field.cjs.entry.js +13 -8
  90. package/dist/cjs/co-textarea.cjs.entry.js +6 -6
  91. package/dist/cjs/co-tile.cjs.entry.js +61 -0
  92. package/dist/cjs/co-time-field.cjs.entry.js +5 -2
  93. package/dist/cjs/co-toast.cjs.entry.js +3 -3
  94. package/dist/cjs/co-toggle-button-group.cjs.entry.js +29 -5
  95. package/dist/cjs/co-toggle-button.cjs.entry.js +70 -6
  96. package/dist/cjs/co-transfer-list.cjs.entry.js +7 -3
  97. package/dist/cjs/co-tree-item.cjs.entry.js +110 -0
  98. package/dist/cjs/co-video.cjs.entry.js +11 -3
  99. package/dist/cjs/cobalt.cjs.js +2 -2
  100. package/dist/cjs/{color-CML2Cfdh.js → color-DQVrQGi0.js} +10 -5
  101. package/dist/cjs/{fieldChip-B6YIGU1V.js → fieldChip-C7MxxBVO.js} +1 -1
  102. package/dist/cjs/gradientStops-CMpH4fB_.js +153 -0
  103. package/dist/cjs/hsv-DpfSF3M2.js +95 -0
  104. package/dist/cjs/{index-MDAnKsze.js → index-bHoidDwv.js} +67 -27
  105. package/dist/cjs/index-oMHzCXm6.js +144 -0
  106. package/dist/cjs/loader.cjs.js +2 -2
  107. package/dist/cjs/{index-2kMmd5-a.js → pagination-DV43TRj9.js} +1780 -297
  108. package/dist/cjs/{positioning-CyatXeT_.js → positioning-CILo5esi.js} +45 -18
  109. package/dist/cjs/{requiredMark-D-t-IPN0.js → requiredMark-21yHvvZS.js} +1 -1
  110. package/dist/cjs/rich-text-host-ueFSfW-6.js +119 -0
  111. package/dist/cjs/{richTextI18n-B28uAhh4.js → richTextI18n-DXGIv5w1.js} +45 -0
  112. package/dist/cjs/submenu-RlaX6irw.js +65 -0
  113. package/dist/cjs/{toolbar-config-CYACt9hh.js → toolbar-config-DczL6C4W.js} +32 -0
  114. package/dist/cobalt/cobalt.css +1 -1
  115. package/dist/cobalt/cobalt.esm.js +1 -1
  116. package/dist/cobalt/{p-76249983.entry.js → p-019eed8e.entry.js} +1 -1
  117. package/dist/cobalt/p-04e3e1f6.entry.js +1 -0
  118. package/dist/cobalt/p-06689166.entry.js +1 -0
  119. package/dist/cobalt/p-0d046d98.entry.js +1 -0
  120. package/dist/cobalt/{p-28764b8e.entry.js → p-0e4c2234.entry.js} +1 -1
  121. package/dist/cobalt/{p-b90d41e4.entry.js → p-1348d5ca.entry.js} +1 -1
  122. package/dist/cobalt/{p-49834b8e.entry.js → p-13e5b724.entry.js} +1 -1
  123. package/dist/cobalt/p-1a5bec8c.entry.js +1 -0
  124. package/dist/cobalt/p-21b4a830.entry.js +1 -0
  125. package/dist/cobalt/p-2231bacc.entry.js +1 -0
  126. package/dist/cobalt/{p-b437eff6.entry.js → p-26cbdc33.entry.js} +1 -1
  127. package/dist/cobalt/{p-aa9400bf.entry.js → p-28cf05f3.entry.js} +1 -1
  128. package/dist/cobalt/{p-eadfd661.entry.js → p-358a6c2a.entry.js} +1 -1
  129. package/dist/cobalt/p-3b5024ce.entry.js +1 -0
  130. package/dist/cobalt/p-3b6efb79.entry.js +1 -0
  131. package/dist/cobalt/p-3d1a48e5.entry.js +1 -0
  132. package/dist/cobalt/p-47eca182.entry.js +1 -0
  133. package/dist/cobalt/{p-eb82358d.entry.js → p-4bcdd422.entry.js} +1 -1
  134. package/dist/cobalt/{p-17244412.entry.js → p-4d743628.entry.js} +1 -1
  135. package/dist/cobalt/{p-011dc80b.entry.js → p-4e81e580.entry.js} +1 -1
  136. package/dist/cobalt/{p-ee9a623d.entry.js → p-53a251ca.entry.js} +1 -1
  137. package/dist/cobalt/{p-11c5ce78.entry.js → p-56176aa0.entry.js} +1 -1
  138. package/dist/cobalt/{p-a32b20eb.entry.js → p-58ebb303.entry.js} +1 -1
  139. package/dist/cobalt/{p-4592ca00.entry.js → p-5a32b9a2.entry.js} +1 -1
  140. package/dist/cobalt/{p-2636b7eb.entry.js → p-5e678e88.entry.js} +1 -1
  141. package/dist/cobalt/{p-996f4e38.entry.js → p-60f948c4.entry.js} +1 -1
  142. package/dist/cobalt/p-63908a8d.entry.js +1 -0
  143. package/dist/cobalt/p-65c191aa.entry.js +1 -0
  144. package/dist/cobalt/{p-c2ebf0ec.entry.js → p-65d44da2.entry.js} +1 -1
  145. package/dist/cobalt/p-67a024dd.entry.js +1 -0
  146. package/dist/cobalt/{p-ee149fd2.entry.js → p-6974df59.entry.js} +1 -1
  147. package/dist/cobalt/{p-000a15b8.entry.js → p-69ecc933.entry.js} +1 -1
  148. package/dist/cobalt/p-6c1992c9.entry.js +1 -0
  149. package/dist/cobalt/{p-b821d9de.entry.js → p-6d4a660c.entry.js} +1 -1
  150. package/dist/cobalt/{p-f57dffca.entry.js → p-713637f2.entry.js} +1 -1
  151. package/dist/cobalt/{p-292b0389.entry.js → p-71ae1551.entry.js} +1 -1
  152. package/dist/cobalt/{p-91e73a92.entry.js → p-71dc8e4a.entry.js} +1 -1
  153. package/dist/cobalt/{p-aaca6dab.entry.js → p-71ee36a8.entry.js} +1 -1
  154. package/dist/cobalt/p-71fe35c4.entry.js +1 -0
  155. package/dist/cobalt/{p-08e42e00.entry.js → p-73313cbe.entry.js} +1 -1
  156. package/dist/cobalt/{p-7b5c555c.entry.js → p-763698b3.entry.js} +1 -1
  157. package/dist/cobalt/p-77e0d401.entry.js +1 -0
  158. package/dist/cobalt/{p-c91d4fc6.entry.js → p-78412feb.entry.js} +1 -1
  159. package/dist/cobalt/p-7beface1.entry.js +1 -0
  160. package/dist/cobalt/{p-f4e1c3c3.entry.js → p-7d1718ed.entry.js} +1 -1
  161. package/dist/cobalt/{p-826ee074.entry.js → p-7df18a52.entry.js} +1 -1
  162. package/dist/cobalt/p-7e678cbd.entry.js +1 -0
  163. package/dist/cobalt/{p-d0b2c418.entry.js → p-7fabd8ba.entry.js} +1 -1
  164. package/dist/cobalt/{p-23ab0cc5.entry.js → p-848f5ca4.entry.js} +1 -1
  165. package/dist/cobalt/{p-623cc195.entry.js → p-8680559b.entry.js} +1 -1
  166. package/dist/cobalt/p-87de5469.entry.js +1 -0
  167. package/dist/cobalt/p-87e62e2b.entry.js +1 -0
  168. package/dist/cobalt/{p-1861fe41.entry.js → p-8a2a2b6c.entry.js} +1 -1
  169. package/dist/cobalt/p-903237f9.entry.js +1 -0
  170. package/dist/cobalt/{p-2c9dba2f.entry.js → p-95f2ebb1.entry.js} +1 -1
  171. package/dist/cobalt/{p-24196410.entry.js → p-99df434b.entry.js} +1 -1
  172. package/dist/cobalt/{p-290066ef.entry.js → p-9adbab95.entry.js} +1 -1
  173. package/dist/cobalt/p-9dc01092.entry.js +1 -0
  174. package/dist/cobalt/p-9ee5bef3.entry.js +1 -0
  175. package/dist/cobalt/p-B1JT7us1.js +1 -0
  176. package/dist/cobalt/{p-BRbgGqLw.js → p-BVGGRfNG.js} +1 -1
  177. package/dist/cobalt/p-BmdKHBZP.js +1 -0
  178. package/dist/cobalt/p-BtliEQAT.js +1 -0
  179. package/dist/cobalt/p-COJdaKBU.js +1 -0
  180. package/dist/cobalt/{p-BAYo-RBt.js → p-CRxTFT_z.js} +1 -1
  181. package/dist/cobalt/p-CYN5B3IQ.js +1 -0
  182. package/dist/cobalt/p-DJkaRtbb.js +2 -0
  183. package/dist/cobalt/p-DU-KOQ8L.js +1 -0
  184. package/dist/cobalt/p-DXLeDZvr.js +1 -0
  185. package/dist/cobalt/{p-D_zA1Pv4.js → p-DgJovDdy.js} +1 -1
  186. package/dist/cobalt/p-RVQJEYxa.js +1 -0
  187. package/dist/cobalt/{p-ee2023da.entry.js → p-a27013e6.entry.js} +1 -1
  188. package/dist/cobalt/{p-2f9cbbd5.entry.js → p-a4eb298c.entry.js} +1 -1
  189. package/dist/cobalt/p-a56bd4a8.entry.js +1 -0
  190. package/dist/cobalt/{p-59963937.entry.js → p-a5eabecb.entry.js} +1 -1
  191. package/dist/cobalt/p-a5ee1fc2.entry.js +1 -0
  192. package/dist/cobalt/{p-fb2d1144.entry.js → p-a7cd61ce.entry.js} +1 -1
  193. package/dist/cobalt/{p-39a50e7f.entry.js → p-ad752791.entry.js} +1 -1
  194. package/dist/cobalt/{p-07416e31.entry.js → p-ae999b94.entry.js} +1 -1
  195. package/dist/cobalt/{p-4d65e713.entry.js → p-aed832d5.entry.js} +1 -1
  196. package/dist/cobalt/p-b2457431.entry.js +1 -0
  197. package/dist/cobalt/{p-6dd220e0.entry.js → p-b39a4999.entry.js} +1 -1
  198. package/dist/cobalt/p-b5dabdc3.entry.js +1 -0
  199. package/dist/cobalt/{p-8471abe2.entry.js → p-b67fb616.entry.js} +1 -1
  200. package/dist/cobalt/{p-f7eb1a40.entry.js → p-b9b73dcb.entry.js} +1 -1
  201. package/dist/cobalt/{p-f9a7b7c6.entry.js → p-ba39a965.entry.js} +1 -1
  202. package/dist/cobalt/{p-58d9b650.entry.js → p-be520bd5.entry.js} +1 -1
  203. package/dist/cobalt/{p-1dc55e43.entry.js → p-bee30373.entry.js} +1 -1
  204. package/dist/cobalt/{p-44c4e4a3.entry.js → p-c220362c.entry.js} +1 -1
  205. package/dist/cobalt/p-c4c997f3.entry.js +1 -0
  206. package/dist/cobalt/{p-a2462d7a.entry.js → p-c5464a98.entry.js} +1 -1
  207. package/dist/cobalt/p-c567533e.entry.js +1 -0
  208. package/dist/cobalt/{p-c30b4cb5.entry.js → p-cf5b91be.entry.js} +1 -1
  209. package/dist/cobalt/p-cfaaa684.entry.js +1 -0
  210. package/dist/cobalt/p-d00c3894.entry.js +1 -0
  211. package/dist/cobalt/p-d1e83525.entry.js +1 -0
  212. package/dist/cobalt/{p-44ea675f.entry.js → p-d5d8fa8b.entry.js} +1 -1
  213. package/dist/cobalt/p-d6215d80.entry.js +1 -0
  214. package/dist/cobalt/p-d6e7c258.entry.js +1 -0
  215. package/dist/cobalt/p-dabcbba7.entry.js +1 -0
  216. package/dist/cobalt/p-db623519.entry.js +1 -0
  217. package/dist/cobalt/{p-c7d7d7f7.entry.js → p-df529110.entry.js} +1 -1
  218. package/dist/cobalt/{p-1cc818ca.entry.js → p-ea24eea8.entry.js} +1 -1
  219. package/dist/cobalt/{p-d29bb0fa.entry.js → p-efb3cbb0.entry.js} +1 -1
  220. package/dist/cobalt/{p-f6691108.entry.js → p-f0898e21.entry.js} +1 -1
  221. package/dist/cobalt/{p-0c004735.entry.js → p-f2fa2ac0.entry.js} +1 -1
  222. package/dist/cobalt/p-f403eeec.entry.js +1 -0
  223. package/dist/cobalt/{p-e4264532.entry.js → p-f69804a6.entry.js} +1 -1
  224. package/dist/cobalt/p-xnrKkNWQ.js +1 -0
  225. package/dist/collection/collection-manifest.json +8 -0
  226. package/dist/collection/components/co-accordion/co-accordion.js +12 -2
  227. package/dist/collection/components/co-action-bar/co-action-bar.css +6 -0
  228. package/dist/collection/components/co-action-bar/co-action-bar.js +3 -2
  229. package/dist/collection/components/co-app-shell/co-app-shell.css +6 -0
  230. package/dist/collection/components/co-app-shell/co-app-shell.js +13 -2
  231. package/dist/collection/components/co-audio-player/co-audio-player.js +19 -7
  232. package/dist/collection/components/co-autocomplete/co-autocomplete.js +30 -17
  233. package/dist/collection/components/co-avatar/co-avatar.css +16 -2
  234. package/dist/collection/components/co-avatar/co-avatar.js +14 -4
  235. package/dist/collection/components/co-avatar-group/co-avatar-group.css +4 -0
  236. package/dist/collection/components/co-avatar-group/co-avatar-group.js +8 -3
  237. package/dist/collection/components/co-badge/co-badge.js +8 -1
  238. package/dist/collection/components/co-bottom-sheet/co-bottom-sheet.js +13 -4
  239. package/dist/collection/components/co-breadcrumb/co-breadcrumb.js +5 -1
  240. package/dist/collection/components/co-breadcrumb-item/co-breadcrumb-item.js +8 -2
  241. package/dist/collection/components/co-button/co-button.css +81 -6
  242. package/dist/collection/components/co-button/co-button.js +39 -11
  243. package/dist/collection/components/co-button-group/co-button-group.js +10 -3
  244. package/dist/collection/components/co-calendar/calendarMarks.js +40 -0
  245. package/dist/collection/components/co-calendar/co-calendar.css +19 -1
  246. package/dist/collection/components/co-calendar/co-calendar.js +84 -20
  247. package/dist/collection/components/co-calendar-month/co-calendar-month.js +1 -1
  248. package/dist/collection/components/co-calendar-timegrid/co-calendar-timegrid.js +36 -19
  249. package/dist/collection/components/co-card/co-card.js +11 -2
  250. package/dist/collection/components/co-carousel/co-carousel.css +10 -0
  251. package/dist/collection/components/co-carousel/co-carousel.js +17 -5
  252. package/dist/collection/components/co-carousel-item/co-carousel-item.js +1 -1
  253. package/dist/collection/components/co-checkbox/co-checkbox.css +43 -1
  254. package/dist/collection/components/co-checkbox/co-checkbox.js +39 -3
  255. package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +9 -4
  256. package/dist/collection/components/co-chip/co-chip.css +9 -0
  257. package/dist/collection/components/co-chip/co-chip.js +15 -2
  258. package/dist/collection/components/co-color-area/co-color-area.css +87 -0
  259. package/dist/collection/components/co-color-area/co-color-area.js +342 -0
  260. package/dist/collection/components/co-color-picker/co-color-picker.js +4 -2
  261. package/dist/collection/components/co-color-slider/co-color-slider.css +115 -0
  262. package/dist/collection/components/co-color-slider/co-color-slider.js +354 -0
  263. package/dist/collection/components/co-column-picker/co-column-picker.js +51 -25
  264. package/dist/collection/components/co-combobox/co-combobox.js +18 -4
  265. package/dist/collection/components/co-command-search/co-command-search.js +19 -8
  266. package/dist/collection/components/co-data-table/co-data-table.js +8 -3
  267. package/dist/collection/components/co-data-table-pagination/co-data-table-pagination.js +16 -4
  268. package/dist/collection/components/co-date-field/co-date-field.js +19 -13
  269. package/dist/collection/components/co-date-picker/co-date-picker.js +38 -25
  270. package/dist/collection/components/co-date-range/co-date-range.js +19 -10
  271. package/dist/collection/components/co-date-range-picker/co-date-range-picker.js +44 -30
  272. package/dist/collection/components/co-date-time-picker/co-date-time-picker.js +31 -22
  273. package/dist/collection/components/co-document-editor/change-throttle.js +30 -0
  274. package/dist/collection/components/co-document-editor/co-document-editor.css +438 -0
  275. package/dist/collection/components/co-document-editor/co-document-editor.js +1549 -0
  276. package/dist/collection/components/co-document-editor/document-props.js +40 -0
  277. package/dist/collection/components/co-document-editor/header-tools.js +11 -0
  278. package/dist/collection/components/co-document-editor/image-bar.js +66 -0
  279. package/dist/collection/components/co-document-editor/page-styles.js +90 -0
  280. package/dist/collection/components/co-document-editor/zoom.js +45 -0
  281. package/dist/collection/components/co-drawer/co-drawer.css +5 -0
  282. package/dist/collection/components/co-drawer/co-drawer.js +13 -0
  283. package/dist/collection/components/co-drive-card/co-drive-card.js +14 -1
  284. package/dist/collection/components/co-drop-zone/co-drop-zone.js +7 -2
  285. package/dist/collection/components/co-emoji-picker/co-emoji-picker.css +4 -0
  286. package/dist/collection/components/co-emoji-picker/co-emoji-picker.js +11 -2
  287. package/dist/collection/components/co-empty-state/co-empty-state.js +4 -2
  288. package/dist/collection/components/co-event-calendar/co-event-calendar.js +16 -4
  289. package/dist/collection/components/co-event-popover/co-event-popover.js +18 -6
  290. package/dist/collection/components/co-fab/co-fab.css +8 -0
  291. package/dist/collection/components/co-fab/co-fab.js +17 -8
  292. package/dist/collection/components/co-file-field/co-file-field.js +16 -11
  293. package/dist/collection/components/co-file-type-tile/co-file-type-tile.js +9 -2
  294. package/dist/collection/components/co-gradient-bar/co-gradient-bar.css +143 -0
  295. package/dist/collection/components/co-gradient-bar/co-gradient-bar.js +412 -0
  296. package/dist/collection/components/co-helper-text/co-helper-text.js +4 -2
  297. package/dist/collection/components/co-icon/co-icon.js +6 -2
  298. package/dist/collection/components/co-icon-button/co-icon-button.css +104 -19
  299. package/dist/collection/components/co-icon-button/co-icon-button.js +125 -10
  300. package/dist/collection/components/co-input/co-input.css +125 -0
  301. package/dist/collection/components/co-input/co-input.js +48 -11
  302. package/dist/collection/components/co-json-field/co-json-field.js +19 -12
  303. package/dist/collection/components/co-kbd/co-kbd.css +99 -0
  304. package/dist/collection/components/co-kbd/co-kbd.js +298 -0
  305. package/dist/collection/components/co-lightbox/co-lightbox.js +4 -4
  306. package/dist/collection/components/co-list-footer/co-list-footer.js +4 -1
  307. package/dist/collection/components/co-list-item/co-list-item.js +7 -4
  308. package/dist/collection/components/co-loader/co-loader.js +5 -0
  309. package/dist/collection/components/co-media-thumb/co-media-thumb.js +9 -2
  310. package/dist/collection/components/co-menu/co-menu.css +70 -0
  311. package/dist/collection/components/co-menu/co-menu.js +146 -6
  312. package/dist/collection/components/co-menu-divider/co-menu-divider.css +21 -0
  313. package/dist/collection/components/co-menu-divider/co-menu-divider.js +2 -1
  314. package/dist/collection/components/co-menu-item/co-menu-item.css +56 -6
  315. package/dist/collection/components/co-menu-item/co-menu-item.js +60 -4
  316. package/dist/collection/components/co-modal/co-modal.css +218 -1
  317. package/dist/collection/components/co-modal/co-modal.js +354 -12
  318. package/dist/collection/components/co-navbar/co-navbar.css +7 -0
  319. package/dist/collection/components/co-navbar/co-navbar.js +4 -2
  320. package/dist/collection/components/co-number-field/co-number-field.js +29 -15
  321. package/dist/collection/components/co-option-list/co-option-list.css +102 -21
  322. package/dist/collection/components/co-option-list/co-option-list.js +37 -16
  323. package/dist/collection/components/co-overlay/co-overlay.css +4 -0
  324. package/dist/collection/components/co-overlay/co-overlay.js +17 -3
  325. package/dist/collection/components/co-page-header/co-page-header.js +4 -1
  326. package/dist/collection/components/co-phone-field/co-phone-field.js +1 -1
  327. package/dist/collection/components/co-popover/co-popover.css +20 -2
  328. package/dist/collection/components/co-popover/co-popover.js +148 -10
  329. package/dist/collection/components/co-progress-bar/co-progress-bar.js +5 -2
  330. package/dist/collection/components/co-progress-circle/co-progress-circle.js +5 -2
  331. package/dist/collection/components/co-provider-logo/co-provider-logo.js +3 -0
  332. package/dist/collection/components/co-radio/co-radio.js +11 -3
  333. package/dist/collection/components/co-radio-group/co-radio-group.js +9 -4
  334. package/dist/collection/components/co-rating/co-rating.js +25 -13
  335. package/dist/collection/components/co-ref-field/co-ref-field.css +14 -0
  336. package/dist/collection/components/co-ref-field/co-ref-field.js +55 -27
  337. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.js +66 -111
  338. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.css +12 -0
  339. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.js +127 -19
  340. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.js +16 -1
  341. package/dist/collection/components/co-row/co-row.js +5 -2
  342. package/dist/collection/components/co-segmented-bar/co-segmented-bar.js +9 -3
  343. package/dist/collection/components/co-select/co-select.css +207 -11
  344. package/dist/collection/components/co-select/co-select.js +198 -48
  345. package/dist/collection/components/co-select/virtualRows.js +57 -0
  346. package/dist/collection/components/co-separator/co-separator.js +8 -1
  347. package/dist/collection/components/co-sidebar/co-sidebar.js +10 -2
  348. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.css +15 -0
  349. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +20 -4
  350. package/dist/collection/components/co-skeleton/co-skeleton.js +4 -1
  351. package/dist/collection/components/co-slider/co-slider.css +155 -5
  352. package/dist/collection/components/co-slider/co-slider.js +263 -32
  353. package/dist/collection/components/co-swatch-grid/co-swatch-grid.css +56 -0
  354. package/dist/collection/components/co-swatch-grid/co-swatch-grid.js +293 -0
  355. package/dist/collection/components/co-switch/co-switch.css +4 -0
  356. package/dist/collection/components/co-switch/co-switch.js +12 -3
  357. package/dist/collection/components/co-tab/co-tab.css +60 -0
  358. package/dist/collection/components/co-tab/co-tab.js +44 -6
  359. package/dist/collection/components/co-tab-group/co-tab-group.css +24 -0
  360. package/dist/collection/components/co-tab-group/co-tab-group.js +133 -2
  361. package/dist/collection/components/co-tab-group/revealTab.js +26 -0
  362. package/dist/collection/components/co-tags-field/co-tags-field.js +21 -14
  363. package/dist/collection/components/co-textarea/co-textarea.js +4 -4
  364. package/dist/collection/components/co-tile/co-tile.css +63 -0
  365. package/dist/collection/components/co-tile/co-tile.js +167 -0
  366. package/dist/collection/components/co-time-field/co-time-field.js +9 -4
  367. package/dist/collection/components/co-toast/co-toast.css +11 -0
  368. package/dist/collection/components/co-toast/co-toast.js +13 -4
  369. package/dist/collection/components/co-toggle-button/co-toggle-button.css +106 -0
  370. package/dist/collection/components/co-toggle-button/co-toggle-button.js +91 -15
  371. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.css +21 -0
  372. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +41 -11
  373. package/dist/collection/components/co-tooltip/co-tooltip.css +36 -0
  374. package/dist/collection/components/co-tooltip/co-tooltip.js +61 -3
  375. package/dist/collection/components/co-transfer-list/co-transfer-list.js +19 -10
  376. package/dist/collection/components/co-tree-item/co-tree-item.css +235 -0
  377. package/dist/collection/components/co-tree-item/co-tree-item.js +355 -0
  378. package/dist/collection/components/co-tree-item/treeItemI18n.js +16 -0
  379. package/dist/collection/components/co-video/co-video.css +11 -0
  380. package/dist/collection/components/co-video/co-video.js +41 -22
  381. package/dist/collection/utils/color.js +9 -5
  382. package/dist/collection/utils/dragMove.js +95 -0
  383. package/dist/collection/utils/gradientBarI18n.js +24 -0
  384. package/dist/collection/utils/gradientStops.js +142 -0
  385. package/dist/collection/utils/hsv.js +114 -0
  386. package/dist/collection/utils/kbdI18n.js +29 -0
  387. package/dist/collection/utils/positioning.js +44 -18
  388. package/dist/collection/utils/rich-text-host.js +109 -0
  389. package/dist/collection/utils/richTextI18n.js +45 -0
  390. package/dist/collection/utils/submenu.js +23 -3
  391. package/dist/collection/utils/swatchGridI18n.js +14 -0
  392. package/dist/collection/utils/test/fake-block-layout.js +41 -0
  393. package/dist/collection/utils/test/prosemirror-dom-shim.js +17 -0
  394. package/dist/collection/utils/test/shared-contract-css.js +9 -0
  395. package/dist/components/co-accordion.js +1 -1
  396. package/dist/components/co-action-bar.js +1 -1
  397. package/dist/components/co-app-shell.js +1 -1
  398. package/dist/components/co-audio-player.js +1 -1
  399. package/dist/components/co-autocomplete.js +1 -1
  400. package/dist/components/co-avatar-group.js +1 -1
  401. package/dist/components/co-avatar.js +1 -1
  402. package/dist/components/co-badge.js +1 -1
  403. package/dist/components/co-bottom-sheet.js +1 -1
  404. package/dist/components/co-breadcrumb-item.js +1 -1
  405. package/dist/components/co-breadcrumb.js +1 -1
  406. package/dist/components/co-button-group.js +1 -1
  407. package/dist/components/co-button.js +1 -1
  408. package/dist/components/co-calendar-month.js +1 -1
  409. package/dist/components/co-calendar-timegrid.js +1 -1
  410. package/dist/components/co-calendar.js +1 -1
  411. package/dist/components/co-card.js +1 -1
  412. package/dist/components/co-carousel-item.js +1 -1
  413. package/dist/components/co-carousel.js +1 -1
  414. package/dist/components/co-checkbox-group.js +1 -1
  415. package/dist/components/co-checkbox.js +1 -1
  416. package/dist/components/co-chip.js +1 -1
  417. package/dist/components/co-color-area.d.ts +11 -0
  418. package/dist/components/co-color-area.js +1 -0
  419. package/dist/components/co-color-picker.js +1 -1
  420. package/dist/components/co-color-slider.d.ts +11 -0
  421. package/dist/components/co-color-slider.js +1 -0
  422. package/dist/components/co-column-picker.js +1 -1
  423. package/dist/components/co-combobox.js +1 -1
  424. package/dist/components/co-command-search.js +1 -1
  425. package/dist/components/co-data-table-pagination.js +1 -1
  426. package/dist/components/co-data-table.js +1 -1
  427. package/dist/components/co-date-field.js +1 -1
  428. package/dist/components/co-date-picker.js +1 -1
  429. package/dist/components/co-date-range-picker.js +1 -1
  430. package/dist/components/co-date-range.js +1 -1
  431. package/dist/components/co-date-time-picker.js +1 -1
  432. package/dist/components/co-document-editor.d.ts +11 -0
  433. package/dist/components/co-document-editor.js +1 -0
  434. package/dist/components/co-drawer.js +1 -1
  435. package/dist/components/co-drive-card.js +1 -1
  436. package/dist/components/co-drop-zone.js +1 -1
  437. package/dist/components/co-emoji-picker.js +1 -1
  438. package/dist/components/co-empty-state.js +1 -1
  439. package/dist/components/co-event-calendar.js +1 -1
  440. package/dist/components/co-event-popover.js +1 -1
  441. package/dist/components/co-fab.js +1 -1
  442. package/dist/components/co-file-field.js +1 -1
  443. package/dist/components/co-file-type-tile.js +1 -1
  444. package/dist/components/co-gradient-bar.d.ts +11 -0
  445. package/dist/components/co-gradient-bar.js +1 -0
  446. package/dist/components/co-helper-text.js +1 -1
  447. package/dist/components/co-icon-button.js +1 -1
  448. package/dist/components/co-icon.js +1 -1
  449. package/dist/components/co-input.js +1 -1
  450. package/dist/components/co-json-field.js +1 -1
  451. package/dist/components/co-kbd.d.ts +11 -0
  452. package/dist/components/co-kbd.js +1 -0
  453. package/dist/components/co-lightbox.js +1 -1
  454. package/dist/components/co-list-footer.js +1 -1
  455. package/dist/components/co-list-item.js +1 -1
  456. package/dist/components/co-media-thumb.js +1 -1
  457. package/dist/components/co-menu-divider.js +1 -1
  458. package/dist/components/co-menu-item.js +1 -1
  459. package/dist/components/co-menu.js +1 -1
  460. package/dist/components/co-modal.js +1 -1
  461. package/dist/components/co-navbar.js +1 -1
  462. package/dist/components/co-number-field.js +1 -1
  463. package/dist/components/co-option-list.js +1 -1
  464. package/dist/components/co-overlay.js +1 -1
  465. package/dist/components/co-page-header.js +1 -1
  466. package/dist/components/co-phone-field.js +1 -1
  467. package/dist/components/co-popover.js +1 -1
  468. package/dist/components/co-progress-bar.js +1 -1
  469. package/dist/components/co-progress-circle.js +1 -1
  470. package/dist/components/co-radio-group.js +1 -1
  471. package/dist/components/co-radio.js +1 -1
  472. package/dist/components/co-rating.js +1 -1
  473. package/dist/components/co-ref-field.js +1 -1
  474. package/dist/components/co-rich-text-editor.js +1 -1
  475. package/dist/components/co-rich-text-toolbar.js +1 -1
  476. package/dist/components/co-rich-text-viewer.js +1 -1
  477. package/dist/components/co-row.js +1 -1
  478. package/dist/components/co-segmented-bar.js +1 -1
  479. package/dist/components/co-select.js +1 -1
  480. package/dist/components/co-separator.js +1 -1
  481. package/dist/components/co-sidebar-nav.js +1 -1
  482. package/dist/components/co-sidebar.js +1 -1
  483. package/dist/components/co-skeleton.js +1 -1
  484. package/dist/components/co-slider.js +1 -1
  485. package/dist/components/co-swatch-grid.d.ts +11 -0
  486. package/dist/components/co-swatch-grid.js +1 -0
  487. package/dist/components/co-switch.js +1 -1
  488. package/dist/components/co-tab-group.js +1 -1
  489. package/dist/components/co-tab.js +1 -1
  490. package/dist/components/co-tags-field.js +1 -1
  491. package/dist/components/co-textarea.js +1 -1
  492. package/dist/components/co-tile.d.ts +11 -0
  493. package/dist/components/co-tile.js +1 -0
  494. package/dist/components/co-time-field.js +1 -1
  495. package/dist/components/co-toast.js +1 -1
  496. package/dist/components/co-toggle-button-group.js +1 -1
  497. package/dist/components/co-toggle-button.js +1 -1
  498. package/dist/components/co-tooltip.js +1 -1
  499. package/dist/components/co-transfer-list.js +1 -1
  500. package/dist/components/co-tree-item.d.ts +11 -0
  501. package/dist/components/co-tree-item.js +1 -0
  502. package/dist/components/co-video.js +1 -1
  503. package/dist/components/index.js +1 -1
  504. package/dist/components/p-8XzG8pzY.js +1 -0
  505. package/dist/components/p-9VoFSbIH.js +1 -0
  506. package/dist/components/p-B1JT7us1.js +1 -0
  507. package/dist/components/{p-Dc_Kbari.js → p-B3Egz082.js} +1 -1
  508. package/dist/components/p-B9wdMd_0.js +1 -0
  509. package/dist/components/p-BRZci8B3.js +1 -0
  510. package/dist/components/{p-BRbgGqLw.js → p-BVGGRfNG.js} +1 -1
  511. package/dist/components/{p-B56LX2SH.js → p-BVdCvEza.js} +1 -1
  512. package/dist/components/p-BdmzslA5.js +1 -0
  513. package/dist/components/p-BmdKHBZP.js +1 -0
  514. package/dist/components/p-BtliEQAT.js +1 -0
  515. package/dist/components/{p-CT2enQ6h.js → p-Bw_b_czs.js} +1 -1
  516. package/dist/components/{p-NNxjElcX.js → p-C4sZjIDj.js} +1 -1
  517. package/dist/components/{p-Nt4JJxbL.js → p-C6WHpL5X.js} +1 -1
  518. package/dist/components/p-COJdaKBU.js +1 -0
  519. package/dist/components/p-COozgrEk.js +1 -0
  520. package/dist/components/{p-BAYo-RBt.js → p-CRxTFT_z.js} +1 -1
  521. package/dist/components/{p-uxdXViMV.js → p-CiYPJW0B.js} +1 -1
  522. package/dist/components/p-Cnfd6Zze.js +1 -0
  523. package/dist/components/{p-BhCVadcA.js → p-CxWo3qDo.js} +1 -1
  524. package/dist/components/p-D4XP17VP.js +1 -0
  525. package/dist/components/{p-e5KibEs8.js → p-DJ468fPu.js} +1 -1
  526. package/dist/components/p-DU-KOQ8L.js +1 -0
  527. package/dist/components/p-DXLeDZvr.js +1 -0
  528. package/dist/components/{p-DvR45CLa.js → p-Dn2wblrA.js} +1 -1
  529. package/dist/components/p-Dnz99Ox_.js +1 -0
  530. package/dist/components/p-DsuFNmTI.js +1 -0
  531. package/dist/components/{p-Du_CgT5E.js → p-Du8EpQb-.js} +1 -1
  532. package/dist/components/{p-DFlJMEJ-.js → p-DymSqdlK.js} +1 -1
  533. package/dist/components/p-Hi57w2_2.js +1 -0
  534. package/dist/components/{p-DNJAIVfI.js → p-KK2vAKs-.js} +1 -1
  535. package/dist/components/p-RVQJEYxa.js +1 -0
  536. package/dist/components/p-TGRbLkLz.js +1 -0
  537. package/dist/components/p-VcrjNCew.js +1 -0
  538. package/dist/components/{p-Dxa7c4Ap.js → p-dnaee7fS.js} +1 -1
  539. package/dist/components/p-nrwDl_gx.js +1 -0
  540. package/dist/components/{p-P4HlMBlL.js → p-zJ3pjFzW.js} +1 -1
  541. package/dist/esm/co-accordion.entry.js +3 -3
  542. package/dist/esm/co-action-bar.entry.js +3 -3
  543. package/dist/esm/co-app-shell.entry.js +3 -3
  544. package/dist/esm/co-audio-player.entry.js +4 -4
  545. package/dist/esm/co-autocomplete.entry.js +12 -5
  546. package/dist/esm/co-avatar-group.entry.js +3 -3
  547. package/dist/esm/co-avatar.entry.js +7 -4
  548. package/dist/esm/co-badge.entry.js +2 -2
  549. package/dist/esm/co-bottom-sheet.entry.js +5 -5
  550. package/dist/esm/co-breadcrumb-item.entry.js +3 -3
  551. package/dist/esm/co-breadcrumb.entry.js +2 -2
  552. package/dist/esm/co-button-group.entry.js +4 -3
  553. package/dist/esm/co-button.entry.js +9 -7
  554. package/dist/esm/co-calendar-month_2.entry.js +16 -4
  555. package/dist/esm/co-calendar_3.entry.js +76 -27
  556. package/dist/esm/co-card.entry.js +3 -3
  557. package/dist/esm/co-carousel-item.entry.js +2 -2
  558. package/dist/esm/co-carousel.entry.js +6 -3
  559. package/dist/esm/co-checkbox-group.entry.js +4 -4
  560. package/dist/esm/co-checkbox.entry.js +13 -5
  561. package/dist/esm/co-chip_2.entry.js +20 -7
  562. package/dist/esm/co-color-area.entry.js +167 -0
  563. package/dist/esm/co-color-picker.entry.js +5 -5
  564. package/dist/esm/co-color-slider.entry.js +187 -0
  565. package/dist/esm/co-column-picker.entry.js +23 -3
  566. package/dist/esm/co-combobox.entry.js +5 -5
  567. package/dist/esm/co-command-search.entry.js +5 -5
  568. package/dist/esm/co-data-table-pagination.entry.js +5 -5
  569. package/dist/esm/co-data-table.entry.js +3 -3
  570. package/dist/esm/co-date-picker.entry.js +10 -2
  571. package/dist/esm/co-date-range-picker.entry.js +11 -2
  572. package/dist/esm/co-date-range.entry.js +8 -2
  573. package/dist/esm/co-date-time-picker.entry.js +11 -4
  574. package/dist/esm/co-document-editor.entry.js +1165 -0
  575. package/dist/esm/co-drive-card.entry.js +2 -2
  576. package/dist/esm/co-drop-zone.entry.js +2 -2
  577. package/dist/esm/co-emoji-picker.entry.js +3 -3
  578. package/dist/esm/co-empty-state.entry.js +3 -3
  579. package/dist/esm/co-event-calendar.entry.js +5 -3
  580. package/dist/esm/co-event-popover.entry.js +7 -3
  581. package/dist/esm/co-fab.entry.js +7 -3
  582. package/dist/esm/co-file-field.entry.js +12 -8
  583. package/dist/esm/co-file-type-tile.entry.js +3 -3
  584. package/dist/esm/co-gradient-bar.entry.js +218 -0
  585. package/dist/esm/co-helper-text.entry.js +3 -3
  586. package/dist/esm/co-icon-button.entry.js +48 -9
  587. package/dist/esm/co-icon.entry.js +3 -3
  588. package/dist/esm/co-input.entry.js +14 -8
  589. package/dist/esm/co-json-field.entry.js +10 -5
  590. package/dist/esm/{co-tooltip.entry.js → co-kbd_2.entry.js} +194 -7
  591. package/dist/esm/co-lightbox.entry.js +5 -5
  592. package/dist/esm/co-list-footer.entry.js +2 -2
  593. package/dist/esm/co-list-item.entry.js +5 -5
  594. package/dist/esm/co-loader.entry.js +1 -1
  595. package/dist/esm/co-media-thumb.entry.js +3 -3
  596. package/dist/esm/co-menu-divider.entry.js +3 -3
  597. package/dist/esm/co-menu-item.entry.js +39 -41
  598. package/dist/esm/co-menu.entry.js +81 -5
  599. package/dist/esm/co-modal.entry.js +350 -7
  600. package/dist/esm/co-navbar.entry.js +3 -3
  601. package/dist/esm/co-number-field.entry.js +11 -5
  602. package/dist/esm/co-overlay.entry.js +8 -4
  603. package/dist/esm/co-page-header.entry.js +2 -2
  604. package/dist/esm/co-phone-field.entry.js +3 -3
  605. package/dist/esm/co-popover.entry.js +69 -6
  606. package/dist/esm/co-progress-bar.entry.js +3 -3
  607. package/dist/esm/co-progress-circle.entry.js +3 -3
  608. package/dist/esm/co-provider-logo_2.entry.js +2 -2
  609. package/dist/esm/co-radio-group.entry.js +4 -4
  610. package/dist/esm/co-radio.entry.js +4 -4
  611. package/dist/esm/co-rating.entry.js +11 -4
  612. package/dist/esm/co-ref-field.entry.js +14 -5
  613. package/dist/esm/co-rich-text-editor.entry.js +40 -92
  614. package/dist/esm/co-rich-text-toolbar.entry.js +80 -20
  615. package/dist/esm/co-rich-text-viewer.entry.js +9 -2
  616. package/dist/esm/co-row.entry.js +3 -3
  617. package/dist/esm/co-segmented-bar.entry.js +3 -3
  618. package/dist/esm/co-select.entry.js +171 -29
  619. package/dist/esm/co-separator.entry.js +2 -2
  620. package/dist/esm/co-sidebar-nav.entry.js +20 -5
  621. package/dist/esm/co-sidebar.entry.js +3 -3
  622. package/dist/esm/co-slider.entry.js +209 -23
  623. package/dist/esm/co-swatch-grid.entry.js +119 -0
  624. package/dist/esm/co-switch.entry.js +5 -5
  625. package/dist/esm/co-tab-group.entry.js +113 -4
  626. package/dist/esm/co-tab.entry.js +15 -5
  627. package/dist/esm/co-tags-field.entry.js +13 -8
  628. package/dist/esm/co-textarea.entry.js +6 -6
  629. package/dist/esm/co-tile.entry.js +59 -0
  630. package/dist/esm/co-time-field.entry.js +5 -2
  631. package/dist/esm/co-toast.entry.js +3 -3
  632. package/dist/esm/co-toggle-button-group.entry.js +29 -5
  633. package/dist/esm/co-toggle-button.entry.js +70 -6
  634. package/dist/esm/co-transfer-list.entry.js +7 -3
  635. package/dist/esm/co-tree-item.entry.js +108 -0
  636. package/dist/esm/co-video.entry.js +11 -3
  637. package/dist/esm/cobalt.js +3 -3
  638. package/dist/esm/{color-BRbgGqLw.js → color-BVGGRfNG.js} +10 -6
  639. package/dist/esm/{fieldChip-uyggU8VV.js → fieldChip-B2ctp2m6.js} +1 -1
  640. package/dist/esm/gradientStops-DDK0y8ra.js +145 -0
  641. package/dist/esm/hsv-COJdaKBU.js +90 -0
  642. package/dist/esm/index-Cpo8HTwr.js +142 -0
  643. package/dist/esm/{index-DH5lfRNj.js → index-DJkaRtbb.js} +67 -28
  644. package/dist/esm/loader.js +3 -3
  645. package/dist/esm/{index-BBIYyvq-.js → pagination-D9OfZUnY.js} +1728 -297
  646. package/dist/esm/{positioning-DFHRS9cJ.js → positioning-BtliEQAT.js} +45 -19
  647. package/dist/esm/{requiredMark-BCJUuZvC.js → requiredMark-D5C5NzOE.js} +1 -1
  648. package/dist/esm/rich-text-host-BmdKHBZP.js +111 -0
  649. package/dist/esm/{richTextI18n-BYKAgwq3.js → richTextI18n-xnrKkNWQ.js} +45 -0
  650. package/dist/esm/submenu-DU-KOQ8L.js +57 -0
  651. package/dist/esm/{toolbar-config-BAYo-RBt.js → toolbar-config-CRxTFT_z.js} +32 -0
  652. package/dist/types/components/co-accordion/co-accordion.d.ts +10 -0
  653. package/dist/types/components/co-action-bar/co-action-bar.d.ts +1 -0
  654. package/dist/types/components/co-app-shell/co-app-shell.d.ts +11 -0
  655. package/dist/types/components/co-audio-player/co-audio-player.d.ts +16 -0
  656. package/dist/types/components/co-autocomplete/co-autocomplete.d.ts +21 -0
  657. package/dist/types/components/co-avatar/co-avatar.d.ts +11 -2
  658. package/dist/types/components/co-avatar-group/co-avatar-group.d.ts +5 -0
  659. package/dist/types/components/co-badge/co-badge.d.ts +7 -0
  660. package/dist/types/components/co-bottom-sheet/co-bottom-sheet.d.ts +9 -0
  661. package/dist/types/components/co-breadcrumb/co-breadcrumb.d.ts +4 -0
  662. package/dist/types/components/co-breadcrumb-item/co-breadcrumb-item.d.ts +6 -0
  663. package/dist/types/components/co-button/co-button.d.ts +12 -4
  664. package/dist/types/components/co-button-group/co-button-group.d.ts +7 -0
  665. package/dist/types/components/co-calendar/calendarMarks.d.ts +15 -0
  666. package/dist/types/components/co-calendar/co-calendar.d.ts +18 -0
  667. package/dist/types/components/co-calendar-timegrid/co-calendar-timegrid.d.ts +23 -0
  668. package/dist/types/components/co-card/co-card.d.ts +9 -0
  669. package/dist/types/components/co-carousel/co-carousel.d.ts +12 -0
  670. package/dist/types/components/co-checkbox/co-checkbox.d.ts +15 -0
  671. package/dist/types/components/co-checkbox-group/co-checkbox-group.d.ts +5 -0
  672. package/dist/types/components/co-chip/co-chip.d.ts +13 -0
  673. package/dist/types/components/co-color-area/co-color-area.d.ts +65 -0
  674. package/dist/types/components/co-color-picker/co-color-picker.d.ts +2 -0
  675. package/dist/types/components/co-color-slider/co-color-slider.d.ts +62 -0
  676. package/dist/types/components/co-column-picker/co-column-picker.d.ts +32 -0
  677. package/dist/types/components/co-combobox/co-combobox.d.ts +14 -0
  678. package/dist/types/components/co-command-search/co-command-search.d.ts +15 -0
  679. package/dist/types/components/co-data-table/co-data-table.d.ts +5 -0
  680. package/dist/types/components/co-data-table-pagination/co-data-table-pagination.d.ts +12 -0
  681. package/dist/types/components/co-date-field/co-date-field.d.ts +11 -0
  682. package/dist/types/components/co-date-picker/co-date-picker.d.ts +30 -0
  683. package/dist/types/components/co-date-range/co-date-range.d.ts +12 -0
  684. package/dist/types/components/co-date-range-picker/co-date-range-picker.d.ts +33 -0
  685. package/dist/types/components/co-date-time-picker/co-date-time-picker.d.ts +22 -1
  686. package/dist/types/components/co-document-editor/change-throttle.d.ts +9 -0
  687. package/dist/types/components/co-document-editor/co-document-editor.d.ts +284 -0
  688. package/dist/types/components/co-document-editor/document-props.d.ts +6 -0
  689. package/dist/types/components/co-document-editor/header-tools.d.ts +11 -0
  690. package/dist/types/components/co-document-editor/image-bar.d.ts +50 -0
  691. package/dist/types/components/co-document-editor/page-styles.d.ts +1 -0
  692. package/dist/types/components/co-document-editor/zoom.d.ts +26 -0
  693. package/dist/types/components/co-drawer/co-drawer.d.ts +13 -0
  694. package/dist/types/components/co-drive-card/co-drive-card.d.ts +13 -0
  695. package/dist/types/components/co-drop-zone/co-drop-zone.d.ts +6 -1
  696. package/dist/types/components/co-emoji-picker/co-emoji-picker.d.ts +9 -0
  697. package/dist/types/components/co-empty-state/co-empty-state.d.ts +2 -0
  698. package/dist/types/components/co-event-calendar/co-event-calendar.d.ts +12 -16
  699. package/dist/types/components/co-event-popover/co-event-popover.d.ts +13 -0
  700. package/dist/types/components/co-fab/co-fab.d.ts +11 -0
  701. package/dist/types/components/co-file-field/co-file-field.d.ts +6 -0
  702. package/dist/types/components/co-file-type-tile/co-file-type-tile.d.ts +7 -0
  703. package/dist/types/components/co-gradient-bar/co-gradient-bar.d.ts +77 -0
  704. package/dist/types/components/co-helper-text/co-helper-text.d.ts +2 -0
  705. package/dist/types/components/co-icon/co-icon.d.ts +4 -0
  706. package/dist/types/components/co-icon-button/co-icon-button.d.ts +39 -2
  707. package/dist/types/components/co-input/co-input.d.ts +25 -5
  708. package/dist/types/components/co-json-field/co-json-field.d.ts +11 -0
  709. package/dist/types/components/co-kbd/co-kbd.d.ts +50 -0
  710. package/dist/types/components/co-list-footer/co-list-footer.d.ts +3 -0
  711. package/dist/types/components/co-list-item/co-list-item.d.ts +3 -0
  712. package/dist/types/components/co-loader/co-loader.d.ts +5 -0
  713. package/dist/types/components/co-media-thumb/co-media-thumb.d.ts +7 -0
  714. package/dist/types/components/co-menu/co-menu.d.ts +42 -1
  715. package/dist/types/components/co-menu-divider/co-menu-divider.d.ts +1 -0
  716. package/dist/types/components/co-menu-item/co-menu-item.d.ts +19 -0
  717. package/dist/types/components/co-modal/co-modal.d.ts +126 -5
  718. package/dist/types/components/co-navbar/co-navbar.d.ts +2 -0
  719. package/dist/types/components/co-number-field/co-number-field.d.ts +20 -0
  720. package/dist/types/components/co-option-list/co-option-list.d.ts +29 -1
  721. package/dist/types/components/co-option-list/optionListLogic.d.ts +3 -0
  722. package/dist/types/components/co-overlay/co-overlay.d.ts +10 -0
  723. package/dist/types/components/co-page-header/co-page-header.d.ts +3 -0
  724. package/dist/types/components/co-popover/co-popover.d.ts +51 -0
  725. package/dist/types/components/co-progress-bar/co-progress-bar.d.ts +3 -0
  726. package/dist/types/components/co-progress-circle/co-progress-circle.d.ts +3 -0
  727. package/dist/types/components/co-provider-logo/co-provider-logo.d.ts +3 -0
  728. package/dist/types/components/co-radio/co-radio.d.ts +8 -0
  729. package/dist/types/components/co-radio-group/co-radio-group.d.ts +5 -0
  730. package/dist/types/components/co-rating/co-rating.d.ts +15 -0
  731. package/dist/types/components/co-ref-field/co-ref-field.d.ts +42 -0
  732. package/dist/types/components/co-rich-text-editor/co-rich-text-editor.d.ts +31 -5
  733. package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +20 -2
  734. package/dist/types/components/co-rich-text-viewer/co-rich-text-viewer.d.ts +8 -0
  735. package/dist/types/components/co-row/co-row.d.ts +3 -0
  736. package/dist/types/components/co-segmented-bar/co-segmented-bar.d.ts +6 -0
  737. package/dist/types/components/co-select/co-select.d.ts +73 -5
  738. package/dist/types/components/co-select/virtualRows.d.ts +44 -0
  739. package/dist/types/components/co-separator/co-separator.d.ts +7 -0
  740. package/dist/types/components/co-sidebar/co-sidebar.d.ts +8 -0
  741. package/dist/types/components/co-sidebar-nav/co-sidebar-nav.d.ts +1 -0
  742. package/dist/types/components/co-skeleton/co-skeleton.d.ts +3 -0
  743. package/dist/types/components/co-slider/co-slider.d.ts +160 -1
  744. package/dist/types/components/co-swatch-grid/co-swatch-grid.d.ts +38 -0
  745. package/dist/types/components/co-switch/co-switch.d.ts +9 -0
  746. package/dist/types/components/co-tab/co-tab.d.ts +20 -2
  747. package/dist/types/components/co-tab-group/co-tab-group.d.ts +46 -0
  748. package/dist/types/components/co-tab-group/revealTab.d.ts +29 -0
  749. package/dist/types/components/co-tags-field/co-tags-field.d.ts +11 -0
  750. package/dist/types/components/co-tile/co-tile.d.ts +45 -0
  751. package/dist/types/components/co-time-field/co-time-field.d.ts +5 -0
  752. package/dist/types/components/co-toast/co-toast.d.ts +9 -0
  753. package/dist/types/components/co-toggle-button/co-toggle-button.d.ts +45 -2
  754. package/dist/types/components/co-toggle-button-group/co-toggle-button-group.d.ts +30 -2
  755. package/dist/types/components/co-tooltip/co-tooltip.d.ts +22 -0
  756. package/dist/types/components/co-transfer-list/co-transfer-list.d.ts +12 -0
  757. package/dist/types/components/co-tree-item/co-tree-item.d.ts +75 -0
  758. package/dist/types/components/co-tree-item/treeItemI18n.d.ts +6 -0
  759. package/dist/types/components/co-video/co-video.d.ts +31 -0
  760. package/dist/types/components.d.ts +3905 -85
  761. package/dist/types/utils/color.d.ts +9 -1
  762. package/dist/types/utils/dragMove.d.ts +63 -0
  763. package/dist/types/utils/gradientBarI18n.d.ts +8 -0
  764. package/dist/types/utils/gradientStops.d.ts +63 -0
  765. package/dist/types/utils/hsv.d.ts +44 -0
  766. package/dist/types/utils/kbdI18n.d.ts +25 -0
  767. package/dist/types/utils/positioning.d.ts +24 -0
  768. package/dist/types/utils/rich-text-host.d.ts +41 -0
  769. package/dist/types/utils/richTextI18n.d.ts +15 -0
  770. package/dist/types/utils/submenu.d.ts +16 -2
  771. package/dist/types/utils/swatchGridI18n.d.ts +6 -0
  772. package/dist/types/utils/test/fake-block-layout.d.ts +7 -0
  773. package/dist/types/utils/test/prosemirror-dom-shim.d.ts +1 -0
  774. package/dist/types/utils/test/shared-contract-css.d.ts +9 -0
  775. package/package.json +5 -5
  776. package/dist/cobalt/p-0678c797.entry.js +0 -1
  777. package/dist/cobalt/p-1d3a79af.entry.js +0 -1
  778. package/dist/cobalt/p-216a63ee.entry.js +0 -1
  779. package/dist/cobalt/p-3d31c575.entry.js +0 -1
  780. package/dist/cobalt/p-416795f5.entry.js +0 -1
  781. package/dist/cobalt/p-56551580.entry.js +0 -1
  782. package/dist/cobalt/p-58137c9e.entry.js +0 -1
  783. package/dist/cobalt/p-5a3e4c81.entry.js +0 -1
  784. package/dist/cobalt/p-5c756787.entry.js +0 -1
  785. package/dist/cobalt/p-67f3b9d6.entry.js +0 -1
  786. package/dist/cobalt/p-6a4f3179.entry.js +0 -1
  787. package/dist/cobalt/p-71cbc53c.entry.js +0 -1
  788. package/dist/cobalt/p-72e52af7.entry.js +0 -1
  789. package/dist/cobalt/p-8530ad16.entry.js +0 -1
  790. package/dist/cobalt/p-8a74bf7d.entry.js +0 -1
  791. package/dist/cobalt/p-8e05b979.entry.js +0 -1
  792. package/dist/cobalt/p-8ebc0c12.entry.js +0 -1
  793. package/dist/cobalt/p-8f2199ff.entry.js +0 -1
  794. package/dist/cobalt/p-9246e09c.entry.js +0 -1
  795. package/dist/cobalt/p-99a655f6.entry.js +0 -1
  796. package/dist/cobalt/p-BYKAgwq3.js +0 -1
  797. package/dist/cobalt/p-CJW9H3Gi.js +0 -1
  798. package/dist/cobalt/p-DFHRS9cJ.js +0 -1
  799. package/dist/cobalt/p-DH5lfRNj.js +0 -2
  800. package/dist/cobalt/p-a1b422ca.entry.js +0 -1
  801. package/dist/cobalt/p-ade07307.entry.js +0 -1
  802. package/dist/cobalt/p-b0762fd8.entry.js +0 -1
  803. package/dist/cobalt/p-b698188c.entry.js +0 -1
  804. package/dist/cobalt/p-bde32f8b.entry.js +0 -1
  805. package/dist/cobalt/p-d375014b.entry.js +0 -1
  806. package/dist/cobalt/p-db805569.entry.js +0 -1
  807. package/dist/cobalt/p-e3aae282.entry.js +0 -1
  808. package/dist/cobalt/p-e49a564c.entry.js +0 -1
  809. package/dist/cobalt/p-ef301976.entry.js +0 -1
  810. package/dist/cobalt/p-fMqVDypp.js +0 -1
  811. package/dist/components/p-2EOI1nrz.js +0 -1
  812. package/dist/components/p-7TncUlLN.js +0 -1
  813. package/dist/components/p-B4NCaKrR.js +0 -1
  814. package/dist/components/p-BGDqldEg.js +0 -1
  815. package/dist/components/p-BJh68Jqe.js +0 -1
  816. package/dist/components/p-BrAFTkAn.js +0 -1
  817. package/dist/components/p-Bsh0JMGf.js +0 -1
  818. package/dist/components/p-CJW9H3Gi.js +0 -1
  819. package/dist/components/p-CWCYYQrF.js +0 -1
  820. package/dist/components/p-D9T7zKeL.js +0 -1
  821. package/dist/components/p-DFHRS9cJ.js +0 -1
  822. package/dist/components/p-DTPYZwaZ.js +0 -1
  823. package/dist/components/p-Dcg4krSX.js +0 -1
  824. package/dist/components/p-Dh8ffSjK.js +0 -1
@@ -0,0 +1,1549 @@
1
+ import { forceUpdate, h, Host } from "@stencil/core";
2
+ import * as RichText from "@prolibu-suite/cobalt-rich-text";
3
+ import { getRichTextStrings } from "../../utils/richTextI18n";
4
+ import { parseFeatures, syncToolbarEditor } from "../../utils/rich-text-host";
5
+ import { createThrottle, DOC_CHANGE_THROTTLE_MS } from "./change-throttle";
6
+ import { parseMargins, parsePageSize, toBoolIntent } from "./document-props";
7
+ import { scopePageStyles } from "./page-styles";
8
+ import { anchorCorrection, clampScale, fitScale, paperPoint, pinchScale, ZOOM_GUTTER_PX } from "./zoom";
9
+ import { HEADER_TOOL_BOX_PX, HEADER_TOOL_ICON_PX } from "./header-tools";
10
+ import { defaultImageWidth, IMAGE_MODE_ICON_PX, IMAGE_MODE_ICONS, imageBarPosition, layoutLeft } from "./image-bar";
11
+ let instanceSeq = 0;
12
+ /**
13
+ * Editor de documentos paginado: hoja fija, encabezado en banda, campos y
14
+ * firmas (spec contracts-v2-contract-editor §4.2). Recibe y devuelve SOLO el
15
+ * cuerpo (HTML de impresión) y el HTML del encabezado; no sabe de contratos.
16
+ * Nunca serializa por tecla: `coChange` solo avisa y el host pide
17
+ * `getPrintHtml()` cuando lo necesita.
18
+ *
19
+ * `shadow: false` (como co-rich-text-editor): ProseMirror arma su DOM de forma
20
+ * imperativa y el CSS de impresión del host tiene que alcanzarlo.
21
+ *
22
+ * @slot aside - Panel lateral del host (ancho fijo del componente: `--co-doc-aside-width`, 320px por defecto). Mantener el hijo siempre montado (v-show).
23
+ * @part wrapper - Contenedor externo
24
+ * @part bar - Fila de la barra
25
+ * @part toolbar - Barra de formato
26
+ * @part canvas - Superficie donde se centran las hojas
27
+ * @part sheet - El papel
28
+ * @part header-band - Banda del encabezado de la primera hoja *
29
+ * Wrapper Vue: `CoDocumentEditor` de `@prolibu-suite/cobalt-vue`.
30
+ */
31
+ export class CoDocumentEditor {
32
+ constructor() {
33
+ /** Cuerpo: HTML de impresión (tolera el que guardó V1) o JSON de ProseMirror como string. */
34
+ this.value = null;
35
+ /** HTML del encabezado (banda superior de cada hoja). Vacío = sin encabezado. */
36
+ this.headerHtml = '';
37
+ /** Número de página en la banda. Se lee como intención: `true` o `'true'`. */
38
+ this.showPageNumber = false;
39
+ /** `letter` | `a4` | `legal` o `{width, height}` en px a 96 dpi (objeto o JSON). */
40
+ this.pageSize = 'letter';
41
+ /** Alto de la banda del encabezado en px (cuando hay encabezado). */
42
+ this.headerHeight = 45;
43
+ /** CSS de impresión del host; se acota a la hoja. */
44
+ this.pageStyles = '';
45
+ /** Solo lectura: sin barra ni edición (el encabezado tampoco se puede editar). */
46
+ this.readonly = false;
47
+ /** BCP-47 para los textos de la UI ('es', 'en', 'pt-BR'…). */
48
+ this.locale = 'en';
49
+ this.ready = false;
50
+ this.pageCount = 1;
51
+ /** `custom` = zoom libre por gesto (pinza del trackpad / ctrl+rueda); la escala queda donde la dejó el usuario. */
52
+ this.zoomMode = 'fit';
53
+ this.scale = 1;
54
+ this.stageHeight = 0;
55
+ /** La banda del encabezado está en edición (editor `print-header` montado). */
56
+ this.headerEditing = false;
57
+ /** Interruptor de número de página mientras se edita (se confirma con el encabezado). */
58
+ this.draftShowPageNumber = false;
59
+ /** Barra de diseño de la imagen seleccionada en el cuerpo (null = no hay). Posición en px del papel. */
60
+ this.imageBar = null;
61
+ /** Encabezado vigente (confirmado). La Task 16 lo cambia al confirmar la banda. */
62
+ this.currentHeaderHtml = '';
63
+ this.currentShowPageNumber = false;
64
+ /** JSON del encabezado confirmado (lista de campos sin montar un editor). */
65
+ this.headerDoc = null;
66
+ this.instanceId = String(++instanceSeq);
67
+ this.applyingExternal = false;
68
+ this.lastAppliedValue = null;
69
+ this.userDirty = false;
70
+ this.lastFieldsKey = '';
71
+ /** src de imágenes insertadas por el usuario sin `width`: al cargar reciben uno (nota T8). */
72
+ this.pendingImageSrcs = new Set();
73
+ this.changeThrottle = createThrottle(DOC_CHANGE_THROTTLE_MS, () => this.emitPendingChange());
74
+ /**
75
+ * Barra bajo la imagen seleccionada (corre en cada transacción del cuerpo). Solo
76
+ * cambia el estado si cambió algo: sin re-render por tecla ni bucles.
77
+ */
78
+ this.updateImageBar = () => {
79
+ const ed = this.editor;
80
+ const sel = ed === null || ed === void 0 ? void 0 : ed.state.selection;
81
+ const node = sel === null || sel === void 0 ? void 0 : sel.node;
82
+ if (!ed || this.readonly || !node || node.type.name !== 'image') {
83
+ if (this.imageBar)
84
+ this.imageBar = null;
85
+ return;
86
+ }
87
+ const dom = ed.view.nodeDOM(sel.from);
88
+ const sheet = this.el.querySelector('.co-doc-editor__sheet');
89
+ if (!dom || !sheet) {
90
+ if (this.imageBar)
91
+ this.imageBar = null;
92
+ return;
93
+ }
94
+ // px de layout (no los altera el zoom: la barra vive dentro del escenario escalado).
95
+ const box = RichText.layoutBox(dom, sheet);
96
+ const pos = imageBarPosition({ top: box.top, height: box.height, left: layoutLeft(dom, sheet), width: dom.offsetWidth }, { width: sheet.offsetWidth, height: sheet.offsetHeight });
97
+ const mode = RichText.getImageLayoutMode({ wrapperStyle: node.attrs.wrapperStyle, containerStyle: node.attrs.containerStyle });
98
+ const cur = this.imageBar;
99
+ if (!cur || cur.mode !== mode || cur.top !== pos.top || cur.left !== pos.left)
100
+ this.imageBar = { mode, top: pos.top, left: pos.left };
101
+ };
102
+ /** Una imagen insertada sin ancho nace acotada a la columna (V1 la abriría a 800 px). */
103
+ this.onBodyImageLoad = (e) => {
104
+ const img = e.target;
105
+ const ed = this.editor;
106
+ if (!ed || !img || img.tagName !== 'IMG')
107
+ return;
108
+ const src = img.getAttribute('src') || '';
109
+ if (!this.pendingImageSrcs.has(src))
110
+ return;
111
+ let target = -1;
112
+ ed.state.doc.descendants((n, pos) => {
113
+ if (target >= 0)
114
+ return false;
115
+ if (n.type.name === 'image' && !n.attrs.width && n.attrs.src === src)
116
+ target = pos;
117
+ return true;
118
+ });
119
+ const node = target >= 0 ? ed.state.doc.nodeAt(target) : null;
120
+ if (!node)
121
+ return;
122
+ const m = this.marginsPx;
123
+ const width = defaultImageWidth(img.naturalWidth, this.pageSizePx.width - m.left - m.right);
124
+ if (!width)
125
+ return;
126
+ // Quedan otras del mismo src sin ancho: su propio `load` las toma.
127
+ let more = false;
128
+ ed.state.doc.descendants((n, pos) => {
129
+ if (pos !== target && n.type.name === 'image' && !n.attrs.width && n.attrs.src === src)
130
+ more = true;
131
+ return !more;
132
+ });
133
+ if (!more)
134
+ this.pendingImageSrcs.delete(src);
135
+ const wasSelected = ed.state.selection.node && ed.state.selection.from === target;
136
+ ed.view.dispatch(ed.state.tr.setNodeMarkup(target, undefined, Object.assign(Object.assign({}, node.attrs), { width })));
137
+ if (wasSelected)
138
+ ed.commands.setNodeSelection(target);
139
+ };
140
+ /** Al salir del editor (p. ej. mousedown en «Cerrar») el aviso no espera la ventana. */
141
+ this.onEditorBlur = () => {
142
+ this.changeThrottle.flush();
143
+ };
144
+ this.onHostKeydown = (e) => {
145
+ if (e.key === 'Escape')
146
+ this.changeThrottle.flush();
147
+ };
148
+ this.onTransaction = ({ transaction }) => {
149
+ if (!transaction.docChanged)
150
+ return;
151
+ const external = this.applyingExternal || !!transaction.getMeta(RichText.FIELD_SYNC_META);
152
+ if (!external) {
153
+ this.userDirty = true;
154
+ this.trackInsertedImages(transaction);
155
+ }
156
+ this.changeThrottle.run();
157
+ };
158
+ /** La barra emite coAction burbujeante: se corta acá y solo salen los botones del host. */
159
+ this.handleToolbarAction = (e) => {
160
+ e.stopPropagation();
161
+ const { action, payload } = e.detail || {};
162
+ // Se reemite EXACTAMENTE el detalle de la barra para los botones del host; las
163
+ // acciones propias de la barra (bold…) no salen del componente. `documentHeader`
164
+ // abre la banda y tampoco se reemite.
165
+ if (payload && payload.extra === true)
166
+ this.coAction.emit({ action, payload: { extra: true } });
167
+ else if (action === 'documentHeader')
168
+ this.startHeaderEdit();
169
+ };
170
+ /* ── Banda del encabezado en edición (como V1: doble clic o «Encabezado»; clic afuera o ✓ confirma; Esc cancela) ── */
171
+ this.startHeaderEdit = () => {
172
+ if (this.readonly || this.headerEditing || !this.editor)
173
+ return;
174
+ this.draftShowPageNumber = this.currentShowPageNumber;
175
+ this.headerEditing = true; // el render monta .co-doc-editor__header-editor y componentDidRender el editor
176
+ this.refreshPagination(); // sin encabezado previo, la banda aparece y corre el cuerpo
177
+ };
178
+ /** Cambios en la banda: solo la lista de campos (decisión 16: el encabezado no emite coChange). */
179
+ this.onHeaderTransaction = ({ transaction }) => {
180
+ if (transaction.docChanged)
181
+ this.changeThrottle.run();
182
+ };
183
+ /** Como fitHeaderImage de V1: una imagen sin ancho se ajusta a la banda (40×400) al cargar. */
184
+ this.onHeaderImageLoad = (e) => {
185
+ const img = e.target;
186
+ const ed = this.headerEditor;
187
+ if (!ed || !img || img.tagName !== 'IMG')
188
+ return;
189
+ const width = RichText.headerImageWidth({ w: img.naturalWidth, h: img.naturalHeight });
190
+ if (!width)
191
+ return;
192
+ let target = -1;
193
+ try {
194
+ const pos = ed.view.posAtDOM(img, 0);
195
+ const node = ed.state.doc.nodeAt(pos);
196
+ if (node && node.type.name === 'image')
197
+ target = pos;
198
+ }
199
+ catch (_a) {
200
+ /* el img ya no está en el editor */
201
+ }
202
+ if (target < 0) {
203
+ const src = img.getAttribute('src');
204
+ ed.state.doc.descendants((node, pos) => {
205
+ if (target >= 0)
206
+ return false;
207
+ if (node.type.name === 'image' && !node.attrs.width && node.attrs.src === src)
208
+ target = pos;
209
+ return true;
210
+ });
211
+ }
212
+ const node = target >= 0 ? ed.state.doc.nodeAt(target) : null;
213
+ if (!node || node.attrs.width)
214
+ return;
215
+ ed.view.dispatch(ed.state.tr.setNodeMarkup(target, undefined, Object.assign(Object.assign({}, node.attrs), { width })));
216
+ };
217
+ /** Clic afuera de la banda (y de la barra, que la edita) confirma. */
218
+ this.onDocumentPointer = (e) => {
219
+ const path = e.composedPath();
220
+ if (this.headerBandEl && path.includes(this.headerBandEl))
221
+ return;
222
+ if (this.toolbarEl && path.includes(this.toolbarEl))
223
+ return;
224
+ this.commitHeader();
225
+ };
226
+ /**
227
+ * Esc cancela y NO sigue hasta el editor ni burbujea al host (no cierra el overlay
228
+ * de abajo). Convive con `onHostKeydown`: el host captura antes (es ancestro) y
229
+ * solo adelanta el coChange pendiente del cuerpo.
230
+ */
231
+ this.onHeaderKeydown = (e) => {
232
+ var _a;
233
+ if (e.key !== 'Escape' || e.isComposing)
234
+ return;
235
+ // Desde la barra: si tiene un panel abierto (color, enlace, tamaño…) el Esc es suyo y lo cierra.
236
+ const toolbar = this.toolbarEl;
237
+ if (toolbar && e.currentTarget === toolbar && ((_a = toolbar.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('[aria-expanded="true"]')))
238
+ return;
239
+ e.preventDefault();
240
+ e.stopPropagation();
241
+ this.cancelHeader(true);
242
+ };
243
+ /**
244
+ * `restoreFocus`: confirmar con el ✓ (teclado o clic) desmonta el botón enfocado →
245
+ * el foco vuelve al cuerpo. El clic afuera NO lo toca: el foco ya se fue adonde se hizo clic.
246
+ */
247
+ this.commitHeader = (restoreFocus = false) => {
248
+ var _a;
249
+ const ed = this.headerEditor;
250
+ if (!ed)
251
+ return;
252
+ const refocus = restoreFocus && this.focusIsInBandOrLost();
253
+ const html = ed.isEmpty ? '' : RichText.writePrintHtml(ed.state.doc, 'print-header', this.resolvedFeatures);
254
+ const showPageNumber = this.draftShowPageNumber;
255
+ this.teardownHeaderEditor();
256
+ this.currentHeaderHtml = html;
257
+ this.currentShowPageNumber = showPageNumber;
258
+ this.headerDoc = html ? RichText.readPrintHtml(html, 'print-header', this.resolvedFeatures) : null;
259
+ this.headerEditing = false;
260
+ this.refreshPagination();
261
+ this.coHeaderChange.emit({ html, showPageNumber });
262
+ this.emitFieldsIfChanged();
263
+ if (refocus)
264
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.focus();
265
+ };
266
+ /** `restoreFocus` solo para la cancelación del usuario (Esc); un cambio de prop no roba el foco. */
267
+ this.cancelHeader = (restoreFocus = false) => {
268
+ var _a;
269
+ if (!this.headerEditing)
270
+ return;
271
+ this.teardownHeaderEditor();
272
+ this.headerEditing = false;
273
+ this.refreshPagination();
274
+ this.emitFieldsIfChanged();
275
+ if (restoreFocus)
276
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.focus();
277
+ };
278
+ /** Escala que refleja el DOM (se actualiza en componentDidRender). */
279
+ this.renderedScale = 1;
280
+ this.onCanvasWheel = (e) => {
281
+ // ctrlKey = pinza del trackpad (Chrome/Edge/Firefox) o ctrl+rueda; ⌘+rueda en mac también.
282
+ if (!e.ctrlKey && !e.metaKey)
283
+ return;
284
+ e.preventDefault();
285
+ // deltaMode 1 = líneas (rueda de mouse clásica): ~16px por línea.
286
+ const delta = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY;
287
+ this.zoomTo(pinchScale(this.scale, delta), e.clientX, e.clientY);
288
+ };
289
+ /** Safari no manda la pinza como ctrl+wheel sino como GestureEvent (escala acumulada desde el inicio). */
290
+ this.gestureBase = 1;
291
+ this.onGestureStart = (e) => {
292
+ e.preventDefault();
293
+ this.gestureBase = this.scale;
294
+ };
295
+ this.onGestureChange = (e) => {
296
+ var _a, _b, _c, _d;
297
+ e.preventDefault();
298
+ const rect = (_a = this.canvasEl) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
299
+ const cx = (_b = e.clientX) !== null && _b !== void 0 ? _b : (rect ? rect.left + rect.width / 2 : 0);
300
+ const cy = (_c = e.clientY) !== null && _c !== void 0 ? _c : (rect ? rect.top + rect.height / 2 : 0);
301
+ this.zoomTo(clampScale(this.gestureBase * ((_d = e.scale) !== null && _d !== void 0 ? _d : 1)), cx, cy);
302
+ };
303
+ }
304
+ get s() {
305
+ return getRichTextStrings(this.locale);
306
+ }
307
+ get resolvedFeatures() {
308
+ var _a;
309
+ return (_a = parseFeatures(this.features)) !== null && _a !== void 0 ? _a : {};
310
+ }
311
+ get parsedExtraItems() {
312
+ const v = parseFeatures(this.extraItems);
313
+ return Array.isArray(v) ? v : [];
314
+ }
315
+ get pageSizePx() {
316
+ return RichText.resolvePageSize(parsePageSize(this.pageSize));
317
+ }
318
+ get marginsPx() {
319
+ return parseMargins(this.margins);
320
+ }
321
+ /** Con la banda en edición hay banda aunque el encabezado confirmado esté vacío. */
322
+ get hasHeader() {
323
+ return !!this.currentHeaderHtml || this.headerEditing;
324
+ }
325
+ get sanitizedHeaderHtml() {
326
+ return RichText.sanitize(this.currentHeaderHtml, 'print-header');
327
+ }
328
+ get pageScope() {
329
+ return `.co-doc-editor__sheet[data-co-doc="${this.instanceId}"]`;
330
+ }
331
+ /** Editor que maneja la barra: el del encabezado mientras la banda está en edición. */
332
+ get activeEditor() {
333
+ var _a;
334
+ return (_a = this.headerEditor) !== null && _a !== void 0 ? _a : this.editor;
335
+ }
336
+ /** «Encabezado» en la barra: apagado en solo lectura y con la banda ya abierta. */
337
+ get documentHeaderEnabled() {
338
+ return !this.readonly && !this.headerEditing;
339
+ }
340
+ /** Paginación del cuerpo: tamaño, márgenes y banda del encabezado. */
341
+ buildCustomExtensions() {
342
+ return [
343
+ RichText.Pagination.configure({
344
+ page: this.pageSizePx,
345
+ margins: this.marginsPx,
346
+ header: { height: this.hasHeader ? this.headerHeight : 0 },
347
+ footer: { height: 0 },
348
+ renderHeader: (page, count) => this.buildHeaderClone(page, count),
349
+ onPagesChange: (n) => {
350
+ this.pageCount = n;
351
+ this.coPagesChange.emit(n);
352
+ },
353
+ }),
354
+ ];
355
+ }
356
+ /** Campos del cuerpo y, detrás, los del encabezado (el que se edita o el confirmado). */
357
+ collectAllFields() {
358
+ if (!this.editor)
359
+ return [];
360
+ const list = RichText.collectFields(this.editor.state.doc);
361
+ const header = this.headerEditor ? this.headerEditor.state.doc : this.headerDoc;
362
+ if (header)
363
+ RichText.collectFields(header, list);
364
+ return list;
365
+ }
366
+ connectedCallback() {
367
+ // Captura sobre el host: el Escape pasa por acá antes que el listener del drawer/modal
368
+ // que cierra. No se frena la propagación: solo se adelanta el coChange pendiente.
369
+ this.el.addEventListener('keydown', this.onHostKeydown, true);
370
+ }
371
+ componentWillLoad() {
372
+ // H3: el harness de specs no aplica los defaults de clase de @State.
373
+ this.ready = false;
374
+ this.pageCount = 1;
375
+ this.zoomMode = 'fit';
376
+ this.scale = 1;
377
+ this.stageHeight = 0;
378
+ this.headerEditing = false;
379
+ this.draftShowPageNumber = false;
380
+ this.imageBar = null;
381
+ }
382
+ componentDidLoad() {
383
+ var _a, _b, _c;
384
+ if (!this.contentEl)
385
+ return;
386
+ this.syncHeaderFromProps();
387
+ this.editor = RichText.createEditor({
388
+ preset: 'print',
389
+ element: this.contentEl,
390
+ // Nota T14: el contenido inicial pasa por readPrintHtml (parseBody), igual que todo setContent posterior.
391
+ content: this.value ? this.parseBody(this.value) : null,
392
+ editable: !this.readonly,
393
+ features: this.resolvedFeatures,
394
+ labels: { signature: (n) => `${this.s.signature} ${n}`, fieldName: this.s.fieldNamePlaceholder },
395
+ customExtensions: this.buildCustomExtensions(),
396
+ imageUpload: this.imageUpload,
397
+ });
398
+ this.lastAppliedValue = this.value;
399
+ this.wireEditor(this.editor);
400
+ this.applyPageStyles();
401
+ if (typeof ResizeObserver !== 'undefined') {
402
+ this.resizeObserver = new ResizeObserver(() => this.updateScale());
403
+ if (this.canvasEl)
404
+ this.resizeObserver.observe(this.canvasEl);
405
+ if (this.stageEl)
406
+ this.resizeObserver.observe(this.stageEl);
407
+ }
408
+ // passive:false — sin preventDefault la pinza hace zoom de TODA la página del navegador.
409
+ (_a = this.canvasEl) === null || _a === void 0 ? void 0 : _a.addEventListener('wheel', this.onCanvasWheel, { passive: false });
410
+ (_b = this.canvasEl) === null || _b === void 0 ? void 0 : _b.addEventListener('gesturestart', this.onGestureStart);
411
+ (_c = this.canvasEl) === null || _c === void 0 ? void 0 : _c.addEventListener('gesturechange', this.onGestureChange);
412
+ this.updateScale();
413
+ this.syncToolbar();
414
+ this.ready = true;
415
+ this.emitFieldsIfChanged();
416
+ this.coReady.emit();
417
+ }
418
+ componentDidRender() {
419
+ this.applyPendingAnchor();
420
+ if (this.headerEditing && !this.headerEditor && this.headerMountEl)
421
+ this.mountHeaderEditor();
422
+ this.syncToolbar();
423
+ }
424
+ disconnectedCallback() {
425
+ var _a, _b, _c, _d;
426
+ this.el.removeEventListener('keydown', this.onHostKeydown, true);
427
+ this.changeThrottle.cancel();
428
+ (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
429
+ this.resizeObserver = undefined;
430
+ (_b = this.canvasEl) === null || _b === void 0 ? void 0 : _b.removeEventListener('wheel', this.onCanvasWheel);
431
+ (_c = this.canvasEl) === null || _c === void 0 ? void 0 : _c.removeEventListener('gesturestart', this.onGestureStart);
432
+ (_d = this.canvasEl) === null || _d === void 0 ? void 0 : _d.removeEventListener('gesturechange', this.onGestureChange);
433
+ // H9: soltar la barra ANTES de destruir, o re-renderiza con un editor destruido.
434
+ if (this.toolbarEl)
435
+ this.toolbarEl.editor = undefined;
436
+ this.teardownHeaderEditor(false);
437
+ this.headerEditing = false;
438
+ if (this.editor) {
439
+ this.editor.off('transaction', this.onTransaction);
440
+ this.editor.off('blur', this.onEditorBlur);
441
+ this.editor.off('transaction', this.updateImageBar);
442
+ this.editor.view.dom.removeEventListener('load', this.onBodyImageLoad, true);
443
+ this.editor.destroy();
444
+ }
445
+ this.editor = undefined;
446
+ this.pendingImageSrcs.clear();
447
+ this.imageBar = null;
448
+ }
449
+ onValueChange(next) {
450
+ if (next === this.lastAppliedValue)
451
+ return;
452
+ // Eco del host: devolvió por `value` lo que getPrintHtml() dio. Re-aplicarlo movería el cursor.
453
+ // Solo corre cuando cambia la prop (nunca por tecla).
454
+ if (this.editor && next && next === RichText.writePrintHtml(this.editor.state.doc, 'print', this.resolvedFeatures)) {
455
+ this.lastAppliedValue = next;
456
+ return;
457
+ }
458
+ this.applyBody(next);
459
+ }
460
+ onReadonlyChange() {
461
+ var _a;
462
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.setEditable(!this.readonly);
463
+ if (this.readonly && this.headerEditing)
464
+ this.cancelHeader();
465
+ this.updateImageBar();
466
+ }
467
+ onPageGeometryChange() {
468
+ this.refreshPagination();
469
+ this.updateScale();
470
+ }
471
+ onHeaderPropsChange() {
472
+ if (this.headerEditing)
473
+ return; // lo que se está editando manda hasta confirmar o cancelar
474
+ this.syncHeaderFromProps();
475
+ this.refreshPagination();
476
+ this.emitFieldsIfChanged();
477
+ }
478
+ onPageStylesChange() {
479
+ this.applyPageStyles();
480
+ }
481
+ onLabelChange() {
482
+ if (this.editor)
483
+ this.editor.view.dom.setAttribute('aria-label', this.label || this.s.documentEditor);
484
+ }
485
+ /** «Página N / M» de las bandas de salto sale del idioma: redibujarlas. */
486
+ onLocaleChange() {
487
+ if (this.currentShowPageNumber)
488
+ this.refreshPagination();
489
+ }
490
+ /* ── Métodos públicos ── */
491
+ /** Cuerpo en la forma canónica de impresión (spec §3.4). */
492
+ async getPrintHtml() {
493
+ if (!this.editor)
494
+ return '';
495
+ return RichText.writePrintHtml(this.editor.state.doc, 'print', this.resolvedFeatures);
496
+ }
497
+ /**
498
+ * HTML del encabezado confirmado: el de la prop tal cual, o la forma canónica
499
+ * si pasó por la banda o por `setFieldValues`. Lo que se está editando en la
500
+ * banda sin confirmar NO cuenta.
501
+ */
502
+ async getHeaderHtml() {
503
+ return this.currentHeaderHtml;
504
+ }
505
+ /** Cuerpo como JSON de ProseMirror, o `null` si todavía no montó. */
506
+ async getJSON() {
507
+ return this.editor ? this.editor.getJSON() : null;
508
+ }
509
+ /**
510
+ * Emite YA el `coChange` pendiente (no-op si no hay). El host lo llama antes de
511
+ * decidir «cambios sin aplicar» (cerrar, navegar): `coChange` sale al final de
512
+ * la ventana de 250 ms y una edición recién tipeada todavía no avisó.
513
+ * El blur del editor y un Escape dentro del componente lo hacen solos.
514
+ */
515
+ async flushChange() {
516
+ this.changeThrottle.flush();
517
+ }
518
+ /**
519
+ * ¿Cuerpo vacío? En print un documento vacío NO serializa a `''`
520
+ * (`<p><br class="ProseMirror-trailingBreak"></p>`): el host pregunta acá.
521
+ */
522
+ async isEmpty() {
523
+ return this.editor ? this.editor.isEmpty : true;
524
+ }
525
+ /** Reemplaza el cuerpo (HTML de impresión, V1 incluido). A diferencia del RTE, NO emite coChange. */
526
+ async setContent(html) {
527
+ this.applyBody(html);
528
+ }
529
+ /**
530
+ * Valores de los campos (cuerpo y encabezado) en UNA transacción por editor; no
531
+ * cuenta como edición del usuario ni emite coHeaderChange. Con la banda abierta
532
+ * se aplican también al confirmado, así cancelar no los pierde.
533
+ */
534
+ async setFieldValues(values) {
535
+ var _a, _b;
536
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.setFieldValues(values);
537
+ (_b = this.headerEditor) === null || _b === void 0 ? void 0 : _b.commands.setFieldValues(values);
538
+ if (!this.currentHeaderHtml)
539
+ return;
540
+ const next = RichText.setFieldValuesInHtml(this.currentHeaderHtml, values, 'print-header', this.resolvedFeatures);
541
+ if (next === this.currentHeaderHtml)
542
+ return;
543
+ this.currentHeaderHtml = next;
544
+ this.headerDoc = RichText.readPrintHtml(next, 'print-header', this.resolvedFeatures);
545
+ if (!this.headerEditing) {
546
+ this.refreshPagination(); // las bandas de salto clonan el encabezado
547
+ forceUpdate(this);
548
+ }
549
+ }
550
+ /** Inserta un campo `[[name]]` en el cursor; `opts`: `required`, `type`, `enum`, `value`. */
551
+ async insertField(name, opts) {
552
+ var _a;
553
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.chain().focus().insertField(name, opts).run();
554
+ }
555
+ /** Inserta el siguiente marcador de firma libre (`⟦sig:N⟧`) en el cursor. */
556
+ async insertSignatureSlot() {
557
+ var _a;
558
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.chain().focus().insertSignatureSlot().run();
559
+ }
560
+ /** Enfoca el cuerpo del documento. */
561
+ async focusEditor() {
562
+ var _a;
563
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.focus();
564
+ }
565
+ /** Instancia Tiptap del cuerpo (escape hatch), o `null` antes de montar. */
566
+ async getEditorInstance() {
567
+ var _a;
568
+ return (_a = this.editor) !== null && _a !== void 0 ? _a : null;
569
+ }
570
+ /* ── internos ── */
571
+ /** Listeners y atributos del editor del cuerpo. */
572
+ wireEditor(editor) {
573
+ const dom = editor.view.dom;
574
+ dom.classList.add('tiptap');
575
+ dom.setAttribute('aria-label', this.label || this.s.documentEditor);
576
+ dom.setAttribute('aria-multiline', 'true');
577
+ editor.on('transaction', this.onTransaction);
578
+ editor.on('transaction', this.updateImageBar);
579
+ editor.on('blur', this.onEditorBlur);
580
+ // `load` no burbujea: se escucha en captura.
581
+ dom.addEventListener('load', this.onBodyImageLoad, true);
582
+ }
583
+ imageModeLabel(mode) {
584
+ const s = this.s;
585
+ return { inline: s.imageLayoutInline, 'wrap-left': s.imageLayoutWrapLeft, 'wrap-right': s.imageLayoutWrapRight, break: s.imageLayoutBreak }[mode];
586
+ }
587
+ /**
588
+ * Sin `.focus()`: con el mouse el mousedown de la barra ya no le quita el foco al
589
+ * editor, y con el teclado el foco se queda en el botón (se puede seguir en la barra).
590
+ * H7: el comando re-selecciona el nodo, así la barra sigue tras el cambio.
591
+ */
592
+ setImageMode(mode) {
593
+ var _a;
594
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.setImageLayoutMode(mode);
595
+ this.updateImageBar();
596
+ }
597
+ /** Imágenes que entran por una transacción del usuario sin `width` (barra, pegar, soltar, subida). */
598
+ trackInsertedImages(transaction) {
599
+ var _a, _b, _c;
600
+ // Deshacer/rehacer REPONE una imagen que ya existía (p. ej. una de V1 sin ancho): no es
601
+ // una inserción, y estamparle ancho cambiaría el HTML de V1 y vaciaría la pila de rehacer.
602
+ // `history$` = PluginKey('history') de prosemirror-history (el undoRedo de StarterKit).
603
+ if (transaction.getMeta('history$'))
604
+ return;
605
+ const found = [];
606
+ for (const step of transaction.steps) {
607
+ (_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) => {
608
+ if (n.type.name === 'image' && !n.attrs.width && n.attrs.src)
609
+ found.push(n.attrs.src);
610
+ });
611
+ }
612
+ if (!found.length)
613
+ return;
614
+ // Un cambio de modo (setNodeMarkup) reescribe la MISMA imagen: la que ya estaba no es nueva.
615
+ const before = new Set();
616
+ transaction.before.descendants((n) => {
617
+ if (n.type.name === 'image' && !n.attrs.width)
618
+ before.add(n.attrs.src);
619
+ });
620
+ found.forEach((src) => {
621
+ if (!before.has(src))
622
+ this.pendingImageSrcs.add(src);
623
+ });
624
+ }
625
+ /** JSON de ProseMirror como string, o HTML de impresión (V1 incluido) por el lector tolerante. */
626
+ parseBody(v) {
627
+ const t = v.trim();
628
+ if (t.startsWith('{')) {
629
+ try {
630
+ return JSON.parse(t);
631
+ }
632
+ catch (_a) {
633
+ /* no era JSON: se lee como HTML */
634
+ }
635
+ }
636
+ return RichText.readPrintHtml(v, 'print', this.resolvedFeatures);
637
+ }
638
+ applyBody(v) {
639
+ if (!this.editor)
640
+ return;
641
+ // Otro cuerpo: lo pendiente del anterior ya no es «insertado» (una V1 con la misma src no se toca).
642
+ this.pendingImageSrcs.clear();
643
+ this.applyingExternal = true;
644
+ try {
645
+ if (!v)
646
+ this.editor.commands.clearContent(false);
647
+ else
648
+ this.editor.commands.setContent(this.parseBody(v), { emitUpdate: false });
649
+ }
650
+ finally {
651
+ this.applyingExternal = false;
652
+ this.lastAppliedValue = v;
653
+ }
654
+ }
655
+ emitPendingChange() {
656
+ if (!this.editor)
657
+ return;
658
+ this.emitFieldsIfChanged();
659
+ if (this.userDirty) {
660
+ this.userDirty = false;
661
+ this.coChange.emit();
662
+ }
663
+ }
664
+ emitFieldsIfChanged() {
665
+ const fields = this.collectAllFields();
666
+ const key = JSON.stringify(fields);
667
+ if (key === this.lastFieldsKey)
668
+ return;
669
+ this.lastFieldsKey = key;
670
+ this.coFieldsChange.emit(fields);
671
+ }
672
+ syncToolbar() {
673
+ syncToolbarEditor(this.toolbarEl, this.activeEditor, this.imageUpload);
674
+ }
675
+ syncHeaderFromProps() {
676
+ this.currentHeaderHtml = this.headerHtml || '';
677
+ this.currentShowPageNumber = toBoolIntent(this.showPageNumber);
678
+ this.headerDoc = this.currentHeaderHtml ? RichText.readPrintHtml(this.currentHeaderHtml, 'print-header', this.resolvedFeatures) : null;
679
+ }
680
+ mountHeaderEditor() {
681
+ var _a, _b;
682
+ const editor = RichText.createEditor({
683
+ preset: 'print-header',
684
+ element: this.headerMountEl,
685
+ content: this.currentHeaderHtml ? RichText.readPrintHtml(this.currentHeaderHtml, 'print-header', this.resolvedFeatures) : null,
686
+ editable: true,
687
+ features: { fields: this.resolvedFeatures.fields },
688
+ labels: { fieldName: this.s.fieldNamePlaceholder },
689
+ imageUpload: this.imageUpload,
690
+ });
691
+ this.headerEditor = editor;
692
+ const dom = editor.view.dom;
693
+ dom.classList.add('tiptap');
694
+ dom.setAttribute('aria-label', this.s.documentHeader);
695
+ editor.on('transaction', this.onHeaderTransaction);
696
+ // `load` no burbujea: se escucha en captura.
697
+ dom.addEventListener('load', this.onHeaderImageLoad, true);
698
+ document.addEventListener('mousedown', this.onDocumentPointer, true);
699
+ (_a = this.headerBandEl) === null || _a === void 0 ? void 0 : _a.addEventListener('keydown', this.onHeaderKeydown, true);
700
+ // Con la banda abierta la barra edita el encabezado: su Esc también cancela la banda.
701
+ (_b = this.toolbarEl) === null || _b === void 0 ? void 0 : _b.addEventListener('keydown', this.onHeaderKeydown, true);
702
+ editor.commands.focus('end');
703
+ this.syncToolbar();
704
+ }
705
+ /** `resync`: devolverle la barra al cuerpo (no al desconectar: la barra ya se soltó). */
706
+ teardownHeaderEditor(resync = true) {
707
+ var _a, _b;
708
+ document.removeEventListener('mousedown', this.onDocumentPointer, true);
709
+ (_a = this.headerBandEl) === null || _a === void 0 ? void 0 : _a.removeEventListener('keydown', this.onHeaderKeydown, true);
710
+ (_b = this.toolbarEl) === null || _b === void 0 ? void 0 : _b.removeEventListener('keydown', this.onHeaderKeydown, true);
711
+ const ed = this.headerEditor;
712
+ this.headerEditor = undefined;
713
+ // H9: la barra suelta el editor del encabezado ANTES de que se destruya.
714
+ if (resync)
715
+ this.syncToolbar();
716
+ else if (this.toolbarEl && ed && this.toolbarEl.editor === ed)
717
+ this.toolbarEl.editor = undefined;
718
+ if (ed) {
719
+ ed.off('transaction', this.onHeaderTransaction);
720
+ ed.view.dom.removeEventListener('load', this.onHeaderImageLoad, true);
721
+ ed.destroy();
722
+ }
723
+ }
724
+ /** ¿El foco está en la banda (editor, interruptor, ✓) o se perdió al `<body>`? */
725
+ focusIsInBandOrLost() {
726
+ const active = document.activeElement;
727
+ return !active || active === document.body || !!(this.headerBandEl && this.headerBandEl.contains(active));
728
+ }
729
+ /** Tamaño, márgenes o banda cambiaron: la extensión redibuja bandas y vuelve a medir. */
730
+ refreshPagination() {
731
+ var _a;
732
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.commands.setPaginationOptions({
733
+ page: this.pageSizePx,
734
+ margins: this.marginsPx,
735
+ header: { height: this.hasHeader ? this.headerHeight : 0 },
736
+ });
737
+ }
738
+ applyPageStyles() {
739
+ if (this.styleEl)
740
+ this.styleEl.textContent = scopePageStyles(this.pageStyles, this.pageScope);
741
+ }
742
+ /** Cabecera de la hoja `page` dentro de una banda de salto (DOM imperativo: la pinta un widget). */
743
+ buildHeaderClone(page, count) {
744
+ if (!this.currentHeaderHtml)
745
+ return null;
746
+ const el = document.createElement('div');
747
+ el.className = 'co-doc-editor__header-static';
748
+ el.style.height = `${this.headerHeight}px`;
749
+ const html = document.createElement('div');
750
+ html.className = 'co-doc-editor__header-html';
751
+ html.innerHTML = this.sanitizedHeaderHtml;
752
+ el.appendChild(html);
753
+ if (this.currentShowPageNumber) {
754
+ const n = document.createElement('span');
755
+ n.className = 'co-doc-editor__page-number';
756
+ n.textContent = `${this.s.page} ${page} / ${count}`;
757
+ el.appendChild(n);
758
+ }
759
+ return el;
760
+ }
761
+ updateScale() {
762
+ var _a, _b, _c, _d;
763
+ if (this.zoomMode !== 'custom') {
764
+ 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);
765
+ if (next !== this.scale)
766
+ this.scale = next;
767
+ }
768
+ const h = (_d = (_c = this.stageEl) === null || _c === void 0 ? void 0 : _c.offsetHeight) !== null && _d !== void 0 ? _d : 0;
769
+ if (h !== this.stageHeight)
770
+ this.stageHeight = h;
771
+ }
772
+ /**
773
+ * Zoom libre anclado al cursor: guarda el punto del PAPEL bajo el puntero (con la escala que el
774
+ * DOM muestra ahora) y, tras el render, corrige el scroll midiendo dónde quedó. Varios eventos
775
+ * antes de un render reusan el mismo punto: la hoja todavía no se movió.
776
+ */
777
+ zoomTo(next, clientX, clientY) {
778
+ if (!this.canvasEl || !this.stageEl || next === this.scale)
779
+ return;
780
+ if (!this.pendingAnchor) {
781
+ const r = this.stageEl.getBoundingClientRect();
782
+ this.pendingAnchor = {
783
+ px: paperPoint(clientX, r.left, this.renderedScale),
784
+ py: paperPoint(clientY, r.top, this.renderedScale),
785
+ cx: clientX,
786
+ cy: clientY,
787
+ };
788
+ }
789
+ else {
790
+ this.pendingAnchor.cx = clientX;
791
+ this.pendingAnchor.cy = clientY;
792
+ }
793
+ this.zoomMode = 'custom';
794
+ this.scale = next;
795
+ }
796
+ applyPendingAnchor() {
797
+ const a = this.pendingAnchor;
798
+ const canvas = this.canvasEl;
799
+ this.renderedScale = this.scale;
800
+ if (!a || !canvas || !this.stageEl)
801
+ return;
802
+ this.pendingAnchor = undefined;
803
+ const r = this.stageEl.getBoundingClientRect();
804
+ canvas.scrollLeft += anchorCorrection(r.left, a.px, this.scale, a.cx);
805
+ canvas.scrollTop += anchorCorrection(r.top, a.py, this.scale, a.cy);
806
+ }
807
+ setZoom(mode) {
808
+ this.zoomMode = mode;
809
+ this.updateScale();
810
+ }
811
+ /**
812
+ * Banda de la primera hoja. Siempre montada (oculta con `hidden`); doble clic la
813
+ * vuelve un editor `print-header` con el interruptor de número de página.
814
+ */
815
+ renderHeaderBand() {
816
+ const s = this.s;
817
+ 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) => {
818
+ e.stopPropagation(); // su coChange burbujea: no es el coChange del documento
819
+ this.draftShowPageNumber = !!e.detail;
820
+ } }), 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}`)))));
821
+ }
822
+ /** Controles flotantes sobre la hoja: la barra de diseño de la imagen seleccionada. */
823
+ renderOverlays() {
824
+ const bar = this.imageBar;
825
+ if (!bar || this.readonly || this.headerEditing)
826
+ return null;
827
+ 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() }, RichText.IMAGE_LAYOUT_MODES.map((mode) => {
828
+ const label = this.imageModeLabel(mode);
829
+ const active = bar.mode === mode;
830
+ // <button> nativo (no co-icon-button): necesita aria-pressed, que ningún co-* reenvía.
831
+ 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" }))));
832
+ })));
833
+ }
834
+ render() {
835
+ const s = this.s;
836
+ const page = this.pageSizePx;
837
+ const m = this.marginsPx;
838
+ const headerH = this.hasHeader ? this.headerHeight : 0;
839
+ const sheetVars = {
840
+ '--co-doc-page-w': `${page.width}px`,
841
+ '--co-doc-page-h': `${page.height}px`,
842
+ '--co-doc-margin-top': `${m.top}px`,
843
+ '--co-doc-margin-right': `${m.right}px`,
844
+ '--co-doc-margin-bottom': `${m.bottom}px`,
845
+ '--co-doc-margin-left': `${m.left}px`,
846
+ '--co-doc-header-h': `${headerH}px`,
847
+ '--co-doc-pages': String(this.pageCount),
848
+ '--co-doc-gap': `${RichText.PAGE_GAP_PX}px`,
849
+ };
850
+ const frameStyle = {
851
+ width: `${page.width * this.scale}px`,
852
+ height: this.stageHeight ? `${this.stageHeight * this.scale}px` : 'auto',
853
+ };
854
+ const zoomButton = (mode, label) => (h("button", { key: 'da1c68e89c973899e18720d3cf25b861d158f7c1', 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));
855
+ return (h(Host, { key: '254d9df102441f867dc46eb71039df92d99ad102' }, h("div", { key: '29723bbee5dd3eae004c6df4c330e8589388636d', class: { 'co-doc-editor': true, 'co-doc-editor--readonly': this.readonly, 'co-doc-editor--loading': !this.ready }, part: "wrapper" }, h("div", { key: '9257d370d8547f08402fbaaed2d4a6aa30d94e70', class: "co-doc-editor__bar", part: "bar" }, !this.readonly && (h("co-rich-text-toolbar", { key: '8fff97e80464889cb0e6e60d8d9f69308f987e9f', 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: '00ff09c93887815f84bbb9c68e9485fd64c3c0b6', class: "co-doc-editor__zoom", role: "group", "aria-label": s.zoom }, this.zoomMode === 'custom' && h("span", { key: '956f0fa4e803a0e27fa32a28116d1e397a2dc402', class: "co-doc-editor__zoom-level" }, `${Math.round(this.scale * 100)} %`), zoomButton('fit', s.zoomFit), zoomButton('actual', s.zoomActual))), h("div", { key: '4a44bc41d6a641a5f4543422bd7263f2bd962f99', class: "co-doc-editor__body" }, h("div", { key: '467491e684b9487d507861d54c37b06b752216f4', class: "co-doc-editor__canvas", part: "canvas", ref: (el) => (this.canvasEl = el) }, h("div", { key: '66653efbda8e0dffb7bc1fdb07d0be31b4f5c8a9', class: "co-doc-editor__zoom-frame", style: frameStyle }, h("div", { key: '06407fc5177c21f4edc60b900a17a8c44ef193ab', class: "co-doc-editor__stage", style: { transform: `scale(${this.scale})` }, ref: (el) => (this.stageEl = el) }, h("div", { key: '440f1ced158d76650618bc0f153c3201503550a1', 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: '1478889436471ed2707db4e361d878faf7c56f2e', name: "aside" })))));
856
+ }
857
+ static get is() { return "co-document-editor"; }
858
+ static get originalStyleUrls() {
859
+ return {
860
+ "$": ["co-document-editor.css"]
861
+ };
862
+ }
863
+ static get styleUrls() {
864
+ return {
865
+ "$": ["co-document-editor.css"]
866
+ };
867
+ }
868
+ static get properties() {
869
+ return {
870
+ "value": {
871
+ "type": "string",
872
+ "mutable": false,
873
+ "complexType": {
874
+ "original": "string | null",
875
+ "resolved": "null | string",
876
+ "references": {}
877
+ },
878
+ "required": false,
879
+ "optional": false,
880
+ "docs": {
881
+ "tags": [],
882
+ "text": "Cuerpo: HTML de impresi\u00F3n (tolera el que guard\u00F3 V1) o JSON de ProseMirror como string."
883
+ },
884
+ "getter": false,
885
+ "setter": false,
886
+ "reflect": false,
887
+ "attribute": "value",
888
+ "defaultValue": "null"
889
+ },
890
+ "headerHtml": {
891
+ "type": "string",
892
+ "mutable": false,
893
+ "complexType": {
894
+ "original": "string",
895
+ "resolved": "string",
896
+ "references": {}
897
+ },
898
+ "required": false,
899
+ "optional": false,
900
+ "docs": {
901
+ "tags": [],
902
+ "text": "HTML del encabezado (banda superior de cada hoja). Vac\u00EDo = sin encabezado."
903
+ },
904
+ "getter": false,
905
+ "setter": false,
906
+ "reflect": false,
907
+ "attribute": "header-html",
908
+ "defaultValue": "''"
909
+ },
910
+ "showPageNumber": {
911
+ "type": "any",
912
+ "mutable": false,
913
+ "complexType": {
914
+ "original": "boolean | string",
915
+ "resolved": "boolean | string",
916
+ "references": {}
917
+ },
918
+ "required": false,
919
+ "optional": false,
920
+ "docs": {
921
+ "tags": [],
922
+ "text": "N\u00FAmero de p\u00E1gina en la banda. Se lee como intenci\u00F3n: `true` o `'true'`."
923
+ },
924
+ "getter": false,
925
+ "setter": false,
926
+ "reflect": false,
927
+ "attribute": "show-page-number",
928
+ "defaultValue": "false"
929
+ },
930
+ "pageSize": {
931
+ "type": "string",
932
+ "mutable": false,
933
+ "complexType": {
934
+ "original": "string | DocumentPageSize",
935
+ "resolved": "string | { width: number; height: number; }",
936
+ "references": {
937
+ "DocumentPageSize": {
938
+ "location": "local",
939
+ "path": "/Users/agox/worktrees/cobalt-docs-2026-09-24/packages/core/src/components/co-document-editor/co-document-editor.tsx",
940
+ "id": "src/components/co-document-editor/co-document-editor.tsx::DocumentPageSize"
941
+ }
942
+ }
943
+ },
944
+ "required": false,
945
+ "optional": false,
946
+ "docs": {
947
+ "tags": [],
948
+ "text": "`letter` | `a4` | `legal` o `{width, height}` en px a 96 dpi (objeto o JSON)."
949
+ },
950
+ "getter": false,
951
+ "setter": false,
952
+ "reflect": false,
953
+ "attribute": "page-size",
954
+ "defaultValue": "'letter'"
955
+ },
956
+ "margins": {
957
+ "type": "string",
958
+ "mutable": false,
959
+ "complexType": {
960
+ "original": "string | DocumentMargins",
961
+ "resolved": "DocumentMargins | string | undefined",
962
+ "references": {
963
+ "DocumentMargins": {
964
+ "location": "local",
965
+ "path": "/Users/agox/worktrees/cobalt-docs-2026-09-24/packages/core/src/components/co-document-editor/co-document-editor.tsx",
966
+ "id": "src/components/co-document-editor/co-document-editor.tsx::DocumentMargins"
967
+ }
968
+ }
969
+ },
970
+ "required": false,
971
+ "optional": true,
972
+ "docs": {
973
+ "tags": [],
974
+ "text": "M\u00E1rgenes en px (objeto o JSON). Default 38 px por lado (10 mm)."
975
+ },
976
+ "getter": false,
977
+ "setter": false,
978
+ "reflect": false,
979
+ "attribute": "margins"
980
+ },
981
+ "headerHeight": {
982
+ "type": "number",
983
+ "mutable": false,
984
+ "complexType": {
985
+ "original": "number",
986
+ "resolved": "number",
987
+ "references": {}
988
+ },
989
+ "required": false,
990
+ "optional": false,
991
+ "docs": {
992
+ "tags": [],
993
+ "text": "Alto de la banda del encabezado en px (cuando hay encabezado)."
994
+ },
995
+ "getter": false,
996
+ "setter": false,
997
+ "reflect": false,
998
+ "attribute": "header-height",
999
+ "defaultValue": "45"
1000
+ },
1001
+ "pageStyles": {
1002
+ "type": "string",
1003
+ "mutable": false,
1004
+ "complexType": {
1005
+ "original": "string",
1006
+ "resolved": "string",
1007
+ "references": {}
1008
+ },
1009
+ "required": false,
1010
+ "optional": false,
1011
+ "docs": {
1012
+ "tags": [],
1013
+ "text": "CSS de impresi\u00F3n del host; se acota a la hoja."
1014
+ },
1015
+ "getter": false,
1016
+ "setter": false,
1017
+ "reflect": false,
1018
+ "attribute": "page-styles",
1019
+ "defaultValue": "''"
1020
+ },
1021
+ "features": {
1022
+ "type": "string",
1023
+ "mutable": false,
1024
+ "complexType": {
1025
+ "original": "string | DocumentFeatures",
1026
+ "resolved": "DocumentFeatures | string | undefined",
1027
+ "references": {
1028
+ "DocumentFeatures": {
1029
+ "location": "local",
1030
+ "path": "/Users/agox/worktrees/cobalt-docs-2026-09-24/packages/core/src/components/co-document-editor/co-document-editor.tsx",
1031
+ "id": "src/components/co-document-editor/co-document-editor.tsx::DocumentFeatures"
1032
+ }
1033
+ }
1034
+ },
1035
+ "required": false,
1036
+ "optional": true,
1037
+ "docs": {
1038
+ "tags": [],
1039
+ "text": "`{fields, signatureSlots}` (objeto o JSON)."
1040
+ },
1041
+ "getter": false,
1042
+ "setter": false,
1043
+ "reflect": false,
1044
+ "attribute": "features"
1045
+ },
1046
+ "imageUpload": {
1047
+ "type": "unknown",
1048
+ "mutable": false,
1049
+ "complexType": {
1050
+ "original": "ImageUploadHandler",
1051
+ "resolved": "((file: File) => Promise<string | ImageUploadResult>) | undefined",
1052
+ "references": {
1053
+ "ImageUploadHandler": {
1054
+ "location": "import",
1055
+ "path": "@prolibu-suite/cobalt-rich-text",
1056
+ "id": "../rich-text/dist/index.d.ts::ImageUploadHandler",
1057
+ "referenceLocation": "ImageUploadHandler"
1058
+ }
1059
+ }
1060
+ },
1061
+ "required": false,
1062
+ "optional": true,
1063
+ "docs": {
1064
+ "tags": [],
1065
+ "text": "`(file) => Promise<{src, fileId?}>` (propiedad JS)."
1066
+ },
1067
+ "getter": false,
1068
+ "setter": false
1069
+ },
1070
+ "readonly": {
1071
+ "type": "boolean",
1072
+ "mutable": false,
1073
+ "complexType": {
1074
+ "original": "boolean",
1075
+ "resolved": "boolean",
1076
+ "references": {}
1077
+ },
1078
+ "required": false,
1079
+ "optional": false,
1080
+ "docs": {
1081
+ "tags": [],
1082
+ "text": "Solo lectura: sin barra ni edici\u00F3n (el encabezado tampoco se puede editar)."
1083
+ },
1084
+ "getter": false,
1085
+ "setter": false,
1086
+ "reflect": false,
1087
+ "attribute": "readonly",
1088
+ "defaultValue": "false"
1089
+ },
1090
+ "locale": {
1091
+ "type": "string",
1092
+ "mutable": false,
1093
+ "complexType": {
1094
+ "original": "string",
1095
+ "resolved": "string",
1096
+ "references": {}
1097
+ },
1098
+ "required": false,
1099
+ "optional": false,
1100
+ "docs": {
1101
+ "tags": [],
1102
+ "text": "BCP-47 para los textos de la UI ('es', 'en', 'pt-BR'\u2026)."
1103
+ },
1104
+ "getter": false,
1105
+ "setter": false,
1106
+ "reflect": false,
1107
+ "attribute": "locale",
1108
+ "defaultValue": "'en'"
1109
+ },
1110
+ "extraItems": {
1111
+ "type": "string",
1112
+ "mutable": false,
1113
+ "complexType": {
1114
+ "original": "string | ToolbarExtraItem[]",
1115
+ "resolved": "ToolbarExtraItem[] | string | undefined",
1116
+ "references": {
1117
+ "ToolbarExtraItem": {
1118
+ "location": "import",
1119
+ "path": "@prolibu-suite/cobalt-rich-text",
1120
+ "id": "../rich-text/dist/index.d.ts::ToolbarExtraItem",
1121
+ "referenceLocation": "ToolbarExtraItem"
1122
+ }
1123
+ }
1124
+ },
1125
+ "required": false,
1126
+ "optional": true,
1127
+ "docs": {
1128
+ "tags": [],
1129
+ "text": "Botones del host al final de la barra (objeto o JSON): `[{id, label, icon?}]`."
1130
+ },
1131
+ "getter": false,
1132
+ "setter": false,
1133
+ "reflect": false,
1134
+ "attribute": "extra-items"
1135
+ },
1136
+ "label": {
1137
+ "type": "string",
1138
+ "mutable": false,
1139
+ "complexType": {
1140
+ "original": "string",
1141
+ "resolved": "string | undefined",
1142
+ "references": {}
1143
+ },
1144
+ "required": false,
1145
+ "optional": true,
1146
+ "docs": {
1147
+ "tags": [],
1148
+ "text": "Nombre accesible del \u00E1rea de edici\u00F3n."
1149
+ },
1150
+ "getter": false,
1151
+ "setter": false,
1152
+ "reflect": false,
1153
+ "attribute": "label"
1154
+ }
1155
+ };
1156
+ }
1157
+ static get states() {
1158
+ return {
1159
+ "ready": {},
1160
+ "pageCount": {},
1161
+ "zoomMode": {},
1162
+ "scale": {},
1163
+ "stageHeight": {},
1164
+ "headerEditing": {},
1165
+ "draftShowPageNumber": {},
1166
+ "imageBar": {}
1167
+ };
1168
+ }
1169
+ static get events() {
1170
+ return [{
1171
+ "method": "coChange",
1172
+ "name": "coChange",
1173
+ "bubbles": false,
1174
+ "cancelable": true,
1175
+ "composed": true,
1176
+ "docs": {
1177
+ "tags": [],
1178
+ "text": "Hubo un cambio del usuario en el cuerpo (sin HTML; como mucho cada 250 ms)."
1179
+ },
1180
+ "complexType": {
1181
+ "original": "void",
1182
+ "resolved": "void",
1183
+ "references": {}
1184
+ }
1185
+ }, {
1186
+ "method": "coFieldsChange",
1187
+ "name": "coFieldsChange",
1188
+ "bubbles": false,
1189
+ "cancelable": true,
1190
+ "composed": true,
1191
+ "docs": {
1192
+ "tags": [],
1193
+ "text": "Lista de campos (cuerpo + encabezado) cuando cambia."
1194
+ },
1195
+ "complexType": {
1196
+ "original": "FieldInfo[]",
1197
+ "resolved": "FieldDefinition[]",
1198
+ "references": {
1199
+ "FieldInfo": {
1200
+ "location": "import",
1201
+ "path": "@prolibu-suite/cobalt-rich-text",
1202
+ "id": "../rich-text/dist/index.d.ts::FieldInfo",
1203
+ "referenceLocation": "FieldInfo"
1204
+ }
1205
+ }
1206
+ }
1207
+ }, {
1208
+ "method": "coHeaderChange",
1209
+ "name": "coHeaderChange",
1210
+ "bubbles": false,
1211
+ "cancelable": true,
1212
+ "composed": true,
1213
+ "docs": {
1214
+ "tags": [],
1215
+ "text": "Encabezado confirmado."
1216
+ },
1217
+ "complexType": {
1218
+ "original": "DocumentHeaderDetail",
1219
+ "resolved": "DocumentHeaderDetail",
1220
+ "references": {
1221
+ "DocumentHeaderDetail": {
1222
+ "location": "local",
1223
+ "path": "/Users/agox/worktrees/cobalt-docs-2026-09-24/packages/core/src/components/co-document-editor/co-document-editor.tsx",
1224
+ "id": "src/components/co-document-editor/co-document-editor.tsx::DocumentHeaderDetail"
1225
+ }
1226
+ }
1227
+ }
1228
+ }, {
1229
+ "method": "coPagesChange",
1230
+ "name": "coPagesChange",
1231
+ "bubbles": false,
1232
+ "cancelable": true,
1233
+ "composed": true,
1234
+ "docs": {
1235
+ "tags": [],
1236
+ "text": "Cantidad de p\u00E1ginas."
1237
+ },
1238
+ "complexType": {
1239
+ "original": "number",
1240
+ "resolved": "number",
1241
+ "references": {}
1242
+ }
1243
+ }, {
1244
+ "method": "coAction",
1245
+ "name": "coAction",
1246
+ "bubbles": false,
1247
+ "cancelable": true,
1248
+ "composed": true,
1249
+ "docs": {
1250
+ "tags": [],
1251
+ "text": "Clic en un bot\u00F3n del host (`extraItems`): `{ action: <id>, payload: { extra: true } }`."
1252
+ },
1253
+ "complexType": {
1254
+ "original": "DocumentActionDetail",
1255
+ "resolved": "DocumentActionDetail",
1256
+ "references": {
1257
+ "DocumentActionDetail": {
1258
+ "location": "local",
1259
+ "path": "/Users/agox/worktrees/cobalt-docs-2026-09-24/packages/core/src/components/co-document-editor/co-document-editor.tsx",
1260
+ "id": "src/components/co-document-editor/co-document-editor.tsx::DocumentActionDetail"
1261
+ }
1262
+ }
1263
+ }
1264
+ }, {
1265
+ "method": "coReady",
1266
+ "name": "coReady",
1267
+ "bubbles": false,
1268
+ "cancelable": true,
1269
+ "composed": true,
1270
+ "docs": {
1271
+ "tags": [],
1272
+ "text": "El editor termin\u00F3 de montar. No burbujea."
1273
+ },
1274
+ "complexType": {
1275
+ "original": "void",
1276
+ "resolved": "void",
1277
+ "references": {}
1278
+ }
1279
+ }];
1280
+ }
1281
+ static get methods() {
1282
+ return {
1283
+ "getPrintHtml": {
1284
+ "complexType": {
1285
+ "signature": "() => Promise<string>",
1286
+ "parameters": [],
1287
+ "references": {
1288
+ "Promise": {
1289
+ "location": "global",
1290
+ "id": "global::Promise"
1291
+ }
1292
+ },
1293
+ "return": "Promise<string>"
1294
+ },
1295
+ "docs": {
1296
+ "text": "Cuerpo en la forma can\u00F3nica de impresi\u00F3n (spec \u00A73.4).",
1297
+ "tags": []
1298
+ }
1299
+ },
1300
+ "getHeaderHtml": {
1301
+ "complexType": {
1302
+ "signature": "() => Promise<string>",
1303
+ "parameters": [],
1304
+ "references": {
1305
+ "Promise": {
1306
+ "location": "global",
1307
+ "id": "global::Promise"
1308
+ }
1309
+ },
1310
+ "return": "Promise<string>"
1311
+ },
1312
+ "docs": {
1313
+ "text": "HTML del encabezado confirmado: el de la prop tal cual, o la forma can\u00F3nica\nsi pas\u00F3 por la banda o por `setFieldValues`. Lo que se est\u00E1 editando en la\nbanda sin confirmar NO cuenta.",
1314
+ "tags": []
1315
+ }
1316
+ },
1317
+ "getJSON": {
1318
+ "complexType": {
1319
+ "signature": "() => Promise<object | null>",
1320
+ "parameters": [],
1321
+ "references": {
1322
+ "Promise": {
1323
+ "location": "global",
1324
+ "id": "global::Promise"
1325
+ }
1326
+ },
1327
+ "return": "Promise<object | null>"
1328
+ },
1329
+ "docs": {
1330
+ "text": "Cuerpo como JSON de ProseMirror, o `null` si todav\u00EDa no mont\u00F3.",
1331
+ "tags": []
1332
+ }
1333
+ },
1334
+ "flushChange": {
1335
+ "complexType": {
1336
+ "signature": "() => Promise<void>",
1337
+ "parameters": [],
1338
+ "references": {
1339
+ "Promise": {
1340
+ "location": "global",
1341
+ "id": "global::Promise"
1342
+ }
1343
+ },
1344
+ "return": "Promise<void>"
1345
+ },
1346
+ "docs": {
1347
+ "text": "Emite YA el `coChange` pendiente (no-op si no hay). El host lo llama antes de\ndecidir \u00ABcambios sin aplicar\u00BB (cerrar, navegar): `coChange` sale al final de\nla ventana de 250 ms y una edici\u00F3n reci\u00E9n tipeada todav\u00EDa no avis\u00F3.\nEl blur del editor y un Escape dentro del componente lo hacen solos.",
1348
+ "tags": []
1349
+ }
1350
+ },
1351
+ "isEmpty": {
1352
+ "complexType": {
1353
+ "signature": "() => Promise<boolean>",
1354
+ "parameters": [],
1355
+ "references": {
1356
+ "Promise": {
1357
+ "location": "global",
1358
+ "id": "global::Promise"
1359
+ }
1360
+ },
1361
+ "return": "Promise<boolean>"
1362
+ },
1363
+ "docs": {
1364
+ "text": "\u00BFCuerpo vac\u00EDo? En print un documento vac\u00EDo NO serializa a `''`\n(`<p><br class=\"ProseMirror-trailingBreak\"></p>`): el host pregunta ac\u00E1.",
1365
+ "tags": []
1366
+ }
1367
+ },
1368
+ "setContent": {
1369
+ "complexType": {
1370
+ "signature": "(html: string) => Promise<void>",
1371
+ "parameters": [{
1372
+ "name": "html",
1373
+ "type": "string",
1374
+ "docs": ""
1375
+ }],
1376
+ "references": {
1377
+ "Promise": {
1378
+ "location": "global",
1379
+ "id": "global::Promise"
1380
+ }
1381
+ },
1382
+ "return": "Promise<void>"
1383
+ },
1384
+ "docs": {
1385
+ "text": "Reemplaza el cuerpo (HTML de impresi\u00F3n, V1 incluido). A diferencia del RTE, NO emite coChange.",
1386
+ "tags": []
1387
+ }
1388
+ },
1389
+ "setFieldValues": {
1390
+ "complexType": {
1391
+ "signature": "(values: Record<string, string>) => Promise<void>",
1392
+ "parameters": [{
1393
+ "name": "values",
1394
+ "type": "{ [x: string]: string; }",
1395
+ "docs": ""
1396
+ }],
1397
+ "references": {
1398
+ "Promise": {
1399
+ "location": "global",
1400
+ "id": "global::Promise"
1401
+ },
1402
+ "Record": {
1403
+ "location": "global",
1404
+ "id": "global::Record"
1405
+ }
1406
+ },
1407
+ "return": "Promise<void>"
1408
+ },
1409
+ "docs": {
1410
+ "text": "Valores de los campos (cuerpo y encabezado) en UNA transacci\u00F3n por editor; no\ncuenta como edici\u00F3n del usuario ni emite coHeaderChange. Con la banda abierta\nse aplican tambi\u00E9n al confirmado, as\u00ED cancelar no los pierde.",
1411
+ "tags": []
1412
+ }
1413
+ },
1414
+ "insertField": {
1415
+ "complexType": {
1416
+ "signature": "(name: string, opts?: Partial<Omit<MergeFieldAttributes, \"name\">>) => Promise<void>",
1417
+ "parameters": [{
1418
+ "name": "name",
1419
+ "type": "string",
1420
+ "docs": ""
1421
+ }, {
1422
+ "name": "opts",
1423
+ "type": "Partial<Omit<MergeFieldAttributes, \"name\">> | undefined",
1424
+ "docs": ""
1425
+ }],
1426
+ "references": {
1427
+ "Promise": {
1428
+ "location": "global",
1429
+ "id": "global::Promise"
1430
+ },
1431
+ "Partial": {
1432
+ "location": "global",
1433
+ "id": "global::Partial"
1434
+ },
1435
+ "Omit": {
1436
+ "location": "global",
1437
+ "id": "global::Omit"
1438
+ },
1439
+ "MergeFieldAttributes": {
1440
+ "location": "import",
1441
+ "path": "@prolibu-suite/cobalt-rich-text",
1442
+ "id": "../rich-text/dist/index.d.ts::MergeFieldAttributes",
1443
+ "referenceLocation": "MergeFieldAttributes"
1444
+ }
1445
+ },
1446
+ "return": "Promise<void>"
1447
+ },
1448
+ "docs": {
1449
+ "text": "Inserta un campo `[[name]]` en el cursor; `opts`: `required`, `type`, `enum`, `value`.",
1450
+ "tags": []
1451
+ }
1452
+ },
1453
+ "insertSignatureSlot": {
1454
+ "complexType": {
1455
+ "signature": "() => Promise<void>",
1456
+ "parameters": [],
1457
+ "references": {
1458
+ "Promise": {
1459
+ "location": "global",
1460
+ "id": "global::Promise"
1461
+ }
1462
+ },
1463
+ "return": "Promise<void>"
1464
+ },
1465
+ "docs": {
1466
+ "text": "Inserta el siguiente marcador de firma libre (`\u27E6sig:N\u27E7`) en el cursor.",
1467
+ "tags": []
1468
+ }
1469
+ },
1470
+ "focusEditor": {
1471
+ "complexType": {
1472
+ "signature": "() => Promise<void>",
1473
+ "parameters": [],
1474
+ "references": {
1475
+ "Promise": {
1476
+ "location": "global",
1477
+ "id": "global::Promise"
1478
+ }
1479
+ },
1480
+ "return": "Promise<void>"
1481
+ },
1482
+ "docs": {
1483
+ "text": "Enfoca el cuerpo del documento.",
1484
+ "tags": []
1485
+ }
1486
+ },
1487
+ "getEditorInstance": {
1488
+ "complexType": {
1489
+ "signature": "() => Promise<Editor | null>",
1490
+ "parameters": [],
1491
+ "references": {
1492
+ "Promise": {
1493
+ "location": "global",
1494
+ "id": "global::Promise"
1495
+ },
1496
+ "Editor": {
1497
+ "location": "import",
1498
+ "path": "@prolibu-suite/cobalt-rich-text",
1499
+ "id": "../rich-text/dist/index.d.ts::Editor",
1500
+ "referenceLocation": "Editor"
1501
+ }
1502
+ },
1503
+ "return": "Promise<Editor | null>"
1504
+ },
1505
+ "docs": {
1506
+ "text": "Instancia Tiptap del cuerpo (escape hatch), o `null` antes de montar.",
1507
+ "tags": []
1508
+ }
1509
+ }
1510
+ };
1511
+ }
1512
+ static get elementRef() { return "el"; }
1513
+ static get watchers() {
1514
+ return [{
1515
+ "propName": "value",
1516
+ "methodName": "onValueChange"
1517
+ }, {
1518
+ "propName": "readonly",
1519
+ "methodName": "onReadonlyChange"
1520
+ }, {
1521
+ "propName": "pageSize",
1522
+ "methodName": "onPageGeometryChange"
1523
+ }, {
1524
+ "propName": "margins",
1525
+ "methodName": "onPageGeometryChange"
1526
+ }, {
1527
+ "propName": "headerHeight",
1528
+ "methodName": "onPageGeometryChange"
1529
+ }, {
1530
+ "propName": "headerHtml",
1531
+ "methodName": "onHeaderPropsChange"
1532
+ }, {
1533
+ "propName": "showPageNumber",
1534
+ "methodName": "onHeaderPropsChange"
1535
+ }, {
1536
+ "propName": "pageStyles",
1537
+ "methodName": "onPageStylesChange"
1538
+ }, {
1539
+ "propName": "label",
1540
+ "methodName": "onLabelChange"
1541
+ }, {
1542
+ "propName": "locale",
1543
+ "methodName": "onLabelChange"
1544
+ }, {
1545
+ "propName": "locale",
1546
+ "methodName": "onLocaleChange"
1547
+ }];
1548
+ }
1549
+ }