@ankhorage/zora 22.1.4 → 23.1.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 (312) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/constants/authoring.d.ts +4 -4
  4. package/dist/constants/authoring.d.ts.map +1 -1
  5. package/dist/constants/authoring.js +2 -0
  6. package/dist/constants/authoring.js.map +1 -1
  7. package/dist/features/accordion/accordionItemMeta.d.ts +1 -1
  8. package/dist/features/auth/adapters/inbound/AuthScreen.d.ts +10 -0
  9. package/dist/features/auth/adapters/inbound/AuthScreen.d.ts.map +1 -0
  10. package/dist/features/auth/adapters/inbound/AuthScreen.js +67 -0
  11. package/dist/features/auth/adapters/inbound/AuthScreen.js.map +1 -0
  12. package/dist/features/auth/authScreenMeta.d.ts +204 -0
  13. package/dist/features/auth/authScreenMeta.d.ts.map +1 -0
  14. package/dist/features/auth/authScreenMeta.js +112 -0
  15. package/dist/features/auth/authScreenMeta.js.map +1 -0
  16. package/dist/features/auth/public.d.ts +2 -1
  17. package/dist/features/auth/public.d.ts.map +1 -1
  18. package/dist/features/auth/public.js +1 -0
  19. package/dist/features/auth/public.js.map +1 -1
  20. package/dist/features/bottom-sheet/bottomSheetMeta.d.ts +1 -1
  21. package/dist/features/card/cardMeta.d.ts +1 -1
  22. package/dist/features/card/mediaCardMeta.d.ts +1 -1
  23. package/dist/features/card/postCardMeta.d.ts +1 -1
  24. package/dist/features/chat/messageBubbleMeta.d.ts +1 -1
  25. package/dist/features/dialog/dialogMeta.d.ts +2 -2
  26. package/dist/features/gradient/gradientMeta.d.ts +1 -1
  27. package/dist/features/graph-view/adapters/inbound/web-artifact/GraphNodeOverlay.d.ts +2 -1
  28. package/dist/features/graph-view/adapters/inbound/web-artifact/GraphNodeOverlay.d.ts.map +1 -1
  29. package/dist/features/graph-view/adapters/inbound/web-artifact/GraphNodeOverlay.js +2 -1
  30. package/dist/features/graph-view/adapters/inbound/web-artifact/GraphNodeOverlay.js.map +1 -1
  31. package/dist/features/graph-view/adapters/inbound/web-artifact/GraphView.d.ts.map +1 -1
  32. package/dist/features/graph-view/adapters/inbound/web-artifact/GraphView.js +1 -1
  33. package/dist/features/graph-view/adapters/inbound/web-artifact/GraphView.js.map +1 -1
  34. package/dist/features/graph-view/adapters/inbound/web-artifact/bindGraphEvents.d.ts.map +1 -1
  35. package/dist/features/graph-view/adapters/inbound/web-artifact/bindGraphEvents.js +12 -4
  36. package/dist/features/graph-view/adapters/inbound/web-artifact/bindGraphEvents.js.map +1 -1
  37. package/dist/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.d.ts +2 -1
  38. package/dist/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.d.ts.map +1 -1
  39. package/dist/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.js +3 -3
  40. package/dist/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.js.map +1 -1
  41. package/dist/features/keyboard-avoiding-view/keyboardAvoidingViewMeta.d.ts +1 -1
  42. package/dist/features/layout/gridMeta.d.ts +1 -1
  43. package/dist/features/layout/screenMeta.d.ts +1 -1
  44. package/dist/features/layout/scrollViewMeta.d.ts +1 -1
  45. package/dist/features/layout/viewMeta.d.ts +1 -1
  46. package/dist/features/list/flatListMeta.d.ts +1 -1
  47. package/dist/features/list/sectionListMeta.d.ts +1 -1
  48. package/dist/features/reader/meta.d.ts +2 -2
  49. package/dist/features/registry/ZORA_COMPONENT_REGISTRY.d.ts.map +1 -1
  50. package/dist/features/registry/ZORA_COMPONENT_REGISTRY.js +2 -1
  51. package/dist/features/registry/ZORA_COMPONENT_REGISTRY.js.map +1 -1
  52. package/dist/features/registry/bindableComponentMeta.d.ts +2 -2
  53. package/dist/features/registry/componentMeta.d.ts.map +1 -1
  54. package/dist/features/registry/componentMeta.js +2 -0
  55. package/dist/features/registry/componentMeta.js.map +1 -1
  56. package/dist/features/scanner/meta.d.ts +2 -2
  57. package/dist/features/section/screenSectionMeta.d.ts +1 -1
  58. package/dist/features/selection/adapters/inbound/SelectableItem.d.ts +1 -5
  59. package/dist/features/selection/adapters/inbound/SelectableItem.d.ts.map +1 -1
  60. package/dist/features/selection/adapters/inbound/SelectableItem.js +30 -54
  61. package/dist/features/selection/adapters/inbound/SelectableItem.js.map +1 -1
  62. package/dist/features/selection/adapters/inbound/SelectionProvider.d.ts +2 -6
  63. package/dist/features/selection/adapters/inbound/SelectionProvider.d.ts.map +1 -1
  64. package/dist/features/selection/adapters/inbound/SelectionProvider.js +36 -32
  65. package/dist/features/selection/adapters/inbound/SelectionProvider.js.map +1 -1
  66. package/dist/features/selection/application/resolveSelectionEventIntent.d.ts +5 -0
  67. package/dist/features/selection/application/resolveSelectionEventIntent.d.ts.map +1 -0
  68. package/dist/features/selection/application/resolveSelectionEventIntent.js +49 -0
  69. package/dist/features/selection/application/resolveSelectionEventIntent.js.map +1 -0
  70. package/dist/features/selection/public.d.ts +2 -0
  71. package/dist/features/selection/public.d.ts.map +1 -1
  72. package/dist/features/selection/public.js +1 -0
  73. package/dist/features/selection/public.js.map +1 -1
  74. package/dist/features/selection/utils/resolveSelectionNextIds.d.ts +4 -5
  75. package/dist/features/selection/utils/resolveSelectionNextIds.d.ts.map +1 -1
  76. package/dist/features/selection/utils/resolveSelectionNextIds.js +6 -13
  77. package/dist/features/selection/utils/resolveSelectionNextIds.js.map +1 -1
  78. package/dist/features/surface/surfaceMeta.d.ts +1 -1
  79. package/dist/features/tabs/tabPanelMeta.d.ts +1 -1
  80. package/dist/features/tree-view/adapters/inbound/TreeItem.d.ts +3 -2
  81. package/dist/features/tree-view/adapters/inbound/TreeItem.d.ts.map +1 -1
  82. package/dist/features/tree-view/adapters/inbound/TreeItem.js +11 -4
  83. package/dist/features/tree-view/adapters/inbound/TreeItem.js.map +1 -1
  84. package/dist/features/tree-view/adapters/inbound/TreeView.d.ts.map +1 -1
  85. package/dist/features/tree-view/adapters/inbound/TreeView.js +4 -5
  86. package/dist/features/tree-view/adapters/inbound/TreeView.js.map +1 -1
  87. package/dist/features/tree-view/adapters/inbound/web-artifact/TreeItemRow.d.ts +3 -2
  88. package/dist/features/tree-view/adapters/inbound/web-artifact/TreeItemRow.d.ts.map +1 -1
  89. package/dist/features/tree-view/adapters/inbound/web-artifact/TreeItemRow.js +17 -9
  90. package/dist/features/tree-view/adapters/inbound/web-artifact/TreeItemRow.js.map +1 -1
  91. package/dist/features/tree-view/adapters/inbound/web-artifact/TreeView.d.ts +4 -3
  92. package/dist/features/tree-view/adapters/inbound/web-artifact/TreeView.d.ts.map +1 -1
  93. package/dist/features/tree-view/adapters/inbound/web-artifact/TreeView.js +8 -8
  94. package/dist/features/tree-view/adapters/inbound/web-artifact/TreeView.js.map +1 -1
  95. package/dist/index.d.ts +3 -3
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +1 -1
  98. package/dist/index.js.map +1 -1
  99. package/dist/types/auth.d.ts +19 -0
  100. package/dist/types/auth.d.ts.map +1 -1
  101. package/dist/types/auth.js.map +1 -1
  102. package/dist/types/graph-view.d.ts +2 -0
  103. package/dist/types/graph-view.d.ts.map +1 -1
  104. package/dist/types/graph-view.js.map +1 -1
  105. package/dist/types/selection.d.ts +3 -0
  106. package/dist/types/selection.d.ts.map +1 -1
  107. package/dist/types/selection.js.map +1 -1
  108. package/dist/types/tree-view.d.ts +3 -2
  109. package/dist/types/tree-view.d.ts.map +1 -1
  110. package/dist/types/tree-view.js.map +1 -1
  111. package/package.json +2 -2
  112. package/src/constants/authoring.ts +2 -0
  113. package/src/features/auth/adapters/inbound/AuthScreen.tsx +202 -0
  114. package/src/features/auth/authScreenMeta.ts +114 -0
  115. package/src/features/auth/public.test.ts +6 -0
  116. package/src/features/auth/public.ts +3 -0
  117. package/src/features/graph-view/adapters/inbound/web-artifact/GraphNodeOverlay.tsx +10 -2
  118. package/src/features/graph-view/adapters/inbound/web-artifact/GraphView.tsx +3 -1
  119. package/src/features/graph-view/adapters/inbound/web-artifact/bindGraphEvents.ts +22 -5
  120. package/src/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.test.ts +21 -0
  121. package/src/features/graph-view/adapters/inbound/web-artifact/createGraphRuntime.ts +10 -3
  122. package/src/features/registry/ZORA_COMPONENT_REGISTRY.ts +2 -0
  123. package/src/features/registry/componentMeta.test.ts +1 -0
  124. package/src/features/registry/componentMeta.ts +2 -0
  125. package/src/features/selection/adapters/inbound/SelectableItem.tsx +33 -50
  126. package/src/features/selection/adapters/inbound/SelectionProvider.tsx +34 -35
  127. package/src/features/selection/application/resolveSelectionEventIntent.test.ts +35 -0
  128. package/src/features/selection/application/resolveSelectionEventIntent.ts +55 -0
  129. package/src/features/selection/public.ts +2 -0
  130. package/src/features/selection/utils/resolveSelectionNextIds.test.ts +1 -14
  131. package/src/features/selection/utils/resolveSelectionNextIds.ts +6 -28
  132. package/src/features/tree-view/adapters/inbound/TreeItem.tsx +25 -9
  133. package/src/features/tree-view/adapters/inbound/TreeView.tsx +4 -6
  134. package/src/features/tree-view/adapters/inbound/web-artifact/TreeItemRow.tsx +26 -8
  135. package/src/features/tree-view/adapters/inbound/web-artifact/TreeView.test.tsx +77 -7
  136. package/src/features/tree-view/adapters/inbound/web-artifact/TreeView.tsx +11 -9
  137. package/src/index.ts +4 -0
  138. package/src/showcaseCoverage.test.ts +1 -0
  139. package/src/types/auth.ts +21 -0
  140. package/src/types/graph-view.ts +2 -0
  141. package/src/types/selection.ts +3 -0
  142. package/src/types/tree-view.ts +3 -2
  143. package/web-dist/chunks/{Accordion-j2aw3d5b.js → Accordion-01e56hb5.js} +1 -1
  144. package/web-dist/chunks/{Accordion-784f23tq.js → Accordion-14p7zanv.js} +1 -1
  145. package/web-dist/chunks/{Accordion-cecn51ry.js → Accordion-17pht8jd.js} +3 -3
  146. package/web-dist/chunks/{Accordion-555gnfmw.js → Accordion-2ak69ntj.js} +11 -11
  147. package/web-dist/chunks/{Accordion-ycmg06sq.js → Accordion-46vwm9xv.js} +3 -3
  148. package/web-dist/chunks/{Accordion-nn38n7q4.js → Accordion-4r9a9qny.js} +5 -5
  149. package/web-dist/chunks/Accordion-5df6cgyf.js +55 -0
  150. package/web-dist/chunks/{Accordion-v1dtv6v0.js → Accordion-5pskbqss.js} +7 -7
  151. package/web-dist/chunks/{Accordion-sr353w95.js → Accordion-78mj69zp.js} +2 -2
  152. package/web-dist/chunks/{Accordion-emczc5rg.js → Accordion-8xdet564.js} +16 -16
  153. package/web-dist/chunks/{Accordion-ajydqhjp.js → Accordion-8xk2zmr5.js} +2 -2
  154. package/web-dist/chunks/{Accordion-8af800ts.js → Accordion-9n7h9hag.js} +8 -8
  155. package/web-dist/chunks/{Accordion-73m7z73v.js → Accordion-b9myvfep.js} +5 -5
  156. package/web-dist/chunks/{Accordion-vmz8y01b.js → Accordion-bmp1ab7m.js} +496 -303
  157. package/web-dist/chunks/{Accordion-s1jhv8gk.js → Accordion-cqgbx1pw.js} +4 -4
  158. package/web-dist/chunks/{Accordion-2fm2tm5r.js → Accordion-cydzrpk2.js} +2 -2
  159. package/web-dist/chunks/{Accordion-07rdw2vh.js → Accordion-ejns5mga.js} +5 -5
  160. package/web-dist/chunks/{Accordion-yz7b7njb.js → Accordion-ejy7gr0a.js} +6 -6
  161. package/web-dist/chunks/{Accordion-mpnb4qqw.js → Accordion-f2mfgcx6.js} +15 -15
  162. package/web-dist/chunks/{Accordion-bsy1jrak.js → Accordion-ff583p4q.js} +2 -2
  163. package/web-dist/chunks/{Accordion-jj3bg8c1.js → Accordion-jksn8783.js} +6 -6
  164. package/web-dist/chunks/{Accordion-tj61sa5s.js → Accordion-jnwa02s7.js} +4 -4
  165. package/web-dist/chunks/{Accordion-rkv7jyaj.js → Accordion-kemavggr.js} +1 -1
  166. package/web-dist/chunks/{Accordion-mvfz28m8.js → Accordion-kmv2fp6m.js} +7 -7
  167. package/web-dist/chunks/{Accordion-jhwsvx3g.js → Accordion-kpnwdpb5.js} +1 -1
  168. package/web-dist/chunks/{Accordion-avmgvcef.js → Accordion-mm4kx13n.js} +10 -10
  169. package/web-dist/chunks/{Accordion-qvt6qdqm.js → Accordion-nggjwm07.js} +6 -6
  170. package/web-dist/chunks/{Accordion-yf6vseep.js → Accordion-q0st659f.js} +82 -89
  171. package/web-dist/chunks/{Accordion-zx0jc0kg.js → Accordion-qb8ppq9t.js} +5 -5
  172. package/web-dist/chunks/Accordion-r23sx4gf.js +34 -0
  173. package/web-dist/chunks/{Accordion-9rnepkvk.js → Accordion-rev0zb75.js} +6 -6
  174. package/web-dist/chunks/{Accordion-z585n0mr.js → Accordion-rjgdrn7y.js} +1 -1
  175. package/web-dist/chunks/{Accordion-pnvt10cv.js → Accordion-rnjt5z4y.js} +19 -19
  176. package/web-dist/chunks/{Accordion-45ej9brb.js → Accordion-tyqds4zr.js} +6 -6
  177. package/web-dist/chunks/{Accordion-8hhvtcxp.js → Accordion-v166qr59.js} +4 -4
  178. package/web-dist/chunks/{Accordion-1cgz6f8t.js → Accordion-x4rjd7yn.js} +1 -1
  179. package/web-dist/chunks/{Accordion-zf3kzvef.js → Accordion-xw1gkpfk.js} +6 -6
  180. package/web-dist/chunks/{Accordion-nc5gnvnb.js → Accordion-yms7x22j.js} +9 -9
  181. package/web-dist/chunks/{Accordion-b3qy1trj.js → Accordion-z1trs7s1.js} +26 -26
  182. package/web-dist/chunks/{Accordion-5qmfa7vr.js → Accordion-z8h1hn96.js} +5 -5
  183. package/web-dist/components/accordion/Accordion.js +5 -5
  184. package/web-dist/components/accordion-item/AccordionItem.js +5 -5
  185. package/web-dist/components/activity-indicator/ActivityIndicator.js +1 -1
  186. package/web-dist/components/app-bar/AppBar.js +9 -9
  187. package/web-dist/components/app-shell/AppShell.js +2 -2
  188. package/web-dist/components/auth-screen/AuthScreen.d.ts +9 -0
  189. package/web-dist/components/auth-screen/AuthScreen.js +43 -0
  190. package/web-dist/components/auth-screen/index.d.ts +1 -0
  191. package/web-dist/components/auth-screen/index.js +2 -0
  192. package/web-dist/components/avatar/Avatar.js +5 -5
  193. package/web-dist/components/avatar-group/AvatarGroup.js +5 -5
  194. package/web-dist/components/badge/Badge.js +3 -3
  195. package/web-dist/components/barcode-scanner-view/BarcodeScannerView.js +12 -12
  196. package/web-dist/components/bottom-sheet/BottomSheet.js +3 -3
  197. package/web-dist/components/bottom-sheet-flat-list/BottomSheetFlatList.js +3 -3
  198. package/web-dist/components/bottom-sheet-scroll-view/BottomSheetScrollView.js +3 -3
  199. package/web-dist/components/bottom-sheet-section-list/BottomSheetSectionList.js +3 -3
  200. package/web-dist/components/bottom-sheet-view/BottomSheetView.js +3 -3
  201. package/web-dist/components/bottom-sheet-virtualized-list/BottomSheetVirtualizedList.js +3 -3
  202. package/web-dist/components/breadcrumbs/Breadcrumbs.js +11 -11
  203. package/web-dist/components/button/Button.js +5 -5
  204. package/web-dist/components/button-group/ButtonGroup.js +5 -5
  205. package/web-dist/components/camera-permission-view/CameraPermissionView.js +12 -12
  206. package/web-dist/components/card/Card.js +11 -11
  207. package/web-dist/components/card-back/CardBack.js +2 -2
  208. package/web-dist/components/card-hand/CardHand.js +2 -2
  209. package/web-dist/components/chat-list-item/ChatListItem.js +9 -9
  210. package/web-dist/components/checkbox/Checkbox.js +6 -6
  211. package/web-dist/components/checkbox-group/CheckboxGroup.js +6 -6
  212. package/web-dist/components/chess-board/ChessBoard.js +2 -2
  213. package/web-dist/components/chip/Chip.js +5 -5
  214. package/web-dist/components/chip-group/ChipGroup.js +5 -5
  215. package/web-dist/components/collection-editor/CollectionEditor.js +13 -13
  216. package/web-dist/components/content-rail/ContentRail.js +8 -8
  217. package/web-dist/components/data-table/DataTable.js +22 -22
  218. package/web-dist/components/date-picker/DatePicker.js +15 -15
  219. package/web-dist/components/dialog/Dialog.js +5 -5
  220. package/web-dist/components/divider/Divider.js +2 -2
  221. package/web-dist/components/empty-state/EmptyState.js +12 -12
  222. package/web-dist/components/field/Field.js +7 -7
  223. package/web-dist/components/flat-list/FlatList.js +7 -7
  224. package/web-dist/components/forgot-password-form/ForgotPasswordForm.d.ts +1 -0
  225. package/web-dist/components/forgot-password-form/ForgotPasswordForm.js +21 -16
  226. package/web-dist/components/form/Form.js +9 -9
  227. package/web-dist/components/form-actions/FormActions.js +9 -9
  228. package/web-dist/components/form-error/FormError.js +9 -9
  229. package/web-dist/components/game/Game.js +3 -3
  230. package/web-dist/components/game-entity/GameEntity.js +3 -3
  231. package/web-dist/components/game-field/GameField.js +3 -3
  232. package/web-dist/components/game-input-zone/GameInputZone.js +3 -3
  233. package/web-dist/components/game-measurement-probe/GameMeasurementProbe.js +3 -3
  234. package/web-dist/components/game-overlay/GameOverlay.js +3 -3
  235. package/web-dist/components/gradient/Gradient.js +3 -3
  236. package/web-dist/components/gradient-renderer-provider/GradientRendererProvider.js +3 -3
  237. package/web-dist/components/graph-view/GraphView.js +20 -11
  238. package/web-dist/components/graph-view/GraphView.types-0.d.ts +2 -0
  239. package/web-dist/components/grid/Grid.js +2 -2
  240. package/web-dist/components/heading/Heading.js +4 -4
  241. package/web-dist/components/hero/Hero.js +14 -14
  242. package/web-dist/components/icon/Icon.js +2 -2
  243. package/web-dist/components/icon-button/IconButton.js +5 -5
  244. package/web-dist/components/image/Image.js +4 -4
  245. package/web-dist/components/keyboard-avoiding-view/KeyboardAvoidingView.js +5 -32
  246. package/web-dist/components/list/List.js +7 -7
  247. package/web-dist/components/list-item/ListItem.js +7 -7
  248. package/web-dist/components/list-section/ListSection.js +7 -7
  249. package/web-dist/components/media-card/MediaCard.js +11 -11
  250. package/web-dist/components/message-bubble/MessageBubble.js +9 -9
  251. package/web-dist/components/metric-card/MetricCard.js +11 -11
  252. package/web-dist/components/missing-element/MissingElement.js +10 -10
  253. package/web-dist/components/o-auth-provider-button/OAuthProviderButton.d.ts +1 -0
  254. package/web-dist/components/o-auth-provider-button/OAuthProviderButton.js +21 -16
  255. package/web-dist/components/o-auth-provider-list/OAuthProviderList.d.ts +1 -0
  256. package/web-dist/components/o-auth-provider-list/OAuthProviderList.js +21 -16
  257. package/web-dist/components/opening-book/OpeningBook.js +2 -2
  258. package/web-dist/components/otp-form/OtpForm.d.ts +1 -0
  259. package/web-dist/components/otp-form/OtpForm.js +21 -16
  260. package/web-dist/components/pagination/Pagination.js +8 -8
  261. package/web-dist/components/palette-item/PaletteItem.js +13 -13
  262. package/web-dist/components/playing-card/PlayingCard.js +2 -2
  263. package/web-dist/components/poker-training-table/PokerTrainingTable.js +2 -2
  264. package/web-dist/components/popover-menu/PopoverMenu.js +6 -6
  265. package/web-dist/components/post-card/PostCard.js +11 -11
  266. package/web-dist/components/product-card/ProductCard.js +11 -11
  267. package/web-dist/components/progress/Progress.js +4 -4
  268. package/web-dist/components/progress-ring/ProgressRing.js +4 -4
  269. package/web-dist/components/radio/Radio.js +7 -7
  270. package/web-dist/components/radio-group/RadioGroup.js +7 -7
  271. package/web-dist/components/rating/Rating.js +3 -3
  272. package/web-dist/components/reader-surface/ReaderSurface.js +15 -15
  273. package/web-dist/components/scan-overlay/ScanOverlay.js +12 -12
  274. package/web-dist/components/screen/Screen.js +2 -2
  275. package/web-dist/components/screen-section/ScreenSection.js +4 -4
  276. package/web-dist/components/scroll-view/ScrollView.js +2 -2
  277. package/web-dist/components/search-input/SearchInput.js +6 -6
  278. package/web-dist/components/section-header/SectionHeader.js +4 -4
  279. package/web-dist/components/section-list/SectionList.js +7 -7
  280. package/web-dist/components/select/Select.js +7 -7
  281. package/web-dist/components/selectable-item/SelectableItem.js +1 -1
  282. package/web-dist/components/selection-provider/SelectionProvider.js +1 -1
  283. package/web-dist/components/sign-in-form/SignInForm.d.ts +1 -0
  284. package/web-dist/components/sign-in-form/SignInForm.js +21 -16
  285. package/web-dist/components/sign-up-form/SignUpForm.d.ts +1 -0
  286. package/web-dist/components/sign-up-form/SignUpForm.js +21 -16
  287. package/web-dist/components/skeleton/Skeleton.js +14 -14
  288. package/web-dist/components/skeleton-card/SkeletonCard.js +14 -14
  289. package/web-dist/components/skeleton-list/SkeletonList.js +14 -14
  290. package/web-dist/components/skeleton-text/SkeletonText.js +14 -14
  291. package/web-dist/components/surface/Surface.js +2 -2
  292. package/web-dist/components/switch/Switch.js +4 -4
  293. package/web-dist/components/tab/Tab.js +3 -3
  294. package/web-dist/components/tab-list/TabList.js +3 -3
  295. package/web-dist/components/tab-panel/TabPanel.js +3 -3
  296. package/web-dist/components/tabletop-table/TabletopTable.js +2 -2
  297. package/web-dist/components/tabs/Tabs.js +3 -3
  298. package/web-dist/components/text/Text.js +4 -4
  299. package/web-dist/components/text-input/TextInput.js +6 -6
  300. package/web-dist/components/time-picker/TimePicker.js +13 -13
  301. package/web-dist/components/timeline/Timeline.js +7 -7
  302. package/web-dist/components/toast/Toast.js +4 -4
  303. package/web-dist/components/toast-provider/ToastProvider.js +4 -4
  304. package/web-dist/components/toolbar/Toolbar.js +11 -11
  305. package/web-dist/components/tree-item/TreeItem.js +43 -24
  306. package/web-dist/components/tree-view/TreeView.d.ts +4 -3
  307. package/web-dist/components/tree-view/TreeView.js +25 -12
  308. package/web-dist/components/uploader/Uploader.js +19 -19
  309. package/web-dist/components/view/View.js +2 -2
  310. package/web-dist/manifest.json +753 -684
  311. package/web-dist/runtime/ZoraProvider.js +6 -6
  312. /package/web-dist/chunks/{Accordion-k3bc4kad.js → Accordion-13y3zx87.js} +0 -0
@@ -1,5 +1,7 @@
1
+ import type { SelectionIntent } from '@ankhorage/utility/selection';
1
2
  import React from 'react';
2
3
 
4
+ import { resolveSelectionEventIntent } from '../../../../selection/application/resolveSelectionEventIntent';
3
5
  import { TreeExpansionIndicator } from './TreeExpansionIndicator';
4
6
  import type { TreeItemNode, TreeItemRenderProps } from './TreeView';
5
7
 
@@ -8,7 +10,7 @@ export function TreeItemRow<TId extends string>(props: TreeItemRowProps<TId>) {
8
10
  const { node } = props;
9
11
  const hasChildren = node.children !== undefined && node.children.length > 0;
10
12
  const expanded = props.expandedIds.includes(node.id);
11
- const selected = props.selectedId === node.id;
13
+ const selected = props.selectedIds.includes(node.id);
12
14
  const content = props.renderItem?.({
13
15
  node,
14
16
  depth: props.depth,
@@ -23,7 +25,8 @@ export function TreeItemRow<TId extends string>(props: TreeItemRowProps<TId>) {
23
25
  aria-disabled={node.disabled === true ? true : undefined}
24
26
  aria-expanded={hasChildren ? expanded : undefined}
25
27
  aria-selected={selected}
26
- onClick={() => selectNode(props)}
28
+ onPointerUp={(event) => selectNode(event, props)}
29
+ onClick={(event) => selectNodeFromSyntheticClick(event, props)}
27
30
  onKeyDown={(event) => selectNodeFromKeyboard(event, props)}
28
31
  role="treeitem"
29
32
  tabIndex={node.disabled || props.onSelect === undefined ? undefined : 0}
@@ -49,9 +52,9 @@ interface TreeItemRowProps<TId extends string> {
49
52
  readonly node: TreeItemNode<TId>;
50
53
  readonly depth: number;
51
54
  readonly expansionIndicator: 'chevron' | 'folder';
52
- readonly selectedId?: TId;
55
+ readonly selectedIds: readonly TId[];
53
56
  readonly expandedIds: readonly TId[];
54
- readonly onSelect?: (id: TId) => void;
57
+ readonly onSelect?: (id: TId, intent: SelectionIntent) => void;
55
58
  readonly onToggleExpand: (id: TId) => void;
56
59
  readonly renderItem?: (props: TreeItemRenderProps<TId>) => React.ReactNode;
57
60
  }
@@ -77,12 +80,13 @@ function TreeItemDefaultContent<TId extends string>({
77
80
  );
78
81
  }
79
82
 
80
- /*** Isolate optional row actions so their pointer events do not select the tree item. */
83
+ /*** Isolate optional row actions so their pointer and keyboard events do not select the tree item. */
81
84
  function TreeItemActions({ actions }: { readonly actions?: React.ReactNode }) {
82
85
  if (actions === undefined) return null;
83
86
  return (
84
87
  <span
85
88
  onClick={(event) => event.stopPropagation()}
89
+ onPointerUp={(event) => event.stopPropagation()}
86
90
  onKeyDown={(event) => event.stopPropagation()}
87
91
  style={INLINE_STYLE}
88
92
  >
@@ -118,6 +122,7 @@ function TreeItemExpander<TId extends string>(props: {
118
122
  aria-label={props.expanded ? 'Collapse' : 'Expand'}
119
123
  disabled={props.disabled}
120
124
  onKeyDown={(event) => event.stopPropagation()}
125
+ onPointerUp={(event) => event.stopPropagation()}
121
126
  onClick={(event) => {
122
127
  event.stopPropagation();
123
128
  props.onToggleExpand(props.nodeId);
@@ -142,8 +147,21 @@ function TreeItemChildren<TId extends string>(props: TreeItemRowProps<TId>) {
142
147
  }
143
148
 
144
149
  /*** Select a row from pointer activation when it is interactive. */
145
- function selectNode<TId extends string>(props: TreeItemRowProps<TId>) {
146
- if (!props.node.disabled) props.onSelect?.(props.node.id);
150
+ function selectNode<TId extends string>(
151
+ event: React.PointerEvent<HTMLDivElement>,
152
+ props: TreeItemRowProps<TId>,
153
+ ) {
154
+ if (props.node.disabled) return;
155
+ props.onSelect?.(props.node.id, resolveSelectionEventIntent(event, 'pointer'));
156
+ }
157
+
158
+ /*** Select a row from assistive or synthetic click activation without duplicating pointer clicks. */
159
+ function selectNodeFromSyntheticClick<TId extends string>(
160
+ event: React.MouseEvent<HTMLDivElement>,
161
+ props: TreeItemRowProps<TId>,
162
+ ) {
163
+ if (event.detail !== 0 || props.node.disabled) return;
164
+ props.onSelect?.(props.node.id, resolveSelectionEventIntent(event, 'keyboard'));
147
165
  }
148
166
 
149
167
  /*** Select a row from keyboard activation while preserving native navigation keys. */
@@ -153,7 +171,7 @@ function selectNodeFromKeyboard<TId extends string>(
153
171
  ) {
154
172
  if (props.node.disabled || (event.key !== 'Enter' && event.key !== ' ')) return;
155
173
  event.preventDefault();
156
- props.onSelect?.(props.node.id);
174
+ props.onSelect?.(props.node.id, resolveSelectionEventIntent(event, 'keyboard'));
157
175
  }
158
176
 
159
177
  /*** Resolve browser row presentation from the interaction state. */
@@ -21,7 +21,7 @@ test('expands from the leading control without selecting the row, including keyb
21
21
  });
22
22
  const host = document.createElement('div');
23
23
  document.body.appendChild(host);
24
- const selected: string[] = [];
24
+ const selected: (readonly [string, string])[] = [];
25
25
  const expanded: (readonly string[])[] = [];
26
26
  const root = createRoot(host);
27
27
  const interactAsync = (action: () => void) => act(() => Promise.resolve().then(action));
@@ -30,7 +30,7 @@ test('expands from the leading control without selecting the row, including keyb
30
30
  root.render(
31
31
  <TreeView
32
32
  nodes={[{ id: 'src', label: 'source', children: [{ id: 'leaf', label: 'leaf' }] }]}
33
- onSelect={(id) => selected.push(id)}
33
+ onSelect={(id, intent) => selected.push([id, intent])}
34
34
  onExpandedChange={(ids) => expanded.push(ids)}
35
35
  />,
36
36
  ),
@@ -49,9 +49,11 @@ test('expands from the leading control without selecting the row, including keyb
49
49
  expect(expanded).toEqual([['src']]);
50
50
  expect(host.querySelector('[role="group"]')?.textContent).toContain('leaf');
51
51
  await interactAsync(() => {
52
- row.dispatchEvent(new browserWindow.MouseEvent('click', { bubbles: true }));
52
+ row.dispatchEvent(
53
+ new browserWindow.PointerEvent('pointerup', { bubbles: true, pointerType: 'mouse' }),
54
+ );
53
55
  });
54
- expect(selected).toEqual(['src']);
56
+ expect(selected).toEqual([['src', 'replace']]);
55
57
  expect(expanded).toEqual([['src']]);
56
58
  await interactAsync(() => button.click());
57
59
  expect(expanded).toEqual([['src'], []]);
@@ -66,6 +68,74 @@ test('expands from the leading control without selecting the row, including keyb
66
68
  }
67
69
  });
68
70
 
71
+ test('reports toggle intent for desktop modifiers and touch pointer activation', async () => {
72
+ const browserWindow = new Window();
73
+ const keys = ['window', 'document', 'Node', 'navigator', 'IS_REACT_ACT_ENVIRONMENT'] as const;
74
+ const previous = keys.map(
75
+ (key) => [key, Object.getOwnPropertyDescriptor(globalThis, key)] as const,
76
+ );
77
+ Object.assign(globalThis, {
78
+ IS_REACT_ACT_ENVIRONMENT: true,
79
+ window: browserWindow,
80
+ document: browserWindow.document,
81
+ Node: browserWindow.Node,
82
+ navigator: browserWindow.navigator,
83
+ });
84
+ const host = document.createElement('div');
85
+ document.body.appendChild(host);
86
+ const selected: string[] = [];
87
+ const root = createRoot(host);
88
+ const interactAsync = (action: () => void) => act(() => Promise.resolve().then(action));
89
+ try {
90
+ await interactAsync(() =>
91
+ root.render(
92
+ <TreeView
93
+ nodes={[{ id: 'a', label: 'A' }]}
94
+ onSelect={(_id, intent) => selected.push(intent)}
95
+ />,
96
+ ),
97
+ );
98
+ const row = host.querySelector('[role="treeitem"]');
99
+ if (!row) throw new Error('Missing tree row');
100
+
101
+ await interactAsync(() =>
102
+ row.dispatchEvent(
103
+ new browserWindow.PointerEvent('pointerup', {
104
+ bubbles: true,
105
+ pointerType: 'mouse',
106
+ metaKey: true,
107
+ }),
108
+ ),
109
+ );
110
+ await interactAsync(() =>
111
+ row.dispatchEvent(
112
+ new browserWindow.PointerEvent('pointerup', {
113
+ bubbles: true,
114
+ pointerType: 'mouse',
115
+ ctrlKey: true,
116
+ }),
117
+ ),
118
+ );
119
+ await interactAsync(() =>
120
+ row.dispatchEvent(
121
+ new browserWindow.PointerEvent('pointerup', {
122
+ bubbles: true,
123
+ pointerType: 'touch',
124
+ }),
125
+ ),
126
+ );
127
+
128
+ expect(selected).toEqual(['toggle', 'toggle', 'toggle']);
129
+ } finally {
130
+ await interactAsync(() => root.unmount());
131
+ browserWindow.close();
132
+ for (const [key, descriptor] of previous) {
133
+ if (descriptor) Object.defineProperty(globalThis, key, descriptor);
134
+ else Reflect.deleteProperty(globalThis, key);
135
+ }
136
+ }
137
+ });
138
+
69
139
  test('reveals a controlled selection when expansion makes the row renderable', async () => {
70
140
  const browserWindow = new Window();
71
141
  const keys = ['window', 'document', 'Node', 'navigator', 'IS_REACT_ACT_ENVIRONMENT'] as const;
@@ -88,12 +158,12 @@ test('reveals a controlled selection when expansion makes the row renderable', a
88
158
  const nodes = [{ id: 'src', label: 'source', children: [{ id: 'leaf', label: 'leaf' }] }];
89
159
  try {
90
160
  await interactAsync(() =>
91
- root.render(<TreeView expandedIds={[]} nodes={nodes} selectedId="leaf" />),
161
+ root.render(<TreeView expandedIds={[]} nodes={nodes} selectedIds={['leaf']} />),
92
162
  );
93
163
  expect(reveals).toEqual([]);
94
164
 
95
165
  await interactAsync(() =>
96
- root.render(<TreeView expandedIds={['src']} nodes={nodes} selectedId="leaf" />),
166
+ root.render(<TreeView expandedIds={['src']} nodes={nodes} selectedIds={['leaf']} />),
97
167
  );
98
168
  expect(reveals).toEqual([{ block: 'nearest', inline: 'nearest' }]);
99
169
  } finally {
@@ -119,7 +189,7 @@ test('renders a standalone web tree without a ZORA or React Native provider', ()
119
189
  children: [{ id: 'index', label: 'index.ts' }],
120
190
  },
121
191
  ]}
122
- selectedId="index"
192
+ selectedIds={['index']}
123
193
  />,
124
194
  );
125
195
 
@@ -1,3 +1,4 @@
1
+ import type { SelectionIntent } from '@ankhorage/utility/selection';
1
2
  import React from 'react';
2
3
 
3
4
  import { toggleExpandedIds } from '../../../utils/toggleExpandedIds';
@@ -23,10 +24,10 @@ export interface TreeItemRenderProps<TId extends string = string> {
23
24
 
24
25
  export interface TreeViewProps<TId extends string = string> {
25
26
  readonly nodes: readonly TreeItemNode<TId>[];
26
- readonly selectedId?: TId;
27
+ readonly selectedIds?: readonly TId[];
27
28
  readonly expandedIds?: readonly TId[];
28
29
  readonly defaultExpandedIds?: readonly TId[];
29
- readonly onSelect?: (id: TId) => void;
30
+ readonly onSelect?: (id: TId, intent: SelectionIntent) => void;
30
31
  readonly onExpandedChange?: (ids: readonly TId[]) => void;
31
32
  readonly renderItem?: (props: TreeItemRenderProps<TId>) => React.ReactNode;
32
33
  readonly expansionIndicator?: 'chevron' | 'folder';
@@ -42,7 +43,7 @@ export interface TreeViewProps<TId extends string = string> {
42
43
  */
43
44
  export function TreeView<TId extends string = string>({
44
45
  nodes,
45
- selectedId,
46
+ selectedIds = [],
46
47
  expandedIds: controlledExpandedIds,
47
48
  defaultExpandedIds,
48
49
  onSelect,
@@ -67,12 +68,13 @@ export function TreeView<TId extends string = string>({
67
68
  },
68
69
  [expandedIds, isControlled, onExpandedChange],
69
70
  );
70
- useSelectedTreeItemReveal(rootRef, selectedId, expandedIds);
71
+ useSelectedTreeItemReveal(rootRef, selectedIds, expandedIds);
71
72
 
72
73
  return (
73
74
  <div
74
75
  ref={rootRef}
75
76
  aria-label={ariaLabel}
77
+ aria-multiselectable="true"
76
78
  className={className}
77
79
  role="tree"
78
80
  style={{ ...TREE_STYLE, ...style }}
@@ -87,26 +89,26 @@ export function TreeView<TId extends string = string>({
87
89
  onSelect={onSelect}
88
90
  onToggleExpand={handleToggleExpand}
89
91
  renderItem={renderItem}
90
- selectedId={selectedId}
92
+ selectedIds={selectedIds}
91
93
  />
92
94
  ))}
93
95
  </div>
94
96
  );
95
97
  }
96
98
 
97
- /*** Reveal a controlled selection after it is rendered without changing expansion ownership. */
99
+ /*** Reveal the first controlled selection after it is rendered without changing expansion ownership. */
98
100
  function useSelectedTreeItemReveal<TId extends string>(
99
101
  rootRef: React.RefObject<HTMLDivElement | null>,
100
- selectedId: TId | undefined,
102
+ selectedIds: readonly TId[],
101
103
  expandedIds: readonly TId[],
102
104
  ) {
103
105
  React.useEffect(() => {
104
- if (selectedId === undefined) return;
106
+ if (selectedIds.length === 0) return;
105
107
  const root = rootRef.current as unknown as TreeViewQueryableElement | null;
106
108
  root
107
109
  ?.querySelector('[role="treeitem"][aria-selected="true"]')
108
110
  ?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
109
- }, [expandedIds, rootRef, selectedId]);
111
+ }, [expandedIds, rootRef, selectedIds]);
110
112
  }
111
113
 
112
114
  const TREE_STYLE = {
package/src/index.ts CHANGED
@@ -16,6 +16,8 @@ export { AppBar } from './features/app-bar/public';
16
16
  export type {
17
17
  AuthFormBaseProps,
18
18
  AuthIdentifierKind,
19
+ AuthScreenMode,
20
+ AuthScreenProps,
19
21
  ForgotPasswordFormProps,
20
22
  ForgotPasswordFormValues,
21
23
  OAuthProviderButtonProps,
@@ -32,6 +34,7 @@ export type {
32
34
  SignUpFormValues,
33
35
  } from './features/auth/public';
34
36
  export {
37
+ AuthScreen,
35
38
  DEFAULT_OAUTH_PROVIDER_ICONS,
36
39
  ForgotPasswordForm,
37
40
  OAuthProviderButton,
@@ -368,6 +371,7 @@ export {
368
371
  export type {
369
372
  SelectableItemProps,
370
373
  SelectableItemState,
374
+ SelectionIntent,
371
375
  SelectionMode,
372
376
  SelectionProviderProps,
373
377
  SelectionTrigger,
@@ -63,6 +63,7 @@ const REQUIRED_SHOWCASE_COVERAGE = {
63
63
  features: ['Uploader', 'BottomSheet', 'FlatList', 'SectionList'],
64
64
  layouts: ['AppShell', 'Screen', 'ScreenSection', 'ScrollView'],
65
65
  patterns: [
66
+ 'AuthScreen',
66
67
  'ForgotPasswordForm',
67
68
  'OtpForm',
68
69
  'SignInForm',
package/src/types/auth.ts CHANGED
@@ -7,6 +7,27 @@ import type { FormFieldConfig, FormValues } from './form';
7
7
 
8
8
  export type AuthIdentifierKind = 'email' | 'phone' | 'username';
9
9
 
10
+ export type AuthScreenMode = 'signIn' | 'signUp';
11
+
12
+ export interface AuthScreenProps extends ZoraBaseProps {
13
+ authMode: AuthScreenMode;
14
+ title?: React.ReactNode;
15
+ description?: React.ReactNode;
16
+ info?: React.ReactNode;
17
+ error?: React.ReactNode;
18
+ loading?: boolean;
19
+ disabled?: boolean;
20
+ identifiers?: readonly AuthIdentifierKind[];
21
+ identifierLabel?: React.ReactNode;
22
+ signUpFields?: readonly SignUpFormField[];
23
+ oauthProviders?: readonly OAuthProviderItem[];
24
+ oauthSeparatorLabel?: React.ReactNode;
25
+ onModeChange?: (mode: AuthScreenMode) => void | Promise<void>;
26
+ onOAuthProviderPress?: (providerId: string) => void | Promise<void>;
27
+ onSignInSubmit?: (values: SignInFormValues) => void | Promise<void>;
28
+ onSignUpSubmit?: (values: SignUpFormValues) => void | Promise<void>;
29
+ }
30
+
10
31
  export interface AuthFormBaseProps extends ZoraBaseProps {
11
32
  loading?: boolean;
12
33
  disabled?: boolean;
@@ -1,3 +1,4 @@
1
+ import type { SelectionIntent } from '@ankhorage/utility/selection';
1
2
  import type React from 'react';
2
3
 
3
4
  export type GraphViewLayoutName = 'breadthfirst' | 'circle' | 'concentric' | 'elk' | 'grid';
@@ -79,6 +80,7 @@ export interface GraphViewFitOptions {
79
80
  export interface GraphViewElementEvent {
80
81
  readonly id: string;
81
82
  readonly type: GraphViewElementEventType;
83
+ readonly selectionIntent?: SelectionIntent;
82
84
  }
83
85
 
84
86
  export interface GraphViewController {
@@ -1,4 +1,5 @@
1
1
  import type { InteractionPolicy } from '@ankhorage/surface';
2
+ import type { SelectionIntent } from '@ankhorage/utility/selection';
2
3
  import type React from 'react';
3
4
 
4
5
  export type SelectionMode = 'single' | 'multi';
@@ -22,6 +23,7 @@ export interface UseSelectionResult {
22
23
  selectedCount: number;
23
24
  hasSelection: boolean;
24
25
  isSelected: (id: string) => boolean;
26
+ activate: (id: string, intent: SelectionIntent) => void;
25
27
  select: (id: string) => void;
26
28
  toggle: (id: string) => void;
27
29
  clear: () => void;
@@ -32,6 +34,7 @@ export interface SelectableItemState {
32
34
  selected: boolean;
33
35
  disabled: boolean;
34
36
  mode: SelectionMode;
37
+ activate: (intent: SelectionIntent) => void;
35
38
  select: () => void;
36
39
  toggle: () => void;
37
40
  clear: () => void;
@@ -1,4 +1,5 @@
1
1
  import type { ButtonIconSpec } from '@ankhorage/surface';
2
+ import type { SelectionIntent } from '@ankhorage/utility/selection';
2
3
  import type { ReactNode } from 'react';
3
4
 
4
5
  import type { ZoraBaseProps } from './base';
@@ -23,10 +24,10 @@ export interface TreeItemRenderProps<TId extends string = string> {
23
24
 
24
25
  export interface TreeViewProps<TId extends string = string> extends ZoraBaseProps {
25
26
  nodes: readonly TreeItemNode<TId>[];
26
- selectedId?: TId;
27
+ selectedIds?: readonly TId[];
27
28
  expandedIds?: readonly TId[];
28
29
  defaultExpandedIds?: readonly TId[];
29
- onSelect?: (id: TId) => void;
30
+ onSelect?: (id: TId, intent: SelectionIntent) => void;
30
31
  onExpandedChange?: (ids: readonly TId[]) => void;
31
32
  renderItem?: (props: TreeItemRenderProps<TId>) => ReactNode;
32
33
  expansionIndicator?: 'chevron' | 'folder';
@@ -13,7 +13,7 @@ import {
13
13
  } from "./Accordion-7hn324r1.js";
14
14
  import {
15
15
  withZoraThemeScope
16
- } from "./Accordion-k3bc4kad.js";
16
+ } from "./Accordion-13y3zx87.js";
17
17
  import {
18
18
  resolveSpacing,
19
19
  resolveViewStyles
@@ -4,7 +4,7 @@ import {
4
4
  } from "./Accordion-7hn324r1.js";
5
5
  import {
6
6
  withZoraThemeScope
7
- } from "./Accordion-k3bc4kad.js";
7
+ } from "./Accordion-13y3zx87.js";
8
8
  import {
9
9
  useZoraTheme2
10
10
  } from "./Accordion-7zfskq1s.js";
@@ -5,13 +5,13 @@ import {
5
5
  } from "./Accordion-7hn324r1.js";
6
6
  import {
7
7
  withZoraThemeScope
8
- } from "./Accordion-k3bc4kad.js";
8
+ } from "./Accordion-13y3zx87.js";
9
9
  import {
10
10
  Icon2
11
- } from "./Accordion-1cgz6f8t.js";
11
+ } from "./Accordion-x4rjd7yn.js";
12
12
  import {
13
13
  View2
14
- } from "./Accordion-j2aw3d5b.js";
14
+ } from "./Accordion-01e56hb5.js";
15
15
  import {
16
16
  useZoraTheme2
17
17
  } from "./Accordion-7zfskq1s.js";
@@ -4,22 +4,22 @@ import {
4
4
  } from "./Accordion-7hn324r1.js";
5
5
  import {
6
6
  Button2
7
- } from "./Accordion-nc5gnvnb.js";
7
+ } from "./Accordion-yms7x22j.js";
8
8
  import {
9
9
  withZoraThemeScope
10
- } from "./Accordion-k3bc4kad.js";
10
+ } from "./Accordion-13y3zx87.js";
11
11
  import {
12
12
  View2
13
- } from "./Accordion-j2aw3d5b.js";
13
+ } from "./Accordion-01e56hb5.js";
14
14
  import {
15
15
  Card2
16
- } from "./Accordion-b3qy1trj.js";
16
+ } from "./Accordion-z1trs7s1.js";
17
17
  import {
18
- Text2
19
- } from "./Accordion-ycmg06sq.js";
18
+ Text3
19
+ } from "./Accordion-46vwm9xv.js";
20
20
  import {
21
21
  Badge2
22
- } from "./Accordion-s1jhv8gk.js";
22
+ } from "./Accordion-cqgbx1pw.js";
23
23
  import {
24
24
  useZoraTheme2
25
25
  } from "./Accordion-7zfskq1s.js";
@@ -82,7 +82,7 @@ function CameraPermissionViewInner({
82
82
  children: /* @__PURE__ */ jsxs(View2, {
83
83
  gap: "m",
84
84
  children: [
85
- /* @__PURE__ */ jsxs(Text2, {
85
+ /* @__PURE__ */ jsxs(Text3, {
86
86
  emphasis: "muted",
87
87
  variant: "bodySmall",
88
88
  children: [
@@ -167,13 +167,13 @@ function ScanOverlayInner({
167
167
  /* @__PURE__ */ jsxs2(View2, {
168
168
  gap: "xs",
169
169
  children: [
170
- /* @__PURE__ */ jsx2(Text2, {
170
+ /* @__PURE__ */ jsx2(Text3, {
171
171
  align: "center",
172
172
  variant: "label",
173
173
  weight: "semiBold",
174
174
  children: title
175
175
  }),
176
- /* @__PURE__ */ jsx2(Text2, {
176
+ /* @__PURE__ */ jsx2(Text3, {
177
177
  align: "center",
178
178
  emphasis: "muted",
179
179
  variant: "bodySmall",
@@ -304,7 +304,7 @@ function BarcodeScannerViewInner({
304
304
  children ? /* @__PURE__ */ jsx3(View2, {
305
305
  children
306
306
  }) : null,
307
- /* @__PURE__ */ jsx3(Text2, {
307
+ /* @__PURE__ */ jsx3(Text3, {
308
308
  emphasis: "muted",
309
309
  variant: "caption",
310
310
  children: "Native scanning belongs to an app adapter such as expo-camera. ZORA owns this visible scanner surface."
@@ -8,7 +8,7 @@ import {
8
8
  } from "./Accordion-7hn324r1.js";
9
9
  import {
10
10
  withZoraThemeScope
11
- } from "./Accordion-k3bc4kad.js";
11
+ } from "./Accordion-13y3zx87.js";
12
12
  import {
13
13
  useZoraThemeRecipe,
14
14
  ZORA_COLORS,
@@ -577,7 +577,7 @@ var textThemeRecipeMeta = {
577
577
 
578
578
  // src/features/typography/adapters/inbound/Text.tsx
579
579
  import { jsx as jsx2 } from "react/jsx-runtime";
580
- var Text2 = withZoraThemeScope(TextInner);
580
+ var Text3 = withZoraThemeScope(TextInner);
581
581
  var textLayoutStyle = {
582
582
  flexShrink: 1,
583
583
  maxWidth: "100%",
@@ -656,4 +656,4 @@ function TextInner({
656
656
  children: content
657
657
  });
658
658
  }
659
- export { Heading2, Text2 };
659
+ export { Heading2, Text3 };
@@ -18,14 +18,14 @@ import {
18
18
  } from "./Accordion-13b6y37e.js";
19
19
  import {
20
20
  withZoraThemeScope
21
- } from "./Accordion-k3bc4kad.js";
21
+ } from "./Accordion-13y3zx87.js";
22
22
  import {
23
23
  View2
24
- } from "./Accordion-j2aw3d5b.js";
24
+ } from "./Accordion-01e56hb5.js";
25
25
  import {
26
26
  Heading2,
27
- Text2
28
- } from "./Accordion-ycmg06sq.js";
27
+ Text3
28
+ } from "./Accordion-46vwm9xv.js";
29
29
  import {
30
30
  resolveOverlayAnimation
31
31
  } from "./Accordion-2d8xn32m.js";
@@ -158,7 +158,7 @@ function DialogInner({
158
158
  level: 3,
159
159
  children: title
160
160
  }) : null,
161
- description !== undefined ? /* @__PURE__ */ jsx2(Text2, {
161
+ description !== undefined ? /* @__PURE__ */ jsx2(Text3, {
162
162
  emphasis: "muted",
163
163
  variant: "bodySmall",
164
164
  children: description
@@ -0,0 +1,55 @@
1
+ 'use client';
2
+ import {
3
+ isRecord
4
+ } from "./Accordion-59pa0677.js";
5
+ // node_modules/@ankhorage/utility/dist/interaction/resolveSelectionIntent.js
6
+ function resolveSelectionIntent(input) {
7
+ if (input.kind === "touch")
8
+ return "toggle";
9
+ return input.modifiers?.metaKey === true || input.modifiers?.ctrlKey === true ? "toggle" : "replace";
10
+ }
11
+ // src/features/selection/application/resolveSelectionEventIntent.ts
12
+ function resolveSelectionEventIntent(event, fallbackKind) {
13
+ const source = readEventSource(event);
14
+ const kind = isTouchActivation(source) ? "touch" : fallbackKind;
15
+ const sourceModifiers = readInteractionModifiers(source);
16
+ const wrapperModifiers = readInteractionModifiers(event);
17
+ const input = {
18
+ kind,
19
+ modifiers: {
20
+ altKey: sourceModifiers.altKey === true || wrapperModifiers.altKey === true,
21
+ ctrlKey: sourceModifiers.ctrlKey === true || wrapperModifiers.ctrlKey === true,
22
+ metaKey: sourceModifiers.metaKey === true || wrapperModifiers.metaKey === true,
23
+ shiftKey: sourceModifiers.shiftKey === true || wrapperModifiers.shiftKey === true
24
+ }
25
+ };
26
+ return resolveSelectionIntent(input);
27
+ }
28
+ function readEventSource(event) {
29
+ if (!isRecord(event))
30
+ return {};
31
+ if (isRecord(event.originalEvent))
32
+ return event.originalEvent;
33
+ if (isRecord(event.nativeEvent))
34
+ return event.nativeEvent;
35
+ return event;
36
+ }
37
+ function isTouchActivation(source) {
38
+ if (source.pointerType === "touch")
39
+ return true;
40
+ if (typeof source.type === "string" && source.type.startsWith("touch"))
41
+ return true;
42
+ return "touches" in source || "changedTouches" in source;
43
+ }
44
+ function readInteractionModifiers(value) {
45
+ if (!isRecord(value))
46
+ return {};
47
+ return {
48
+ altKey: value.altKey === true,
49
+ ctrlKey: value.ctrlKey === true,
50
+ metaKey: value.metaKey === true,
51
+ shiftKey: value.shiftKey === true
52
+ };
53
+ }
54
+
55
+ export { resolveSelectionEventIntent };
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
  import {
3
3
  Field3
4
- } from "./Accordion-zx0jc0kg.js";
4
+ } from "./Accordion-qb8ppq9t.js";
5
5
  import {
6
6
  withZoraThemeScope
7
- } from "./Accordion-k3bc4kad.js";
7
+ } from "./Accordion-13y3zx87.js";
8
8
  import {
9
9
  View2
10
- } from "./Accordion-j2aw3d5b.js";
10
+ } from "./Accordion-01e56hb5.js";
11
11
  import {
12
- Text2
13
- } from "./Accordion-ycmg06sq.js";
12
+ Text3
13
+ } from "./Accordion-46vwm9xv.js";
14
14
 
15
15
  // src/features/form/field/adapters/inbound/Field.tsx
16
16
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -30,12 +30,12 @@ function FieldInner({
30
30
  label: /* @__PURE__ */ jsxs(View2, {
31
31
  gap: "xs",
32
32
  children: [
33
- /* @__PURE__ */ jsx(Text2, {
33
+ /* @__PURE__ */ jsx(Text3, {
34
34
  variant: "label",
35
35
  weight: "semiBold",
36
36
  children: label
37
37
  }),
38
- description ? /* @__PURE__ */ jsx(Text2, {
38
+ description ? /* @__PURE__ */ jsx(Text3, {
39
39
  emphasis: "muted",
40
40
  variant: "bodySmall",
41
41
  children: description