@ankhorage/zora 14.0.1 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/constants.d.ts +5 -0
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +5 -0
  6. package/dist/constants.js.map +1 -1
  7. package/dist/features/accordion/accordionItemMeta.d.ts +1 -1
  8. package/dist/features/app-bar/adapters/inbound/AppBar.d.ts.map +1 -1
  9. package/dist/features/app-bar/adapters/inbound/AppBar.js +28 -27
  10. package/dist/features/app-bar/adapters/inbound/AppBar.js.map +1 -1
  11. package/dist/features/app-bar/public.d.ts +1 -1
  12. package/dist/features/app-bar/public.d.ts.map +1 -1
  13. package/dist/features/app-bar/public.js.map +1 -1
  14. package/dist/features/bottom-sheet/bottomSheetMeta.d.ts +1 -1
  15. package/dist/features/bottom-sheet/public.d.ts +2 -2
  16. package/dist/features/bottom-sheet/public.d.ts.map +1 -1
  17. package/dist/features/bottom-sheet/public.js +1 -1
  18. package/dist/features/bottom-sheet/public.js.map +1 -1
  19. package/dist/features/breadcrumbs/adapters/inbound/Breadcrumbs.d.ts +5 -0
  20. package/dist/features/breadcrumbs/adapters/inbound/Breadcrumbs.d.ts.map +1 -0
  21. package/dist/features/breadcrumbs/adapters/inbound/Breadcrumbs.js +81 -0
  22. package/dist/features/breadcrumbs/adapters/inbound/Breadcrumbs.js.map +1 -0
  23. package/dist/features/breadcrumbs/breadcrumbsMeta.d.ts +119 -0
  24. package/dist/features/breadcrumbs/breadcrumbsMeta.d.ts.map +1 -0
  25. package/dist/features/breadcrumbs/breadcrumbsMeta.js +94 -0
  26. package/dist/features/breadcrumbs/breadcrumbsMeta.js.map +1 -0
  27. package/dist/features/breadcrumbs/public.d.ts +3 -0
  28. package/dist/features/breadcrumbs/public.d.ts.map +1 -0
  29. package/dist/features/breadcrumbs/public.js +2 -0
  30. package/dist/features/breadcrumbs/public.js.map +1 -0
  31. package/dist/features/card/cardMeta.d.ts +1 -1
  32. package/dist/features/card/mediaCardMeta.d.ts +1 -1
  33. package/dist/features/card/postCardMeta.d.ts +1 -1
  34. package/dist/features/data-table/adapters/inbound/DataTable.d.ts.map +1 -1
  35. package/dist/features/data-table/adapters/inbound/DataTable.js +4 -2
  36. package/dist/features/data-table/adapters/inbound/DataTable.js.map +1 -1
  37. package/dist/features/dialog/adapters/inbound/Dialog.d.ts +5 -0
  38. package/dist/features/dialog/adapters/inbound/Dialog.d.ts.map +1 -0
  39. package/dist/features/dialog/adapters/inbound/Dialog.js +45 -0
  40. package/dist/features/dialog/adapters/inbound/Dialog.js.map +1 -0
  41. package/dist/features/dialog/dialogMeta.d.ts +87 -0
  42. package/dist/features/dialog/dialogMeta.d.ts.map +1 -0
  43. package/dist/features/dialog/dialogMeta.js +59 -0
  44. package/dist/features/dialog/dialogMeta.js.map +1 -0
  45. package/dist/features/dialog/public.d.ts +3 -0
  46. package/dist/features/dialog/public.d.ts.map +1 -0
  47. package/dist/features/dialog/public.js +2 -0
  48. package/dist/features/dialog/public.js.map +1 -0
  49. package/dist/features/form/formFieldMeta.d.ts +1 -1
  50. package/dist/features/form/formFieldMeta.d.ts.map +1 -1
  51. package/dist/features/form/formFieldMeta.js +8 -1
  52. package/dist/features/form/formFieldMeta.js.map +1 -1
  53. package/dist/features/form/radio/utils/resolveRadioGroupThemeRecipe.d.ts +1 -1
  54. package/dist/features/form/search-input/adapters/inbound/SearchInput.d.ts +4 -0
  55. package/dist/features/form/search-input/adapters/inbound/SearchInput.d.ts.map +1 -0
  56. package/dist/{components/search-bar/SearchBar.js → features/form/search-input/adapters/inbound/SearchInput.js} +8 -10
  57. package/dist/features/form/search-input/adapters/inbound/SearchInput.js.map +1 -0
  58. package/dist/features/form/search-input/public.d.ts +3 -0
  59. package/dist/features/form/search-input/public.d.ts.map +1 -0
  60. package/dist/features/form/search-input/public.js +2 -0
  61. package/dist/features/form/search-input/public.js.map +1 -0
  62. package/dist/features/form/search-input/searchInputMeta.d.ts +126 -0
  63. package/dist/features/form/search-input/searchInputMeta.d.ts.map +1 -0
  64. package/dist/features/form/search-input/searchInputMeta.js +67 -0
  65. package/dist/features/form/search-input/searchInputMeta.js.map +1 -0
  66. package/dist/features/form/select/adapters/inbound/Select.d.ts +2 -0
  67. package/dist/features/form/select/adapters/inbound/Select.d.ts.map +1 -0
  68. package/dist/features/form/select/adapters/inbound/Select.js +2 -0
  69. package/dist/features/form/select/adapters/inbound/Select.js.map +1 -0
  70. package/dist/features/form/select/adapters/inbound/Select.native.d.ts +5 -0
  71. package/dist/features/form/select/adapters/inbound/Select.native.d.ts.map +1 -0
  72. package/dist/features/form/select/adapters/inbound/Select.native.js +42 -0
  73. package/dist/features/form/select/adapters/inbound/Select.native.js.map +1 -0
  74. package/dist/features/form/select/adapters/inbound/Select.web.d.ts +5 -0
  75. package/dist/features/form/select/adapters/inbound/Select.web.d.ts.map +1 -0
  76. package/dist/features/form/select/adapters/inbound/Select.web.js +31 -0
  77. package/dist/features/form/select/adapters/inbound/Select.web.js.map +1 -0
  78. package/dist/features/form/select/composition/SelectField.d.ts +10 -0
  79. package/dist/features/form/select/composition/SelectField.d.ts.map +1 -0
  80. package/dist/features/form/select/composition/SelectField.js +8 -0
  81. package/dist/features/form/select/composition/SelectField.js.map +1 -0
  82. package/dist/features/form/select/composition/SelectOptionRow.d.ts +12 -0
  83. package/dist/features/form/select/composition/SelectOptionRow.d.ts.map +1 -0
  84. package/dist/features/form/select/composition/SelectOptionRow.js +9 -0
  85. package/dist/features/form/select/composition/SelectOptionRow.js.map +1 -0
  86. package/dist/features/form/select/composition/SelectTrigger.d.ts +10 -0
  87. package/dist/features/form/select/composition/SelectTrigger.d.ts.map +1 -0
  88. package/dist/features/form/select/composition/SelectTrigger.js +9 -0
  89. package/dist/features/form/select/composition/SelectTrigger.js.map +1 -0
  90. package/dist/features/form/select/composition/useSelectController.d.ts +8 -0
  91. package/dist/features/form/select/composition/useSelectController.d.ts.map +1 -0
  92. package/dist/features/form/select/composition/useSelectController.js +15 -0
  93. package/dist/features/form/select/composition/useSelectController.js.map +1 -0
  94. package/dist/features/form/select/public.d.ts +3 -0
  95. package/dist/features/form/select/public.d.ts.map +1 -0
  96. package/dist/features/form/select/public.js +2 -0
  97. package/dist/features/form/select/public.js.map +1 -0
  98. package/dist/features/form/select/selectMeta.d.ts +195 -0
  99. package/dist/features/form/select/selectMeta.d.ts.map +1 -0
  100. package/dist/features/form/select/selectMeta.js +152 -0
  101. package/dist/features/form/select/selectMeta.js.map +1 -0
  102. package/dist/features/gradient/gradientMeta.d.ts +1 -1
  103. package/dist/features/keyboard-avoiding-view/keyboardAvoidingViewMeta.d.ts +1 -1
  104. package/dist/features/layout/boxMeta.d.ts +1 -1
  105. package/dist/features/layout/containerMeta.d.ts +1 -1
  106. package/dist/features/layout/gridMeta.d.ts +1 -1
  107. package/dist/features/layout/stackMeta.d.ts +1 -1
  108. package/dist/features/list/flatListMeta.d.ts +1 -1
  109. package/dist/features/list/sectionListMeta.d.ts +1 -1
  110. package/dist/features/pagination/adapters/inbound/Pagination.d.ts +5 -0
  111. package/dist/features/pagination/adapters/inbound/Pagination.d.ts.map +1 -0
  112. package/dist/features/pagination/adapters/inbound/Pagination.js +43 -0
  113. package/dist/features/pagination/adapters/inbound/Pagination.js.map +1 -0
  114. package/dist/features/pagination/paginationMeta.d.ts +118 -0
  115. package/dist/features/pagination/paginationMeta.d.ts.map +1 -0
  116. package/dist/features/pagination/paginationMeta.js +53 -0
  117. package/dist/features/pagination/paginationMeta.js.map +1 -0
  118. package/dist/features/pagination/public.d.ts +3 -0
  119. package/dist/features/pagination/public.d.ts.map +1 -0
  120. package/dist/features/pagination/public.js +2 -0
  121. package/dist/features/pagination/public.js.map +1 -0
  122. package/dist/features/pagination/utils/resolvePaginationPage.d.ts +3 -0
  123. package/dist/features/pagination/utils/resolvePaginationPage.d.ts.map +1 -0
  124. package/dist/features/pagination/utils/resolvePaginationPage.js +7 -0
  125. package/dist/features/pagination/utils/resolvePaginationPage.js.map +1 -0
  126. package/dist/features/pagination/utils/resolvePaginationState.d.ts +17 -0
  127. package/dist/features/pagination/utils/resolvePaginationState.d.ts.map +1 -0
  128. package/dist/features/pagination/utils/resolvePaginationState.js +34 -0
  129. package/dist/features/pagination/utils/resolvePaginationState.js.map +1 -0
  130. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.d.ts +5 -0
  131. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.d.ts.map +1 -0
  132. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.js +43 -0
  133. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.js.map +1 -0
  134. package/dist/features/popover-menu/popoverMenuMeta.d.ts +9 -0
  135. package/dist/features/popover-menu/popoverMenuMeta.d.ts.map +1 -0
  136. package/dist/features/popover-menu/popoverMenuMeta.js +9 -0
  137. package/dist/features/popover-menu/popoverMenuMeta.js.map +1 -0
  138. package/dist/features/popover-menu/public.d.ts +3 -0
  139. package/dist/features/popover-menu/public.d.ts.map +1 -0
  140. package/dist/features/popover-menu/public.js +2 -0
  141. package/dist/features/popover-menu/public.js.map +1 -0
  142. package/dist/features/rating/adapters/inbound/Rating.d.ts +4 -0
  143. package/dist/features/rating/adapters/inbound/Rating.d.ts.map +1 -0
  144. package/dist/features/rating/adapters/inbound/Rating.js +49 -0
  145. package/dist/features/rating/adapters/inbound/Rating.js.map +1 -0
  146. package/dist/features/rating/public.d.ts +3 -0
  147. package/dist/features/rating/public.d.ts.map +1 -0
  148. package/dist/features/rating/public.js +2 -0
  149. package/dist/features/rating/public.js.map +1 -0
  150. package/dist/features/rating/ratingMeta.d.ts +57 -0
  151. package/dist/features/rating/ratingMeta.d.ts.map +1 -0
  152. package/dist/features/rating/ratingMeta.js +43 -0
  153. package/dist/features/rating/ratingMeta.js.map +1 -0
  154. package/dist/features/rating/utils/resolveRatingSegments.d.ts +9 -0
  155. package/dist/features/rating/utils/resolveRatingSegments.d.ts.map +1 -0
  156. package/dist/features/rating/utils/resolveRatingSegments.js +14 -0
  157. package/dist/features/rating/utils/resolveRatingSegments.js.map +1 -0
  158. package/dist/features/surface/surfaceMeta.d.ts +1 -1
  159. package/dist/features/tabs/adapters/inbound/Tab.d.ts +5 -0
  160. package/dist/features/tabs/adapters/inbound/Tab.d.ts.map +1 -0
  161. package/dist/features/tabs/adapters/inbound/Tab.js +14 -0
  162. package/dist/features/tabs/adapters/inbound/Tab.js.map +1 -0
  163. package/dist/features/tabs/adapters/inbound/TabList.d.ts +4 -0
  164. package/dist/features/tabs/adapters/inbound/TabList.d.ts.map +1 -0
  165. package/dist/features/tabs/adapters/inbound/TabList.js +9 -0
  166. package/dist/features/tabs/adapters/inbound/TabList.js.map +1 -0
  167. package/dist/features/tabs/adapters/inbound/TabPanel.d.ts +4 -0
  168. package/dist/features/tabs/adapters/inbound/TabPanel.d.ts.map +1 -0
  169. package/dist/features/tabs/adapters/inbound/TabPanel.js +11 -0
  170. package/dist/features/tabs/adapters/inbound/TabPanel.js.map +1 -0
  171. package/dist/features/tabs/adapters/inbound/Tabs.d.ts +4 -0
  172. package/dist/features/tabs/adapters/inbound/Tabs.d.ts.map +1 -0
  173. package/dist/features/tabs/adapters/inbound/Tabs.js +12 -0
  174. package/dist/features/tabs/adapters/inbound/Tabs.js.map +1 -0
  175. package/dist/features/tabs/composition/TabsInteractionPolicyContext.d.ts +3 -0
  176. package/dist/features/tabs/composition/TabsInteractionPolicyContext.d.ts.map +1 -0
  177. package/dist/features/tabs/composition/TabsInteractionPolicyContext.js +3 -0
  178. package/dist/features/tabs/composition/TabsInteractionPolicyContext.js.map +1 -0
  179. package/dist/features/tabs/public.d.ts +6 -0
  180. package/dist/features/tabs/public.d.ts.map +1 -0
  181. package/dist/features/tabs/public.js +5 -0
  182. package/dist/features/tabs/public.js.map +1 -0
  183. package/dist/features/tabs/tabListMeta.d.ts +9 -0
  184. package/dist/features/tabs/tabListMeta.d.ts.map +1 -0
  185. package/dist/features/tabs/tabListMeta.js +9 -0
  186. package/dist/features/tabs/tabListMeta.js.map +1 -0
  187. package/dist/features/tabs/tabMeta.d.ts +32 -0
  188. package/dist/features/tabs/tabMeta.d.ts.map +1 -0
  189. package/dist/features/tabs/tabMeta.js +14 -0
  190. package/dist/features/tabs/tabMeta.js.map +1 -0
  191. package/dist/features/tabs/tabPanelMeta.d.ts +15 -0
  192. package/dist/features/tabs/tabPanelMeta.d.ts.map +1 -0
  193. package/dist/features/tabs/tabPanelMeta.js +12 -0
  194. package/dist/features/tabs/tabPanelMeta.js.map +1 -0
  195. package/dist/features/tabs/tabsMeta.d.ts +58 -0
  196. package/dist/features/tabs/tabsMeta.d.ts.map +1 -0
  197. package/dist/features/tabs/tabsMeta.js +40 -0
  198. package/dist/features/tabs/tabsMeta.js.map +1 -0
  199. package/dist/features/toolbar/adapters/inbound/Toolbar.d.ts +4 -0
  200. package/dist/features/toolbar/adapters/inbound/Toolbar.d.ts.map +1 -0
  201. package/dist/features/toolbar/adapters/inbound/Toolbar.js +14 -0
  202. package/dist/features/toolbar/adapters/inbound/Toolbar.js.map +1 -0
  203. package/dist/features/toolbar/public.d.ts +3 -0
  204. package/dist/features/toolbar/public.d.ts.map +1 -0
  205. package/dist/features/toolbar/public.js +2 -0
  206. package/dist/features/toolbar/public.js.map +1 -0
  207. package/dist/features/toolbar/toolbarMeta.d.ts +29 -0
  208. package/dist/features/toolbar/toolbarMeta.d.ts.map +1 -0
  209. package/dist/features/toolbar/toolbarMeta.js +22 -0
  210. package/dist/features/toolbar/toolbarMeta.js.map +1 -0
  211. package/dist/features/typography/utils/resolveHeadingThemeRecipe.d.ts +1 -1
  212. package/dist/features/typography/utils/resolveTextThemeRecipe.d.ts +1 -1
  213. package/dist/features/uploader/adapters/inbound/Uploader.d.ts.map +1 -1
  214. package/dist/features/uploader/adapters/inbound/Uploader.js +3 -3
  215. package/dist/features/uploader/adapters/inbound/Uploader.js.map +1 -1
  216. package/dist/index.d.ts +10 -19
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +9 -9
  219. package/dist/index.js.map +1 -1
  220. package/dist/layout/screen/meta.d.ts +1 -1
  221. package/dist/layout/screen-section/meta.d.ts +1 -1
  222. package/dist/metadata/allowedChildren.d.ts +3 -3
  223. package/dist/metadata/allowedChildren.d.ts.map +1 -1
  224. package/dist/metadata/allowedChildren.js +6 -0
  225. package/dist/metadata/allowedChildren.js.map +1 -1
  226. package/dist/metadata/bindableComponentMeta.d.ts +3 -4
  227. package/dist/metadata/bindableComponentMeta.d.ts.map +1 -1
  228. package/dist/metadata/bindableComponentMeta.js +1 -2
  229. package/dist/metadata/bindableComponentMeta.js.map +1 -1
  230. package/dist/metadata/componentMeta.d.ts.map +1 -1
  231. package/dist/metadata/componentMeta.js +18 -14
  232. package/dist/metadata/componentMeta.js.map +1 -1
  233. package/dist/patterns/confirm-dialog/ConfirmDialog.js +3 -3
  234. package/dist/patterns/confirm-dialog/ConfirmDialog.js.map +1 -1
  235. package/dist/patterns/message-bubble/meta.d.ts +1 -1
  236. package/dist/patterns/notice/meta.d.ts +1 -1
  237. package/dist/patterns/panel/meta.d.ts +1 -1
  238. package/dist/patterns/reader/meta.d.ts +2 -2
  239. package/dist/patterns/scanner/meta.d.ts +2 -2
  240. package/dist/patterns/theme-composer/ThemeComposer.d.ts.map +1 -1
  241. package/dist/patterns/theme-composer/ThemeComposer.js +4 -4
  242. package/dist/patterns/theme-composer/ThemeComposer.js.map +1 -1
  243. package/dist/registry.d.ts.map +1 -1
  244. package/dist/registry.js +15 -14
  245. package/dist/registry.js.map +1 -1
  246. package/dist/types/app-bar.d.ts +6 -3
  247. package/dist/types/app-bar.d.ts.map +1 -1
  248. package/dist/types/app-bar.js.map +1 -1
  249. package/dist/{components/breadcrumbs/types.d.ts → types/breadcrumbs.d.ts} +8 -6
  250. package/dist/types/breadcrumbs.d.ts.map +1 -0
  251. package/dist/types/breadcrumbs.js +2 -0
  252. package/dist/types/breadcrumbs.js.map +1 -0
  253. package/dist/types/data-table.d.ts +2 -2
  254. package/dist/types/data-table.d.ts.map +1 -1
  255. package/dist/types/data-table.js.map +1 -1
  256. package/dist/types/dialog.d.ts +14 -0
  257. package/dist/types/dialog.d.ts.map +1 -0
  258. package/dist/types/dialog.js +2 -0
  259. package/dist/types/dialog.js.map +1 -0
  260. package/dist/types/pagination.d.ts +16 -0
  261. package/dist/types/pagination.d.ts.map +1 -0
  262. package/dist/types/pagination.js +2 -0
  263. package/dist/types/pagination.js.map +1 -0
  264. package/dist/types/popover-menu.d.ts +24 -0
  265. package/dist/types/popover-menu.d.ts.map +1 -0
  266. package/dist/types/popover-menu.js +2 -0
  267. package/dist/types/popover-menu.js.map +1 -0
  268. package/dist/types/rating.d.ts +9 -0
  269. package/dist/types/rating.d.ts.map +1 -0
  270. package/dist/types/rating.js +2 -0
  271. package/dist/types/rating.js.map +1 -0
  272. package/dist/types/search-input.d.ts +14 -0
  273. package/dist/types/search-input.d.ts.map +1 -0
  274. package/dist/types/search-input.js +2 -0
  275. package/dist/types/search-input.js.map +1 -0
  276. package/dist/types/select.d.ts +22 -0
  277. package/dist/types/select.d.ts.map +1 -0
  278. package/dist/types/select.js +2 -0
  279. package/dist/types/select.js.map +1 -0
  280. package/dist/types/tabs.d.ts +21 -0
  281. package/dist/types/tabs.d.ts.map +1 -0
  282. package/dist/types/tabs.js +2 -0
  283. package/dist/types/tabs.js.map +1 -0
  284. package/dist/types/toolbar.d.ts +8 -0
  285. package/dist/types/toolbar.d.ts.map +1 -0
  286. package/dist/types/toolbar.js +2 -0
  287. package/dist/types/toolbar.js.map +1 -0
  288. package/package.json +2 -4
  289. package/src/audit.test.ts +8 -47
  290. package/src/constants.ts +5 -0
  291. package/src/featureManifest.test.ts +31 -2
  292. package/src/features/app-bar/adapters/inbound/AppBar.tsx +50 -42
  293. package/src/features/app-bar/public.ts +1 -1
  294. package/src/features/bottom-sheet/public.test.ts +10 -1
  295. package/src/features/bottom-sheet/public.ts +9 -1
  296. package/src/features/breadcrumbs/adapters/inbound/Breadcrumbs.tsx +179 -0
  297. package/src/features/breadcrumbs/breadcrumbsMeta.ts +95 -0
  298. package/src/features/breadcrumbs/public.test.ts +22 -0
  299. package/src/features/breadcrumbs/public.ts +6 -0
  300. package/src/features/data-table/adapters/inbound/DataTable.tsx +9 -5
  301. package/src/features/dialog/adapters/inbound/Dialog.tsx +70 -0
  302. package/src/features/dialog/dialogMeta.ts +60 -0
  303. package/src/features/dialog/public.ts +2 -0
  304. package/src/features/form/formFieldMeta.ts +8 -1
  305. package/src/{components/search-bar/SearchBar.tsx → features/form/search-input/adapters/inbound/SearchInput.tsx} +10 -15
  306. package/src/features/form/search-input/public.ts +2 -0
  307. package/src/features/form/search-input/searchInputMeta.ts +68 -0
  308. package/src/features/form/select/adapters/inbound/Select.native.tsx +78 -0
  309. package/src/features/form/select/adapters/inbound/Select.tsx +1 -0
  310. package/src/features/form/select/adapters/inbound/Select.web.tsx +63 -0
  311. package/src/features/form/select/composition/SelectField.tsx +27 -0
  312. package/src/features/form/select/composition/SelectOptionRow.tsx +36 -0
  313. package/src/features/form/select/composition/SelectTrigger.tsx +32 -0
  314. package/src/features/form/select/composition/useSelectController.ts +21 -0
  315. package/src/features/form/select/public.test.ts +25 -0
  316. package/src/features/form/select/public.ts +2 -0
  317. package/src/features/form/select/selectMeta.ts +154 -0
  318. package/src/features/pagination/adapters/inbound/Pagination.tsx +116 -0
  319. package/src/features/pagination/paginationMeta.ts +54 -0
  320. package/src/features/pagination/public.ts +2 -0
  321. package/src/features/pagination/utils/resolvePaginationPage.ts +6 -0
  322. package/src/features/pagination/utils/resolvePaginationState.test.ts +29 -0
  323. package/src/features/pagination/utils/resolvePaginationState.ts +70 -0
  324. package/src/features/popover-menu/adapters/inbound/PopoverMenu.tsx +60 -0
  325. package/src/{components/rating/meta.ts → features/popover-menu/popoverMenuMeta.ts} +3 -3
  326. package/src/features/popover-menu/public.test.ts +11 -0
  327. package/src/features/popover-menu/public.ts +6 -0
  328. package/src/features/rating/adapters/inbound/Rating.tsx +70 -0
  329. package/src/features/rating/public.ts +2 -0
  330. package/src/features/rating/ratingMeta.ts +44 -0
  331. package/src/features/rating/utils/resolveRatingSegments.test.ts +20 -0
  332. package/src/features/rating/utils/resolveRatingSegments.ts +19 -0
  333. package/src/features/tabs/adapters/inbound/Tab.tsx +26 -0
  334. package/src/features/tabs/adapters/inbound/TabList.tsx +18 -0
  335. package/src/features/tabs/adapters/inbound/TabPanel.tsx +23 -0
  336. package/src/features/tabs/adapters/inbound/Tabs.tsx +23 -0
  337. package/src/features/tabs/composition/TabsInteractionPolicyContext.ts +4 -0
  338. package/src/features/tabs/public.ts +5 -0
  339. package/src/features/tabs/tabListMeta.ts +10 -0
  340. package/src/features/tabs/tabMeta.ts +15 -0
  341. package/src/features/tabs/tabPanelMeta.ts +13 -0
  342. package/src/features/tabs/tabsMeta.ts +41 -0
  343. package/src/features/toolbar/adapters/inbound/Toolbar.tsx +31 -0
  344. package/src/features/toolbar/public.ts +2 -0
  345. package/src/features/toolbar/toolbarMeta.ts +24 -0
  346. package/src/{components → features/typography}/contentFallback.test.ts +2 -8
  347. package/src/features/uploader/adapters/inbound/Uploader.tsx +3 -3
  348. package/src/index.ts +29 -19
  349. package/src/interactionPolicy.test.ts +19 -21
  350. package/src/metadata/allowedChildren.ts +6 -0
  351. package/src/metadata/bindableComponentMeta.test.ts +8 -0
  352. package/src/metadata/bindableComponentMeta.ts +1 -2
  353. package/src/metadata/componentMeta.test.ts +21 -1
  354. package/src/metadata/componentMeta.ts +18 -14
  355. package/src/nativePeerContract.test.ts +5 -19
  356. package/src/patterns/confirm-dialog/ConfirmDialog.tsx +3 -3
  357. package/src/patterns/theme-composer/ThemeComposer.tsx +7 -8
  358. package/src/platformAcceptance.test.ts +1 -1
  359. package/src/registry.ts +15 -14
  360. package/src/showcaseCoverage.test.ts +6 -3
  361. package/src/theme/themeScopeStructure.test.ts +24 -14
  362. package/src/types/app-bar.ts +6 -3
  363. package/src/{components/breadcrumbs/types.ts → types/breadcrumbs.ts} +8 -5
  364. package/src/types/data-table.ts +2 -2
  365. package/src/types/dialog.ts +15 -0
  366. package/src/{components/pagination/types.ts → types/pagination.ts} +5 -8
  367. package/src/types/popover-menu.ts +31 -0
  368. package/src/types/rating.ts +9 -0
  369. package/src/types/search-input.ts +14 -0
  370. package/src/{components/select/types.ts → types/select.ts} +11 -3
  371. package/src/types/tabs.ts +25 -0
  372. package/src/types/toolbar.ts +9 -0
  373. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +0 -7
  374. package/dist/components/breadcrumbs/Breadcrumbs.d.ts.map +0 -1
  375. package/dist/components/breadcrumbs/Breadcrumbs.js +0 -80
  376. package/dist/components/breadcrumbs/Breadcrumbs.js.map +0 -1
  377. package/dist/components/breadcrumbs/index.d.ts +0 -3
  378. package/dist/components/breadcrumbs/index.d.ts.map +0 -1
  379. package/dist/components/breadcrumbs/index.js +0 -2
  380. package/dist/components/breadcrumbs/index.js.map +0 -1
  381. package/dist/components/breadcrumbs/meta.d.ts +0 -9
  382. package/dist/components/breadcrumbs/meta.d.ts.map +0 -1
  383. package/dist/components/breadcrumbs/meta.js +0 -9
  384. package/dist/components/breadcrumbs/meta.js.map +0 -1
  385. package/dist/components/breadcrumbs/types.d.ts.map +0 -1
  386. package/dist/components/breadcrumbs/types.js +0 -2
  387. package/dist/components/breadcrumbs/types.js.map +0 -1
  388. package/dist/components/menu/DropdownMenu.d.ts +0 -7
  389. package/dist/components/menu/DropdownMenu.d.ts.map +0 -1
  390. package/dist/components/menu/DropdownMenu.js +0 -9
  391. package/dist/components/menu/DropdownMenu.js.map +0 -1
  392. package/dist/components/menu/Menu.d.ts +0 -7
  393. package/dist/components/menu/Menu.d.ts.map +0 -1
  394. package/dist/components/menu/Menu.js +0 -46
  395. package/dist/components/menu/Menu.js.map +0 -1
  396. package/dist/components/menu/index.d.ts +0 -4
  397. package/dist/components/menu/index.d.ts.map +0 -1
  398. package/dist/components/menu/index.js +0 -3
  399. package/dist/components/menu/index.js.map +0 -1
  400. package/dist/components/menu/meta.d.ts +0 -17
  401. package/dist/components/menu/meta.d.ts.map +0 -1
  402. package/dist/components/menu/meta.js +0 -17
  403. package/dist/components/menu/meta.js.map +0 -1
  404. package/dist/components/menu/types.d.ts +0 -22
  405. package/dist/components/menu/types.d.ts.map +0 -1
  406. package/dist/components/menu/types.js +0 -2
  407. package/dist/components/menu/types.js.map +0 -1
  408. package/dist/components/modal/Modal.d.ts +0 -7
  409. package/dist/components/modal/Modal.d.ts.map +0 -1
  410. package/dist/components/modal/Modal.js +0 -39
  411. package/dist/components/modal/Modal.js.map +0 -1
  412. package/dist/components/modal/index.d.ts +0 -3
  413. package/dist/components/modal/index.d.ts.map +0 -1
  414. package/dist/components/modal/index.js +0 -2
  415. package/dist/components/modal/index.js.map +0 -1
  416. package/dist/components/modal/meta.d.ts +0 -9
  417. package/dist/components/modal/meta.d.ts.map +0 -1
  418. package/dist/components/modal/meta.js +0 -9
  419. package/dist/components/modal/meta.js.map +0 -1
  420. package/dist/components/modal/types.d.ts +0 -12
  421. package/dist/components/modal/types.d.ts.map +0 -1
  422. package/dist/components/modal/types.js +0 -2
  423. package/dist/components/modal/types.js.map +0 -1
  424. package/dist/components/pagination/Pagination.d.ts +0 -7
  425. package/dist/components/pagination/Pagination.d.ts.map +0 -1
  426. package/dist/components/pagination/Pagination.js +0 -96
  427. package/dist/components/pagination/Pagination.js.map +0 -1
  428. package/dist/components/pagination/index.d.ts +0 -3
  429. package/dist/components/pagination/index.d.ts.map +0 -1
  430. package/dist/components/pagination/index.js +0 -2
  431. package/dist/components/pagination/index.js.map +0 -1
  432. package/dist/components/pagination/meta.d.ts +0 -9
  433. package/dist/components/pagination/meta.d.ts.map +0 -1
  434. package/dist/components/pagination/meta.js +0 -9
  435. package/dist/components/pagination/meta.js.map +0 -1
  436. package/dist/components/pagination/types.d.ts +0 -18
  437. package/dist/components/pagination/types.d.ts.map +0 -1
  438. package/dist/components/pagination/types.js +0 -2
  439. package/dist/components/pagination/types.js.map +0 -1
  440. package/dist/components/rating/Rating.d.ts +0 -7
  441. package/dist/components/rating/Rating.d.ts.map +0 -1
  442. package/dist/components/rating/Rating.js +0 -26
  443. package/dist/components/rating/Rating.js.map +0 -1
  444. package/dist/components/rating/index.d.ts +0 -3
  445. package/dist/components/rating/index.d.ts.map +0 -1
  446. package/dist/components/rating/index.js +0 -2
  447. package/dist/components/rating/index.js.map +0 -1
  448. package/dist/components/rating/meta.d.ts +0 -9
  449. package/dist/components/rating/meta.d.ts.map +0 -1
  450. package/dist/components/rating/meta.js +0 -9
  451. package/dist/components/rating/meta.js.map +0 -1
  452. package/dist/components/rating/resolveRatingSegments.d.ts +0 -7
  453. package/dist/components/rating/resolveRatingSegments.d.ts.map +0 -1
  454. package/dist/components/rating/resolveRatingSegments.js +0 -22
  455. package/dist/components/rating/resolveRatingSegments.js.map +0 -1
  456. package/dist/components/rating/types.d.ts +0 -11
  457. package/dist/components/rating/types.d.ts.map +0 -1
  458. package/dist/components/rating/types.js +0 -26
  459. package/dist/components/rating/types.js.map +0 -1
  460. package/dist/components/search-bar/SearchBar.d.ts +0 -7
  461. package/dist/components/search-bar/SearchBar.d.ts.map +0 -1
  462. package/dist/components/search-bar/SearchBar.js.map +0 -1
  463. package/dist/components/search-bar/index.d.ts +0 -3
  464. package/dist/components/search-bar/index.d.ts.map +0 -1
  465. package/dist/components/search-bar/index.js +0 -2
  466. package/dist/components/search-bar/index.js.map +0 -1
  467. package/dist/components/search-bar/meta.d.ts +0 -9
  468. package/dist/components/search-bar/meta.d.ts.map +0 -1
  469. package/dist/components/search-bar/meta.js +0 -9
  470. package/dist/components/search-bar/meta.js.map +0 -1
  471. package/dist/components/search-bar/types.d.ts +0 -14
  472. package/dist/components/search-bar/types.d.ts.map +0 -1
  473. package/dist/components/search-bar/types.js +0 -2
  474. package/dist/components/search-bar/types.js.map +0 -1
  475. package/dist/components/select/Select.d.ts +0 -7
  476. package/dist/components/select/Select.d.ts.map +0 -1
  477. package/dist/components/select/Select.js +0 -32
  478. package/dist/components/select/Select.js.map +0 -1
  479. package/dist/components/select/index.d.ts +0 -3
  480. package/dist/components/select/index.d.ts.map +0 -1
  481. package/dist/components/select/index.js +0 -3
  482. package/dist/components/select/index.js.map +0 -1
  483. package/dist/components/select/meta.d.ts +0 -9
  484. package/dist/components/select/meta.d.ts.map +0 -1
  485. package/dist/components/select/meta.js +0 -9
  486. package/dist/components/select/meta.js.map +0 -1
  487. package/dist/components/select/types.d.ts +0 -14
  488. package/dist/components/select/types.d.ts.map +0 -1
  489. package/dist/components/select/types.js +0 -2
  490. package/dist/components/select/types.js.map +0 -1
  491. package/dist/components/tabs/Tabs.d.ts +0 -9
  492. package/dist/components/tabs/Tabs.d.ts.map +0 -1
  493. package/dist/components/tabs/Tabs.js +0 -59
  494. package/dist/components/tabs/Tabs.js.map +0 -1
  495. package/dist/components/tabs/index.d.ts +0 -3
  496. package/dist/components/tabs/index.d.ts.map +0 -1
  497. package/dist/components/tabs/index.js +0 -3
  498. package/dist/components/tabs/index.js.map +0 -1
  499. package/dist/components/tabs/meta.d.ts +0 -9
  500. package/dist/components/tabs/meta.d.ts.map +0 -1
  501. package/dist/components/tabs/meta.js +0 -9
  502. package/dist/components/tabs/meta.js.map +0 -1
  503. package/dist/components/tabs/types.d.ts +0 -22
  504. package/dist/components/tabs/types.d.ts.map +0 -1
  505. package/dist/components/tabs/types.js +0 -2
  506. package/dist/components/tabs/types.js.map +0 -1
  507. package/dist/components/toolbar/Toolbar.d.ts +0 -9
  508. package/dist/components/toolbar/Toolbar.d.ts.map +0 -1
  509. package/dist/components/toolbar/Toolbar.js +0 -26
  510. package/dist/components/toolbar/Toolbar.js.map +0 -1
  511. package/dist/components/toolbar/ToolbarAction.d.ts +0 -9
  512. package/dist/components/toolbar/ToolbarAction.d.ts.map +0 -1
  513. package/dist/components/toolbar/ToolbarAction.js +0 -13
  514. package/dist/components/toolbar/ToolbarAction.js.map +0 -1
  515. package/dist/components/toolbar/index.d.ts +0 -4
  516. package/dist/components/toolbar/index.d.ts.map +0 -1
  517. package/dist/components/toolbar/index.js +0 -4
  518. package/dist/components/toolbar/index.js.map +0 -1
  519. package/dist/components/toolbar/meta.d.ts +0 -17
  520. package/dist/components/toolbar/meta.d.ts.map +0 -1
  521. package/dist/components/toolbar/meta.js +0 -17
  522. package/dist/components/toolbar/meta.js.map +0 -1
  523. package/dist/components/toolbar/types.d.ts +0 -18
  524. package/dist/components/toolbar/types.d.ts.map +0 -1
  525. package/dist/components/toolbar/types.js +0 -2
  526. package/dist/components/toolbar/types.js.map +0 -1
  527. package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -147
  528. package/src/components/breadcrumbs/index.ts +0 -2
  529. package/src/components/breadcrumbs/meta.ts +0 -10
  530. package/src/components/menu/DropdownMenu.tsx +0 -11
  531. package/src/components/menu/Menu.tsx +0 -59
  532. package/src/components/menu/index.ts +0 -3
  533. package/src/components/menu/meta.ts +0 -19
  534. package/src/components/menu/types.ts +0 -31
  535. package/src/components/modal/Modal.tsx +0 -63
  536. package/src/components/modal/index.ts +0 -2
  537. package/src/components/modal/meta.ts +0 -10
  538. package/src/components/modal/types.ts +0 -16
  539. package/src/components/pagination/Pagination.tsx +0 -199
  540. package/src/components/pagination/index.ts +0 -2
  541. package/src/components/pagination/meta.ts +0 -10
  542. package/src/components/rating/Rating.tsx +0 -42
  543. package/src/components/rating/index.ts +0 -2
  544. package/src/components/rating/resolveRatingSegments.test.ts +0 -60
  545. package/src/components/rating/resolveRatingSegments.ts +0 -34
  546. package/src/components/rating/types.ts +0 -37
  547. package/src/components/search-bar/index.ts +0 -2
  548. package/src/components/search-bar/meta.ts +0 -10
  549. package/src/components/search-bar/types.ts +0 -14
  550. package/src/components/select/Select.tsx +0 -67
  551. package/src/components/select/index.ts +0 -2
  552. package/src/components/select/meta.ts +0 -10
  553. package/src/components/tabs/Tabs.tsx +0 -129
  554. package/src/components/tabs/index.ts +0 -2
  555. package/src/components/tabs/meta.ts +0 -10
  556. package/src/components/tabs/types.ts +0 -25
  557. package/src/components/toolbar/Toolbar.tsx +0 -48
  558. package/src/components/toolbar/ToolbarAction.tsx +0 -28
  559. package/src/components/toolbar/index.ts +0 -3
  560. package/src/components/toolbar/meta.ts +0 -19
  561. package/src/components/toolbar/types.ts +0 -21
@@ -2,7 +2,7 @@
2
2
  * Interaction policy regression guards.
3
3
  *
4
4
  * These tests verify that internally owned interactions respect the passive
5
- * policy returned by the canonical Surface type. They use static source
5
+ * policy returned by the canonical Surface type. They use static source
6
6
  * inspection so they run fast and do not require a renderer.
7
7
  */
8
8
 
@@ -18,10 +18,6 @@ function readSource(relativePath: string): string {
18
18
  return readFileSync(join(SRC_ROOT, relativePath), 'utf8');
19
19
  }
20
20
 
21
- function readComponent(...segments: string[]): string {
22
- return readSource(join('components', ...segments));
23
- }
24
-
25
21
  function readFeature(...segments: string[]): string {
26
22
  return readSource(join('features', ...segments));
27
23
  }
@@ -42,13 +38,13 @@ describe('InteractionPolicy declaration', () => {
42
38
  const files = [
43
39
  readSource('theme/ZoraBaseProps.ts'),
44
40
  readSource('types/app-bar.ts'),
45
- readComponent('breadcrumbs', 'types.ts'),
41
+ readSource('types/breadcrumbs.ts'),
46
42
  readSource('types/empty-state.ts'),
47
43
  readSource('types/hero.ts'),
48
44
  readSource('types/product-card.ts'),
49
45
  readPattern('reader', 'types.ts'),
50
46
  readPattern('scanner', 'types.ts'),
51
- readComponent('select', 'types.ts'),
47
+ readSource('types/select.ts'),
52
48
  readPattern('tree-view', 'types.ts'),
53
49
  ];
54
50
 
@@ -78,26 +74,27 @@ describe('Surface wrapper propagation', () => {
78
74
  });
79
75
 
80
76
  describe('AppBar', () => {
81
- test('forwards interactionPolicy to internal IconButtons', () => {
77
+ test('forwards interactionPolicy to selection and overflow controls', () => {
82
78
  const source = readFeature('app-bar', 'adapters', 'inbound', 'AppBar.tsx');
83
79
 
84
80
  expect(source).not.toMatch(/interactionPolicy:\s*_interactionPolicy/);
85
81
  expect(source).toMatch(
86
82
  /<IconButton[\s\S]*?interactionPolicy=\{interactionPolicy\}[\s\S]*?onPress=\{mode\.onCancel\}/,
87
83
  );
84
+ expect(source).toMatch(/<PopoverMenu[\s\S]*?interactionPolicy=\{interactionPolicy\}/);
88
85
  expect(source).toMatch(
89
- /<IconButton[\s\S]*?interactionPolicy=\{interactionPolicy\}[\s\S]*?onPress=\{overflow\.onPress\}/,
86
+ /trigger=\{\(\{ toggle \}\) => \([\s\S]*?<IconButton[\s\S]*?interactionPolicy=\{interactionPolicy\}[\s\S]*?onPress=\{toggle\}/,
90
87
  );
91
88
  });
92
89
  });
93
90
 
94
91
  describe('Breadcrumbs', () => {
95
- test('forwards interactionPolicy to internal Buttons', () => {
96
- const source = readComponent('breadcrumbs', 'Breadcrumbs.tsx');
92
+ test('forwards interactionPolicy and emits item ids from internal Buttons', () => {
93
+ const source = readFeature('breadcrumbs', 'adapters', 'inbound', 'Breadcrumbs.tsx');
97
94
 
98
95
  expect(source).not.toMatch(/interactionPolicy:\s*_interactionPolicy/);
99
96
  expect(source).toMatch(
100
- /<Button[\s\S]*?interactionPolicy=\{interactionPolicy\}[\s\S]*?onPress=\{item\.onPress\}/,
97
+ /<Button[\s\S]*?interactionPolicy=\{interactionPolicy\}[\s\S]*?onPress=\{\(\) => onItemPress\(\{ id: item\.id \}\)\}/,
101
98
  );
102
99
  });
103
100
  });
@@ -233,19 +230,20 @@ describe('BarcodeScannerView', () => {
233
230
  });
234
231
 
235
232
  describe('Select', () => {
236
- test('keeps Picker enabled controlled only by real disabled prop', () => {
237
- const source = readComponent('select', 'Select.tsx');
233
+ test('web forwards interactionPolicy to Popover and option controls', () => {
234
+ const webSource = readFeature('form', 'select', 'adapters', 'inbound', 'Select.web.tsx');
235
+ const optionSource = readFeature('form', 'select', 'composition', 'SelectOptionRow.tsx');
238
236
 
239
- expect(source).toMatch(/enabled=\{!disabled\}/);
237
+ expect(webSource).toContain('interactionPolicy={props.interactionPolicy}');
238
+ expect(optionSource).toContain('interactionPolicy={interactionPolicy}');
240
239
  });
241
240
 
242
- test('prevents pointer/touch interaction with Picker subtree while passive', () => {
243
- const source = readComponent('select', 'Select.tsx');
241
+ test('native suppresses opening while passive', () => {
242
+ const nativeSource = readFeature('form', 'select', 'adapters', 'inbound', 'Select.native.tsx');
244
243
 
245
- expect(source).toMatch(/pointerEvents:\s*passive \? 'none' : 'auto'/);
246
- expect(source).toMatch(
247
- /onValueChange=\{\s*\(\s*itemValue\s*\)\s*=>\s*\{\s*if\s*\(\s*!passive\s*\)/,
248
- );
244
+ expect(nativeSource).toContain("props.interactionPolicy === 'passive'");
245
+ expect(nativeSource).toContain("contentMode: 'direct'");
246
+ expect(nativeSource).toContain('<BottomSheetFlatList');
249
247
  });
250
248
  });
251
249
 
@@ -17,6 +17,12 @@ export const CONTAINER_ALLOWED_CHILDREN = [
17
17
  'ChipGroup',
18
18
  'DataTable',
19
19
  'DatePicker',
20
+ 'Dialog',
21
+ 'Pagination',
22
+ 'Rating',
23
+ 'SearchInput',
24
+ 'Tabs',
25
+ 'Toolbar',
20
26
  'Skeleton',
21
27
  'SkeletonCard',
22
28
  'SkeletonList',
@@ -17,6 +17,14 @@ describe('ZORA bindable component metadata', () => {
17
17
  expect(registry.DataTable?.bindings?.props?.rows?.value.type).toBe('array');
18
18
  });
19
19
 
20
+ it('keeps Select direct-manifest ownership aligned across metadata registries', () => {
21
+ const select = ZORA_BINDABLE_COMPONENT_META.Select;
22
+
23
+ expect(select.directManifestNode).toBe(true);
24
+ expect(select.directManifestNode).toBe(ZORA_COMPONENT_META.Select.directManifestNode);
25
+ expect(select.bindings.events.valueChange.payload.eventType).toBe('select.valueChange');
26
+ });
27
+
20
28
  it('shares canonical Image authoring metadata while preserving dynamic image bindings', () => {
21
29
  const image = ZORA_BINDABLE_COMPONENT_META.Image;
22
30
 
@@ -190,7 +190,7 @@ export const ZORA_BINDABLE_COMPONENT_META = {
190
190
  name: 'Select',
191
191
  category: 'component',
192
192
  description: 'Captures one selected string value.',
193
- directManifestNode: false,
193
+ directManifestNode: true,
194
194
  allowedChildren: [],
195
195
  bindings: {
196
196
  props: {
@@ -228,7 +228,6 @@ export const ZORA_BINDABLE_COMPONENT_META = {
228
228
  payloadFields: [{ path: 'value', type: 'string', label: 'Value' }],
229
229
  },
230
230
  },
231
- note: 'Form control component; not represented as a manifest node in v1.',
232
231
  props: {
233
232
  value: {
234
233
  type: 'string',
@@ -106,6 +106,8 @@ describe('ZORA_COMPONENT_META invariants', () => {
106
106
  'Checkbox',
107
107
  'CheckboxGroup',
108
108
  'RadioGroup',
109
+ 'SearchInput',
110
+ 'Select',
109
111
  'TextInput',
110
112
  ]);
111
113
  for (const [name, meta] of Object.entries(ZORA_COMPONENT_META)) {
@@ -146,10 +148,15 @@ describe('ZORA_COMPONENT_META invariants', () => {
146
148
  'Avatar',
147
149
  'AvatarGroup',
148
150
  'Badge',
151
+ 'Breadcrumbs',
149
152
  'Chip',
150
153
  'ChipGroup',
151
154
  'DataTable',
152
155
  'DatePicker',
156
+ 'Pagination',
157
+ 'Rating',
158
+ 'SearchInput',
159
+ 'Tab',
153
160
  'Skeleton',
154
161
  'SkeletonCard',
155
162
  'SkeletonList',
@@ -167,6 +174,7 @@ describe('ZORA_COMPONENT_META invariants', () => {
167
174
  'CheckboxGroup',
168
175
  'Radio',
169
176
  'RadioGroup',
177
+ 'Select',
170
178
  'ThemeModeToggle',
171
179
  'TextInput',
172
180
  'Text',
@@ -188,6 +196,7 @@ describe('ZORA_COMPONENT_META invariants', () => {
188
196
  const expectedContainerNodes = new Set([
189
197
  'Accordion',
190
198
  'AccordionItem',
199
+ 'Dialog',
191
200
  'Form',
192
201
  'Gradient',
193
202
  'Surface',
@@ -206,12 +215,15 @@ describe('ZORA_COMPONENT_META invariants', () => {
206
215
  'PostCard',
207
216
  'MessageBubble',
208
217
  'Box',
209
-
210
218
  'Stack',
211
219
  'Grid',
212
220
  'Container',
213
221
  'BarcodeScannerView',
214
222
  'ContentRail',
223
+ 'Tabs',
224
+ 'TabList',
225
+ 'TabPanel',
226
+ 'Toolbar',
215
227
  ]);
216
228
 
217
229
  for (const [key, meta] of Object.entries(ZORA_COMPONENT_META)) {
@@ -236,6 +248,14 @@ describe('ZORA_COMPONENT_META invariants', () => {
236
248
  }
237
249
  });
238
250
 
251
+ test('Tabs constrain authored content to the accessible tab hierarchy', () => {
252
+ expect(ZORA_COMPONENT_META.Tabs.allowedChildren).toEqual(['TabList', 'TabPanel']);
253
+ expect(ZORA_COMPONENT_META.TabList.allowedChildren).toEqual(['Tab']);
254
+ expect(ZORA_COMPONENT_META.Tab.allowedChildren).toEqual([]);
255
+ expect(ZORA_COMPONENT_META.TabPanel.allowedChildren.length).toBeGreaterThan(0);
256
+ expect(ZORA_COMPONENT_META.Tabs.events?.valueChange?.eventType).toBe('tabs.valueChange');
257
+ });
258
+
239
259
  test('Accordion constrains authored items to its canonical hierarchy', () => {
240
260
  expect(ZORA_COMPONENT_META.Accordion.directManifestNode).toBe(true);
241
261
  expect(ZORA_COMPONENT_META.Accordion.allowedChildren).toEqual(['AccordionItem']);
@@ -1,12 +1,3 @@
1
- import { breadcrumbsMeta } from '../components/breadcrumbs/meta';
2
- import { dropdownMenuMeta, menuMeta } from '../components/menu/meta';
3
- import { modalMeta } from '../components/modal/meta';
4
- import { paginationMeta } from '../components/pagination/meta';
5
- import { ratingMeta } from '../components/rating/meta';
6
- import { searchBarMeta } from '../components/search-bar/meta';
7
- import { selectMeta } from '../components/select/meta';
8
- import { tabsMeta } from '../components/tabs/meta';
9
- import { toolbarActionMeta, toolbarMeta } from '../components/toolbar/meta';
10
1
  import { accordionItemMeta } from '../features/accordion/accordionItemMeta';
11
2
  import { accordionMeta } from '../features/accordion/accordionMeta';
12
3
  import { activityIndicatorMeta } from '../features/activity-indicator/activityIndicatorMeta';
@@ -21,6 +12,7 @@ import { avatarGroupMeta } from '../features/avatar/avatarGroupMeta';
21
12
  import { avatarMeta } from '../features/avatar/avatarMeta';
22
13
  import { badgeMeta } from '../features/badge/badgeMeta';
23
14
  import { bottomSheetMeta } from '../features/bottom-sheet/bottomSheetMeta';
15
+ import { breadcrumbsMeta } from '../features/breadcrumbs/breadcrumbsMeta';
24
16
  import { buttonGroupMeta } from '../features/button/buttonGroupMeta';
25
17
  import { buttonMeta } from '../features/button/buttonMeta';
26
18
  import { iconButtonMeta } from '../features/button/iconButtonMeta';
@@ -33,6 +25,7 @@ import { chipGroupMeta } from '../features/chip/chipGroupMeta';
33
25
  import { chipMeta } from '../features/chip/chipMeta';
34
26
  import { dataTableMeta } from '../features/data-table/dataTableMeta';
35
27
  import { datePickerMeta } from '../features/date-picker/datePickerMeta';
28
+ import { dialogMeta } from '../features/dialog/dialogMeta';
36
29
  import { emptyStateMeta } from '../features/empty-state/emptyStateMeta';
37
30
  import { checkboxGroupMeta, checkboxMeta } from '../features/form/checkbox/checkboxMeta';
38
31
  import { formActionsMeta } from '../features/form/formActionsMeta';
@@ -40,6 +33,8 @@ import { formErrorMeta } from '../features/form/formErrorMeta';
40
33
  import { formFieldMeta } from '../features/form/formFieldMeta';
41
34
  import { formMeta } from '../features/form/formMeta';
42
35
  import { radioGroupMeta, radioMeta } from '../features/form/radio/radioMeta';
36
+ import { searchInputMeta } from '../features/form/search-input/searchInputMeta';
37
+ import { selectMeta } from '../features/form/select/selectMeta';
43
38
  import { textInputMeta } from '../features/form/text-input/textInputMeta';
44
39
  import { gradientMeta } from '../features/gradient/gradientMeta';
45
40
  import { heroMeta } from '../features/hero/heroMeta';
@@ -55,7 +50,10 @@ import { stackMeta } from '../features/layout/stackMeta';
55
50
  import { flatListMeta } from '../features/list/flatListMeta';
56
51
  import { sectionListMeta } from '../features/list/sectionListMeta';
57
52
  import { missingElementMeta } from '../features/missing-element/missingElementMeta';
53
+ import { paginationMeta } from '../features/pagination/paginationMeta';
54
+ import { popoverMenuMeta } from '../features/popover-menu/popoverMenuMeta';
58
55
  import { progressMeta, progressRingMeta } from '../features/progress/progressMeta';
56
+ import { ratingMeta } from '../features/rating/ratingMeta';
59
57
  import {
60
58
  skeletonCardMeta,
61
59
  skeletonListMeta,
@@ -63,9 +61,14 @@ import {
63
61
  skeletonTextMeta,
64
62
  } from '../features/skeleton/skeletonMeta';
65
63
  import { surfaceMeta } from '../features/surface/surfaceMeta';
64
+ import { tabListMeta } from '../features/tabs/tabListMeta';
65
+ import { tabMeta } from '../features/tabs/tabMeta';
66
+ import { tabPanelMeta } from '../features/tabs/tabPanelMeta';
67
+ import { tabsMeta } from '../features/tabs/tabsMeta';
66
68
  import { timePickerMeta } from '../features/time-picker/timePickerMeta';
67
69
  import { toastMeta } from '../features/toast/toastMeta';
68
70
  import { toastProviderMeta } from '../features/toast/toastProviderMeta';
71
+ import { toolbarMeta } from '../features/toolbar/toolbarMeta';
69
72
  import { headingMeta } from '../features/typography/headingMeta';
70
73
  import { textMeta } from '../features/typography/textMeta';
71
74
  import { uploaderMeta } from '../features/uploader/uploaderMeta';
@@ -128,7 +131,7 @@ export const ZORA_COMPONENT_META: ZoraComponentMetaRegistry = finalizeFeatureMet
128
131
  ChipGroup: chipGroupMeta,
129
132
  DataTable: dataTableMeta,
130
133
  DatePicker: datePickerMeta,
131
- DropdownMenu: dropdownMenuMeta,
134
+ Dialog: dialogMeta,
132
135
  Form: formMeta,
133
136
  FormActions: formActionsMeta,
134
137
  FormError: formErrorMeta,
@@ -141,28 +144,29 @@ export const ZORA_COMPONENT_META: ZoraComponentMetaRegistry = finalizeFeatureMet
141
144
  KeyboardAvoidingView: keyboardAvoidingViewMeta,
142
145
  TextInput: textInputMeta,
143
146
  MediaCard: mediaCardMeta,
144
- Menu: menuMeta,
145
147
  MetricCard: metricCardMeta,
146
- Modal: modalMeta,
147
148
  Pagination: paginationMeta,
149
+ PopoverMenu: popoverMenuMeta,
148
150
  Progress: progressMeta,
149
151
  ProgressRing: progressRingMeta,
150
152
  Radio: radioMeta,
151
153
  RadioGroup: radioGroupMeta,
152
154
  Rating: ratingMeta,
153
- SearchBar: searchBarMeta,
155
+ SearchInput: searchInputMeta,
154
156
  Select: selectMeta,
155
157
  Skeleton: skeletonMeta,
156
158
  SkeletonCard: skeletonCardMeta,
157
159
  SkeletonList: skeletonListMeta,
158
160
  SkeletonText: skeletonTextMeta,
161
+ Tab: tabMeta,
162
+ TabList: tabListMeta,
163
+ TabPanel: tabPanelMeta,
159
164
  Tabs: tabsMeta,
160
165
  Text: textMeta,
161
166
  TimePicker: timePickerMeta,
162
167
  Toast: toastMeta,
163
168
  ToastProvider: toastProviderMeta,
164
169
  Toolbar: toolbarMeta,
165
- ToolbarAction: toolbarActionMeta,
166
170
  Uploader: uploaderMeta,
167
171
  BottomSheet: bottomSheetMeta,
168
172
  FlatList: flatListMeta,
@@ -6,30 +6,16 @@ function isRecord(value: unknown): value is Record<string, unknown> {
6
6
  return typeof value === 'object' && value !== null && !Array.isArray(value);
7
7
  }
8
8
 
9
- function findRecordValue(record: Record<string, unknown>, key: string): unknown {
10
- for (const [entryKey, entryValue] of Object.entries(record)) {
11
- if (entryKey === key) {
12
- return entryValue;
13
- }
14
- }
15
-
16
- return undefined;
17
- }
18
-
19
- function isOptionalPeer(metadata: unknown, packageName: string): boolean {
20
- if (!isRecord(metadata)) return false;
21
- const peerMetadata = findRecordValue(metadata, packageName);
22
- return isRecord(peerMetadata) && peerMetadata.optional === true;
23
- }
24
-
25
- test('root-entry native imports are required portable peers', async () => {
9
+ test('root-entry native imports expose only required portable peers', async () => {
26
10
  const packageJson = JSON.parse(
27
11
  await readFile(new URL('../package.json', import.meta.url), 'utf8'),
28
12
  ) as unknown;
29
13
  if (!isRecord(packageJson)) throw new Error('Expected package.json to contain an object.');
30
14
 
31
- const { peerDependencies, peerDependenciesMeta } = packageJson;
32
- expect(isOptionalPeer(peerDependenciesMeta, '@react-native-picker/picker')).toBe(false);
15
+ const { peerDependencies } = packageJson;
16
+ expect(
17
+ isRecord(peerDependencies) && peerDependencies['@react-native-picker/picker'],
18
+ ).toBeUndefined();
33
19
  expect(isRecord(peerDependencies) && peerDependencies['expo-linear-gradient']).toBeUndefined();
34
20
  expect(isRecord(peerDependencies) && peerDependencies['expo-font']).toBeUndefined();
35
21
  expect(isRecord(peerDependencies) && peerDependencies['@expo/vector-icons']).toBeUndefined();
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
- import { Modal } from '../../components/modal';
4
3
  import { Button } from '../../features/button/public';
4
+ import { Dialog } from '../../features/dialog/public';
5
5
  import { Stack } from '../../features/layout/public';
6
6
  import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
7
7
  import type { ConfirmDialogProps } from './types';
@@ -25,7 +25,7 @@ function ConfirmDialogInner({
25
25
  interactionPolicy,
26
26
  }: ConfirmDialogProps) {
27
27
  return (
28
- <Modal
28
+ <Dialog
29
29
  closeOnBackdrop={closeOnBackdrop}
30
30
  description={description}
31
31
  interactionPolicy={interactionPolicy}
@@ -57,7 +57,7 @@ function ConfirmDialogInner({
57
57
  width="narrow"
58
58
  >
59
59
  {children}
60
- </Modal>
60
+ </Dialog>
61
61
  );
62
62
  }
63
63
 
@@ -3,11 +3,11 @@ import type { AppCategory } from '@ankhorage/contracts';
3
3
  import { APP_CATEGORIES } from '@ankhorage/contracts';
4
4
  import React from 'react';
5
5
 
6
- import { Select } from '../../components/select';
7
- import { Tabs } from '../../components/tabs';
8
6
  import { Badge } from '../../features/badge/public';
9
7
  import { Button } from '../../features/button/public';
10
8
  import { Card } from '../../features/card/public';
9
+ import { ChipGroup } from '../../features/chip/public';
10
+ import { Select } from '../../features/form/select/public';
11
11
  import { TextInput } from '../../features/form/text-input/public';
12
12
  import { Box, Stack } from '../../features/layout/public';
13
13
  import { Heading } from '../../features/typography/public';
@@ -48,7 +48,7 @@ function formatAppCategoryLabel(category: AppCategory): string {
48
48
 
49
49
  const HARMONY_OPTIONS = COLOR_HARMONIES.map((h) => ({ value: h, label: h }));
50
50
 
51
- const MODE_TABS = [
51
+ const MODE_OPTIONS = [
52
52
  { value: 'light' as ZoraThemeMode, label: 'Light' },
53
53
  { value: 'dark' as ZoraThemeMode, label: 'Dark' },
54
54
  ];
@@ -230,12 +230,11 @@ function ThemeComposerInner({
230
230
 
231
231
  {/* Section: Mode */}
232
232
  <Card title="Mode" description="Switch between light and dark presentation.">
233
- <Tabs
233
+ <ChipGroup
234
234
  value={activeMode}
235
- items={MODE_TABS}
236
- onValueChange={(m) => onModeChange?.(m)}
237
- variant="segmented"
238
- testID={testID ? `${testID}-mode-tabs` : undefined}
235
+ items={MODE_OPTIONS}
236
+ onValueChange={(nextMode) => onModeChange?.(nextMode)}
237
+ testID={testID ? `${testID}-mode` : undefined}
239
238
  />
240
239
  </Card>
241
240
 
@@ -1,6 +1,6 @@
1
1
  import { expect, test } from 'bun:test';
2
2
 
3
- test('passes the isolated Surface 4 and RN Web 0.21 acceptance suite', () => {
3
+ test('passes the isolated Surface 5 and RN Web 0.21 acceptance suite', () => {
4
4
  const subprocess = Bun.spawnSync({
5
5
  cmd: [process.execPath, 'test', 'test-fixtures/platformAcceptance.test.tsx'],
6
6
  stderr: 'pipe',
package/src/registry.ts CHANGED
@@ -1,15 +1,6 @@
1
1
  import type { InteractionPolicyProps } from '@ankhorage/surface';
2
2
  import type React from 'react';
3
3
 
4
- import { Breadcrumbs } from './components/breadcrumbs';
5
- import { DropdownMenu, Menu } from './components/menu';
6
- import { Modal } from './components/modal';
7
- import { Pagination } from './components/pagination';
8
- import { Rating } from './components/rating';
9
- import { SearchBar } from './components/search-bar';
10
- import { Select } from './components/select';
11
- import { Tabs } from './components/tabs';
12
- import { Toolbar, ToolbarAction } from './components/toolbar';
13
4
  import { Accordion, AccordionItem } from './features/accordion/public';
14
5
  import { ActivityIndicator } from './features/activity-indicator/public';
15
6
  import { AppBar } from './features/app-bar/public';
@@ -25,6 +16,7 @@ import { Avatar } from './features/avatar/public';
25
16
  import { AvatarGroup } from './features/avatar/public';
26
17
  import { Badge } from './features/badge/public';
27
18
  import { BottomSheet } from './features/bottom-sheet/public';
19
+ import { Breadcrumbs } from './features/breadcrumbs/public';
28
20
  import { Button } from './features/button/public';
29
21
  import { ButtonGroup } from './features/button/public';
30
22
  import { IconButton } from './features/button/public';
@@ -37,10 +29,13 @@ import { Chip } from './features/chip/public';
37
29
  import { ChipGroup } from './features/chip/public';
38
30
  import { DataTable } from './features/data-table/public';
39
31
  import { DatePicker } from './features/date-picker/public';
32
+ import { Dialog } from './features/dialog/public';
40
33
  import { EmptyState } from './features/empty-state/public';
41
34
  import { Checkbox, CheckboxGroup } from './features/form/checkbox/public';
42
35
  import { Form, FormActions, FormError, FormField } from './features/form/public';
43
36
  import { Radio, RadioGroup } from './features/form/radio/public';
37
+ import { SearchInput } from './features/form/search-input/public';
38
+ import { Select } from './features/form/select/public';
44
39
  import { TextInput } from './features/form/text-input/public';
45
40
  import { Gradient } from './features/gradient/public';
46
41
  import { Hero } from './features/hero/public';
@@ -51,11 +46,16 @@ import { Box, Container, Divider, Grid, Stack } from './features/layout/public';
51
46
  import { ContentRail } from './features/layout/public';
52
47
  import { FlatList, SectionList } from './features/list/public';
53
48
  import { MissingElement } from './features/missing-element/public';
49
+ import { Pagination } from './features/pagination/public';
50
+ import { PopoverMenu } from './features/popover-menu/public';
54
51
  import { Progress, ProgressRing } from './features/progress/public';
52
+ import { Rating } from './features/rating/public';
55
53
  import { Skeleton, SkeletonCard, SkeletonList, SkeletonText } from './features/skeleton/public';
56
54
  import { Surface } from './features/surface/public';
55
+ import { Tab, TabList, TabPanel, Tabs } from './features/tabs/public';
57
56
  import { TimePicker } from './features/time-picker/public';
58
57
  import { Toast } from './features/toast/public';
58
+ import { Toolbar } from './features/toolbar/public';
59
59
  import { Heading } from './features/typography/public';
60
60
  import { Text } from './features/typography/public';
61
61
  import { Uploader } from './features/uploader/public';
@@ -130,7 +130,7 @@ const _ZORA_COMPONENT_REGISTRY = {
130
130
  ChipGroup,
131
131
  DataTable,
132
132
  DatePicker,
133
- DropdownMenu,
133
+ Dialog,
134
134
  Form,
135
135
  FormActions,
136
136
  FormError,
@@ -143,27 +143,28 @@ const _ZORA_COMPONENT_REGISTRY = {
143
143
  KeyboardAvoidingView,
144
144
  TextInput,
145
145
  MediaCard,
146
- Menu,
147
146
  MetricCard,
148
- Modal,
149
147
  Pagination,
148
+ PopoverMenu,
150
149
  Progress,
151
150
  ProgressRing,
152
151
  Radio,
153
152
  RadioGroup,
154
153
  Rating,
155
- SearchBar,
154
+ SearchInput,
156
155
  Select,
157
156
  Skeleton,
158
157
  SkeletonCard,
159
158
  SkeletonList,
160
159
  SkeletonText,
160
+ Tab,
161
+ TabList,
162
+ TabPanel,
161
163
  Tabs,
162
164
  Text,
163
165
  TimePicker,
164
166
  Toast,
165
167
  Toolbar,
166
- ToolbarAction,
167
168
  Uploader,
168
169
  BottomSheet,
169
170
  FlatList,
@@ -30,6 +30,7 @@ const REQUIRED_SHOWCASE_COVERAGE = {
30
30
  'CheckboxGroup',
31
31
  'Chip',
32
32
  'ChipGroup',
33
+ 'Dialog',
33
34
  'Form',
34
35
  'FormActions',
35
36
  'FormError',
@@ -42,18 +43,20 @@ const REQUIRED_SHOWCASE_COVERAGE = {
42
43
  'TextInput',
43
44
  'MediaCard',
44
45
  'MetricCard',
45
- 'Modal',
46
+ 'Pagination',
46
47
  'Progress',
47
48
  'ProgressRing',
48
49
  'Radio',
49
50
  'RadioGroup',
50
51
  'Rating',
51
- 'SearchBar',
52
+ 'SearchInput',
52
53
  'Select',
54
+ 'Tab',
55
+ 'TabList',
56
+ 'TabPanel',
53
57
  'Tabs',
54
58
  'Text',
55
59
  'Toolbar',
56
- 'ToolbarAction',
57
60
  ],
58
61
  foundation: [
59
62
  'Box',