@wix/patterns-fields 1.115.0 → 1.117.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/dist/cjs/assets/locale/messages_ar.json +2 -0
  2. package/dist/cjs/assets/locale/messages_bg.json +2 -0
  3. package/dist/cjs/assets/locale/messages_ca.json +2 -0
  4. package/dist/cjs/assets/locale/messages_cs.json +2 -0
  5. package/dist/cjs/assets/locale/messages_da.json +2 -0
  6. package/dist/cjs/assets/locale/messages_de.json +2 -0
  7. package/dist/cjs/assets/locale/messages_el.json +2 -0
  8. package/dist/cjs/assets/locale/messages_en.json +2 -0
  9. package/dist/cjs/assets/locale/messages_es.json +2 -0
  10. package/dist/cjs/assets/locale/messages_fi.json +2 -0
  11. package/dist/cjs/assets/locale/messages_fr.json +2 -0
  12. package/dist/cjs/assets/locale/messages_he.json +2 -0
  13. package/dist/cjs/assets/locale/messages_hi.json +2 -0
  14. package/dist/cjs/assets/locale/messages_hu.json +2 -0
  15. package/dist/cjs/assets/locale/messages_id.json +2 -0
  16. package/dist/cjs/assets/locale/messages_it.json +2 -0
  17. package/dist/cjs/assets/locale/messages_ja.json +2 -0
  18. package/dist/cjs/assets/locale/messages_ko.json +2 -0
  19. package/dist/cjs/assets/locale/messages_lt.json +2 -0
  20. package/dist/cjs/assets/locale/messages_ms.json +2 -0
  21. package/dist/cjs/assets/locale/messages_nl.json +2 -0
  22. package/dist/cjs/assets/locale/messages_no.json +2 -0
  23. package/dist/cjs/assets/locale/messages_pl.json +2 -0
  24. package/dist/cjs/assets/locale/messages_pt.json +2 -0
  25. package/dist/cjs/assets/locale/messages_ro.json +2 -0
  26. package/dist/cjs/assets/locale/messages_ru.json +2 -0
  27. package/dist/cjs/assets/locale/messages_sk.json +2 -0
  28. package/dist/cjs/assets/locale/messages_sl.json +2 -0
  29. package/dist/cjs/assets/locale/messages_sv.json +2 -0
  30. package/dist/cjs/assets/locale/messages_th.json +2 -0
  31. package/dist/cjs/assets/locale/messages_tl.json +2 -0
  32. package/dist/cjs/assets/locale/messages_tr.json +2 -0
  33. package/dist/cjs/assets/locale/messages_uk.json +2 -0
  34. package/dist/cjs/assets/locale/messages_vi.json +2 -0
  35. package/dist/cjs/assets/locale/messages_zh.json +2 -0
  36. package/dist/cjs/assets/locale/version_file +1 -1
  37. package/dist/cjs/components/address/input/address-input.st.css.js +3 -3
  38. package/dist/cjs/components/address/input/address-input.st.css.js.map +1 -1
  39. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js +3 -3
  40. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js.map +1 -1
  41. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js +4 -4
  42. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
  43. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js +2 -2
  44. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js.map +1 -1
  45. package/dist/cjs/components/audio/cell-audio-edit.js +10 -11
  46. package/dist/cjs/components/audio/cell-audio-edit.js.map +1 -1
  47. package/dist/cjs/components/color-view/cell-color-view.st.css.js +3 -3
  48. package/dist/cjs/components/color-view/cell-color-view.st.css.js.map +1 -1
  49. package/dist/cjs/components/color-view/color-view.st.css.js +4 -4
  50. package/dist/cjs/components/color-view/color-view.st.css.js.map +1 -1
  51. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js +3 -3
  52. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js.map +1 -1
  53. package/dist/cjs/components/document/cell-document-edit.js +25 -26
  54. package/dist/cjs/components/document/cell-document-edit.js.map +1 -1
  55. package/dist/cjs/components/document/form-document-field.st.css.js +7 -7
  56. package/dist/cjs/components/document/form-document-field.st.css.js.map +1 -1
  57. package/dist/cjs/components/exclamation/exclamation.st.css.js +5 -5
  58. package/dist/cjs/components/exclamation/exclamation.st.css.js.map +1 -1
  59. package/dist/cjs/components/field-validation-settings/field-validation-settings-input.st.css.js +3 -3
  60. package/dist/cjs/components/field-validation-settings/field-validation-settings-input.st.css.js.map +1 -1
  61. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js +5 -5
  62. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
  63. package/dist/cjs/components/image/cell-image-edit.js +22 -23
  64. package/dist/cjs/components/image/cell-image-edit.js.map +1 -1
  65. package/dist/cjs/components/image/image-preview-popover.js +77 -0
  66. package/dist/cjs/components/image/image-preview-popover.js.map +1 -0
  67. package/dist/cjs/components/image/image-thumbnail.js +14 -12
  68. package/dist/cjs/components/image/image-thumbnail.js.map +1 -1
  69. package/dist/cjs/components/image/image-view.js +9 -57
  70. package/dist/cjs/components/image/image-view.js.map +1 -1
  71. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js +3 -3
  72. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js.map +1 -1
  73. package/dist/cjs/components/index.js +6 -0
  74. package/dist/cjs/components/index.js.map +1 -1
  75. package/dist/cjs/components/media-control/cell-media-edit-shell.js +19 -31
  76. package/dist/cjs/components/media-control/cell-media-edit-shell.js.map +1 -1
  77. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  78. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js.map +1 -1
  79. package/dist/cjs/components/media-control/paste-url-button.st.css.js +4 -4
  80. package/dist/cjs/components/media-control/paste-url-button.st.css.js.map +1 -1
  81. package/dist/cjs/components/media-control/use-cell-media-edit.js +51 -23
  82. package/dist/cjs/components/media-control/use-cell-media-edit.js.map +1 -1
  83. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js +10 -10
  84. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js.map +1 -1
  85. package/dist/cjs/components/media-image/media-image.st.css.js +4 -4
  86. package/dist/cjs/components/media-image/media-image.st.css.js.map +1 -1
  87. package/dist/cjs/components/media-image/overlays/overlay.st.css.js +3 -3
  88. package/dist/cjs/components/media-image/overlays/overlay.st.css.js.map +1 -1
  89. package/dist/cjs/components/media-image-field/cell-media-image-edit.js +530 -0
  90. package/dist/cjs/components/media-image-field/cell-media-image-edit.js.map +1 -0
  91. package/dist/cjs/components/media-image-field/cell-media-image-edit.st.css +63 -0
  92. package/dist/cjs/components/media-image-field/cell-media-image-edit.st.css.js +33 -0
  93. package/dist/cjs/components/media-image-field/cell-media-image-edit.st.css.js.map +1 -0
  94. package/dist/cjs/components/media-image-field/form-media-image-field.js +180 -0
  95. package/dist/cjs/components/media-image-field/form-media-image-field.js.map +1 -0
  96. package/dist/cjs/components/media-image-field/form-media-image-field.uni.driver.js +34 -0
  97. package/dist/cjs/components/media-image-field/form-media-image-field.uni.driver.js.map +1 -0
  98. package/dist/cjs/components/media-image-field/form-media-image-input.js +64 -0
  99. package/dist/cjs/components/media-image-field/form-media-image-input.js.map +1 -0
  100. package/dist/cjs/components/media-image-field/index.js +28 -0
  101. package/dist/cjs/components/media-image-field/index.js.map +1 -0
  102. package/dist/cjs/components/media-image-field/media-image-view.js +114 -0
  103. package/dist/cjs/components/media-image-field/media-image-view.js.map +1 -0
  104. package/dist/cjs/components/media-image-field/media-image-view.st.css +16 -0
  105. package/dist/cjs/components/media-image-field/media-image-view.st.css.js +27 -0
  106. package/dist/cjs/components/media-image-field/media-image-view.st.css.js.map +1 -0
  107. package/dist/cjs/components/media-image-field/media-image-view.uni.driver.js +18 -0
  108. package/dist/cjs/components/media-image-field/media-image-view.uni.driver.js.map +1 -0
  109. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  110. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js.map +1 -1
  111. package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js +3 -3
  112. package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
  113. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js +5 -5
  114. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  115. package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js +2 -2
  116. package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js.map +1 -1
  117. package/dist/cjs/components/reference/cell-reference-input.st.css.js +3 -3
  118. package/dist/cjs/components/reference/cell-reference-input.st.css.js.map +1 -1
  119. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +4 -4
  120. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
  121. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +3 -3
  122. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
  123. package/dist/cjs/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  124. package/dist/cjs/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js.map +1 -1
  125. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +3 -3
  126. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js.map +1 -1
  127. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +3 -3
  128. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
  129. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  130. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js.map +1 -1
  131. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +7 -7
  132. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js.map +1 -1
  133. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +5 -5
  134. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js.map +1 -1
  135. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +4 -4
  136. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
  137. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +18 -18
  138. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js.map +1 -1
  139. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +4 -4
  140. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js.map +1 -1
  141. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +18 -18
  142. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js.map +1 -1
  143. package/dist/cjs/components/text/cell-text-input.js +43 -27
  144. package/dist/cjs/components/text/cell-text-input.js.map +1 -1
  145. package/dist/cjs/components/text/text-view.st.css.js +3 -3
  146. package/dist/cjs/components/text/text-view.st.css.js.map +1 -1
  147. package/dist/cjs/services/translations.js.map +1 -1
  148. package/dist/cjs/styles.global.css +1 -1
  149. package/dist/cjs/types/index.js +6 -0
  150. package/dist/cjs/types/index.js.map +1 -1
  151. package/dist/cjs/types/media-image.js +4 -0
  152. package/dist/cjs/types/media-image.js.map +1 -0
  153. package/dist/cjs/utils/index.js +6 -0
  154. package/dist/cjs/utils/index.js.map +1 -1
  155. package/dist/cjs/utils/media-image-value.js +95 -0
  156. package/dist/cjs/utils/media-image-value.js.map +1 -0
  157. package/dist/esm/assets/locale/messages_ar.json +2 -0
  158. package/dist/esm/assets/locale/messages_bg.json +2 -0
  159. package/dist/esm/assets/locale/messages_ca.json +2 -0
  160. package/dist/esm/assets/locale/messages_cs.json +2 -0
  161. package/dist/esm/assets/locale/messages_da.json +2 -0
  162. package/dist/esm/assets/locale/messages_de.json +2 -0
  163. package/dist/esm/assets/locale/messages_el.json +2 -0
  164. package/dist/esm/assets/locale/messages_en.json +2 -0
  165. package/dist/esm/assets/locale/messages_es.json +2 -0
  166. package/dist/esm/assets/locale/messages_fi.json +2 -0
  167. package/dist/esm/assets/locale/messages_fr.json +2 -0
  168. package/dist/esm/assets/locale/messages_he.json +2 -0
  169. package/dist/esm/assets/locale/messages_hi.json +2 -0
  170. package/dist/esm/assets/locale/messages_hu.json +2 -0
  171. package/dist/esm/assets/locale/messages_id.json +2 -0
  172. package/dist/esm/assets/locale/messages_it.json +2 -0
  173. package/dist/esm/assets/locale/messages_ja.json +2 -0
  174. package/dist/esm/assets/locale/messages_ko.json +2 -0
  175. package/dist/esm/assets/locale/messages_lt.json +2 -0
  176. package/dist/esm/assets/locale/messages_ms.json +2 -0
  177. package/dist/esm/assets/locale/messages_nl.json +2 -0
  178. package/dist/esm/assets/locale/messages_no.json +2 -0
  179. package/dist/esm/assets/locale/messages_pl.json +2 -0
  180. package/dist/esm/assets/locale/messages_pt.json +2 -0
  181. package/dist/esm/assets/locale/messages_ro.json +2 -0
  182. package/dist/esm/assets/locale/messages_ru.json +2 -0
  183. package/dist/esm/assets/locale/messages_sk.json +2 -0
  184. package/dist/esm/assets/locale/messages_sl.json +2 -0
  185. package/dist/esm/assets/locale/messages_sv.json +2 -0
  186. package/dist/esm/assets/locale/messages_th.json +2 -0
  187. package/dist/esm/assets/locale/messages_tl.json +2 -0
  188. package/dist/esm/assets/locale/messages_tr.json +2 -0
  189. package/dist/esm/assets/locale/messages_uk.json +2 -0
  190. package/dist/esm/assets/locale/messages_vi.json +2 -0
  191. package/dist/esm/assets/locale/messages_zh.json +2 -0
  192. package/dist/esm/assets/locale/version_file +1 -1
  193. package/dist/esm/components/address/input/address-input.st.css.js +2 -2
  194. package/dist/esm/components/address/input/address-input.st.css.js.map +1 -1
  195. package/dist/esm/components/audio/actions/actions-menu/actions-menu.st.css.js +2 -2
  196. package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js +2 -2
  197. package/dist/esm/components/audio/audio-player/audio-player.st.css.js +2 -2
  198. package/dist/esm/components/audio/cell-audio-edit.js +1 -1
  199. package/dist/esm/components/audio/cell-audio-edit.js.map +1 -1
  200. package/dist/esm/components/color-view/cell-color-view.st.css.js +2 -2
  201. package/dist/esm/components/color-view/color-view.st.css.js +2 -2
  202. package/dist/esm/components/color-view/color-view.st.css.js.map +1 -1
  203. package/dist/esm/components/delete-dialog/delete-dialog.st.css.js +2 -2
  204. package/dist/esm/components/document/cell-document-edit.js +1 -1
  205. package/dist/esm/components/document/cell-document-edit.js.map +1 -1
  206. package/dist/esm/components/document/form-document-field.st.css.js +2 -2
  207. package/dist/esm/components/document/form-document-field.st.css.js.map +1 -1
  208. package/dist/esm/components/exclamation/exclamation.st.css.js +2 -2
  209. package/dist/esm/components/field-validation-settings/field-validation-settings-input.st.css.js +2 -2
  210. package/dist/esm/components/highlighted-text/highlighted-text.st.css.js +3 -3
  211. package/dist/esm/components/image/cell-image-edit.js +1 -1
  212. package/dist/esm/components/image/cell-image-edit.js.map +1 -1
  213. package/dist/esm/components/image/image-preview-popover.js +16 -0
  214. package/dist/esm/components/image/image-preview-popover.js.map +1 -0
  215. package/dist/esm/components/image/image-thumbnail.js +5 -6
  216. package/dist/esm/components/image/image-thumbnail.js.map +1 -1
  217. package/dist/esm/components/image/image-view.js +4 -13
  218. package/dist/esm/components/image/image-view.js.map +1 -1
  219. package/dist/esm/components/image/thumbnail-replace-overlay.st.css.js +2 -2
  220. package/dist/esm/components/index.js +1 -0
  221. package/dist/esm/components/index.js.map +1 -1
  222. package/dist/esm/components/media-control/cell-media-edit-shell.js +5 -7
  223. package/dist/esm/components/media-control/cell-media-edit-shell.js.map +1 -1
  224. package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  225. package/dist/esm/components/media-control/paste-url-button.st.css.js +2 -2
  226. package/dist/esm/components/media-control/paste-url-button.st.css.js.map +1 -1
  227. package/dist/esm/components/media-control/use-cell-media-edit.js +48 -30
  228. package/dist/esm/components/media-control/use-cell-media-edit.js.map +1 -1
  229. package/dist/esm/components/media-gallery/form-media-gallery-field.st.css.js +2 -2
  230. package/dist/esm/components/media-gallery/form-media-gallery-field.st.css.js.map +1 -1
  231. package/dist/esm/components/media-image/media-image.st.css.js +3 -3
  232. package/dist/esm/components/media-image/overlays/overlay.st.css.js +2 -2
  233. package/dist/esm/components/media-image-field/cell-media-image-edit.js +159 -0
  234. package/dist/esm/components/media-image-field/cell-media-image-edit.js.map +1 -0
  235. package/dist/esm/components/media-image-field/cell-media-image-edit.st.css +63 -0
  236. package/dist/esm/components/media-image-field/cell-media-image-edit.st.css.js +15 -0
  237. package/dist/esm/components/media-image-field/cell-media-image-edit.st.css.js.map +1 -0
  238. package/dist/esm/components/media-image-field/form-media-image-field.js +59 -0
  239. package/dist/esm/components/media-image-field/form-media-image-field.js.map +1 -0
  240. package/dist/esm/components/media-image-field/form-media-image-field.uni.driver.js +27 -0
  241. package/dist/esm/components/media-image-field/form-media-image-field.uni.driver.js.map +1 -0
  242. package/dist/esm/components/media-image-field/form-media-image-input.js +40 -0
  243. package/dist/esm/components/media-image-field/form-media-image-input.js.map +1 -0
  244. package/dist/esm/components/media-image-field/index.js +5 -0
  245. package/dist/esm/components/media-image-field/index.js.map +1 -0
  246. package/dist/esm/components/media-image-field/media-image-view.js +34 -0
  247. package/dist/esm/components/media-image-field/media-image-view.js.map +1 -0
  248. package/dist/esm/components/media-image-field/media-image-view.st.css +16 -0
  249. package/dist/esm/components/media-image-field/media-image-view.st.css.js +15 -0
  250. package/dist/esm/components/media-image-field/media-image-view.st.css.js.map +1 -0
  251. package/dist/esm/components/media-image-field/media-image-view.uni.driver.js +14 -0
  252. package/dist/esm/components/media-image-field/media-image-view.uni.driver.js.map +1 -0
  253. package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  254. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js +2 -2
  255. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
  256. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js +2 -2
  257. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  258. package/dist/esm/components/reference/cell-multi-reference-input.st.css.js +2 -2
  259. package/dist/esm/components/reference/cell-multi-reference-input.st.css.js.map +1 -1
  260. package/dist/esm/components/reference/cell-reference-input.st.css.js +2 -2
  261. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +2 -2
  262. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
  263. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +2 -2
  264. package/dist/esm/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  265. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +2 -2
  266. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +2 -2
  267. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
  268. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  269. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +2 -2
  270. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +2 -2
  271. package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +2 -2
  272. package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
  273. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +2 -2
  274. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +2 -2
  275. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +2 -2
  276. package/dist/esm/components/text/cell-text-input.js +9 -13
  277. package/dist/esm/components/text/cell-text-input.js.map +1 -1
  278. package/dist/esm/components/text/text-view.st.css.js +2 -2
  279. package/dist/esm/components/text/text-view.st.css.js.map +1 -1
  280. package/dist/esm/styles.global.css +1 -1
  281. package/dist/esm/types/index.js +1 -0
  282. package/dist/esm/types/index.js.map +1 -1
  283. package/dist/esm/types/media-image.js +2 -0
  284. package/dist/esm/types/media-image.js.map +1 -0
  285. package/dist/esm/utils/index.js +1 -0
  286. package/dist/esm/utils/index.js.map +1 -1
  287. package/dist/esm/utils/media-image-value.js +65 -0
  288. package/dist/esm/utils/media-image-value.js.map +1 -0
  289. package/dist/types/components/address/input/address-input.st.css.d.ts.map +1 -1
  290. package/dist/types/components/audio/cell-audio-edit.d.ts.map +1 -1
  291. package/dist/types/components/color-view/color-view.st.css.d.ts.map +1 -1
  292. package/dist/types/components/document/cell-document-edit.d.ts.map +1 -1
  293. package/dist/types/components/document/form-document-field.st.css.d.ts.map +1 -1
  294. package/dist/types/components/image/cell-image-edit.d.ts.map +1 -1
  295. package/dist/types/components/image/image-preview-popover.d.ts +10 -0
  296. package/dist/types/components/image/image-preview-popover.d.ts.map +1 -0
  297. package/dist/types/components/image/image-thumbnail.d.ts +3 -0
  298. package/dist/types/components/image/image-thumbnail.d.ts.map +1 -1
  299. package/dist/types/components/image/image-view.d.ts.map +1 -1
  300. package/dist/types/components/index.d.ts +1 -0
  301. package/dist/types/components/index.d.ts.map +1 -1
  302. package/dist/types/components/media-control/cell-media-edit-shell.d.ts +1 -2
  303. package/dist/types/components/media-control/cell-media-edit-shell.d.ts.map +1 -1
  304. package/dist/types/components/media-control/paste-url-button.st.css.d.ts.map +1 -1
  305. package/dist/types/components/media-control/use-cell-media-edit.d.ts +20 -4
  306. package/dist/types/components/media-control/use-cell-media-edit.d.ts.map +1 -1
  307. package/dist/types/components/media-gallery/form-media-gallery-field.st.css.d.ts.map +1 -1
  308. package/dist/types/components/media-image-field/cell-media-image-edit.d.ts +26 -0
  309. package/dist/types/components/media-image-field/cell-media-image-edit.d.ts.map +1 -0
  310. package/dist/types/components/media-image-field/cell-media-image-edit.st.css.d.ts +24 -0
  311. package/dist/types/components/media-image-field/cell-media-image-edit.st.css.d.ts.map +1 -0
  312. package/dist/types/components/media-image-field/form-media-image-field.d.ts +32 -0
  313. package/dist/types/components/media-image-field/form-media-image-field.d.ts.map +1 -0
  314. package/dist/types/components/media-image-field/form-media-image-field.uni.driver.d.ts +22 -0
  315. package/dist/types/components/media-image-field/form-media-image-field.uni.driver.d.ts.map +1 -0
  316. package/dist/types/components/media-image-field/form-media-image-input.d.ts +9 -0
  317. package/dist/types/components/media-image-field/form-media-image-input.d.ts.map +1 -0
  318. package/dist/types/components/media-image-field/index.d.ts +5 -0
  319. package/dist/types/components/media-image-field/index.d.ts.map +1 -0
  320. package/dist/types/components/media-image-field/media-image-view.d.ts +13 -0
  321. package/dist/types/components/media-image-field/media-image-view.d.ts.map +1 -0
  322. package/dist/types/components/media-image-field/media-image-view.st.css.d.ts +18 -0
  323. package/dist/types/components/media-image-field/media-image-view.st.css.d.ts.map +1 -0
  324. package/dist/types/components/media-image-field/media-image-view.uni.driver.d.ts +12 -0
  325. package/dist/types/components/media-image-field/media-image-view.uni.driver.d.ts.map +1 -0
  326. package/dist/types/components/multi-document/cell-multi-document-edit.st.css.d.ts.map +1 -1
  327. package/dist/types/components/multi-document/multi-document-input/form-multi-document.st.css.d.ts.map +1 -1
  328. package/dist/types/components/reference/cell-multi-reference-input.st.css.d.ts.map +1 -1
  329. package/dist/types/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.d.ts.map +1 -1
  330. package/dist/types/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.d.ts.map +1 -1
  331. package/dist/types/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.d.ts.map +1 -1
  332. package/dist/types/components/text/cell-text-input.d.ts +1 -1
  333. package/dist/types/components/text/cell-text-input.d.ts.map +1 -1
  334. package/dist/types/components/text/text-view.st.css.d.ts.map +1 -1
  335. package/dist/types/services/translations.d.ts +1 -1
  336. package/dist/types/services/translations.d.ts.map +1 -1
  337. package/dist/types/types/index.d.ts +1 -0
  338. package/dist/types/types/index.d.ts.map +1 -1
  339. package/dist/types/types/media-image.d.ts +23 -0
  340. package/dist/types/types/media-image.d.ts.map +1 -0
  341. package/dist/types/utils/index.d.ts +1 -0
  342. package/dist/types/utils/index.d.ts.map +1 -1
  343. package/dist/types/utils/media-image-value.d.ts +31 -0
  344. package/dist/types/utils/media-image-value.d.ts.map +1 -0
  345. package/package.json +4 -4
  346. package/src/__tests__/components/media-image-field/form-media-image-input.spec.tsx +130 -0
  347. package/src/__tests__/components/media-image-field/media-image-view.spec.tsx +51 -0
  348. package/src/__tests__/components/text/cell-text-input.spec.tsx +27 -0
  349. package/src/__tests__/utils/media-image-value.spec.ts +153 -0
  350. package/src/assets/locale/messages_ar.json +2 -0
  351. package/src/assets/locale/messages_bg.json +2 -0
  352. package/src/assets/locale/messages_ca.json +2 -0
  353. package/src/assets/locale/messages_cs.json +2 -0
  354. package/src/assets/locale/messages_da.json +2 -0
  355. package/src/assets/locale/messages_de.json +2 -0
  356. package/src/assets/locale/messages_el.json +2 -0
  357. package/src/assets/locale/messages_en.json +2 -0
  358. package/src/assets/locale/messages_es.json +2 -0
  359. package/src/assets/locale/messages_fi.json +2 -0
  360. package/src/assets/locale/messages_fr.json +2 -0
  361. package/src/assets/locale/messages_he.json +2 -0
  362. package/src/assets/locale/messages_hi.json +2 -0
  363. package/src/assets/locale/messages_hu.json +2 -0
  364. package/src/assets/locale/messages_id.json +2 -0
  365. package/src/assets/locale/messages_it.json +2 -0
  366. package/src/assets/locale/messages_ja.json +2 -0
  367. package/src/assets/locale/messages_ko.json +2 -0
  368. package/src/assets/locale/messages_lt.json +2 -0
  369. package/src/assets/locale/messages_ms.json +2 -0
  370. package/src/assets/locale/messages_nl.json +2 -0
  371. package/src/assets/locale/messages_no.json +2 -0
  372. package/src/assets/locale/messages_pl.json +2 -0
  373. package/src/assets/locale/messages_pt.json +2 -0
  374. package/src/assets/locale/messages_ro.json +2 -0
  375. package/src/assets/locale/messages_ru.json +2 -0
  376. package/src/assets/locale/messages_sk.json +2 -0
  377. package/src/assets/locale/messages_sl.json +2 -0
  378. package/src/assets/locale/messages_sv.json +2 -0
  379. package/src/assets/locale/messages_th.json +2 -0
  380. package/src/assets/locale/messages_tl.json +2 -0
  381. package/src/assets/locale/messages_tr.json +2 -0
  382. package/src/assets/locale/messages_uk.json +2 -0
  383. package/src/assets/locale/messages_vi.json +2 -0
  384. package/src/assets/locale/messages_zh.json +2 -0
  385. package/src/assets/locale/version_file +1 -1
  386. package/src/components/address/input/address-input.st.css.ts +2 -2
  387. package/src/components/audio/actions/actions-menu/actions-menu.st.css.ts +2 -2
  388. package/src/components/audio/audio-field/form-audio-field.st.css.ts +2 -2
  389. package/src/components/audio/audio-player/audio-player.st.css.ts +2 -2
  390. package/src/components/audio/cell-audio-edit.tsx +0 -1
  391. package/src/components/color-view/cell-color-view.st.css.ts +2 -2
  392. package/src/components/color-view/color-view.st.css.ts +2 -2
  393. package/src/components/delete-dialog/delete-dialog.st.css.ts +2 -2
  394. package/src/components/document/cell-document-edit.tsx +0 -1
  395. package/src/components/document/form-document-field.st.css.ts +2 -2
  396. package/src/components/exclamation/exclamation.st.css.ts +2 -2
  397. package/src/components/field-validation-settings/field-validation-settings-input.st.css.ts +2 -2
  398. package/src/components/highlighted-text/highlighted-text.st.css.ts +3 -3
  399. package/src/components/image/cell-image-edit.tsx +0 -1
  400. package/src/components/image/image-preview-popover.tsx +52 -0
  401. package/src/components/image/image-thumbnail.tsx +12 -7
  402. package/src/components/image/image-view.tsx +16 -42
  403. package/src/components/image/thumbnail-replace-overlay.st.css.ts +2 -2
  404. package/src/components/index.ts +1 -0
  405. package/src/components/media-control/cell-media-edit-shell.st.css.ts +2 -2
  406. package/src/components/media-control/cell-media-edit-shell.tsx +7 -20
  407. package/src/components/media-control/paste-url-button.st.css.ts +2 -2
  408. package/src/components/media-control/use-cell-media-edit.ts +98 -28
  409. package/src/components/media-gallery/form-media-gallery-field.st.css.ts +2 -2
  410. package/src/components/media-image/media-image.st.css.ts +3 -3
  411. package/src/components/media-image/overlays/overlay.st.css.ts +2 -2
  412. package/src/components/media-image-field/cell-media-image-edit.st.css +63 -0
  413. package/src/components/media-image-field/cell-media-image-edit.st.css.ts +25 -0
  414. package/src/components/media-image-field/cell-media-image-edit.tsx +402 -0
  415. package/src/components/media-image-field/form-media-image-field.tsx +165 -0
  416. package/src/components/media-image-field/form-media-image-field.uni.driver.ts +42 -0
  417. package/src/components/media-image-field/form-media-image-input.tsx +56 -0
  418. package/src/components/media-image-field/index.ts +4 -0
  419. package/src/components/media-image-field/media-image-view.st.css +16 -0
  420. package/src/components/media-image-field/media-image-view.st.css.ts +25 -0
  421. package/src/components/media-image-field/media-image-view.tsx +95 -0
  422. package/src/components/media-image-field/media-image-view.uni.driver.ts +18 -0
  423. package/src/components/media-tag/web-media-tag/media-tag.st.css.ts +2 -2
  424. package/src/components/multi-document/cell-multi-document-edit.st.css.ts +2 -2
  425. package/src/components/multi-document/multi-document-input/form-multi-document.st.css.ts +2 -2
  426. package/src/components/reference/cell-multi-reference-input.st.css.ts +2 -2
  427. package/src/components/reference/cell-reference-input.st.css.ts +2 -2
  428. package/src/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.ts +2 -2
  429. package/src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts +2 -2
  430. package/src/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.ts +2 -2
  431. package/src/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.ts +2 -2
  432. package/src/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.ts +2 -2
  433. package/src/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.ts +2 -2
  434. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.ts +2 -2
  435. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts +2 -2
  436. package/src/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.ts +2 -2
  437. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.ts +2 -2
  438. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts +2 -2
  439. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.ts +2 -2
  440. package/src/components/text/cell-text-input.tsx +20 -18
  441. package/src/components/text/text-view.st.css.ts +2 -2
  442. package/src/services/translations.ts +2 -0
  443. package/src/styles.global.css +1 -1
  444. package/src/types/index.ts +1 -0
  445. package/src/types/media-image.ts +24 -0
  446. package/src/utils/index.ts +1 -0
  447. package/src/utils/media-image-value.ts +99 -0
@@ -0,0 +1,130 @@
1
+ import '../../../testkit/test-polyfills';
2
+
3
+ import React from 'react';
4
+ import { act, render } from '@testing-library/react';
5
+ import { WixPatternsContainerProvider } from '@wix/bex-core/react';
6
+ import type { Field, WixPatternsContainer } from '@wix/bex-core';
7
+ import { uniTestkitFactoryCreator } from '@wix/wix-ui-test-utils/testing-library';
8
+
9
+ import { FormMediaImageInput } from '../../../components/media-image-field/form-media-image-input';
10
+ import { ControlledMediaImageInput } from '../../../components/media-image-field/form-media-image-field';
11
+ import { FormMediaImageFieldUniDriver } from '../../../components/media-image-field/form-media-image-field.uni.driver';
12
+ import type { MediaImageValue } from '../../../types/media-image';
13
+ import { PatternsFieldsTestProvider } from '../../../testkit/patterns-fields-test-provider';
14
+ import { FormFieldDriver, makeField } from '../../form-field.driver';
15
+
16
+ const mediaId = '913019_d5425b6817dc4739bd0f3a494d4ec00b~mv2.jpg';
17
+ const uri = `wix:image://v1/${mediaId}/cat.jpg#originWidth=100&originHeight=50`;
18
+ const otherId = 'a1b2c3_0123456789abcdef0123456789abcdef~mv2.png';
19
+ const otherUri = `wix:image://v1/${otherId}/dog.png#originWidth=20&originHeight=10`;
20
+
21
+ const mediaManagerImage: MediaImageValue = {
22
+ id: mediaId,
23
+ width: 100,
24
+ height: 50,
25
+ uri,
26
+ altText: 'A cat',
27
+ };
28
+
29
+ const pick = (itemUri: string) => ({
30
+ items: [{ media: { image: { image: itemUri } } }],
31
+ });
32
+
33
+ describe('FormMediaImageInput', () => {
34
+ const setup = (
35
+ overrides: { field?: Field; initialValue?: MediaImageValue | null } = {},
36
+ ) => {
37
+ const driver = new FormFieldDriver({
38
+ Component: FormMediaImageInput,
39
+ UniDriverFactory: FormMediaImageFieldUniDriver,
40
+ dataHook: (f) => `media-image-field-${f.id}`,
41
+ field: overrides.field ?? makeField({ type: 'MEDIA_IMAGE' as 'IMAGE' }),
42
+ initialValue: overrides.initialValue ?? null,
43
+ });
44
+ driver.render();
45
+ return driver;
46
+ };
47
+
48
+ it.each([null, { altText: 'A cat' }])(
49
+ 'blocks save of a required field with no image: %p',
50
+ async (initialValue) => {
51
+ const driver = setup({
52
+ field: makeField({
53
+ type: 'MEDIA_IMAGE' as 'IMAGE',
54
+ validation: { required: true },
55
+ }),
56
+ initialValue: initialValue as MediaImageValue | null,
57
+ });
58
+
59
+ expect(await driver.tk.isRequired()).toBe(true);
60
+ await driver.submit();
61
+
62
+ expect(driver.onSubmit).not.toHaveBeenCalled();
63
+ expect(await driver.tk.hasError()).toBe(true);
64
+ expect(await driver.tk.getErrorMessage()).toBe(
65
+ 'cairo.fieldValidation.requiredField',
66
+ );
67
+ },
68
+ );
69
+ });
70
+
71
+ describe('ControlledMediaImageInput', () => {
72
+ const renderInput = (
73
+ data: MediaImageValue | null,
74
+ openMediaManager: jest.Mock,
75
+ ) => {
76
+ const onChange = jest.fn();
77
+ const { container } = render(
78
+ <PatternsFieldsTestProvider>
79
+ <WixPatternsContainerProvider
80
+ value={
81
+ {
82
+ translate: (key: string) => key,
83
+ environment: { language: 'en' },
84
+ openMediaManager,
85
+ } as unknown as WixPatternsContainer
86
+ }
87
+ >
88
+ <ControlledMediaImageInput
89
+ data={data}
90
+ onChange={onChange}
91
+ dataHook="media-image-input"
92
+ />
93
+ </WixPatternsContainerProvider>
94
+ </PatternsFieldsTestProvider>,
95
+ );
96
+ const driver = uniTestkitFactoryCreator(FormMediaImageFieldUniDriver)({
97
+ wrapper: container,
98
+ dataHook: 'media-image-input',
99
+ });
100
+ return { driver, onChange };
101
+ };
102
+
103
+ it('fills the alt text from the file name on add', async () => {
104
+ const openMediaManager = jest.fn().mockResolvedValue(pick(uri));
105
+ const { driver, onChange } = renderInput(null, openMediaManager);
106
+
107
+ await driver.clickAdd();
108
+ await act(async () => {});
109
+
110
+ expect(onChange).toHaveBeenCalledWith(
111
+ expect.objectContaining({ uri, altText: 'cat' }),
112
+ );
113
+ });
114
+
115
+ it('keeps the alt text on replace', async () => {
116
+ const openMediaManager = jest.fn().mockResolvedValue(pick(otherUri));
117
+ const { driver, onChange } = renderInput(
118
+ mediaManagerImage,
119
+ openMediaManager,
120
+ );
121
+
122
+ await driver.simulateImageLoad();
123
+ await driver.clickReplace();
124
+ await act(async () => {});
125
+
126
+ expect(onChange).toHaveBeenCalledWith(
127
+ expect.objectContaining({ uri: otherUri, altText: 'A cat' }),
128
+ );
129
+ });
130
+ });
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { uniTestkitFactoryCreator } from '@wix/wix-ui-test-utils/testing-library';
4
+
5
+ import { MediaImageView } from '../../../components/media-image-field/media-image-view';
6
+ import { MediaImageViewUniDriver } from '../../../components/media-image-field/media-image-view.uni.driver';
7
+ import type { MediaImageValue } from '../../../types/media-image';
8
+ import { PatternsFieldsTestProvider } from '../../../testkit/patterns-fields-test-provider';
9
+
10
+ const mediaId = '913019_d5425b6817dc4739bd0f3a494d4ec00b~mv2.jpg';
11
+ const image: MediaImageValue = {
12
+ id: mediaId,
13
+ width: 100,
14
+ height: 50,
15
+ uri: `wix:image://v1/${mediaId}/cat.jpg#originWidth=100&originHeight=50`,
16
+ };
17
+
18
+ const driverFactory = uniTestkitFactoryCreator(MediaImageViewUniDriver);
19
+
20
+ const setup = (value: MediaImageValue | null) => {
21
+ const { container } = render(
22
+ <PatternsFieldsTestProvider>
23
+ <MediaImageView value={value} dataHook="media-image-view" />
24
+ </PatternsFieldsTestProvider>,
25
+ );
26
+ return driverFactory({ wrapper: container, dataHook: 'media-image-view' });
27
+ };
28
+
29
+ describe('MediaImageView', () => {
30
+ it('renders the thumbnail with the alt text', async () => {
31
+ const driver = setup({ ...image, altText: 'A cat' });
32
+
33
+ expect(await driver.isEmpty()).toBe(false);
34
+ expect(await driver.getAltText()).toBe('A cat');
35
+ expect(await driver.hasAltTextPlaceholder()).toBe(false);
36
+ });
37
+
38
+ it('renders the add-alt-text placeholder when the image has no alt text', async () => {
39
+ const driver = setup(image);
40
+
41
+ expect(await driver.getAltText()).toBeUndefined();
42
+ expect(await driver.hasAltTextPlaceholder()).toBe(true);
43
+ });
44
+
45
+ it('renders only the empty-image placeholder for no value', async () => {
46
+ const driver = setup(null);
47
+
48
+ expect(await driver.isEmpty()).toBe(true);
49
+ expect(await driver.hasAltTextPlaceholder()).toBe(false);
50
+ });
51
+ });
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { CellTextInput } from '../../../components/text/cell-text-input';
4
+ import { PatternsFieldsTestProvider } from '../../../testkit/patterns-fields-test-provider';
5
+
6
+ const hint = 'patterns-fields.text.char_limit_tooltip{maxLength=4}';
7
+
8
+ const setup = (value: string) =>
9
+ render(
10
+ <PatternsFieldsTestProvider>
11
+ <CellTextInput value={value} onChange={jest.fn()} maxLength={4} />
12
+ </PatternsFieldsTestProvider>,
13
+ );
14
+
15
+ describe('<CellTextInput/> char limit hint', () => {
16
+ it('shows the hint when the value is at the limit', () => {
17
+ const { getByText } = setup('aaaa');
18
+
19
+ expect(getByText(hint)).toBeTruthy();
20
+ });
21
+
22
+ it('does not show the hint below the limit', () => {
23
+ const { queryByText } = setup('aaa');
24
+
25
+ expect(queryByText(hint)).toBeNull();
26
+ });
27
+ });
@@ -0,0 +1,153 @@
1
+ import {
2
+ altFromName,
3
+ fromImageUrl,
4
+ fromMediaManagerUri,
5
+ isExternalMediaImage,
6
+ isMediaImageEmpty,
7
+ replaceImage,
8
+ toMediaImageValue,
9
+ withAltText,
10
+ } from '../../utils/media-image-value';
11
+
12
+ const mediaId = '913019_d5425b6817dc4739bd0f3a494d4ec00b~mv2.jpg';
13
+ const uri = `wix:image://v1/${mediaId}/photo.jpg#originWidth=4668&originHeight=4669`;
14
+ const url = `https://static.wixstatic.com/media/${mediaId}`;
15
+
16
+ const mediaManagerImage = {
17
+ id: mediaId,
18
+ width: 4668,
19
+ height: 4669,
20
+ uri,
21
+ url,
22
+ filename: mediaId,
23
+ altText: 'A cat',
24
+ };
25
+
26
+ describe('toMediaImageValue', () => {
27
+ it('returns image objects as they are', () => {
28
+ const externalImage = {
29
+ url: 'https://example.com/cat.jpg',
30
+ altText: 'A cat',
31
+ };
32
+ expect(toMediaImageValue(mediaManagerImage)).toBe(mediaManagerImage);
33
+ expect(toMediaImageValue(externalImage)).toBe(externalImage);
34
+ });
35
+
36
+ it.each([
37
+ null,
38
+ undefined,
39
+ '',
40
+ uri,
41
+ 'https://example.com/cat.jpg',
42
+ 42,
43
+ [uri],
44
+ {},
45
+ { altText: 'A cat' },
46
+ { id: 'image-id', width: 10, height: 20, altText: 'A cat' },
47
+ { url: '', uri: '' },
48
+ ])('returns null when there is no image to show: %p', (value) => {
49
+ expect(toMediaImageValue(value)).toBeNull();
50
+ });
51
+ });
52
+
53
+ describe('isMediaImageEmpty', () => {
54
+ it('is false only for a value with an image', () => {
55
+ expect(isMediaImageEmpty(mediaManagerImage)).toBe(false);
56
+ expect(isMediaImageEmpty({ url: 'https://example.com/cat.jpg' })).toBe(
57
+ false,
58
+ );
59
+ expect(isMediaImageEmpty(null)).toBe(true);
60
+ expect(isMediaImageEmpty({ altText: 'A cat' })).toBe(true);
61
+ expect(isMediaImageEmpty(uri)).toBe(true);
62
+ });
63
+ });
64
+
65
+ describe('isExternalMediaImage', () => {
66
+ it('is true only for an image linked by URL', () => {
67
+ expect(isExternalMediaImage({ url: 'https://example.com/cat.jpg' })).toBe(
68
+ true,
69
+ );
70
+ expect(isExternalMediaImage(mediaManagerImage)).toBe(false);
71
+ expect(isExternalMediaImage({ ...mediaManagerImage, uri: undefined })).toBe(
72
+ false,
73
+ );
74
+ expect(isExternalMediaImage(null)).toBe(false);
75
+ });
76
+ });
77
+
78
+ describe('altFromName', () => {
79
+ it.each([
80
+ ['photo.jpg', 'photo'],
81
+ ['my.summer.photo.png', 'my.summer.photo'],
82
+ [' photo.jpg ', 'photo'],
83
+ ['photo', 'photo'],
84
+ ['', ''],
85
+ ])('%p → %p', (name, expected) => {
86
+ expect(altFromName(name)).toBe(expected);
87
+ });
88
+ });
89
+
90
+ describe('withAltText', () => {
91
+ it.each(['', ' '])('drops empty or blank alt text: %p', (altText) => {
92
+ expect(withAltText({ url, altText: 'A cat' }, altText)).toEqual({ url });
93
+ });
94
+ });
95
+
96
+ describe('replaceImage', () => {
97
+ const next = { ...mediaManagerImage, altText: 'photo' };
98
+
99
+ it('keeps the current alt text', () => {
100
+ expect(replaceImage({ url, altText: 'A cat' }, next)).toEqual({
101
+ ...next,
102
+ altText: 'A cat',
103
+ });
104
+ });
105
+
106
+ it.each([null, { url }, { url, altText: '' }])(
107
+ 'keeps the new default alt text when the current image has none: %p',
108
+ (current) => {
109
+ expect(replaceImage(current, next)).toEqual(next);
110
+ },
111
+ );
112
+ });
113
+
114
+ describe('fromMediaManagerUri', () => {
115
+ it('reads the id, size and default alt text from the URI', () => {
116
+ expect(fromMediaManagerUri(uri)).toEqual({
117
+ id: mediaId,
118
+ width: 4668,
119
+ height: 4669,
120
+ uri,
121
+ filename: mediaId,
122
+ altText: 'photo',
123
+ });
124
+ });
125
+
126
+ it('leaves out the alt text when the URI has no file name', () => {
127
+ expect(
128
+ fromMediaManagerUri(
129
+ `wix:image://v1/${mediaId}/_.jpg#originWidth=10&originHeight=20`,
130
+ ),
131
+ ).not.toHaveProperty('altText');
132
+ });
133
+
134
+ it.each([
135
+ '',
136
+ 'https://example.com/cat.jpg',
137
+ 'wix:vector://v1/shape.svg/shape.svg',
138
+ ])('returns null when the URI is not an image: %p', (value) => {
139
+ expect(fromMediaManagerUri(value)).toBeNull();
140
+ });
141
+ });
142
+
143
+ describe('fromImageUrl', () => {
144
+ it('builds an image linked by URL', () => {
145
+ expect(fromImageUrl(' https://example.com/cat.jpg ')).toEqual({
146
+ url: 'https://example.com/cat.jpg',
147
+ });
148
+ expect(fromImageUrl('https://example.com/cat.jpg', 'A cat')).toEqual({
149
+ url: 'https://example.com/cat.jpg',
150
+ altText: 'A cat',
151
+ });
152
+ });
153
+ });
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",
@@ -3,6 +3,7 @@
3
3
  "CMS.mediaGallery.addLink.invalidUrl": "URL invalid",
4
4
  "auto-patterns.fields.field_type_email_title": "Email",
5
5
  "CMS.mediaGallery.dialog.settingsNewItemsTitleLabel": "What should the title of the images be?",
6
+ "CMS.image.altText.label": "Alt text",
6
7
  "CMS.richTextEditor.toolbar.headerDropdown.option.h4.title": "Subsection Title",
7
8
  "CMS.richTextEditor.toolbar.headerDropdown.option.h3.title": "Content Title",
8
9
  "CMS.formTime.invalidMessage": "Invalid time format ",
@@ -157,6 +158,7 @@
157
158
  "CMS.image.download": "Download",
158
159
  "CMS.richTextEditor.toolbar.header": "Themes",
159
160
  "CMS.document.action.delete": "Delete file",
161
+ "CMS.image.thumbnail.label": "Image",
160
162
  "CMS.mediaGallery.preview.download": "Download",
161
163
  "CMS.richTextEditor.toolbar.headerDropdown.option.h6.title": "Subtitle",
162
164
  "auto-patterns.fields.email_input_error": "Please enter a valid email address",