@object-ui/components 3.1.5 → 3.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 (495) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +21 -1
  3. package/dist/index.css +6339 -2
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +31896 -31523
  6. package/dist/index.umd.cjs +40 -40
  7. package/dist/{src → packages/components/src}/custom/empty.d.ts +12 -1
  8. package/dist/{src → packages/components/src}/custom/mobile-dialog-content.d.ts +1 -1
  9. package/dist/{src → packages/components/src}/renderers/action/action-bar.d.ts +12 -1
  10. package/dist/{src → packages/components/src}/ui/accordion.d.ts +1 -1
  11. package/dist/{src → packages/components/src}/ui/alert-dialog.d.ts +1 -1
  12. package/dist/packages/components/src/ui/aspect-ratio.d.ts +10 -0
  13. package/dist/{src → packages/components/src}/ui/avatar.d.ts +1 -1
  14. package/dist/{src → packages/components/src}/ui/button.d.ts +1 -1
  15. package/dist/packages/components/src/ui/chart.d.ts +56 -0
  16. package/dist/{src → packages/components/src}/ui/checkbox.d.ts +1 -1
  17. package/dist/{src → packages/components/src}/ui/collapsible.d.ts +8 -1
  18. package/dist/{src → packages/components/src}/ui/command.d.ts +2 -2
  19. package/dist/{src → packages/components/src}/ui/context-menu.d.ts +1 -1
  20. package/dist/{src → packages/components/src}/ui/dialog.d.ts +1 -1
  21. package/dist/{src → packages/components/src}/ui/drawer.d.ts +6 -10
  22. package/dist/{src → packages/components/src}/ui/dropdown-menu.d.ts +1 -1
  23. package/dist/{src → packages/components/src}/ui/form.d.ts +2 -2
  24. package/dist/{src → packages/components/src}/ui/hover-card.d.ts +1 -1
  25. package/dist/{src → packages/components/src}/ui/label.d.ts +1 -1
  26. package/dist/{src → packages/components/src}/ui/menubar.d.ts +1 -1
  27. package/dist/{src → packages/components/src}/ui/navigation-menu.d.ts +1 -1
  28. package/dist/{src → packages/components/src}/ui/popover.d.ts +1 -1
  29. package/dist/{src → packages/components/src}/ui/progress.d.ts +1 -1
  30. package/dist/{src → packages/components/src}/ui/radio-group.d.ts +1 -1
  31. package/dist/packages/components/src/ui/resizable.d.ts +7 -0
  32. package/dist/{src → packages/components/src}/ui/scroll-area.d.ts +1 -1
  33. package/dist/{src → packages/components/src}/ui/select.d.ts +1 -1
  34. package/dist/{src → packages/components/src}/ui/separator.d.ts +1 -1
  35. package/dist/{src → packages/components/src}/ui/sheet.d.ts +1 -2
  36. package/dist/{src → packages/components/src}/ui/sidebar.d.ts +1 -8
  37. package/dist/{src → packages/components/src}/ui/slider.d.ts +1 -1
  38. package/dist/{src → packages/components/src}/ui/switch.d.ts +1 -1
  39. package/dist/{src → packages/components/src}/ui/tabs.d.ts +1 -1
  40. package/dist/{src → packages/components/src}/ui/toast.d.ts +1 -1
  41. package/dist/{src → packages/components/src}/ui/toggle-group.d.ts +1 -1
  42. package/dist/{src → packages/components/src}/ui/toggle.d.ts +1 -1
  43. package/dist/{src → packages/components/src}/ui/tooltip.d.ts +1 -1
  44. package/package.json +68 -20
  45. package/.turbo/turbo-build.log +0 -64
  46. package/README_SHADCN_SYNC.md +0 -281
  47. package/TESTING.md +0 -335
  48. package/dist/src/ui/aspect-ratio.d.ts +0 -3
  49. package/dist/src/ui/chart.d.ts +0 -68
  50. package/dist/src/ui/resizable.d.ts +0 -14
  51. package/docs/FilterBuilder.md +0 -268
  52. package/metadata/Chart.component.yml +0 -30
  53. package/metadata/FilterBuilder.component.yml +0 -39
  54. package/metadata/GridLayout.component.yml +0 -27
  55. package/metadata/Menu.component.yml +0 -31
  56. package/metadata/ObjectForm.component.yml +0 -34
  57. package/metadata/ObjectGrid.component.yml +0 -72
  58. package/metadata/Page.component.yml +0 -24
  59. package/postcss.config.js +0 -14
  60. package/shadcn-components.json +0 -440
  61. package/src/SchemaRenderer.tsx +0 -28
  62. package/src/__tests__/PageRendererRegions.test.tsx +0 -668
  63. package/src/__tests__/README.md +0 -124
  64. package/src/__tests__/__snapshots__/snapshot-critical.test.tsx.snap +0 -811
  65. package/src/__tests__/__snapshots__/snapshot.test.tsx.snap +0 -327
  66. package/src/__tests__/accessibility.test.tsx +0 -137
  67. package/src/__tests__/action-bar.test.tsx +0 -206
  68. package/src/__tests__/api-consistency.test.tsx +0 -596
  69. package/src/__tests__/basic-renderers.test.tsx +0 -255
  70. package/src/__tests__/color-contrast.test.tsx +0 -212
  71. package/src/__tests__/complex-disclosure-renderers.test.tsx +0 -302
  72. package/src/__tests__/compliance.test.tsx +0 -72
  73. package/src/__tests__/config-field-renderer.test.tsx +0 -307
  74. package/src/__tests__/config-panel-renderer.test.tsx +0 -580
  75. package/src/__tests__/config-primitives.test.tsx +0 -106
  76. package/src/__tests__/edge-cases.test.tsx +0 -285
  77. package/src/__tests__/feedback-overlay-renderers.test.tsx +0 -349
  78. package/src/__tests__/filter-builder.test.tsx +0 -409
  79. package/src/__tests__/form-renderers.test.tsx +0 -364
  80. package/src/__tests__/layout-data-renderers.test.tsx +0 -340
  81. package/src/__tests__/mobile-accessibility.test.tsx +0 -120
  82. package/src/__tests__/navigation-overlay.test.tsx +0 -370
  83. package/src/__tests__/snapshot-critical.test.tsx +0 -317
  84. package/src/__tests__/snapshot.test.tsx +0 -205
  85. package/src/__tests__/test-utils.tsx +0 -190
  86. package/src/__tests__/use-config-draft.test.tsx +0 -295
  87. package/src/__tests__/view-compliance.test.tsx +0 -153
  88. package/src/__tests__/wcag-audit.test.tsx +0 -493
  89. package/src/custom/action-param-dialog.tsx +0 -264
  90. package/src/custom/button-group.tsx +0 -91
  91. package/src/custom/combobox.tsx +0 -104
  92. package/src/custom/config-field-renderer.tsx +0 -276
  93. package/src/custom/config-panel-renderer.tsx +0 -306
  94. package/src/custom/config-row.tsx +0 -50
  95. package/src/custom/date-picker.tsx +0 -61
  96. package/src/custom/empty.tsx +0 -112
  97. package/src/custom/field.tsx +0 -81
  98. package/src/custom/filter-builder.tsx +0 -418
  99. package/src/custom/index.ts +0 -21
  100. package/src/custom/input-group.tsx +0 -53
  101. package/src/custom/item.tsx +0 -201
  102. package/src/custom/kbd.tsx +0 -36
  103. package/src/custom/mobile-dialog-content.tsx +0 -67
  104. package/src/custom/native-select.tsx +0 -33
  105. package/src/custom/navigation-overlay.tsx +0 -334
  106. package/src/custom/section-header.tsx +0 -68
  107. package/src/custom/sort-builder.tsx +0 -129
  108. package/src/custom/spinner.tsx +0 -26
  109. package/src/custom/view-skeleton.tsx +0 -243
  110. package/src/custom/view-states.tsx +0 -153
  111. package/src/debug/DebugPanel.tsx +0 -313
  112. package/src/debug/__tests__/DebugPanel.test.tsx +0 -134
  113. package/src/debug/index.ts +0 -10
  114. package/src/hooks/use-config-draft.ts +0 -127
  115. package/src/hooks/use-mobile.tsx +0 -27
  116. package/src/index.css +0 -131
  117. package/src/index.ts +0 -47
  118. package/src/lib/use-sync-external-store-shim.ts +0 -10
  119. package/src/lib/use-sync-external-store-with-selector-shim.ts +0 -90
  120. package/src/lib/utils.tsx +0 -35
  121. package/src/new-components.test.ts +0 -73
  122. package/src/renderers/action/action-bar.tsx +0 -221
  123. package/src/renderers/action/action-button.tsx +0 -158
  124. package/src/renderers/action/action-group.tsx +0 -270
  125. package/src/renderers/action/action-icon.tsx +0 -150
  126. package/src/renderers/action/action-menu.tsx +0 -203
  127. package/src/renderers/action/index.ts +0 -19
  128. package/src/renderers/action/resolve-icon.ts +0 -35
  129. package/src/renderers/basic/button-group.tsx +0 -79
  130. package/src/renderers/basic/div.tsx +0 -60
  131. package/src/renderers/basic/html.tsx +0 -43
  132. package/src/renderers/basic/icon.tsx +0 -89
  133. package/src/renderers/basic/image.tsx +0 -49
  134. package/src/renderers/basic/index.ts +0 -18
  135. package/src/renderers/basic/navigation-menu.tsx +0 -81
  136. package/src/renderers/basic/pagination.tsx +0 -109
  137. package/src/renderers/basic/separator.tsx +0 -57
  138. package/src/renderers/basic/span.tsx +0 -63
  139. package/src/renderers/basic/text.tsx +0 -52
  140. package/src/renderers/complex/README-KANBAN.md +0 -208
  141. package/src/renderers/complex/TIMELINE.md +0 -353
  142. package/src/renderers/complex/__tests__/data-table-airtable-ux.test.tsx +0 -239
  143. package/src/renderers/complex/__tests__/data-table-batch-editing.test.tsx +0 -275
  144. package/src/renderers/complex/__tests__/data-table-cell-renderer.test.tsx +0 -120
  145. package/src/renderers/complex/__tests__/data-table-editing.test.tsx +0 -221
  146. package/src/renderers/complex/__tests__/data-table.test.ts +0 -76
  147. package/src/renderers/complex/carousel.tsx +0 -69
  148. package/src/renderers/complex/data-table.tsx +0 -1243
  149. package/src/renderers/complex/filter-builder.tsx +0 -77
  150. package/src/renderers/complex/index.ts +0 -16
  151. package/src/renderers/complex/resizable.tsx +0 -66
  152. package/src/renderers/complex/scroll-area.tsx +0 -58
  153. package/src/renderers/complex/table.tsx +0 -95
  154. package/src/renderers/data-display/alert.tsx +0 -46
  155. package/src/renderers/data-display/avatar.tsx +0 -38
  156. package/src/renderers/data-display/badge.tsx +0 -55
  157. package/src/renderers/data-display/breadcrumb.tsx +0 -61
  158. package/src/renderers/data-display/index.ts +0 -18
  159. package/src/renderers/data-display/kbd.tsx +0 -50
  160. package/src/renderers/data-display/list.tsx +0 -75
  161. package/src/renderers/data-display/statistic.tsx +0 -95
  162. package/src/renderers/data-display/table.tsx +0 -78
  163. package/src/renderers/data-display/tree-view.tsx +0 -176
  164. package/src/renderers/disclosure/accordion.tsx +0 -69
  165. package/src/renderers/disclosure/collapsible.tsx +0 -53
  166. package/src/renderers/disclosure/index.ts +0 -11
  167. package/src/renderers/disclosure/toggle-group.tsx +0 -79
  168. package/src/renderers/feedback/empty.tsx +0 -49
  169. package/src/renderers/feedback/index.ts +0 -16
  170. package/src/renderers/feedback/loading.tsx +0 -78
  171. package/src/renderers/feedback/progress.tsx +0 -29
  172. package/src/renderers/feedback/skeleton.tsx +0 -31
  173. package/src/renderers/feedback/sonner.tsx +0 -56
  174. package/src/renderers/feedback/spinner.tsx +0 -55
  175. package/src/renderers/feedback/toast.tsx +0 -59
  176. package/src/renderers/feedback/toaster.tsx +0 -23
  177. package/src/renderers/form/button.tsx +0 -103
  178. package/src/renderers/form/calendar.tsx +0 -34
  179. package/src/renderers/form/checkbox.tsx +0 -71
  180. package/src/renderers/form/combobox.tsx +0 -48
  181. package/src/renderers/form/command.tsx +0 -58
  182. package/src/renderers/form/date-picker.tsx +0 -84
  183. package/src/renderers/form/file-upload.tsx +0 -184
  184. package/src/renderers/form/form.tsx +0 -533
  185. package/src/renderers/form/index.ts +0 -26
  186. package/src/renderers/form/input-otp.tsx +0 -51
  187. package/src/renderers/form/input.tsx +0 -121
  188. package/src/renderers/form/label.tsx +0 -45
  189. package/src/renderers/form/radio-group.tsx +0 -63
  190. package/src/renderers/form/select.tsx +0 -94
  191. package/src/renderers/form/slider.tsx +0 -61
  192. package/src/renderers/form/switch.tsx +0 -48
  193. package/src/renderers/form/textarea.tsx +0 -76
  194. package/src/renderers/form/toggle.tsx +0 -42
  195. package/src/renderers/index.ts +0 -18
  196. package/src/renderers/layout/aspect-ratio.tsx +0 -51
  197. package/src/renderers/layout/card.tsx +0 -85
  198. package/src/renderers/layout/container.tsx +0 -122
  199. package/src/renderers/layout/flex.tsx +0 -132
  200. package/src/renderers/layout/grid.tsx +0 -178
  201. package/src/renderers/layout/index.ts +0 -19
  202. package/src/renderers/layout/page.tsx +0 -466
  203. package/src/renderers/layout/semantic.tsx +0 -48
  204. package/src/renderers/layout/stack.tsx +0 -132
  205. package/src/renderers/layout/tabs.tsx +0 -97
  206. package/src/renderers/navigation/header-bar.tsx +0 -118
  207. package/src/renderers/navigation/index.ts +0 -10
  208. package/src/renderers/navigation/sidebar.tsx +0 -208
  209. package/src/renderers/overlay/alert-dialog.tsx +0 -72
  210. package/src/renderers/overlay/context-menu.tsx +0 -100
  211. package/src/renderers/overlay/dialog.tsx +0 -77
  212. package/src/renderers/overlay/drawer.tsx +0 -77
  213. package/src/renderers/overlay/dropdown-menu.tsx +0 -99
  214. package/src/renderers/overlay/hover-card.tsx +0 -55
  215. package/src/renderers/overlay/index.ts +0 -18
  216. package/src/renderers/overlay/menubar.tsx +0 -76
  217. package/src/renderers/overlay/popover.tsx +0 -56
  218. package/src/renderers/overlay/sheet.tsx +0 -77
  219. package/src/renderers/overlay/tooltip.tsx +0 -67
  220. package/src/renderers/placeholders.tsx +0 -107
  221. package/src/stories/CRMApp.stories.tsx +0 -706
  222. package/src/stories/ConfigPanel.stories.tsx +0 -232
  223. package/src/stories/Guide.mdx +0 -55
  224. package/src/stories/MockedData.stories.tsx +0 -121
  225. package/src/stories/assets/accessibility.png +0 -0
  226. package/src/stories/assets/accessibility.svg +0 -1
  227. package/src/stories/assets/addon-library.png +0 -0
  228. package/src/stories/assets/assets.png +0 -0
  229. package/src/stories/assets/avif-test-image.avif +0 -0
  230. package/src/stories/assets/context.png +0 -0
  231. package/src/stories/assets/discord.svg +0 -1
  232. package/src/stories/assets/docs.png +0 -0
  233. package/src/stories/assets/figma-plugin.png +0 -0
  234. package/src/stories/assets/github.svg +0 -1
  235. package/src/stories/assets/share.png +0 -0
  236. package/src/stories/assets/styling.png +0 -0
  237. package/src/stories/assets/testing.png +0 -0
  238. package/src/stories/assets/theming.png +0 -0
  239. package/src/stories/assets/tutorials.svg +0 -1
  240. package/src/stories/assets/youtube.svg +0 -1
  241. package/src/stories/button.css +0 -30
  242. package/src/stories/header.css +0 -32
  243. package/src/stories/page.css +0 -68
  244. package/src/stories-json/Accessibility.mdx +0 -297
  245. package/src/stories-json/EdgeCases.stories.tsx +0 -160
  246. package/src/stories-json/GettingStarted.mdx +0 -89
  247. package/src/stories-json/Introduction.mdx +0 -127
  248. package/src/stories-json/accordion.stories.tsx +0 -43
  249. package/src/stories-json/aggrid.stories.tsx +0 -103
  250. package/src/stories-json/alert.stories.tsx +0 -39
  251. package/src/stories-json/aspect-ratio.stories.tsx +0 -34
  252. package/src/stories-json/avatar.stories.tsx +0 -38
  253. package/src/stories-json/badge.stories.tsx +0 -53
  254. package/src/stories-json/breadcrumb.stories.tsx +0 -30
  255. package/src/stories-json/button-group.stories.tsx +0 -43
  256. package/src/stories-json/button.stories.tsx +0 -73
  257. package/src/stories-json/calendar.stories.tsx +0 -85
  258. package/src/stories-json/card.stories.tsx +0 -48
  259. package/src/stories-json/carousel.stories.tsx +0 -33
  260. package/src/stories-json/charts.stories.tsx +0 -195
  261. package/src/stories-json/chatbot.stories.tsx +0 -248
  262. package/src/stories-json/code-editor.stories.tsx +0 -92
  263. package/src/stories-json/collapsible.stories.tsx +0 -40
  264. package/src/stories-json/controls.stories.tsx +0 -36
  265. package/src/stories-json/crm-live-data.stories.tsx +0 -154
  266. package/src/stories-json/dashboard.stories.tsx +0 -318
  267. package/src/stories-json/data-table.stories.tsx +0 -136
  268. package/src/stories-json/data_display_extras.stories.tsx +0 -102
  269. package/src/stories-json/date-picker.stories.tsx +0 -28
  270. package/src/stories-json/detail-view.stories.tsx +0 -258
  271. package/src/stories-json/dialog.stories.tsx +0 -43
  272. package/src/stories-json/feedback_extras.stories.tsx +0 -40
  273. package/src/stories-json/feedback_others.stories.tsx +0 -46
  274. package/src/stories-json/form-variants.stories.tsx +0 -210
  275. package/src/stories-json/form_advanced.stories.tsx +0 -117
  276. package/src/stories-json/form_extras.stories.tsx +0 -123
  277. package/src/stories-json/grid.stories.tsx +0 -56
  278. package/src/stories-json/icon.stories.tsx +0 -36
  279. package/src/stories-json/input.stories.tsx +0 -52
  280. package/src/stories-json/kanban.stories.tsx +0 -295
  281. package/src/stories-json/layout_extended.stories.tsx +0 -76
  282. package/src/stories-json/layout_flex.stories.tsx +0 -107
  283. package/src/stories-json/list-view.stories.tsx +0 -97
  284. package/src/stories-json/markdown.stories.tsx +0 -129
  285. package/src/stories-json/menus.stories.tsx +0 -63
  286. package/src/stories-json/metric-card.stories.tsx +0 -143
  287. package/src/stories-json/navigation-menu.stories.tsx +0 -37
  288. package/src/stories-json/object-aggrid-advanced.stories.tsx +0 -389
  289. package/src/stories-json/object-aggrid.stories.tsx +0 -252
  290. package/src/stories-json/object-form.stories.tsx +0 -130
  291. package/src/stories-json/object-gantt.stories.tsx +0 -114
  292. package/src/stories-json/object-grid.stories.tsx +0 -315
  293. package/src/stories-json/object-map.stories.tsx +0 -116
  294. package/src/stories-json/object-view.stories.tsx +0 -118
  295. package/src/stories-json/overlay_extras.stories.tsx +0 -113
  296. package/src/stories-json/overlay_others.stories.tsx +0 -76
  297. package/src/stories-json/page.stories.tsx +0 -55
  298. package/src/stories-json/reports.stories.tsx +0 -163
  299. package/src/stories-json/resizable.stories.tsx +0 -44
  300. package/src/stories-json/select.stories.tsx +0 -34
  301. package/src/stories-json/separator.stories.tsx +0 -41
  302. package/src/stories-json/sidebar.stories.tsx +0 -147
  303. package/src/stories-json/statistic.stories.tsx +0 -44
  304. package/src/stories-json/tabs.stories.tsx +0 -51
  305. package/src/stories-json/timeline.stories.tsx +0 -188
  306. package/src/stories-json/typography.stories.tsx +0 -45
  307. package/src/types/config-panel.ts +0 -101
  308. package/src/ui/accordion.tsx +0 -66
  309. package/src/ui/alert-dialog.tsx +0 -149
  310. package/src/ui/alert.tsx +0 -67
  311. package/src/ui/aspect-ratio.tsx +0 -15
  312. package/src/ui/avatar.tsx +0 -58
  313. package/src/ui/badge.tsx +0 -44
  314. package/src/ui/breadcrumb.tsx +0 -123
  315. package/src/ui/button.tsx +0 -66
  316. package/src/ui/calendar.tsx +0 -221
  317. package/src/ui/card.tsx +0 -87
  318. package/src/ui/carousel.tsx +0 -270
  319. package/src/ui/chart.tsx +0 -367
  320. package/src/ui/checkbox.tsx +0 -38
  321. package/src/ui/collapsible.tsx +0 -19
  322. package/src/ui/command.tsx +0 -161
  323. package/src/ui/context-menu.tsx +0 -208
  324. package/src/ui/dialog.tsx +0 -147
  325. package/src/ui/drawer.tsx +0 -126
  326. package/src/ui/dropdown-menu.tsx +0 -208
  327. package/src/ui/form.tsx +0 -186
  328. package/src/ui/hover-card.tsx +0 -37
  329. package/src/ui/index.ts +0 -56
  330. package/src/ui/input-otp.tsx +0 -79
  331. package/src/ui/input.tsx +0 -30
  332. package/src/ui/label.tsx +0 -34
  333. package/src/ui/menubar.tsx +0 -264
  334. package/src/ui/navigation-menu.tsx +0 -136
  335. package/src/ui/pagination.tsx +0 -125
  336. package/src/ui/popover.tsx +0 -39
  337. package/src/ui/progress.tsx +0 -36
  338. package/src/ui/radio-group.tsx +0 -52
  339. package/src/ui/resizable.tsx +0 -53
  340. package/src/ui/scroll-area.tsx +0 -56
  341. package/src/ui/select.tsx +0 -168
  342. package/src/ui/separator.tsx +0 -39
  343. package/src/ui/sheet.tsx +0 -151
  344. package/src/ui/sidebar.tsx +0 -866
  345. package/src/ui/skeleton.tsx +0 -23
  346. package/src/ui/slider.tsx +0 -40
  347. package/src/ui/sonner.tsx +0 -53
  348. package/src/ui/switch.tsx +0 -37
  349. package/src/ui/table.tsx +0 -125
  350. package/src/ui/tabs.tsx +0 -63
  351. package/src/ui/textarea.tsx +0 -30
  352. package/src/ui/toast.tsx +0 -137
  353. package/src/ui/toggle-group.tsx +0 -69
  354. package/src/ui/toggle.tsx +0 -53
  355. package/src/ui/tooltip.tsx +0 -38
  356. package/src/ui/typography.tsx +0 -85
  357. package/tsconfig.json +0 -19
  358. package/vite.config.ts +0 -70
  359. package/vitest.config.ts +0 -5
  360. /package/dist/{src → packages/components/src}/SchemaRenderer.d.ts +0 -0
  361. /package/dist/{src → packages/components/src}/custom/action-param-dialog.d.ts +0 -0
  362. /package/dist/{src → packages/components/src}/custom/button-group.d.ts +0 -0
  363. /package/dist/{src → packages/components/src}/custom/combobox.d.ts +0 -0
  364. /package/dist/{src → packages/components/src}/custom/config-field-renderer.d.ts +0 -0
  365. /package/dist/{src → packages/components/src}/custom/config-panel-renderer.d.ts +0 -0
  366. /package/dist/{src → packages/components/src}/custom/config-row.d.ts +0 -0
  367. /package/dist/{src → packages/components/src}/custom/date-picker.d.ts +0 -0
  368. /package/dist/{src → packages/components/src}/custom/field.d.ts +0 -0
  369. /package/dist/{src → packages/components/src}/custom/filter-builder.d.ts +0 -0
  370. /package/dist/{src → packages/components/src}/custom/index.d.ts +0 -0
  371. /package/dist/{src → packages/components/src}/custom/input-group.d.ts +0 -0
  372. /package/dist/{src → packages/components/src}/custom/item.d.ts +0 -0
  373. /package/dist/{src → packages/components/src}/custom/kbd.d.ts +0 -0
  374. /package/dist/{src → packages/components/src}/custom/native-select.d.ts +0 -0
  375. /package/dist/{src → packages/components/src}/custom/navigation-overlay.d.ts +0 -0
  376. /package/dist/{src → packages/components/src}/custom/section-header.d.ts +0 -0
  377. /package/dist/{src → packages/components/src}/custom/sort-builder.d.ts +0 -0
  378. /package/dist/{src → packages/components/src}/custom/spinner.d.ts +0 -0
  379. /package/dist/{src → packages/components/src}/custom/view-skeleton.d.ts +0 -0
  380. /package/dist/{src → packages/components/src}/custom/view-states.d.ts +0 -0
  381. /package/dist/{src → packages/components/src}/debug/DebugPanel.d.ts +0 -0
  382. /package/dist/{src → packages/components/src}/debug/index.d.ts +0 -0
  383. /package/dist/{src → packages/components/src}/hooks/use-config-draft.d.ts +0 -0
  384. /package/dist/{src → packages/components/src}/hooks/use-mobile.d.ts +0 -0
  385. /package/dist/{src → packages/components/src}/index.d.ts +0 -0
  386. /package/dist/{src → packages/components/src}/lib/use-sync-external-store-shim.d.ts +0 -0
  387. /package/dist/{src → packages/components/src}/lib/use-sync-external-store-with-selector-shim.d.ts +0 -0
  388. /package/dist/{src → packages/components/src}/lib/utils.d.ts +0 -0
  389. /package/dist/{src → packages/components/src}/renderers/action/action-button.d.ts +0 -0
  390. /package/dist/{src → packages/components/src}/renderers/action/action-group.d.ts +0 -0
  391. /package/dist/{src → packages/components/src}/renderers/action/action-icon.d.ts +0 -0
  392. /package/dist/{src → packages/components/src}/renderers/action/action-menu.d.ts +0 -0
  393. /package/dist/{src → packages/components/src}/renderers/action/index.d.ts +0 -0
  394. /package/dist/{src → packages/components/src}/renderers/action/resolve-icon.d.ts +0 -0
  395. /package/dist/{src → packages/components/src}/renderers/basic/button-group.d.ts +0 -0
  396. /package/dist/{src → packages/components/src}/renderers/basic/div.d.ts +0 -0
  397. /package/dist/{src → packages/components/src}/renderers/basic/html.d.ts +0 -0
  398. /package/dist/{src → packages/components/src}/renderers/basic/icon.d.ts +0 -0
  399. /package/dist/{src → packages/components/src}/renderers/basic/image.d.ts +0 -0
  400. /package/dist/{src → packages/components/src}/renderers/basic/index.d.ts +0 -0
  401. /package/dist/{src → packages/components/src}/renderers/basic/navigation-menu.d.ts +0 -0
  402. /package/dist/{src → packages/components/src}/renderers/basic/pagination.d.ts +0 -0
  403. /package/dist/{src → packages/components/src}/renderers/basic/separator.d.ts +0 -0
  404. /package/dist/{src → packages/components/src}/renderers/basic/span.d.ts +0 -0
  405. /package/dist/{src → packages/components/src}/renderers/basic/text.d.ts +0 -0
  406. /package/dist/{src → packages/components/src}/renderers/complex/carousel.d.ts +0 -0
  407. /package/dist/{src → packages/components/src}/renderers/complex/data-table.d.ts +0 -0
  408. /package/dist/{src → packages/components/src}/renderers/complex/filter-builder.d.ts +0 -0
  409. /package/dist/{src → packages/components/src}/renderers/complex/index.d.ts +0 -0
  410. /package/dist/{src → packages/components/src}/renderers/complex/resizable.d.ts +0 -0
  411. /package/dist/{src → packages/components/src}/renderers/complex/scroll-area.d.ts +0 -0
  412. /package/dist/{src → packages/components/src}/renderers/complex/table.d.ts +0 -0
  413. /package/dist/{src → packages/components/src}/renderers/data-display/alert.d.ts +0 -0
  414. /package/dist/{src → packages/components/src}/renderers/data-display/avatar.d.ts +0 -0
  415. /package/dist/{src → packages/components/src}/renderers/data-display/badge.d.ts +0 -0
  416. /package/dist/{src → packages/components/src}/renderers/data-display/breadcrumb.d.ts +0 -0
  417. /package/dist/{src → packages/components/src}/renderers/data-display/index.d.ts +0 -0
  418. /package/dist/{src → packages/components/src}/renderers/data-display/kbd.d.ts +0 -0
  419. /package/dist/{src → packages/components/src}/renderers/data-display/list.d.ts +0 -0
  420. /package/dist/{src → packages/components/src}/renderers/data-display/statistic.d.ts +0 -0
  421. /package/dist/{src → packages/components/src}/renderers/data-display/table.d.ts +0 -0
  422. /package/dist/{src → packages/components/src}/renderers/data-display/tree-view.d.ts +0 -0
  423. /package/dist/{src → packages/components/src}/renderers/disclosure/accordion.d.ts +0 -0
  424. /package/dist/{src → packages/components/src}/renderers/disclosure/collapsible.d.ts +0 -0
  425. /package/dist/{src → packages/components/src}/renderers/disclosure/index.d.ts +0 -0
  426. /package/dist/{src → packages/components/src}/renderers/disclosure/toggle-group.d.ts +0 -0
  427. /package/dist/{src → packages/components/src}/renderers/feedback/empty.d.ts +0 -0
  428. /package/dist/{src → packages/components/src}/renderers/feedback/index.d.ts +0 -0
  429. /package/dist/{src → packages/components/src}/renderers/feedback/loading.d.ts +0 -0
  430. /package/dist/{src → packages/components/src}/renderers/feedback/progress.d.ts +0 -0
  431. /package/dist/{src → packages/components/src}/renderers/feedback/skeleton.d.ts +0 -0
  432. /package/dist/{src → packages/components/src}/renderers/feedback/sonner.d.ts +0 -0
  433. /package/dist/{src → packages/components/src}/renderers/feedback/spinner.d.ts +0 -0
  434. /package/dist/{src → packages/components/src}/renderers/feedback/toast.d.ts +0 -0
  435. /package/dist/{src → packages/components/src}/renderers/feedback/toaster.d.ts +0 -0
  436. /package/dist/{src → packages/components/src}/renderers/form/button.d.ts +0 -0
  437. /package/dist/{src → packages/components/src}/renderers/form/calendar.d.ts +0 -0
  438. /package/dist/{src → packages/components/src}/renderers/form/checkbox.d.ts +0 -0
  439. /package/dist/{src → packages/components/src}/renderers/form/combobox.d.ts +0 -0
  440. /package/dist/{src → packages/components/src}/renderers/form/command.d.ts +0 -0
  441. /package/dist/{src → packages/components/src}/renderers/form/date-picker.d.ts +0 -0
  442. /package/dist/{src → packages/components/src}/renderers/form/file-upload.d.ts +0 -0
  443. /package/dist/{src → packages/components/src}/renderers/form/form.d.ts +0 -0
  444. /package/dist/{src → packages/components/src}/renderers/form/index.d.ts +0 -0
  445. /package/dist/{src → packages/components/src}/renderers/form/input-otp.d.ts +0 -0
  446. /package/dist/{src → packages/components/src}/renderers/form/input.d.ts +0 -0
  447. /package/dist/{src → packages/components/src}/renderers/form/label.d.ts +0 -0
  448. /package/dist/{src → packages/components/src}/renderers/form/radio-group.d.ts +0 -0
  449. /package/dist/{src → packages/components/src}/renderers/form/select.d.ts +0 -0
  450. /package/dist/{src → packages/components/src}/renderers/form/slider.d.ts +0 -0
  451. /package/dist/{src → packages/components/src}/renderers/form/switch.d.ts +0 -0
  452. /package/dist/{src → packages/components/src}/renderers/form/textarea.d.ts +0 -0
  453. /package/dist/{src → packages/components/src}/renderers/form/toggle.d.ts +0 -0
  454. /package/dist/{src → packages/components/src}/renderers/index.d.ts +0 -0
  455. /package/dist/{src → packages/components/src}/renderers/layout/aspect-ratio.d.ts +0 -0
  456. /package/dist/{src → packages/components/src}/renderers/layout/card.d.ts +0 -0
  457. /package/dist/{src → packages/components/src}/renderers/layout/container.d.ts +0 -0
  458. /package/dist/{src → packages/components/src}/renderers/layout/flex.d.ts +0 -0
  459. /package/dist/{src → packages/components/src}/renderers/layout/grid.d.ts +0 -0
  460. /package/dist/{src → packages/components/src}/renderers/layout/index.d.ts +0 -0
  461. /package/dist/{src → packages/components/src}/renderers/layout/page.d.ts +0 -0
  462. /package/dist/{src → packages/components/src}/renderers/layout/semantic.d.ts +0 -0
  463. /package/dist/{src → packages/components/src}/renderers/layout/stack.d.ts +0 -0
  464. /package/dist/{src → packages/components/src}/renderers/layout/tabs.d.ts +0 -0
  465. /package/dist/{src → packages/components/src}/renderers/navigation/header-bar.d.ts +0 -0
  466. /package/dist/{src → packages/components/src}/renderers/navigation/index.d.ts +0 -0
  467. /package/dist/{src → packages/components/src}/renderers/navigation/sidebar.d.ts +0 -0
  468. /package/dist/{src → packages/components/src}/renderers/overlay/alert-dialog.d.ts +0 -0
  469. /package/dist/{src → packages/components/src}/renderers/overlay/context-menu.d.ts +0 -0
  470. /package/dist/{src → packages/components/src}/renderers/overlay/dialog.d.ts +0 -0
  471. /package/dist/{src → packages/components/src}/renderers/overlay/drawer.d.ts +0 -0
  472. /package/dist/{src → packages/components/src}/renderers/overlay/dropdown-menu.d.ts +0 -0
  473. /package/dist/{src → packages/components/src}/renderers/overlay/hover-card.d.ts +0 -0
  474. /package/dist/{src → packages/components/src}/renderers/overlay/index.d.ts +0 -0
  475. /package/dist/{src → packages/components/src}/renderers/overlay/menubar.d.ts +0 -0
  476. /package/dist/{src → packages/components/src}/renderers/overlay/popover.d.ts +0 -0
  477. /package/dist/{src → packages/components/src}/renderers/overlay/sheet.d.ts +0 -0
  478. /package/dist/{src → packages/components/src}/renderers/overlay/tooltip.d.ts +0 -0
  479. /package/dist/{src → packages/components/src}/renderers/placeholders.d.ts +0 -0
  480. /package/dist/{src → packages/components/src}/types/config-panel.d.ts +0 -0
  481. /package/dist/{src → packages/components/src}/ui/alert.d.ts +0 -0
  482. /package/dist/{src → packages/components/src}/ui/badge.d.ts +0 -0
  483. /package/dist/{src → packages/components/src}/ui/breadcrumb.d.ts +0 -0
  484. /package/dist/{src → packages/components/src}/ui/calendar.d.ts +0 -0
  485. /package/dist/{src → packages/components/src}/ui/card.d.ts +0 -0
  486. /package/dist/{src → packages/components/src}/ui/carousel.d.ts +0 -0
  487. /package/dist/{src → packages/components/src}/ui/index.d.ts +0 -0
  488. /package/dist/{src → packages/components/src}/ui/input-otp.d.ts +0 -0
  489. /package/dist/{src → packages/components/src}/ui/input.d.ts +0 -0
  490. /package/dist/{src → packages/components/src}/ui/pagination.d.ts +0 -0
  491. /package/dist/{src → packages/components/src}/ui/skeleton.d.ts +0 -0
  492. /package/dist/{src → packages/components/src}/ui/sonner.d.ts +0 -0
  493. /package/dist/{src → packages/components/src}/ui/table.d.ts +0 -0
  494. /package/dist/{src → packages/components/src}/ui/textarea.d.ts +0 -0
  495. /package/dist/{src → packages/components/src}/ui/typography.d.ts +0 -0
@@ -1,409 +0,0 @@
1
- /**
2
- * ObjectUI
3
- * Copyright (c) 2024-present ObjectStack Inc.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
-
9
- import { describe, it, expect, vi, beforeEach } from 'vitest';
10
- import { render, screen, fireEvent } from '@testing-library/react';
11
- import { FilterBuilder } from '../custom/filter-builder';
12
-
13
- // Mock crypto.randomUUID for deterministic test IDs
14
- let uuidCounter = 0;
15
- beforeEach(() => {
16
- uuidCounter = 0;
17
- vi.spyOn(crypto, 'randomUUID').mockImplementation(
18
- () => `test-uuid-${++uuidCounter}` as `${string}-${string}-${string}-${string}-${string}`,
19
- );
20
- });
21
-
22
- const selectFields = [
23
- {
24
- value: 'status',
25
- label: 'Status',
26
- type: 'select',
27
- options: [
28
- { value: 'active', label: 'Active' },
29
- { value: 'inactive', label: 'Inactive' },
30
- { value: 'pending', label: 'Pending' },
31
- ],
32
- },
33
- {
34
- value: 'name',
35
- label: 'Name',
36
- type: 'text',
37
- },
38
- ];
39
-
40
- const lookupFields = [
41
- {
42
- value: 'account',
43
- label: 'Account',
44
- type: 'lookup',
45
- options: [
46
- { value: 'acme', label: 'Acme Corp' },
47
- { value: 'globex', label: 'Globex' },
48
- { value: 'soylent', label: 'Soylent Corp' },
49
- ],
50
- },
51
- ];
52
-
53
- describe('FilterBuilder', () => {
54
- describe('lookup field type', () => {
55
- it('renders without error for lookup fields', () => {
56
- const onChange = vi.fn();
57
- const { container } = render(
58
- <FilterBuilder
59
- fields={lookupFields}
60
- value={{
61
- id: 'root',
62
- logic: 'and',
63
- conditions: [
64
- { id: 'c1', field: 'account', operator: 'equals', value: '' },
65
- ],
66
- }}
67
- onChange={onChange}
68
- />,
69
- );
70
-
71
- // Should render the filter condition row
72
- expect(container.querySelector('.space-y-3')).toBeInTheDocument();
73
- });
74
-
75
- it('renders multi-select checkboxes for lookup field with "in" operator', () => {
76
- const onChange = vi.fn();
77
- render(
78
- <FilterBuilder
79
- fields={lookupFields}
80
- value={{
81
- id: 'root',
82
- logic: 'and',
83
- conditions: [
84
- { id: 'c1', field: 'account', operator: 'in', value: [] },
85
- ],
86
- }}
87
- onChange={onChange}
88
- />,
89
- );
90
-
91
- // Should render checkboxes for lookup options
92
- const checkboxes = screen.getAllByRole('checkbox');
93
- expect(checkboxes.length).toBe(3);
94
- expect(screen.getByText('Acme Corp')).toBeInTheDocument();
95
- expect(screen.getByText('Globex')).toBeInTheDocument();
96
- expect(screen.getByText('Soylent Corp')).toBeInTheDocument();
97
- });
98
- });
99
-
100
- describe('multi-select with in/notIn operator', () => {
101
- it('renders checkbox list for select field with "in" operator', () => {
102
- const onChange = vi.fn();
103
- render(
104
- <FilterBuilder
105
- fields={selectFields}
106
- value={{
107
- id: 'root',
108
- logic: 'and',
109
- conditions: [
110
- { id: 'c1', field: 'status', operator: 'in', value: [] },
111
- ],
112
- }}
113
- onChange={onChange}
114
- />,
115
- );
116
-
117
- // Should render checkboxes for all options
118
- const checkboxes = screen.getAllByRole('checkbox');
119
- expect(checkboxes.length).toBe(3);
120
- expect(screen.getByText('Active')).toBeInTheDocument();
121
- expect(screen.getByText('Inactive')).toBeInTheDocument();
122
- expect(screen.getByText('Pending')).toBeInTheDocument();
123
- });
124
-
125
- it('checks selected items in multi-select', () => {
126
- const onChange = vi.fn();
127
- render(
128
- <FilterBuilder
129
- fields={selectFields}
130
- value={{
131
- id: 'root',
132
- logic: 'and',
133
- conditions: [
134
- { id: 'c1', field: 'status', operator: 'in', value: ['active', 'pending'] },
135
- ],
136
- }}
137
- onChange={onChange}
138
- />,
139
- );
140
-
141
- const checkboxes = screen.getAllByRole('checkbox') as HTMLInputElement[];
142
- // Active and Pending should be checked
143
- expect(checkboxes[0]).toBeChecked(); // Active
144
- expect(checkboxes[1]).not.toBeChecked(); // Inactive
145
- expect(checkboxes[2]).toBeChecked(); // Pending
146
- });
147
-
148
- it('adds value when checkbox is checked', () => {
149
- const onChange = vi.fn();
150
- render(
151
- <FilterBuilder
152
- fields={selectFields}
153
- value={{
154
- id: 'root',
155
- logic: 'and',
156
- conditions: [
157
- { id: 'c1', field: 'status', operator: 'in', value: ['active'] },
158
- ],
159
- }}
160
- onChange={onChange}
161
- />,
162
- );
163
-
164
- // Click the unchecked Inactive checkbox
165
- const checkboxes = screen.getAllByRole('checkbox');
166
- fireEvent.click(checkboxes[1]); // Inactive
167
-
168
- expect(onChange).toHaveBeenCalled();
169
- const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0];
170
- const condition = lastCall.conditions[0];
171
- expect(condition.value).toEqual(['active', 'inactive']);
172
- });
173
-
174
- it('removes value when checkbox is unchecked', () => {
175
- const onChange = vi.fn();
176
- render(
177
- <FilterBuilder
178
- fields={selectFields}
179
- value={{
180
- id: 'root',
181
- logic: 'and',
182
- conditions: [
183
- { id: 'c1', field: 'status', operator: 'in', value: ['active', 'inactive'] },
184
- ],
185
- }}
186
- onChange={onChange}
187
- />,
188
- );
189
-
190
- // Click the checked Active checkbox
191
- const checkboxes = screen.getAllByRole('checkbox');
192
- fireEvent.click(checkboxes[0]); // Active
193
-
194
- expect(onChange).toHaveBeenCalled();
195
- const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0];
196
- const condition = lastCall.conditions[0];
197
- expect(condition.value).toEqual(['inactive']);
198
- });
199
-
200
- it('renders checkbox list for notIn operator', () => {
201
- const onChange = vi.fn();
202
- render(
203
- <FilterBuilder
204
- fields={selectFields}
205
- value={{
206
- id: 'root',
207
- logic: 'and',
208
- conditions: [
209
- { id: 'c1', field: 'status', operator: 'notIn', value: [] },
210
- ],
211
- }}
212
- onChange={onChange}
213
- />,
214
- );
215
-
216
- const checkboxes = screen.getAllByRole('checkbox');
217
- expect(checkboxes.length).toBe(3);
218
- });
219
-
220
- it('does not render checkboxes for equals operator (single select)', () => {
221
- const onChange = vi.fn();
222
- render(
223
- <FilterBuilder
224
- fields={selectFields}
225
- value={{
226
- id: 'root',
227
- logic: 'and',
228
- conditions: [
229
- { id: 'c1', field: 'status', operator: 'equals', value: '' },
230
- ],
231
- }}
232
- onChange={onChange}
233
- />,
234
- );
235
-
236
- // Should NOT render checkboxes (single select via Select component)
237
- expect(screen.queryAllByRole('checkbox').length).toBe(0);
238
- });
239
- });
240
-
241
- describe('currency/percent/rating fields use number input', () => {
242
- const numericFields = [
243
- { value: 'amount', label: 'Amount', type: 'currency' },
244
- { value: 'rate', label: 'Rate', type: 'percent' },
245
- { value: 'score', label: 'Score', type: 'rating' },
246
- ];
247
-
248
- it('renders number input for currency field', () => {
249
- const onChange = vi.fn();
250
- render(
251
- <FilterBuilder
252
- fields={numericFields}
253
- value={{
254
- id: 'root',
255
- logic: 'and',
256
- conditions: [
257
- { id: 'c1', field: 'amount', operator: 'equals', value: '' },
258
- ],
259
- }}
260
- onChange={onChange}
261
- />,
262
- );
263
-
264
- const input = screen.getByPlaceholderText('Value') as HTMLInputElement;
265
- expect(input.type).toBe('number');
266
- });
267
-
268
- it('renders number input for percent field', () => {
269
- const onChange = vi.fn();
270
- render(
271
- <FilterBuilder
272
- fields={numericFields}
273
- value={{
274
- id: 'root',
275
- logic: 'and',
276
- conditions: [
277
- { id: 'c1', field: 'rate', operator: 'equals', value: '' },
278
- ],
279
- }}
280
- onChange={onChange}
281
- />,
282
- );
283
-
284
- const input = screen.getByPlaceholderText('Value') as HTMLInputElement;
285
- expect(input.type).toBe('number');
286
- });
287
- });
288
-
289
- describe('datetime/time fields use appropriate input types', () => {
290
- const dateTimeFields = [
291
- { value: 'created_at', label: 'Created At', type: 'datetime' },
292
- { value: 'start_time', label: 'Start Time', type: 'time' },
293
- ];
294
-
295
- it('renders datetime-local input for datetime field', () => {
296
- const onChange = vi.fn();
297
- render(
298
- <FilterBuilder
299
- fields={dateTimeFields}
300
- value={{
301
- id: 'root',
302
- logic: 'and',
303
- conditions: [
304
- { id: 'c1', field: 'created_at', operator: 'equals', value: '' },
305
- ],
306
- }}
307
- onChange={onChange}
308
- />,
309
- );
310
-
311
- const input = screen.getByPlaceholderText('Value') as HTMLInputElement;
312
- expect(input.type).toBe('datetime-local');
313
- });
314
-
315
- it('renders time input for time field', () => {
316
- const onChange = vi.fn();
317
- render(
318
- <FilterBuilder
319
- fields={dateTimeFields}
320
- value={{
321
- id: 'root',
322
- logic: 'and',
323
- conditions: [
324
- { id: 'c1', field: 'start_time', operator: 'equals', value: '' },
325
- ],
326
- }}
327
- onChange={onChange}
328
- />,
329
- );
330
-
331
- const input = screen.getByPlaceholderText('Value') as HTMLInputElement;
332
- expect(input.type).toBe('time');
333
- });
334
- });
335
-
336
- describe('status field uses select operators and dropdown', () => {
337
- const statusFields = [
338
- {
339
- value: 'pipeline',
340
- label: 'Pipeline Stage',
341
- type: 'status',
342
- options: [
343
- { value: 'lead', label: 'Lead' },
344
- { value: 'qualified', label: 'Qualified' },
345
- { value: 'won', label: 'Won' },
346
- ],
347
- },
348
- ];
349
-
350
- it('renders multi-select checkboxes for status field with "in" operator', () => {
351
- const onChange = vi.fn();
352
- render(
353
- <FilterBuilder
354
- fields={statusFields}
355
- value={{
356
- id: 'root',
357
- logic: 'and',
358
- conditions: [
359
- { id: 'c1', field: 'pipeline', operator: 'in', value: [] },
360
- ],
361
- }}
362
- onChange={onChange}
363
- />,
364
- );
365
-
366
- const checkboxes = screen.getAllByRole('checkbox');
367
- expect(checkboxes.length).toBe(3);
368
- expect(screen.getByText('Lead')).toBeInTheDocument();
369
- expect(screen.getByText('Qualified')).toBeInTheDocument();
370
- expect(screen.getByText('Won')).toBeInTheDocument();
371
- });
372
- });
373
-
374
- describe('user/owner field uses lookup operators and dropdown', () => {
375
- const userFields = [
376
- {
377
- value: 'assigned_to',
378
- label: 'Assigned To',
379
- type: 'user',
380
- options: [
381
- { value: 'user1', label: 'Alice' },
382
- { value: 'user2', label: 'Bob' },
383
- ],
384
- },
385
- ];
386
-
387
- it('renders multi-select checkboxes for user field with "in" operator', () => {
388
- const onChange = vi.fn();
389
- render(
390
- <FilterBuilder
391
- fields={userFields}
392
- value={{
393
- id: 'root',
394
- logic: 'and',
395
- conditions: [
396
- { id: 'c1', field: 'assigned_to', operator: 'in', value: [] },
397
- ],
398
- }}
399
- onChange={onChange}
400
- />,
401
- );
402
-
403
- const checkboxes = screen.getAllByRole('checkbox');
404
- expect(checkboxes.length).toBe(2);
405
- expect(screen.getByText('Alice')).toBeInTheDocument();
406
- expect(screen.getByText('Bob')).toBeInTheDocument();
407
- });
408
- });
409
- });