@ankhorage/zora 15.0.0 → 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 (374) hide show
  1. package/CHANGELOG.md +6 -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/bottom-sheet/bottomSheetMeta.d.ts +1 -1
  9. package/dist/features/button/utils/resolveButtonThemeRecipe.d.ts +1 -1
  10. package/dist/features/card/cardMeta.d.ts +1 -1
  11. package/dist/features/card/mediaCardMeta.d.ts +1 -1
  12. package/dist/features/card/postCardMeta.d.ts +1 -1
  13. package/dist/features/dialog/adapters/inbound/Dialog.d.ts +5 -0
  14. package/dist/features/dialog/adapters/inbound/Dialog.d.ts.map +1 -0
  15. package/dist/features/dialog/adapters/inbound/Dialog.js +45 -0
  16. package/dist/features/dialog/adapters/inbound/Dialog.js.map +1 -0
  17. package/dist/features/dialog/dialogMeta.d.ts +87 -0
  18. package/dist/features/dialog/dialogMeta.d.ts.map +1 -0
  19. package/dist/features/dialog/dialogMeta.js +59 -0
  20. package/dist/features/dialog/dialogMeta.js.map +1 -0
  21. package/dist/features/dialog/public.d.ts +3 -0
  22. package/dist/features/dialog/public.d.ts.map +1 -0
  23. package/dist/features/dialog/public.js +2 -0
  24. package/dist/features/dialog/public.js.map +1 -0
  25. package/dist/features/form/formFieldMeta.d.ts +1 -1
  26. package/dist/features/form/formFieldMeta.d.ts.map +1 -1
  27. package/dist/features/form/formFieldMeta.js +8 -1
  28. package/dist/features/form/formFieldMeta.js.map +1 -1
  29. package/dist/features/form/radio/utils/resolveRadioGroupThemeRecipe.d.ts +1 -1
  30. package/dist/features/form/search-input/adapters/inbound/SearchInput.d.ts +4 -0
  31. package/dist/features/form/search-input/adapters/inbound/SearchInput.d.ts.map +1 -0
  32. package/dist/{components/search-bar/SearchBar.js → features/form/search-input/adapters/inbound/SearchInput.js} +8 -10
  33. package/dist/features/form/search-input/adapters/inbound/SearchInput.js.map +1 -0
  34. package/dist/features/form/search-input/public.d.ts +3 -0
  35. package/dist/features/form/search-input/public.d.ts.map +1 -0
  36. package/dist/features/form/search-input/public.js +2 -0
  37. package/dist/features/form/search-input/public.js.map +1 -0
  38. package/dist/features/form/search-input/searchInputMeta.d.ts +126 -0
  39. package/dist/features/form/search-input/searchInputMeta.d.ts.map +1 -0
  40. package/dist/features/form/search-input/searchInputMeta.js +67 -0
  41. package/dist/features/form/search-input/searchInputMeta.js.map +1 -0
  42. package/dist/features/gradient/gradientMeta.d.ts +1 -1
  43. package/dist/features/keyboard-avoiding-view/keyboardAvoidingViewMeta.d.ts +1 -1
  44. package/dist/features/layout/boxMeta.d.ts +1 -1
  45. package/dist/features/layout/containerMeta.d.ts +1 -1
  46. package/dist/features/layout/gridMeta.d.ts +1 -1
  47. package/dist/features/layout/stackMeta.d.ts +1 -1
  48. package/dist/features/list/flatListMeta.d.ts +1 -1
  49. package/dist/features/list/sectionListMeta.d.ts +1 -1
  50. package/dist/features/pagination/adapters/inbound/Pagination.d.ts +5 -0
  51. package/dist/features/pagination/adapters/inbound/Pagination.d.ts.map +1 -0
  52. package/dist/features/pagination/adapters/inbound/Pagination.js +43 -0
  53. package/dist/features/pagination/adapters/inbound/Pagination.js.map +1 -0
  54. package/dist/features/pagination/paginationMeta.d.ts +118 -0
  55. package/dist/features/pagination/paginationMeta.d.ts.map +1 -0
  56. package/dist/features/pagination/paginationMeta.js +53 -0
  57. package/dist/features/pagination/paginationMeta.js.map +1 -0
  58. package/dist/features/pagination/public.d.ts +3 -0
  59. package/dist/features/pagination/public.d.ts.map +1 -0
  60. package/dist/features/pagination/public.js +2 -0
  61. package/dist/features/pagination/public.js.map +1 -0
  62. package/dist/features/pagination/utils/resolvePaginationPage.d.ts +3 -0
  63. package/dist/features/pagination/utils/resolvePaginationPage.d.ts.map +1 -0
  64. package/dist/features/pagination/utils/resolvePaginationPage.js +7 -0
  65. package/dist/features/pagination/utils/resolvePaginationPage.js.map +1 -0
  66. package/dist/features/pagination/utils/resolvePaginationState.d.ts +17 -0
  67. package/dist/features/pagination/utils/resolvePaginationState.d.ts.map +1 -0
  68. package/dist/features/pagination/utils/resolvePaginationState.js +34 -0
  69. package/dist/features/pagination/utils/resolvePaginationState.js.map +1 -0
  70. package/dist/features/rating/adapters/inbound/Rating.d.ts +4 -0
  71. package/dist/features/rating/adapters/inbound/Rating.d.ts.map +1 -0
  72. package/dist/features/rating/adapters/inbound/Rating.js +49 -0
  73. package/dist/features/rating/adapters/inbound/Rating.js.map +1 -0
  74. package/dist/features/rating/public.d.ts +3 -0
  75. package/dist/features/rating/public.d.ts.map +1 -0
  76. package/dist/features/rating/public.js +2 -0
  77. package/dist/features/rating/public.js.map +1 -0
  78. package/dist/features/rating/ratingMeta.d.ts +57 -0
  79. package/dist/features/rating/ratingMeta.d.ts.map +1 -0
  80. package/dist/features/rating/ratingMeta.js +43 -0
  81. package/dist/features/rating/ratingMeta.js.map +1 -0
  82. package/dist/features/rating/utils/resolveRatingSegments.d.ts +9 -0
  83. package/dist/features/rating/utils/resolveRatingSegments.d.ts.map +1 -0
  84. package/dist/features/rating/utils/resolveRatingSegments.js +14 -0
  85. package/dist/features/rating/utils/resolveRatingSegments.js.map +1 -0
  86. package/dist/features/surface/surfaceMeta.d.ts +1 -1
  87. package/dist/features/tabs/adapters/inbound/Tab.d.ts +5 -0
  88. package/dist/features/tabs/adapters/inbound/Tab.d.ts.map +1 -0
  89. package/dist/features/tabs/adapters/inbound/Tab.js +14 -0
  90. package/dist/features/tabs/adapters/inbound/Tab.js.map +1 -0
  91. package/dist/features/tabs/adapters/inbound/TabList.d.ts +4 -0
  92. package/dist/features/tabs/adapters/inbound/TabList.d.ts.map +1 -0
  93. package/dist/features/tabs/adapters/inbound/TabList.js +9 -0
  94. package/dist/features/tabs/adapters/inbound/TabList.js.map +1 -0
  95. package/dist/features/tabs/adapters/inbound/TabPanel.d.ts +4 -0
  96. package/dist/features/tabs/adapters/inbound/TabPanel.d.ts.map +1 -0
  97. package/dist/features/tabs/adapters/inbound/TabPanel.js +11 -0
  98. package/dist/features/tabs/adapters/inbound/TabPanel.js.map +1 -0
  99. package/dist/features/tabs/adapters/inbound/Tabs.d.ts +4 -0
  100. package/dist/features/tabs/adapters/inbound/Tabs.d.ts.map +1 -0
  101. package/dist/features/tabs/adapters/inbound/Tabs.js +12 -0
  102. package/dist/features/tabs/adapters/inbound/Tabs.js.map +1 -0
  103. package/dist/features/tabs/composition/TabsInteractionPolicyContext.d.ts +3 -0
  104. package/dist/features/tabs/composition/TabsInteractionPolicyContext.d.ts.map +1 -0
  105. package/dist/features/tabs/composition/TabsInteractionPolicyContext.js +3 -0
  106. package/dist/features/tabs/composition/TabsInteractionPolicyContext.js.map +1 -0
  107. package/dist/features/tabs/public.d.ts +6 -0
  108. package/dist/features/tabs/public.d.ts.map +1 -0
  109. package/dist/features/tabs/public.js +5 -0
  110. package/dist/features/tabs/public.js.map +1 -0
  111. package/dist/features/tabs/tabListMeta.d.ts +9 -0
  112. package/dist/features/tabs/tabListMeta.d.ts.map +1 -0
  113. package/dist/features/tabs/tabListMeta.js +9 -0
  114. package/dist/features/tabs/tabListMeta.js.map +1 -0
  115. package/dist/features/tabs/tabMeta.d.ts +32 -0
  116. package/dist/features/tabs/tabMeta.d.ts.map +1 -0
  117. package/dist/features/tabs/tabMeta.js +14 -0
  118. package/dist/features/tabs/tabMeta.js.map +1 -0
  119. package/dist/features/tabs/tabPanelMeta.d.ts +15 -0
  120. package/dist/features/tabs/tabPanelMeta.d.ts.map +1 -0
  121. package/dist/features/tabs/tabPanelMeta.js +12 -0
  122. package/dist/features/tabs/tabPanelMeta.js.map +1 -0
  123. package/dist/features/tabs/tabsMeta.d.ts +58 -0
  124. package/dist/features/tabs/tabsMeta.d.ts.map +1 -0
  125. package/dist/features/tabs/tabsMeta.js +40 -0
  126. package/dist/features/tabs/tabsMeta.js.map +1 -0
  127. package/dist/features/toolbar/adapters/inbound/Toolbar.d.ts +4 -0
  128. package/dist/features/toolbar/adapters/inbound/Toolbar.d.ts.map +1 -0
  129. package/dist/features/toolbar/adapters/inbound/Toolbar.js +14 -0
  130. package/dist/features/toolbar/adapters/inbound/Toolbar.js.map +1 -0
  131. package/dist/features/toolbar/public.d.ts +3 -0
  132. package/dist/features/toolbar/public.d.ts.map +1 -0
  133. package/dist/features/toolbar/public.js +2 -0
  134. package/dist/features/toolbar/public.js.map +1 -0
  135. package/dist/features/toolbar/toolbarMeta.d.ts +29 -0
  136. package/dist/features/toolbar/toolbarMeta.d.ts.map +1 -0
  137. package/dist/features/toolbar/toolbarMeta.js +22 -0
  138. package/dist/features/toolbar/toolbarMeta.js.map +1 -0
  139. package/dist/features/typography/utils/resolveHeadingThemeRecipe.d.ts +1 -1
  140. package/dist/features/typography/utils/resolveTextThemeRecipe.d.ts +1 -1
  141. package/dist/features/uploader/adapters/inbound/Uploader.d.ts.map +1 -1
  142. package/dist/features/uploader/adapters/inbound/Uploader.js +3 -3
  143. package/dist/features/uploader/adapters/inbound/Uploader.js.map +1 -1
  144. package/dist/index.d.ts +6 -12
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +6 -6
  147. package/dist/index.js.map +1 -1
  148. package/dist/layout/screen/meta.d.ts +1 -1
  149. package/dist/layout/screen-section/meta.d.ts +1 -1
  150. package/dist/metadata/allowedChildren.d.ts +3 -3
  151. package/dist/metadata/allowedChildren.d.ts.map +1 -1
  152. package/dist/metadata/allowedChildren.js +6 -0
  153. package/dist/metadata/allowedChildren.js.map +1 -1
  154. package/dist/metadata/bindableComponentMeta.d.ts +2 -2
  155. package/dist/metadata/componentMeta.d.ts.map +1 -1
  156. package/dist/metadata/componentMeta.js +14 -9
  157. package/dist/metadata/componentMeta.js.map +1 -1
  158. package/dist/patterns/confirm-dialog/ConfirmDialog.js +3 -3
  159. package/dist/patterns/confirm-dialog/ConfirmDialog.js.map +1 -1
  160. package/dist/patterns/message-bubble/meta.d.ts +1 -1
  161. package/dist/patterns/notice/meta.d.ts +1 -1
  162. package/dist/patterns/panel/meta.d.ts +1 -1
  163. package/dist/patterns/reader/meta.d.ts +2 -2
  164. package/dist/patterns/scanner/meta.d.ts +2 -2
  165. package/dist/patterns/theme-composer/ThemeComposer.d.ts.map +1 -1
  166. package/dist/patterns/theme-composer/ThemeComposer.js +3 -3
  167. package/dist/patterns/theme-composer/ThemeComposer.js.map +1 -1
  168. package/dist/registry.d.ts.map +1 -1
  169. package/dist/registry.js +11 -9
  170. package/dist/registry.js.map +1 -1
  171. package/dist/types/dialog.d.ts +14 -0
  172. package/dist/types/dialog.d.ts.map +1 -0
  173. package/dist/types/dialog.js +2 -0
  174. package/dist/types/dialog.js.map +1 -0
  175. package/dist/types/pagination.d.ts +16 -0
  176. package/dist/types/pagination.d.ts.map +1 -0
  177. package/dist/types/pagination.js +2 -0
  178. package/dist/types/pagination.js.map +1 -0
  179. package/dist/types/rating.d.ts +9 -0
  180. package/dist/types/rating.d.ts.map +1 -0
  181. package/dist/types/rating.js +2 -0
  182. package/dist/types/rating.js.map +1 -0
  183. package/dist/types/search-input.d.ts +14 -0
  184. package/dist/types/search-input.d.ts.map +1 -0
  185. package/dist/types/search-input.js +2 -0
  186. package/dist/types/search-input.js.map +1 -0
  187. package/dist/types/tabs.d.ts +21 -0
  188. package/dist/types/tabs.d.ts.map +1 -0
  189. package/dist/types/tabs.js +2 -0
  190. package/dist/types/tabs.js.map +1 -0
  191. package/dist/types/toolbar.d.ts +8 -0
  192. package/dist/types/toolbar.d.ts.map +1 -0
  193. package/dist/types/toolbar.js +2 -0
  194. package/dist/types/toolbar.js.map +1 -0
  195. package/package.json +1 -1
  196. package/src/audit.test.ts +8 -47
  197. package/src/constants.ts +5 -0
  198. package/src/featureManifest.test.ts +31 -2
  199. package/src/features/dialog/adapters/inbound/Dialog.tsx +70 -0
  200. package/src/features/dialog/dialogMeta.ts +60 -0
  201. package/src/features/dialog/public.ts +2 -0
  202. package/src/features/form/formFieldMeta.ts +8 -1
  203. package/src/{components/search-bar/SearchBar.tsx → features/form/search-input/adapters/inbound/SearchInput.tsx} +10 -15
  204. package/src/features/form/search-input/public.ts +2 -0
  205. package/src/features/form/search-input/searchInputMeta.ts +68 -0
  206. package/src/features/pagination/adapters/inbound/Pagination.tsx +116 -0
  207. package/src/features/pagination/paginationMeta.ts +54 -0
  208. package/src/features/pagination/public.ts +2 -0
  209. package/src/features/pagination/utils/resolvePaginationPage.ts +6 -0
  210. package/src/features/pagination/utils/resolvePaginationState.test.ts +29 -0
  211. package/src/features/pagination/utils/resolvePaginationState.ts +70 -0
  212. package/src/features/rating/adapters/inbound/Rating.tsx +70 -0
  213. package/src/features/rating/public.ts +2 -0
  214. package/src/features/rating/ratingMeta.ts +44 -0
  215. package/src/features/rating/utils/resolveRatingSegments.test.ts +20 -0
  216. package/src/features/rating/utils/resolveRatingSegments.ts +19 -0
  217. package/src/features/tabs/adapters/inbound/Tab.tsx +26 -0
  218. package/src/features/tabs/adapters/inbound/TabList.tsx +18 -0
  219. package/src/features/tabs/adapters/inbound/TabPanel.tsx +23 -0
  220. package/src/features/tabs/adapters/inbound/Tabs.tsx +23 -0
  221. package/src/features/tabs/composition/TabsInteractionPolicyContext.ts +4 -0
  222. package/src/features/tabs/public.ts +5 -0
  223. package/src/features/tabs/tabListMeta.ts +10 -0
  224. package/src/features/tabs/tabMeta.ts +15 -0
  225. package/src/features/tabs/tabPanelMeta.ts +13 -0
  226. package/src/features/tabs/tabsMeta.ts +41 -0
  227. package/src/features/toolbar/adapters/inbound/Toolbar.tsx +31 -0
  228. package/src/features/toolbar/public.ts +2 -0
  229. package/src/features/toolbar/toolbarMeta.ts +24 -0
  230. package/src/{components → features/typography}/contentFallback.test.ts +2 -8
  231. package/src/features/uploader/adapters/inbound/Uploader.tsx +3 -3
  232. package/src/index.ts +15 -12
  233. package/src/metadata/allowedChildren.ts +6 -0
  234. package/src/metadata/componentMeta.test.ts +18 -1
  235. package/src/metadata/componentMeta.ts +14 -9
  236. package/src/patterns/confirm-dialog/ConfirmDialog.tsx +3 -3
  237. package/src/patterns/theme-composer/ThemeComposer.tsx +6 -7
  238. package/src/registry.ts +11 -9
  239. package/src/showcaseCoverage.test.ts +6 -3
  240. package/src/theme/themeScopeStructure.test.ts +16 -11
  241. package/src/types/dialog.ts +15 -0
  242. package/src/{components/pagination/types.ts → types/pagination.ts} +5 -8
  243. package/src/types/rating.ts +9 -0
  244. package/src/types/search-input.ts +14 -0
  245. package/src/types/tabs.ts +25 -0
  246. package/src/types/toolbar.ts +9 -0
  247. package/dist/components/modal/Modal.d.ts +0 -7
  248. package/dist/components/modal/Modal.d.ts.map +0 -1
  249. package/dist/components/modal/Modal.js +0 -39
  250. package/dist/components/modal/Modal.js.map +0 -1
  251. package/dist/components/modal/index.d.ts +0 -3
  252. package/dist/components/modal/index.d.ts.map +0 -1
  253. package/dist/components/modal/index.js +0 -2
  254. package/dist/components/modal/index.js.map +0 -1
  255. package/dist/components/modal/meta.d.ts +0 -9
  256. package/dist/components/modal/meta.d.ts.map +0 -1
  257. package/dist/components/modal/meta.js +0 -9
  258. package/dist/components/modal/meta.js.map +0 -1
  259. package/dist/components/modal/types.d.ts +0 -12
  260. package/dist/components/modal/types.d.ts.map +0 -1
  261. package/dist/components/modal/types.js +0 -2
  262. package/dist/components/modal/types.js.map +0 -1
  263. package/dist/components/pagination/Pagination.d.ts +0 -7
  264. package/dist/components/pagination/Pagination.d.ts.map +0 -1
  265. package/dist/components/pagination/Pagination.js +0 -96
  266. package/dist/components/pagination/Pagination.js.map +0 -1
  267. package/dist/components/pagination/index.d.ts +0 -3
  268. package/dist/components/pagination/index.d.ts.map +0 -1
  269. package/dist/components/pagination/index.js +0 -2
  270. package/dist/components/pagination/index.js.map +0 -1
  271. package/dist/components/pagination/meta.d.ts +0 -9
  272. package/dist/components/pagination/meta.d.ts.map +0 -1
  273. package/dist/components/pagination/meta.js +0 -9
  274. package/dist/components/pagination/meta.js.map +0 -1
  275. package/dist/components/pagination/types.d.ts +0 -18
  276. package/dist/components/pagination/types.d.ts.map +0 -1
  277. package/dist/components/pagination/types.js +0 -2
  278. package/dist/components/pagination/types.js.map +0 -1
  279. package/dist/components/rating/Rating.d.ts +0 -7
  280. package/dist/components/rating/Rating.d.ts.map +0 -1
  281. package/dist/components/rating/Rating.js +0 -26
  282. package/dist/components/rating/Rating.js.map +0 -1
  283. package/dist/components/rating/index.d.ts +0 -3
  284. package/dist/components/rating/index.d.ts.map +0 -1
  285. package/dist/components/rating/index.js +0 -2
  286. package/dist/components/rating/index.js.map +0 -1
  287. package/dist/components/rating/meta.d.ts +0 -9
  288. package/dist/components/rating/meta.d.ts.map +0 -1
  289. package/dist/components/rating/meta.js +0 -9
  290. package/dist/components/rating/meta.js.map +0 -1
  291. package/dist/components/rating/resolveRatingSegments.d.ts +0 -7
  292. package/dist/components/rating/resolveRatingSegments.d.ts.map +0 -1
  293. package/dist/components/rating/resolveRatingSegments.js +0 -22
  294. package/dist/components/rating/resolveRatingSegments.js.map +0 -1
  295. package/dist/components/rating/types.d.ts +0 -11
  296. package/dist/components/rating/types.d.ts.map +0 -1
  297. package/dist/components/rating/types.js +0 -26
  298. package/dist/components/rating/types.js.map +0 -1
  299. package/dist/components/search-bar/SearchBar.d.ts +0 -7
  300. package/dist/components/search-bar/SearchBar.d.ts.map +0 -1
  301. package/dist/components/search-bar/SearchBar.js.map +0 -1
  302. package/dist/components/search-bar/index.d.ts +0 -3
  303. package/dist/components/search-bar/index.d.ts.map +0 -1
  304. package/dist/components/search-bar/index.js +0 -2
  305. package/dist/components/search-bar/index.js.map +0 -1
  306. package/dist/components/search-bar/meta.d.ts +0 -9
  307. package/dist/components/search-bar/meta.d.ts.map +0 -1
  308. package/dist/components/search-bar/meta.js +0 -9
  309. package/dist/components/search-bar/meta.js.map +0 -1
  310. package/dist/components/search-bar/types.d.ts +0 -14
  311. package/dist/components/search-bar/types.d.ts.map +0 -1
  312. package/dist/components/search-bar/types.js +0 -2
  313. package/dist/components/search-bar/types.js.map +0 -1
  314. package/dist/components/tabs/Tabs.d.ts +0 -9
  315. package/dist/components/tabs/Tabs.d.ts.map +0 -1
  316. package/dist/components/tabs/Tabs.js +0 -59
  317. package/dist/components/tabs/Tabs.js.map +0 -1
  318. package/dist/components/tabs/index.d.ts +0 -3
  319. package/dist/components/tabs/index.d.ts.map +0 -1
  320. package/dist/components/tabs/index.js +0 -3
  321. package/dist/components/tabs/index.js.map +0 -1
  322. package/dist/components/tabs/meta.d.ts +0 -9
  323. package/dist/components/tabs/meta.d.ts.map +0 -1
  324. package/dist/components/tabs/meta.js +0 -9
  325. package/dist/components/tabs/meta.js.map +0 -1
  326. package/dist/components/tabs/types.d.ts +0 -22
  327. package/dist/components/tabs/types.d.ts.map +0 -1
  328. package/dist/components/tabs/types.js +0 -2
  329. package/dist/components/tabs/types.js.map +0 -1
  330. package/dist/components/toolbar/Toolbar.d.ts +0 -9
  331. package/dist/components/toolbar/Toolbar.d.ts.map +0 -1
  332. package/dist/components/toolbar/Toolbar.js +0 -26
  333. package/dist/components/toolbar/Toolbar.js.map +0 -1
  334. package/dist/components/toolbar/ToolbarAction.d.ts +0 -9
  335. package/dist/components/toolbar/ToolbarAction.d.ts.map +0 -1
  336. package/dist/components/toolbar/ToolbarAction.js +0 -13
  337. package/dist/components/toolbar/ToolbarAction.js.map +0 -1
  338. package/dist/components/toolbar/index.d.ts +0 -4
  339. package/dist/components/toolbar/index.d.ts.map +0 -1
  340. package/dist/components/toolbar/index.js +0 -4
  341. package/dist/components/toolbar/index.js.map +0 -1
  342. package/dist/components/toolbar/meta.d.ts +0 -17
  343. package/dist/components/toolbar/meta.d.ts.map +0 -1
  344. package/dist/components/toolbar/meta.js +0 -17
  345. package/dist/components/toolbar/meta.js.map +0 -1
  346. package/dist/components/toolbar/types.d.ts +0 -18
  347. package/dist/components/toolbar/types.d.ts.map +0 -1
  348. package/dist/components/toolbar/types.js +0 -2
  349. package/dist/components/toolbar/types.js.map +0 -1
  350. package/src/components/modal/Modal.tsx +0 -63
  351. package/src/components/modal/index.ts +0 -2
  352. package/src/components/modal/meta.ts +0 -10
  353. package/src/components/modal/types.ts +0 -16
  354. package/src/components/pagination/Pagination.tsx +0 -199
  355. package/src/components/pagination/index.ts +0 -2
  356. package/src/components/pagination/meta.ts +0 -10
  357. package/src/components/rating/Rating.tsx +0 -42
  358. package/src/components/rating/index.ts +0 -2
  359. package/src/components/rating/meta.ts +0 -10
  360. package/src/components/rating/resolveRatingSegments.test.ts +0 -60
  361. package/src/components/rating/resolveRatingSegments.ts +0 -34
  362. package/src/components/rating/types.ts +0 -37
  363. package/src/components/search-bar/index.ts +0 -2
  364. package/src/components/search-bar/meta.ts +0 -10
  365. package/src/components/search-bar/types.ts +0 -14
  366. package/src/components/tabs/Tabs.tsx +0 -129
  367. package/src/components/tabs/index.ts +0 -2
  368. package/src/components/tabs/meta.ts +0 -10
  369. package/src/components/tabs/types.ts +0 -25
  370. package/src/components/toolbar/Toolbar.tsx +0 -48
  371. package/src/components/toolbar/ToolbarAction.tsx +0 -28
  372. package/src/components/toolbar/index.ts +0 -3
  373. package/src/components/toolbar/meta.ts +0 -19
  374. package/src/components/toolbar/types.ts +0 -21
@@ -0,0 +1,70 @@
1
+ import type { RoleSemantics, SurfaceTheme } from '@ankhorage/surface';
2
+
3
+ import { Inline } from '../../../../foundation';
4
+ import type { ZoraColor } from '../../../../internal/recipes';
5
+ import { resolveIconSize } from '../../../../internal/recipes';
6
+ import { useZoraTheme } from '../../../../theme/useZoraTheme';
7
+ import { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';
8
+ import type { RatingProps } from '../../../../types/rating';
9
+ import { Icon } from '../../../icon/public';
10
+ import { resolveRatingSegments } from '../../utils/resolveRatingSegments';
11
+
12
+ /*** Displays a read-only star rating with optional half steps. */
13
+ export const Rating = withZoraThemeScope(RatingInner);
14
+
15
+ /*** Resolves rating visuals from the active ZORA theme. */
16
+ function RatingInner({
17
+ themeId: _themeId,
18
+ mode: _mode,
19
+ interactionPolicy: _interactionPolicy,
20
+ testID,
21
+ value,
22
+ max = 5,
23
+ color = 'warning',
24
+ size = 'm',
25
+ }: RatingProps) {
26
+ const { theme } = useZoraTheme();
27
+ const role = resolveRatingRole(theme, color);
28
+ const segments = resolveRatingSegments({ value, max });
29
+ const iconSize = resolveIconSize(size);
30
+
31
+ return (
32
+ <Inline align="center" gap="xxs" testID={testID} wrap="nowrap">
33
+ {segments.map((segment, index) => {
34
+ const name =
35
+ segment === 'full' ? 'star' : segment === 'half' ? 'star-half' : 'star-outline';
36
+ const segmentColor = segment === 'empty' ? theme.semantics.content.muted : role.base;
37
+ return (
38
+ <Icon key={`${index}-${segment}`} color={segmentColor} name={name} size={iconSize} />
39
+ );
40
+ })}
41
+ </Inline>
42
+ );
43
+ }
44
+
45
+ /*** Resolves the semantic theme role for a ZORA rating color. */
46
+ function resolveRatingRole(theme: SurfaceTheme, color: ZoraColor): RoleSemantics {
47
+ switch (color) {
48
+ case 'secondary':
49
+ return theme.semantics.secondary;
50
+ case 'tertiary':
51
+ return theme.semantics.accent;
52
+ case 'quaternary':
53
+ return theme.semantics.highlight;
54
+ case 'error':
55
+ return theme.semantics.error;
56
+ case 'info':
57
+ return theme.semantics.info;
58
+ case 'primary':
59
+ return theme.semantics.action.primary;
60
+ case 'danger':
61
+ return theme.semantics.action.danger;
62
+ case 'success':
63
+ return theme.semantics.success;
64
+ case 'warning':
65
+ return theme.semantics.warning;
66
+ case 'neutral':
67
+ default:
68
+ return theme.semantics.action.neutral;
69
+ }
70
+ }
@@ -0,0 +1,2 @@
1
+ export type { RatingProps } from '../../types/rating';
2
+ export { Rating } from './adapters/inbound/Rating';
@@ -0,0 +1,44 @@
1
+ import type { ZoraComponentMeta } from '../../metadata/types';
2
+
3
+ export const ratingMeta = {
4
+ name: 'Rating',
5
+ category: 'component',
6
+ directManifestNode: true,
7
+ allowedChildren: [],
8
+ description: 'Displays a read-only star-based rating value.',
9
+ blueprint: { label: 'Rating', defaultProps: { color: 'warning', max: 5, size: 'm', value: 4.5 } },
10
+ bindings: {
11
+ props: {
12
+ value: {
13
+ label: 'Value',
14
+ description: 'Current rating value.',
15
+ value: { type: 'number' },
16
+ acceptsFallback: true,
17
+ acceptsTransforms: true,
18
+ },
19
+ },
20
+ },
21
+ props: {
22
+ value: { type: 'number', category: 'Data', label: 'Value' },
23
+ max: { type: 'number', category: 'Data', label: 'Maximum', default: 5 },
24
+ color: {
25
+ type: 'enum',
26
+ category: 'Style',
27
+ label: 'Color',
28
+ enum: [
29
+ 'neutral',
30
+ 'primary',
31
+ 'secondary',
32
+ 'tertiary',
33
+ 'quaternary',
34
+ 'success',
35
+ 'warning',
36
+ 'danger',
37
+ 'error',
38
+ 'info',
39
+ ],
40
+ default: 'warning',
41
+ },
42
+ size: { type: 'enum', category: 'Style', label: 'Size', enum: ['s', 'm', 'l'], default: 'm' },
43
+ },
44
+ } as const satisfies ZoraComponentMeta;
@@ -0,0 +1,20 @@
1
+ import { describe, expect, it } from 'bun:test';
2
+
3
+ import { resolveRatingSegments } from './resolveRatingSegments';
4
+
5
+ describe('resolveRatingSegments', () => {
6
+ it('supports full and half values', () => {
7
+ expect(resolveRatingSegments({ max: 5, value: 4.5 })).toEqual([
8
+ 'full',
9
+ 'full',
10
+ 'full',
11
+ 'full',
12
+ 'half',
13
+ ]);
14
+ });
15
+
16
+ it('clamps values to the rating range', () => {
17
+ expect(resolveRatingSegments({ max: 3, value: -1 })).toEqual(['empty', 'empty', 'empty']);
18
+ expect(resolveRatingSegments({ max: 2, value: 4 })).toEqual(['full', 'full']);
19
+ });
20
+ });
@@ -0,0 +1,19 @@
1
+ export type RatingSegment = 'empty' | 'full' | 'half';
2
+
3
+ /*** Resolves a numeric rating into full, half, and empty visual segments. */
4
+ export function resolveRatingSegments({ value, max }: ResolveRatingSegmentsInput): RatingSegment[] {
5
+ const normalizedMax = Math.max(0, Math.trunc(Number.isFinite(max) ? max : 0));
6
+ const normalizedValue = Math.min(Math.max(Number.isFinite(value) ? value : 0, 0), normalizedMax);
7
+
8
+ return Array.from({ length: normalizedMax }, (_, index) => {
9
+ const remaining = normalizedValue - index;
10
+ if (remaining >= 1) return 'full';
11
+ if (remaining >= 0.5) return 'half';
12
+ return 'empty';
13
+ });
14
+ }
15
+
16
+ interface ResolveRatingSegmentsInput {
17
+ value: number;
18
+ max: number;
19
+ }
@@ -0,0 +1,26 @@
1
+ import { Tab as SurfaceTab } from '@ankhorage/surface';
2
+ import React from 'react';
3
+
4
+ import { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';
5
+ import type { TabProps } from '../../../../types/tabs';
6
+ import { TabsInteractionPolicyContext } from '../../composition/TabsInteractionPolicyContext';
7
+
8
+ /*** Renders one labeled selectable tab backed by Surface accessibility semantics. */
9
+ export const Tab = withZoraThemeScope(TabInner);
10
+
11
+ /*** Resolves inherited interaction policy before delegating tab behavior to Surface. */
12
+ function TabInner({
13
+ themeId: _themeId,
14
+ mode: _mode,
15
+ interactionPolicy,
16
+ label,
17
+ ...props
18
+ }: TabProps) {
19
+ const inheritedInteractionPolicy = React.use(TabsInteractionPolicyContext);
20
+
21
+ return (
22
+ <SurfaceTab {...props} interactionPolicy={interactionPolicy ?? inheritedInteractionPolicy}>
23
+ {label}
24
+ </SurfaceTab>
25
+ );
26
+ }
@@ -0,0 +1,18 @@
1
+ import { TabList as SurfaceTabList } from '@ankhorage/surface';
2
+
3
+ import { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';
4
+ import type { TabListProps } from '../../../../types/tabs';
5
+
6
+ /*** Renders the accessible list of tabs for a Tabs composition. */
7
+ export const TabList = withZoraThemeScope(TabListInner);
8
+
9
+ /*** Delegates tablist semantics and keyboard navigation to Surface. */
10
+ function TabListInner({
11
+ themeId: _themeId,
12
+ mode: _mode,
13
+ interactionPolicy: _interactionPolicy,
14
+ children,
15
+ testID,
16
+ }: TabListProps) {
17
+ return <SurfaceTabList testID={testID}>{children}</SurfaceTabList>;
18
+ }
@@ -0,0 +1,23 @@
1
+ import { TabPanel as SurfaceTabPanel } from '@ankhorage/surface';
2
+
3
+ import { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';
4
+ import type { TabPanelProps } from '../../../../types/tabs';
5
+
6
+ /*** Renders content associated with one selected Tab. */
7
+ export const TabPanel = withZoraThemeScope(TabPanelInner);
8
+
9
+ /*** Delegates tabpanel visibility and accessibility linkage to Surface. */
10
+ function TabPanelInner({
11
+ themeId: _themeId,
12
+ mode: _mode,
13
+ interactionPolicy: _interactionPolicy,
14
+ children,
15
+ value,
16
+ testID,
17
+ }: TabPanelProps) {
18
+ return (
19
+ <SurfaceTabPanel testID={testID} value={value}>
20
+ {children}
21
+ </SurfaceTabPanel>
22
+ );
23
+ }
@@ -0,0 +1,23 @@
1
+ import { Tabs as SurfaceTabs } from '@ankhorage/surface';
2
+
3
+ import { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';
4
+ import type { TabsProps } from '../../../../types/tabs';
5
+ import { TabsInteractionPolicyContext } from '../../composition/TabsInteractionPolicyContext';
6
+
7
+ /*** Provides accessible tab state and interaction policy through the Surface Tabs primitive. */
8
+ export const Tabs = withZoraThemeScope(TabsInner);
9
+
10
+ /*** Connects ZORA tab composition to the Surface tab state owner. */
11
+ function TabsInner({
12
+ themeId: _themeId,
13
+ mode: _mode,
14
+ interactionPolicy = 'enabled',
15
+ children,
16
+ ...props
17
+ }: TabsProps) {
18
+ return (
19
+ <TabsInteractionPolicyContext value={interactionPolicy}>
20
+ <SurfaceTabs {...props}>{children}</SurfaceTabs>
21
+ </TabsInteractionPolicyContext>
22
+ );
23
+ }
@@ -0,0 +1,4 @@
1
+ import type { InteractionPolicy } from '@ankhorage/surface';
2
+ import { createContext } from 'react';
3
+
4
+ export const TabsInteractionPolicyContext = createContext<InteractionPolicy>('enabled');
@@ -0,0 +1,5 @@
1
+ export type { TabListProps, TabPanelProps, TabProps, TabsProps } from '../../types/tabs';
2
+ export { Tab } from './adapters/inbound/Tab';
3
+ export { TabList } from './adapters/inbound/TabList';
4
+ export { TabPanel } from './adapters/inbound/TabPanel';
5
+ export { Tabs } from './adapters/inbound/Tabs';
@@ -0,0 +1,10 @@
1
+ import type { ZoraComponentMeta } from '../../metadata/types';
2
+
3
+ export const tabListMeta = {
4
+ name: 'TabList',
5
+ category: 'component',
6
+ directManifestNode: true,
7
+ allowedChildren: ['Tab'],
8
+ description: 'Accessible list of selectable tabs.',
9
+ props: {},
10
+ } as const satisfies ZoraComponentMeta;
@@ -0,0 +1,15 @@
1
+ import type { ZoraComponentMeta } from '../../metadata/types';
2
+
3
+ export const tabMeta = {
4
+ name: 'Tab',
5
+ category: 'component',
6
+ directManifestNode: true,
7
+ allowedChildren: [],
8
+ description: 'One labeled selectable tab within a TabList.',
9
+ blueprint: { label: 'Tab', defaultProps: { label: 'Tab', value: 'tab' } },
10
+ props: {
11
+ value: { type: 'string', category: 'State', label: 'Value' },
12
+ label: { type: 'string', category: 'Content', label: 'Label' },
13
+ disabled: { type: 'boolean', category: 'State', label: 'Disabled' },
14
+ },
15
+ } as const satisfies ZoraComponentMeta;
@@ -0,0 +1,13 @@
1
+ import { CONTAINER_ALLOWED_CHILDREN } from '../../metadata/allowedChildren';
2
+ import type { ZoraComponentMeta } from '../../metadata/types';
3
+
4
+ export const tabPanelMeta = {
5
+ name: 'TabPanel',
6
+ category: 'component',
7
+ directManifestNode: true,
8
+ allowedChildren: [...CONTAINER_ALLOWED_CHILDREN],
9
+ description: 'Content panel associated with one Tab value.',
10
+ props: {
11
+ value: { type: 'string', category: 'State', label: 'Value' },
12
+ },
13
+ } as const satisfies ZoraComponentMeta;
@@ -0,0 +1,41 @@
1
+ import type { ZoraComponentMeta } from '../../metadata/types';
2
+
3
+ export const tabsMeta = {
4
+ name: 'Tabs',
5
+ category: 'component',
6
+ directManifestNode: true,
7
+ allowedChildren: ['TabList', 'TabPanel'],
8
+ description: 'Owns the active value for an accessible tablist and its panels.',
9
+ events: {
10
+ valueChange: {
11
+ label: 'Value change',
12
+ eventType: 'tabs.valueChange',
13
+ payloadFields: [{ path: 'value', type: 'string', label: 'Value' }],
14
+ },
15
+ },
16
+ bindings: {
17
+ props: {
18
+ value: {
19
+ label: 'Value',
20
+ description: 'Current active tab value.',
21
+ value: { type: 'string' },
22
+ acceptsFallback: true,
23
+ acceptsTransforms: true,
24
+ },
25
+ },
26
+ events: {
27
+ valueChange: {
28
+ label: 'Value change',
29
+ description: 'Runs when the active tab changes.',
30
+ payload: {
31
+ eventType: 'tabs.valueChange',
32
+ fields: [{ path: 'value', type: 'string', label: 'Value' }],
33
+ },
34
+ },
35
+ },
36
+ },
37
+ props: {
38
+ value: { type: 'string', category: 'State', label: 'Value' },
39
+ defaultValue: { type: 'string', category: 'State', label: 'Default value' },
40
+ },
41
+ } as const satisfies ZoraComponentMeta;
@@ -0,0 +1,31 @@
1
+ import { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';
2
+ import type { ToolbarProps } from '../../../../types/toolbar';
3
+ import { Card } from '../../../card/public';
4
+ import { Stack } from '../../../layout/public';
5
+
6
+ /*** Renders a visible horizontal group of contextual actions and controls. */
7
+ export const Toolbar = withZoraThemeScope(ToolbarInner);
8
+
9
+ /*** Applies toolbar presentation without owning page placement. */
10
+ function ToolbarInner({
11
+ themeId: _themeId,
12
+ mode: _mode,
13
+ interactionPolicy,
14
+ children,
15
+ floating = false,
16
+ compact = true,
17
+ testID,
18
+ }: ToolbarProps) {
19
+ return (
20
+ <Card
21
+ compact={compact}
22
+ interactionPolicy={interactionPolicy}
23
+ tone={floating ? 'default' : 'subtle'}
24
+ testID={testID}
25
+ >
26
+ <Stack align="center" direction="row" gap="s">
27
+ {children}
28
+ </Stack>
29
+ </Card>
30
+ );
31
+ }
@@ -0,0 +1,2 @@
1
+ export type { ToolbarProps } from '../../types/toolbar';
2
+ export { Toolbar } from './adapters/inbound/Toolbar';
@@ -0,0 +1,24 @@
1
+ import type { ZoraComponentMeta } from '../../metadata/types';
2
+
3
+ export const toolbarMeta = {
4
+ name: 'Toolbar',
5
+ category: 'component',
6
+ directManifestNode: true,
7
+ allowedChildren: [
8
+ 'Button',
9
+ 'IconButton',
10
+ 'SearchInput',
11
+ 'Select',
12
+ 'Chip',
13
+ 'ChipGroup',
14
+ 'Text',
15
+ 'Divider',
16
+ ],
17
+ description:
18
+ 'Visible horizontal group of contextual actions and controls; layout owns placement.',
19
+ blueprint: { label: 'Toolbar', defaultProps: { compact: true, floating: false } },
20
+ props: {
21
+ floating: { type: 'boolean', category: 'Style', label: 'Floating', default: false },
22
+ compact: { type: 'boolean', category: 'Layout', label: 'Compact', default: true },
23
+ },
24
+ } as const satisfies ZoraComponentMeta;
@@ -3,14 +3,8 @@ import { join } from 'node:path';
3
3
 
4
4
  import { describe, expect, it } from 'bun:test';
5
5
 
6
- const textSource = readFileSync(
7
- join(import.meta.dir, '../features/typography/adapters/inbound/Text.tsx'),
8
- 'utf8',
9
- );
10
- const headingSource = readFileSync(
11
- join(import.meta.dir, '../features/typography/adapters/inbound/Heading.tsx'),
12
- 'utf8',
13
- );
6
+ const textSource = readFileSync(join(import.meta.dir, 'adapters/inbound/Text.tsx'), 'utf8');
7
+ const headingSource = readFileSync(join(import.meta.dir, 'adapters/inbound/Heading.tsx'), 'utf8');
14
8
 
15
9
  describe('content fallback ownership', () => {
16
10
  it('keeps Text free of translation context coupling', () => {
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
 
3
- import { Modal } from '../../../../components/modal';
4
3
  import { withZoraThemeScope } from '../../../../theme/withZoraThemeScope';
5
4
  import type { UploadAsset, UploaderProps, UploadType } from '../../../../types/upload';
6
5
  import { Button } from '../../../button/public';
6
+ import { Dialog } from '../../../dialog/public';
7
7
  import { FormField } from '../../../form/public';
8
8
  import { Icon } from '../../../icon/public';
9
9
  import { Image } from '../../../image/public';
@@ -288,7 +288,7 @@ function UploaderInner({
288
288
  </FormField>
289
289
 
290
290
  {canPreviewImage ? (
291
- <Modal
291
+ <Dialog
292
292
  closeOnBackdrop
293
293
  interactionPolicy={interactionPolicy}
294
294
  onDismiss={() => setPreviewOpen(false)}
@@ -308,7 +308,7 @@ function UploaderInner({
308
308
  </Button>
309
309
  </Stack>
310
310
  </Stack>
311
- </Modal>
311
+ </Dialog>
312
312
  ) : null}
313
313
  </>
314
314
  );
package/src/index.ts CHANGED
@@ -1,15 +1,3 @@
1
- export type { ModalProps } from './components/modal';
2
- export { Modal } from './components/modal';
3
- export type { PaginationProps } from './components/pagination';
4
- export { Pagination } from './components/pagination';
5
- export type { RatingProps } from './components/rating';
6
- export { Rating } from './components/rating';
7
- export type { SearchBarProps } from './components/search-bar';
8
- export { SearchBar } from './components/search-bar';
9
- export type { TabItem, TabsProps, TabsVariant } from './components/tabs';
10
- export { Tabs } from './components/tabs';
11
- export type { ToolbarActionProps, ToolbarPosition, ToolbarProps } from './components/toolbar';
12
- export { Toolbar, ToolbarAction } from './components/toolbar';
13
1
  export { ZORA_CORE_PLUGIN } from './corePlugin';
14
2
  export { ZORA_CORE_PLUGIN_METADATA } from './corePluginMetadata';
15
3
  export {
@@ -116,6 +104,7 @@ export {
116
104
  type DatePickerProps,
117
105
  type DatePickerValue,
118
106
  } from './features/date-picker/public';
107
+ export { Dialog, type DialogProps } from './features/dialog/public';
119
108
  export {
120
109
  EmptyState,
121
110
  type EmptyStateAction,
@@ -161,6 +150,7 @@ export {
161
150
  type RadioGroupProps,
162
151
  type RadioProps,
163
152
  } from './features/form/radio/public';
153
+ export { SearchInput, type SearchInputProps } from './features/form/search-input/public';
164
154
  export { Select, type SelectOption, type SelectProps } from './features/form/select/public';
165
155
  export {
166
156
  TextInput,
@@ -220,6 +210,7 @@ export type {
220
210
  } from './features/list/public';
221
211
  export { FlatList, SectionList } from './features/list/public';
222
212
  export { MissingElement, type MissingElementProps } from './features/missing-element/public';
213
+ export { Pagination, type PaginationProps } from './features/pagination/public';
223
214
  export {
224
215
  PopoverMenu,
225
216
  type PopoverMenuAction,
@@ -232,6 +223,7 @@ export {
232
223
  ProgressRing,
233
224
  type ProgressRingProps,
234
225
  } from './features/progress/public';
226
+ export { Rating, type RatingProps } from './features/rating/public';
235
227
  export {
236
228
  Skeleton,
237
229
  SkeletonCard,
@@ -247,6 +239,16 @@ export {
247
239
  } from './features/skeleton/public';
248
240
  export type { SurfaceProps, SurfaceVariant } from './features/surface/public';
249
241
  export { Surface } from './features/surface/public';
242
+ export {
243
+ Tab,
244
+ TabList,
245
+ type TabListProps,
246
+ TabPanel,
247
+ type TabPanelProps,
248
+ type TabProps,
249
+ Tabs,
250
+ type TabsProps,
251
+ } from './features/tabs/public';
250
252
  export {
251
253
  TimePicker,
252
254
  type TimePickerProps,
@@ -260,6 +262,7 @@ export type {
260
262
  ToastStatus,
261
263
  } from './features/toast/public';
262
264
  export { Toast, ToastProvider, useToast } from './features/toast/public';
265
+ export { Toolbar, type ToolbarProps } from './features/toolbar/public';
263
266
  export type {
264
267
  HeadingAlign,
265
268
  HeadingColor,
@@ -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',
@@ -106,6 +106,7 @@ describe('ZORA_COMPONENT_META invariants', () => {
106
106
  'Checkbox',
107
107
  'CheckboxGroup',
108
108
  'RadioGroup',
109
+ 'SearchInput',
109
110
  'Select',
110
111
  'TextInput',
111
112
  ]);
@@ -152,6 +153,10 @@ describe('ZORA_COMPONENT_META invariants', () => {
152
153
  'ChipGroup',
153
154
  'DataTable',
154
155
  'DatePicker',
156
+ 'Pagination',
157
+ 'Rating',
158
+ 'SearchInput',
159
+ 'Tab',
155
160
  'Skeleton',
156
161
  'SkeletonCard',
157
162
  'SkeletonList',
@@ -191,6 +196,7 @@ describe('ZORA_COMPONENT_META invariants', () => {
191
196
  const expectedContainerNodes = new Set([
192
197
  'Accordion',
193
198
  'AccordionItem',
199
+ 'Dialog',
194
200
  'Form',
195
201
  'Gradient',
196
202
  'Surface',
@@ -209,12 +215,15 @@ describe('ZORA_COMPONENT_META invariants', () => {
209
215
  'PostCard',
210
216
  'MessageBubble',
211
217
  'Box',
212
-
213
218
  'Stack',
214
219
  'Grid',
215
220
  'Container',
216
221
  'BarcodeScannerView',
217
222
  'ContentRail',
223
+ 'Tabs',
224
+ 'TabList',
225
+ 'TabPanel',
226
+ 'Toolbar',
218
227
  ]);
219
228
 
220
229
  for (const [key, meta] of Object.entries(ZORA_COMPONENT_META)) {
@@ -239,6 +248,14 @@ describe('ZORA_COMPONENT_META invariants', () => {
239
248
  }
240
249
  });
241
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
+
242
259
  test('Accordion constrains authored items to its canonical hierarchy', () => {
243
260
  expect(ZORA_COMPONENT_META.Accordion.directManifestNode).toBe(true);
244
261
  expect(ZORA_COMPONENT_META.Accordion.allowedChildren).toEqual(['AccordionItem']);