@wix/patterns-fields 1.29.0 → 1.30.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 (209) hide show
  1. package/dist/cjs/assets/locale/messages_en.json +9 -9
  2. package/dist/cjs/components/address/input/address-input.st.css.js +3 -3
  3. package/dist/cjs/components/address/input/address-input.st.css.js.map +1 -1
  4. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js +3 -3
  5. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js.map +1 -1
  6. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js +4 -4
  7. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
  8. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js +2 -2
  9. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js.map +1 -1
  10. package/dist/cjs/components/color-view/color-view.st.css.js +4 -4
  11. package/dist/cjs/components/color-view/color-view.st.css.js.map +1 -1
  12. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js +3 -3
  13. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js.map +1 -1
  14. package/dist/cjs/components/document/cell-document-edit.js +302 -0
  15. package/dist/cjs/components/document/cell-document-edit.js.map +1 -0
  16. package/dist/cjs/components/document/cell-document-view.js +56 -0
  17. package/dist/cjs/components/document/cell-document-view.js.map +1 -0
  18. package/dist/cjs/components/document/form-document-field.st.css.js +7 -7
  19. package/dist/cjs/components/document/form-document-field.st.css.js.map +1 -1
  20. package/dist/cjs/components/document/index.js +12 -0
  21. package/dist/cjs/components/document/index.js.map +1 -1
  22. package/dist/cjs/components/document/utils.js +1 -0
  23. package/dist/cjs/components/document/utils.js.map +1 -1
  24. package/dist/cjs/components/exclamation/exclamation.st.css.js +5 -5
  25. package/dist/cjs/components/exclamation/exclamation.st.css.js.map +1 -1
  26. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js +5 -5
  27. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
  28. package/dist/cjs/components/image/cell-image-edit.js +68 -168
  29. package/dist/cjs/components/image/cell-image-edit.js.map +1 -1
  30. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js +3 -3
  31. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js.map +1 -1
  32. package/dist/cjs/components/media-control/cell-media-edit-shell.js +101 -0
  33. package/dist/cjs/components/media-control/cell-media-edit-shell.js.map +1 -0
  34. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css +4 -0
  35. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js +22 -0
  36. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js.map +1 -0
  37. package/dist/cjs/components/media-control/index.js +12 -0
  38. package/dist/cjs/components/media-control/index.js.map +1 -1
  39. package/dist/cjs/components/media-control/paste-url-button.st.css.js +4 -4
  40. package/dist/cjs/components/media-control/paste-url-button.st.css.js.map +1 -1
  41. package/dist/cjs/components/media-control/use-cell-media-edit.js +93 -0
  42. package/dist/cjs/components/media-control/use-cell-media-edit.js.map +1 -0
  43. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js +10 -10
  44. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js.map +1 -1
  45. package/dist/cjs/components/media-image/media-image.st.css.js +4 -4
  46. package/dist/cjs/components/media-image/media-image.st.css.js.map +1 -1
  47. package/dist/cjs/components/media-image/overlays/overlay.st.css.js +4 -4
  48. package/dist/cjs/components/media-image/overlays/overlay.st.css.js.map +1 -1
  49. package/dist/cjs/components/media-loader/media-loader.st.css.js +3 -3
  50. package/dist/cjs/components/media-loader/media-loader.st.css.js.map +1 -1
  51. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  52. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js.map +1 -1
  53. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js +5 -5
  54. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  55. package/dist/cjs/components/reference/cell-reference-input.st.css.js +3 -3
  56. package/dist/cjs/components/reference/cell-reference-input.st.css.js.map +1 -1
  57. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +6 -6
  58. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
  59. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +5 -5
  60. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
  61. package/dist/cjs/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  62. 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
  63. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +3 -3
  64. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js.map +1 -1
  65. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +3 -3
  66. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
  67. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  68. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js.map +1 -1
  69. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +8 -8
  70. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js.map +1 -1
  71. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +4 -4
  72. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js.map +1 -1
  73. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +4 -4
  74. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
  75. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +20 -20
  76. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js.map +1 -1
  77. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +4 -4
  78. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js.map +1 -1
  79. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +20 -20
  80. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js.map +1 -1
  81. package/dist/cjs/components/text/text-view.st.css.js +3 -3
  82. package/dist/cjs/components/text/text-view.st.css.js.map +1 -1
  83. package/dist/cjs/styles.global.css +1 -1
  84. package/dist/esm/assets/locale/messages_en.json +9 -9
  85. package/dist/esm/components/address/input/address-input.st.css.js +2 -2
  86. package/dist/esm/components/audio/actions/actions-menu/actions-menu.st.css.js +2 -2
  87. package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js +2 -2
  88. package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
  89. package/dist/esm/components/audio/audio-player/audio-player.st.css.js +2 -2
  90. package/dist/esm/components/color-view/color-view.st.css.js +2 -2
  91. package/dist/esm/components/color-view/color-view.st.css.js.map +1 -1
  92. package/dist/esm/components/delete-dialog/delete-dialog.st.css.js +2 -2
  93. package/dist/esm/components/document/cell-document-edit.js +60 -0
  94. package/dist/esm/components/document/cell-document-edit.js.map +1 -0
  95. package/dist/esm/components/document/cell-document-view.js +13 -0
  96. package/dist/esm/components/document/cell-document-view.js.map +1 -0
  97. package/dist/esm/components/document/form-document-field.st.css.js +2 -2
  98. package/dist/esm/components/document/index.js +2 -0
  99. package/dist/esm/components/document/index.js.map +1 -1
  100. package/dist/esm/components/document/utils.js +1 -0
  101. package/dist/esm/components/document/utils.js.map +1 -1
  102. package/dist/esm/components/exclamation/exclamation.st.css.js +2 -2
  103. package/dist/esm/components/highlighted-text/highlighted-text.st.css.js +3 -3
  104. package/dist/esm/components/image/cell-image-edit.js +46 -85
  105. package/dist/esm/components/image/cell-image-edit.js.map +1 -1
  106. package/dist/esm/components/image/thumbnail-replace-overlay.st.css.js +2 -2
  107. package/dist/esm/components/media-control/cell-media-edit-shell.js +23 -0
  108. package/dist/esm/components/media-control/cell-media-edit-shell.js.map +1 -0
  109. package/dist/esm/components/media-control/cell-media-edit-shell.st.css +4 -0
  110. package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js +15 -0
  111. package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js.map +1 -0
  112. package/dist/esm/components/media-control/index.js +2 -0
  113. package/dist/esm/components/media-control/index.js.map +1 -1
  114. package/dist/esm/components/media-control/paste-url-button.st.css.js +2 -2
  115. package/dist/esm/components/media-control/use-cell-media-edit.js +63 -0
  116. package/dist/esm/components/media-control/use-cell-media-edit.js.map +1 -0
  117. package/dist/esm/components/media-gallery/form-media-gallery-field.st.css.js +2 -2
  118. package/dist/esm/components/media-image/media-image.st.css.js +3 -3
  119. package/dist/esm/components/media-image/overlays/overlay.st.css.js +3 -3
  120. package/dist/esm/components/media-loader/media-loader.st.css.js +2 -2
  121. package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  122. package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js.map +1 -1
  123. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js +2 -2
  124. package/dist/esm/components/reference/cell-reference-input.st.css.js +2 -2
  125. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +3 -3
  126. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +3 -3
  127. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
  128. package/dist/esm/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  129. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +2 -2
  130. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +2 -2
  131. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  132. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +3 -3
  133. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +2 -2
  134. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js.map +1 -1
  135. package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +2 -2
  136. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +3 -3
  137. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +2 -2
  138. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +3 -3
  139. package/dist/esm/components/text/text-view.st.css.js +2 -2
  140. package/dist/esm/styles.global.css +1 -1
  141. package/dist/types/components/audio/audio-field/form-audio-field.st.css.d.ts.map +1 -1
  142. package/dist/types/components/color-view/color-view.st.css.d.ts.map +1 -1
  143. package/dist/types/components/document/cell-document-edit.d.ts +23 -0
  144. package/dist/types/components/document/cell-document-edit.d.ts.map +1 -0
  145. package/dist/types/components/document/cell-document-view.d.ts +12 -0
  146. package/dist/types/components/document/cell-document-view.d.ts.map +1 -0
  147. package/dist/types/components/document/index.d.ts +2 -0
  148. package/dist/types/components/document/index.d.ts.map +1 -1
  149. package/dist/types/components/document/utils.d.ts.map +1 -1
  150. package/dist/types/components/image/cell-image-edit.d.ts +1 -1
  151. package/dist/types/components/image/cell-image-edit.d.ts.map +1 -1
  152. package/dist/types/components/media-control/cell-media-edit-shell.d.ts +29 -0
  153. package/dist/types/components/media-control/cell-media-edit-shell.d.ts.map +1 -0
  154. package/dist/types/components/media-control/cell-media-edit-shell.st.css.d.ts +13 -0
  155. package/dist/types/components/media-control/cell-media-edit-shell.st.css.d.ts.map +1 -0
  156. package/dist/types/components/media-control/index.d.ts +2 -0
  157. package/dist/types/components/media-control/index.d.ts.map +1 -1
  158. package/dist/types/components/media-control/use-cell-media-edit.d.ts +54 -0
  159. package/dist/types/components/media-control/use-cell-media-edit.d.ts.map +1 -0
  160. package/dist/types/components/media-tag/web-media-tag/media-tag.st.css.d.ts.map +1 -1
  161. package/dist/types/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.d.ts.map +1 -1
  162. package/dist/types/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.d.ts.map +1 -1
  163. package/package.json +2 -2
  164. package/src/__tests__/components/document/cell-document-edit.spec.tsx +101 -0
  165. package/src/__tests__/components/document/cell-document-view.spec.tsx +39 -0
  166. package/src/__tests__/components/document/utils.spec.ts +28 -0
  167. package/src/assets/locale/messages_en.json +9 -9
  168. package/src/components/address/input/address-input.st.css.ts +2 -2
  169. package/src/components/audio/actions/actions-menu/actions-menu.st.css.ts +2 -2
  170. package/src/components/audio/audio-field/form-audio-field.st.css.ts +2 -2
  171. package/src/components/audio/audio-player/audio-player.st.css.ts +2 -2
  172. package/src/components/color-view/color-view.st.css.ts +2 -2
  173. package/src/components/delete-dialog/delete-dialog.st.css.ts +2 -2
  174. package/src/components/document/cell-document-edit.tsx +196 -0
  175. package/src/components/document/cell-document-view.tsx +49 -0
  176. package/src/components/document/form-document-field.st.css.ts +2 -2
  177. package/src/components/document/index.ts +2 -0
  178. package/src/components/document/utils.ts +1 -0
  179. package/src/components/exclamation/exclamation.st.css.ts +2 -2
  180. package/src/components/highlighted-text/highlighted-text.st.css.ts +3 -3
  181. package/src/components/image/cell-image-edit.tsx +112 -196
  182. package/src/components/image/thumbnail-replace-overlay.st.css.ts +2 -2
  183. package/src/components/media-control/cell-media-edit-shell.st.css +4 -0
  184. package/src/components/media-control/cell-media-edit-shell.st.css.ts +25 -0
  185. package/src/components/media-control/cell-media-edit-shell.tsx +101 -0
  186. package/src/components/media-control/index.ts +2 -0
  187. package/src/components/media-control/paste-url-button.st.css.ts +2 -2
  188. package/src/components/media-control/use-cell-media-edit.ts +134 -0
  189. package/src/components/media-gallery/form-media-gallery-field.st.css.ts +2 -2
  190. package/src/components/media-image/media-image.st.css.ts +3 -3
  191. package/src/components/media-image/overlays/overlay.st.css.ts +3 -3
  192. package/src/components/media-loader/media-loader.st.css.ts +2 -2
  193. package/src/components/media-tag/web-media-tag/media-tag.st.css.ts +2 -2
  194. package/src/components/multi-document/multi-document-input/form-multi-document.st.css.ts +2 -2
  195. package/src/components/reference/cell-reference-input.st.css.ts +2 -2
  196. package/src/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.ts +3 -3
  197. package/src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts +3 -3
  198. package/src/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.ts +2 -2
  199. package/src/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.ts +2 -2
  200. package/src/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.ts +2 -2
  201. package/src/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.ts +2 -2
  202. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.ts +3 -3
  203. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts +2 -2
  204. package/src/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.ts +2 -2
  205. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.ts +3 -3
  206. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts +2 -2
  207. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.ts +3 -3
  208. package/src/components/text/text-view.st.css.ts +2 -2
  209. package/src/styles.global.css +1 -1
@@ -0,0 +1,54 @@
1
+ import React from 'react';
2
+ import { MEDIA_TYPES } from '../../utils/media-utils';
3
+ export interface UseCellMediaEditParams {
4
+ mediaType: MEDIA_TYPES;
5
+ value: string | null;
6
+ onChange: (value: string | null) => void;
7
+ onCommit: () => void;
8
+ onCancel?: () => void;
9
+ /**
10
+ * Called before opening external UI (media manager / paste-URL form) so the
11
+ * table can set isEditing=true and protect cell focus while the modal is open.
12
+ */
13
+ onStartEdit?: () => void;
14
+ inputRef?: React.MutableRefObject<{
15
+ focus: () => void;
16
+ } | null | undefined>;
17
+ }
18
+ export interface UseCellMediaEditResult {
19
+ containerRef: React.MutableRefObject<HTMLDivElement | null>;
20
+ loading: boolean;
21
+ callMedia: () => Promise<boolean>;
22
+ downloadMedia: (uri: string) => void;
23
+ /** Opens the media manager. If the user cancels, propagates onCancel. */
24
+ handleCallMedia: () => Promise<void>;
25
+ /** Clears the cell and commits. */
26
+ handleDelete: () => void;
27
+ /**
28
+ * Curried opener: pass the modal's `title` / preset `value`, get back the
29
+ * click handler. Also signals onStartEdit so the cell keeps focus while the
30
+ * modal is up.
31
+ */
32
+ startEditAndOpenPasteUrl: (params: {
33
+ title: string;
34
+ value?: string;
35
+ }) => () => void;
36
+ pasteUrlForm: {
37
+ isOpen: boolean;
38
+ title: string;
39
+ onSave: (value: string) => void;
40
+ /** onClose composed with onCancel — call from PasteURLForm.closeModal. */
41
+ handleClose: () => void;
42
+ };
43
+ handleContainerFocus: () => void;
44
+ handleContainerBlur: (e: React.FocusEvent) => void;
45
+ }
46
+ /**
47
+ * Shared state + handlers for single-value media cell edit components
48
+ * (image / document / audio / video / …). Each consumer renders its own
49
+ * primary/secondary content; this hook owns the wiring to useMediaControl,
50
+ * usePasteURLForm, useCellEditKeyboard, and the standard onCommit/onCancel
51
+ * dance.
52
+ */
53
+ export declare function useCellMediaEdit({ mediaType, value, onChange, onCommit, onCancel, onStartEdit, inputRef, }: UseCellMediaEditParams): UseCellMediaEditResult;
54
+ //# sourceMappingURL=use-cell-media-edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-cell-media-edit.d.ts","sourceRoot":"","sources":["../../../../src/components/media-control/use-cell-media-edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,WAAW,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC;QAAE,KAAK,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,mCAAmC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;;;OAIG;IACH,wBAAwB,EAAE,CAAC,MAAM,EAAE;QACjC,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAK,MAAM,IAAI,CAAC;IACjB,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,0EAA0E;QAC1E,WAAW,EAAE,MAAM,IAAI,CAAC;KACzB,CAAC;IACF,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,mBAAmB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CACpD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,GACT,EAAE,sBAAsB,GAAG,sBAAsB,CAkEjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"media-tag.st.css.d.ts","sourceRoot":"","sources":["../../../../../src/components/media-tag/web-media-tag/media-tag.st.css.ts"],"names":[],"mappings":"AAUA,eAAO,IAAI,SAAS,+BAAwC,CAAC;AAC7D,eAAO,IAAI,KAAK,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AACnE,eAAO,IAAI,EAAE,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AAEhE,eAAO,IAAI,SAAS,QAAc,CAAC;AACnC,eAAO,IAAI,OAAO;;CAAqC,CAAC;AACxD,eAAO,IAAI,SAAS,IAAK,CAAC;AAC1B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,UAAU,IAAK,CAAC;AAC3B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,IAAI;;;CAAkF,CAAC"}
1
+ {"version":3,"file":"media-tag.st.css.d.ts","sourceRoot":"","sources":["../../../../../src/components/media-tag/web-media-tag/media-tag.st.css.ts"],"names":[],"mappings":"AAUA,eAAO,IAAI,SAAS,+BAAwC,CAAC;AAC7D,eAAO,IAAI,KAAK,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AACnE,eAAO,IAAI,EAAE,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AAEhE,eAAO,IAAI,SAAS,QAAc,CAAC;AACnC,eAAO,IAAI,OAAO;;CAAsC,CAAC;AACzD,eAAO,IAAI,SAAS,IAAK,CAAC;AAC1B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,UAAU,IAAK,CAAC;AAC3B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,IAAI;;;CAAkF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"rich-content-form-input.st.css.d.ts","sourceRoot":"","sources":["../../../../../../src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts"],"names":[],"mappings":"AAUA,eAAO,IAAI,SAAS,+BAAwC,CAAC;AAC7D,eAAO,IAAI,KAAK,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AACnE,eAAO,IAAI,EAAE,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AAEhE,eAAO,IAAI,SAAS,QAAc,CAAC;AACnC,eAAO,IAAI,OAAO;;;CAAkG,CAAC;AACrH,eAAO,IAAI,SAAS,IAAK,CAAC;AAC1B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,UAAU,IAAK,CAAC;AAC3B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,IAAI;;;;;;;CAAsW,CAAC"}
1
+ {"version":3,"file":"rich-content-form-input.st.css.d.ts","sourceRoot":"","sources":["../../../../../../src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts"],"names":[],"mappings":"AAUA,eAAO,IAAI,SAAS,+BAAwC,CAAC;AAC7D,eAAO,IAAI,KAAK,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AACnE,eAAO,IAAI,EAAE,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AAEhE,eAAO,IAAI,SAAS,QAAc,CAAC;AACnC,eAAO,IAAI,OAAO;;;CAAoG,CAAC;AACvH,eAAO,IAAI,SAAS,IAAK,CAAC;AAC1B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,UAAU,IAAK,CAAC;AAC3B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,IAAI;;;;;;;CAAwW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"rich-content-toolbar.st.css.d.ts","sourceRoot":"","sources":["../../../../../../src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts"],"names":[],"mappings":"AAUA,eAAO,IAAI,SAAS,+BAAwC,CAAC;AAC7D,eAAO,IAAI,KAAK,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AACnE,eAAO,IAAI,EAAE,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AAEhE,eAAO,IAAI,SAAS,QAAc,CAAC;AACnC,eAAO,IAAI,OAAO;;;;CAAgK,CAAC;AACnL,eAAO,IAAI,SAAS,IAAK,CAAC;AAC1B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,UAAU,IAAK,CAAC;AAC3B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,IAAI,IAAK,CAAC"}
1
+ {"version":3,"file":"rich-content-toolbar.st.css.d.ts","sourceRoot":"","sources":["../../../../../../src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts"],"names":[],"mappings":"AAUA,eAAO,IAAI,SAAS,+BAAwC,CAAC;AAC7D,eAAO,IAAI,KAAK,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AACnE,eAAO,IAAI,EAAE,EAAE,OAAO,mBAAmB,EAAE,UAAoB,CAAC;AAEhE,eAAO,IAAI,SAAS,QAAc,CAAC;AACnC,eAAO,IAAI,OAAO;;;;CAA6J,CAAC;AAChL,eAAO,IAAI,SAAS,IAAK,CAAC;AAC1B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,UAAU,IAAK,CAAC;AAC3B,eAAO,IAAI,MAAM,IAAK,CAAC;AACvB,eAAO,IAAI,IAAI,IAAK,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/patterns-fields",
3
- "version": "1.29.0",
3
+ "version": "1.30.0",
4
4
  "license": "UNLICENSED",
5
5
  "author": {
6
6
  "name": "Kobi",
@@ -191,5 +191,5 @@
191
191
  "type": "yoshi-flow-library"
192
192
  }
193
193
  },
194
- "falconPackageHash": "a1f197a2e7877031e44bcfe68e8d0bc3baa200a1bfffcf794f160cdc"
194
+ "falconPackageHash": "8ef43854b6e8475a461f6c5eec1b31e1891da97c1efa52a4149ee71a"
195
195
  }
@@ -0,0 +1,101 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import { CellDocumentEdit } from '../../../components/document/cell-document-edit';
4
+ import { PatternsFieldsTestProvider } from '../../../testkit/patterns-fields-test-provider';
5
+
6
+ jest.mock('@wix/bex-core/react', () => ({
7
+ ...jest.requireActual('@wix/bex-core/react'),
8
+ useWixPatternsContainer: () => ({
9
+ environment: { msid: 'test-meta-site-id' },
10
+ }),
11
+ }));
12
+
13
+ const mockCallMedia = jest.fn();
14
+ const mockDownloadMedia = jest.fn();
15
+ const mockOnOpen = jest.fn(() => jest.fn());
16
+ let mockLoading = false;
17
+
18
+ jest.mock('../../../components/media-control/use-media-control', () => ({
19
+ useMediaControl: () => ({
20
+ callMedia: mockCallMedia,
21
+ downloadMedia: mockDownloadMedia,
22
+ loading: mockLoading,
23
+ }),
24
+ }));
25
+
26
+ jest.mock('../../../components/media-control/use-paste-url-form', () => ({
27
+ usePasteURLForm: () => ({
28
+ isOpen: false,
29
+ title: '',
30
+ onOpen: mockOnOpen,
31
+ onClose: jest.fn(),
32
+ onSave: jest.fn(),
33
+ }),
34
+ }));
35
+
36
+ const DOC_URI =
37
+ 'wix:document://v1/ugd/fefc9f_d8295aad65e0419fb9301388ef94369c.pdf/wix-pdf.pdf';
38
+
39
+ describe('CellDocumentEdit', () => {
40
+ beforeEach(() => {
41
+ mockLoading = false;
42
+ });
43
+
44
+ const setup = (
45
+ value: string | null,
46
+ fieldId = 'document-edit-test-col',
47
+ ) =>
48
+ render(
49
+ <CellDocumentEdit
50
+ value={value}
51
+ onChange={jest.fn()}
52
+ onCommit={jest.fn()}
53
+ onCancel={jest.fn()}
54
+ dataHook="edit"
55
+ fieldId={fieldId}
56
+ />,
57
+ { wrapper: PatternsFieldsTestProvider },
58
+ );
59
+
60
+ it('renders the Tag with the caller-provided fieldId', () => {
61
+ setup(DOC_URI, 'document-edit-col-1');
62
+ expect(screen.getByTestId('document-edit-tag').id).toBe(
63
+ 'document-edit-col-1',
64
+ );
65
+ });
66
+
67
+ it('renders add button when value is null', () => {
68
+ setup(null);
69
+ expect(
70
+ screen.getByTestId('document-edit-add-button'),
71
+ ).toBeInTheDocument();
72
+ expect(screen.queryByTestId('document-edit-tag')).not.toBeInTheDocument();
73
+ });
74
+
75
+ it('exposes the Loader via data-hook="loader" inside the edit container while loading (Edit.uni.driver isLoading() contract)', () => {
76
+ mockLoading = true;
77
+ setup(DOC_URI);
78
+
79
+ const container = screen.getByTestId('edit');
80
+ expect(container.querySelector('[data-hook="loader"]')).not.toBeNull();
81
+ });
82
+
83
+ it('icon-only buttons have an accessible name (aria-label) in both empty and populated states', () => {
84
+ setup(null);
85
+ expect(
86
+ screen.getByTestId('document-edit-add-button').getAttribute('aria-label'),
87
+ ).toBeTruthy();
88
+ expect(
89
+ screen
90
+ .getByTestId('document-edit-paste-url-button')
91
+ .getAttribute('aria-label'),
92
+ ).toBeTruthy();
93
+
94
+ setup(DOC_URI);
95
+ expect(
96
+ screen
97
+ .getByTestId('document-edit-more-button')
98
+ .getAttribute('aria-label'),
99
+ ).toBeTruthy();
100
+ });
101
+ });
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import { CellDocumentView } from '../../../components/document/cell-document-view';
4
+ import { PatternsFieldsTestProvider } from '../../../testkit/patterns-fields-test-provider';
5
+
6
+ const DOC_URI =
7
+ 'wix:document://v1/ugd/fefc9f_d8295aad65e0419fb9301388ef94369c.pdf/wix-pdf.pdf';
8
+
9
+ describe('CellDocumentView', () => {
10
+ it('renders the Tag with the caller-provided fieldId', () => {
11
+ render(
12
+ <PatternsFieldsTestProvider>
13
+ <CellDocumentView
14
+ value={DOC_URI}
15
+ dataHook="a"
16
+ fieldId="col-1-row-1"
17
+ />
18
+ <CellDocumentView
19
+ value={DOC_URI}
20
+ dataHook="b"
21
+ fieldId="col-1-row-2"
22
+ />
23
+ </PatternsFieldsTestProvider>,
24
+ );
25
+ const ids = screen
26
+ .getAllByTestId('cell-document-tag')
27
+ .map((t) => t.id);
28
+ expect(ids).toEqual(['col-1-row-1', 'col-1-row-2']);
29
+ });
30
+
31
+ it('renders nothing when value is null', () => {
32
+ render(
33
+ <CellDocumentView value={null} dataHook="view" fieldId="any" />,
34
+ { wrapper: PatternsFieldsTestProvider },
35
+ );
36
+ expect(screen.queryByTestId('view')).not.toBeInTheDocument();
37
+ expect(screen.queryByTestId('cell-document-tag')).not.toBeInTheDocument();
38
+ });
39
+ });
@@ -0,0 +1,28 @@
1
+ import { openDocument } from '../../../components/document/utils';
2
+
3
+ describe('openDocument', () => {
4
+ it('opens with rel="noopener noreferrer" to prevent tabnabbing', () => {
5
+ const created: HTMLAnchorElement[] = [];
6
+ const realCreateElement = document.createElement.bind(document);
7
+ const spy = jest
8
+ .spyOn(document, 'createElement')
9
+ .mockImplementation((tag: string) => {
10
+ const el = realCreateElement(tag);
11
+ if (tag === 'a') {
12
+ created.push(el as HTMLAnchorElement);
13
+ (el as HTMLAnchorElement).click = jest.fn();
14
+ }
15
+ return el;
16
+ });
17
+
18
+ openDocument('https://example.com/file.pdf');
19
+
20
+ expect(created).toHaveLength(1);
21
+ const link = created[0];
22
+ expect(link.rel).toBe('noopener noreferrer');
23
+ expect(link.target).toBe('_blank');
24
+ expect(link.click).toHaveBeenCalled();
25
+
26
+ spy.mockRestore();
27
+ });
28
+ });
@@ -1,14 +1,14 @@
1
1
  {
2
- "CMS.document.add.button.text": "Add Document",
3
- "CMS.document.addMore.button.text": "Add Document",
4
- "CMS.document.action.open": "Open",
5
- "CMS.document.action.download": "Download",
6
- "CMS.document.action.replace": "Replace",
2
+ "CMS.document.add.button.text": "Add file",
3
+ "CMS.document.addMore.button.text": "Add file",
4
+ "CMS.document.action.open": "Open file",
5
+ "CMS.document.action.download": "Download file",
6
+ "CMS.document.action.replace": "Choose file",
7
7
  "CMS.document.action.replaceWithUrl": "Replace with URL",
8
- "CMS.document.action.delete": "Delete",
9
- "CMS.document.pasteUrl.button": "Paste URL",
10
- "CMS.document.pasteUrl.title": "Paste document URL",
11
- "CMS.document.replaceWithUrl.title": "Replace with URL",
8
+ "CMS.document.action.delete": "Delete file",
9
+ "CMS.document.pasteUrl.button": "Add file link (URL)",
10
+ "CMS.document.pasteUrl.title": "Add file link (URL)",
11
+ "CMS.document.replaceWithUrl.title": "Add file link (URL)",
12
12
  "CMS.document.delete.title": "Delete \"{filename}\"?",
13
13
  "CMS.document.delete.confirm": "Delete",
14
14
  "CMS.document.delete.cancel": "Cancel",
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../../stylable-esm-runtime.js"
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "addressinput4170739501";
8
+ var _namespace_ = "addressinput1106002573";
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":"addressinput4170739501__root","tableAddressInput":"addressinput4170739501__tableAddressInput"};
16
+ export var classes = {"root":"addressinput1106002573__root","tableAddressInput":"addressinput1106002573__tableAddressInput"};
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_ = "actionsmenu2215267763";
8
+ var _namespace_ = "actionsmenu2271857068";
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":"actionsmenu2215267763__root","action":"actionsmenu2215267763__action"};
16
+ export var classes = {"root":"actionsmenu2271857068__root","action":"actionsmenu2271857068__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_ = "formaudiofield16737968";
8
+ var _namespace_ = "formaudiofield1284110851";
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":"formaudiofield16737968__root","addItem":"formaudiofield16737968__addItem","mediaTitle":"formaudiofield16737968__mediaTitle"};
16
+ export var classes = {"root":"formaudiofield1284110851__root","addItem":"formaudiofield1284110851__addItem","mediaTitle":"formaudiofield1284110851__mediaTitle"};
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_ = "audioplayer1690888432";
8
+ var _namespace_ = "audioplayer3613609519";
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":"audioplayer1690888432__root"};
16
+ export var classes = {"root":"audioplayer3613609519__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_ = "colorview592337046";
8
+ var _namespace_ = "colorview1018072753";
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":"colorview592337046__root","view":"colorview592337046__view","fillPreview":"colorview592337046__fillPreview"};
16
+ export var classes = {"root":"colorview1018072753__root","view":"colorview1018072753__view","fillPreview":"colorview1018072753__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_ = "deletedialog3203528919";
8
+ var _namespace_ = "deletedialog2116833939";
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":"deletedialog3203528919__root","layout":"deletedialog3203528919__layout"};
16
+ export var classes = {"root":"deletedialog2116833939__root","layout":"deletedialog2116833939__layout"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -0,0 +1,196 @@
1
+ import React from 'react';
2
+ import { Box, IconButton, PopoverMenu, Tag, Tooltip } from '@wix/design-system';
3
+ import {
4
+ Add,
5
+ Delete,
6
+ DocumentSmall,
7
+ Download,
8
+ ExternalLink,
9
+ Link,
10
+ LinkSmall,
11
+ MoreSmall,
12
+ Replace,
13
+ } from '@wix/wix-ui-icons-common';
14
+ import { getMediaTitle, MEDIA_TYPES } from '../../utils/media-utils';
15
+ import { getMediaURL } from '../../auto-field-types';
16
+ import { useTranslations } from '../../hooks';
17
+ import { useWixPatternsContainer } from '@wix/bex-core/react';
18
+ import {
19
+ useCellMediaEdit,
20
+ CellMediaEditShell,
21
+ MediaFieldType,
22
+ } from '../media-control';
23
+ import { openDocument } from './utils';
24
+
25
+ export interface CellDocumentEditProps {
26
+ value: string | null;
27
+ onChange: (value: string | null) => void;
28
+ onCommit: () => void;
29
+ onCancel?: () => void;
30
+ /**
31
+ * Called before opening external UI (media manager / paste-URL form) so the
32
+ * table can set isEditing=true and protect cell focus while the modal is open.
33
+ */
34
+ onStartEdit?: () => void;
35
+ inputRef?: React.MutableRefObject<{ focus: () => void } | null | undefined>;
36
+ dataHook?: string;
37
+ /**
38
+ * Stable DOM id for the Tag. WDS Tag requires `id` to be present; callers are
39
+ * responsible for ensuring uniqueness (e.g., derive from columnId).
40
+ */
41
+ fieldId: string;
42
+ }
43
+
44
+ export const CellDocumentEdit: React.FC<CellDocumentEditProps> = ({
45
+ value,
46
+ onChange,
47
+ onCommit,
48
+ onCancel,
49
+ onStartEdit,
50
+ inputRef,
51
+ dataHook,
52
+ fieldId,
53
+ }) => {
54
+ const { t } = useTranslations();
55
+ const msid = useWixPatternsContainer()?.environment?.msid;
56
+
57
+ const mediaEdit = useCellMediaEdit({
58
+ mediaType: MEDIA_TYPES.ALL_MEDIA,
59
+ value,
60
+ onChange,
61
+ onCommit,
62
+ onCancel,
63
+ onStartEdit,
64
+ inputRef,
65
+ });
66
+
67
+ const pasteUrlTitle = value
68
+ ? t('CMS.document.replaceWithUrl.title')
69
+ : t('CMS.document.pasteUrl.title');
70
+
71
+ const openPasteUrl = mediaEdit.startEditAndOpenPasteUrl({
72
+ title: pasteUrlTitle,
73
+ value: value ?? undefined,
74
+ });
75
+
76
+ const handleOpenDocument = () => {
77
+ if (!value) {
78
+ return;
79
+ }
80
+ openDocument(getMediaURL(value, msid));
81
+ };
82
+
83
+ const handleDownload = () => {
84
+ if (!value) {
85
+ return;
86
+ }
87
+ mediaEdit.downloadMedia(value);
88
+ };
89
+
90
+ return (
91
+ <CellMediaEditShell
92
+ dataHook={dataHook}
93
+ mediaEdit={mediaEdit}
94
+ value={value}
95
+ fieldType={MediaFieldType.document}
96
+ gap="SP1"
97
+ >
98
+ {value ? (
99
+ <Box minWidth="0" style={{ flex: '1 1 auto' }}>
100
+ <Tag
101
+ id={fieldId}
102
+ dataHook="document-edit-tag"
103
+ removable={false}
104
+ thumb={<DocumentSmall />}
105
+ size="small"
106
+ maxWidth="100%"
107
+ >
108
+ {getMediaTitle(value)}
109
+ </Tag>
110
+ </Box>
111
+ ) : (
112
+ <Tooltip content={t('CMS.document.add.button.text')} appendTo="window">
113
+ <IconButton
114
+ size="tiny"
115
+ priority="secondary"
116
+ dataHook="document-edit-add-button"
117
+ ariaLabel={t('CMS.document.add.button.text')}
118
+ onClick={mediaEdit.handleCallMedia}
119
+ >
120
+ <Add />
121
+ </IconButton>
122
+ </Tooltip>
123
+ )}
124
+
125
+ {value ? (
126
+ <PopoverMenu
127
+ textSize="small"
128
+ appendTo="window"
129
+ triggerElement={
130
+ <Tooltip
131
+ content={t('auto-patterns.fields.more_actions_tooltip')}
132
+ appendTo="window"
133
+ >
134
+ <IconButton
135
+ size="tiny"
136
+ priority="tertiary"
137
+ dataHook="document-edit-more-button"
138
+ ariaLabel={t('auto-patterns.fields.more_actions_tooltip')}
139
+ >
140
+ <MoreSmall />
141
+ </IconButton>
142
+ </Tooltip>
143
+ }
144
+ >
145
+ <PopoverMenu.MenuItem
146
+ dataHook="document-edit-action-replace"
147
+ text={t('CMS.document.action.replace')}
148
+ prefixIcon={<Replace />}
149
+ onClick={mediaEdit.handleCallMedia}
150
+ />
151
+ <PopoverMenu.MenuItem
152
+ dataHook="document-edit-action-replace-url"
153
+ text={t('CMS.document.action.replaceWithUrl')}
154
+ prefixIcon={<Link />}
155
+ onClick={openPasteUrl}
156
+ />
157
+ <PopoverMenu.Divider />
158
+ <PopoverMenu.MenuItem
159
+ dataHook="document-edit-action-open"
160
+ text={t('CMS.document.action.open')}
161
+ prefixIcon={<ExternalLink />}
162
+ onClick={handleOpenDocument}
163
+ />
164
+ <PopoverMenu.MenuItem
165
+ dataHook="document-edit-action-download"
166
+ text={t('CMS.document.action.download')}
167
+ prefixIcon={<Download />}
168
+ onClick={handleDownload}
169
+ />
170
+ <PopoverMenu.Divider />
171
+ <PopoverMenu.MenuItem
172
+ dataHook="document-edit-action-delete"
173
+ text={t('CMS.document.action.delete')}
174
+ skin="destructive"
175
+ prefixIcon={<Delete />}
176
+ onClick={mediaEdit.handleDelete}
177
+ />
178
+ </PopoverMenu>
179
+ ) : (
180
+ <Tooltip content={t('CMS.document.pasteUrl.button')} appendTo="window">
181
+ <IconButton
182
+ size="tiny"
183
+ priority="tertiary"
184
+ dataHook="document-edit-paste-url-button"
185
+ ariaLabel={t('CMS.document.pasteUrl.button')}
186
+ onClick={openPasteUrl}
187
+ >
188
+ <LinkSmall />
189
+ </IconButton>
190
+ </Tooltip>
191
+ )}
192
+ </CellMediaEditShell>
193
+ );
194
+ };
195
+
196
+ CellDocumentEdit.displayName = 'CellDocumentEdit';
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ import { Box, Tag } from '@wix/design-system';
3
+ import { DocumentSmall } from '@wix/wix-ui-icons-common';
4
+
5
+ import { getMediaTitle } from '../../utils/media-utils';
6
+
7
+ export interface CellDocumentViewProps {
8
+ value: string | null | undefined;
9
+ dataHook?: string;
10
+ /**
11
+ * Stable DOM id for the Tag. WDS Tag requires `id` to be present; callers are
12
+ * responsible for ensuring uniqueness (e.g., derive from columnId + rowKey).
13
+ */
14
+ fieldId: string;
15
+ }
16
+
17
+ export const CellDocumentView: React.FC<CellDocumentViewProps> = ({
18
+ value,
19
+ dataHook,
20
+ fieldId,
21
+ }) => {
22
+ if (!value) {
23
+ return null;
24
+ }
25
+
26
+ return (
27
+ <Box
28
+ dataHook={dataHook}
29
+ verticalAlign="middle"
30
+ padding="0 8px"
31
+ height="100%"
32
+ width="100%"
33
+ minWidth="0"
34
+ >
35
+ <Tag
36
+ id={fieldId}
37
+ dataHook="cell-document-tag"
38
+ removable={false}
39
+ thumb={<DocumentSmall />}
40
+ size="small"
41
+ maxWidth="100%"
42
+ >
43
+ {getMediaTitle(value)}
44
+ </Tag>
45
+ </Box>
46
+ );
47
+ };
48
+
49
+ CellDocumentView.displayName = 'CellDocumentView';
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "formdocumentfield2858188729";
8
+ var _namespace_ = "formdocumentfield3905880661";
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":"formdocumentfield2858188729__root","viewWrapper":"formdocumentfield2858188729__viewWrapper","textWidth":"formdocumentfield2858188729__textWidth","documentLoader":"formdocumentfield2858188729__documentLoader","addDocument":"formdocumentfield2858188729__addDocument","addItemWrapper":"formdocumentfield2858188729__addItemWrapper"};
16
+ export var classes = {"root":"formdocumentfield3905880661__root","viewWrapper":"formdocumentfield3905880661__viewWrapper","textWidth":"formdocumentfield3905880661__textWidth","documentLoader":"formdocumentfield3905880661__documentLoader","addDocument":"formdocumentfield3905880661__addDocument","addItemWrapper":"formdocumentfield3905880661__addItemWrapper"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};