@wix/patterns-fields 1.71.0 → 1.73.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 (283) hide show
  1. package/dist/cjs/components/address/input/address-input.st.css.js +3 -3
  2. package/dist/cjs/components/address/input/address-input.st.css.js.map +1 -1
  3. package/dist/cjs/components/address/input/form-address-input.js +5 -16
  4. package/dist/cjs/components/address/input/form-address-input.js.map +1 -1
  5. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js +3 -3
  6. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js.map +1 -1
  7. package/dist/cjs/components/audio/audio-field/form-audio-field.js +14 -13
  8. package/dist/cjs/components/audio/audio-field/form-audio-field.js.map +1 -1
  9. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js +4 -4
  10. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
  11. package/dist/cjs/components/audio/audio-field/form-audio.js +6 -1
  12. package/dist/cjs/components/audio/audio-field/form-audio.js.map +1 -1
  13. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js +2 -2
  14. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js.map +1 -1
  15. package/dist/cjs/components/color-view/cell-color-view.st.css.js +3 -3
  16. package/dist/cjs/components/color-view/cell-color-view.st.css.js.map +1 -1
  17. package/dist/cjs/components/color-view/color-view.st.css.js +4 -4
  18. package/dist/cjs/components/color-view/color-view.st.css.js.map +1 -1
  19. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js +3 -3
  20. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js.map +1 -1
  21. package/dist/cjs/components/document/form-document-field.js +7 -6
  22. package/dist/cjs/components/document/form-document-field.js.map +1 -1
  23. package/dist/cjs/components/document/form-document-field.st.css.js +7 -7
  24. package/dist/cjs/components/document/form-document-field.st.css.js.map +1 -1
  25. package/dist/cjs/components/document/form-document.js +6 -1
  26. package/dist/cjs/components/document/form-document.js.map +1 -1
  27. package/dist/cjs/components/exclamation/exclamation.st.css.js +5 -5
  28. package/dist/cjs/components/exclamation/exclamation.st.css.js.map +1 -1
  29. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js +5 -5
  30. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
  31. package/dist/cjs/components/image/form-image-input.js +6 -1
  32. package/dist/cjs/components/image/form-image-input.js.map +1 -1
  33. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js +3 -3
  34. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js.map +1 -1
  35. package/dist/cjs/components/json-input/form-json-input.js +2 -1
  36. package/dist/cjs/components/json-input/form-json-input.js.map +1 -1
  37. package/dist/cjs/components/json-input/json-input.js +2 -1
  38. package/dist/cjs/components/json-input/json-input.js.map +1 -1
  39. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  40. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js.map +1 -1
  41. package/dist/cjs/components/media-control/paste-url-button.st.css.js +4 -4
  42. package/dist/cjs/components/media-control/paste-url-button.st.css.js.map +1 -1
  43. package/dist/cjs/components/media-gallery/form-media-gallery-field.js +24 -21
  44. package/dist/cjs/components/media-gallery/form-media-gallery-field.js.map +1 -1
  45. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js +10 -10
  46. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js.map +1 -1
  47. package/dist/cjs/components/media-gallery/form-media-gallery.js +6 -1
  48. package/dist/cjs/components/media-gallery/form-media-gallery.js.map +1 -1
  49. package/dist/cjs/components/media-image/media-image.st.css.js +4 -4
  50. package/dist/cjs/components/media-image/media-image.st.css.js.map +1 -1
  51. package/dist/cjs/components/media-image/overlays/overlay.st.css.js +3 -3
  52. package/dist/cjs/components/media-image/overlays/overlay.st.css.js.map +1 -1
  53. package/dist/cjs/components/media-loader/media-loader.st.css.js +3 -3
  54. package/dist/cjs/components/media-loader/media-loader.st.css.js.map +1 -1
  55. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  56. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js.map +1 -1
  57. package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js +3 -3
  58. package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
  59. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document-field.js +7 -6
  60. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document-field.js.map +1 -1
  61. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.js +6 -1
  62. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.js.map +1 -1
  63. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js +5 -5
  64. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  65. package/dist/cjs/components/object/cell-json-input.js +2 -1
  66. package/dist/cjs/components/object/cell-json-input.js.map +1 -1
  67. package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js +2 -2
  68. package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js.map +1 -1
  69. package/dist/cjs/components/reference/cell-reference-input.st.css.js +3 -3
  70. package/dist/cjs/components/reference/cell-reference-input.st.css.js.map +1 -1
  71. package/dist/cjs/components/rich-content/form-rich-content.js +20 -5
  72. package/dist/cjs/components/rich-content/form-rich-content.js.map +1 -1
  73. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +4 -4
  74. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
  75. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +3 -3
  76. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
  77. package/dist/cjs/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  78. 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
  79. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +3 -3
  80. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js.map +1 -1
  81. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +3 -3
  82. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
  83. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  84. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js.map +1 -1
  85. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +7 -7
  86. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js.map +1 -1
  87. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +5 -5
  88. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js.map +1 -1
  89. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +4 -4
  90. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
  91. package/dist/cjs/components/rich-text/form-rich-text.js +18 -5
  92. package/dist/cjs/components/rich-text/form-rich-text.js.map +1 -1
  93. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +18 -18
  94. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js.map +1 -1
  95. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +4 -4
  96. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js.map +1 -1
  97. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +18 -18
  98. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js.map +1 -1
  99. package/dist/cjs/components/text/text-view.st.css.js +3 -3
  100. package/dist/cjs/components/text/text-view.st.css.js.map +1 -1
  101. package/dist/cjs/hooks/index.js +12 -0
  102. package/dist/cjs/hooks/index.js.map +1 -1
  103. package/dist/cjs/hooks/use-merged-ref.js +27 -0
  104. package/dist/cjs/hooks/use-merged-ref.js.map +1 -0
  105. package/dist/cjs/hooks/use-scroll-to-error-ref.js +34 -0
  106. package/dist/cjs/hooks/use-scroll-to-error-ref.js.map +1 -0
  107. package/dist/cjs/styles.global.css +1 -1
  108. package/dist/esm/components/address/input/address-input.st.css.js +2 -2
  109. package/dist/esm/components/address/input/address-input.st.css.js.map +1 -1
  110. package/dist/esm/components/address/input/form-address-input.js +4 -15
  111. package/dist/esm/components/address/input/form-address-input.js.map +1 -1
  112. package/dist/esm/components/audio/actions/actions-menu/actions-menu.st.css.js +2 -2
  113. package/dist/esm/components/audio/audio-field/form-audio-field.js +4 -4
  114. package/dist/esm/components/audio/audio-field/form-audio-field.js.map +1 -1
  115. package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js +2 -2
  116. package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
  117. package/dist/esm/components/audio/audio-field/form-audio.js +9 -1
  118. package/dist/esm/components/audio/audio-field/form-audio.js.map +1 -1
  119. package/dist/esm/components/audio/audio-player/audio-player.st.css.js +2 -2
  120. package/dist/esm/components/color-view/cell-color-view.st.css.js +2 -2
  121. package/dist/esm/components/color-view/cell-color-view.st.css.js.map +1 -1
  122. package/dist/esm/components/color-view/color-view.st.css.js +2 -2
  123. package/dist/esm/components/delete-dialog/delete-dialog.st.css.js +2 -2
  124. package/dist/esm/components/document/form-document-field.js +4 -4
  125. package/dist/esm/components/document/form-document-field.js.map +1 -1
  126. package/dist/esm/components/document/form-document-field.st.css.js +2 -2
  127. package/dist/esm/components/document/form-document.js +9 -1
  128. package/dist/esm/components/document/form-document.js.map +1 -1
  129. package/dist/esm/components/exclamation/exclamation.st.css.js +2 -2
  130. package/dist/esm/components/highlighted-text/highlighted-text.st.css.js +3 -3
  131. package/dist/esm/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
  132. package/dist/esm/components/image/form-image-input.js +9 -1
  133. package/dist/esm/components/image/form-image-input.js.map +1 -1
  134. package/dist/esm/components/image/thumbnail-replace-overlay.st.css.js +2 -2
  135. package/dist/esm/components/json-input/form-json-input.js +1 -0
  136. package/dist/esm/components/json-input/form-json-input.js.map +1 -1
  137. package/dist/esm/components/json-input/json-input.js +1 -0
  138. package/dist/esm/components/json-input/json-input.js.map +1 -1
  139. package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  140. package/dist/esm/components/media-control/paste-url-button.st.css.js +2 -2
  141. package/dist/esm/components/media-gallery/form-media-gallery-field.js +7 -5
  142. package/dist/esm/components/media-gallery/form-media-gallery-field.js.map +1 -1
  143. package/dist/esm/components/media-gallery/form-media-gallery-field.st.css.js +2 -2
  144. package/dist/esm/components/media-gallery/form-media-gallery.js +9 -1
  145. package/dist/esm/components/media-gallery/form-media-gallery.js.map +1 -1
  146. package/dist/esm/components/media-image/media-image.st.css.js +3 -3
  147. package/dist/esm/components/media-image/media-image.st.css.js.map +1 -1
  148. package/dist/esm/components/media-image/overlays/overlay.st.css.js +2 -2
  149. package/dist/esm/components/media-image/overlays/overlay.st.css.js.map +1 -1
  150. package/dist/esm/components/media-loader/media-loader.st.css.js +2 -2
  151. package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  152. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js +2 -2
  153. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
  154. package/dist/esm/components/multi-document/multi-document-input/form-multi-document-field.js +4 -4
  155. package/dist/esm/components/multi-document/multi-document-input/form-multi-document-field.js.map +1 -1
  156. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.js +9 -1
  157. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.js.map +1 -1
  158. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js +2 -2
  159. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  160. package/dist/esm/components/object/cell-json-input.js +1 -0
  161. package/dist/esm/components/object/cell-json-input.js.map +1 -1
  162. package/dist/esm/components/reference/cell-multi-reference-input.st.css.js +2 -2
  163. package/dist/esm/components/reference/cell-reference-input.st.css.js +2 -2
  164. package/dist/esm/components/rich-content/form-rich-content.js +8 -3
  165. package/dist/esm/components/rich-content/form-rich-content.js.map +1 -1
  166. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +2 -2
  167. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +2 -2
  168. package/dist/esm/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  169. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +2 -2
  170. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +2 -2
  171. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  172. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +2 -2
  173. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +2 -2
  174. package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +2 -2
  175. package/dist/esm/components/rich-text/form-rich-text.js +7 -3
  176. package/dist/esm/components/rich-text/form-rich-text.js.map +1 -1
  177. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +2 -2
  178. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +2 -2
  179. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js.map +1 -1
  180. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +2 -2
  181. package/dist/esm/components/text/text-view.st.css.js +2 -2
  182. package/dist/esm/hooks/index.js +2 -0
  183. package/dist/esm/hooks/index.js.map +1 -1
  184. package/dist/esm/hooks/use-merged-ref.js +23 -0
  185. package/dist/esm/hooks/use-merged-ref.js.map +1 -0
  186. package/dist/esm/hooks/use-scroll-to-error-ref.js +26 -0
  187. package/dist/esm/hooks/use-scroll-to-error-ref.js.map +1 -0
  188. package/dist/esm/styles.global.css +1 -1
  189. package/dist/types/components/address/input/address-input.st.css.d.ts.map +1 -1
  190. package/dist/types/components/address/input/form-address-input.d.ts.map +1 -1
  191. package/dist/types/components/audio/audio-field/form-audio-field.d.ts.map +1 -1
  192. package/dist/types/components/audio/audio-field/form-audio-field.st.css.d.ts.map +1 -1
  193. package/dist/types/components/audio/audio-field/form-audio.d.ts.map +1 -1
  194. package/dist/types/components/color-view/cell-color-view.st.css.d.ts.map +1 -1
  195. package/dist/types/components/document/form-document-field.d.ts.map +1 -1
  196. package/dist/types/components/document/form-document.d.ts.map +1 -1
  197. package/dist/types/components/highlighted-text/highlighted-text.st.css.d.ts.map +1 -1
  198. package/dist/types/components/image/form-image-input.d.ts.map +1 -1
  199. package/dist/types/components/json-input/form-json-input.d.ts +1 -1
  200. package/dist/types/components/json-input/form-json-input.d.ts.map +1 -1
  201. package/dist/types/components/json-input/json-input.d.ts.map +1 -1
  202. package/dist/types/components/media-gallery/form-media-gallery-field.d.ts +3 -0
  203. package/dist/types/components/media-gallery/form-media-gallery-field.d.ts.map +1 -1
  204. package/dist/types/components/media-gallery/form-media-gallery.d.ts.map +1 -1
  205. package/dist/types/components/media-image/media-image.st.css.d.ts.map +1 -1
  206. package/dist/types/components/media-image/overlays/overlay.st.css.d.ts.map +1 -1
  207. package/dist/types/components/multi-document/cell-multi-document-edit.st.css.d.ts.map +1 -1
  208. package/dist/types/components/multi-document/multi-document-input/form-multi-document-field.d.ts.map +1 -1
  209. package/dist/types/components/multi-document/multi-document-input/form-multi-document.d.ts.map +1 -1
  210. package/dist/types/components/multi-document/multi-document-input/form-multi-document.st.css.d.ts.map +1 -1
  211. package/dist/types/components/object/cell-json-input.d.ts.map +1 -1
  212. package/dist/types/components/rich-content/form-rich-content.d.ts.map +1 -1
  213. package/dist/types/components/rich-text/form-rich-text.d.ts.map +1 -1
  214. package/dist/types/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.d.ts.map +1 -1
  215. package/dist/types/hooks/index.d.ts +2 -0
  216. package/dist/types/hooks/index.d.ts.map +1 -1
  217. package/dist/types/hooks/use-merged-ref.d.ts +11 -0
  218. package/dist/types/hooks/use-merged-ref.d.ts.map +1 -0
  219. package/dist/types/hooks/use-scroll-to-error-ref.d.ts +14 -0
  220. package/dist/types/hooks/use-scroll-to-error-ref.d.ts.map +1 -0
  221. package/package.json +7 -7
  222. package/src/__tests__/components/audio/form-audio.spec.tsx +22 -0
  223. package/src/__tests__/components/document/form-document.spec.tsx +22 -0
  224. package/src/__tests__/components/form-multi-document-field.spec.tsx +0 -8
  225. package/src/__tests__/components/image/form-image-input.spec.tsx +22 -0
  226. package/src/__tests__/components/media-gallery/form-media-gallery.spec.tsx +21 -0
  227. package/src/__tests__/components/multi-document/form-multi-document.spec.tsx +21 -0
  228. package/src/__tests__/components/rich-content/form-rich-content.spec.tsx +22 -0
  229. package/src/__tests__/components/rich-text/form-rich-text.spec.tsx +18 -0
  230. package/src/components/address/input/address-input.st.css.ts +2 -2
  231. package/src/components/address/input/form-address-input.tsx +5 -20
  232. package/src/components/audio/actions/actions-menu/actions-menu.st.css.ts +2 -2
  233. package/src/components/audio/audio-field/form-audio-field.st.css.ts +2 -2
  234. package/src/components/audio/audio-field/form-audio-field.tsx +4 -3
  235. package/src/components/audio/audio-field/form-audio.tsx +4 -0
  236. package/src/components/audio/audio-player/audio-player.st.css.ts +2 -2
  237. package/src/components/color-view/cell-color-view.st.css.ts +2 -2
  238. package/src/components/color-view/color-view.st.css.ts +2 -2
  239. package/src/components/delete-dialog/delete-dialog.st.css.ts +2 -2
  240. package/src/components/document/form-document-field.st.css.ts +2 -2
  241. package/src/components/document/form-document-field.tsx +4 -3
  242. package/src/components/document/form-document.tsx +4 -0
  243. package/src/components/exclamation/exclamation.st.css.ts +2 -2
  244. package/src/components/highlighted-text/highlighted-text.st.css.ts +3 -3
  245. package/src/components/image/form-image-input.tsx +4 -0
  246. package/src/components/image/thumbnail-replace-overlay.st.css.ts +2 -2
  247. package/src/components/json-input/form-json-input.tsx +4 -1
  248. package/src/components/json-input/json-input.tsx +4 -1
  249. package/src/components/media-control/cell-media-edit-shell.st.css.ts +2 -2
  250. package/src/components/media-control/paste-url-button.st.css.ts +2 -2
  251. package/src/components/media-gallery/form-media-gallery-field.st.css.ts +2 -2
  252. package/src/components/media-gallery/form-media-gallery-field.tsx +9 -4
  253. package/src/components/media-gallery/form-media-gallery.tsx +4 -0
  254. package/src/components/media-image/media-image.st.css.ts +3 -3
  255. package/src/components/media-image/overlays/overlay.st.css.ts +2 -2
  256. package/src/components/media-loader/media-loader.st.css.ts +2 -2
  257. package/src/components/media-tag/web-media-tag/media-tag.st.css.ts +2 -2
  258. package/src/components/multi-document/cell-multi-document-edit.st.css.ts +2 -2
  259. package/src/components/multi-document/multi-document-input/form-multi-document-field.tsx +4 -3
  260. package/src/components/multi-document/multi-document-input/form-multi-document.st.css.ts +2 -2
  261. package/src/components/multi-document/multi-document-input/form-multi-document.tsx +4 -0
  262. package/src/components/object/cell-json-input.tsx +4 -1
  263. package/src/components/reference/cell-multi-reference-input.st.css.ts +2 -2
  264. package/src/components/reference/cell-reference-input.st.css.ts +2 -2
  265. package/src/components/rich-content/form-rich-content.tsx +24 -14
  266. package/src/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.ts +2 -2
  267. package/src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts +2 -2
  268. package/src/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.ts +2 -2
  269. package/src/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.ts +2 -2
  270. package/src/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.ts +2 -2
  271. package/src/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.ts +2 -2
  272. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.ts +2 -2
  273. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts +2 -2
  274. package/src/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.ts +2 -2
  275. package/src/components/rich-text/form-rich-text.tsx +18 -9
  276. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.ts +2 -2
  277. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts +2 -2
  278. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.ts +2 -2
  279. package/src/components/text/text-view.st.css.ts +2 -2
  280. package/src/hooks/index.ts +2 -0
  281. package/src/hooks/use-merged-ref.ts +30 -0
  282. package/src/hooks/use-scroll-to-error-ref.ts +34 -0
  283. package/src/styles.global.css +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"form-rich-text.d.ts","sourceRoot":"","sources":["../../../../src/components/rich-text/form-rich-text.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAUxD,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,MAAM,CAAC;CAAG;AAiEpE,eAAO,MAAM,YAAY,WA/DK,iBAAiB;;CA+DI,CAAC"}
1
+ {"version":3,"file":"form-rich-text.d.ts","sourceRoot":"","sources":["../../../../src/components/rich-text/form-rich-text.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAUxD,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,MAAM,CAAC;CAAG;AA0EpE,eAAO,MAAM,YAAY,WAxEK,iBAAiB;;CAwEI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"rich-text-editor.st.css.d.ts","sourceRoot":"","sources":["../../../../../../src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts"],"names":[],"mappings":"AAUA,eAAO,IAAI,SAAS,+BAAwC,CAAC;AAC7D,eAAO,IAAI,KAAK,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AACnE,eAAO,IAAI,EAAE,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AAEhE,eAAO,IAAI,SAAS,QAAc,CAAC;AACnC,eAAO,IAAI,OAAO;;;;CAA8I,CAAC;AACjK,eAAO,IAAI,SAAS,IAAK,CAAC;AAC1B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,UAAU,IAAK,CAAC;AAC3B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,IAAI;;;;;;;;;;CAAsb,CAAC"}
1
+ {"version":3,"file":"rich-text-editor.st.css.d.ts","sourceRoot":"","sources":["../../../../../../src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts"],"names":[],"mappings":"AAUA,eAAO,IAAI,SAAS,+BAAwC,CAAC;AAC7D,eAAO,IAAI,KAAK,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AACnE,eAAO,IAAI,EAAE,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AAEhE,eAAO,IAAI,SAAS,QAAc,CAAC;AACnC,eAAO,IAAI,OAAO;;;;CAA2I,CAAC;AAC9J,eAAO,IAAI,SAAS,IAAK,CAAC;AAC1B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,UAAU,IAAK,CAAC;AAC3B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,IAAI;;;;;;;;;;CAAsb,CAAC"}
@@ -7,4 +7,6 @@ export * from './use-translations';
7
7
  export * from './use-with-callback';
8
8
  export * from './use-resize-effect';
9
9
  export * from './use-cell-edit-keyboard';
10
+ export * from './use-merged-ref';
11
+ export * from './use-scroll-to-error-ref';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { MutableRefObject, Ref } from 'react';
2
+ /**
3
+ * Keeps a component's own ref filled while also handing the value to a
4
+ * caller's ref.
5
+ *
6
+ * Media inputs need both: the local ref drives `autoFocus` and media
7
+ * callbacks, while a caller such as react-hook-form supplies its own ref to
8
+ * focus the field when it blocks save.
9
+ */
10
+ export declare const useMergedRef: <T>(forwarded?: Ref<T> | undefined) => [MutableRefObject<T | null>, (value: T | null) => void];
11
+ //# sourceMappingURL=use-merged-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-merged-ref.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-merged-ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGnD;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,2FAE4B,IAAI,CAgBxD,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Ref for a field whose control cannot be handed to react-hook-form directly.
3
+ *
4
+ * react-hook-form focuses an invalid field by calling `focus()` on whatever
5
+ * was registered, so registering a plain wrapper element does nothing — a
6
+ * `div` is not focusable and the call is silently dropped. Registering an
7
+ * object with a `focus()` of our own works instead: it brings the wrapper
8
+ * into view, then focuses the control inside it when there is one.
9
+ *
10
+ * @param registerRef `controller.field.ref` from useController.
11
+ * @param focusSelector Control to focus inside the wrapper, when present.
12
+ */
13
+ export declare const useScrollToErrorRef: <T extends HTMLElement>(registerRef: (instance: unknown) => void, focusSelector: string) => (element: T | null) => void;
14
+ //# sourceMappingURL=use-scroll-to-error-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-scroll-to-error-ref.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-scroll-to-error-ref.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,kDACN,OAAO,KAAK,IAAI,iBACzB,MAAM,gCAiBpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/patterns-fields",
3
- "version": "1.71.0",
3
+ "version": "1.73.0",
4
4
  "license": "UNLICENSED",
5
5
  "author": {
6
6
  "name": "Kobi",
@@ -124,10 +124,10 @@
124
124
  "@wix/atlas": "^1.0.35",
125
125
  "@wix/data": "^1.0.323",
126
126
  "@wix/media": "^1.0.231",
127
- "@wix/patterns-fields-utils": "1.52.0",
127
+ "@wix/patterns-fields-utils": "1.54.0",
128
128
  "@wix/rich-content": "1.0.37",
129
129
  "@wix/sdk": "^1.17.2",
130
- "@wix/wix-ui-icons-common": "^3.187.0",
130
+ "@wix/wix-ui-icons-common": "^3.189.0",
131
131
  "color": "^2.0.1",
132
132
  "draft-js": "^0.11.7",
133
133
  "draft-js-export-html": "^1.4.1",
@@ -152,8 +152,8 @@
152
152
  "@types/lodash": "^4.17.20",
153
153
  "@types/react": "^16.14.68",
154
154
  "@wix/babel-cli": "^1.11.0",
155
- "@wix/bex-core": "2.349.0",
156
- "@wix/design-system": "^1.307.0",
155
+ "@wix/bex-core": "2.351.0",
156
+ "@wix/design-system": "^1.314.0",
157
157
  "@wix/eslint-config-yoshi": "^6.74.0",
158
158
  "@wix/jest-yoshi-preset": "^6.74.0",
159
159
  "@wix/wix-data-items-common": "^1.0.270",
@@ -168,7 +168,7 @@
168
168
  },
169
169
  "peerDependencies": {
170
170
  "@wix/bex-core": "^2.284.0",
171
- "@wix/design-system": "^1.307.0",
171
+ "@wix/design-system": "^1.314.0",
172
172
  "mobx": "^6.1.8",
173
173
  "react": "^16.8.0 || ^18.0.0",
174
174
  "react-dom": "^16.8.0 || ^18.0.0"
@@ -212,5 +212,5 @@
212
212
  "optional": true
213
213
  }
214
214
  },
215
- "falconPackageHash": "afeb276cc00c7b0de563fc0f3c027524447498a2f3e5c3e8bababd2f"
215
+ "falconPackageHash": "772c06391e8c8c0054dd3a1efbcbb58220b2237b346f1b57f9b2ea0f"
216
216
  }
@@ -60,4 +60,26 @@ describe('FormAudio field', () => {
60
60
  'cairo.fieldValidation.requiredField',
61
61
  );
62
62
  });
63
+
64
+ // Only the empty state can fail `required`, so its add button is where
65
+ // react-hook-form should land. Nothing focuses a field whose input never
66
+ // reached controller.field.ref.
67
+ it('focuses the add button when a required value blocks submit', async () => {
68
+ const field = makeField({
69
+ type: 'AUDIO',
70
+ validation: { required: true },
71
+ });
72
+ const driver = setup({ field });
73
+
74
+ await driver.submit();
75
+
76
+ const active = document.activeElement;
77
+ expect(active?.tagName).toBe('BUTTON');
78
+ expect(
79
+ document
80
+ .querySelector(`[data-hook="audio-field-${field.id}"]`)
81
+ ?.contains(active),
82
+ ).toBe(true);
83
+ });
84
+
63
85
  });
@@ -51,4 +51,26 @@ describe('FormDocument field', () => {
51
51
  'cairo.fieldValidation.requiredField',
52
52
  );
53
53
  });
54
+
55
+ // Only the empty state can fail `required`, so its add button is where
56
+ // react-hook-form should land. Nothing focuses a field whose input never
57
+ // reached controller.field.ref.
58
+ it('focuses the add button when a required value blocks submit', async () => {
59
+ const field = makeField({
60
+ type: 'DOCUMENT',
61
+ validation: { required: true },
62
+ });
63
+ const driver = setup({ field });
64
+
65
+ await driver.submit();
66
+
67
+ const active = document.activeElement;
68
+ expect(active?.tagName).toBe('BUTTON');
69
+ expect(
70
+ document
71
+ .querySelector(`[data-hook="document-field-${field.id}"]`)
72
+ ?.contains(active),
73
+ ).toBe(true);
74
+ });
75
+
54
76
  });
@@ -262,14 +262,6 @@ describe('<FormMultiDocumentField/>', () => {
262
262
  await documentControlActionsTestkit.clickPopoverMenu();
263
263
  });
264
264
 
265
- const replaceAction =
266
- await documentControlActionsTestkit.getVisibleActionByDataHookButtonDriver(
267
- 'document-view-replace-action',
268
- );
269
-
270
- // no text for the visibleAction so just verify it exists
271
- expect(await replaceAction.exists()).toBe(true);
272
-
273
265
  expect(await secondaryActionsTestKit.isMenuOpen()).toBe(true);
274
266
  expect(await secondaryActionsTestKit.itemContentAt(0)).toContain(
275
267
  'replace',
@@ -72,4 +72,26 @@ describe('FormImageInput field', () => {
72
72
  'cairo.fieldValidation.requiredField',
73
73
  );
74
74
  });
75
+
76
+ // Only the empty state can fail `required`, so its add button is where
77
+ // react-hook-form should land. Nothing focuses a field whose input never
78
+ // reached controller.field.ref.
79
+ it('focuses the add button when a required value blocks submit', async () => {
80
+ const field = makeField({
81
+ type: 'IMAGE',
82
+ validation: { required: true },
83
+ });
84
+ const driver = setup({ field });
85
+
86
+ await driver.submit();
87
+
88
+ const active = document.activeElement;
89
+ expect(active?.tagName).toBe('BUTTON');
90
+ expect(
91
+ document
92
+ .querySelector(`[data-hook="image-field-${field.id}"]`)
93
+ ?.contains(active),
94
+ ).toBe(true);
95
+ });
96
+
75
97
  });
@@ -71,4 +71,25 @@ describe('FormMediaGallery field', () => {
71
71
 
72
72
  expect(await driver.tk.hasError()).toBe(false);
73
73
  });
74
+
75
+ // Only the empty state can fail `required`, so its add button is where
76
+ // react-hook-form should land. Nothing focuses a field whose input never
77
+ // reached controller.field.ref.
78
+ it('focuses the add button when a required value blocks submit', async () => {
79
+ const field = makeField({
80
+ type: 'MEDIA_GALLERY',
81
+ validation: { required: true },
82
+ });
83
+ const driver = setup({ field });
84
+
85
+ await driver.submit();
86
+
87
+ const active = document.activeElement;
88
+ expect(active?.tagName).toBe('BUTTON');
89
+ expect(
90
+ document
91
+ .querySelector(`[data-hook="media-gallery-field-${field.id}"]`)
92
+ ?.contains(active),
93
+ ).toBe(true);
94
+ });
74
95
  });
@@ -57,4 +57,25 @@ describe('FormMultiDocument field', () => {
57
57
  'cairo.fieldValidation.requiredField',
58
58
  );
59
59
  });
60
+
61
+ // Only the empty state can fail `required`, so its add button is where
62
+ // react-hook-form should land. Nothing focuses a field whose input never
63
+ // reached controller.field.ref.
64
+ it('focuses the add button when a required value blocks submit', async () => {
65
+ const field = makeField({
66
+ type: 'MULTI_DOCUMENT',
67
+ validation: { required: true },
68
+ });
69
+ const driver = setup({ field });
70
+
71
+ await driver.submit();
72
+
73
+ const active = document.activeElement;
74
+ expect(active?.tagName).toBe('BUTTON');
75
+ expect(
76
+ document
77
+ .querySelector(`[data-hook="multi-document-field-${field.id}"]`)
78
+ ?.contains(active),
79
+ ).toBe(true);
80
+ });
60
81
  });
@@ -77,4 +77,26 @@ describe('FormRichContent field', () => {
77
77
  'cairo.fieldValidation.requiredField',
78
78
  );
79
79
  });
80
+
81
+ // Ricos is lazy and renders no editable node here, so there is nothing to
82
+ // focus — the wrapper still has to bring the field into view. Without the
83
+ // ref registered, react-hook-form calls nothing at all.
84
+ it('brings the field into view when a required value blocks submit', async () => {
85
+ const scrollIntoView = jest.fn();
86
+ // Not implemented in jsdom.
87
+ Element.prototype.scrollIntoView = scrollIntoView;
88
+
89
+ const field = makeField({
90
+ type: 'RICH_CONTENT',
91
+ validation: { required: true },
92
+ });
93
+ const driver = setup({ field, initialValue: '' });
94
+
95
+ await driver.submit();
96
+
97
+ expect(scrollIntoView).toHaveBeenCalled();
98
+
99
+ delete (Element.prototype as Partial<Element>).scrollIntoView;
100
+ });
101
+
80
102
  });
@@ -76,4 +76,22 @@ describe('FormRichText field', () => {
76
76
  'cairo.fieldValidation.requiredField',
77
77
  );
78
78
  });
79
+
80
+ // The editor exposes no focus handle, so react-hook-form gets a wrapper
81
+ // whose focus() brings the field into view and then focuses the editor if
82
+ // it has rendered. Nothing happens at all when the ref is not registered.
83
+ it('focuses the editor when a required value blocks submit', async () => {
84
+ const field = makeField({
85
+ type: 'RICH_TEXT',
86
+ validation: { required: true },
87
+ });
88
+ const driver = setup({ field, initialValue: '' });
89
+
90
+ await driver.submit();
91
+
92
+ const editable = document.querySelector('[contenteditable]');
93
+ expect(editable).toBeTruthy();
94
+ expect(document.activeElement).toBe(editable);
95
+ });
96
+
79
97
  });
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../../stylable-esm-runtime.js"
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "addressinput3690428257";
8
+ var _namespace_ = "addressinput249613619";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"addressinput3690428257__root","tableAddressInput":"addressinput3690428257__tableAddressInput"};
16
+ export var classes = {"root":"addressinput249613619__root","tableAddressInput":"addressinput249613619__tableAddressInput"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -1,9 +1,9 @@
1
- import React, { useCallback, useRef } from 'react';
1
+ import React from 'react';
2
2
 
3
3
  import type { Address } from '../../../types/address';
4
4
  import type { FormInputProps } from '../../../types/form-input';
5
5
  import { Z_INDEX_MODAL_POPOVER } from '../../common';
6
- import { useAutoFocus } from '../../../hooks';
6
+ import { useAutoFocus, useMergedRef } from '../../../hooks';
7
7
 
8
8
  import type { AddressInputImperativeHandle } from './address-input';
9
9
  import { AddressInput } from './address-input';
@@ -25,28 +25,13 @@ export const FormAddressInput: React.FC<FormAddressInputProps> = ({
25
25
  dataHook,
26
26
  inputRef: forwardedRef,
27
27
  }) => {
28
- const inputRef = useRef<AddressInputImperativeHandle | null>(null);
28
+ const [inputRef, setInputRef] =
29
+ useMergedRef<AddressInputImperativeHandle>(forwardedRef);
29
30
  useAutoFocus(inputRef, autoFocus);
30
31
 
31
- // autoFocus reads the handle from here, so a caller's ref has to be filled
32
- // alongside it rather than replacing it.
33
- const setRef = useCallback(
34
- (handle: AddressInputImperativeHandle | null) => {
35
- inputRef.current = handle;
36
- if (typeof forwardedRef === 'function') {
37
- forwardedRef(handle);
38
- } else if (forwardedRef) {
39
- (
40
- forwardedRef as React.MutableRefObject<AddressInputImperativeHandle | null>
41
- ).current = handle;
42
- }
43
- },
44
- [forwardedRef],
45
- );
46
-
47
32
  return (
48
33
  <AddressInput
49
- ref={setRef}
34
+ ref={setInputRef}
50
35
  dataHook={dataHook}
51
36
  value={data}
52
37
  onChange={onChange}
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../../../stylable-esm-runtime.
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "actionsmenu966318229";
8
+ var _namespace_ = "actionsmenu101643419";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"actionsmenu966318229__root","action":"actionsmenu966318229__action"};
16
+ export var classes = {"root":"actionsmenu101643419__root","action":"actionsmenu101643419__action"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../../stylable-esm-runtime.js"
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "formaudiofield1104303151";
8
+ var _namespace_ = "formaudiofield606935778";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"formaudiofield1104303151__root","addItem":"formaudiofield1104303151__addItem","mediaTitle":"formaudiofield1104303151__mediaTitle"};
16
+ export var classes = {"root":"formaudiofield606935778__root","addItem":"formaudiofield606935778__addItem","mediaTitle":"formaudiofield606935778__mediaTitle"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -5,7 +5,7 @@ import { getMediaURL } from '../../../auto-field-types';
5
5
  import type { AddItemActions } from '@wix/design-system';
6
6
  import { AddItem, AudioPlayer, Box, Text } from '@wix/design-system';
7
7
 
8
- import { useTranslations, useWithCallback } from '../../../hooks';
8
+ import { useMergedRef, useTranslations, useWithCallback } from '../../../hooks';
9
9
  import { getMediaTitle, MEDIA_TYPES } from '../../../utils';
10
10
 
11
11
  import { Z_INDEX_MODAL_POPOVER } from '../../common';
@@ -26,13 +26,14 @@ export const FormAudioField: FC<FormMediaControlProps> = ({
26
26
  readOnly,
27
27
  invalid,
28
28
  dataHook,
29
+ inputRef: forwardedRef,
29
30
  }) => {
30
31
  const { t } = useTranslations();
31
32
 
32
33
  const onChange = useWithCallback(onChangeAudio, onInput);
33
34
  const onClear = useWithCallback(onClearAudio, onInput);
34
35
 
35
- const inputRef = useRef<AddItemActions>(null);
36
+ const [inputRef, setInputRef] = useMergedRef<AddItemActions>(forwardedRef);
36
37
  const viewRef = useRef<HTMLDivElement>(null);
37
38
 
38
39
  const { callMedia, onMediaLoad, downloadMedia, loading } = useMediaControl({
@@ -91,7 +92,7 @@ export const FormAudioField: FC<FormMediaControlProps> = ({
91
92
  if (!data) {
92
93
  return (
93
94
  <AddItem
94
- ref={inputRef}
95
+ ref={setInputRef}
95
96
  dataHook={dataHook}
96
97
  className={style(classes.addItem, {
97
98
  disabled: !!readOnly,
@@ -39,6 +39,10 @@ const _FormAudio = (props: FormAudioProps) => {
39
39
  dataHook={dataHook}
40
40
  >
41
41
  <FormAudioField
42
+ // Hand the add button to react-hook-form so
43
+ // shouldFocusError scrolls to + focuses this field when it
44
+ // blocks save.
45
+ inputRef={controller.field.ref}
42
46
  data={controller.field.value}
43
47
  onChange={(value) => controller.field.onChange(value)}
44
48
  onClear={() => controller.field.onChange(null)}
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../../stylable-esm-runtime.js"
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "audioplayer1434128477";
8
+ var _namespace_ = "audioplayer2613344239";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"audioplayer1434128477__root"};
16
+ export var classes = {"root":"audioplayer2613344239__root"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "cellcolorview119324243";
8
+ var _namespace_ = "cellcolorview1178629535";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"cellcolorview119324243__root","hashPrefix":"cellcolorview119324243__hashPrefix"};
16
+ export var classes = {"root":"cellcolorview1178629535__root","hashPrefix":"cellcolorview1178629535__hashPrefix"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "colorview1899380221";
8
+ var _namespace_ = "colorview2624366234";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"colorview1899380221__root","view":"colorview1899380221__view","fillPreview":"colorview1899380221__fillPreview"};
16
+ export var classes = {"root":"colorview2624366234__root","view":"colorview2624366234__view","fillPreview":"colorview2624366234__fillPreview"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "deletedialog2731005548";
8
+ var _namespace_ = "deletedialog1579435053";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"deletedialog2731005548__root","layout":"deletedialog2731005548__layout"};
16
+ export var classes = {"root":"deletedialog1579435053__root","layout":"deletedialog1579435053__layout"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "formdocumentfield1775343895";
8
+ var _namespace_ = "formdocumentfield3894914095";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"formdocumentfield1775343895__root","viewWrapper":"formdocumentfield1775343895__viewWrapper","textWidth":"formdocumentfield1775343895__textWidth","documentLoader":"formdocumentfield1775343895__documentLoader","addDocument":"formdocumentfield1775343895__addDocument","addItemWrapper":"formdocumentfield1775343895__addItemWrapper"};
16
+ export var classes = {"root":"formdocumentfield3894914095__root","viewWrapper":"formdocumentfield3894914095__viewWrapper","textWidth":"formdocumentfield3894914095__textWidth","documentLoader":"formdocumentfield3894914095__documentLoader","addDocument":"formdocumentfield3894914095__addDocument","addItemWrapper":"formdocumentfield3894914095__addItemWrapper"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -1,7 +1,7 @@
1
1
  import React, { useRef } from 'react';
2
2
 
3
3
  import { MEDIA_TYPES } from '../../utils/media-utils';
4
- import { useTranslations, useWithCallback } from '../../hooks';
4
+ import { useMergedRef, useTranslations, useWithCallback } from '../../hooks';
5
5
  import type { AddItemActions } from '@wix/design-system';
6
6
 
7
7
  import type { FormMediaControlProps } from '../media-control';
@@ -26,13 +26,14 @@ export const FormDocumentField: React.FC<FormMediaControlProps> = ({
26
26
  readOnly,
27
27
  invalid,
28
28
  dataHook,
29
+ inputRef: forwardedRef,
29
30
  }) => {
30
31
  const { t } = useTranslations();
31
32
 
32
33
  const onChange = useWithCallback(onChangeDocument, onInput);
33
34
  const onClear = useWithCallback(onClearDocument, onInput);
34
35
 
35
- const inputRef = useRef<AddItemActions>(null);
36
+ const [inputRef, setInputRef] = useMergedRef<AddItemActions>(forwardedRef);
36
37
  const viewRef = useRef<HTMLDivElement>(null);
37
38
 
38
39
  const { callMedia, loading, downloadMedia } = useMediaControl({
@@ -54,7 +55,7 @@ export const FormDocumentField: React.FC<FormMediaControlProps> = ({
54
55
  {!data ? (
55
56
  <FormDocumentInput
56
57
  dataHook={dataHook}
57
- ref={inputRef}
58
+ ref={setInputRef}
58
59
  theme="dashes"
59
60
  disabled={readOnly}
60
61
  loading={loading}
@@ -39,6 +39,10 @@ const _FormDocument = (props: FormDocumentProps) => {
39
39
  dataHook={dataHook}
40
40
  >
41
41
  <FormDocumentField
42
+ // Hand the add button to react-hook-form so
43
+ // shouldFocusError scrolls to + focuses this field when it
44
+ // blocks save.
45
+ inputRef={controller.field.ref}
42
46
  data={controller.field.value}
43
47
  onChange={(value) => controller.field.onChange(value)}
44
48
  onClear={() => controller.field.onChange(null)}
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "exclamation2710007777";
8
+ var _namespace_ = "exclamation2180886733";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"exclamation2710007777__root","exclamation":"exclamation2710007777__exclamation","actions":"exclamation2710007777__actions","action":"exclamation2710007777__action"};
16
+ export var classes = {"root":"exclamation2180886733__root","exclamation":"exclamation2180886733__exclamation","actions":"exclamation2180886733__actions","action":"exclamation2180886733__action"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "highlightedtext892833628";
8
+ var _namespace_ = "highlightedtext3218260618";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,8 +13,8 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"highlightedtext892833628__root","substring":"highlightedtext892833628__substring"};
17
- export var keyframes = {"highlighted":"highlightedtext892833628__highlighted","highlighted-match":"highlightedtext892833628__highlighted-match"};
16
+ export var classes = {"root":"highlightedtext3218260618__root","substring":"highlightedtext3218260618__substring"};
17
+ export var keyframes = {"highlighted":"highlightedtext3218260618__highlighted","highlighted-match":"highlightedtext3218260618__highlighted-match"};
18
18
  export var layers = {};
19
19
  export var containers = {};
20
20
  export var stVars = {};