@imposium-hub/components 2.14.5 → 2.14.7-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 (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,159 @@
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
+ let capturedDoSubmit: (value: string) => void;
8
+ let capturedRemoveHandlers: Record<string, () => void> = {};
9
+
10
+ vi.mock('../tag/Tag', () => ({
11
+ default: ({ copy, removeHandler }: any) => {
12
+ capturedRemoveHandlers[copy] = removeHandler;
13
+ return (
14
+ <div
15
+ data-testid={`tag-${copy}`}
16
+ className='mock-tag'>
17
+ <span>{copy}</span>
18
+ <button
19
+ data-testid={`remove-${copy}`}
20
+ onClick={removeHandler}>
21
+ x
22
+ </button>
23
+ </div>
24
+ );
25
+ }
26
+ }));
27
+
28
+ vi.mock('../text-field/TextField', () => ({
29
+ default: ({ submittable, submittableType, placeholder, value, doSubmit, suggestions }: any) => {
30
+ capturedDoSubmit = doSubmit;
31
+ return (
32
+ <div
33
+ data-testid='mock-text-field'
34
+ data-submittable={submittable}
35
+ data-submittable-type={submittableType}
36
+ data-placeholder={placeholder}
37
+ data-value={value}
38
+ data-suggestions={JSON.stringify(suggestions || [])}>
39
+ <button
40
+ data-testid='submit-trigger'
41
+ onClick={() => doSubmit('new-tag')}>
42
+ Add
43
+ </button>
44
+ </div>
45
+ );
46
+ }
47
+ }));
48
+
49
+ vi.mock('../../redux/actions/asset-list', () => ({
50
+ addAssetTag: vi.fn((_api, _id, _tags) => ({ type: 'MOCK_ADD_TAG' })),
51
+ deleteAssetTag: vi.fn((_api, _id, _tag) => ({ type: 'MOCK_DELETE_TAG' })),
52
+ default: {}
53
+ }));
54
+
55
+ import AssetsTableComplexTagCellMemoized from './AssetsTableComplexTagCell';
56
+ import { addAssetTag, deleteAssetTag } from '../../redux/actions/asset-list';
57
+
58
+ const MOCK_ASSET_ID = 'asset-999';
59
+ const MOCK_API = { addAssetTag: vi.fn(), deleteAssetTag: vi.fn() };
60
+ const MOCK_SUGGESTIONS = ['alpha', 'beta', 'gamma'];
61
+
62
+ const createMockStore = (assetTags: string[] = MOCK_SUGGESTIONS) => {
63
+ const initialState = { assetTags };
64
+ return createStore((state = initialState) => state);
65
+ };
66
+
67
+ const buildCellProp = (tags: string[] = ['tag-a', 'tag-b']) => ({
68
+ row: {
69
+ original: { id: MOCK_ASSET_ID, tags }
70
+ }
71
+ });
72
+
73
+ const renderComponent = (tagOverrides?: string[], storeOverrides?: string[]) => {
74
+ capturedRemoveHandlers = {};
75
+ const store = createMockStore(storeOverrides);
76
+ const cell = buildCellProp(tagOverrides);
77
+
78
+ const result = render(
79
+ <Provider store={store}>
80
+ <AssetsTableComplexTagCellMemoized
81
+ cell={cell}
82
+ api={MOCK_API}
83
+ />
84
+ </Provider>
85
+ );
86
+
87
+ return { ...result, store };
88
+ };
89
+
90
+ describe('AssetsTableComplexTagCell', () => {
91
+ it('renders existing tags as Tag components', () => {
92
+ const tags = ['tag-a', 'tag-b', 'tag-c'];
93
+ const { getByTestId } = renderComponent(tags);
94
+
95
+ tags.forEach((tag) => {
96
+ expect(getByTestId(`tag-${tag}`)).toBeTruthy();
97
+ });
98
+ });
99
+
100
+ it('deduplicates tags before rendering', () => {
101
+ const { container } = renderComponent(['dup', 'dup', 'unique']);
102
+ const renderedTags = container.querySelectorAll('.mock-tag');
103
+
104
+ expect(renderedTags).toHaveLength(2);
105
+ });
106
+
107
+ it('renders the TextField with correct props', () => {
108
+ const { getByTestId } = renderComponent();
109
+ const textField = getByTestId('mock-text-field');
110
+
111
+ expect(textField.getAttribute('data-submittable')).toBe('true');
112
+ expect(textField.getAttribute('data-submittable-type')).toBe('add');
113
+ expect(textField.getAttribute('data-placeholder')).toBe('+');
114
+ expect(textField.getAttribute('data-value')).toBe('');
115
+ });
116
+
117
+ it('passes assetTags from store as suggestions', () => {
118
+ const suggestions = ['x', 'y', 'z'];
119
+ const { getByTestId } = renderComponent([], suggestions);
120
+ const textField = getByTestId('mock-text-field');
121
+
122
+ const suggestionsAttr = textField.getAttribute('data-suggestions');
123
+ expect(suggestionsAttr).toBeTruthy();
124
+ expect(JSON.parse(suggestionsAttr)).toEqual(suggestions);
125
+ });
126
+
127
+ it('dispatches addAssetTag when submitting a new tag', () => {
128
+ renderComponent(['existing']);
129
+
130
+ capturedDoSubmit('brand-new');
131
+
132
+ expect(addAssetTag).toHaveBeenCalledWith(MOCK_API, MOCK_ASSET_ID, 'brand-new');
133
+ });
134
+
135
+ it('does not dispatch addAssetTag when submitting a duplicate tag', () => {
136
+ vi.mocked(addAssetTag).mockClear();
137
+ renderComponent(['already-here']);
138
+
139
+ capturedDoSubmit('already-here');
140
+
141
+ expect(addAssetTag).not.toHaveBeenCalled();
142
+ });
143
+
144
+ it('dispatches deleteAssetTag when removing a tag', () => {
145
+ renderComponent(['removable']);
146
+
147
+ capturedRemoveHandlers['removable']();
148
+
149
+ expect(deleteAssetTag).toHaveBeenCalledWith(MOCK_API, MOCK_ASSET_ID, 'removable');
150
+ });
151
+
152
+ it('renders with no tags', () => {
153
+ const { container, getByTestId } = renderComponent([]);
154
+ const renderedTags = container.querySelectorAll('.mock-tag');
155
+
156
+ expect(renderedTags).toHaveLength(0);
157
+ expect(getByTestId('mock-text-field')).toBeTruthy();
158
+ });
159
+ });
@@ -0,0 +1,106 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import React from 'react';
3
+ import { render } from '@testing-library/react';
4
+
5
+ const MOCK_FORMATTED_DATE = '4/9/2026 3:00 PM';
6
+
7
+ vi.mock('../../Util', async (importOriginal) => {
8
+ const actual = (await importOriginal()) as any;
9
+ return {
10
+ ...actual,
11
+ formatDateDefault: vi.fn(() => MOCK_FORMATTED_DATE)
12
+ };
13
+ });
14
+
15
+ import AssetsTableDateCellMemoized from './AssetsTableDateCell';
16
+ import { formatDateDefault } from '../../Util';
17
+
18
+ const MOCK_UNIX_TIMESTAMP = 1776013200;
19
+
20
+ const buildCellProp = (values: Record<string, any>) => ({
21
+ row: { values }
22
+ });
23
+
24
+ describe('AssetsTableDateCell', () => {
25
+ it('renders date_created when date_created prop is true and value exists', () => {
26
+ const cell = buildCellProp({ date_created: MOCK_UNIX_TIMESTAMP });
27
+ const { container } = render(
28
+ <AssetsTableDateCellMemoized
29
+ cell={cell}
30
+ date_created={true}
31
+ />
32
+ );
33
+
34
+ expect(formatDateDefault).toHaveBeenCalledWith(MOCK_UNIX_TIMESTAMP);
35
+ expect(container.textContent).toBe(MOCK_FORMATTED_DATE);
36
+ });
37
+
38
+ it('renders date_modified when date_created is false', () => {
39
+ const cell = buildCellProp({ date_modified: MOCK_UNIX_TIMESTAMP });
40
+ const { container } = render(
41
+ <AssetsTableDateCellMemoized
42
+ cell={cell}
43
+ date_created={false}
44
+ />
45
+ );
46
+
47
+ expect(formatDateDefault).toHaveBeenCalledWith(MOCK_UNIX_TIMESTAMP);
48
+ expect(container.textContent).toBe(MOCK_FORMATTED_DATE);
49
+ });
50
+
51
+ it('falls through to date_updated when date_modified is absent', () => {
52
+ const cell = buildCellProp({ date_updated: MOCK_UNIX_TIMESTAMP });
53
+ const { container } = render(
54
+ <AssetsTableDateCellMemoized
55
+ cell={cell}
56
+ date_created={false}
57
+ />
58
+ );
59
+
60
+ expect(formatDateDefault).toHaveBeenCalledWith(MOCK_UNIX_TIMESTAMP);
61
+ expect(container.textContent).toBe(MOCK_FORMATTED_DATE);
62
+ });
63
+
64
+ it('prefers date_modified over date_updated when both exist', () => {
65
+ const modifiedTimestamp = 1776099600;
66
+ const cell = buildCellProp({
67
+ date_modified: modifiedTimestamp,
68
+ date_updated: MOCK_UNIX_TIMESTAMP
69
+ });
70
+ const { container } = render(
71
+ <AssetsTableDateCellMemoized
72
+ cell={cell}
73
+ date_created={false}
74
+ />
75
+ );
76
+
77
+ expect(formatDateDefault).toHaveBeenCalledWith(modifiedTimestamp);
78
+ expect(container.textContent).toBe(MOCK_FORMATTED_DATE);
79
+ });
80
+
81
+ it('skips date_created value when date_created prop is false', () => {
82
+ vi.mocked(formatDateDefault).mockClear();
83
+ const cell = buildCellProp({ date_created: MOCK_UNIX_TIMESTAMP });
84
+ const { container } = render(
85
+ <AssetsTableDateCellMemoized
86
+ cell={cell}
87
+ date_created={false}
88
+ />
89
+ );
90
+
91
+ expect(formatDateDefault).not.toHaveBeenCalled();
92
+ expect(container.innerHTML).toBe('');
93
+ });
94
+
95
+ it('returns null when no date values are present', () => {
96
+ const cell = buildCellProp({});
97
+ const { container } = render(
98
+ <AssetsTableDateCellMemoized
99
+ cell={cell}
100
+ date_created={false}
101
+ />
102
+ );
103
+
104
+ expect(container.innerHTML).toBe('');
105
+ });
106
+ });
@@ -0,0 +1,383 @@
1
+ import React from 'react';
2
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
3
+ import { render, fireEvent, screen } from '../../test/utils';
4
+ import NumberField, { validateNumInput } from './NumberField';
5
+
6
+ describe('NumberField', () => {
7
+ const defaultProps = {
8
+ value: 10,
9
+ onChange: vi.fn(),
10
+ label: 'Test Number Field'
11
+ };
12
+
13
+ beforeEach(() => {
14
+ vi.clearAllMocks();
15
+ });
16
+
17
+ describe('Rendering', () => {
18
+ it('renders without crashing', () => {
19
+ render(<NumberField {...defaultProps} />);
20
+ const input = screen.getByRole('spinbutton');
21
+ expect(input).toBeDefined();
22
+ });
23
+
24
+ it('displays the correct value', () => {
25
+ render(
26
+ <NumberField
27
+ {...defaultProps}
28
+ value={25}
29
+ />
30
+ );
31
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
32
+ expect(input.value).toBe('25');
33
+ });
34
+
35
+ it('displays placeholder when provided', () => {
36
+ render(
37
+ <NumberField
38
+ {...defaultProps}
39
+ placeholder='Enter number'
40
+ />
41
+ );
42
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
43
+ expect(input.placeholder).toBe('Enter number');
44
+ });
45
+
46
+ it('displays empty string when value is null', () => {
47
+ render(
48
+ <NumberField
49
+ {...defaultProps}
50
+ value={null}
51
+ />
52
+ );
53
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
54
+ expect(input.value).toBe('');
55
+ });
56
+
57
+ it('applies min and max attributes', () => {
58
+ render(
59
+ <NumberField
60
+ {...defaultProps}
61
+ min={0}
62
+ max={100}
63
+ />
64
+ );
65
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
66
+ expect(input.min).toBe('0');
67
+ expect(input.max).toBe('100');
68
+ });
69
+
70
+ it('sets readOnly attribute when readOnly prop is true', () => {
71
+ render(
72
+ <NumberField
73
+ {...defaultProps}
74
+ readOnly
75
+ />
76
+ );
77
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
78
+ expect(input.readOnly).toBe(true);
79
+ });
80
+ });
81
+
82
+ describe('User Interactions', () => {
83
+ it('calls onChange when value changes', () => {
84
+ const onChange = vi.fn();
85
+ render(
86
+ <NumberField
87
+ {...defaultProps}
88
+ onChange={onChange}
89
+ />
90
+ );
91
+
92
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
93
+ fireEvent.change(input, { target: { value: '42' } });
94
+
95
+ expect(onChange).toHaveBeenCalledWith(42);
96
+ });
97
+
98
+ it('calls onChange with min value when empty string is entered', () => {
99
+ const onChange = vi.fn();
100
+ render(
101
+ <NumberField
102
+ {...defaultProps}
103
+ onChange={onChange}
104
+ min={5}
105
+ />
106
+ );
107
+
108
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
109
+ fireEvent.change(input, { target: { value: '' } });
110
+
111
+ expect(onChange).toHaveBeenCalledWith(5);
112
+ });
113
+
114
+ it('parses float values correctly', () => {
115
+ const onChange = vi.fn();
116
+ render(
117
+ <NumberField
118
+ {...defaultProps}
119
+ onChange={onChange}
120
+ />
121
+ );
122
+
123
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
124
+ fireEvent.change(input, { target: { value: '3.14' } });
125
+
126
+ expect(onChange).toHaveBeenCalledWith(3.14);
127
+ });
128
+
129
+ it('calls onBlur when provided', () => {
130
+ const onBlur = vi.fn();
131
+ render(
132
+ <NumberField
133
+ {...defaultProps}
134
+ onBlur={onBlur}
135
+ />
136
+ );
137
+
138
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
139
+ fireEvent.blur(input, { target: { value: '15' } });
140
+
141
+ expect(onBlur).toHaveBeenCalledWith('15');
142
+ });
143
+
144
+ it('focuses input on mount when focusOnMount is true', () => {
145
+ render(
146
+ <NumberField
147
+ {...defaultProps}
148
+ focusOnMount
149
+ />
150
+ );
151
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
152
+ expect(document.activeElement).toBe(input);
153
+ });
154
+ });
155
+
156
+ describe('Keyboard Interactions', () => {
157
+ it('increases value by 9 when Shift+ArrowUp is pressed', () => {
158
+ const onChange = vi.fn();
159
+ render(
160
+ <NumberField
161
+ {...defaultProps}
162
+ value={10}
163
+ onChange={onChange}
164
+ />
165
+ );
166
+
167
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
168
+ fireEvent.keyDown(input, {
169
+ code: 'ArrowUp',
170
+ shiftKey: true
171
+ });
172
+
173
+ expect(onChange).toHaveBeenCalledWith(19);
174
+ });
175
+
176
+ it('decreases value by 9 when Shift+ArrowDown is pressed', () => {
177
+ const onChange = vi.fn();
178
+ render(
179
+ <NumberField
180
+ {...defaultProps}
181
+ value={20}
182
+ onChange={onChange}
183
+ />
184
+ );
185
+
186
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
187
+ fireEvent.keyDown(input, {
188
+ code: 'ArrowDown',
189
+ shiftKey: true
190
+ });
191
+
192
+ expect(onChange).toHaveBeenCalledWith(11);
193
+ });
194
+
195
+ it('does not call onChange when value would exceed max limit', () => {
196
+ const onChange = vi.fn();
197
+ render(
198
+ <NumberField
199
+ {...defaultProps}
200
+ value={95}
201
+ max={100}
202
+ onChange={onChange}
203
+ />
204
+ );
205
+
206
+ const input = screen.getByRole('spinbutton');
207
+ fireEvent.keyDown(input, {
208
+ code: 'ArrowUp',
209
+ shiftKey: true
210
+ });
211
+
212
+ expect(onChange).not.toHaveBeenCalled();
213
+ });
214
+
215
+ it('sets error state when value would go below min limit', () => {
216
+ const onChange = vi.fn();
217
+ render(
218
+ <NumberField
219
+ {...defaultProps}
220
+ value={5}
221
+ min={0}
222
+ onChange={onChange}
223
+ />
224
+ );
225
+
226
+ const input = screen.getByRole('spinbutton');
227
+ fireEvent.keyDown(input, {
228
+ code: 'ArrowDown',
229
+ shiftKey: true
230
+ });
231
+
232
+ // The component should set error state instead of calling onChange
233
+ const { container } = render(
234
+ <NumberField
235
+ {...defaultProps}
236
+ value={-5}
237
+ min={0}
238
+ />
239
+ );
240
+ const formField = container.querySelector('.number-field.invalid');
241
+ expect(formField).toBeDefined();
242
+ });
243
+ });
244
+
245
+ describe('Validation', () => {
246
+ it('shows error state when value is below minimum', () => {
247
+ const { container } = render(
248
+ <NumberField
249
+ {...defaultProps}
250
+ value={5}
251
+ min={10}
252
+ />
253
+ );
254
+ const formField = container.querySelector('.number-field.invalid');
255
+ expect(formField).toBeDefined();
256
+ });
257
+
258
+ it('shows error state when value is above maximum', () => {
259
+ const { container } = render(
260
+ <NumberField
261
+ {...defaultProps}
262
+ value={150}
263
+ max={100}
264
+ />
265
+ );
266
+ const formField = container.querySelector('.number-field.invalid');
267
+ expect(formField).toBeDefined();
268
+ });
269
+
270
+ it('shows error state for min constraint', () => {
271
+ const { container } = render(
272
+ <NumberField
273
+ {...defaultProps}
274
+ value={5}
275
+ min={10}
276
+ />
277
+ );
278
+ const formField = container.querySelector('.number-field.invalid');
279
+ expect(formField).toBeDefined();
280
+ });
281
+
282
+ it('shows error state for max constraint', () => {
283
+ const { container } = render(
284
+ <NumberField
285
+ {...defaultProps}
286
+ value={150}
287
+ max={100}
288
+ />
289
+ );
290
+ const formField = container.querySelector('.number-field.invalid');
291
+ expect(formField).toBeDefined();
292
+ });
293
+
294
+ it('shows error state for min and max constraints', () => {
295
+ const { container } = render(
296
+ <NumberField
297
+ {...defaultProps}
298
+ value={150}
299
+ min={10}
300
+ max={100}
301
+ />
302
+ );
303
+ const formField = container.querySelector('.number-field.invalid');
304
+ expect(formField).toBeDefined();
305
+ });
306
+
307
+ it('does not show error state when value is valid', () => {
308
+ const { container } = render(
309
+ <NumberField
310
+ {...defaultProps}
311
+ value={50}
312
+ min={10}
313
+ max={100}
314
+ />
315
+ );
316
+ const formField = container.querySelector('.number-field.invalid');
317
+ expect(formField).toBeNull();
318
+ });
319
+ });
320
+
321
+ describe('Component Updates', () => {
322
+ it('updates internal state when props.value changes', () => {
323
+ const { rerender } = render(
324
+ <NumberField
325
+ {...defaultProps}
326
+ value={10}
327
+ />
328
+ );
329
+
330
+ rerender(
331
+ <NumberField
332
+ {...defaultProps}
333
+ value={20}
334
+ />
335
+ );
336
+
337
+ const input: HTMLInputElement = screen.getByRole('spinbutton');
338
+ expect(input.value).toBe('20');
339
+ });
340
+
341
+ it('validates value when props change', () => {
342
+ const { container, rerender } = render(
343
+ <NumberField
344
+ {...defaultProps}
345
+ value={50}
346
+ />
347
+ );
348
+
349
+ rerender(
350
+ <NumberField
351
+ {...defaultProps}
352
+ value={150}
353
+ max={100}
354
+ />
355
+ );
356
+
357
+ const formField = container.querySelector('.number-field.invalid');
358
+ expect(formField).toBeDefined();
359
+ });
360
+ });
361
+ });
362
+
363
+ describe('validateNumInput utility', () => {
364
+ it('returns true for valid values within range', () => {
365
+ expect(validateNumInput(50, 0, 100)).toBe(true);
366
+ expect(validateNumInput(0, 0, 100)).toBe(true);
367
+ expect(validateNumInput(100, 0, 100)).toBe(true);
368
+ });
369
+
370
+ it('returns false for values below minimum', () => {
371
+ expect(validateNumInput(-5, 0, 100)).toBe(false);
372
+ });
373
+
374
+ it('returns false for values above maximum', () => {
375
+ expect(validateNumInput(150, 0, 100)).toBe(false);
376
+ });
377
+
378
+ it('handles undefined min/max values', () => {
379
+ expect(validateNumInput(50, undefined, 100)).toBe(true);
380
+ expect(validateNumInput(50, 0, undefined)).toBe(true);
381
+ expect(validateNumInput(50, undefined, undefined)).toBe(true);
382
+ });
383
+ });
@@ -2,8 +2,8 @@ import * as React from 'react';
2
2
  import FieldWrapper from '../field-wrapper/FieldWrapper';
3
3
  import { IToolTipConfig } from '../Tooltip';
4
4
 
5
- export const validateNumInput = (val: number, min: number, max: number) => {
6
- if (val < min || val > max) {
5
+ export const validateNumInput = (val: number, min?: number, max?: number) => {
6
+ if ((min !== undefined && val < min) || (max !== undefined && val > max)) {
7
7
  return false;
8
8
  } else {
9
9
  return true;
@@ -15,7 +15,7 @@ interface INumberFieldProps {
15
15
  label?: any;
16
16
  placeholder?: string;
17
17
  readOnly?: boolean;
18
- value: number;
18
+ value: number | null;
19
19
  tooltip?: IToolTipConfig | string;
20
20
  width?: string | number;
21
21
  onChange?(e): void;
@@ -60,10 +60,14 @@ class NumberField extends React.PureComponent<INumberFieldProps, INumberFieldSta
60
60
  if (this.props.focusOnMount && this.inputRef.current) {
61
61
  this.inputRef.current.focus();
62
62
  }
63
- this.setState({
64
- error: false,
65
- value: this.props.value
66
- });
63
+ this.setState(
64
+ {
65
+ value: this.props.value
66
+ },
67
+ () => {
68
+ this.validateValue(this.props.value);
69
+ }
70
+ );
67
71
  }
68
72
 
69
73
  public componentDidUpdate(prevProps): void {
@@ -86,15 +90,17 @@ class NumberField extends React.PureComponent<INumberFieldProps, INumberFieldSta
86
90
  }
87
91
 
88
92
  private onChange(e) {
89
- this.validateValue(e.target.value);
90
93
  let val = e.target.value;
94
+
95
+ this.validateValue(val);
96
+
91
97
  if (val === '' || val === null) {
92
98
  val = this.props.min;
93
99
  } else {
94
100
  val = parseFloat(val);
95
101
  }
96
102
 
97
- this.props.onChange(val);
103
+ this.setState({ value: val }, () => this.props.onChange(val));
98
104
  }
99
105
 
100
106
  private onKeyDownHandler(e) {