@wix/patterns-fields 1.55.0 → 1.59.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 (419) 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/view/cell-address-view.js +2 -2
  4. package/dist/cjs/components/address/view/cell-address-view.js.map +1 -1
  5. package/dist/cjs/components/audio/actions/actions-button/actions-button.js +2 -2
  6. package/dist/cjs/components/audio/actions/actions-button/actions-button.js.map +1 -1
  7. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js +3 -3
  8. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js.map +1 -1
  9. package/dist/cjs/components/audio/actions/audio-actions.js +5 -5
  10. package/dist/cjs/components/audio/actions/audio-actions.js.map +1 -1
  11. package/dist/cjs/components/audio/audio-field/audio-view.js +2 -2
  12. package/dist/cjs/components/audio/audio-field/audio-view.js.map +1 -1
  13. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js +4 -4
  14. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
  15. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js +2 -2
  16. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js.map +1 -1
  17. package/dist/cjs/components/audio/cell-audio-edit.js +4 -4
  18. package/dist/cjs/components/audio/cell-audio-edit.js.map +1 -1
  19. package/dist/cjs/components/audio/cell-audio-view.js +2 -2
  20. package/dist/cjs/components/audio/cell-audio-view.js.map +1 -1
  21. package/dist/cjs/components/color-view/cell-color-view.st.css.js +3 -3
  22. package/dist/cjs/components/color-view/cell-color-view.st.css.js.map +1 -1
  23. package/dist/cjs/components/color-view/color-view.st.css.js +4 -4
  24. package/dist/cjs/components/color-view/color-view.st.css.js.map +1 -1
  25. package/dist/cjs/components/date-input/date-utils.js +15 -2
  26. package/dist/cjs/components/date-input/date-utils.js.map +1 -1
  27. package/dist/cjs/components/date-input/form-date-input.js +14 -15
  28. package/dist/cjs/components/date-input/form-date-input.js.map +1 -1
  29. package/dist/cjs/components/datetime-input/form-date-time.js +11 -9
  30. package/dist/cjs/components/datetime-input/form-date-time.js.map +1 -1
  31. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js +3 -3
  32. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js.map +1 -1
  33. package/dist/cjs/components/document/cell-document-edit.js +10 -10
  34. package/dist/cjs/components/document/cell-document-edit.js.map +1 -1
  35. package/dist/cjs/components/document/cell-document-view.js +2 -2
  36. package/dist/cjs/components/document/cell-document-view.js.map +1 -1
  37. package/dist/cjs/components/document/document-control.js +6 -6
  38. package/dist/cjs/components/document/document-control.js.map +1 -1
  39. package/dist/cjs/components/document/document-view.js +2 -2
  40. package/dist/cjs/components/document/document-view.js.map +1 -1
  41. package/dist/cjs/components/document/form-document-field.st.css.js +7 -7
  42. package/dist/cjs/components/document/form-document-field.st.css.js.map +1 -1
  43. package/dist/cjs/components/exclamation/exclamation.js +2 -2
  44. package/dist/cjs/components/exclamation/exclamation.js.map +1 -1
  45. package/dist/cjs/components/exclamation/exclamation.st.css.js +5 -5
  46. package/dist/cjs/components/exclamation/exclamation.st.css.js.map +1 -1
  47. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js +5 -5
  48. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
  49. package/dist/cjs/components/image/cell-image-edit.js +7 -7
  50. package/dist/cjs/components/image/cell-image-edit.js.map +1 -1
  51. package/dist/cjs/components/image/thumbnail-replace-overlay.js +2 -2
  52. package/dist/cjs/components/image/thumbnail-replace-overlay.js.map +1 -1
  53. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js +3 -3
  54. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js.map +1 -1
  55. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  56. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js.map +1 -1
  57. package/dist/cjs/components/media-control/paste-url-button.st.css.js +4 -4
  58. package/dist/cjs/components/media-control/paste-url-button.st.css.js.map +1 -1
  59. package/dist/cjs/components/media-gallery/cell-media-gallery-edit.js +6 -6
  60. package/dist/cjs/components/media-gallery/cell-media-gallery-edit.js.map +1 -1
  61. package/dist/cjs/components/media-gallery/form-media-gallery-field.js +4 -4
  62. package/dist/cjs/components/media-gallery/form-media-gallery-field.js.map +1 -1
  63. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js +10 -10
  64. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js.map +1 -1
  65. package/dist/cjs/components/media-gallery/media-gallery-dialog/add-media-button.js +2 -2
  66. package/dist/cjs/components/media-gallery/media-gallery-dialog/add-media-button.js.map +1 -1
  67. package/dist/cjs/components/media-gallery/media-gallery-dialog/no-items-view.js +2 -2
  68. package/dist/cjs/components/media-gallery/media-gallery-dialog/no-items-view.js.map +1 -1
  69. package/dist/cjs/components/media-gallery/media-preview-modal.js +4 -4
  70. package/dist/cjs/components/media-gallery/media-preview-modal.js.map +1 -1
  71. package/dist/cjs/components/media-image/media-image.st.css.js +4 -4
  72. package/dist/cjs/components/media-image/media-image.st.css.js.map +1 -1
  73. package/dist/cjs/components/media-image/overlays/custom-url-overlay.js +2 -2
  74. package/dist/cjs/components/media-image/overlays/custom-url-overlay.js.map +1 -1
  75. package/dist/cjs/components/media-image/overlays/overlay.st.css.js +3 -3
  76. package/dist/cjs/components/media-image/overlays/overlay.st.css.js.map +1 -1
  77. package/dist/cjs/components/media-image/overlays/video-indicator-overlay.js +2 -2
  78. package/dist/cjs/components/media-image/overlays/video-indicator-overlay.js.map +1 -1
  79. package/dist/cjs/components/media-loader/media-loader.st.css.js +3 -3
  80. package/dist/cjs/components/media-loader/media-loader.st.css.js.map +1 -1
  81. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  82. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js.map +1 -1
  83. package/dist/cjs/components/multi-document/cell-multi-document-edit.js +12 -12
  84. package/dist/cjs/components/multi-document/cell-multi-document-edit.js.map +1 -1
  85. package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js +3 -3
  86. package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
  87. package/dist/cjs/components/multi-document/cell-multi-document-view.js +2 -2
  88. package/dist/cjs/components/multi-document/cell-multi-document-view.js.map +1 -1
  89. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js +5 -5
  90. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  91. package/dist/cjs/components/reference/cell-multi-reference-input.js +14 -44
  92. package/dist/cjs/components/reference/cell-multi-reference-input.js.map +1 -1
  93. package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js +2 -2
  94. package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js.map +1 -1
  95. package/dist/cjs/components/reference/cell-reference-input.js +15 -45
  96. package/dist/cjs/components/reference/cell-reference-input.js.map +1 -1
  97. package/dist/cjs/components/reference/cell-reference-input.st.css.js +3 -3
  98. package/dist/cjs/components/reference/cell-reference-input.st.css.js.map +1 -1
  99. package/dist/cjs/components/reference/form-multi-reference.js +191 -0
  100. package/dist/cjs/components/reference/form-multi-reference.js.map +1 -0
  101. package/dist/cjs/components/reference/form-reference.js +188 -0
  102. package/dist/cjs/components/reference/form-reference.js.map +1 -0
  103. package/dist/cjs/components/reference/index.js +12 -0
  104. package/dist/cjs/components/reference/index.js.map +1 -1
  105. package/dist/cjs/components/reference/reference-dropdown-footer.js +65 -0
  106. package/dist/cjs/components/reference/reference-dropdown-footer.js.map +1 -0
  107. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +4 -4
  108. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
  109. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +3 -3
  110. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
  111. package/dist/cjs/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  112. 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
  113. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +3 -3
  114. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js.map +1 -1
  115. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +3 -3
  116. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
  117. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.js +3 -3
  118. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.js.map +1 -1
  119. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  120. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js.map +1 -1
  121. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +7 -7
  122. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js.map +1 -1
  123. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +5 -5
  124. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js.map +1 -1
  125. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +4 -4
  126. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
  127. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +18 -18
  128. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js.map +1 -1
  129. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +4 -4
  130. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js.map +1 -1
  131. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/align-dropdown.js +5 -5
  132. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/align-dropdown.js.map +1 -1
  133. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/link-button.js +2 -2
  134. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/link-button.js.map +1 -1
  135. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.js +3 -3
  136. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.js.map +1 -1
  137. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +18 -18
  138. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js.map +1 -1
  139. package/dist/cjs/components/text/text-view.st.css.js +3 -3
  140. package/dist/cjs/components/text/text-view.st.css.js.map +1 -1
  141. package/dist/cjs/components/time-input/form-time-input.js +6 -4
  142. package/dist/cjs/components/time-input/form-time-input.js.map +1 -1
  143. package/dist/cjs/components/time-input/form-time.js +20 -5
  144. package/dist/cjs/components/time-input/form-time.js.map +1 -1
  145. package/dist/cjs/components/url/form-url.js +2 -2
  146. package/dist/cjs/components/url/form-url.js.map +1 -1
  147. package/dist/cjs/components/url/url-view.js +2 -2
  148. package/dist/cjs/components/url/url-view.js.map +1 -1
  149. package/dist/cjs/components/video/cell-video-edit.js +7 -7
  150. package/dist/cjs/components/video/cell-video-edit.js.map +1 -1
  151. package/dist/cjs/components/video/form-video.js +6 -6
  152. package/dist/cjs/components/video/form-video.js.map +1 -1
  153. package/dist/cjs/components/video/video-view-field.js +3 -3
  154. package/dist/cjs/components/video/video-view-field.js.map +1 -1
  155. package/dist/cjs/providers/PatternsFieldsAppContainer.js +1 -1
  156. package/dist/cjs/providers/PatternsFieldsAppContainer.js.map +1 -1
  157. package/dist/cjs/styles.global.css +1 -1
  158. package/dist/cjs/utils/get-image-url.js +24 -4
  159. package/dist/cjs/utils/get-image-url.js.map +1 -1
  160. package/dist/esm/components/address/input/address-input.st.css.js +2 -2
  161. package/dist/esm/components/address/view/cell-address-view.js +1 -1
  162. package/dist/esm/components/address/view/cell-address-view.js.map +1 -1
  163. package/dist/esm/components/audio/actions/actions-button/actions-button.js +1 -1
  164. package/dist/esm/components/audio/actions/actions-button/actions-button.js.map +1 -1
  165. package/dist/esm/components/audio/actions/actions-menu/actions-menu.st.css.js +2 -2
  166. package/dist/esm/components/audio/actions/audio-actions.js +1 -1
  167. package/dist/esm/components/audio/actions/audio-actions.js.map +1 -1
  168. package/dist/esm/components/audio/audio-field/audio-view.js +1 -1
  169. package/dist/esm/components/audio/audio-field/audio-view.js.map +1 -1
  170. package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js +2 -2
  171. package/dist/esm/components/audio/audio-player/audio-player.st.css.js +2 -2
  172. package/dist/esm/components/audio/audio-player/audio-player.st.css.js.map +1 -1
  173. package/dist/esm/components/audio/cell-audio-edit.js +1 -1
  174. package/dist/esm/components/audio/cell-audio-edit.js.map +1 -1
  175. package/dist/esm/components/audio/cell-audio-view.js +1 -1
  176. package/dist/esm/components/audio/cell-audio-view.js.map +1 -1
  177. package/dist/esm/components/color-view/cell-color-view.st.css.js +2 -2
  178. package/dist/esm/components/color-view/color-view.st.css.js +2 -2
  179. package/dist/esm/components/color-view/color-view.st.css.js.map +1 -1
  180. package/dist/esm/components/date-input/date-utils.js +15 -2
  181. package/dist/esm/components/date-input/date-utils.js.map +1 -1
  182. package/dist/esm/components/date-input/form-date-input.js +16 -12
  183. package/dist/esm/components/date-input/form-date-input.js.map +1 -1
  184. package/dist/esm/components/datetime-input/form-date-time.js +8 -3
  185. package/dist/esm/components/datetime-input/form-date-time.js.map +1 -1
  186. package/dist/esm/components/delete-dialog/delete-dialog.st.css.js +2 -2
  187. package/dist/esm/components/document/cell-document-edit.js +1 -1
  188. package/dist/esm/components/document/cell-document-edit.js.map +1 -1
  189. package/dist/esm/components/document/cell-document-view.js +1 -1
  190. package/dist/esm/components/document/cell-document-view.js.map +1 -1
  191. package/dist/esm/components/document/document-control.js +1 -1
  192. package/dist/esm/components/document/document-control.js.map +1 -1
  193. package/dist/esm/components/document/document-view.js +1 -1
  194. package/dist/esm/components/document/document-view.js.map +1 -1
  195. package/dist/esm/components/document/form-document-field.st.css.js +2 -2
  196. package/dist/esm/components/exclamation/exclamation.js +1 -1
  197. package/dist/esm/components/exclamation/exclamation.js.map +1 -1
  198. package/dist/esm/components/exclamation/exclamation.st.css.js +2 -2
  199. package/dist/esm/components/exclamation/exclamation.st.css.js.map +1 -1
  200. package/dist/esm/components/highlighted-text/highlighted-text.st.css.js +3 -3
  201. package/dist/esm/components/image/cell-image-edit.js +1 -1
  202. package/dist/esm/components/image/cell-image-edit.js.map +1 -1
  203. package/dist/esm/components/image/thumbnail-replace-overlay.js +1 -1
  204. package/dist/esm/components/image/thumbnail-replace-overlay.js.map +1 -1
  205. package/dist/esm/components/image/thumbnail-replace-overlay.st.css.js +2 -2
  206. package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  207. package/dist/esm/components/media-control/paste-url-button.st.css.js +2 -2
  208. package/dist/esm/components/media-control/paste-url-button.st.css.js.map +1 -1
  209. package/dist/esm/components/media-gallery/cell-media-gallery-edit.js +1 -1
  210. package/dist/esm/components/media-gallery/cell-media-gallery-edit.js.map +1 -1
  211. package/dist/esm/components/media-gallery/form-media-gallery-field.js +1 -1
  212. package/dist/esm/components/media-gallery/form-media-gallery-field.js.map +1 -1
  213. package/dist/esm/components/media-gallery/form-media-gallery-field.st.css.js +2 -2
  214. package/dist/esm/components/media-gallery/media-gallery-dialog/add-media-button.js +1 -1
  215. package/dist/esm/components/media-gallery/media-gallery-dialog/add-media-button.js.map +1 -1
  216. package/dist/esm/components/media-gallery/media-gallery-dialog/no-items-view.js +1 -1
  217. package/dist/esm/components/media-gallery/media-gallery-dialog/no-items-view.js.map +1 -1
  218. package/dist/esm/components/media-gallery/media-preview-modal.js +1 -1
  219. package/dist/esm/components/media-gallery/media-preview-modal.js.map +1 -1
  220. package/dist/esm/components/media-image/media-image.st.css.js +3 -3
  221. package/dist/esm/components/media-image/overlays/custom-url-overlay.js +1 -1
  222. package/dist/esm/components/media-image/overlays/custom-url-overlay.js.map +1 -1
  223. package/dist/esm/components/media-image/overlays/overlay.st.css.js +2 -2
  224. package/dist/esm/components/media-image/overlays/overlay.st.css.js.map +1 -1
  225. package/dist/esm/components/media-image/overlays/video-indicator-overlay.js +1 -1
  226. package/dist/esm/components/media-image/overlays/video-indicator-overlay.js.map +1 -1
  227. package/dist/esm/components/media-loader/media-loader.st.css.js +2 -2
  228. package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  229. package/dist/esm/components/multi-document/cell-multi-document-edit.js +1 -1
  230. package/dist/esm/components/multi-document/cell-multi-document-edit.js.map +1 -1
  231. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js +2 -2
  232. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
  233. package/dist/esm/components/multi-document/cell-multi-document-view.js +1 -1
  234. package/dist/esm/components/multi-document/cell-multi-document-view.js.map +1 -1
  235. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js +2 -2
  236. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  237. package/dist/esm/components/reference/cell-multi-reference-input.js +8 -15
  238. package/dist/esm/components/reference/cell-multi-reference-input.js.map +1 -1
  239. package/dist/esm/components/reference/cell-multi-reference-input.st.css.js +2 -2
  240. package/dist/esm/components/reference/cell-multi-reference-input.st.css.js.map +1 -1
  241. package/dist/esm/components/reference/cell-reference-input.js +9 -16
  242. package/dist/esm/components/reference/cell-reference-input.js.map +1 -1
  243. package/dist/esm/components/reference/cell-reference-input.st.css.js +2 -2
  244. package/dist/esm/components/reference/form-multi-reference.js +98 -0
  245. package/dist/esm/components/reference/form-multi-reference.js.map +1 -0
  246. package/dist/esm/components/reference/form-reference.js +96 -0
  247. package/dist/esm/components/reference/form-reference.js.map +1 -0
  248. package/dist/esm/components/reference/index.js +2 -0
  249. package/dist/esm/components/reference/index.js.map +1 -1
  250. package/dist/esm/components/reference/reference-dropdown-footer.js +28 -0
  251. package/dist/esm/components/reference/reference-dropdown-footer.js.map +1 -0
  252. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +2 -2
  253. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
  254. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +2 -2
  255. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
  256. package/dist/esm/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  257. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +2 -2
  258. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js.map +1 -1
  259. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +2 -2
  260. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
  261. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.js +1 -1
  262. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.js.map +1 -1
  263. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  264. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +2 -2
  265. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +2 -2
  266. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js.map +1 -1
  267. package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +2 -2
  268. package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
  269. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +2 -2
  270. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +2 -2
  271. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/align-dropdown.js +1 -1
  272. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/align-dropdown.js.map +1 -1
  273. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/link-button.js +1 -1
  274. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/link-button.js.map +1 -1
  275. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.js +1 -1
  276. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.js.map +1 -1
  277. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +2 -2
  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/components/time-input/form-time-input.js +3 -2
  281. package/dist/esm/components/time-input/form-time-input.js.map +1 -1
  282. package/dist/esm/components/time-input/form-time.js +10 -2
  283. package/dist/esm/components/time-input/form-time.js.map +1 -1
  284. package/dist/esm/components/url/form-url.js +1 -1
  285. package/dist/esm/components/url/form-url.js.map +1 -1
  286. package/dist/esm/components/url/url-view.js +1 -1
  287. package/dist/esm/components/url/url-view.js.map +1 -1
  288. package/dist/esm/components/video/cell-video-edit.js +1 -1
  289. package/dist/esm/components/video/cell-video-edit.js.map +1 -1
  290. package/dist/esm/components/video/form-video.js +1 -1
  291. package/dist/esm/components/video/form-video.js.map +1 -1
  292. package/dist/esm/components/video/video-view-field.js +1 -1
  293. package/dist/esm/components/video/video-view-field.js.map +1 -1
  294. package/dist/esm/providers/PatternsFieldsAppContainer.js +1 -1
  295. package/dist/esm/providers/PatternsFieldsAppContainer.js.map +1 -1
  296. package/dist/esm/styles.global.css +1 -1
  297. package/dist/esm/utils/get-image-url.js +26 -4
  298. package/dist/esm/utils/get-image-url.js.map +1 -1
  299. package/dist/types/components/audio/audio-player/audio-player.st.css.d.ts.map +1 -1
  300. package/dist/types/components/color-view/color-view.st.css.d.ts.map +1 -1
  301. package/dist/types/components/date-input/date-utils.d.ts +2 -2
  302. package/dist/types/components/date-input/date-utils.d.ts.map +1 -1
  303. package/dist/types/components/date-input/form-date-input.d.ts.map +1 -1
  304. package/dist/types/components/datetime-input/form-date-time.d.ts.map +1 -1
  305. package/dist/types/components/exclamation/exclamation.st.css.d.ts.map +1 -1
  306. package/dist/types/components/media-control/paste-url-button.st.css.d.ts.map +1 -1
  307. package/dist/types/components/media-image/overlays/overlay.st.css.d.ts.map +1 -1
  308. package/dist/types/components/multi-document/cell-multi-document-edit.st.css.d.ts.map +1 -1
  309. package/dist/types/components/multi-document/multi-document-input/form-multi-document.st.css.d.ts.map +1 -1
  310. package/dist/types/components/reference/cell-multi-reference-input.d.ts.map +1 -1
  311. package/dist/types/components/reference/cell-multi-reference-input.st.css.d.ts.map +1 -1
  312. package/dist/types/components/reference/cell-reference-input.d.ts.map +1 -1
  313. package/dist/types/components/reference/form-multi-reference.d.ts +29 -0
  314. package/dist/types/components/reference/form-multi-reference.d.ts.map +1 -0
  315. package/dist/types/components/reference/form-reference.d.ts +33 -0
  316. package/dist/types/components/reference/form-reference.d.ts.map +1 -0
  317. package/dist/types/components/reference/index.d.ts +2 -0
  318. package/dist/types/components/reference/index.d.ts.map +1 -1
  319. package/dist/types/components/reference/reference-dropdown-footer.d.ts +16 -0
  320. package/dist/types/components/reference/reference-dropdown-footer.d.ts.map +1 -0
  321. package/dist/types/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.d.ts.map +1 -1
  322. package/dist/types/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.d.ts.map +1 -1
  323. package/dist/types/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.d.ts.map +1 -1
  324. package/dist/types/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.d.ts.map +1 -1
  325. package/dist/types/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.d.ts.map +1 -1
  326. package/dist/types/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.d.ts.map +1 -1
  327. package/dist/types/components/text/text-view.st.css.d.ts.map +1 -1
  328. package/dist/types/components/time-input/form-time-input.d.ts +6 -1
  329. package/dist/types/components/time-input/form-time-input.d.ts.map +1 -1
  330. package/dist/types/components/time-input/form-time.d.ts.map +1 -1
  331. package/dist/types/utils/get-image-url.d.ts.map +1 -1
  332. package/package.json +7 -7
  333. package/src/__tests__/components/date-input/form-date-input.spec.tsx +23 -0
  334. package/src/__tests__/components/datetime-input/form-date-time.spec.tsx +15 -0
  335. package/src/__tests__/components/image/form-image-input.spec.tsx +10 -0
  336. package/src/__tests__/components/reference/form-multi-reference.spec.tsx +254 -0
  337. package/src/__tests__/components/reference/form-reference.spec.tsx +245 -0
  338. package/src/__tests__/components/time-input/form-time.spec.tsx +16 -0
  339. package/src/__tests__/utils/get-image-url.spec.ts +48 -0
  340. package/src/components/address/input/address-input.st.css.ts +2 -2
  341. package/src/components/address/view/cell-address-view.tsx +1 -1
  342. package/src/components/audio/actions/actions-button/actions-button.tsx +1 -1
  343. package/src/components/audio/actions/actions-menu/actions-menu.st.css.ts +2 -2
  344. package/src/components/audio/actions/audio-actions.tsx +1 -1
  345. package/src/components/audio/audio-field/audio-view.tsx +1 -1
  346. package/src/components/audio/audio-field/form-audio-field.st.css.ts +2 -2
  347. package/src/components/audio/audio-player/audio-player.st.css.ts +2 -2
  348. package/src/components/audio/cell-audio-edit.tsx +1 -1
  349. package/src/components/audio/cell-audio-view.tsx +1 -1
  350. package/src/components/color-view/cell-color-view.st.css.ts +2 -2
  351. package/src/components/color-view/color-view.st.css.ts +2 -2
  352. package/src/components/date-input/date-utils.ts +21 -4
  353. package/src/components/date-input/form-date-input.tsx +17 -14
  354. package/src/components/datetime-input/form-date-time.tsx +8 -3
  355. package/src/components/delete-dialog/delete-dialog.st.css.ts +2 -2
  356. package/src/components/document/cell-document-edit.tsx +1 -1
  357. package/src/components/document/cell-document-view.tsx +1 -1
  358. package/src/components/document/document-control.tsx +1 -1
  359. package/src/components/document/document-view.tsx +1 -1
  360. package/src/components/document/form-document-field.st.css.ts +2 -2
  361. package/src/components/exclamation/exclamation.st.css.ts +2 -2
  362. package/src/components/exclamation/exclamation.tsx +1 -1
  363. package/src/components/highlighted-text/highlighted-text.st.css.ts +3 -3
  364. package/src/components/image/cell-image-edit.tsx +1 -1
  365. package/src/components/image/thumbnail-replace-overlay.st.css.ts +2 -2
  366. package/src/components/image/thumbnail-replace-overlay.tsx +1 -1
  367. package/src/components/media-control/cell-media-edit-shell.st.css.ts +2 -2
  368. package/src/components/media-control/paste-url-button.st.css.ts +2 -2
  369. package/src/components/media-gallery/cell-media-gallery-edit.tsx +1 -1
  370. package/src/components/media-gallery/form-media-gallery-field.st.css.ts +2 -2
  371. package/src/components/media-gallery/form-media-gallery-field.tsx +1 -1
  372. package/src/components/media-gallery/media-gallery-dialog/add-media-button.tsx +1 -1
  373. package/src/components/media-gallery/media-gallery-dialog/no-items-view.tsx +1 -1
  374. package/src/components/media-gallery/media-preview-modal.tsx +1 -1
  375. package/src/components/media-image/media-image.st.css.ts +3 -3
  376. package/src/components/media-image/overlays/custom-url-overlay.tsx +1 -1
  377. package/src/components/media-image/overlays/overlay.st.css.ts +2 -2
  378. package/src/components/media-image/overlays/video-indicator-overlay.tsx +1 -1
  379. package/src/components/media-loader/media-loader.st.css.ts +2 -2
  380. package/src/components/media-tag/web-media-tag/media-tag.st.css.ts +2 -2
  381. package/src/components/multi-document/cell-multi-document-edit.st.css.ts +2 -2
  382. package/src/components/multi-document/cell-multi-document-edit.tsx +1 -1
  383. package/src/components/multi-document/cell-multi-document-view.tsx +1 -1
  384. package/src/components/multi-document/multi-document-input/form-multi-document.st.css.ts +2 -2
  385. package/src/components/reference/cell-multi-reference-input.st.css.ts +2 -2
  386. package/src/components/reference/cell-multi-reference-input.tsx +8 -29
  387. package/src/components/reference/cell-reference-input.st.css.ts +2 -2
  388. package/src/components/reference/cell-reference-input.tsx +9 -31
  389. package/src/components/reference/form-multi-reference.tsx +234 -0
  390. package/src/components/reference/form-reference.tsx +211 -0
  391. package/src/components/reference/index.ts +2 -0
  392. package/src/components/reference/reference-dropdown-footer.tsx +51 -0
  393. package/src/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.ts +2 -2
  394. package/src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts +2 -2
  395. package/src/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.ts +2 -2
  396. package/src/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.ts +2 -2
  397. package/src/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.ts +2 -2
  398. package/src/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.ts +2 -2
  399. package/src/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.tsx +1 -1
  400. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.ts +2 -2
  401. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts +2 -2
  402. package/src/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.ts +2 -2
  403. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.ts +2 -2
  404. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts +2 -2
  405. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/align-dropdown.tsx +1 -1
  406. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/link-button.tsx +1 -1
  407. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.ts +2 -2
  408. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.tsx +1 -1
  409. package/src/components/text/text-view.st.css.ts +2 -2
  410. package/src/components/time-input/form-time-input.tsx +7 -2
  411. package/src/components/time-input/form-time.tsx +12 -1
  412. package/src/components/url/form-url.tsx +1 -1
  413. package/src/components/url/url-view.tsx +1 -1
  414. package/src/components/video/cell-video-edit.tsx +1 -1
  415. package/src/components/video/form-video.tsx +1 -1
  416. package/src/components/video/video-view-field.tsx +1 -1
  417. package/src/providers/PatternsFieldsAppContainer.ts +1 -1
  418. package/src/styles.global.css +1 -1
  419. package/src/utils/get-image-url.ts +31 -4
@@ -0,0 +1,234 @@
1
+ import React, { useCallback, useMemo, useRef } from 'react';
2
+ import {
3
+ Box,
4
+ FormField,
5
+ MultiSelect,
6
+ listItemSelectBuilder,
7
+ type DropdownLayoutValueOption,
8
+ type MultiSelectTag,
9
+ } from '@wix/design-system';
10
+ import { observer } from 'mobx-react-lite';
11
+ import { useWixPatternsContainer } from '@wix/bex-core/react';
12
+ import { useController } from '@wix/bex-core/form';
13
+
14
+ import { BaseInputProps } from '../../types/base-input';
15
+ import { useTranslations } from '../../hooks/use-translations';
16
+ import { ReferenceAvatar } from './reference-avatar';
17
+ import { useReferenceDropdownFooter } from './reference-dropdown-footer';
18
+ import type { FormReferenceItem } from './form-reference';
19
+
20
+ /** Selected references, each stored as `{ [idField], [displayField] }`. */
21
+ export type FormMultiReferenceValue = Record<string, unknown>[] | null;
22
+
23
+ // Data-agnostic like CellMultiReferenceInput: the caller owns fetching, search,
24
+ // and pagination and passes the results in as props. This renderer only wraps
25
+ // them in a FormField with react-hook-form wiring. See remaining-issues.md #2.
26
+ export interface FormMultiReferenceProps
27
+ extends BaseInputProps<FormMultiReferenceValue> {
28
+ /** Candidate items for the dropdown. */
29
+ items: FormReferenceItem[];
30
+ /** Referenced-item field the selected id is written to. */
31
+ idField: string;
32
+ /** Referenced-item field used as the tag label. */
33
+ displayField: string;
34
+ /** Referenced-item field holding an avatar image, when the schema has one. */
35
+ imageField?: string;
36
+ /** Current search text. The caller owns search state. */
37
+ searchValue?: string;
38
+ onSearch: (query: string) => void;
39
+ onClearSearch?: () => void;
40
+ hasMore?: boolean;
41
+ loadMore?: () => void;
42
+ fixedFooter?: React.ReactNode;
43
+ /** When set, renders an "Open Collection" action at the bottom of the dropdown. */
44
+ onOpenCollection?: () => void;
45
+ placeholder?: string;
46
+ }
47
+
48
+ interface MultiSelectHandle {
49
+ hideOptions?: () => void;
50
+ }
51
+
52
+ const _FormMultiReference = (props: FormMultiReferenceProps) => {
53
+ const {
54
+ field,
55
+ dataHook,
56
+ formControl,
57
+ data,
58
+ items,
59
+ idField,
60
+ displayField,
61
+ imageField,
62
+ searchValue,
63
+ onSearch,
64
+ onClearSearch,
65
+ hasMore,
66
+ loadMore,
67
+ fixedFooter,
68
+ onOpenCollection,
69
+ placeholder,
70
+ } = props;
71
+
72
+ const { translate: t } = useWixPatternsContainer();
73
+ const { t: tf } = useTranslations();
74
+ const msRef = useRef<MultiSelectHandle | null>(null);
75
+
76
+ const controller = useController({
77
+ name: field.id,
78
+ control: formControl,
79
+ defaultValue: data?.[field.id],
80
+ rules: {
81
+ validate: (value) => {
82
+ const arr = value as FormMultiReferenceValue;
83
+ if (field.validation?.required && (!arr || !arr.length)) {
84
+ return t('cairo.fieldValidation.requiredField');
85
+ }
86
+ return true;
87
+ },
88
+ },
89
+ });
90
+
91
+ const selectedValues = useMemo(
92
+ () => (controller.field.value as Record<string, unknown>[]) || [],
93
+ [controller.field.value],
94
+ );
95
+
96
+ const tags = useMemo<MultiSelectTag[]>(
97
+ () =>
98
+ selectedValues.map((item) => {
99
+ const selectedId = item[idField] as string;
100
+ // A referenced item with no value in the display field still needs a
101
+ // readable tag — the dropdown options use the same fallback.
102
+ const label =
103
+ (item[displayField] as string) ||
104
+ tf('patterns-fields.reference.untitled');
105
+ const image = imageField
106
+ ? (item[imageField] as string | undefined)
107
+ : undefined;
108
+ return {
109
+ id: selectedId,
110
+ label,
111
+ removable: true,
112
+ size: 'medium',
113
+ thumb: (
114
+ <Box
115
+ align="center"
116
+ verticalAlign="middle"
117
+ position="absolute"
118
+ top="calc(50% - 12px)"
119
+ left="calc(50% - 12px)"
120
+ >
121
+ <ReferenceAvatar name={label} image={image} />
122
+ </Box>
123
+ ),
124
+ dataHook: `multi-reference-tag-${field.id}-${selectedId}`,
125
+ };
126
+ }),
127
+ [selectedValues, idField, displayField, imageField, field.id, tf],
128
+ );
129
+
130
+ const options = useMemo(
131
+ () =>
132
+ items.map((item) =>
133
+ listItemSelectBuilder({
134
+ id: item.id,
135
+ title: item.name || tf('patterns-fields.reference.untitled'),
136
+ prefix: <ReferenceAvatar name={item.name} image={item.image} />,
137
+ }),
138
+ ),
139
+ [items, tf],
140
+ );
141
+
142
+ const handleSelect = useCallback(
143
+ (option: DropdownLayoutValueOption) => {
144
+ const selectedId = String(option.id);
145
+ if (selectedValues.some((item) => item[idField] === selectedId)) {
146
+ onClearSearch?.();
147
+ return;
148
+ }
149
+ const item = items.find((i) => i.id === selectedId);
150
+ controller.field.onChange([
151
+ ...selectedValues,
152
+ { [idField]: selectedId, [displayField]: item?.name || '' },
153
+ ]);
154
+ onClearSearch?.();
155
+ },
156
+ [
157
+ selectedValues,
158
+ items,
159
+ idField,
160
+ displayField,
161
+ controller.field,
162
+ onClearSearch,
163
+ ],
164
+ );
165
+
166
+ const handleRemoveTag = useCallback(
167
+ (tagId: string) => {
168
+ controller.field.onChange(
169
+ selectedValues.filter((item) => item[idField] !== tagId),
170
+ );
171
+ },
172
+ [controller.field, selectedValues, idField],
173
+ );
174
+
175
+ const handleChange = useCallback(
176
+ (e: React.ChangeEvent<HTMLInputElement>) => {
177
+ onSearch(e.target.value);
178
+ },
179
+ [onSearch],
180
+ );
181
+
182
+ const handleClear = useCallback(() => {
183
+ controller.field.onChange([]);
184
+ onClearSearch?.();
185
+ }, [controller.field, onClearSearch]);
186
+
187
+ const handleBlur = useCallback(() => {
188
+ onClearSearch?.();
189
+ }, [onClearSearch]);
190
+
191
+ const hideOptions = useCallback(() => msRef.current?.hideOptions?.(), []);
192
+ const combinedFooter = useReferenceDropdownFooter({
193
+ fixedFooter,
194
+ onOpenCollection,
195
+ hideOptions,
196
+ });
197
+
198
+ return (
199
+ <FormField
200
+ label={field.displayName}
201
+ required={field.validation?.required}
202
+ status={controller.fieldState.error ? 'error' : undefined}
203
+ statusMessage={controller.fieldState.error?.message}
204
+ dataHook={dataHook}
205
+ >
206
+ <MultiSelect
207
+ ref={(instance: MultiSelectHandle | null) => {
208
+ msRef.current = instance;
209
+ }}
210
+ placeholder={
211
+ placeholder ?? tf('auto-patterns.fields.select_placeholder')
212
+ }
213
+ options={options}
214
+ value={searchValue ?? ''}
215
+ size="large"
216
+ tags={tags}
217
+ clearOnBlur={false}
218
+ onChange={handleChange}
219
+ onSelect={handleSelect}
220
+ onRemoveTag={handleRemoveTag}
221
+ onClear={handleClear}
222
+ onBlur={handleBlur}
223
+ clearButton={!field.validation?.required}
224
+ infiniteScroll={!!loadMore}
225
+ hasMore={hasMore}
226
+ loadMore={loadMore}
227
+ fixedFooter={combinedFooter}
228
+ dataHook={`multi-reference-input-${field.id}`}
229
+ />
230
+ </FormField>
231
+ );
232
+ };
233
+
234
+ export const FormMultiReference = observer(_FormMultiReference);
@@ -0,0 +1,211 @@
1
+ import React, { useCallback, useMemo, useRef } from 'react';
2
+ import {
3
+ AutoComplete,
4
+ FormField,
5
+ Input,
6
+ listItemSelectBuilder,
7
+ type DropdownLayoutValueOption,
8
+ } from '@wix/design-system';
9
+ import { observer } from 'mobx-react-lite';
10
+ import { useWixPatternsContainer } from '@wix/bex-core/react';
11
+ import { useController } from '@wix/bex-core/form';
12
+
13
+ import { BaseInputProps } from '../../types/base-input';
14
+ import { useTranslations } from '../../hooks/use-translations';
15
+ import { ReferenceAvatar } from './reference-avatar';
16
+ import { useReferenceDropdownFooter } from './reference-dropdown-footer';
17
+
18
+ export interface FormReferenceItem {
19
+ id: string;
20
+ name: string;
21
+ image?: string;
22
+ }
23
+
24
+ /** The selected reference, stored on the form as `{ [idField], [displayField] }`. */
25
+ export type FormReferenceValue = Record<string, unknown> | null;
26
+
27
+ // Data-agnostic like CellReferenceInput: the caller owns fetching, search, and
28
+ // pagination and passes the results in as props. This renderer only wraps them
29
+ // in a FormField with react-hook-form wiring. See remaining-issues.md #2.
30
+ export interface FormReferenceProps extends BaseInputProps<FormReferenceValue> {
31
+ /** Candidate items for the dropdown. */
32
+ items: FormReferenceItem[];
33
+ /** Referenced-item field the selected id is written to. */
34
+ idField: string;
35
+ /** Referenced-item field used as the display label. */
36
+ displayField: string;
37
+ /** Referenced-item field holding an avatar image, when the schema has one. */
38
+ imageField?: string;
39
+ /** Current search text. Empty ⇒ show the selected item's label. */
40
+ searchValue?: string;
41
+ onSearch: (query: string) => void;
42
+ onClearSearch?: () => void;
43
+ hasMore?: boolean;
44
+ loadMore?: () => void;
45
+ fixedFooter?: React.ReactNode;
46
+ /** When set, renders an "Open Collection" action at the bottom of the dropdown. */
47
+ onOpenCollection?: () => void;
48
+ placeholder?: string;
49
+ }
50
+
51
+ const _FormReference = (props: FormReferenceProps) => {
52
+ const {
53
+ field,
54
+ dataHook,
55
+ formControl,
56
+ data,
57
+ items,
58
+ idField,
59
+ displayField,
60
+ imageField,
61
+ searchValue,
62
+ onSearch,
63
+ onClearSearch,
64
+ hasMore,
65
+ loadMore,
66
+ fixedFooter,
67
+ onOpenCollection,
68
+ placeholder,
69
+ } = props;
70
+
71
+ const { translate: t } = useWixPatternsContainer();
72
+ const { t: tf } = useTranslations();
73
+ const acRef = useRef<React.ComponentRef<typeof AutoComplete> | null>(null);
74
+
75
+ const controller = useController({
76
+ name: field.id,
77
+ control: formControl,
78
+ defaultValue: data?.[field.id],
79
+ rules: {
80
+ validate: (value) => {
81
+ if (field.validation?.required && !value) {
82
+ return t('cairo.fieldValidation.requiredField');
83
+ }
84
+ return true;
85
+ },
86
+ },
87
+ });
88
+
89
+ const selectedValue = controller.field.value as FormReferenceValue;
90
+ const selectedDisplayValue = (selectedValue?.[displayField] as string) || '';
91
+ // A reference whose label is empty (the referenced item has no value in the
92
+ // display field) still has to look picked — an empty input reads as "nothing
93
+ // happened". Same fallback the options use.
94
+ const selectedLabel =
95
+ selectedDisplayValue ||
96
+ (selectedValue ? tf('patterns-fields.reference.untitled') : '');
97
+ const displayValue = searchValue || selectedLabel;
98
+ const selectedId = selectedValue?.[idField]
99
+ ? String(selectedValue[idField])
100
+ : undefined;
101
+
102
+ const selectedImage = useMemo(() => {
103
+ if (!selectedId) {
104
+ return undefined;
105
+ }
106
+ const found = items.find((item) => item.id === selectedId);
107
+ if (found?.image) {
108
+ return found.image;
109
+ }
110
+ return imageField
111
+ ? (selectedValue?.[imageField] as string | undefined)
112
+ : undefined;
113
+ }, [selectedValue, selectedId, imageField, items]);
114
+
115
+ const options = useMemo(
116
+ () =>
117
+ items.map((item) =>
118
+ listItemSelectBuilder({
119
+ id: item.id,
120
+ title: item.name || tf('patterns-fields.reference.untitled'),
121
+ prefix: <ReferenceAvatar name={item.name} image={item.image} />,
122
+ }),
123
+ ),
124
+ [items, tf],
125
+ );
126
+
127
+ const selectedPrefix =
128
+ selectedLabel && !searchValue ? (
129
+ <Input.Affix>
130
+ <ReferenceAvatar name={selectedLabel} image={selectedImage} />
131
+ </Input.Affix>
132
+ ) : undefined;
133
+
134
+ const handleSelect = useCallback(
135
+ (option: DropdownLayoutValueOption) => {
136
+ const item = items.find((i) => i.id === String(option.id));
137
+ controller.field.onChange({
138
+ [idField]: String(option.id),
139
+ [displayField]: item?.name || '',
140
+ });
141
+ onClearSearch?.();
142
+ },
143
+ [items, idField, displayField, controller.field, onClearSearch],
144
+ );
145
+
146
+ const handleChange = useCallback(
147
+ (e: React.ChangeEvent<HTMLInputElement>) => {
148
+ onSearch(e.target.value);
149
+ if (!e.target.value) {
150
+ controller.field.onChange(null);
151
+ }
152
+ },
153
+ [onSearch, controller.field],
154
+ );
155
+
156
+ const handleClear = useCallback(() => {
157
+ controller.field.onChange(null);
158
+ onClearSearch?.();
159
+ }, [controller.field, onClearSearch]);
160
+
161
+ const handleBlur = useCallback(() => {
162
+ onClearSearch?.();
163
+ }, [onClearSearch]);
164
+
165
+ const hideOptions = useCallback(() => acRef.current?.hideOptions?.(), []);
166
+ const combinedFooter = useReferenceDropdownFooter({
167
+ fixedFooter,
168
+ onOpenCollection,
169
+ hideOptions,
170
+ });
171
+
172
+ return (
173
+ <FormField
174
+ label={field.displayName}
175
+ required={field.validation?.required}
176
+ status={controller.fieldState.error ? 'error' : undefined}
177
+ statusMessage={controller.fieldState.error?.message}
178
+ dataHook={dataHook}
179
+ >
180
+ <AutoComplete
181
+ ref={acRef}
182
+ placeholder={
183
+ placeholder ?? tf('auto-patterns.fields.select_placeholder')
184
+ }
185
+ options={options}
186
+ value={displayValue}
187
+ // Without this the dropdown tracks its own picks only, so a value that
188
+ // came from the form (a loaded entity, or a re-opened dropdown) shows no
189
+ // selected row. `selected` on listItemSelectBuilder does not do this —
190
+ // the builder drops it.
191
+ selectedId={selectedId}
192
+ prefix={selectedPrefix}
193
+ onChange={handleChange}
194
+ onSelect={handleSelect}
195
+ onClear={handleClear}
196
+ onBlur={handleBlur}
197
+ clearButton={!field.validation?.required}
198
+ infiniteScroll={!!loadMore}
199
+ hasMore={hasMore}
200
+ loadMore={loadMore}
201
+ fixedFooter={combinedFooter}
202
+ // Hand the input to react-hook-form so shouldFocusError scrolls to +
203
+ // focuses this field when it blocks save.
204
+ inputRef={controller.field.ref}
205
+ dataHook={`reference-input-${field.id}`}
206
+ />
207
+ </FormField>
208
+ );
209
+ };
210
+
211
+ export const FormReference = observer(_FormReference);
@@ -1,4 +1,6 @@
1
1
  export * from './reference-avatar';
2
+ export * from './form-reference';
3
+ export * from './form-multi-reference';
2
4
  export * from './cell-reference-view';
3
5
  export * from './cell-reference-input';
4
6
  export * from './cell-multi-reference-view';
@@ -0,0 +1,51 @@
1
+ import React, { useMemo } from 'react';
2
+ import { Divider, ListItemAction } from '@wix/design-system';
3
+ import { useTranslations } from '../../hooks/use-translations';
4
+
5
+ export interface ReferenceDropdownFooterParams {
6
+ /** Caller-supplied footer content (loader / empty state / error state). */
7
+ fixedFooter?: React.ReactNode;
8
+ /** When set, an "Open Collection" action is appended below the footer. */
9
+ onOpenCollection?: () => void;
10
+ /** Closes the dropdown before navigating to the referenced collection. */
11
+ hideOptions?: () => void;
12
+ }
13
+
14
+ /**
15
+ * Footer for a reference dropdown: the caller's content plus an "Open
16
+ * Collection" action. Returns `undefined` when there is nothing to show, so the
17
+ * dropdown renders no footer at all.
18
+ */
19
+ export function useReferenceDropdownFooter({
20
+ fixedFooter,
21
+ onOpenCollection,
22
+ hideOptions,
23
+ }: ReferenceDropdownFooterParams): React.ReactNode | undefined {
24
+ const { t } = useTranslations();
25
+
26
+ return useMemo(() => {
27
+ if (!fixedFooter && !onOpenCollection) {
28
+ return undefined;
29
+ }
30
+ return (
31
+ // Pressing inside the footer must not blur the input — that would close
32
+ // the dropdown before the click lands.
33
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
34
+ <div onMouseDown={(e) => e.preventDefault()}>
35
+ {fixedFooter}
36
+ {onOpenCollection && <Divider />}
37
+ {onOpenCollection && (
38
+ <ListItemAction
39
+ title={t('patterns-fields.reference.open_collection')}
40
+ size="small"
41
+ onClick={() => {
42
+ hideOptions?.();
43
+ onOpenCollection();
44
+ }}
45
+ dataHook="reference-open-collection"
46
+ />
47
+ )}
48
+ </div>
49
+ );
50
+ }, [fixedFooter, onOpenCollection, hideOptions, t]);
51
+ }
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../../../stylable-esm-runtime.
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "richcontentdefaultvalueinput1686739801";
8
+ var _namespace_ = "richcontentdefaultvalueinput927131759";
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":"richcontentdefaultvalueinput1686739801__root","richContentEditorContainer":"richcontentdefaultvalueinput1686739801__richContentEditorContainer","editor":"richcontentdefaultvalueinput1686739801__editor"};
16
+ export var classes = {"root":"richcontentdefaultvalueinput927131759__root","richContentEditorContainer":"richcontentdefaultvalueinput927131759__richContentEditorContainer","editor":"richcontentdefaultvalueinput927131759__editor"};
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.
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "richcontentforminput885213562";
8
+ var _namespace_ = "richcontentforminput2279180603";
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":"richcontentforminput885213562__root","editor":"richcontentforminput885213562__editor"};
16
+ export var classes = {"root":"richcontentforminput2279180603__root","editor":"richcontentforminput2279180603__editor"};
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.
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "richcontentformreadonlyinput1160116662";
8
+ var _namespace_ = "richcontentformreadonlyinput4128499448";
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":"richcontentformreadonlyinput1160116662__root"};
16
+ export var classes = {"root":"richcontentformreadonlyinput4128499448__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-runti
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "fullscreenmodal3769450194";
8
+ var _namespace_ = "fullscreenmodal15708560";
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":"fullscreenmodal3769450194__root","modalContent":"fullscreenmodal3769450194__modalContent"};
16
+ export var classes = {"root":"fullscreenmodal15708560__root","modalContent":"fullscreenmodal15708560__modalContent"};
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-runti
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "publishloader2067404058";
8
+ var _namespace_ = "publishloader932699564";
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":"publishloader2067404058__root","publishLoader":"publishloader2067404058__publishLoader"};
16
+ export var classes = {"root":"publishloader932699564__root","publishLoader":"publishloader932699564__publishLoader"};
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-runti
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "togglefullscreenbutton3767453356";
8
+ var _namespace_ = "togglefullscreenbutton1277576667";
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":"togglefullscreenbutton3767453356__root"};
16
+ export var classes = {"root":"togglefullscreenbutton1277576667__root"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -5,7 +5,7 @@ import { IconButton, Tooltip } from '@wix/design-system';
5
5
  import {
6
6
  DismissSmall as DismissIcon,
7
7
  MaximizeSmall as MaximizeIcon,
8
- } from '@wix/wix-ui-icons-common';
8
+ } from '@wix/wix-ui-icons-common/lazy';
9
9
 
10
10
  import { useTranslations } from '../../../../../hooks';
11
11
  import { classes } from './toggle-fullscreen-button.st.css.js';
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../../../stylable-esm-runtime.
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "richcontenteditor2306322343";
8
+ var _namespace_ = "richcontenteditor3855532316";
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":"richcontenteditor2306322343__root","toolbarContainer":"richcontenteditor2306322343__toolbarContainer","footerToolbarContainer":"richcontenteditor2306322343__footerToolbarContainer","toolbarAndFullScreenButtonWrapper":"richcontenteditor2306322343__toolbarAndFullScreenButtonWrapper","editor":"richcontenteditor2306322343__editor","modalEditor":"richcontenteditor2306322343__modalEditor"};
16
+ export var classes = {"root":"richcontenteditor3855532316__root","toolbarContainer":"richcontenteditor3855532316__toolbarContainer","footerToolbarContainer":"richcontenteditor3855532316__footerToolbarContainer","toolbarAndFullScreenButtonWrapper":"richcontenteditor3855532316__toolbarAndFullScreenButtonWrapper","editor":"richcontenteditor3855532316__editor","modalEditor":"richcontenteditor3855532316__modalEditor"};
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.
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "richcontenttoolbar216750265";
8
+ var _namespace_ = "richcontenttoolbar3242725985";
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":"richcontenttoolbar216750265__root","toolbar":"richcontenttoolbar216750265__toolbar","toolbarButton":"richcontenttoolbar216750265__toolbarButton","separator":"richcontenttoolbar216750265__separator"};
16
+ export var classes = {"root":"richcontenttoolbar3242725985__root","toolbar":"richcontenttoolbar3242725985__toolbar","toolbarButton":"richcontenttoolbar3242725985__toolbarButton","separator":"richcontenttoolbar3242725985__separator"};
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.
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "richcontentviewer2914514418";
8
+ var _namespace_ = "richcontentviewer453758759";
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":"richcontentviewer2914514418__root","viewer":"richcontentviewer2914514418__viewer","modalViewer":"richcontentviewer2914514418__modalViewer"};
16
+ export var classes = {"root":"richcontentviewer453758759__root","viewer":"richcontentviewer453758759__viewer","modalViewer":"richcontentviewer453758759__modalViewer"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};