@object-ui/components 0.3.0 → 0.3.1

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 (317) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/ISSUES_FOUND.md +128 -0
  3. package/README.md +19 -1
  4. package/README_SHADCN_SYNC.md +281 -0
  5. package/TESTING.md +335 -0
  6. package/dist/index.css +1 -1
  7. package/dist/index.js +30981 -30027
  8. package/dist/index.umd.cjs +30 -39
  9. package/dist/src/hooks/use-mobile.d.ts +7 -0
  10. package/dist/src/index.d.ts +4 -1
  11. package/dist/src/renderers/basic/button-group.d.ts +8 -0
  12. package/dist/src/renderers/basic/div.d.ts +7 -0
  13. package/dist/src/renderers/basic/html.d.ts +7 -0
  14. package/dist/src/renderers/basic/icon.d.ts +7 -0
  15. package/dist/src/renderers/basic/image.d.ts +7 -0
  16. package/dist/src/renderers/basic/navigation-menu.d.ts +8 -0
  17. package/dist/src/renderers/basic/pagination.d.ts +8 -0
  18. package/dist/src/renderers/basic/separator.d.ts +7 -0
  19. package/dist/src/renderers/basic/span.d.ts +7 -0
  20. package/dist/src/renderers/basic/text.d.ts +7 -0
  21. package/dist/src/renderers/complex/carousel.d.ts +7 -0
  22. package/dist/src/renderers/complex/data-table.d.ts +7 -0
  23. package/dist/src/renderers/complex/filter-builder.d.ts +7 -0
  24. package/dist/src/renderers/complex/resizable.d.ts +7 -0
  25. package/dist/src/renderers/complex/scroll-area.d.ts +7 -0
  26. package/dist/src/renderers/complex/table.d.ts +7 -0
  27. package/dist/src/renderers/data-display/alert.d.ts +7 -0
  28. package/dist/src/renderers/data-display/avatar.d.ts +7 -0
  29. package/dist/src/renderers/data-display/badge.d.ts +7 -0
  30. package/dist/src/renderers/data-display/breadcrumb.d.ts +8 -0
  31. package/dist/src/renderers/data-display/kbd.d.ts +8 -0
  32. package/dist/src/renderers/data-display/list.d.ts +7 -0
  33. package/dist/src/renderers/data-display/statistic.d.ts +7 -0
  34. package/dist/src/renderers/data-display/table.d.ts +8 -0
  35. package/dist/src/renderers/data-display/tree-view.d.ts +7 -0
  36. package/dist/src/renderers/disclosure/accordion.d.ts +7 -0
  37. package/dist/src/renderers/disclosure/collapsible.d.ts +7 -0
  38. package/dist/src/renderers/disclosure/toggle-group.d.ts +8 -0
  39. package/dist/src/renderers/feedback/empty.d.ts +8 -0
  40. package/dist/src/renderers/feedback/loading.d.ts +7 -0
  41. package/dist/src/renderers/feedback/progress.d.ts +7 -0
  42. package/dist/src/renderers/feedback/skeleton.d.ts +7 -0
  43. package/dist/src/renderers/feedback/sonner.d.ts +8 -0
  44. package/dist/src/renderers/feedback/spinner.d.ts +8 -0
  45. package/dist/src/renderers/feedback/toast.d.ts +8 -0
  46. package/dist/src/renderers/feedback/toaster.d.ts +7 -0
  47. package/dist/src/renderers/form/button.d.ts +7 -0
  48. package/dist/src/renderers/form/calendar.d.ts +7 -0
  49. package/dist/src/renderers/form/checkbox.d.ts +7 -0
  50. package/dist/src/renderers/form/combobox.d.ts +8 -0
  51. package/dist/src/renderers/form/command.d.ts +8 -0
  52. package/dist/src/renderers/form/date-picker.d.ts +7 -0
  53. package/dist/src/renderers/form/file-upload.d.ts +7 -0
  54. package/dist/src/renderers/form/form.d.ts +7 -0
  55. package/dist/src/renderers/form/input-otp.d.ts +7 -0
  56. package/dist/src/renderers/form/input.d.ts +7 -0
  57. package/dist/src/renderers/form/label.d.ts +7 -0
  58. package/dist/src/renderers/form/radio-group.d.ts +7 -0
  59. package/dist/src/renderers/form/select.d.ts +7 -0
  60. package/dist/src/renderers/form/slider.d.ts +7 -0
  61. package/dist/src/renderers/form/switch.d.ts +7 -0
  62. package/dist/src/renderers/form/textarea.d.ts +7 -0
  63. package/dist/src/renderers/form/toggle.d.ts +7 -0
  64. package/dist/src/renderers/layout/aspect-ratio.d.ts +8 -0
  65. package/dist/src/renderers/layout/card.d.ts +7 -0
  66. package/dist/src/renderers/layout/container.d.ts +7 -0
  67. package/dist/src/renderers/layout/flex.d.ts +7 -0
  68. package/dist/src/renderers/layout/grid.d.ts +7 -0
  69. package/dist/src/renderers/layout/semantic.d.ts +7 -0
  70. package/dist/src/renderers/layout/stack.d.ts +7 -0
  71. package/dist/src/renderers/layout/tabs.d.ts +7 -0
  72. package/dist/src/renderers/navigation/header-bar.d.ts +7 -0
  73. package/dist/src/renderers/navigation/sidebar.d.ts +7 -0
  74. package/dist/src/renderers/overlay/alert-dialog.d.ts +7 -0
  75. package/dist/src/renderers/overlay/context-menu.d.ts +7 -0
  76. package/dist/src/renderers/overlay/dialog.d.ts +7 -0
  77. package/dist/src/renderers/overlay/drawer.d.ts +7 -0
  78. package/dist/src/renderers/overlay/dropdown-menu.d.ts +7 -0
  79. package/dist/src/renderers/overlay/hover-card.d.ts +7 -0
  80. package/dist/src/renderers/overlay/menubar.d.ts +8 -0
  81. package/dist/src/renderers/overlay/popover.d.ts +7 -0
  82. package/dist/src/renderers/overlay/sheet.d.ts +7 -0
  83. package/dist/src/renderers/overlay/tooltip.d.ts +7 -0
  84. package/dist/src/renderers/placeholders.d.ts +9 -0
  85. package/dist/src/ui/accordion.d.ts +7 -0
  86. package/dist/src/ui/alert-dialog.d.ts +7 -0
  87. package/dist/src/ui/alert.d.ts +7 -0
  88. package/dist/src/ui/aspect-ratio.d.ts +7 -0
  89. package/dist/src/ui/avatar.d.ts +7 -0
  90. package/dist/src/ui/badge.d.ts +7 -0
  91. package/dist/src/ui/breadcrumb.d.ts +7 -0
  92. package/dist/src/ui/button.d.ts +10 -5
  93. package/dist/src/ui/calendar.d.ts +14 -7
  94. package/dist/src/ui/card.d.ts +7 -0
  95. package/dist/src/ui/carousel.d.ts +7 -0
  96. package/dist/src/ui/checkbox.d.ts +7 -0
  97. package/dist/src/ui/collapsible.d.ts +7 -0
  98. package/dist/src/ui/combobox.d.ts +22 -0
  99. package/dist/src/ui/command.d.ts +7 -0
  100. package/dist/src/ui/context-menu.d.ts +7 -0
  101. package/dist/src/ui/date-picker.d.ts +15 -0
  102. package/dist/src/ui/dialog.d.ts +7 -0
  103. package/dist/src/ui/drawer.d.ts +7 -0
  104. package/dist/src/ui/dropdown-menu.d.ts +7 -0
  105. package/dist/src/ui/filter-builder.d.ts +7 -0
  106. package/dist/src/ui/form.d.ts +7 -0
  107. package/dist/src/ui/hover-card.d.ts +7 -0
  108. package/dist/src/ui/index.d.ts +10 -5
  109. package/dist/src/ui/input-otp.d.ts +7 -0
  110. package/dist/src/ui/input.d.ts +7 -0
  111. package/dist/src/ui/item.d.ts +7 -0
  112. package/dist/src/ui/kbd.d.ts +7 -0
  113. package/dist/src/ui/label.d.ts +7 -0
  114. package/dist/src/ui/menubar.d.ts +7 -0
  115. package/dist/src/ui/navigation-menu.d.ts +7 -0
  116. package/dist/src/ui/pagination.d.ts +7 -0
  117. package/dist/src/ui/popover.d.ts +7 -0
  118. package/dist/src/ui/progress.d.ts +7 -0
  119. package/dist/src/ui/radio-group.d.ts +7 -0
  120. package/dist/src/ui/resizable.d.ts +7 -0
  121. package/dist/src/ui/scroll-area.d.ts +7 -0
  122. package/dist/src/ui/select.d.ts +9 -2
  123. package/dist/src/ui/separator.d.ts +7 -0
  124. package/dist/src/ui/sheet.d.ts +7 -0
  125. package/dist/src/ui/sidebar.d.ts +14 -9
  126. package/dist/src/ui/skeleton.d.ts +7 -0
  127. package/dist/src/ui/slider.d.ts +7 -0
  128. package/dist/src/ui/spinner.d.ts +7 -0
  129. package/dist/src/ui/switch.d.ts +7 -0
  130. package/dist/src/ui/table.d.ts +15 -8
  131. package/dist/src/ui/tabs.d.ts +7 -0
  132. package/dist/src/ui/textarea.d.ts +7 -0
  133. package/dist/src/ui/toggle-group.d.ts +8 -3
  134. package/dist/src/ui/toggle.d.ts +7 -0
  135. package/dist/src/ui/tooltip.d.ts +7 -0
  136. package/metadata/ObjectGrid.component.yml +72 -0
  137. package/package.json +23 -11
  138. package/postcss.config.js +9 -1
  139. package/shadcn-components.json +310 -0
  140. package/src/__tests__/README.md +124 -0
  141. package/src/__tests__/basic-renderers.test.tsx +255 -0
  142. package/src/__tests__/complex-disclosure-renderers.test.tsx +301 -0
  143. package/src/__tests__/feedback-overlay-renderers.test.tsx +349 -0
  144. package/src/__tests__/form-renderers.test.tsx +364 -0
  145. package/src/__tests__/layout-data-renderers.test.tsx +340 -0
  146. package/src/__tests__/test-utils.tsx +190 -0
  147. package/src/hooks/use-mobile.tsx +8 -0
  148. package/src/index.css +86 -54
  149. package/src/index.test.ts +8 -0
  150. package/src/index.ts +21 -1
  151. package/src/lib/utils.tsx +8 -0
  152. package/src/new-components.test.ts +8 -9
  153. package/src/renderers/basic/button-group.tsx +78 -0
  154. package/src/renderers/basic/div.tsx +9 -1
  155. package/src/renderers/basic/html.tsx +8 -0
  156. package/src/renderers/basic/icon.tsx +66 -3
  157. package/src/renderers/basic/image.tsx +12 -1
  158. package/src/renderers/basic/index.ts +11 -0
  159. package/src/renderers/basic/navigation-menu.tsx +80 -0
  160. package/src/renderers/basic/pagination.tsx +82 -0
  161. package/src/renderers/basic/separator.tsx +9 -1
  162. package/src/renderers/basic/span.tsx +9 -1
  163. package/src/renderers/basic/text.tsx +8 -0
  164. package/src/renderers/complex/__tests__/data-table.test.ts +8 -0
  165. package/src/renderers/complex/carousel.tsx +11 -3
  166. package/src/renderers/complex/data-table.tsx +19 -4
  167. package/src/renderers/complex/filter-builder.tsx +8 -0
  168. package/src/renderers/complex/index.ts +9 -3
  169. package/src/renderers/complex/resizable.tsx +8 -0
  170. package/src/renderers/complex/scroll-area.tsx +8 -0
  171. package/src/renderers/complex/table.tsx +10 -2
  172. package/src/renderers/data-display/alert.tsx +8 -0
  173. package/src/renderers/data-display/avatar.tsx +8 -0
  174. package/src/renderers/data-display/badge.tsx +8 -0
  175. package/src/renderers/data-display/breadcrumb.tsx +59 -0
  176. package/src/renderers/data-display/index.ts +12 -0
  177. package/src/renderers/data-display/kbd.tsx +49 -0
  178. package/src/renderers/data-display/list.tsx +8 -0
  179. package/src/renderers/data-display/statistic.tsx +24 -43
  180. package/src/renderers/data-display/table.tsx +68 -0
  181. package/src/renderers/data-display/tree-view.tsx +26 -37
  182. package/src/renderers/disclosure/accordion.tsx +8 -0
  183. package/src/renderers/disclosure/collapsible.tsx +8 -0
  184. package/src/renderers/disclosure/index.ts +9 -0
  185. package/src/renderers/disclosure/toggle-group.tsx +77 -0
  186. package/src/renderers/feedback/empty.tsx +48 -0
  187. package/src/renderers/feedback/index.ts +12 -0
  188. package/src/renderers/feedback/loading.tsx +8 -0
  189. package/src/renderers/feedback/progress.tsx +8 -0
  190. package/src/renderers/feedback/skeleton.tsx +8 -0
  191. package/src/renderers/feedback/sonner.tsx +55 -0
  192. package/src/renderers/feedback/spinner.tsx +54 -0
  193. package/src/renderers/feedback/toast.tsx +58 -0
  194. package/src/renderers/feedback/toaster.tsx +13 -17
  195. package/src/renderers/form/button.tsx +8 -0
  196. package/src/renderers/form/calendar.tsx +8 -0
  197. package/src/renderers/form/checkbox.tsx +8 -0
  198. package/src/renderers/form/combobox.tsx +47 -0
  199. package/src/renderers/form/command.tsx +57 -0
  200. package/src/renderers/form/date-picker.tsx +10 -2
  201. package/src/renderers/form/file-upload.tsx +10 -2
  202. package/src/renderers/form/form.tsx +12 -3
  203. package/src/renderers/form/index.ts +10 -0
  204. package/src/renderers/form/input-otp.tsx +34 -15
  205. package/src/renderers/form/input.tsx +89 -50
  206. package/src/renderers/form/label.tsx +8 -0
  207. package/src/renderers/form/radio-group.tsx +8 -0
  208. package/src/renderers/form/select.tsx +8 -0
  209. package/src/renderers/form/slider.tsx +16 -1
  210. package/src/renderers/form/switch.tsx +8 -0
  211. package/src/renderers/form/textarea.tsx +8 -0
  212. package/src/renderers/form/toggle.tsx +8 -0
  213. package/src/renderers/index.ts +8 -0
  214. package/src/renderers/layout/aspect-ratio.tsx +50 -0
  215. package/src/renderers/layout/card.tsx +8 -0
  216. package/src/renderers/layout/container.tsx +20 -12
  217. package/src/renderers/layout/flex.tsx +16 -8
  218. package/src/renderers/layout/grid.tsx +8 -0
  219. package/src/renderers/layout/index.ts +9 -0
  220. package/src/renderers/layout/page.tsx +9 -1
  221. package/src/renderers/layout/semantic.tsx +8 -0
  222. package/src/renderers/layout/stack.tsx +16 -8
  223. package/src/renderers/layout/tabs.tsx +8 -0
  224. package/src/renderers/navigation/header-bar.tsx +9 -1
  225. package/src/renderers/navigation/index.ts +8 -0
  226. package/src/renderers/navigation/sidebar.tsx +8 -0
  227. package/src/renderers/overlay/alert-dialog.tsx +8 -0
  228. package/src/renderers/overlay/context-menu.tsx +9 -1
  229. package/src/renderers/overlay/dialog.tsx +8 -0
  230. package/src/renderers/overlay/drawer.tsx +8 -0
  231. package/src/renderers/overlay/dropdown-menu.tsx +8 -0
  232. package/src/renderers/overlay/hover-card.tsx +8 -0
  233. package/src/renderers/overlay/index.ts +9 -0
  234. package/src/renderers/overlay/menubar.tsx +75 -0
  235. package/src/renderers/overlay/popover.tsx +8 -0
  236. package/src/renderers/overlay/sheet.tsx +8 -0
  237. package/src/renderers/overlay/tooltip.tsx +8 -0
  238. package/src/renderers/placeholders.tsx +107 -0
  239. package/src/ui/accordion.tsx +8 -0
  240. package/src/ui/alert-dialog.tsx +8 -0
  241. package/src/ui/alert.tsx +14 -24
  242. package/src/ui/aspect-ratio.tsx +8 -0
  243. package/src/ui/avatar.tsx +8 -0
  244. package/src/ui/badge.tsx +13 -6
  245. package/src/ui/breadcrumb.tsx +8 -0
  246. package/src/ui/button-group.tsx +8 -0
  247. package/src/ui/button.tsx +38 -36
  248. package/src/ui/calendar.tsx +57 -200
  249. package/src/ui/card.tsx +8 -0
  250. package/src/ui/carousel.tsx +8 -0
  251. package/src/ui/checkbox.tsx +8 -0
  252. package/src/ui/collapsible.tsx +8 -0
  253. package/src/ui/combobox.tsx +104 -0
  254. package/src/ui/command.tsx +8 -0
  255. package/src/ui/context-menu.tsx +8 -0
  256. package/src/ui/date-picker.tsx +61 -0
  257. package/src/ui/dialog.tsx +8 -0
  258. package/src/ui/drawer.tsx +8 -0
  259. package/src/ui/dropdown-menu.tsx +8 -0
  260. package/src/ui/empty.tsx +8 -0
  261. package/src/ui/filter-builder.tsx +8 -0
  262. package/src/ui/form.tsx +8 -0
  263. package/src/ui/hover-card.tsx +8 -0
  264. package/src/ui/index.ts +11 -5
  265. package/src/ui/input-otp.tsx +20 -12
  266. package/src/ui/input.tsx +8 -0
  267. package/src/ui/item.tsx +8 -0
  268. package/src/ui/kbd.tsx +8 -0
  269. package/src/ui/label.tsx +8 -0
  270. package/src/ui/menubar.tsx +8 -0
  271. package/src/ui/navigation-menu.tsx +8 -0
  272. package/src/ui/pagination.tsx +8 -0
  273. package/src/ui/popover.tsx +9 -1
  274. package/src/ui/progress.tsx +11 -15
  275. package/src/ui/radio-group.tsx +8 -0
  276. package/src/ui/resizable.tsx +8 -0
  277. package/src/ui/scroll-area.tsx +9 -1
  278. package/src/ui/select.tsx +17 -9
  279. package/src/ui/separator.tsx +8 -0
  280. package/src/ui/sheet.tsx +8 -0
  281. package/src/ui/sidebar.tsx +34 -15
  282. package/src/ui/skeleton.tsx +8 -0
  283. package/src/ui/slider.tsx +8 -0
  284. package/src/ui/sonner.tsx +12 -20
  285. package/src/ui/spinner.tsx +11 -23
  286. package/src/ui/switch.tsx +8 -0
  287. package/src/ui/table.tsx +102 -97
  288. package/src/ui/tabs.tsx +8 -0
  289. package/src/ui/textarea.tsx +8 -0
  290. package/src/ui/toggle-group.tsx +12 -21
  291. package/src/ui/toggle.tsx +15 -12
  292. package/src/ui/tooltip.tsx +8 -0
  293. package/tsconfig.json +2 -1
  294. package/vite.config.ts +11 -1
  295. package/dist/src/index.test.d.ts +0 -1
  296. package/dist/src/new-components.test.d.ts +0 -1
  297. package/dist/src/renderers/complex/__tests__/data-table.test.d.ts +0 -0
  298. package/dist/src/renderers/complex/calendar-view.d.ts +0 -1
  299. package/dist/src/renderers/complex/chatbot.d.ts +0 -1
  300. package/dist/src/renderers/complex/chatbot.test.d.ts +0 -1
  301. package/dist/src/renderers/complex/timeline.d.ts +0 -1
  302. package/dist/src/ui/calendar-view.d.ts +0 -21
  303. package/dist/src/ui/chatbot.d.ts +0 -36
  304. package/dist/src/ui/field.d.ts +0 -24
  305. package/dist/src/ui/input-group.d.ts +0 -16
  306. package/dist/src/ui/timeline.d.ts +0 -25
  307. package/metadata/ObjectTable.component.yml +0 -41
  308. package/src/renderers/complex/calendar-view.tsx +0 -219
  309. package/src/renderers/complex/chatbot.test.ts +0 -44
  310. package/src/renderers/complex/chatbot.tsx +0 -185
  311. package/src/renderers/complex/timeline.tsx +0 -466
  312. package/src/ui/calendar-view.tsx +0 -503
  313. package/src/ui/chatbot.tsx +0 -240
  314. package/src/ui/field.tsx +0 -246
  315. package/src/ui/input-group.tsx +0 -170
  316. package/src/ui/timeline.tsx +0 -266
  317. package/tailwind.config.js +0 -75
package/TESTING.md ADDED
@@ -0,0 +1,335 @@
1
+ # Component and Renderer Testing Guide
2
+
3
+ ## Overview
4
+
5
+ This document describes the comprehensive automated testing infrastructure for ObjectUI components and renderers. The tests are designed to automatically discover display, accessibility, and structural issues in UI components.
6
+
7
+ ## Test Architecture
8
+
9
+ ### Test Utilities (`test-utils.tsx`)
10
+
11
+ A suite of helper functions that provide automated checks for common display issues:
12
+
13
+ #### `renderComponent(schema, options)`
14
+ Renders a component from its schema definition for testing.
15
+
16
+ ```typescript
17
+ const { container } = renderComponent({
18
+ type: 'button',
19
+ label: 'Click Me',
20
+ });
21
+ ```
22
+
23
+ #### `checkAccessibility(element)`
24
+ Validates accessibility attributes and identifies common a11y issues:
25
+ - Missing ARIA labels on interactive elements
26
+ - Missing form labels
27
+ - Missing alt attributes on images
28
+
29
+ Returns:
30
+ ```typescript
31
+ {
32
+ hasRole: boolean;
33
+ hasAriaLabel: boolean;
34
+ hasAriaDescribedBy: boolean;
35
+ issues: string[]; // List of detected issues
36
+ }
37
+ ```
38
+
39
+ #### `checkDOMStructure(container)`
40
+ Analyzes DOM structure for potential issues:
41
+ - Empty components
42
+ - Excessive nesting (>20 levels)
43
+ - Missing content
44
+
45
+ Returns:
46
+ ```typescript
47
+ {
48
+ hasContent: boolean;
49
+ isEmpty: boolean;
50
+ hasChildren: boolean;
51
+ nestedDepth: number;
52
+ issues: string[]; // List of detected issues
53
+ }
54
+ ```
55
+
56
+ #### `checkStyling(element)`
57
+ Validates component styling:
58
+ - Class presence
59
+ - Tailwind CSS usage
60
+ - Inline styles
61
+
62
+ Returns:
63
+ ```typescript
64
+ {
65
+ hasClasses: boolean;
66
+ hasTailwindClasses: boolean;
67
+ hasInlineStyles: boolean;
68
+ classes: string[];
69
+ }
70
+ ```
71
+
72
+ #### `validateComponentRegistration(componentType)`
73
+ Verifies component registration in ComponentRegistry:
74
+ - Component is registered
75
+ - Has configuration
76
+ - Has renderer function
77
+ - Has label and inputs
78
+ - Has default props
79
+
80
+ Returns:
81
+ ```typescript
82
+ {
83
+ isRegistered: boolean;
84
+ hasConfig: boolean;
85
+ hasRenderer: boolean;
86
+ hasLabel: boolean;
87
+ hasInputs: boolean;
88
+ hasDefaultProps: boolean;
89
+ config: any;
90
+ }
91
+ ```
92
+
93
+ #### `getAllDisplayIssues(container)`
94
+ Comprehensive check that runs all validation checks and returns aggregated issues:
95
+
96
+ ```typescript
97
+ const issues = getAllDisplayIssues(container);
98
+ // Returns array of issue descriptions
99
+ ```
100
+
101
+ ## Test Coverage
102
+
103
+ ### Component Categories
104
+
105
+ The test suite covers all major component categories:
106
+
107
+ 1. **Basic Components** (`basic-renderers.test.tsx`)
108
+ - Text, Div, Span, Image, Icon, Separator, HTML
109
+
110
+ 2. **Form Components** (`form-renderers.test.tsx`)
111
+ - Button, Input, Textarea, Select, Checkbox, Switch
112
+ - Radio Group, Slider, Label, Email, Password
113
+
114
+ 3. **Layout Components** (`layout-data-renderers.test.tsx`)
115
+ - Container, Grid, Flex
116
+
117
+ 4. **Data Display Components** (`layout-data-renderers.test.tsx`)
118
+ - List, Tree View, Badge, Avatar, Alert
119
+ - Breadcrumb, Statistic, Kbd
120
+
121
+ 5. **Feedback Components** (`feedback-overlay-renderers.test.tsx`)
122
+ - Loading, Spinner, Progress, Skeleton, Empty, Toast
123
+
124
+ 6. **Overlay Components** (`feedback-overlay-renderers.test.tsx`)
125
+ - Dialog, Alert Dialog, Sheet, Drawer
126
+ - Popover, Tooltip, Dropdown Menu, Context Menu
127
+ - Hover Card, Menubar
128
+
129
+ 7. **Disclosure Components** (`complex-disclosure-renderers.test.tsx`)
130
+ - Accordion, Collapsible, Toggle Group
131
+
132
+ 8. **Complex Components** (`complex-disclosure-renderers.test.tsx`)
133
+ - Timeline, Data Table, Chatbot, Carousel
134
+ - Scroll Area, Resizable, Filter Builder, Calendar View, Table
135
+
136
+ ## What the Tests Check
137
+
138
+ ### 1. Component Registration
139
+ Every component should be properly registered:
140
+ ```typescript
141
+ it('should be properly registered', () => {
142
+ const validation = validateComponentRegistration('button');
143
+ expect(validation.isRegistered).toBe(true);
144
+ expect(validation.hasConfig).toBe(true);
145
+ expect(validation.hasLabel).toBe(true);
146
+ });
147
+ ```
148
+
149
+ ### 2. Rendering Without Errors
150
+ Components should render without throwing errors:
151
+ ```typescript
152
+ it('should render without issues', () => {
153
+ const { container } = renderComponent({
154
+ type: 'button',
155
+ label: 'Test',
156
+ });
157
+ expect(container).toBeDefined();
158
+ });
159
+ ```
160
+
161
+ ### 3. Accessibility
162
+ Components should be accessible:
163
+ ```typescript
164
+ it('should have proper accessibility', () => {
165
+ const { container } = renderComponent({
166
+ type: 'button',
167
+ label: 'Click Me',
168
+ });
169
+
170
+ const issues = getAllDisplayIssues(container);
171
+ const a11yIssues = issues.filter(i => i.includes('accessible'));
172
+ expect(a11yIssues).toHaveLength(0);
173
+ });
174
+ ```
175
+
176
+ ### 4. DOM Structure
177
+ Components should have valid DOM structure:
178
+ ```typescript
179
+ it('should have valid structure', () => {
180
+ const { container } = renderComponent({
181
+ type: 'container',
182
+ body: [{ type: 'text', content: 'Content' }],
183
+ });
184
+
185
+ const domCheck = checkDOMStructure(container);
186
+ expect(domCheck.hasContent).toBe(true);
187
+ expect(domCheck.isEmpty).toBe(false);
188
+ expect(domCheck.nestedDepth).toBeLessThan(20);
189
+ });
190
+ ```
191
+
192
+ ### 5. Props and Variants
193
+ Components should support their documented props:
194
+ ```typescript
195
+ it('should support variants', () => {
196
+ const variants = ['default', 'secondary', 'destructive'];
197
+
198
+ variants.forEach(variant => {
199
+ const { container } = renderComponent({
200
+ type: 'button',
201
+ label: 'Test',
202
+ variant,
203
+ });
204
+ expect(container).toBeDefined();
205
+ });
206
+ });
207
+ ```
208
+
209
+ ## Running Tests
210
+
211
+ ### Run All Tests
212
+ ```bash
213
+ pnpm test
214
+ ```
215
+
216
+ ### Run Component Tests Only
217
+ ```bash
218
+ pnpm vitest run packages/components/src/__tests__/
219
+ ```
220
+
221
+ ### Run Specific Test File
222
+ ```bash
223
+ pnpm vitest run packages/components/src/__tests__/form-renderers.test.tsx
224
+ ```
225
+
226
+ ### Watch Mode
227
+ ```bash
228
+ pnpm test:watch
229
+ ```
230
+
231
+ ### Coverage Report
232
+ ```bash
233
+ pnpm test:coverage
234
+ ```
235
+
236
+ ### Interactive UI
237
+ ```bash
238
+ pnpm test:ui
239
+ ```
240
+
241
+ ## Test Results
242
+
243
+ Current test coverage:
244
+ - **150 total tests** across all component categories
245
+ - **140 passing** (93% pass rate)
246
+ - **10 failing** - identifying real schema/prop mismatches that need fixing
247
+
248
+ The failing tests are valuable as they automatically discovered:
249
+ - Components with missing props
250
+ - Schema mismatches (e.g., `content` vs `html`, `text` vs `content`)
251
+ - Missing default values
252
+ - Incorrect prop expectations
253
+
254
+ ## Adding New Tests
255
+
256
+ ### For New Components
257
+
258
+ When adding a new component, create tests following this pattern:
259
+
260
+ ```typescript
261
+ describe('MyComponent Renderer', () => {
262
+ it('should be properly registered', () => {
263
+ const validation = validateComponentRegistration('my-component');
264
+ expect(validation.isRegistered).toBe(true);
265
+ expect(validation.hasConfig).toBe(true);
266
+ });
267
+
268
+ it('should render without issues', () => {
269
+ const { container } = renderComponent({
270
+ type: 'my-component',
271
+ // ... required props
272
+ });
273
+
274
+ expect(container).toBeDefined();
275
+ const issues = getAllDisplayIssues(container);
276
+ expect(issues).toHaveLength(0);
277
+ });
278
+
279
+ it('should support required props', () => {
280
+ const { container } = renderComponent({
281
+ type: 'my-component',
282
+ requiredProp: 'value',
283
+ });
284
+
285
+ expect(container.textContent).toContain('value');
286
+ });
287
+ });
288
+ ```
289
+
290
+ ### For Display Issue Detection
291
+
292
+ Add specific checks for known issues:
293
+
294
+ ```typescript
295
+ it('should not have excessive nesting', () => {
296
+ const { container } = renderComponent({
297
+ type: 'complex-component',
298
+ data: complexData,
299
+ });
300
+
301
+ const domCheck = checkDOMStructure(container);
302
+ expect(domCheck.nestedDepth).toBeLessThan(20);
303
+ });
304
+
305
+ it('should have proper ARIA attributes', () => {
306
+ const { container } = renderComponent({
307
+ type: 'interactive-component',
308
+ });
309
+
310
+ const button = container.querySelector('button');
311
+ const a11y = checkAccessibility(button);
312
+ expect(a11y.issues).toHaveLength(0);
313
+ });
314
+ ```
315
+
316
+ ## Benefits
317
+
318
+ This testing infrastructure provides:
319
+
320
+ 1. **Automated Issue Detection** - Tests automatically find display and accessibility issues
321
+ 2. **Regression Prevention** - Catches breaking changes in component rendering
322
+ 3. **Documentation** - Tests serve as examples of how components should be used
323
+ 4. **Confidence** - High test coverage ensures components work as expected
324
+ 5. **Quick Feedback** - Fast test execution helps during development
325
+
326
+ ## Future Enhancements
327
+
328
+ Potential improvements:
329
+
330
+ 1. Visual regression testing with screenshot comparison
331
+ 2. Performance benchmarking for complex components
332
+ 3. Cross-browser testing
333
+ 4. Responsive design testing
334
+ 5. Theme variation testing
335
+ 6. Integration tests with SchemaRenderer