@imposium-hub/components 2.14.7-1 → 2.14.8

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 (229) 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/asset-details/AssetDetails.test.d.ts +1 -0
  10. package/dist/cjs/components/asset-details/AssetDetails.test.js +439 -0
  11. package/dist/cjs/components/asset-details/AssetDetails.test.js.map +1 -0
  12. package/dist/cjs/components/assets/AssetField.test.d.ts +1 -0
  13. package/dist/cjs/components/assets/AssetField.test.js +464 -0
  14. package/dist/cjs/components/assets/AssetField.test.js.map +1 -0
  15. package/dist/cjs/components/assets/AssetsTableAssetIdCell.test.d.ts +1 -0
  16. package/dist/cjs/components/assets/AssetsTableAssetIdCell.test.js +190 -0
  17. package/dist/cjs/components/assets/AssetsTableAssetIdCell.test.js.map +1 -0
  18. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.test.d.ts +1 -0
  19. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.test.js +82 -0
  20. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.test.js.map +1 -0
  21. package/dist/cjs/components/assets/AssetsTableComplexTagCell.test.d.ts +1 -0
  22. package/dist/cjs/components/assets/AssetsTableComplexTagCell.test.js +125 -0
  23. package/dist/cjs/components/assets/AssetsTableComplexTagCell.test.js.map +1 -0
  24. package/dist/cjs/components/assets/AssetsTableDateCell.d.ts +1 -6
  25. package/dist/cjs/components/assets/AssetsTableDateCell.test.d.ts +1 -0
  26. package/dist/cjs/components/assets/AssetsTableDateCell.test.js +116 -0
  27. package/dist/cjs/components/assets/AssetsTableDateCell.test.js.map +1 -0
  28. package/dist/cjs/components/assets/AssetsTableGlobalCell.d.ts +1 -5
  29. package/dist/cjs/components/assets/AssetsTablePreviewCell.d.ts +1 -17
  30. package/dist/cjs/components/assets/AssetsTableStatusCell.d.ts +1 -5
  31. package/dist/cjs/components/assets/AssetsTableTagsCell.d.ts +1 -6
  32. package/dist/cjs/components/assets/AssetsTableTypeCell.d.ts +1 -5
  33. package/dist/cjs/components/assets/AssetsTypeIcon.d.ts +1 -5
  34. package/dist/cjs/components/assets/FontAssetPreview.d.ts +1 -1
  35. package/dist/cjs/components/assets/StoryTableTotalRendersCell.d.ts +1 -2
  36. package/dist/cjs/components/button/Button.d.ts +1 -1
  37. package/dist/cjs/components/button/Button.stories.d.ts +5 -6
  38. package/dist/cjs/components/button-group-field/ButtonGroupField.d.ts +1 -1
  39. package/dist/cjs/components/button-group-field/ButtonGroupField.stories.d.ts +1 -2
  40. package/dist/cjs/components/button-menu/ButtonMenu.d.ts +2 -2
  41. package/dist/cjs/components/button-menu/ButtonMenu.stories.d.ts +1 -2
  42. package/dist/cjs/components/button-menu/ButtonMenuItem.d.ts +1 -1
  43. package/dist/cjs/components/card/Card.d.ts +4 -4
  44. package/dist/cjs/components/card/Card.stories.d.ts +1 -2
  45. package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +1 -1
  46. package/dist/cjs/components/checkbox-field/CheckboxField.stories.d.ts +1 -2
  47. package/dist/cjs/components/color-field/ColorField.d.ts +1 -1
  48. package/dist/cjs/components/color-field/ColorFiled.stories.d.ts +1 -2
  49. package/dist/cjs/components/compositions/TextLayer.d.ts +1 -1
  50. package/dist/cjs/components/config-variable-button/ConfigVariableButton.d.ts +1 -42
  51. package/dist/cjs/components/confirm-modal/ConfirmModal.d.ts +1 -2
  52. package/dist/cjs/components/controlled-list/ControlledList.d.ts +2 -2
  53. package/dist/cjs/components/controlled-list/ControlledList.stories.d.ts +1 -2
  54. package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.d.ts +1 -1
  55. package/dist/cjs/components/determinate-loader/DeterminateLoader.stories.d.ts +3 -4
  56. package/dist/cjs/components/dropdown/Dropdown.d.ts +1 -1
  57. package/dist/cjs/components/dropdown/Dropdown.stories.d.ts +1 -1
  58. package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +2 -2
  59. package/dist/cjs/components/field-wrapper/FieldWrapper.stories.d.ts +1 -2
  60. package/dist/cjs/components/font-field/FontField.d.ts +1 -2
  61. package/dist/cjs/components/font-picker/FontPicker.d.ts +1 -1
  62. package/dist/cjs/components/h-rule/HRule.d.ts +1 -2
  63. package/dist/cjs/components/h-rule/HRule.stories.d.ts +2 -3
  64. package/dist/cjs/components/header/ProjectDropdown.d.ts +1 -2
  65. package/dist/cjs/components/list-field/ListField.d.ts +1 -1
  66. package/dist/cjs/components/list-field/ListField.stories.d.ts +1 -2
  67. package/dist/cjs/components/log-viewer/LogViewer.d.ts +1 -1
  68. package/dist/cjs/components/media-variable-field/MediaVariableField.d.ts +1 -1
  69. package/dist/cjs/components/modal/Modal.d.ts +1 -1
  70. package/dist/cjs/components/modal/Modal.stories.d.ts +1 -2
  71. package/dist/cjs/components/number-field/NumberField.d.ts +3 -3
  72. package/dist/cjs/components/number-field/NumberField.js +4 -7
  73. package/dist/cjs/components/number-field/NumberField.js.map +1 -1
  74. package/dist/cjs/components/number-field/NumberField.stories.d.ts +1 -2
  75. package/dist/cjs/components/number-field/NumberField.test.d.ts +1 -0
  76. package/dist/cjs/components/number-field/NumberField.test.js +241 -0
  77. package/dist/cjs/components/number-field/NumberField.test.js.map +1 -0
  78. package/dist/cjs/components/players/AudioPlayer.d.ts +1 -1
  79. package/dist/cjs/components/players/AudioPreview.d.ts +1 -1
  80. package/dist/cjs/components/players/ImagePlayer.d.ts +1 -1
  81. package/dist/cjs/components/players/ImagePreview.d.ts +1 -1
  82. package/dist/cjs/components/players/ImageSequencePlayer.d.ts +1 -1
  83. package/dist/cjs/components/players/TemplatePlayer.d.ts +1 -1
  84. package/dist/cjs/components/players/VideoPlayer.d.ts +1 -1
  85. package/dist/cjs/components/players/VideoPreview.d.ts +1 -1
  86. package/dist/cjs/components/publish-wizard/PublishWizard.d.ts +3 -3
  87. package/dist/cjs/components/publish-wizard/publish/APIIntegration.d.ts +1 -1
  88. package/dist/cjs/components/publish-wizard/publish/HubSpotFlow.d.ts +1 -1
  89. package/dist/cjs/components/publish-wizard/publish/WebpageHosted.d.ts +2 -2
  90. package/dist/cjs/components/section/Section.d.ts +1 -2
  91. package/dist/cjs/components/section/Section.stories.d.ts +2 -3
  92. package/dist/cjs/components/select-field/SelectField.d.ts +1 -1
  93. package/dist/cjs/components/select-field/SelectField.stories.d.ts +1 -2
  94. package/dist/cjs/components/shortcut-menu/ShortcutMenu.stories.d.ts +1 -2
  95. package/dist/cjs/components/slider-field/SliderField.d.ts +1 -1
  96. package/dist/cjs/components/slider-field/SliderField.stories.d.ts +1 -2
  97. package/dist/cjs/components/smpte-field/SMPTEField.d.ts +1 -1
  98. package/dist/cjs/components/tabs/Tabs.stories.d.ts +2 -3
  99. package/dist/cjs/components/tag/Tag.d.ts +1 -9
  100. package/dist/cjs/components/text-area-autocomplete/TextAreaAutocomplete.d.ts +1 -2
  101. package/dist/cjs/components/text-area-field/TextAreaField.d.ts +1 -1
  102. package/dist/cjs/components/text-area-field/TextAreaField.stories.d.ts +1 -2
  103. package/dist/cjs/components/text-field/TextField.d.ts +1 -1
  104. package/dist/cjs/components/text-field/TextField.stories.d.ts +1 -2
  105. package/dist/cjs/components/text-field/TextField.test.d.ts +1 -0
  106. package/dist/cjs/components/text-field/TextField.test.js +540 -0
  107. package/dist/cjs/components/text-field/TextField.test.js.map +1 -0
  108. package/dist/cjs/constants/icons.d.ts +79 -80
  109. package/dist/cjs/test/setup.d.ts +1 -0
  110. package/dist/cjs/test/setup.js +97 -0
  111. package/dist/cjs/test/setup.js.map +1 -0
  112. package/dist/cjs/test/utils.d.ts +26 -0
  113. package/dist/cjs/test/utils.js +44 -0
  114. package/dist/cjs/test/utils.js.map +1 -0
  115. package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  116. package/dist/esm/components/advanced-number-field/AdvancedNumberField.test.d.ts +1 -0
  117. package/dist/esm/components/advanced-number-field/AdvancedNumberField.test.js +361 -0
  118. package/dist/esm/components/advanced-number-field/AdvancedNumberField.test.js.map +1 -0
  119. package/dist/esm/components/anchor-field/AnchorField.d.ts +1 -1
  120. package/dist/esm/components/anchor-field/AnchorField.test.d.ts +1 -0
  121. package/dist/esm/components/anchor-field/AnchorField.test.js +81 -0
  122. package/dist/esm/components/anchor-field/AnchorField.test.js.map +1 -0
  123. package/dist/esm/components/asset-details/AssetDetails.test.d.ts +1 -0
  124. package/dist/esm/components/asset-details/AssetDetails.test.js +367 -0
  125. package/dist/esm/components/asset-details/AssetDetails.test.js.map +1 -0
  126. package/dist/esm/components/assets/AssetField.test.d.ts +1 -0
  127. package/dist/esm/components/assets/AssetField.test.js +311 -0
  128. package/dist/esm/components/assets/AssetField.test.js.map +1 -0
  129. package/dist/esm/components/assets/AssetsTableAssetIdCell.test.d.ts +1 -0
  130. package/dist/esm/components/assets/AssetsTableAssetIdCell.test.js +105 -0
  131. package/dist/esm/components/assets/AssetsTableAssetIdCell.test.js.map +1 -0
  132. package/dist/esm/components/assets/AssetsTableAssetIdFilter.test.d.ts +1 -0
  133. package/dist/esm/components/assets/AssetsTableAssetIdFilter.test.js +63 -0
  134. package/dist/esm/components/assets/AssetsTableAssetIdFilter.test.js.map +1 -0
  135. package/dist/esm/components/assets/AssetsTableComplexTagCell.test.d.ts +1 -0
  136. package/dist/esm/components/assets/AssetsTableComplexTagCell.test.js +100 -0
  137. package/dist/esm/components/assets/AssetsTableComplexTagCell.test.js.map +1 -0
  138. package/dist/esm/components/assets/AssetsTableDateCell.d.ts +1 -6
  139. package/dist/esm/components/assets/AssetsTableDateCell.test.d.ts +1 -0
  140. package/dist/esm/components/assets/AssetsTableDateCell.test.js +60 -0
  141. package/dist/esm/components/assets/AssetsTableDateCell.test.js.map +1 -0
  142. package/dist/esm/components/assets/AssetsTableGlobalCell.d.ts +1 -5
  143. package/dist/esm/components/assets/AssetsTablePreviewCell.d.ts +1 -17
  144. package/dist/esm/components/assets/AssetsTableStatusCell.d.ts +1 -5
  145. package/dist/esm/components/assets/AssetsTableTagsCell.d.ts +1 -6
  146. package/dist/esm/components/assets/AssetsTableTypeCell.d.ts +1 -5
  147. package/dist/esm/components/assets/AssetsTypeIcon.d.ts +1 -5
  148. package/dist/esm/components/assets/FontAssetPreview.d.ts +1 -1
  149. package/dist/esm/components/assets/StoryTableTotalRendersCell.d.ts +1 -2
  150. package/dist/esm/components/button/Button.d.ts +1 -1
  151. package/dist/esm/components/button/Button.stories.d.ts +5 -6
  152. package/dist/esm/components/button-group-field/ButtonGroupField.d.ts +1 -1
  153. package/dist/esm/components/button-group-field/ButtonGroupField.stories.d.ts +1 -2
  154. package/dist/esm/components/button-menu/ButtonMenu.d.ts +2 -2
  155. package/dist/esm/components/button-menu/ButtonMenu.stories.d.ts +1 -2
  156. package/dist/esm/components/button-menu/ButtonMenuItem.d.ts +1 -1
  157. package/dist/esm/components/card/Card.d.ts +4 -4
  158. package/dist/esm/components/card/Card.stories.d.ts +1 -2
  159. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +1 -1
  160. package/dist/esm/components/checkbox-field/CheckboxField.stories.d.ts +1 -2
  161. package/dist/esm/components/color-field/ColorField.d.ts +1 -1
  162. package/dist/esm/components/color-field/ColorFiled.stories.d.ts +1 -2
  163. package/dist/esm/components/compositions/TextLayer.d.ts +1 -1
  164. package/dist/esm/components/config-variable-button/ConfigVariableButton.d.ts +1 -42
  165. package/dist/esm/components/confirm-modal/ConfirmModal.d.ts +1 -2
  166. package/dist/esm/components/controlled-list/ControlledList.d.ts +2 -2
  167. package/dist/esm/components/controlled-list/ControlledList.stories.d.ts +1 -2
  168. package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.d.ts +1 -1
  169. package/dist/esm/components/determinate-loader/DeterminateLoader.stories.d.ts +3 -4
  170. package/dist/esm/components/dropdown/Dropdown.d.ts +1 -1
  171. package/dist/esm/components/dropdown/Dropdown.stories.d.ts +1 -1
  172. package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +2 -2
  173. package/dist/esm/components/field-wrapper/FieldWrapper.stories.d.ts +1 -2
  174. package/dist/esm/components/font-field/FontField.d.ts +1 -2
  175. package/dist/esm/components/font-picker/FontPicker.d.ts +1 -1
  176. package/dist/esm/components/h-rule/HRule.d.ts +1 -2
  177. package/dist/esm/components/h-rule/HRule.stories.d.ts +2 -3
  178. package/dist/esm/components/header/ProjectDropdown.d.ts +1 -2
  179. package/dist/esm/components/list-field/ListField.d.ts +1 -1
  180. package/dist/esm/components/list-field/ListField.stories.d.ts +1 -2
  181. package/dist/esm/components/log-viewer/LogViewer.d.ts +1 -1
  182. package/dist/esm/components/media-variable-field/MediaVariableField.d.ts +1 -1
  183. package/dist/esm/components/modal/Modal.d.ts +1 -1
  184. package/dist/esm/components/modal/Modal.stories.d.ts +1 -2
  185. package/dist/esm/components/number-field/NumberField.d.ts +3 -3
  186. package/dist/esm/components/number-field/NumberField.js +4 -5
  187. package/dist/esm/components/number-field/NumberField.js.map +1 -1
  188. package/dist/esm/components/number-field/NumberField.stories.d.ts +1 -2
  189. package/dist/esm/components/number-field/NumberField.test.d.ts +1 -0
  190. package/dist/esm/components/number-field/NumberField.test.js +192 -0
  191. package/dist/esm/components/number-field/NumberField.test.js.map +1 -0
  192. package/dist/esm/components/players/AudioPlayer.d.ts +1 -1
  193. package/dist/esm/components/players/AudioPreview.d.ts +1 -1
  194. package/dist/esm/components/players/ImagePlayer.d.ts +1 -1
  195. package/dist/esm/components/players/ImagePreview.d.ts +1 -1
  196. package/dist/esm/components/players/ImageSequencePlayer.d.ts +1 -1
  197. package/dist/esm/components/players/TemplatePlayer.d.ts +1 -1
  198. package/dist/esm/components/players/VideoPlayer.d.ts +1 -1
  199. package/dist/esm/components/players/VideoPreview.d.ts +1 -1
  200. package/dist/esm/components/publish-wizard/PublishWizard.d.ts +3 -3
  201. package/dist/esm/components/publish-wizard/publish/APIIntegration.d.ts +1 -1
  202. package/dist/esm/components/publish-wizard/publish/HubSpotFlow.d.ts +1 -1
  203. package/dist/esm/components/publish-wizard/publish/WebpageHosted.d.ts +2 -2
  204. package/dist/esm/components/section/Section.d.ts +1 -2
  205. package/dist/esm/components/section/Section.stories.d.ts +2 -3
  206. package/dist/esm/components/select-field/SelectField.d.ts +1 -1
  207. package/dist/esm/components/select-field/SelectField.stories.d.ts +1 -2
  208. package/dist/esm/components/shortcut-menu/ShortcutMenu.stories.d.ts +1 -2
  209. package/dist/esm/components/slider-field/SliderField.d.ts +1 -1
  210. package/dist/esm/components/slider-field/SliderField.stories.d.ts +1 -2
  211. package/dist/esm/components/smpte-field/SMPTEField.d.ts +1 -1
  212. package/dist/esm/components/tabs/Tabs.stories.d.ts +2 -3
  213. package/dist/esm/components/tag/Tag.d.ts +1 -9
  214. package/dist/esm/components/text-area-autocomplete/TextAreaAutocomplete.d.ts +1 -2
  215. package/dist/esm/components/text-area-field/TextAreaField.d.ts +1 -1
  216. package/dist/esm/components/text-area-field/TextAreaField.stories.d.ts +1 -2
  217. package/dist/esm/components/text-field/TextField.d.ts +1 -1
  218. package/dist/esm/components/text-field/TextField.stories.d.ts +1 -2
  219. package/dist/esm/components/text-field/TextField.test.d.ts +1 -0
  220. package/dist/esm/components/text-field/TextField.test.js +469 -0
  221. package/dist/esm/components/text-field/TextField.test.js.map +1 -0
  222. package/dist/esm/constants/icons.d.ts +79 -80
  223. package/dist/esm/test/setup.d.ts +1 -0
  224. package/dist/esm/test/setup.js +70 -0
  225. package/dist/esm/test/setup.js.map +1 -0
  226. package/dist/esm/test/utils.d.ts +26 -0
  227. package/dist/esm/test/utils.js +27 -0
  228. package/dist/esm/test/utils.js.map +1 -0
  229. package/package.json +1 -1
@@ -0,0 +1,469 @@
1
+ import React from 'react';
2
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
3
+ import { render, fireEvent, screen } from '../../test/utils';
4
+ import TextField from './TextField';
5
+ describe('TextField', () => {
6
+ const defaultProps = {
7
+ onChange: vi.fn(),
8
+ label: 'Test Text Field'
9
+ };
10
+ beforeEach(() => {
11
+ vi.clearAllMocks();
12
+ });
13
+ describe('Rendering', () => {
14
+ it('renders without crashing', () => {
15
+ render(React.createElement(TextField, { ...defaultProps }));
16
+ const input = screen.getByRole('textbox');
17
+ expect(input).toBeDefined();
18
+ });
19
+ it('displays the correct value', () => {
20
+ render(React.createElement(TextField, { ...defaultProps, value: 'test value' }));
21
+ const input = screen.getByRole('textbox');
22
+ expect(input.value).toBe('test value');
23
+ });
24
+ it('displays placeholder when provided', () => {
25
+ render(React.createElement(TextField, { ...defaultProps, placeholder: 'Enter text' }));
26
+ const input = screen.getByRole('textbox');
27
+ expect(input.placeholder).toBe('Enter text');
28
+ });
29
+ it('sets disabled state correctly', () => {
30
+ render(React.createElement(TextField, { ...defaultProps, disabled: true }));
31
+ const input = screen.getByRole('textbox');
32
+ expect(input.disabled).toBe(true);
33
+ });
34
+ it('sets readOnly attribute when readOnly prop is true', () => {
35
+ render(React.createElement(TextField, { ...defaultProps, readOnly: true }));
36
+ const input = screen.getByRole('textbox');
37
+ expect(input.readOnly).toBe(true);
38
+ });
39
+ it('applies maxLength attribute when provided', () => {
40
+ render(React.createElement(TextField, { ...defaultProps, maxLength: 50 }));
41
+ const input = screen.getByRole('textbox');
42
+ expect(input.maxLength).toBe(50);
43
+ });
44
+ it('focuses input on mount when focusOnMount is true', () => {
45
+ render(React.createElement(TextField, { ...defaultProps, focusOnMount: true }));
46
+ const input = screen.getByRole('textbox');
47
+ expect(document.activeElement).toBe(input);
48
+ });
49
+ });
50
+ describe('Basic Interactions', () => {
51
+ it('calls onChange when value changes in uncontrolled mode', () => {
52
+ const onChange = vi.fn();
53
+ render(React.createElement(TextField, { ...defaultProps, onChange: onChange }));
54
+ const input = screen.getByRole('textbox');
55
+ fireEvent.change(input, { target: { value: 'new text' } });
56
+ expect(onChange).toHaveBeenCalledWith('new text');
57
+ });
58
+ it('calls onFocus when input receives focus', () => {
59
+ const onFocus = vi.fn();
60
+ render(React.createElement(TextField, { ...defaultProps, onFocus: onFocus }));
61
+ const input = screen.getByRole('textbox');
62
+ fireEvent.focus(input);
63
+ expect(onFocus).toHaveBeenCalled();
64
+ });
65
+ it('calls onBlur when input loses focus', () => {
66
+ const onBlur = vi.fn();
67
+ render(React.createElement(TextField, { ...defaultProps, onBlur: onBlur }));
68
+ const input = screen.getByRole('textbox');
69
+ fireEvent.blur(input);
70
+ expect(onBlur).toHaveBeenCalled();
71
+ });
72
+ });
73
+ describe('Pattern Validation', () => {
74
+ it('prevents input that does not match pattern', () => {
75
+ const onChange = vi.fn();
76
+ const numberPattern = /^\d*$/;
77
+ render(React.createElement(TextField, { ...defaultProps, onChange: onChange, pattern: numberPattern }));
78
+ const input = screen.getByRole('textbox');
79
+ fireEvent.change(input, { target: { value: 'abc123' } });
80
+ expect(onChange).not.toHaveBeenCalled();
81
+ });
82
+ it('allows input that matches pattern', () => {
83
+ const onChange = vi.fn();
84
+ const numberPattern = /^\d*$/;
85
+ render(React.createElement(TextField, { ...defaultProps, onChange: onChange, pattern: numberPattern }));
86
+ const input = screen.getByRole('textbox');
87
+ fireEvent.change(input, { target: { value: '123' } });
88
+ expect(onChange).toHaveBeenCalledWith('123');
89
+ });
90
+ });
91
+ describe('Controlled Mode', () => {
92
+ it('renders edit button in controlled mode', () => {
93
+ const { container } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'test', onSubmit: vi.fn() }));
94
+ const button = container.querySelector('[data-tooltip-content="Edit"]');
95
+ expect(button).toBeDefined();
96
+ expect(button?.getAttribute('data-tooltip-content')).toBe('Edit');
97
+ });
98
+ });
99
+ describe('Submittable Mode', () => {
100
+ it('renders submit button in submittable mode', () => {
101
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, doSubmit: vi.fn() }));
102
+ const button = container.querySelector('[data-tooltip-content="Confirm"]');
103
+ expect(button).toBeDefined();
104
+ expect(button?.getAttribute('data-tooltip-content')).toBe('Confirm');
105
+ });
106
+ it('renders search icon when submittableType is search', () => {
107
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, submittableType: 'search', doSubmit: vi.fn() }));
108
+ const button = container.querySelector('[data-tooltip-content="Search"]');
109
+ expect(button).toBeDefined();
110
+ expect(button?.getAttribute('data-tooltip-content')).toBe('Search');
111
+ });
112
+ });
113
+ describe('Loading State', () => {
114
+ it('disables input when loading is true', () => {
115
+ render(React.createElement(TextField, { ...defaultProps, loading: true }));
116
+ const input = screen.getByRole('textbox');
117
+ expect(input.disabled).toBe(true);
118
+ });
119
+ });
120
+ describe('Constructor Validation', () => {
121
+ it('throws error when both controlled and submittable are true', () => {
122
+ expect(() => {
123
+ render(React.createElement(TextField, { ...defaultProps, controlled: true, submittable: true }));
124
+ }).toThrow('Actionable TextField(s) must be one of either: controlled or submittable.');
125
+ });
126
+ });
127
+ describe('Controlled Mode', () => {
128
+ it('renders in controlled mode with edit button', () => {
129
+ const { container } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'test value' }));
130
+ const editButton = container.querySelector('[data-tooltip-content="Edit"]');
131
+ expect(editButton).toBeDefined();
132
+ });
133
+ it('toggles editing state when edit button is clicked', () => {
134
+ const { container } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'test value' }));
135
+ const editButton = container.querySelector('[data-tooltip-content="Edit"]');
136
+ fireEvent.click(editButton);
137
+ // Should now show check icon instead of edit icon
138
+ const checkButton = container.querySelector('[data-tooltip-content="Edit"]');
139
+ expect(checkButton).toBeDefined();
140
+ });
141
+ it('calls onSubmit when editing is completed with changed value', () => {
142
+ const onSubmit = vi.fn();
143
+ const { container } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'original', onSubmit: onSubmit }));
144
+ // Start editing
145
+ const editButton = container.querySelector('[data-tooltip-content="Edit"]');
146
+ fireEvent.click(editButton);
147
+ // Change value
148
+ const input = screen.getByRole('textbox');
149
+ fireEvent.change(input, { target: { value: 'modified' } });
150
+ // Complete editing
151
+ const checkButton = container.querySelector('[data-tooltip-content="Edit"]');
152
+ fireEvent.click(checkButton);
153
+ expect(onSubmit).toHaveBeenCalledWith('modified');
154
+ });
155
+ it('does not call onSubmit when editing is completed without changes', () => {
156
+ const onSubmit = vi.fn();
157
+ const { container } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'unchanged', onSubmit: onSubmit }));
158
+ // Start editing
159
+ const editButton = container.querySelector('[data-tooltip-content="Edit"]');
160
+ fireEvent.click(editButton);
161
+ // Complete editing without changes
162
+ const checkButton = container.querySelector('[data-tooltip-content="Edit"]');
163
+ fireEvent.click(checkButton);
164
+ expect(onSubmit).not.toHaveBeenCalled();
165
+ });
166
+ it('calls onSubmit with null when empty value is submitted', () => {
167
+ const onSubmit = vi.fn();
168
+ const { container } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'original', onSubmit: onSubmit }));
169
+ // Start editing
170
+ const editButton = container.querySelector('[data-tooltip-content="Edit"]');
171
+ fireEvent.click(editButton);
172
+ // Clear value
173
+ const input = screen.getByRole('textbox');
174
+ fireEvent.change(input, { target: { value: '' } });
175
+ // Complete editing
176
+ const checkButton = container.querySelector('[data-tooltip-content="Edit"]');
177
+ fireEvent.click(checkButton);
178
+ expect(onSubmit).toHaveBeenCalledWith(null);
179
+ });
180
+ });
181
+ describe('Submittable Mode', () => {
182
+ it('renders submittable mode with search icon', () => {
183
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, submittableType: 'search' }));
184
+ const submitButton = container.querySelector('[data-tooltip-content="Search"]');
185
+ expect(submitButton).toBeDefined();
186
+ });
187
+ it('renders submittable mode with check icon', () => {
188
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, submittableType: 'check' }));
189
+ const submitButton = container.querySelector('[data-tooltip-content="Confirm"]');
190
+ expect(submitButton).toBeDefined();
191
+ });
192
+ it('renders submittable mode with add icon', () => {
193
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, submittableType: 'add' }));
194
+ const submitButton = container.querySelector('[data-tooltip-content="Confirm"]');
195
+ expect(submitButton).toBeDefined();
196
+ });
197
+ it('calls doSubmit when submit button is clicked with value', () => {
198
+ const doSubmit = vi.fn();
199
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, doSubmit: doSubmit }));
200
+ const input = screen.getByRole('textbox');
201
+ fireEvent.change(input, { target: { value: 'test submission' } });
202
+ const submitButton = container.querySelector('[data-tooltip-content="Confirm"]');
203
+ fireEvent.click(submitButton);
204
+ expect(doSubmit).toHaveBeenCalledWith('test submission');
205
+ });
206
+ it('clears value after submission when submittableType is add', () => {
207
+ const doSubmit = vi.fn();
208
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, submittableType: 'add', doSubmit: doSubmit }));
209
+ const input = screen.getByRole('textbox');
210
+ fireEvent.change(input, { target: { value: 'test value' } });
211
+ const submitButton = container.querySelector('[data-tooltip-content="Confirm"]');
212
+ fireEvent.click(submitButton);
213
+ expect(input.value).toBe('');
214
+ });
215
+ it('shows clear button when value exists', () => {
216
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, value: 'some value' }));
217
+ const clearButton = container.querySelector('[data-tooltip-content="Clear"]');
218
+ expect(clearButton).toBeDefined();
219
+ });
220
+ it('calls doSubmit with empty string when clear button is clicked', () => {
221
+ const doSubmit = vi.fn();
222
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, value: 'some value', doSubmit: doSubmit }));
223
+ const clearButton = container.querySelector('[data-tooltip-content="Clear"]');
224
+ fireEvent.click(clearButton);
225
+ expect(doSubmit).toHaveBeenCalledWith('');
226
+ });
227
+ });
228
+ describe('Copy Functionality', () => {
229
+ it('shows copy button when showCopy is true', () => {
230
+ const { container } = render(React.createElement(TextField, { ...defaultProps, showCopy: true, value: 'copyable text' }));
231
+ const copyButton = container.querySelector('[data-tooltip-content*="Copy"]');
232
+ expect(copyButton).toBeDefined();
233
+ });
234
+ it('calls onNotification when copy succeeds', async () => {
235
+ const onNotification = vi.fn();
236
+ const { container } = render(React.createElement(TextField, { ...defaultProps, showCopy: true, value: 'copyable text', onNotification: onNotification }));
237
+ const copyButton = container.querySelector('[data-tooltip-content*="Copy"]');
238
+ fireEvent.click(copyButton);
239
+ // Wait for clipboard operation
240
+ await new Promise((resolve) => setTimeout(resolve, 0));
241
+ expect(onNotification).toHaveBeenCalledWith('Copied to clipboard!');
242
+ });
243
+ it('calls onError when copy fails', async () => {
244
+ // Mock clipboard to fail
245
+ const originalClipboard = navigator.clipboard;
246
+ Object.defineProperty(navigator, 'clipboard', {
247
+ value: {
248
+ writeText: vi.fn().mockRejectedValue(new Error('Copy failed'))
249
+ },
250
+ writable: true,
251
+ configurable: true
252
+ });
253
+ const onError = vi.fn();
254
+ const { container } = render(React.createElement(TextField, { ...defaultProps, showCopy: true, value: 'copyable text', onError: onError }));
255
+ const copyButton = container.querySelector('[data-tooltip-content*="Copy"]');
256
+ fireEvent.click(copyButton);
257
+ // Wait for clipboard operation
258
+ await new Promise((resolve) => setTimeout(resolve, 0));
259
+ expect(onError).toHaveBeenCalledWith('Error copying to clipboard.');
260
+ // Restore clipboard
261
+ Object.defineProperty(navigator, 'clipboard', {
262
+ value: originalClipboard,
263
+ writable: true,
264
+ configurable: true
265
+ });
266
+ });
267
+ });
268
+ describe('Pattern Validation', () => {
269
+ it('prevents input that does not match pattern', () => {
270
+ const onChange = vi.fn();
271
+ render(React.createElement(TextField, { ...defaultProps, pattern: /^\d+$/, onChange: onChange }));
272
+ const input = screen.getByRole('textbox');
273
+ fireEvent.change(input, { target: { value: 'abc123' } });
274
+ expect(onChange).not.toHaveBeenCalled();
275
+ });
276
+ it('allows input that matches pattern', () => {
277
+ const onChange = vi.fn();
278
+ render(React.createElement(TextField, { ...defaultProps, pattern: /^\d+$/, onChange: onChange }));
279
+ const input = screen.getByRole('textbox');
280
+ fireEvent.change(input, { target: { value: '123' } });
281
+ expect(onChange).toHaveBeenCalledWith('123');
282
+ });
283
+ it('converts empty string to null for regular input', () => {
284
+ const onChange = vi.fn();
285
+ render(React.createElement(TextField, { ...defaultProps, onChange: onChange, value: 'initial' }));
286
+ const input = screen.getByRole('textbox');
287
+ fireEvent.change(input, { target: { value: '' } });
288
+ expect(onChange).toHaveBeenCalledWith(null);
289
+ });
290
+ });
291
+ describe('Button Visibility', () => {
292
+ it('hides all buttons when hideButtons is true', () => {
293
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, showCopy: true, hideButtons: true, value: 'test' }));
294
+ const submitButton = container.querySelector('[data-tooltip-content="Confirm"]');
295
+ const copyButton = container.querySelector('[data-tooltip-content*="Copy"]');
296
+ expect(submitButton).toBeNull();
297
+ expect(copyButton).toBeNull();
298
+ });
299
+ it('renders custom buttons array', () => {
300
+ render(React.createElement(TextField, { ...defaultProps, buttons: [React.createElement("button", { key: 'custom' }, "Custom")] }));
301
+ const button = screen.getByText('Custom');
302
+ expect(button).toBeDefined();
303
+ });
304
+ it('renders single custom button', () => {
305
+ render(React.createElement(TextField, { ...defaultProps, buttons: React.createElement("button", { key: 'custom' }, "Single") }));
306
+ const button = screen.getByText('Single');
307
+ expect(button).toBeDefined();
308
+ });
309
+ });
310
+ describe('Suggestions/Autocomplete', () => {
311
+ it('renders with suggestions and autocomplete functionality', () => {
312
+ const suggestions = ['apple', 'banana', 'cherry'];
313
+ const { container } = render(React.createElement(TextField, { ...defaultProps, suggestions: suggestions }));
314
+ // Should render ReactTextareaAutocomplete (mocked as 'input' string)
315
+ const textContent = container.textContent;
316
+ expect(textContent).toContain('input');
317
+ });
318
+ it('handles suggestion click in submittable mode', () => {
319
+ const doSubmit = vi.fn();
320
+ const suggestions = ['apple', 'banana', 'cherry'];
321
+ const { container } = render(React.createElement(TextField, { ...defaultProps, submittable: true, suggestions: suggestions, doSubmit: doSubmit }));
322
+ // Test that it renders with suggestions
323
+ expect(container.textContent).toContain('input');
324
+ });
325
+ it('handles Enter key in submittable mode with suggestions', () => {
326
+ const doSubmit = vi.fn();
327
+ const suggestions = ['apple', 'banana', 'cherry'];
328
+ render(React.createElement(TextField, { ...defaultProps, submittable: true, suggestions: suggestions, doSubmit: doSubmit }));
329
+ // Test that component renders without errors
330
+ expect(doSubmit).toBeDefined();
331
+ });
332
+ });
333
+ describe('Keyboard Shortcuts', () => {
334
+ it('binds hotkeys on focus in submittable mode', () => {
335
+ const doSubmit = vi.fn();
336
+ render(React.createElement(TextField, { ...defaultProps, submittable: true, doSubmit: doSubmit }));
337
+ const input = screen.getByRole('textbox');
338
+ fireEvent.focus(input);
339
+ // Test that focus event was handled
340
+ expect(input).toBeDefined();
341
+ });
342
+ it('unbinds hotkeys on blur in submittable mode', () => {
343
+ const doSubmit = vi.fn();
344
+ const onBlur = vi.fn();
345
+ render(React.createElement(TextField, { ...defaultProps, submittable: true, doSubmit: doSubmit, onBlur: onBlur }));
346
+ const input = screen.getByRole('textbox');
347
+ fireEvent.focus(input);
348
+ fireEvent.blur(input);
349
+ expect(onBlur).toHaveBeenCalled();
350
+ });
351
+ it('binds hotkeys on focus in controlled mode', () => {
352
+ const onSubmit = vi.fn();
353
+ render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'original', onSubmit: onSubmit }));
354
+ const input = screen.getByRole('textbox');
355
+ fireEvent.focus(input);
356
+ // Test that focus event was handled
357
+ expect(input).toBeDefined();
358
+ });
359
+ it('unbinds hotkeys on blur in controlled mode', () => {
360
+ const onBlur = vi.fn();
361
+ render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'original', onBlur: onBlur }));
362
+ const input = screen.getByRole('textbox');
363
+ fireEvent.focus(input);
364
+ fireEvent.blur(input);
365
+ expect(onBlur).toHaveBeenCalled();
366
+ });
367
+ });
368
+ describe('Lifecycle Methods', () => {
369
+ it('handles componentWillUnmount for submittable mode', () => {
370
+ const { unmount } = render(React.createElement(TextField, { ...defaultProps, submittable: true }));
371
+ // Focus to bind hotkeys
372
+ const input = screen.getByRole('textbox');
373
+ fireEvent.focus(input);
374
+ // Unmount should clean up hotkey bindings
375
+ unmount();
376
+ });
377
+ it('handles componentWillUnmount for controlled mode', () => {
378
+ const { unmount } = render(React.createElement(TextField, { ...defaultProps, controlled: true }));
379
+ // Focus to bind hotkeys
380
+ const input = screen.getByRole('textbox');
381
+ fireEvent.focus(input);
382
+ // Unmount should clean up hotkey bindings
383
+ unmount();
384
+ });
385
+ it('handles componentDidUpdate for controlled mode', () => {
386
+ const { rerender } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'initial' }));
387
+ // Update component to trigger componentDidUpdate
388
+ rerender(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'updated' }));
389
+ const input = screen.getByRole('textbox');
390
+ expect(input.value).toBe('updated');
391
+ });
392
+ });
393
+ describe('Edge Cases', () => {
394
+ it('handles null submittableType gracefully', () => {
395
+ render(React.createElement(TextField, { ...defaultProps, submittable: true, submittableType: null }));
396
+ // Should still render without crashing
397
+ const input = screen.getByRole('textbox');
398
+ expect(input).toBeDefined();
399
+ });
400
+ it('handles empty suggestions array', () => {
401
+ const { container } = render(React.createElement(TextField, { ...defaultProps, suggestions: [] }));
402
+ // Should render ReactTextareaAutocomplete (mocked as 'input' string) even with empty suggestions
403
+ expect(container.textContent).toContain('input');
404
+ });
405
+ it('handles disabled state in controlled mode', () => {
406
+ render(React.createElement(TextField, { ...defaultProps, controlled: true, disabled: true }));
407
+ const input = screen.getByRole('textbox');
408
+ expect(input.disabled).toBe(true);
409
+ });
410
+ it('handles blur event with hotkey cleanup', () => {
411
+ const onBlur = vi.fn();
412
+ render(React.createElement(TextField, { ...defaultProps, submittable: true, onBlur: onBlur }));
413
+ const input = screen.getByRole('textbox');
414
+ fireEvent.focus(input);
415
+ fireEvent.blur(input);
416
+ expect(onBlur).toHaveBeenCalled();
417
+ });
418
+ it('handles focus event with hotkey binding', () => {
419
+ const onFocus = vi.fn();
420
+ render(React.createElement(TextField, { ...defaultProps, controlled: true, onFocus: onFocus }));
421
+ const input = screen.getByRole('textbox');
422
+ fireEvent.focus(input);
423
+ expect(onFocus).toHaveBeenCalled();
424
+ });
425
+ it('handles setEditing method', () => {
426
+ const { container } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'test' }));
427
+ // Start editing by clicking edit button
428
+ const editButton = container.querySelector('[data-tooltip-content="Edit"]');
429
+ fireEvent.click(editButton);
430
+ // Should be in editing mode
431
+ const input = screen.getByRole('textbox');
432
+ expect(input.disabled).toBe(false);
433
+ });
434
+ it('handles getValue method for different modes', () => {
435
+ const { rerender } = render(React.createElement(TextField, { ...defaultProps, value: 'test' }));
436
+ const input = screen.getByRole('textbox');
437
+ expect(input.value).toBe('test');
438
+ // Test controlled mode
439
+ rerender(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'controlled test' }));
440
+ const controlledInput = screen.getByRole('textbox');
441
+ expect(controlledInput.value).toBe('controlled test');
442
+ });
443
+ });
444
+ describe('Component Updates', () => {
445
+ it('updates internal value when props.value changes', () => {
446
+ const { rerender } = render(React.createElement(TextField, { ...defaultProps, value: 'initial' }));
447
+ rerender(React.createElement(TextField, { ...defaultProps, value: 'updated' }));
448
+ const input = screen.getByRole('textbox');
449
+ expect(input.value).toBe('updated');
450
+ });
451
+ it('updates internal value when controlled mode value changes', () => {
452
+ const { rerender } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'initial' }));
453
+ rerender(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'updated' }));
454
+ const input = screen.getByRole('textbox');
455
+ expect(input.value).toBe('updated');
456
+ });
457
+ it('clears internal value when editing ends and value is empty', () => {
458
+ const { rerender, container } = render(React.createElement(TextField, { ...defaultProps, controlled: true, value: 'initial' }));
459
+ // Start editing
460
+ const editButton = container.querySelector('[data-tooltip-content="Edit"]');
461
+ fireEvent.click(editButton);
462
+ // Update props to empty value and stop editing
463
+ rerender(React.createElement(TextField, { ...defaultProps, controlled: true, value: '' }));
464
+ const input = screen.getByRole('textbox');
465
+ expect(input.value).toBe('');
466
+ });
467
+ });
468
+ });
469
+ //# sourceMappingURL=TextField.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.test.js","sourceRoot":"","sources":["../../../../src/components/text-field/TextField.test.tsx"],"names":[],"mappings":"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"}