@imposium-hub/components 2.14.5 → 2.14.6

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 (415) hide show
  1. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  2. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.test.d.ts +1 -0
  3. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.test.js +377 -0
  4. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.test.js.map +1 -0
  5. package/dist/cjs/components/anchor-field/AnchorField.d.ts +1 -1
  6. package/dist/cjs/components/anchor-field/AnchorField.test.d.ts +1 -0
  7. package/dist/cjs/components/anchor-field/AnchorField.test.js +87 -0
  8. package/dist/cjs/components/anchor-field/AnchorField.test.js.map +1 -0
  9. package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +0 -1
  10. package/dist/cjs/components/app-wrapper/AppWrapper.js +1 -1
  11. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  12. package/dist/cjs/components/asset-details/AssetDetails.test.d.ts +1 -0
  13. package/dist/cjs/components/asset-details/AssetDetails.test.js +439 -0
  14. package/dist/cjs/components/asset-details/AssetDetails.test.js.map +1 -0
  15. package/dist/cjs/components/assets/AssetField.test.d.ts +1 -0
  16. package/dist/cjs/components/assets/AssetField.test.js +464 -0
  17. package/dist/cjs/components/assets/AssetField.test.js.map +1 -0
  18. package/dist/cjs/components/assets/AssetsTableAssetIdCell.test.d.ts +1 -0
  19. package/dist/cjs/components/assets/AssetsTableAssetIdCell.test.js +190 -0
  20. package/dist/cjs/components/assets/AssetsTableAssetIdCell.test.js.map +1 -0
  21. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.test.d.ts +1 -0
  22. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.test.js +82 -0
  23. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.test.js.map +1 -0
  24. package/dist/cjs/components/assets/AssetsTableComplexTagCell.test.d.ts +1 -0
  25. package/dist/cjs/components/assets/AssetsTableComplexTagCell.test.js +125 -0
  26. package/dist/cjs/components/assets/AssetsTableComplexTagCell.test.js.map +1 -0
  27. package/dist/cjs/components/assets/AssetsTableDateCell.d.ts +1 -6
  28. package/dist/cjs/components/assets/AssetsTableDateCell.test.d.ts +1 -0
  29. package/dist/cjs/components/assets/AssetsTableDateCell.test.js +116 -0
  30. package/dist/cjs/components/assets/AssetsTableDateCell.test.js.map +1 -0
  31. package/dist/cjs/components/assets/AssetsTableGlobalCell.d.ts +1 -5
  32. package/dist/cjs/components/assets/AssetsTablePreviewCell.d.ts +1 -17
  33. package/dist/cjs/components/assets/AssetsTableStatusCell.d.ts +1 -5
  34. package/dist/cjs/components/assets/AssetsTableTagsCell.d.ts +1 -6
  35. package/dist/cjs/components/assets/AssetsTableTypeCell.d.ts +1 -5
  36. package/dist/cjs/components/assets/AssetsTypeIcon.d.ts +1 -5
  37. package/dist/cjs/components/assets/FontAssetPreview.d.ts +1 -1
  38. package/dist/cjs/components/assets/StoryTableTotalRendersCell.d.ts +1 -2
  39. package/dist/cjs/components/button/Button.d.ts +1 -1
  40. package/dist/cjs/components/button/Button.stories.d.ts +5 -6
  41. package/dist/cjs/components/button-group-field/ButtonGroupField.d.ts +1 -1
  42. package/dist/cjs/components/button-group-field/ButtonGroupField.stories.d.ts +1 -2
  43. package/dist/cjs/components/button-menu/ButtonMenu.d.ts +2 -2
  44. package/dist/cjs/components/button-menu/ButtonMenu.stories.d.ts +1 -2
  45. package/dist/cjs/components/button-menu/ButtonMenuItem.d.ts +1 -1
  46. package/dist/cjs/components/card/Card.d.ts +4 -4
  47. package/dist/cjs/components/card/Card.stories.d.ts +1 -2
  48. package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +1 -1
  49. package/dist/cjs/components/checkbox-field/CheckboxField.stories.d.ts +1 -2
  50. package/dist/cjs/components/color-field/ColorField.d.ts +1 -1
  51. package/dist/cjs/components/color-field/ColorFiled.stories.d.ts +1 -2
  52. package/dist/cjs/components/compositions/TextLayer.d.ts +1 -1
  53. package/dist/cjs/components/config-variable-button/ConfigVariableButton.d.ts +1 -42
  54. package/dist/cjs/components/confirm-modal/ConfirmModal.d.ts +1 -2
  55. package/dist/cjs/components/controlled-list/ControlledList.d.ts +2 -2
  56. package/dist/cjs/components/controlled-list/ControlledList.stories.d.ts +1 -2
  57. package/dist/cjs/components/controlled-list/ControlledList.test.d.ts +1 -0
  58. package/dist/cjs/components/controlled-list/ControlledList.test.js +427 -0
  59. package/dist/cjs/components/controlled-list/ControlledList.test.js.map +1 -0
  60. package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.d.ts +1 -1
  61. package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.test.d.ts +1 -0
  62. package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.test.js +495 -0
  63. package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.test.js.map +1 -0
  64. package/dist/cjs/components/determinate-loader/DeterminateLoader.stories.d.ts +3 -4
  65. package/dist/cjs/components/dropdown/Dropdown.d.ts +1 -1
  66. package/dist/cjs/components/dropdown/dropdown.stories.d.ts +1 -1
  67. package/dist/cjs/components/dropdown/dropdown.stories.js +1 -1
  68. package/dist/cjs/components/dropdown/dropdown.stories.js.map +1 -1
  69. package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +2 -2
  70. package/dist/cjs/components/field-wrapper/FieldWrapper.stories.d.ts +1 -2
  71. package/dist/cjs/components/font-field/FontField.d.ts +1 -2
  72. package/dist/cjs/components/font-picker/FontPicker.d.ts +1 -1
  73. package/dist/cjs/components/h-rule/HRule.d.ts +1 -2
  74. package/dist/cjs/components/h-rule/HRule.stories.d.ts +2 -3
  75. package/dist/cjs/components/header/ProjectDropdown.d.ts +1 -2
  76. package/dist/cjs/components/list-field/ListField.d.ts +1 -1
  77. package/dist/cjs/components/list-field/ListField.stories.d.ts +1 -2
  78. package/dist/cjs/components/log-viewer/LogViewer.d.ts +1 -1
  79. package/dist/cjs/components/media-variable-field/MediaVariableField.d.ts +1 -1
  80. package/dist/cjs/components/modal/Modal.d.ts +1 -1
  81. package/dist/cjs/components/modal/Modal.stories.d.ts +1 -2
  82. package/dist/cjs/components/number-field/NumberField.d.ts +1 -1
  83. package/dist/cjs/components/number-field/NumberField.stories.d.ts +1 -2
  84. package/dist/cjs/components/number-field/NumberField.test.d.ts +1 -0
  85. package/dist/cjs/components/number-field/NumberField.test.js +241 -0
  86. package/dist/cjs/components/number-field/NumberField.test.js.map +1 -0
  87. package/dist/cjs/components/players/AudioPlayer.d.ts +1 -1
  88. package/dist/cjs/components/players/AudioPreview.d.ts +1 -1
  89. package/dist/cjs/components/players/ImagePlayer.d.ts +1 -1
  90. package/dist/cjs/components/players/ImagePreview.d.ts +1 -1
  91. package/dist/cjs/components/players/ImageSequencePlayer.d.ts +1 -1
  92. package/dist/cjs/components/players/TemplatePlayer.d.ts +1 -1
  93. package/dist/cjs/components/players/VideoPlayer.d.ts +1 -1
  94. package/dist/cjs/components/players/VideoPreview.d.ts +1 -1
  95. package/dist/cjs/components/publish-wizard/PublishWizard.d.ts +3 -3
  96. package/dist/cjs/components/publish-wizard/publish/APIIntegration.d.ts +1 -1
  97. package/dist/cjs/components/publish-wizard/publish/HubSpotFlow.d.ts +1 -1
  98. package/dist/cjs/components/publish-wizard/publish/WebpageHosted.d.ts +2 -2
  99. package/dist/cjs/components/section/Section.d.ts +1 -2
  100. package/dist/cjs/components/section/Section.stories.d.ts +2 -3
  101. package/dist/cjs/components/select-field/SelectField.d.ts +1 -1
  102. package/dist/cjs/components/select-field/SelectField.stories.d.ts +1 -2
  103. package/dist/cjs/components/shortcut-menu/ShortcutMenu.stories.d.ts +1 -2
  104. package/dist/cjs/components/slider-field/SliderField.d.ts +1 -1
  105. package/dist/cjs/components/slider-field/SliderField.stories.d.ts +1 -2
  106. package/dist/cjs/components/smpte-field/SMPTEField.d.ts +1 -1
  107. package/dist/cjs/components/tabs/Tabs.stories.d.ts +2 -3
  108. package/dist/cjs/components/tag/Tag.d.ts +1 -9
  109. package/dist/cjs/components/text-area-autocomplete/TextAreaAutocomplete.d.ts +1 -2
  110. package/dist/cjs/components/text-area-field/TextAreaField.d.ts +1 -1
  111. package/dist/cjs/components/text-area-field/TextAreaField.stories.d.ts +1 -2
  112. package/dist/cjs/components/text-field/TextField.d.ts +1 -1
  113. package/dist/cjs/components/text-field/TextField.stories.d.ts +1 -2
  114. package/dist/cjs/components/text-field/TextField.test.d.ts +1 -0
  115. package/dist/cjs/components/text-field/TextField.test.js +540 -0
  116. package/dist/cjs/components/text-field/TextField.test.js.map +1 -0
  117. package/dist/cjs/constants/icons.d.ts +79 -80
  118. package/dist/cjs/interfaces/field.js +1 -0
  119. package/dist/cjs/interfaces/field.js.map +1 -0
  120. package/dist/cjs/test/setup.d.ts +1 -0
  121. package/dist/cjs/test/setup.js +97 -0
  122. package/dist/cjs/test/setup.js.map +1 -0
  123. package/dist/cjs/test/utils.d.ts +26 -0
  124. package/dist/cjs/test/utils.js +44 -0
  125. package/dist/cjs/test/utils.js.map +1 -0
  126. package/dist/cjs/utils/override.d.ts +11 -0
  127. package/dist/cjs/utils/override.js +15 -0
  128. package/dist/cjs/utils/override.js.map +1 -0
  129. package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  130. package/dist/esm/components/advanced-number-field/AdvancedNumberField.test.d.ts +1 -0
  131. package/dist/esm/components/advanced-number-field/AdvancedNumberField.test.js +361 -0
  132. package/dist/esm/components/advanced-number-field/AdvancedNumberField.test.js.map +1 -0
  133. package/dist/esm/components/anchor-field/AnchorField.d.ts +1 -1
  134. package/dist/esm/components/anchor-field/AnchorField.test.d.ts +1 -0
  135. package/dist/esm/components/anchor-field/AnchorField.test.js +81 -0
  136. package/dist/esm/components/anchor-field/AnchorField.test.js.map +1 -0
  137. package/dist/esm/components/app-wrapper/AppWrapper.d.ts +0 -1
  138. package/dist/esm/components/app-wrapper/AppWrapper.js +1 -1
  139. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  140. package/dist/esm/components/asset-details/AssetDetails.test.d.ts +1 -0
  141. package/dist/esm/components/asset-details/AssetDetails.test.js +367 -0
  142. package/dist/esm/components/asset-details/AssetDetails.test.js.map +1 -0
  143. package/dist/esm/components/assets/AssetField.test.d.ts +1 -0
  144. package/dist/esm/components/assets/AssetField.test.js +311 -0
  145. package/dist/esm/components/assets/AssetField.test.js.map +1 -0
  146. package/dist/esm/components/assets/AssetsTableAssetIdCell.test.d.ts +1 -0
  147. package/dist/esm/components/assets/AssetsTableAssetIdCell.test.js +105 -0
  148. package/dist/esm/components/assets/AssetsTableAssetIdCell.test.js.map +1 -0
  149. package/dist/esm/components/assets/AssetsTableAssetIdFilter.test.d.ts +1 -0
  150. package/dist/esm/components/assets/AssetsTableAssetIdFilter.test.js +63 -0
  151. package/dist/esm/components/assets/AssetsTableAssetIdFilter.test.js.map +1 -0
  152. package/dist/esm/components/assets/AssetsTableComplexTagCell.test.d.ts +1 -0
  153. package/dist/esm/components/assets/AssetsTableComplexTagCell.test.js +100 -0
  154. package/dist/esm/components/assets/AssetsTableComplexTagCell.test.js.map +1 -0
  155. package/dist/esm/components/assets/AssetsTableDateCell.d.ts +1 -6
  156. package/dist/esm/components/assets/AssetsTableDateCell.test.d.ts +1 -0
  157. package/dist/esm/components/assets/AssetsTableDateCell.test.js +60 -0
  158. package/dist/esm/components/assets/AssetsTableDateCell.test.js.map +1 -0
  159. package/dist/esm/components/assets/AssetsTableGlobalCell.d.ts +1 -5
  160. package/dist/esm/components/assets/AssetsTablePreviewCell.d.ts +1 -17
  161. package/dist/esm/components/assets/AssetsTableStatusCell.d.ts +1 -5
  162. package/dist/esm/components/assets/AssetsTableTagsCell.d.ts +1 -6
  163. package/dist/esm/components/assets/AssetsTableTypeCell.d.ts +1 -5
  164. package/dist/esm/components/assets/AssetsTypeIcon.d.ts +1 -5
  165. package/dist/esm/components/assets/FontAssetPreview.d.ts +1 -1
  166. package/dist/esm/components/assets/StoryTableTotalRendersCell.d.ts +1 -2
  167. package/dist/esm/components/button/Button.d.ts +1 -1
  168. package/dist/esm/components/button/Button.stories.d.ts +5 -6
  169. package/dist/esm/components/button-group-field/ButtonGroupField.d.ts +1 -1
  170. package/dist/esm/components/button-group-field/ButtonGroupField.stories.d.ts +1 -2
  171. package/dist/esm/components/button-menu/ButtonMenu.d.ts +2 -2
  172. package/dist/esm/components/button-menu/ButtonMenu.stories.d.ts +1 -2
  173. package/dist/esm/components/button-menu/ButtonMenuItem.d.ts +1 -1
  174. package/dist/esm/components/card/Card.d.ts +4 -4
  175. package/dist/esm/components/card/Card.stories.d.ts +1 -2
  176. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +1 -1
  177. package/dist/esm/components/checkbox-field/CheckboxField.stories.d.ts +1 -2
  178. package/dist/esm/components/color-field/ColorField.d.ts +1 -1
  179. package/dist/esm/components/color-field/ColorFiled.stories.d.ts +1 -2
  180. package/dist/esm/components/compositions/TextLayer.d.ts +1 -1
  181. package/dist/esm/components/config-variable-button/ConfigVariableButton.d.ts +1 -42
  182. package/dist/esm/components/confirm-modal/ConfirmModal.d.ts +1 -2
  183. package/dist/esm/components/controlled-list/ControlledList.d.ts +2 -2
  184. package/dist/esm/components/controlled-list/ControlledList.stories.d.ts +1 -2
  185. package/dist/esm/components/controlled-list/ControlledList.test.d.ts +1 -0
  186. package/dist/esm/components/controlled-list/ControlledList.test.js +400 -0
  187. package/dist/esm/components/controlled-list/ControlledList.test.js.map +1 -0
  188. package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.d.ts +1 -1
  189. package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.test.d.ts +1 -0
  190. package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.test.js +357 -0
  191. package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.test.js.map +1 -0
  192. package/dist/esm/components/determinate-loader/DeterminateLoader.stories.d.ts +3 -4
  193. package/dist/esm/components/dropdown/Dropdown.d.ts +1 -1
  194. package/dist/esm/components/dropdown/dropdown.stories.d.ts +1 -1
  195. package/dist/esm/components/dropdown/dropdown.stories.js +1 -1
  196. package/dist/esm/components/dropdown/dropdown.stories.js.map +1 -1
  197. package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +2 -2
  198. package/dist/esm/components/field-wrapper/FieldWrapper.stories.d.ts +1 -2
  199. package/dist/esm/components/font-field/FontField.d.ts +1 -2
  200. package/dist/esm/components/font-picker/FontPicker.d.ts +1 -1
  201. package/dist/esm/components/h-rule/HRule.d.ts +1 -2
  202. package/dist/esm/components/h-rule/HRule.stories.d.ts +2 -3
  203. package/dist/esm/components/header/ProjectDropdown.d.ts +1 -2
  204. package/dist/esm/components/list-field/ListField.d.ts +1 -1
  205. package/dist/esm/components/list-field/ListField.stories.d.ts +1 -2
  206. package/dist/esm/components/log-viewer/LogViewer.d.ts +1 -1
  207. package/dist/esm/components/media-variable-field/MediaVariableField.d.ts +1 -1
  208. package/dist/esm/components/modal/Modal.d.ts +1 -1
  209. package/dist/esm/components/modal/Modal.stories.d.ts +1 -2
  210. package/dist/esm/components/number-field/NumberField.d.ts +1 -1
  211. package/dist/esm/components/number-field/NumberField.stories.d.ts +1 -2
  212. package/dist/esm/components/number-field/NumberField.test.d.ts +1 -0
  213. package/dist/esm/components/number-field/NumberField.test.js +192 -0
  214. package/dist/esm/components/number-field/NumberField.test.js.map +1 -0
  215. package/dist/esm/components/players/AudioPlayer.d.ts +1 -1
  216. package/dist/esm/components/players/AudioPreview.d.ts +1 -1
  217. package/dist/esm/components/players/ImagePlayer.d.ts +1 -1
  218. package/dist/esm/components/players/ImagePreview.d.ts +1 -1
  219. package/dist/esm/components/players/ImageSequencePlayer.d.ts +1 -1
  220. package/dist/esm/components/players/TemplatePlayer.d.ts +1 -1
  221. package/dist/esm/components/players/VideoPlayer.d.ts +1 -1
  222. package/dist/esm/components/players/VideoPreview.d.ts +1 -1
  223. package/dist/esm/components/publish-wizard/PublishWizard.d.ts +3 -3
  224. package/dist/esm/components/publish-wizard/publish/APIIntegration.d.ts +1 -1
  225. package/dist/esm/components/publish-wizard/publish/HubSpotFlow.d.ts +1 -1
  226. package/dist/esm/components/publish-wizard/publish/WebpageHosted.d.ts +2 -2
  227. package/dist/esm/components/section/Section.d.ts +1 -2
  228. package/dist/esm/components/section/Section.stories.d.ts +2 -3
  229. package/dist/esm/components/select-field/SelectField.d.ts +1 -1
  230. package/dist/esm/components/select-field/SelectField.stories.d.ts +1 -2
  231. package/dist/esm/components/shortcut-menu/ShortcutMenu.stories.d.ts +1 -2
  232. package/dist/esm/components/slider-field/SliderField.d.ts +1 -1
  233. package/dist/esm/components/slider-field/SliderField.stories.d.ts +1 -2
  234. package/dist/esm/components/smpte-field/SMPTEField.d.ts +1 -1
  235. package/dist/esm/components/tabs/Tabs.stories.d.ts +2 -3
  236. package/dist/esm/components/tag/Tag.d.ts +1 -9
  237. package/dist/esm/components/text-area-autocomplete/TextAreaAutocomplete.d.ts +1 -2
  238. package/dist/esm/components/text-area-field/TextAreaField.d.ts +1 -1
  239. package/dist/esm/components/text-area-field/TextAreaField.stories.d.ts +1 -2
  240. package/dist/esm/components/text-field/TextField.d.ts +1 -1
  241. package/dist/esm/components/text-field/TextField.stories.d.ts +1 -2
  242. package/dist/esm/components/text-field/TextField.test.d.ts +1 -0
  243. package/dist/esm/components/text-field/TextField.test.js +469 -0
  244. package/dist/esm/components/text-field/TextField.test.js.map +1 -0
  245. package/dist/esm/constants/icons.d.ts +79 -80
  246. package/dist/esm/interfaces/field.js +1 -0
  247. package/dist/esm/interfaces/field.js.map +1 -0
  248. package/dist/esm/test/setup.d.ts +1 -0
  249. package/dist/esm/test/setup.js +70 -0
  250. package/dist/esm/test/setup.js.map +1 -0
  251. package/dist/esm/test/utils.d.ts +26 -0
  252. package/dist/esm/test/utils.js +27 -0
  253. package/dist/esm/test/utils.js.map +1 -0
  254. package/dist/esm/utils/override.d.ts +11 -0
  255. package/dist/esm/utils/override.js +9 -0
  256. package/dist/esm/utils/override.js.map +1 -0
  257. package/package.json +17 -6
  258. package/src/components/advanced-number-field/AdvancedNumberField.test.tsx +704 -0
  259. package/src/components/anchor-field/AnchorField.test.tsx +130 -0
  260. package/src/components/app-wrapper/AppWrapper.tsx +1 -6
  261. package/src/components/asset-details/AssetDetails.test.tsx +494 -0
  262. package/src/components/assets/AssetField.test.tsx +439 -0
  263. package/src/components/assets/AssetsTableAssetIdCell.test.tsx +134 -0
  264. package/src/components/assets/AssetsTableAssetIdFilter.test.tsx +95 -0
  265. package/src/components/assets/AssetsTableComplexTagCell.test.tsx +159 -0
  266. package/src/components/assets/AssetsTableDateCell.test.tsx +106 -0
  267. package/src/components/number-field/NumberField.test.tsx +383 -0
  268. package/src/components/number-field/NumberField.tsx +15 -9
  269. package/src/components/text-field/TextField.test.tsx +988 -0
  270. package/src/test/setup.ts +91 -0
  271. package/src/test/utils.tsx +44 -0
  272. package/tsconfig.eslint.json +8 -0
  273. package/tsconfig.json +1 -1
  274. package/vitest.config.ts +31 -0
  275. package/dist/cjs/components/app-wrapper/AppWrapperV2.d.ts +0 -26
  276. package/dist/cjs/components/app-wrapper/AppWrapperV2.js +0 -266
  277. package/dist/cjs/components/app-wrapper/AppWrapperV2.js.map +0 -1
  278. package/dist/cjs/components/app-wrapper/AppWrapperV3.d.ts +0 -19
  279. package/dist/cjs/components/app-wrapper/AppWrapperV3.js +0 -195
  280. package/dist/cjs/components/app-wrapper/AppWrapperV3.js.map +0 -1
  281. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
  282. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -243
  283. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
  284. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
  285. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +0 -255
  286. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
  287. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
  288. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -243
  289. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
  290. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
  291. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -251
  292. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
  293. package/dist/cjs/components/auth-gate/AuthGate.d.ts +0 -2
  294. package/dist/cjs/components/auth-gate/AuthGate.js +0 -105
  295. package/dist/cjs/components/auth-gate/AuthGate.js.map +0 -1
  296. package/dist/cjs/components/change-report/ChangeReportTree.d.ts +0 -10
  297. package/dist/cjs/components/change-report/ChangeReportTree.js +0 -95
  298. package/dist/cjs/components/change-report/ChangeReportTree.js.map +0 -1
  299. package/dist/cjs/components/edit-guide-modal/EditGuideModal.d.ts +0 -8
  300. package/dist/cjs/components/edit-guide-modal/EditGuideModal.js +0 -132
  301. package/dist/cjs/components/edit-guide-modal/EditGuideModal.js.map +0 -1
  302. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.d.ts +0 -8
  303. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js +0 -104
  304. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js.map +0 -1
  305. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
  306. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +0 -91
  307. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
  308. package/dist/cjs/components/feature-flag-wrapper/FeatureFlagWrapper.d.ts +0 -7
  309. package/dist/cjs/components/feature-flag-wrapper/FeatureFlagWrapper.js +0 -48
  310. package/dist/cjs/components/feature-flag-wrapper/FeatureFlagWrapper.js.map +0 -1
  311. package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +0 -33
  312. package/dist/cjs/components/header/Header_BACKUP_73021.js +0 -393
  313. package/dist/cjs/components/header/Header_BACKUP_73021.js.map +0 -1
  314. package/dist/cjs/components/header/Header_BASE_73021.d.ts +0 -29
  315. package/dist/cjs/components/header/Header_BASE_73021.js +0 -376
  316. package/dist/cjs/components/header/Header_BASE_73021.js.map +0 -1
  317. package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +0 -33
  318. package/dist/cjs/components/header/Header_LOCAL_73021.js +0 -382
  319. package/dist/cjs/components/header/Header_LOCAL_73021.js.map +0 -1
  320. package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +0 -30
  321. package/dist/cjs/components/header/Header_REMOTE_73021.js +0 -386
  322. package/dist/cjs/components/header/Header_REMOTE_73021.js.map +0 -1
  323. package/dist/cjs/components/header/StoryDropdown.d.ts +0 -6
  324. package/dist/cjs/components/header/StoryDropdown.js +0 -111
  325. package/dist/cjs/components/header/StoryDropdown.js.map +0 -1
  326. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.d.ts +0 -11
  327. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +0 -213
  328. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +0 -1
  329. package/dist/cjs/constants/snippets.d.ts +0 -18
  330. package/dist/cjs/constants/snippets.js +0 -3
  331. package/dist/cjs/constants/snippets.js.map +0 -1
  332. package/dist/cjs/redux/actions/auth.d.ts +0 -9
  333. package/dist/cjs/redux/actions/auth.js +0 -30
  334. package/dist/cjs/redux/actions/auth.js.map +0 -1
  335. package/dist/cjs/redux/reducers/auth.d.ts +0 -3
  336. package/dist/cjs/redux/reducers/auth.js +0 -67
  337. package/dist/cjs/redux/reducers/auth.js.map +0 -1
  338. package/dist/cjs/services/Auth0.d.ts +0 -18
  339. package/dist/cjs/services/Auth0.js +0 -102
  340. package/dist/cjs/services/Auth0.js.map +0 -1
  341. package/dist/cjs/services/Session.d.ts +0 -26
  342. package/dist/cjs/services/Session.js +0 -155
  343. package/dist/cjs/services/Session.js.map +0 -1
  344. package/dist/esm/components/app-wrapper/AppWrapperV2.d.ts +0 -26
  345. package/dist/esm/components/app-wrapper/AppWrapperV2.js +0 -142
  346. package/dist/esm/components/app-wrapper/AppWrapperV2.js.map +0 -1
  347. package/dist/esm/components/app-wrapper/AppWrapperV3.d.ts +0 -19
  348. package/dist/esm/components/app-wrapper/AppWrapperV3.js +0 -88
  349. package/dist/esm/components/app-wrapper/AppWrapperV3.js.map +0 -1
  350. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
  351. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -194
  352. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
  353. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
  354. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +0 -208
  355. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
  356. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
  357. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -194
  358. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
  359. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
  360. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -204
  361. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
  362. package/dist/esm/components/auth-gate/AuthGate.d.ts +0 -2
  363. package/dist/esm/components/auth-gate/AuthGate.js +0 -59
  364. package/dist/esm/components/auth-gate/AuthGate.js.map +0 -1
  365. package/dist/esm/components/change-report/ChangeReportTree.d.ts +0 -10
  366. package/dist/esm/components/change-report/ChangeReportTree.js +0 -42
  367. package/dist/esm/components/change-report/ChangeReportTree.js.map +0 -1
  368. package/dist/esm/components/edit-guide-modal/EditGuideModal.d.ts +0 -8
  369. package/dist/esm/components/edit-guide-modal/EditGuideModal.js +0 -65
  370. package/dist/esm/components/edit-guide-modal/EditGuideModal.js.map +0 -1
  371. package/dist/esm/components/edit-marker-modal/EditMarkerModal.d.ts +0 -8
  372. package/dist/esm/components/edit-marker-modal/EditMarkerModal.js +0 -72
  373. package/dist/esm/components/edit-marker-modal/EditMarkerModal.js.map +0 -1
  374. package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
  375. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +0 -35
  376. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
  377. package/dist/esm/components/feature-flag-wrapper/FeatureFlagWrapper.d.ts +0 -7
  378. package/dist/esm/components/feature-flag-wrapper/FeatureFlagWrapper.js +0 -10
  379. package/dist/esm/components/feature-flag-wrapper/FeatureFlagWrapper.js.map +0 -1
  380. package/dist/esm/components/header/Header_BACKUP_73021.d.ts +0 -33
  381. package/dist/esm/components/header/Header_BACKUP_73021.js +0 -336
  382. package/dist/esm/components/header/Header_BACKUP_73021.js.map +0 -1
  383. package/dist/esm/components/header/Header_BASE_73021.d.ts +0 -29
  384. package/dist/esm/components/header/Header_BASE_73021.js +0 -322
  385. package/dist/esm/components/header/Header_BASE_73021.js.map +0 -1
  386. package/dist/esm/components/header/Header_LOCAL_73021.d.ts +0 -33
  387. package/dist/esm/components/header/Header_LOCAL_73021.js +0 -328
  388. package/dist/esm/components/header/Header_LOCAL_73021.js.map +0 -1
  389. package/dist/esm/components/header/Header_REMOTE_73021.d.ts +0 -30
  390. package/dist/esm/components/header/Header_REMOTE_73021.js +0 -329
  391. package/dist/esm/components/header/Header_REMOTE_73021.js.map +0 -1
  392. package/dist/esm/components/header/StoryDropdown.d.ts +0 -6
  393. package/dist/esm/components/header/StoryDropdown.js +0 -82
  394. package/dist/esm/components/header/StoryDropdown.js.map +0 -1
  395. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.d.ts +0 -11
  396. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +0 -141
  397. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +0 -1
  398. package/dist/esm/constants/snippets.d.ts +0 -18
  399. package/dist/esm/constants/snippets.js +0 -2
  400. package/dist/esm/constants/snippets.js.map +0 -1
  401. package/dist/esm/redux/actions/auth.d.ts +0 -9
  402. package/dist/esm/redux/actions/auth.js +0 -25
  403. package/dist/esm/redux/actions/auth.js.map +0 -1
  404. package/dist/esm/redux/reducers/auth.d.ts +0 -3
  405. package/dist/esm/redux/reducers/auth.js +0 -27
  406. package/dist/esm/redux/reducers/auth.js.map +0 -1
  407. package/dist/esm/services/Auth0.d.ts +0 -18
  408. package/dist/esm/services/Auth0.js +0 -68
  409. package/dist/esm/services/Auth0.js.map +0 -1
  410. package/dist/esm/services/Session.d.ts +0 -26
  411. package/dist/esm/services/Session.js +0 -107
  412. package/dist/esm/services/Session.js.map +0 -1
  413. /package/{src/components/service-icon/ServiceIcon.test.tsx → dist/cjs/interfaces/field.d.ts} +0 -0
  414. /package/{src/components/tag/Tag.test.tsx → dist/esm/interfaces/field.d.ts} +0 -0
  415. /package/src/components/dropdown/{dropdown.stories.tsx → Dropdown.stories.tsx} +0 -0
@@ -0,0 +1,439 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import React from 'react';
3
+ import { render, act } from '@testing-library/react';
4
+ import { Provider } from 'react-redux';
5
+ import { legacy_createStore as createStore } from 'redux';
6
+
7
+ import { ASSET_TYPES } from '../../constants/assets';
8
+
9
+ vi.mock('../../Util', async (importOriginal) => {
10
+ const actual = (await importOriginal()) as any;
11
+ return {
12
+ ...actual,
13
+ mimetypeConformsToOverlay: vi.fn(() => true)
14
+ };
15
+ });
16
+
17
+ vi.mock('../text-field/TextField', () => ({
18
+ default: ({ value, label, readOnly, placeholder, loading, buttons, ...props }: any) => (
19
+ <div data-testid={`textfield-${label || 'unlabeled'}`}>
20
+ <label>{label}</label>
21
+ <input
22
+ value={value || ''}
23
+ readOnly={readOnly}
24
+ placeholder={placeholder || ''}
25
+ />
26
+ {loading && <span data-testid='loading-indicator'>Loading...</span>}
27
+ {buttons && <div data-testid='buttons-container'>{buttons}</div>}
28
+ </div>
29
+ )
30
+ }));
31
+
32
+ vi.mock('../button/Button', () => ({
33
+ default: ({ children, onClick, tooltip, ...props }: any) => (
34
+ <button
35
+ data-testid={`btn-${tooltip || 'unknown'}`}
36
+ onClick={onClick}>
37
+ {children}
38
+ </button>
39
+ )
40
+ }));
41
+
42
+ vi.mock('./AssetsTableDropzone', () => ({
43
+ default: ({ children, onDrop, disable }: any) => (
44
+ <div
45
+ data-testid='dropzone'
46
+ data-disabled={disable}>
47
+ {children}
48
+ </div>
49
+ )
50
+ }));
51
+
52
+ vi.mock('./DroppableAssetRenderer', () => ({
53
+ default: ({ children, onDrop }: any) => <div data-testid='droppable-renderer'>{children}</div>
54
+ }));
55
+
56
+ vi.mock('../../constants/icons', () => ({
57
+ ICON_FILTER: '<svg data-testid="icon-filter" />',
58
+ ICON_TIMES: '<svg data-testid="icon-times" />'
59
+ }));
60
+
61
+ vi.mock('../../redux/actions/asset-filters', () => ({
62
+ updateFilters: vi.fn((filters) => ({ type: 'UPDATE_FILTERS', payload: filters }))
63
+ }));
64
+
65
+ vi.mock('../../redux/actions/asset-uploads', () => ({
66
+ uploadAssets: vi.fn(() => ({ type: 'UPLOAD_ASSETS' }))
67
+ }));
68
+
69
+ const createMockStore = (overrides = {}) => {
70
+ const defaultState = {
71
+ assetList: {
72
+ loading: false,
73
+ page: 1,
74
+ total_pages: 1,
75
+ asset_count: 0,
76
+ assets: []
77
+ },
78
+ ...overrides
79
+ };
80
+ return createStore((state = defaultState) => state);
81
+ };
82
+
83
+ const createMockApi = (assetResponse = { name: 'test-asset.png' }, shouldReject = false) => ({
84
+ getAssetItem: vi.fn(() =>
85
+ shouldReject ? Promise.reject(new Error('Not found')) : Promise.resolve(assetResponse)
86
+ )
87
+ });
88
+
89
+ describe('AssetField', () => {
90
+ let AssetFieldConnected: any;
91
+
92
+ beforeEach(async () => {
93
+ vi.clearAllMocks();
94
+ vi.useFakeTimers();
95
+ const module = await import('./AssetField');
96
+ AssetFieldConnected = module.default;
97
+ });
98
+
99
+ afterEach(() => {
100
+ vi.useRealTimers();
101
+ });
102
+
103
+ const defaultProps = {
104
+ api: createMockApi(),
105
+ storyId: 'story-123',
106
+ assetId: 'asset-456',
107
+ label: 'Background',
108
+ width: 300,
109
+ tooltip: 'Select an asset',
110
+ onChange: vi.fn(),
111
+ accepts: ASSET_TYPES.IMAGE
112
+ };
113
+
114
+ const renderWithStore = (props = {}, storeOverrides = {}) => {
115
+ const store = createMockStore(storeOverrides);
116
+ return render(
117
+ <Provider store={store}>
118
+ <AssetFieldConnected
119
+ {...defaultProps}
120
+ {...props}
121
+ />
122
+ </Provider>
123
+ );
124
+ };
125
+
126
+ it('renders with all wrapper components', () => {
127
+ const { container } = renderWithStore();
128
+
129
+ expect(container.querySelector('[data-testid="dropzone"]')).toBeTruthy();
130
+ expect(container.querySelector('[data-testid="droppable-renderer"]')).toBeTruthy();
131
+ expect(container.querySelector('[data-testid="textfield-Background"]')).toBeTruthy();
132
+ });
133
+
134
+ it('applies width style and error class', () => {
135
+ const { container } = renderWithStore({ width: 500 });
136
+ const assetFieldDiv: HTMLElement = container.querySelector('.asset-field');
137
+ expect(assetFieldDiv.style.width).toBe('500px');
138
+ expect(assetFieldDiv.classList.contains('error')).toBe(false);
139
+ });
140
+
141
+ it('defaults to 100% width when no width prop is provided', () => {
142
+ const { container } = renderWithStore({ width: undefined });
143
+ const assetFieldDiv: HTMLElement = container.querySelector('.asset-field');
144
+ expect(assetFieldDiv.style.width).toBe('100%');
145
+ });
146
+
147
+ it('shows drag prompt placeholder when no assetId', () => {
148
+ const { container } = renderWithStore({ assetId: null });
149
+ const input = container.querySelector('input');
150
+ expect(input.placeholder).toBe('Drag Asset Here');
151
+ });
152
+
153
+ it('calls api.getAssetItem on mount when assetId is present', () => {
154
+ const mockApi = createMockApi();
155
+ renderWithStore({ api: mockApi });
156
+ expect(mockApi.getAssetItem).toHaveBeenCalledWith('asset-456');
157
+ });
158
+
159
+ it('does not call api.getAssetItem on mount when assetId is absent', () => {
160
+ const mockApi = createMockApi();
161
+ renderWithStore({ api: mockApi, assetId: null });
162
+ expect(mockApi.getAssetItem).not.toHaveBeenCalled();
163
+ });
164
+
165
+ it('displays asset name after successful API load', async () => {
166
+ const mockApi = createMockApi({ name: 'my-video.mp4' });
167
+ const { container } = renderWithStore({ api: mockApi });
168
+
169
+ await vi.waitFor(() => {
170
+ const input = container.querySelector('input');
171
+ expect(input.value).toBe('my-video.mp4');
172
+ });
173
+ });
174
+
175
+ it('displays error message after failed API load', async () => {
176
+ const mockApi = createMockApi(null, true);
177
+ const { container } = renderWithStore({ api: mockApi });
178
+
179
+ await vi.waitFor(() => {
180
+ const input = container.querySelector('input');
181
+ expect(input.value).toContain('Could not find asset');
182
+ });
183
+ });
184
+
185
+ it('shows filter buttons when accepts is a string and assetName is set', async () => {
186
+ const mockApi = createMockApi({ name: 'loaded-asset.png' });
187
+ const { container } = renderWithStore({ api: mockApi, accepts: 'image' });
188
+
189
+ await vi.waitFor(() => {
190
+ const buttonsContainer = container.querySelector('[data-testid="buttons-container"]');
191
+ expect(buttonsContainer).toBeTruthy();
192
+
193
+ const filterTypeBtn = container.querySelector(
194
+ '[data-testid="btn-Filter assets to match Asset type"]'
195
+ );
196
+ expect(filterTypeBtn).toBeTruthy();
197
+
198
+ const filterNameBtn = container.querySelector(
199
+ '[data-testid="btn-Filter assets to the selected Asset"]'
200
+ );
201
+ expect(filterNameBtn).toBeTruthy();
202
+ });
203
+ });
204
+
205
+ it('shows clear button when assetId is present', () => {
206
+ const { container } = renderWithStore();
207
+
208
+ const clearBtn = container.querySelector('[data-testid="btn-Clear the selected Asset"]');
209
+ expect(clearBtn).toBeTruthy();
210
+ });
211
+
212
+ it('does not show filter buttons when accepts is an array', async () => {
213
+ const mockApi = createMockApi({ name: 'loaded.png' });
214
+ const { container } = renderWithStore({ api: mockApi, accepts: ['image', 'video'] });
215
+
216
+ await vi.waitFor(() => {
217
+ const filterTypeBtn = container.querySelector(
218
+ '[data-testid="btn-Filter assets to match Asset type"]'
219
+ );
220
+ expect(filterTypeBtn).toBeFalsy();
221
+ });
222
+ });
223
+
224
+ it('reloads asset when assetList changes via dispatch', () => {
225
+ const mockApi = createMockApi({ name: 'initial.png' });
226
+ const reducer = (
227
+ state: any = {
228
+ assetList: { loading: false, page: 1, total_pages: 1, asset_count: 0, assets: [] }
229
+ },
230
+ action: any
231
+ ) => {
232
+ if (action.type === 'UPDATE_ASSET_LIST') {
233
+ return { ...state, assetList: action.payload };
234
+ }
235
+ return state;
236
+ };
237
+ const store = createStore(reducer);
238
+
239
+ render(
240
+ <Provider store={store}>
241
+ <AssetFieldConnected
242
+ {...defaultProps}
243
+ api={mockApi}
244
+ />
245
+ </Provider>
246
+ );
247
+
248
+ mockApi.getAssetItem.mockClear();
249
+
250
+ act(() => {
251
+ store.dispatch({
252
+ type: 'UPDATE_ASSET_LIST',
253
+ payload: {
254
+ loading: false,
255
+ page: 2,
256
+ total_pages: 2,
257
+ asset_count: 10,
258
+ assets: [{ id: '1' }]
259
+ }
260
+ });
261
+ });
262
+
263
+ act(() => {
264
+ vi.advanceTimersByTime(350);
265
+ });
266
+
267
+ expect(mockApi.getAssetItem).toHaveBeenCalled();
268
+ });
269
+
270
+ it('clears timeout on unmount', () => {
271
+ const clearTimeoutSpy = vi.spyOn(global, 'clearTimeout');
272
+ const { unmount } = renderWithStore();
273
+ unmount();
274
+ expect(clearTimeoutSpy).toHaveBeenCalled();
275
+ clearTimeoutSpy.mockRestore();
276
+ });
277
+
278
+ it('exercises setFilter with string accepts', () => {
279
+ const { container } = renderWithStore({ accepts: 'image' });
280
+ const filterBtn: HTMLElement = container.querySelector(
281
+ '[data-testid="btn-Filter assets to match Asset type"]'
282
+ );
283
+ expect(filterBtn).toBeTruthy();
284
+ filterBtn?.click();
285
+ });
286
+
287
+ it('exercises setFilter with no accepts', () => {
288
+ const { container } = renderWithStore({ accepts: undefined });
289
+ const filterBtn = container.querySelector(
290
+ '[data-testid="btn-Filter assets to match Asset type"]'
291
+ );
292
+ expect(filterBtn).toBeFalsy();
293
+ });
294
+
295
+ it('exercises clearAsset button', async () => {
296
+ const onChangeMock = vi.fn();
297
+ const { container } = renderWithStore({ onChange: onChangeMock });
298
+ const clearBtn: HTMLElement = container.querySelector(
299
+ '[data-testid="btn-Clear the selected Asset"]'
300
+ );
301
+ expect(clearBtn).toBeTruthy();
302
+ clearBtn?.click();
303
+
304
+ await vi.waitFor(() => {
305
+ expect(onChangeMock).toHaveBeenCalledWith(null);
306
+ });
307
+ });
308
+
309
+ it('exercises setFilterToAsset button', async () => {
310
+ const mockApi = createMockApi({ name: 'my-asset.png' });
311
+ const { container } = renderWithStore({ api: mockApi, accepts: 'image' });
312
+
313
+ await vi.waitFor(() => {
314
+ const filterNameBtn: HTMLElement = container.querySelector(
315
+ '[data-testid="btn-Filter assets to the selected Asset"]'
316
+ );
317
+ expect(filterNameBtn).toBeTruthy();
318
+ filterNameBtn?.click();
319
+ });
320
+ });
321
+
322
+ it('exercises onAssetDrop with matching type', () => {
323
+ const onChangeMock = vi.fn();
324
+ const WrappedComponent = AssetFieldConnected.WrappedComponent;
325
+
326
+ const instance = new WrappedComponent({
327
+ ...defaultProps,
328
+ onChange: onChangeMock,
329
+ accepts: 'image',
330
+ updateFilters: vi.fn(),
331
+ uploadAssets: vi.fn(),
332
+ assetList: { loading: false, page: 1, total_pages: 1, asset_count: 0, assets: [] }
333
+ });
334
+
335
+ instance.setState = vi.fn((stateOrFn, callback) => {
336
+ if (typeof stateOrFn === 'object') {
337
+ instance.state = { ...instance.state, ...stateOrFn };
338
+ }
339
+ if (callback) callback();
340
+ });
341
+
342
+ instance.onAssetDrop(
343
+ { rowData: { name: 'dropped.png', type: 'image', id: 'asset-789' } },
344
+ null
345
+ );
346
+
347
+ expect(instance.setState).toHaveBeenCalled();
348
+ expect(onChangeMock).toHaveBeenCalledWith({
349
+ name: 'dropped.png',
350
+ type: 'image',
351
+ id: 'asset-789'
352
+ });
353
+ });
354
+
355
+ it('exercises onAssetDrop with mismatched type and onError', () => {
356
+ const onErrorMock = vi.fn();
357
+ const WrappedComponent = AssetFieldConnected.WrappedComponent;
358
+
359
+ const instance = new WrappedComponent({
360
+ ...defaultProps,
361
+ onError: onErrorMock,
362
+ accepts: 'image',
363
+ updateFilters: vi.fn(),
364
+ uploadAssets: vi.fn(),
365
+ assetList: { loading: false, page: 1, total_pages: 1, asset_count: 0, assets: [] }
366
+ });
367
+
368
+ instance.setState = vi.fn();
369
+
370
+ instance.onAssetDrop(
371
+ { rowData: { name: 'dropped.mp4', type: 'video', id: 'asset-999' } },
372
+ null
373
+ );
374
+
375
+ expect(onErrorMock).toHaveBeenCalled();
376
+ });
377
+
378
+ it('exercises onAssetDrop with array accepts and mismatched type', () => {
379
+ const onErrorMock = vi.fn();
380
+ const WrappedComponent = AssetFieldConnected.WrappedComponent;
381
+
382
+ const instance = new WrappedComponent({
383
+ ...defaultProps,
384
+ onError: onErrorMock,
385
+ accepts: ['image', 'audio'],
386
+ updateFilters: vi.fn(),
387
+ uploadAssets: vi.fn(),
388
+ assetList: { loading: false, page: 1, total_pages: 1, asset_count: 0, assets: [] }
389
+ });
390
+
391
+ instance.setState = vi.fn();
392
+
393
+ instance.onAssetDrop(
394
+ { rowData: { name: 'dropped.mp4', type: 'video', id: 'asset-999' } },
395
+ null
396
+ );
397
+
398
+ expect(onErrorMock).toHaveBeenCalledWith(expect.stringContaining('image or audio'));
399
+ });
400
+
401
+ it('exercises onFileDrop with monitor', () => {
402
+ const WrappedComponent = AssetFieldConnected.WrappedComponent;
403
+ const uploadAssetsMock = vi.fn();
404
+
405
+ const instance = new WrappedComponent({
406
+ ...defaultProps,
407
+ accepts: 'image',
408
+ updateFilters: vi.fn(),
409
+ uploadAssets: uploadAssetsMock,
410
+ assetList: { loading: false, page: 1, total_pages: 1, asset_count: 0, assets: [] }
411
+ });
412
+
413
+ instance.setState = vi.fn();
414
+
415
+ const mockMonitor = {
416
+ getItem: () => ({
417
+ files: [new File(['content'], 'test.png', { type: 'image/png' })]
418
+ })
419
+ };
420
+
421
+ instance.onFileDrop(null, mockMonitor);
422
+ expect(uploadAssetsMock).toHaveBeenCalled();
423
+ });
424
+
425
+ it('exercises onFileDrop without monitor', () => {
426
+ const WrappedComponent = AssetFieldConnected.WrappedComponent;
427
+
428
+ const instance = new WrappedComponent({
429
+ ...defaultProps,
430
+ updateFilters: vi.fn(),
431
+ uploadAssets: vi.fn(),
432
+ assetList: { loading: false, page: 1, total_pages: 1, asset_count: 0, assets: [] }
433
+ });
434
+
435
+ instance.setState = vi.fn();
436
+ instance.onFileDrop(null, null);
437
+ expect(instance.setState).not.toHaveBeenCalled();
438
+ });
439
+ });
@@ -0,0 +1,134 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import React from 'react';
3
+ import { render, fireEvent } from '@testing-library/react';
4
+ import { Provider } from 'react-redux';
5
+ import { legacy_createStore as createStore } from 'redux';
6
+ import { copying } from '../../constants/copy';
7
+
8
+ vi.mock('../../redux/actions/asset-filters', () => ({
9
+ updateFilters: vi.fn(() => ({ type: 'MOCK_UPDATE_FILTERS' })),
10
+ default: { UPDATE: 'assetFilters/UPDATE', RESET: 'footageFilters/RESET' }
11
+ }));
12
+
13
+ import AssetsTableAssetIdCellMemoized from './AssetsTableAssetIdCell';
14
+
15
+ const MOCK_ASSET_ID = 'asset-abc-123';
16
+
17
+ const createMockStore = (overrides = {}) => {
18
+ const defaultState = {
19
+ assetFilters: {},
20
+ ...overrides
21
+ };
22
+ return createStore((state = defaultState) => state);
23
+ };
24
+
25
+ const buildCellProp = (assetId: string) => ({
26
+ row: {
27
+ original: { id: assetId }
28
+ }
29
+ });
30
+
31
+ const renderComponent = (propOverrides = {}) => {
32
+ const defaultProps = {
33
+ cell: buildCellProp(MOCK_ASSET_ID),
34
+ onNotification: vi.fn(),
35
+ onError: vi.fn(),
36
+ ...propOverrides
37
+ };
38
+
39
+ const store = createMockStore();
40
+
41
+ const result = render(
42
+ <Provider store={store}>
43
+ <AssetsTableAssetIdCellMemoized {...defaultProps} />
44
+ </Provider>
45
+ );
46
+
47
+ return { ...result, props: defaultProps };
48
+ };
49
+
50
+ describe('AssetsTableAssetIdCell', () => {
51
+ let clipboardWriteTextMock: ReturnType<typeof vi.fn>;
52
+
53
+ beforeEach(() => {
54
+ clipboardWriteTextMock = vi.fn();
55
+ Object.assign(navigator, {
56
+ clipboard: {
57
+ writeText: clipboardWriteTextMock
58
+ }
59
+ });
60
+ });
61
+
62
+ it('renders the asset id in a div with the correct class', () => {
63
+ const { container } = renderComponent();
64
+ const idCell = container.querySelector('.imposium-asset-id');
65
+
66
+ expect(idCell).toBeTruthy();
67
+ expect(idCell.textContent).toBe(MOCK_ASSET_ID);
68
+ });
69
+
70
+ it('calls onNotification after successful clipboard copy', async () => {
71
+ clipboardWriteTextMock.mockResolvedValueOnce(undefined);
72
+ const { container, props } = renderComponent();
73
+
74
+ const idCell: HTMLElement = container.querySelector('.imposium-asset-id');
75
+ fireEvent.click(idCell);
76
+
77
+ await vi.waitFor(() => {
78
+ expect(clipboardWriteTextMock).toHaveBeenCalledWith(MOCK_ASSET_ID);
79
+ expect(props.onNotification).toHaveBeenCalledWith(copying.copied);
80
+ });
81
+ });
82
+
83
+ it('calls onError after failed clipboard copy', async () => {
84
+ clipboardWriteTextMock.mockRejectedValueOnce(new Error('clipboard denied'));
85
+ const { container, props } = renderComponent();
86
+
87
+ const idCell: HTMLElement = container.querySelector('.imposium-asset-id');
88
+ fireEvent.click(idCell);
89
+
90
+ await vi.waitFor(() => {
91
+ expect(props.onError).toHaveBeenCalledWith(copying.error);
92
+ });
93
+ });
94
+
95
+ it('does not throw when onNotification is not provided', async () => {
96
+ clipboardWriteTextMock.mockResolvedValueOnce(undefined);
97
+ const { container } = renderComponent({
98
+ onNotification: undefined,
99
+ onError: undefined
100
+ });
101
+
102
+ const idCell: HTMLElement = container.querySelector('.imposium-asset-id');
103
+ fireEvent.click(idCell);
104
+
105
+ await vi.waitFor(() => {
106
+ expect(clipboardWriteTextMock).toHaveBeenCalledWith(MOCK_ASSET_ID);
107
+ });
108
+ });
109
+
110
+ it('does not throw when onError is not provided', async () => {
111
+ clipboardWriteTextMock.mockRejectedValueOnce(new Error('denied'));
112
+ const { container } = renderComponent({
113
+ onNotification: undefined,
114
+ onError: undefined
115
+ });
116
+
117
+ const idCell: HTMLElement = container.querySelector('.imposium-asset-id');
118
+ fireEvent.click(idCell);
119
+
120
+ await vi.waitFor(() => {
121
+ expect(clipboardWriteTextMock).toHaveBeenCalled();
122
+ });
123
+ });
124
+
125
+ it('renders with a different asset id', () => {
126
+ const differentId = 'other-asset-456';
127
+ const { container } = renderComponent({
128
+ cell: buildCellProp(differentId)
129
+ });
130
+
131
+ const idCell = container.querySelector('.imposium-asset-id');
132
+ expect(idCell.textContent).toBe(differentId);
133
+ });
134
+ });
@@ -0,0 +1,95 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import React from 'react';
3
+ import { render } from '@testing-library/react';
4
+ import { Provider } from 'react-redux';
5
+ import { legacy_createStore as createStore } from 'redux';
6
+
7
+ vi.mock('../text-field/TextField', () => ({
8
+ default: ({ className, submittable, submittableType, value, doSubmit, header }: any) => (
9
+ <div
10
+ data-testid='mock-text-field'
11
+ data-classname={className}
12
+ data-submittable={submittable}
13
+ data-submittable-type={submittableType}
14
+ data-value={value || ''}
15
+ data-header={header}>
16
+ <button
17
+ data-testid='submit-trigger'
18
+ onClick={() => doSubmit('new-filter-value')}>
19
+ Submit
20
+ </button>
21
+ </div>
22
+ )
23
+ }));
24
+
25
+ vi.mock('../../redux/actions/asset-filters', () => ({
26
+ updateFilters: vi.fn((filters) => ({ type: 'assetFilters/UPDATE', newFilters: filters })),
27
+ default: { UPDATE: 'assetFilters/UPDATE', RESET: 'footageFilters/RESET' }
28
+ }));
29
+
30
+ import AssetsTableAssetIdFilterMemoized from './AssetsTableAssetIdFilter';
31
+
32
+ const MOCK_ASSET_ID_FILTER = 'existing-filter-123';
33
+
34
+ const createMockStore = (assetIdFilter = '') => {
35
+ const initialState = { assetFilters: { id: assetIdFilter } };
36
+ return createStore((state = initialState, action: any) => {
37
+ if (action.type === 'assetFilters/UPDATE') {
38
+ return {
39
+ ...state,
40
+ assetFilters: { ...state.assetFilters, ...action.newFilters }
41
+ };
42
+ }
43
+ return state;
44
+ });
45
+ };
46
+
47
+ const renderComponent = (assetIdFilter = '') => {
48
+ const store = createMockStore(assetIdFilter);
49
+
50
+ const result = render(
51
+ <Provider store={store}>
52
+ <AssetsTableAssetIdFilterMemoized />
53
+ </Provider>
54
+ );
55
+
56
+ return { ...result, store };
57
+ };
58
+
59
+ describe('AssetsTableAssetIdFilter', () => {
60
+ it('renders the TextField with correct props', () => {
61
+ const { getByTestId } = renderComponent(MOCK_ASSET_ID_FILTER);
62
+ const textField = getByTestId('mock-text-field');
63
+
64
+ expect(textField.getAttribute('data-classname')).toBe('asset-id');
65
+ expect(textField.getAttribute('data-submittable')).toBe('true');
66
+ expect(textField.getAttribute('data-submittable-type')).toBe('search');
67
+ expect(textField.getAttribute('data-value')).toBe(MOCK_ASSET_ID_FILTER);
68
+ expect(textField.getAttribute('data-header')).toBe('true');
69
+ });
70
+
71
+ it('dispatches updateFilters with the submitted value', () => {
72
+ const { getByTestId, store } = renderComponent();
73
+ const submitButton = getByTestId('submit-trigger');
74
+
75
+ submitButton.click();
76
+
77
+ const storeState = store.getState() as any;
78
+ expect(storeState.assetFilters.id).toBe('new-filter-value');
79
+ });
80
+
81
+ it('renders with an empty filter value when no id is set', () => {
82
+ const { getByTestId } = renderComponent();
83
+ const textField = getByTestId('mock-text-field');
84
+
85
+ expect(textField.getAttribute('data-value')).toBe('');
86
+ });
87
+
88
+ it('passes the current filter value from the redux store', () => {
89
+ const filterValue = 'search-term-abc';
90
+ const { getByTestId } = renderComponent(filterValue);
91
+ const textField = getByTestId('mock-text-field');
92
+
93
+ expect(textField.getAttribute('data-value')).toBe(filterValue);
94
+ });
95
+ });