@wix/patterns-fields 1.72.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.
- package/dist/cjs/components/address/input/address-input.st.css.js +3 -3
- package/dist/cjs/components/address/input/address-input.st.css.js.map +1 -1
- package/dist/cjs/components/address/input/form-address-input.js +5 -16
- package/dist/cjs/components/address/input/form-address-input.js.map +1 -1
- package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js +3 -3
- package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js.map +1 -1
- package/dist/cjs/components/audio/audio-field/form-audio-field.js +14 -13
- package/dist/cjs/components/audio/audio-field/form-audio-field.js.map +1 -1
- package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js +4 -4
- package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
- package/dist/cjs/components/audio/audio-field/form-audio.js +6 -1
- package/dist/cjs/components/audio/audio-field/form-audio.js.map +1 -1
- package/dist/cjs/components/audio/audio-player/audio-player.st.css.js +2 -2
- package/dist/cjs/components/audio/audio-player/audio-player.st.css.js.map +1 -1
- package/dist/cjs/components/color-view/cell-color-view.st.css.js +3 -3
- package/dist/cjs/components/color-view/cell-color-view.st.css.js.map +1 -1
- package/dist/cjs/components/color-view/color-view.st.css.js +4 -4
- package/dist/cjs/components/color-view/color-view.st.css.js.map +1 -1
- package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js +3 -3
- package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js.map +1 -1
- package/dist/cjs/components/document/form-document-field.js +7 -6
- package/dist/cjs/components/document/form-document-field.js.map +1 -1
- package/dist/cjs/components/document/form-document-field.st.css.js +7 -7
- package/dist/cjs/components/document/form-document-field.st.css.js.map +1 -1
- package/dist/cjs/components/document/form-document.js +6 -1
- package/dist/cjs/components/document/form-document.js.map +1 -1
- package/dist/cjs/components/exclamation/exclamation.st.css.js +5 -5
- package/dist/cjs/components/exclamation/exclamation.st.css.js.map +1 -1
- package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js +5 -5
- package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
- package/dist/cjs/components/image/form-image-input.js +6 -1
- package/dist/cjs/components/image/form-image-input.js.map +1 -1
- package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js +3 -3
- package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js.map +1 -1
- package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js +2 -2
- package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js.map +1 -1
- package/dist/cjs/components/media-control/paste-url-button.st.css.js +4 -4
- package/dist/cjs/components/media-control/paste-url-button.st.css.js.map +1 -1
- package/dist/cjs/components/media-gallery/form-media-gallery-field.js +24 -21
- package/dist/cjs/components/media-gallery/form-media-gallery-field.js.map +1 -1
- package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js +10 -10
- package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js.map +1 -1
- package/dist/cjs/components/media-gallery/form-media-gallery.js +6 -1
- package/dist/cjs/components/media-gallery/form-media-gallery.js.map +1 -1
- package/dist/cjs/components/media-image/media-image.st.css.js +4 -4
- package/dist/cjs/components/media-image/media-image.st.css.js.map +1 -1
- package/dist/cjs/components/media-image/overlays/overlay.st.css.js +3 -3
- package/dist/cjs/components/media-image/overlays/overlay.st.css.js.map +1 -1
- package/dist/cjs/components/media-loader/media-loader.st.css.js +3 -3
- package/dist/cjs/components/media-loader/media-loader.st.css.js.map +1 -1
- package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
- package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js.map +1 -1
- package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js +3 -3
- package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
- package/dist/cjs/components/multi-document/multi-document-input/form-multi-document-field.js +7 -6
- package/dist/cjs/components/multi-document/multi-document-input/form-multi-document-field.js.map +1 -1
- package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.js +6 -1
- package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.js.map +1 -1
- package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js +5 -5
- package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
- package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js +2 -2
- package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js.map +1 -1
- package/dist/cjs/components/reference/cell-reference-input.st.css.js +3 -3
- package/dist/cjs/components/reference/cell-reference-input.st.css.js.map +1 -1
- package/dist/cjs/components/rich-content/form-rich-content.js +20 -5
- package/dist/cjs/components/rich-content/form-rich-content.js.map +1 -1
- package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +4 -4
- package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
- package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +3 -3
- package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
- package/dist/cjs/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
- 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
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +3 -3
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js.map +1 -1
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +3 -3
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js.map +1 -1
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +7 -7
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js.map +1 -1
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +5 -5
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js.map +1 -1
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +4 -4
- package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
- package/dist/cjs/components/rich-text/form-rich-text.js +18 -5
- package/dist/cjs/components/rich-text/form-rich-text.js.map +1 -1
- package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +18 -18
- package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js.map +1 -1
- package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +4 -4
- package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js.map +1 -1
- package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +18 -18
- package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js.map +1 -1
- package/dist/cjs/components/text/text-view.st.css.js +3 -3
- package/dist/cjs/components/text/text-view.st.css.js.map +1 -1
- package/dist/cjs/hooks/index.js +12 -0
- package/dist/cjs/hooks/index.js.map +1 -1
- package/dist/cjs/hooks/use-merged-ref.js +27 -0
- package/dist/cjs/hooks/use-merged-ref.js.map +1 -0
- package/dist/cjs/hooks/use-scroll-to-error-ref.js +34 -0
- package/dist/cjs/hooks/use-scroll-to-error-ref.js.map +1 -0
- package/dist/cjs/styles.global.css +1 -1
- package/dist/esm/components/address/input/address-input.st.css.js +2 -2
- package/dist/esm/components/address/input/address-input.st.css.js.map +1 -1
- package/dist/esm/components/address/input/form-address-input.js +4 -15
- package/dist/esm/components/address/input/form-address-input.js.map +1 -1
- package/dist/esm/components/audio/actions/actions-menu/actions-menu.st.css.js +2 -2
- package/dist/esm/components/audio/actions/actions-menu/actions-menu.st.css.js.map +1 -1
- package/dist/esm/components/audio/audio-field/form-audio-field.js +4 -4
- package/dist/esm/components/audio/audio-field/form-audio-field.js.map +1 -1
- package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js +2 -2
- package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
- package/dist/esm/components/audio/audio-field/form-audio.js +9 -1
- package/dist/esm/components/audio/audio-field/form-audio.js.map +1 -1
- package/dist/esm/components/audio/audio-player/audio-player.st.css.js +2 -2
- package/dist/esm/components/color-view/cell-color-view.st.css.js +2 -2
- package/dist/esm/components/color-view/color-view.st.css.js +2 -2
- package/dist/esm/components/delete-dialog/delete-dialog.st.css.js +2 -2
- package/dist/esm/components/delete-dialog/delete-dialog.st.css.js.map +1 -1
- package/dist/esm/components/document/form-document-field.js +4 -4
- package/dist/esm/components/document/form-document-field.js.map +1 -1
- package/dist/esm/components/document/form-document-field.st.css.js +2 -2
- package/dist/esm/components/document/form-document-field.st.css.js.map +1 -1
- package/dist/esm/components/document/form-document.js +9 -1
- package/dist/esm/components/document/form-document.js.map +1 -1
- package/dist/esm/components/exclamation/exclamation.st.css.js +2 -2
- package/dist/esm/components/highlighted-text/highlighted-text.st.css.js +3 -3
- package/dist/esm/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
- package/dist/esm/components/image/form-image-input.js +9 -1
- package/dist/esm/components/image/form-image-input.js.map +1 -1
- package/dist/esm/components/image/thumbnail-replace-overlay.st.css.js +2 -2
- package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js +2 -2
- package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js.map +1 -1
- package/dist/esm/components/media-control/paste-url-button.st.css.js +2 -2
- package/dist/esm/components/media-control/paste-url-button.st.css.js.map +1 -1
- package/dist/esm/components/media-gallery/form-media-gallery-field.js +7 -5
- package/dist/esm/components/media-gallery/form-media-gallery-field.js.map +1 -1
- package/dist/esm/components/media-gallery/form-media-gallery-field.st.css.js +2 -2
- package/dist/esm/components/media-gallery/form-media-gallery.js +9 -1
- package/dist/esm/components/media-gallery/form-media-gallery.js.map +1 -1
- package/dist/esm/components/media-image/media-image.st.css.js +3 -3
- package/dist/esm/components/media-image/overlays/overlay.st.css.js +2 -2
- package/dist/esm/components/media-image/overlays/overlay.st.css.js.map +1 -1
- package/dist/esm/components/media-loader/media-loader.st.css.js +2 -2
- package/dist/esm/components/media-loader/media-loader.st.css.js.map +1 -1
- package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
- package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js +2 -2
- package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
- package/dist/esm/components/multi-document/multi-document-input/form-multi-document-field.js +4 -4
- package/dist/esm/components/multi-document/multi-document-input/form-multi-document-field.js.map +1 -1
- package/dist/esm/components/multi-document/multi-document-input/form-multi-document.js +9 -1
- package/dist/esm/components/multi-document/multi-document-input/form-multi-document.js.map +1 -1
- package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js +2 -2
- package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
- package/dist/esm/components/reference/cell-multi-reference-input.st.css.js +2 -2
- package/dist/esm/components/reference/cell-reference-input.st.css.js +2 -2
- package/dist/esm/components/rich-content/form-rich-content.js +8 -3
- package/dist/esm/components/rich-content/form-rich-content.js.map +1 -1
- package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
- package/dist/esm/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js.map +1 -1
- package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +2 -2
- package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
- package/dist/esm/components/rich-text/form-rich-text.js +7 -3
- package/dist/esm/components/rich-text/form-rich-text.js.map +1 -1
- package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +2 -2
- package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +2 -2
- package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +2 -2
- package/dist/esm/components/text/text-view.st.css.js +2 -2
- package/dist/esm/components/text/text-view.st.css.js.map +1 -1
- package/dist/esm/hooks/index.js +2 -0
- package/dist/esm/hooks/index.js.map +1 -1
- package/dist/esm/hooks/use-merged-ref.js +23 -0
- package/dist/esm/hooks/use-merged-ref.js.map +1 -0
- package/dist/esm/hooks/use-scroll-to-error-ref.js +26 -0
- package/dist/esm/hooks/use-scroll-to-error-ref.js.map +1 -0
- package/dist/esm/styles.global.css +1 -1
- package/dist/types/components/address/input/address-input.st.css.d.ts.map +1 -1
- package/dist/types/components/address/input/form-address-input.d.ts.map +1 -1
- package/dist/types/components/audio/actions/actions-menu/actions-menu.st.css.d.ts.map +1 -1
- package/dist/types/components/audio/audio-field/form-audio-field.d.ts.map +1 -1
- package/dist/types/components/audio/audio-field/form-audio-field.st.css.d.ts.map +1 -1
- package/dist/types/components/audio/audio-field/form-audio.d.ts.map +1 -1
- package/dist/types/components/delete-dialog/delete-dialog.st.css.d.ts.map +1 -1
- package/dist/types/components/document/form-document-field.d.ts.map +1 -1
- package/dist/types/components/document/form-document-field.st.css.d.ts.map +1 -1
- package/dist/types/components/document/form-document.d.ts.map +1 -1
- package/dist/types/components/highlighted-text/highlighted-text.st.css.d.ts.map +1 -1
- package/dist/types/components/image/form-image-input.d.ts.map +1 -1
- package/dist/types/components/media-control/cell-media-edit-shell.st.css.d.ts.map +1 -1
- package/dist/types/components/media-control/paste-url-button.st.css.d.ts.map +1 -1
- package/dist/types/components/media-gallery/form-media-gallery-field.d.ts +3 -0
- package/dist/types/components/media-gallery/form-media-gallery-field.d.ts.map +1 -1
- package/dist/types/components/media-gallery/form-media-gallery.d.ts.map +1 -1
- package/dist/types/components/media-image/overlays/overlay.st.css.d.ts.map +1 -1
- package/dist/types/components/media-loader/media-loader.st.css.d.ts.map +1 -1
- package/dist/types/components/multi-document/cell-multi-document-edit.st.css.d.ts.map +1 -1
- package/dist/types/components/multi-document/multi-document-input/form-multi-document-field.d.ts.map +1 -1
- package/dist/types/components/multi-document/multi-document-input/form-multi-document.d.ts.map +1 -1
- package/dist/types/components/multi-document/multi-document-input/form-multi-document.st.css.d.ts.map +1 -1
- package/dist/types/components/rich-content/form-rich-content.d.ts.map +1 -1
- package/dist/types/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.d.ts.map +1 -1
- package/dist/types/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.d.ts.map +1 -1
- package/dist/types/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.d.ts.map +1 -1
- package/dist/types/components/rich-text/form-rich-text.d.ts.map +1 -1
- package/dist/types/components/text/text-view.st.css.d.ts.map +1 -1
- package/dist/types/hooks/index.d.ts +2 -0
- package/dist/types/hooks/index.d.ts.map +1 -1
- package/dist/types/hooks/use-merged-ref.d.ts +11 -0
- package/dist/types/hooks/use-merged-ref.d.ts.map +1 -0
- package/dist/types/hooks/use-scroll-to-error-ref.d.ts +14 -0
- package/dist/types/hooks/use-scroll-to-error-ref.d.ts.map +1 -0
- package/package.json +5 -5
- package/src/__tests__/components/audio/form-audio.spec.tsx +22 -0
- package/src/__tests__/components/document/form-document.spec.tsx +22 -0
- package/src/__tests__/components/image/form-image-input.spec.tsx +22 -0
- package/src/__tests__/components/media-gallery/form-media-gallery.spec.tsx +21 -0
- package/src/__tests__/components/multi-document/form-multi-document.spec.tsx +21 -0
- package/src/__tests__/components/rich-content/form-rich-content.spec.tsx +22 -0
- package/src/__tests__/components/rich-text/form-rich-text.spec.tsx +18 -0
- package/src/components/address/input/address-input.st.css.ts +2 -2
- package/src/components/address/input/form-address-input.tsx +5 -20
- package/src/components/audio/actions/actions-menu/actions-menu.st.css.ts +2 -2
- package/src/components/audio/audio-field/form-audio-field.st.css.ts +2 -2
- package/src/components/audio/audio-field/form-audio-field.tsx +4 -3
- package/src/components/audio/audio-field/form-audio.tsx +4 -0
- package/src/components/audio/audio-player/audio-player.st.css.ts +2 -2
- package/src/components/color-view/cell-color-view.st.css.ts +2 -2
- package/src/components/color-view/color-view.st.css.ts +2 -2
- package/src/components/delete-dialog/delete-dialog.st.css.ts +2 -2
- package/src/components/document/form-document-field.st.css.ts +2 -2
- package/src/components/document/form-document-field.tsx +4 -3
- package/src/components/document/form-document.tsx +4 -0
- package/src/components/exclamation/exclamation.st.css.ts +2 -2
- package/src/components/highlighted-text/highlighted-text.st.css.ts +3 -3
- package/src/components/image/form-image-input.tsx +4 -0
- package/src/components/image/thumbnail-replace-overlay.st.css.ts +2 -2
- package/src/components/media-control/cell-media-edit-shell.st.css.ts +2 -2
- package/src/components/media-control/paste-url-button.st.css.ts +2 -2
- package/src/components/media-gallery/form-media-gallery-field.st.css.ts +2 -2
- package/src/components/media-gallery/form-media-gallery-field.tsx +9 -4
- package/src/components/media-gallery/form-media-gallery.tsx +4 -0
- package/src/components/media-image/media-image.st.css.ts +3 -3
- package/src/components/media-image/overlays/overlay.st.css.ts +2 -2
- package/src/components/media-loader/media-loader.st.css.ts +2 -2
- package/src/components/media-tag/web-media-tag/media-tag.st.css.ts +2 -2
- package/src/components/multi-document/cell-multi-document-edit.st.css.ts +2 -2
- package/src/components/multi-document/multi-document-input/form-multi-document-field.tsx +4 -3
- package/src/components/multi-document/multi-document-input/form-multi-document.st.css.ts +2 -2
- package/src/components/multi-document/multi-document-input/form-multi-document.tsx +4 -0
- package/src/components/reference/cell-multi-reference-input.st.css.ts +2 -2
- package/src/components/reference/cell-reference-input.st.css.ts +2 -2
- package/src/components/rich-content/form-rich-content.tsx +24 -14
- package/src/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.ts +2 -2
- package/src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts +2 -2
- package/src/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.ts +2 -2
- package/src/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.ts +2 -2
- package/src/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.ts +2 -2
- package/src/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.ts +2 -2
- package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.ts +2 -2
- package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts +2 -2
- package/src/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.ts +2 -2
- package/src/components/rich-text/form-rich-text.tsx +18 -9
- package/src/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.ts +2 -2
- package/src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts +2 -2
- package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.ts +2 -2
- package/src/components/text/text-view.st.css.ts +2 -2
- package/src/hooks/index.ts +2 -0
- package/src/hooks/use-merged-ref.ts +30 -0
- package/src/hooks/use-scroll-to-error-ref.ts +34 -0
- package/src/styles.global.css +1 -1
|
@@ -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_ = "
|
|
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":"
|
|
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
|
|
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 =
|
|
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={
|
|
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_ = "
|
|
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":"
|
|
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_ = "
|
|
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":"
|
|
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 =
|
|
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={
|
|
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_ = "
|
|
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":"
|
|
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_ = "
|
|
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":"
|
|
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_ = "
|
|
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":"
|
|
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_ = "
|
|
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":"
|
|
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_ = "
|
|
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":"
|
|
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 =
|
|
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={
|
|
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_ = "
|
|
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":"
|
|
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_ = "
|
|
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":"
|
|
17
|
-
export var keyframes = {"highlighted":"
|
|
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 = {};
|
|
@@ -63,6 +63,10 @@ const _FormImageInput = (props: FormImageInputProps) => {
|
|
|
63
63
|
>
|
|
64
64
|
<Box width="100%" maxWidth={MEDIA_MAX_WIDTH}>
|
|
65
65
|
<ImageViewer
|
|
66
|
+
// ImageViewer keeps its focus node on whichever button is live, so
|
|
67
|
+
// one ref serves both the empty and filled states. Lets
|
|
68
|
+
// react-hook-form's shouldFocusError reach this field.
|
|
69
|
+
ref={controller.field.ref}
|
|
66
70
|
imageUrl={imageUrl}
|
|
67
71
|
dataHook={`image-${field.id}`}
|
|
68
72
|
onAddImage={isMobile ? undefined : () => openMedia()}
|
|
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var _namespace_ = "
|
|
8
|
+
var _namespace_ = "thumbnailreplaceoverlay1250295104";
|
|
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":"
|
|
16
|
+
export var classes = {"root":"thumbnailreplaceoverlay1250295104__root","icon":"thumbnailreplaceoverlay1250295104__icon"};
|
|
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_ = "
|
|
8
|
+
var _namespace_ = "cellmediaeditshell222630220";
|
|
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":"
|
|
16
|
+
export var classes = {"root":"cellmediaeditshell222630220__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_ = "
|
|
8
|
+
var _namespace_ = "pasteurlbutton285657028";
|
|
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":"
|
|
16
|
+
export var classes = {"root":"pasteurlbutton285657028__root","iconButtonTooltip":"pasteurlbutton285657028__iconButtonTooltip","iconButton":"pasteurlbutton285657028__iconButton"};
|
|
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_ = "
|
|
8
|
+
var _namespace_ = "formmediagalleryfield2943984590";
|
|
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":"
|
|
16
|
+
export var classes = {"root":"formmediagalleryfield2943984590__root","container":"formmediagalleryfield2943984590__container","viewBox":"formmediagalleryfield2943984590__viewBox","addItemWrapper":"formmediagalleryfield2943984590__addItemWrapper","addItem":"formmediagalleryfield2943984590__addItem","overlay":"formmediagalleryfield2943984590__overlay","image":"formmediagalleryfield2943984590__image","previewImage":"formmediagalleryfield2943984590__previewImage","previewVideo":"formmediagalleryfield2943984590__previewVideo"};
|
|
17
17
|
export var keyframes = {};
|
|
18
18
|
export var layers = {};
|
|
19
19
|
export var containers = {};
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
Maximize as MaximizeIcon,
|
|
15
15
|
} from '@wix/wix-ui-icons-common/lazy';
|
|
16
16
|
import type { WixCodeGalleryItem } from '../../auto-field-types';
|
|
17
|
-
import { useTranslations } from '../../hooks';
|
|
17
|
+
import { useMergedRef, useTranslations } from '../../hooks';
|
|
18
18
|
import { executeDownloading } from '../../utils/media-utils';
|
|
19
19
|
import { getMediaURL } from '../../auto-field-types';
|
|
20
20
|
import { files } from '@wix/media';
|
|
@@ -33,6 +33,8 @@ export interface FormMediaGalleryFieldProps {
|
|
|
33
33
|
invalid?: boolean;
|
|
34
34
|
autoFocus?: boolean;
|
|
35
35
|
dataHook?: string;
|
|
36
|
+
/** Caller's ref to the add button, filled alongside the internal one. */
|
|
37
|
+
inputRef?: React.Ref<AddItemActions>;
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
const mediaGalleryPreviewTextKeys = {
|
|
@@ -49,10 +51,11 @@ export const FormMediaGalleryField: React.FC<FormMediaGalleryFieldProps> = ({
|
|
|
49
51
|
invalid,
|
|
50
52
|
autoFocus,
|
|
51
53
|
dataHook,
|
|
54
|
+
inputRef: forwardedRef,
|
|
52
55
|
}) => {
|
|
53
56
|
const { t } = useTranslations();
|
|
54
57
|
const boxRef = useRef<HTMLDivElement>(null);
|
|
55
|
-
const inputRef =
|
|
58
|
+
const [inputRef, setInputRef] = useMergedRef<AddItemActions>(forwardedRef);
|
|
56
59
|
const [boxWidth, setBoxWidth] = useState(0);
|
|
57
60
|
const [hovered, setHovered] = useState(false);
|
|
58
61
|
const [isPreviewOpen, setIsPreviewOpen] = useState(false);
|
|
@@ -66,7 +69,9 @@ export const FormMediaGalleryField: React.FC<FormMediaGalleryFieldProps> = ({
|
|
|
66
69
|
}
|
|
67
70
|
boxRef.current?.focus();
|
|
68
71
|
inputRef.current?.focus();
|
|
69
|
-
|
|
72
|
+
// inputRef comes from useMergedRef and is stable, but eslint only knows
|
|
73
|
+
// that about a bare useRef.
|
|
74
|
+
}, [autoFocus, inputRef]);
|
|
70
75
|
|
|
71
76
|
// Responsive width tracking
|
|
72
77
|
useEffect(() => {
|
|
@@ -137,7 +142,7 @@ export const FormMediaGalleryField: React.FC<FormMediaGalleryFieldProps> = ({
|
|
|
137
142
|
{!hasValue ? (
|
|
138
143
|
<div className={classes.addItemWrapper}>
|
|
139
144
|
<AddItem
|
|
140
|
-
ref={
|
|
145
|
+
ref={setInputRef}
|
|
141
146
|
className={style(classes.addItem, { error: invalid })}
|
|
142
147
|
size="tiny"
|
|
143
148
|
theme="dashes"
|
|
@@ -40,6 +40,10 @@ const _FormMediaGallery = (props: FormMediaGalleryProps) => {
|
|
|
40
40
|
dataHook={dataHook}
|
|
41
41
|
>
|
|
42
42
|
<FormMediaGalleryField
|
|
43
|
+
// Hand the add button to react-hook-form so
|
|
44
|
+
// shouldFocusError scrolls to + focuses this field when it
|
|
45
|
+
// blocks save.
|
|
46
|
+
inputRef={controller.field.ref}
|
|
43
47
|
data={controller.field.value}
|
|
44
48
|
onChange={(value) => controller.field.onChange(value)}
|
|
45
49
|
onClear={() => controller.field.onChange([])}
|
|
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var _namespace_ = "
|
|
8
|
+
var _namespace_ = "mediaimage1081502549";
|
|
9
9
|
var _style_ = classesRuntime.bind(null, _namespace_);
|
|
10
10
|
|
|
11
11
|
export var cssStates = statesRuntime.bind(null, _namespace_);
|
|
@@ -13,12 +13,12 @@ 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":"
|
|
16
|
+
export var classes = {"root":"mediaimage1081502549__root"};
|
|
17
17
|
export var keyframes = {};
|
|
18
18
|
export var layers = {};
|
|
19
19
|
export var containers = {};
|
|
20
20
|
export var stVars = {};
|
|
21
|
-
export var vars = {"wds-color-red-200":"--wds-color-red-200","wsr-color-R20":"--wsr-color-R20","wds-color-black-550":"--wds-color-black-550","wsr-color-D55":"--wsr-color-D55","from":"--
|
|
21
|
+
export var vars = {"wds-color-red-200":"--wds-color-red-200","wsr-color-R20":"--wsr-color-R20","wds-color-black-550":"--wds-color-black-550","wsr-color-D55":"--wsr-color-D55","from":"--mediaimage1081502549-from","to":"--mediaimage1081502549-to"};
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../../stylable-esm-runtime.js"
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var _namespace_ = "
|
|
8
|
+
var _namespace_ = "overlay1338093693";
|
|
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":"
|
|
16
|
+
export var classes = {"root":"overlay1338093693__root","iconOverlay":"overlay1338093693__iconOverlay"};
|
|
17
17
|
export var keyframes = {};
|
|
18
18
|
export var layers = {};
|
|
19
19
|
export var containers = {};
|