@hzblj/kara-components 0.20.1 → 0.21.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 (480) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/lib/module/atoms/activity-indicator/activity-indicator.android.js +1 -1
  3. package/lib/module/atoms/activity-indicator/activity-indicator.android.js.map +1 -1
  4. package/lib/module/atoms/activity-indicator/activity-indicator.ios.js +1 -1
  5. package/lib/module/atoms/activity-indicator/activity-indicator.ios.js.map +1 -1
  6. package/lib/module/atoms/badge/badge.android.js +1 -1
  7. package/lib/module/atoms/badge/badge.android.js.map +1 -1
  8. package/lib/module/atoms/badge/badge.ios.js +1 -1
  9. package/lib/module/atoms/badge/badge.ios.js.map +1 -1
  10. package/lib/module/atoms/blur-view/blur-view.android.js +22 -1
  11. package/lib/module/atoms/blur-view/blur-view.android.js.map +1 -1
  12. package/lib/module/atoms/blur-view/blur-view.ios.js +20 -0
  13. package/lib/module/atoms/blur-view/blur-view.ios.js.map +1 -1
  14. package/lib/module/atoms/button/button.android.js +1 -1
  15. package/lib/module/atoms/button/button.android.js.map +1 -1
  16. package/lib/module/atoms/button/button.ios.js +1 -1
  17. package/lib/module/atoms/button/button.ios.js.map +1 -1
  18. package/lib/module/atoms/card/card.android.js +1 -1
  19. package/lib/module/atoms/card/card.android.js.map +1 -1
  20. package/lib/module/atoms/card/card.ios.js +1 -1
  21. package/lib/module/atoms/card/card.ios.js.map +1 -1
  22. package/lib/module/atoms/checkbox/checkbox.android.js +1 -1
  23. package/lib/module/atoms/checkbox/checkbox.android.js.map +1 -1
  24. package/lib/module/atoms/checkbox/checkbox.ios.js +1 -1
  25. package/lib/module/atoms/checkbox/checkbox.ios.js.map +1 -1
  26. package/lib/module/atoms/color-picker/color-picker.android.js +1 -1
  27. package/lib/module/atoms/color-picker/color-picker.android.js.map +1 -1
  28. package/lib/module/atoms/color-picker/color-picker.ios.js +1 -1
  29. package/lib/module/atoms/color-picker/color-picker.ios.js.map +1 -1
  30. package/lib/module/atoms/date-picker/date-picker.android.js +1 -1
  31. package/lib/module/atoms/date-picker/date-picker.android.js.map +1 -1
  32. package/lib/module/atoms/date-picker/date-picker.ios.js +1 -1
  33. package/lib/module/atoms/date-picker/date-picker.ios.js.map +1 -1
  34. package/lib/module/atoms/divider/divider.android.js +1 -1
  35. package/lib/module/atoms/divider/divider.android.js.map +1 -1
  36. package/lib/module/atoms/divider/divider.ios.js +1 -1
  37. package/lib/module/atoms/divider/divider.ios.js.map +1 -1
  38. package/lib/module/atoms/fab/fab.android.js +1 -1
  39. package/lib/module/atoms/fab/fab.android.js.map +1 -1
  40. package/lib/module/atoms/fab/fab.ios.js +1 -1
  41. package/lib/module/atoms/fab/fab.ios.js.map +1 -1
  42. package/lib/module/atoms/glyph/glyph-button.android.js.map +1 -0
  43. package/lib/module/atoms/glyph/glyph-button.ios.js.map +1 -0
  44. package/lib/module/atoms/glyph/glyph-button.types.js.map +1 -0
  45. package/lib/module/atoms/glyph/glyph.android.js.map +1 -0
  46. package/lib/module/atoms/glyph/glyph.ios.js.map +1 -0
  47. package/lib/module/atoms/glyph/glyph.types.js.map +1 -0
  48. package/lib/module/atoms/glyph/index.js.map +1 -0
  49. package/lib/module/atoms/glyph/rn-glyph.android.js.map +1 -0
  50. package/lib/module/atoms/glyph/rn-glyph.ios.js.map +1 -0
  51. package/lib/module/atoms/h-stack/h-stack.android.js +2 -2
  52. package/lib/module/atoms/h-stack/h-stack.android.js.map +1 -1
  53. package/lib/module/atoms/h-stack/h-stack.ios.js +2 -2
  54. package/lib/module/atoms/h-stack/h-stack.ios.js.map +1 -1
  55. package/lib/module/atoms/icon/icon.android.js +1 -1
  56. package/lib/module/atoms/icon/icon.android.js.map +1 -1
  57. package/lib/module/atoms/icon/icon.ios.js +1 -1
  58. package/lib/module/atoms/icon/icon.ios.js.map +1 -1
  59. package/lib/module/atoms/icon-button/icon-button.android.js +1 -1
  60. package/lib/module/atoms/icon-button/icon-button.android.js.map +1 -1
  61. package/lib/module/atoms/icon-button/icon-button.ios.js +1 -1
  62. package/lib/module/atoms/icon-button/icon-button.ios.js.map +1 -1
  63. package/lib/module/atoms/island/island.android.js +3 -1
  64. package/lib/module/atoms/island/island.android.js.map +1 -1
  65. package/lib/module/atoms/island/island.ios.js +3 -1
  66. package/lib/module/atoms/island/island.ios.js.map +1 -1
  67. package/lib/module/atoms/list/list.android.js +2 -2
  68. package/lib/module/atoms/list/list.android.js.map +1 -1
  69. package/lib/module/atoms/list/list.ios.js +1 -1
  70. package/lib/module/atoms/list/list.ios.js.map +1 -1
  71. package/lib/module/atoms/picker/picker.android.js +2 -2
  72. package/lib/module/atoms/picker/picker.android.js.map +1 -1
  73. package/lib/module/atoms/picker/picker.ios.js +1 -1
  74. package/lib/module/atoms/picker/picker.ios.js.map +1 -1
  75. package/lib/module/atoms/pressable/pressable.js +1 -1
  76. package/lib/module/atoms/pressable/pressable.js.map +1 -1
  77. package/lib/module/atoms/progress/progress.android.js +1 -1
  78. package/lib/module/atoms/progress/progress.android.js.map +1 -1
  79. package/lib/module/atoms/progress/progress.ios.js +1 -1
  80. package/lib/module/atoms/progress/progress.ios.js.map +1 -1
  81. package/lib/module/atoms/scroll-view/scroll-view.android.js +2 -2
  82. package/lib/module/atoms/scroll-view/scroll-view.android.js.map +1 -1
  83. package/lib/module/atoms/scroll-view/scroll-view.ios.js +1 -1
  84. package/lib/module/atoms/scroll-view/scroll-view.ios.js.map +1 -1
  85. package/lib/module/atoms/segmented-control/segmented-control.android.js +1 -1
  86. package/lib/module/atoms/segmented-control/segmented-control.android.js.map +1 -1
  87. package/lib/module/atoms/segmented-control/segmented-control.ios.js +1 -1
  88. package/lib/module/atoms/segmented-control/segmented-control.ios.js.map +1 -1
  89. package/lib/module/atoms/slider/slider.android.js +1 -1
  90. package/lib/module/atoms/slider/slider.android.js.map +1 -1
  91. package/lib/module/atoms/slider/slider.ios.js +1 -1
  92. package/lib/module/atoms/slider/slider.ios.js.map +1 -1
  93. package/lib/module/atoms/spacer/spacer.android.js +1 -1
  94. package/lib/module/atoms/spacer/spacer.android.js.map +1 -1
  95. package/lib/module/atoms/spacer/spacer.ios.js +1 -1
  96. package/lib/module/atoms/spacer/spacer.ios.js.map +1 -1
  97. package/lib/module/atoms/surface/surface.android.js +1 -1
  98. package/lib/module/atoms/surface/surface.android.js.map +1 -1
  99. package/lib/module/atoms/surface/surface.ios.js +1 -1
  100. package/lib/module/atoms/surface/surface.ios.js.map +1 -1
  101. package/lib/module/atoms/switch/switch.android.js +1 -1
  102. package/lib/module/atoms/switch/switch.android.js.map +1 -1
  103. package/lib/module/atoms/switch/switch.ios.js +1 -1
  104. package/lib/module/atoms/switch/switch.ios.js.map +1 -1
  105. package/lib/module/atoms/text/text.android.js +1 -1
  106. package/lib/module/atoms/text/text.android.js.map +1 -1
  107. package/lib/module/atoms/text/text.ios.js +1 -1
  108. package/lib/module/atoms/text/text.ios.js.map +1 -1
  109. package/lib/module/atoms/text-field/text-field.android.js +2 -2
  110. package/lib/module/atoms/text-field/text-field.android.js.map +1 -1
  111. package/lib/module/atoms/text-field/text-field.ios.js +1 -1
  112. package/lib/module/atoms/text-field/text-field.ios.js.map +1 -1
  113. package/lib/module/atoms/v-stack/v-stack.android.js +2 -2
  114. package/lib/module/atoms/v-stack/v-stack.android.js.map +1 -1
  115. package/lib/module/atoms/v-stack/v-stack.ios.js +2 -2
  116. package/lib/module/atoms/v-stack/v-stack.ios.js.map +1 -1
  117. package/lib/module/atoms/z-stack/z-stack.android.js +2 -2
  118. package/lib/module/atoms/z-stack/z-stack.android.js.map +1 -1
  119. package/lib/module/atoms/z-stack/z-stack.ios.js +2 -2
  120. package/lib/module/atoms/z-stack/z-stack.ios.js.map +1 -1
  121. package/lib/module/hooks/host-context.js.map +1 -0
  122. package/lib/module/hooks/use-refresh-state.js.map +1 -0
  123. package/lib/module/hooks/use-stack-modifiers.js.map +1 -0
  124. package/lib/module/molecules/collapsible/collapsible.android.js +2 -2
  125. package/lib/module/molecules/collapsible/collapsible.android.js.map +1 -1
  126. package/lib/module/molecules/collapsible/collapsible.ios.js +1 -1
  127. package/lib/module/molecules/collapsible/collapsible.ios.js.map +1 -1
  128. package/lib/module/molecules/labeled-content/labeled-content.js +1 -1
  129. package/lib/module/molecules/labeled-content/labeled-content.js.map +1 -1
  130. package/lib/module/molecules/list-item/list-item.js +1 -1
  131. package/lib/module/molecules/list-item/list-item.js.map +1 -1
  132. package/lib/module/molecules/navigation-bar/navigation-bar.constants.js +5 -0
  133. package/lib/module/molecules/navigation-bar/navigation-bar.constants.js.map +1 -0
  134. package/lib/module/molecules/navigation-bar/navigation-bar.ios.js +31 -4
  135. package/lib/module/molecules/navigation-bar/navigation-bar.ios.js.map +1 -1
  136. package/lib/module/molecules/pager/pager.android.js +1 -1
  137. package/lib/module/molecules/pager/pager.android.js.map +1 -1
  138. package/lib/module/molecules/pager/pager.ios.js +1 -1
  139. package/lib/module/molecules/pager/pager.ios.js.map +1 -1
  140. package/lib/module/molecules/radio-group/radio-group.android.js +1 -1
  141. package/lib/module/molecules/radio-group/radio-group.android.js.map +1 -1
  142. package/lib/module/molecules/radio-group/radio-group.ios.js +2 -2
  143. package/lib/module/molecules/radio-group/radio-group.ios.js.map +1 -1
  144. package/lib/module/molecules/rn-list-item/rn-list-item.js +1 -1
  145. package/lib/module/molecules/rn-list-item/rn-list-item.js.map +1 -1
  146. package/lib/module/molecules/rn-tooltip/rn-tooltip.android.js +1 -1
  147. package/lib/module/molecules/rn-tooltip/rn-tooltip.android.js.map +1 -1
  148. package/lib/module/molecules/search-bar/search-bar.js +1 -1
  149. package/lib/module/molecules/search-bar/search-bar.js.map +1 -1
  150. package/lib/module/molecules/stepper/stepper.android.js +2 -2
  151. package/lib/module/molecules/stepper/stepper.android.js.map +1 -1
  152. package/lib/module/molecules/stepper/stepper.ios.js +1 -1
  153. package/lib/module/molecules/stepper/stepper.ios.js.map +1 -1
  154. package/lib/module/molecules/tooltip/tooltip.android.js +1 -1
  155. package/lib/module/molecules/tooltip/tooltip.android.js.map +1 -1
  156. package/lib/module/molecules/tooltip/tooltip.ios.js +1 -1
  157. package/lib/module/molecules/tooltip/tooltip.ios.js.map +1 -1
  158. package/lib/module/organisms/action-sheet/action-sheet.android.js +1 -1
  159. package/lib/module/organisms/action-sheet/action-sheet.android.js.map +1 -1
  160. package/lib/module/organisms/action-sheet/action-sheet.ios.js +1 -1
  161. package/lib/module/organisms/action-sheet/action-sheet.ios.js.map +1 -1
  162. package/lib/module/organisms/alert/alert.android.js +1 -1
  163. package/lib/module/organisms/alert/alert.android.js.map +1 -1
  164. package/lib/module/organisms/alert/alert.ios.js +1 -1
  165. package/lib/module/organisms/alert/alert.ios.js.map +1 -1
  166. package/lib/module/organisms/context-menu/context-menu.android.js +2 -2
  167. package/lib/module/organisms/context-menu/context-menu.android.js.map +1 -1
  168. package/lib/module/organisms/fab-menu/fab-menu.android.js +2 -2
  169. package/lib/module/organisms/fab-menu/fab-menu.android.js.map +1 -1
  170. package/lib/module/organisms/fab-menu/fab-menu.ios.js +2 -2
  171. package/lib/module/organisms/fab-menu/fab-menu.ios.js.map +1 -1
  172. package/lib/module/organisms/form/form.android.js +1 -1
  173. package/lib/module/organisms/form/form.android.js.map +1 -1
  174. package/lib/module/organisms/form/form.ios.js +1 -1
  175. package/lib/module/organisms/form/form.ios.js.map +1 -1
  176. package/lib/module/organisms/header/header-color.js +8 -0
  177. package/lib/module/organisms/header/header-color.js.map +1 -0
  178. package/lib/module/organisms/header/header-inset.android.js +6 -0
  179. package/lib/module/organisms/header/header-inset.android.js.map +1 -0
  180. package/lib/module/organisms/header/header-inset.ios.js +19 -0
  181. package/lib/module/organisms/header/header-inset.ios.js.map +1 -0
  182. package/lib/module/organisms/header/header-options.android.js +180 -0
  183. package/lib/module/organisms/header/header-options.android.js.map +1 -0
  184. package/lib/module/organisms/header/header-options.ios.js +145 -0
  185. package/lib/module/organisms/header/header-options.ios.js.map +1 -0
  186. package/lib/module/organisms/header/header-options.types.js +4 -0
  187. package/lib/module/organisms/header/header-options.types.js.map +1 -0
  188. package/lib/module/organisms/header/header-search-accessory.android.js +5 -0
  189. package/lib/module/organisms/header/header-search-accessory.android.js.map +1 -0
  190. package/lib/module/organisms/header/header-search-accessory.ios.js +35 -0
  191. package/lib/module/organisms/header/header-search-accessory.ios.js.map +1 -0
  192. package/lib/module/organisms/header/header-search-accessory.types.js +4 -0
  193. package/lib/module/organisms/header/header-search-accessory.types.js.map +1 -0
  194. package/lib/module/organisms/header/header-search-input.android.js +80 -0
  195. package/lib/module/organisms/header/header-search-input.android.js.map +1 -0
  196. package/lib/module/organisms/header/header-search-input.ios.js +8 -0
  197. package/lib/module/organisms/header/header-search-input.ios.js.map +1 -0
  198. package/lib/module/organisms/header/header-search-input.types.js +4 -0
  199. package/lib/module/organisms/header/header-search-input.types.js.map +1 -0
  200. package/lib/module/organisms/header/header-search-scrim.js +62 -0
  201. package/lib/module/organisms/header/header-search-scrim.js.map +1 -0
  202. package/lib/module/organisms/header/header-title.js +230 -0
  203. package/lib/module/organisms/header/header-title.js.map +1 -0
  204. package/lib/module/organisms/header/header.types.js +4 -0
  205. package/lib/module/organisms/header/header.types.js.map +1 -0
  206. package/lib/module/organisms/header/hero-header-background.android.js +33 -0
  207. package/lib/module/organisms/header/hero-header-background.android.js.map +1 -0
  208. package/lib/module/organisms/header/hero-header-background.ios.js +40 -0
  209. package/lib/module/organisms/header/hero-header-background.ios.js.map +1 -0
  210. package/lib/module/organisms/header/hero-header-background.types.js +4 -0
  211. package/lib/module/organisms/header/hero-header-background.types.js.map +1 -0
  212. package/lib/module/organisms/header/index.js +13 -0
  213. package/lib/module/organisms/header/index.js.map +1 -0
  214. package/lib/module/organisms/header/native-subtitle.android.js +5 -0
  215. package/lib/module/organisms/header/native-subtitle.android.js.map +1 -0
  216. package/lib/module/organisms/header/native-subtitle.ios.js +22 -0
  217. package/lib/module/organisms/header/native-subtitle.ios.js.map +1 -0
  218. package/lib/module/organisms/header/native-subtitle.types.js +4 -0
  219. package/lib/module/organisms/header/native-subtitle.types.js.map +1 -0
  220. package/lib/module/organisms/header/sheet-grabber.android.js +5 -0
  221. package/lib/module/organisms/header/sheet-grabber.android.js.map +1 -0
  222. package/lib/module/organisms/header/sheet-grabber.ios.js +15 -0
  223. package/lib/module/organisms/header/sheet-grabber.ios.js.map +1 -0
  224. package/lib/module/organisms/header/sheet-grabber.types.js +4 -0
  225. package/lib/module/organisms/header/sheet-grabber.types.js.map +1 -0
  226. package/lib/module/organisms/header/use-header-bar-inset.android.js +4 -0
  227. package/lib/module/organisms/header/use-header-bar-inset.android.js.map +1 -0
  228. package/lib/module/organisms/header/use-header-bar-inset.ios.js +9 -0
  229. package/lib/module/organisms/header/use-header-bar-inset.ios.js.map +1 -0
  230. package/lib/module/organisms/header/use-header-bar-inset.types.js +2 -0
  231. package/lib/module/organisms/header/use-header-bar-inset.types.js.map +1 -0
  232. package/lib/module/organisms/header/use-header-scroll-to-top.js +51 -0
  233. package/lib/module/organisms/header/use-header-scroll-to-top.js.map +1 -0
  234. package/lib/module/organisms/header/use-header-search.js +135 -0
  235. package/lib/module/organisms/header/use-header-search.js.map +1 -0
  236. package/lib/module/organisms/header/use-header.js +74 -0
  237. package/lib/module/organisms/header/use-header.js.map +1 -0
  238. package/lib/module/organisms/header/use-hero-header.js +189 -0
  239. package/lib/module/organisms/header/use-hero-header.js.map +1 -0
  240. package/lib/module/organisms/header/use-stack-screen-options.js +77 -0
  241. package/lib/module/organisms/header/use-stack-screen-options.js.map +1 -0
  242. package/lib/module/organisms/menu/menu.android.js +2 -2
  243. package/lib/module/organisms/menu/menu.android.js.map +1 -1
  244. package/lib/module/organisms/menu/menu.ios.js +1 -1
  245. package/lib/module/organisms/menu/menu.ios.js.map +1 -1
  246. package/lib/module/organisms/sheet/use-sheet-header.js +3 -1
  247. package/lib/module/organisms/sheet/use-sheet-header.js.map +1 -1
  248. package/lib/module/organisms/snackbar/snackbar.js +1 -1
  249. package/lib/module/organisms/snackbar/snackbar.js.map +1 -1
  250. package/lib/module/organisms/swipe-actions/swipe-actions.android.js +1 -1
  251. package/lib/module/organisms/swipe-actions/swipe-actions.android.js.map +1 -1
  252. package/lib/module/organisms/swipe-actions/swipe-actions.ios.js +1 -1
  253. package/lib/module/organisms/swipe-actions/swipe-actions.ios.js.map +1 -1
  254. package/lib/module/templates/screen/screen.android.js +3 -3
  255. package/lib/module/templates/screen/screen.android.js.map +1 -1
  256. package/lib/module/templates/screen/screen.ios.js +3 -3
  257. package/lib/module/templates/screen/screen.ios.js.map +1 -1
  258. package/lib/module/utils/ripple-clip.js.map +1 -0
  259. package/lib/module/utils/tap-modifiers.js.map +1 -0
  260. package/lib/typescript/atoms/blur-view/blur-view.types.d.ts +8 -0
  261. package/lib/typescript/atoms/island/island.types.d.ts +17 -0
  262. package/lib/typescript/molecules/navigation-bar/navigation-bar.constants.d.ts +2 -0
  263. package/lib/typescript/molecules/navigation-bar/navigation-bar.types.d.ts +67 -4
  264. package/lib/typescript/organisms/header/header-color.d.ts +6 -0
  265. package/lib/typescript/organisms/header/header-inset.d.ts +1 -0
  266. package/lib/typescript/organisms/header/header-inset.ios.d.ts +2 -0
  267. package/lib/typescript/organisms/header/header-options.d.ts +1 -0
  268. package/lib/typescript/organisms/header/header-options.ios.d.ts +2 -0
  269. package/lib/typescript/organisms/header/header-options.types.d.ts +4 -0
  270. package/lib/typescript/organisms/header/header-search-accessory.d.ts +1 -0
  271. package/lib/typescript/organisms/header/header-search-accessory.ios.d.ts +6 -0
  272. package/lib/typescript/organisms/header/header-search-accessory.types.d.ts +9 -0
  273. package/lib/typescript/organisms/header/header-search-input.d.ts +1 -0
  274. package/lib/typescript/organisms/header/header-search-input.ios.d.ts +5 -0
  275. package/lib/typescript/organisms/header/header-search-input.types.d.ts +17 -0
  276. package/lib/typescript/organisms/header/header-search-scrim.d.ts +11 -0
  277. package/lib/typescript/organisms/header/header-title.d.ts +22 -0
  278. package/lib/typescript/organisms/header/header.types.d.ts +440 -0
  279. package/lib/typescript/organisms/header/hero-header-background.d.ts +1 -0
  280. package/lib/typescript/organisms/header/hero-header-background.ios.d.ts +7 -0
  281. package/lib/typescript/organisms/header/hero-header-background.types.d.ts +9 -0
  282. package/lib/typescript/organisms/header/index.d.ts +11 -0
  283. package/lib/typescript/organisms/header/native-subtitle.d.ts +1 -0
  284. package/lib/typescript/organisms/header/native-subtitle.ios.d.ts +4 -0
  285. package/lib/typescript/organisms/header/native-subtitle.types.d.ts +6 -0
  286. package/lib/typescript/organisms/header/sheet-grabber.d.ts +1 -0
  287. package/lib/typescript/organisms/header/sheet-grabber.ios.d.ts +7 -0
  288. package/lib/typescript/organisms/header/sheet-grabber.types.d.ts +6 -0
  289. package/lib/typescript/organisms/header/use-header-bar-inset.d.ts +1 -0
  290. package/lib/typescript/organisms/header/use-header-bar-inset.ios.d.ts +1 -0
  291. package/lib/typescript/organisms/header/use-header-bar-inset.types.d.ts +6 -0
  292. package/lib/typescript/organisms/header/use-header-scroll-to-top.d.ts +8 -0
  293. package/lib/typescript/organisms/header/use-header-search.d.ts +12 -0
  294. package/lib/typescript/organisms/header/use-header.d.ts +14 -0
  295. package/lib/typescript/organisms/header/use-hero-header.d.ts +10 -0
  296. package/lib/typescript/organisms/header/use-stack-screen-options.d.ts +17 -0
  297. package/lib/typescript/templates/screen/screen.types.d.ts +6 -2
  298. package/package.json +24 -5
  299. package/src/atoms/activity-indicator/activity-indicator.android.tsx +1 -1
  300. package/src/atoms/activity-indicator/activity-indicator.ios.tsx +1 -1
  301. package/src/atoms/badge/badge.android.tsx +1 -1
  302. package/src/atoms/badge/badge.ios.tsx +1 -1
  303. package/src/atoms/blur-view/blur-view.android.tsx +28 -1
  304. package/src/atoms/blur-view/blur-view.ios.tsx +25 -0
  305. package/src/atoms/blur-view/blur-view.types.ts +8 -0
  306. package/src/atoms/button/button.android.tsx +1 -1
  307. package/src/atoms/button/button.ios.tsx +1 -1
  308. package/src/atoms/card/card.android.tsx +1 -1
  309. package/src/atoms/card/card.ios.tsx +1 -1
  310. package/src/atoms/checkbox/checkbox.android.tsx +1 -1
  311. package/src/atoms/checkbox/checkbox.ios.tsx +1 -1
  312. package/src/atoms/color-picker/color-picker.android.tsx +1 -1
  313. package/src/atoms/color-picker/color-picker.ios.tsx +1 -1
  314. package/src/atoms/date-picker/date-picker.android.tsx +1 -1
  315. package/src/atoms/date-picker/date-picker.ios.tsx +1 -1
  316. package/src/atoms/divider/divider.android.tsx +1 -1
  317. package/src/atoms/divider/divider.ios.tsx +1 -1
  318. package/src/atoms/fab/fab.android.tsx +1 -1
  319. package/src/atoms/fab/fab.ios.tsx +1 -1
  320. package/src/atoms/h-stack/h-stack.android.tsx +2 -2
  321. package/src/atoms/h-stack/h-stack.ios.tsx +2 -2
  322. package/src/atoms/icon/icon.android.tsx +1 -1
  323. package/src/atoms/icon/icon.ios.tsx +1 -1
  324. package/src/atoms/icon-button/icon-button.android.tsx +1 -1
  325. package/src/atoms/icon-button/icon-button.ios.tsx +1 -1
  326. package/src/atoms/island/island.android.tsx +3 -1
  327. package/src/atoms/island/island.ios.tsx +10 -2
  328. package/src/atoms/island/island.types.ts +18 -0
  329. package/src/atoms/list/list.android.tsx +2 -2
  330. package/src/atoms/list/list.ios.tsx +1 -1
  331. package/src/atoms/picker/picker.android.tsx +2 -3
  332. package/src/atoms/picker/picker.ios.tsx +1 -1
  333. package/src/atoms/pressable/pressable.tsx +1 -1
  334. package/src/atoms/progress/progress.android.tsx +1 -1
  335. package/src/atoms/progress/progress.ios.tsx +1 -1
  336. package/src/atoms/scroll-view/scroll-view.android.tsx +2 -2
  337. package/src/atoms/scroll-view/scroll-view.ios.tsx +1 -1
  338. package/src/atoms/segmented-control/segmented-control.android.tsx +1 -1
  339. package/src/atoms/segmented-control/segmented-control.ios.tsx +1 -1
  340. package/src/atoms/slider/slider.android.tsx +1 -1
  341. package/src/atoms/slider/slider.ios.tsx +1 -1
  342. package/src/atoms/spacer/spacer.android.tsx +1 -1
  343. package/src/atoms/spacer/spacer.ios.tsx +1 -1
  344. package/src/atoms/surface/surface.android.tsx +1 -1
  345. package/src/atoms/surface/surface.ios.tsx +1 -1
  346. package/src/atoms/switch/switch.android.tsx +1 -1
  347. package/src/atoms/switch/switch.ios.tsx +1 -1
  348. package/src/atoms/text/text.android.tsx +1 -1
  349. package/src/atoms/text/text.ios.tsx +1 -1
  350. package/src/atoms/text-field/text-field.android.tsx +2 -2
  351. package/src/atoms/text-field/text-field.ios.tsx +1 -1
  352. package/src/atoms/v-stack/v-stack.android.tsx +2 -2
  353. package/src/atoms/v-stack/v-stack.ios.tsx +2 -2
  354. package/src/atoms/z-stack/z-stack.android.tsx +2 -2
  355. package/src/atoms/z-stack/z-stack.ios.tsx +2 -2
  356. package/src/molecules/collapsible/collapsible.android.tsx +2 -2
  357. package/src/molecules/collapsible/collapsible.ios.tsx +1 -1
  358. package/src/molecules/labeled-content/labeled-content.tsx +1 -1
  359. package/src/molecules/list-item/list-item.tsx +1 -2
  360. package/src/molecules/navigation-bar/navigation-bar.constants.ts +2 -0
  361. package/src/molecules/navigation-bar/navigation-bar.ios.tsx +35 -5
  362. package/src/molecules/navigation-bar/navigation-bar.types.ts +69 -5
  363. package/src/molecules/pager/pager.android.tsx +1 -1
  364. package/src/molecules/pager/pager.ios.tsx +1 -1
  365. package/src/molecules/radio-group/radio-group.android.tsx +1 -1
  366. package/src/molecules/radio-group/radio-group.ios.tsx +2 -2
  367. package/src/molecules/rn-list-item/rn-list-item.tsx +1 -1
  368. package/src/molecules/rn-tooltip/rn-tooltip.android.tsx +1 -1
  369. package/src/molecules/search-bar/search-bar.tsx +1 -1
  370. package/src/molecules/stepper/stepper.android.tsx +2 -2
  371. package/src/molecules/stepper/stepper.ios.tsx +1 -1
  372. package/src/molecules/tooltip/tooltip.android.tsx +1 -1
  373. package/src/molecules/tooltip/tooltip.ios.tsx +1 -1
  374. package/src/organisms/action-sheet/action-sheet.android.tsx +1 -1
  375. package/src/organisms/action-sheet/action-sheet.ios.tsx +1 -1
  376. package/src/organisms/alert/alert.android.tsx +1 -1
  377. package/src/organisms/alert/alert.ios.tsx +1 -1
  378. package/src/organisms/context-menu/context-menu.android.tsx +2 -2
  379. package/src/organisms/fab-menu/fab-menu.android.tsx +2 -2
  380. package/src/organisms/fab-menu/fab-menu.ios.tsx +2 -3
  381. package/src/organisms/form/form.android.tsx +1 -1
  382. package/src/organisms/form/form.ios.tsx +1 -1
  383. package/src/organisms/header/header-color.ts +7 -0
  384. package/src/organisms/header/header-inset.android.tsx +3 -0
  385. package/src/organisms/header/header-inset.ios.tsx +12 -0
  386. package/src/organisms/header/header-options.android.tsx +168 -0
  387. package/src/organisms/header/header-options.ios.tsx +138 -0
  388. package/src/organisms/header/header-options.types.ts +6 -0
  389. package/src/organisms/header/header-search-accessory.android.tsx +4 -0
  390. package/src/organisms/header/header-search-accessory.ios.tsx +42 -0
  391. package/src/organisms/header/header-search-accessory.types.ts +12 -0
  392. package/src/organisms/header/header-search-input.android.tsx +89 -0
  393. package/src/organisms/header/header-search-input.ios.tsx +7 -0
  394. package/src/organisms/header/header-search-input.types.ts +21 -0
  395. package/src/organisms/header/header-search-scrim.tsx +49 -0
  396. package/src/organisms/header/header-title.tsx +220 -0
  397. package/src/organisms/header/header.types.ts +416 -0
  398. package/src/organisms/header/hero-header-background.android.tsx +22 -0
  399. package/src/organisms/header/hero-header-background.ios.tsx +26 -0
  400. package/src/organisms/header/hero-header-background.types.ts +11 -0
  401. package/src/organisms/header/index.ts +11 -0
  402. package/src/organisms/header/native-subtitle.android.tsx +5 -0
  403. package/src/organisms/header/native-subtitle.ios.tsx +22 -0
  404. package/src/organisms/header/native-subtitle.types.ts +8 -0
  405. package/src/organisms/header/sheet-grabber.android.tsx +4 -0
  406. package/src/organisms/header/sheet-grabber.ios.tsx +12 -0
  407. package/src/organisms/header/sheet-grabber.types.ts +8 -0
  408. package/src/organisms/header/use-header-bar-inset.android.ts +1 -0
  409. package/src/organisms/header/use-header-bar-inset.ios.ts +7 -0
  410. package/src/organisms/header/use-header-bar-inset.types.ts +6 -0
  411. package/src/organisms/header/use-header-scroll-to-top.ts +48 -0
  412. package/src/organisms/header/use-header-search.tsx +138 -0
  413. package/src/organisms/header/use-header.ts +67 -0
  414. package/src/organisms/header/use-hero-header.tsx +222 -0
  415. package/src/organisms/header/use-stack-screen-options.ts +66 -0
  416. package/src/organisms/menu/menu.android.tsx +2 -2
  417. package/src/organisms/menu/menu.ios.tsx +1 -1
  418. package/src/organisms/sheet/use-sheet-header.tsx +4 -1
  419. package/src/organisms/snackbar/snackbar.tsx +1 -1
  420. package/src/organisms/swipe-actions/swipe-actions.android.tsx +1 -1
  421. package/src/organisms/swipe-actions/swipe-actions.ios.tsx +1 -1
  422. package/src/templates/screen/screen.android.tsx +8 -3
  423. package/src/templates/screen/screen.ios.tsx +8 -3
  424. package/src/templates/screen/screen.types.ts +7 -2
  425. package/lib/module/glyph/glyph-button.android.js.map +0 -1
  426. package/lib/module/glyph/glyph-button.ios.js.map +0 -1
  427. package/lib/module/glyph/glyph-button.types.js.map +0 -1
  428. package/lib/module/glyph/glyph.android.js.map +0 -1
  429. package/lib/module/glyph/glyph.ios.js.map +0 -1
  430. package/lib/module/glyph/glyph.types.js.map +0 -1
  431. package/lib/module/glyph/index.js.map +0 -1
  432. package/lib/module/glyph/rn-glyph.android.js.map +0 -1
  433. package/lib/module/glyph/rn-glyph.ios.js.map +0 -1
  434. package/lib/module/host-context.js.map +0 -1
  435. package/lib/module/ripple-clip.js.map +0 -1
  436. package/lib/module/tap-modifiers.js.map +0 -1
  437. package/lib/module/use-refresh-state.js.map +0 -1
  438. package/lib/module/use-stack-modifiers.js.map +0 -1
  439. /package/lib/module/{glyph → atoms/glyph}/glyph-button.android.js +0 -0
  440. /package/lib/module/{glyph → atoms/glyph}/glyph-button.ios.js +0 -0
  441. /package/lib/module/{glyph → atoms/glyph}/glyph-button.types.js +0 -0
  442. /package/lib/module/{glyph → atoms/glyph}/glyph.android.js +0 -0
  443. /package/lib/module/{glyph → atoms/glyph}/glyph.ios.js +0 -0
  444. /package/lib/module/{glyph → atoms/glyph}/glyph.types.js +0 -0
  445. /package/lib/module/{glyph → atoms/glyph}/index.js +0 -0
  446. /package/lib/module/{glyph → atoms/glyph}/rn-glyph.android.js +0 -0
  447. /package/lib/module/{glyph → atoms/glyph}/rn-glyph.ios.js +0 -0
  448. /package/lib/module/{host-context.js → hooks/host-context.js} +0 -0
  449. /package/lib/module/{use-refresh-state.js → hooks/use-refresh-state.js} +0 -0
  450. /package/lib/module/{use-stack-modifiers.js → hooks/use-stack-modifiers.js} +0 -0
  451. /package/lib/module/{ripple-clip.js → utils/ripple-clip.js} +0 -0
  452. /package/lib/module/{tap-modifiers.js → utils/tap-modifiers.js} +0 -0
  453. /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.d.ts +0 -0
  454. /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.ios.d.ts +0 -0
  455. /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.types.d.ts +0 -0
  456. /package/lib/typescript/{glyph → atoms/glyph}/glyph.d.ts +0 -0
  457. /package/lib/typescript/{glyph → atoms/glyph}/glyph.ios.d.ts +0 -0
  458. /package/lib/typescript/{glyph → atoms/glyph}/glyph.types.d.ts +0 -0
  459. /package/lib/typescript/{glyph → atoms/glyph}/index.d.ts +0 -0
  460. /package/lib/typescript/{glyph → atoms/glyph}/rn-glyph.d.ts +0 -0
  461. /package/lib/typescript/{glyph → atoms/glyph}/rn-glyph.ios.d.ts +0 -0
  462. /package/lib/typescript/{host-context.d.ts → hooks/host-context.d.ts} +0 -0
  463. /package/lib/typescript/{use-refresh-state.d.ts → hooks/use-refresh-state.d.ts} +0 -0
  464. /package/lib/typescript/{use-stack-modifiers.d.ts → hooks/use-stack-modifiers.d.ts} +0 -0
  465. /package/lib/typescript/{ripple-clip.d.ts → utils/ripple-clip.d.ts} +0 -0
  466. /package/lib/typescript/{tap-modifiers.d.ts → utils/tap-modifiers.d.ts} +0 -0
  467. /package/src/{glyph → atoms/glyph}/glyph-button.android.tsx +0 -0
  468. /package/src/{glyph → atoms/glyph}/glyph-button.ios.tsx +0 -0
  469. /package/src/{glyph → atoms/glyph}/glyph-button.types.ts +0 -0
  470. /package/src/{glyph → atoms/glyph}/glyph.android.tsx +0 -0
  471. /package/src/{glyph → atoms/glyph}/glyph.ios.tsx +0 -0
  472. /package/src/{glyph → atoms/glyph}/glyph.types.ts +0 -0
  473. /package/src/{glyph → atoms/glyph}/index.ts +0 -0
  474. /package/src/{glyph → atoms/glyph}/rn-glyph.android.tsx +0 -0
  475. /package/src/{glyph → atoms/glyph}/rn-glyph.ios.tsx +0 -0
  476. /package/src/{host-context.tsx → hooks/host-context.tsx} +0 -0
  477. /package/src/{use-refresh-state.ts → hooks/use-refresh-state.ts} +0 -0
  478. /package/src/{use-stack-modifiers.ts → hooks/use-stack-modifiers.ts} +0 -0
  479. /package/src/{ripple-clip.ts → utils/ripple-clip.ts} +0 -0
  480. /package/src/{tap-modifiers.ts → utils/tap-modifiers.ts} +0 -0
@@ -3,7 +3,7 @@ import {type ModifierConfig, refreshable} from '@expo/ui/swift-ui/modifiers'
3
3
  import {useSxModifiers} from '@hzblj/kara-sx'
4
4
  import {spacing} from '@hzblj/kara-theme'
5
5
  import {useMemo} from 'react'
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import type {ScrollViewComponent, ScrollViewProps} from './scroll-view.types'
8
8
 
9
9
  export const ScrollView: ScrollViewComponent = ({
@@ -6,7 +6,7 @@ import {DrawableIcon, NativeImage} from '@hzblj/kara-native/jetpack-compose'
6
6
  import {spacing as spacingTokens, type TextVariant, useAppTheme} from '@hzblj/kara-theme'
7
7
  import {useCallback, useMemo} from 'react'
8
8
 
9
- import {useInsideHost} from '../../host-context'
9
+ import {useInsideHost} from '../../hooks/host-context'
10
10
  import {HStack} from '../h-stack'
11
11
  import type {SegmentedControlComponent, SegmentedControlProps, SegmentedControlSegment} from './segmented-control.types'
12
12
  import {imageUri, segmentOf} from './segments'
@@ -4,7 +4,7 @@ import {SegmentedControl as NativeSegmentedControl} from '@hzblj/kara-native/swi
4
4
  import {spacing as spacingTokens, useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useCallback, useMemo} from 'react'
6
6
 
7
- import {useInsideHost} from '../../host-context'
7
+ import {useInsideHost} from '../../hooks/host-context'
8
8
  import type {SegmentedControlComponent, SegmentedControlProps} from './segmented-control.types'
9
9
  import {imageUri, segmentOf} from './segments'
10
10
 
@@ -4,7 +4,7 @@ import {haptics} from '@hzblj/expo-rich-haptics'
4
4
  import {useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useCallback, useEffect, useMemo, useRef} from 'react'
6
6
 
7
- import {useHostGuard} from '../../host-context'
7
+ import {useHostGuard} from '../../hooks/host-context'
8
8
  import type {SliderComponent, SliderProps} from './slider.types'
9
9
 
10
10
  /**
@@ -3,7 +3,7 @@ import {disabled as disabledModifier, tint} from '@expo/ui/swift-ui/modifiers'
3
3
  import {useAppTheme} from '@hzblj/kara-theme'
4
4
  import {useCallback, useMemo, useRef} from 'react'
5
5
 
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import type {SliderComponent, SliderProps} from './slider.types'
8
8
 
9
9
  /**
@@ -3,7 +3,7 @@ import {defaultMinSize, weight} from '@expo/ui/jetpack-compose/modifiers'
3
3
  import {spacing} from '@hzblj/kara-theme'
4
4
  import {useMemo} from 'react'
5
5
 
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import type {SpacerComponent, SpacerProps} from './spacer.types'
8
8
 
9
9
  export const Spacer: SpacerComponent = ({min}: SpacerProps) => {
@@ -1,7 +1,7 @@
1
1
  import {Spacer as SwiftUISpacer} from '@expo/ui/swift-ui'
2
2
  import {spacing} from '@hzblj/kara-theme'
3
3
 
4
- import {useHostGuard} from '../../host-context'
4
+ import {useHostGuard} from '../../hooks/host-context'
5
5
  import type {SpacerComponent, SpacerProps} from './spacer.types'
6
6
 
7
7
  export const Spacer: SpacerComponent = ({min, testID}: SpacerProps) => {
@@ -3,7 +3,7 @@ import {testID as testIdModifier} from '@expo/ui/jetpack-compose/modifiers'
3
3
  import {splitAccessibility, useAccessibilityModifiers, useSxModifiers} from '@hzblj/kara-sx'
4
4
  import {radii, useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useMemo} from 'react'
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import type {SurfaceComponent, SurfaceProps} from './surface.types'
8
8
 
9
9
  const cornerRadii = (radius: number) => ({bottomEnd: radius, bottomStart: radius, topEnd: radius, topStart: radius})
@@ -1,7 +1,7 @@
1
1
  import {GlassEffectContainer, VStack} from '@expo/ui/swift-ui'
2
2
  import {splitAccessibility, useAccessibilityModifiers, useSxModifiers} from '@hzblj/kara-sx'
3
3
  import {useMemo} from 'react'
4
- import {useHostGuard} from '../../host-context'
4
+ import {useHostGuard} from '../../hooks/host-context'
5
5
  import type {SurfaceComponent, SurfaceProps} from './surface.types'
6
6
 
7
7
  export const Surface: SurfaceComponent = ({children, glass = false, testID, ...props}: SurfaceProps) => {
@@ -4,7 +4,7 @@ import {haptics} from '@hzblj/expo-rich-haptics'
4
4
  import {useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useCallback, useMemo} from 'react'
6
6
 
7
- import {useHostGuard} from '../../host-context'
7
+ import {useHostGuard} from '../../hooks/host-context'
8
8
  import type {SwitchComponent, SwitchProps} from './switch.types'
9
9
 
10
10
  /** Stands in for a missing handler: Material drops its 48dp touch target without one, and the switch moves. */
@@ -3,7 +3,7 @@ import {disabled as disabledModifier, tint} from '@expo/ui/swift-ui/modifiers'
3
3
  import {useAppTheme} from '@hzblj/kara-theme'
4
4
  import {useMemo} from 'react'
5
5
 
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import type {SwitchComponent, SwitchProps} from './switch.types'
8
8
 
9
9
  export const Switch: SwitchComponent = ({disabled = false, label, onValueChange, testID, value}: SwitchProps) => {
@@ -11,7 +11,7 @@ import {
11
11
  import {duration, easing, springPhysics, useAppTheme} from '@hzblj/kara-theme'
12
12
  import {useMemo} from 'react'
13
13
 
14
- import {useHostGuard} from '../../host-context'
14
+ import {useHostGuard} from '../../hooks/host-context'
15
15
  import {spansOf, textOf} from './spans'
16
16
  import type {TextComponent, TextDecoration, TextProps, TextTransform, TextTruncation} from './text.types'
17
17
 
@@ -22,7 +22,7 @@ import {
22
22
  import {useAppTheme} from '@hzblj/kara-theme'
23
23
  import {useMemo} from 'react'
24
24
 
25
- import {useHostGuard} from '../../host-context'
25
+ import {useHostGuard} from '../../hooks/host-context'
26
26
  import {spansKey, spansOf} from './spans'
27
27
  import type {TextAlign, TextComponent, TextProps} from './text.types'
28
28
 
@@ -12,8 +12,8 @@ import {semantics, testID as testIdModifier} from '@expo/ui/jetpack-compose/modi
12
12
  import {useSxModifiers} from '@hzblj/kara-sx'
13
13
  import {useAppTheme} from '@hzblj/kara-theme'
14
14
  import {useImperativeHandle, useMemo, useRef} from 'react'
15
- import {Glyph} from '../../glyph'
16
- import {useHostGuard} from '../../host-context'
15
+ import {useHostGuard} from '../../hooks/host-context'
16
+ import {Glyph} from '../glyph'
17
17
  import type {TextFieldComponent, TextFieldContentType, TextFieldKeyboard, TextFieldProps} from './text-field.types'
18
18
  import {autoCorrectFor, capitalizationFor, ignoreDetachedView} from './text-field-input'
19
19
 
@@ -18,7 +18,7 @@ import {
18
18
  import {useSxModifiers} from '@hzblj/kara-sx'
19
19
  import {type ColorToken, spacing} from '@hzblj/kara-theme'
20
20
  import {useImperativeHandle, useMemo, useRef} from 'react'
21
- import {useHostGuard} from '../../host-context'
21
+ import {useHostGuard} from '../../hooks/host-context'
22
22
  import {Text} from '../text'
23
23
  import type {TextFieldAutoCapitalize, TextFieldComponent, TextFieldKeyboard, TextFieldProps} from './text-field.types'
24
24
  import {autoCorrectFor, capitalizationFor, ignoreDetachedView} from './text-field-input'
@@ -1,7 +1,7 @@
1
1
  import {Column} from '@expo/ui/jetpack-compose'
2
2
  import {spacing} from '@hzblj/kara-theme'
3
- import {useHostGuard} from '../../host-context'
4
- import {useStackModifiers} from '../../use-stack-modifiers'
3
+ import {useHostGuard} from '../../hooks/host-context'
4
+ import {useStackModifiers} from '../../hooks/use-stack-modifiers'
5
5
  import type {VStackAlign, VStackComponent, VStackProps} from './v-stack.types'
6
6
 
7
7
  const ALIGNMENT = {
@@ -2,8 +2,8 @@ import {VStack as SwiftUIVStack} from '@expo/ui/swift-ui'
2
2
  import {type FrameAlignment, splitAccessibility, useAccessibilityModifiers, useSxModifiers} from '@hzblj/kara-sx'
3
3
  import {spacing} from '@hzblj/kara-theme'
4
4
  import {useMemo} from 'react'
5
- import {useHostGuard} from '../../host-context'
6
- import {tapModifiers} from '../../tap-modifiers'
5
+ import {useHostGuard} from '../../hooks/host-context'
6
+ import {tapModifiers} from '../../utils/tap-modifiers'
7
7
  import type {VStackAlign, VStackComponent, VStackProps} from './v-stack.types'
8
8
 
9
9
  const ALIGNMENT = {
@@ -1,6 +1,6 @@
1
1
  import {Box} from '@expo/ui/jetpack-compose'
2
- import {useHostGuard} from '../../host-context'
3
- import {useStackModifiers} from '../../use-stack-modifiers'
2
+ import {useHostGuard} from '../../hooks/host-context'
3
+ import {useStackModifiers} from '../../hooks/use-stack-modifiers'
4
4
  import type {ZStackAlign, ZStackComponent, ZStackProps} from './z-stack.types'
5
5
 
6
6
  const ALIGNMENT = {
@@ -1,8 +1,8 @@
1
1
  import {ZStack as SwiftUIZStack} from '@expo/ui/swift-ui'
2
2
  import {type FrameAlignment, splitAccessibility, useAccessibilityModifiers, useSxModifiers} from '@hzblj/kara-sx'
3
3
  import {useMemo} from 'react'
4
- import {useHostGuard} from '../../host-context'
5
- import {tapModifiers} from '../../tap-modifiers'
4
+ import {useHostGuard} from '../../hooks/host-context'
5
+ import {tapModifiers} from '../../utils/tap-modifiers'
6
6
  import type {ZStackAlign, ZStackComponent, ZStackProps} from './z-stack.types'
7
7
 
8
8
  const ALIGNMENT = {
@@ -19,8 +19,8 @@ import {
19
19
  import {useAccessibilityModifiers} from '@hzblj/kara-sx'
20
20
  import {duration, useAppTheme, useReducedMotion} from '@hzblj/kara-theme'
21
21
  import {useMemo} from 'react'
22
- import {Glyph} from '../../glyph'
23
- import {useHostGuard} from '../../host-context'
22
+ import {Glyph} from '../../atoms/glyph'
23
+ import {useHostGuard} from '../../hooks/host-context'
24
24
  import type {CollapsibleComponent, CollapsibleProps} from './collapsible.types'
25
25
 
26
26
  /** Material's standard easing, at the length a chevron turning takes. */
@@ -1,6 +1,6 @@
1
1
  import {DisclosureGroup} from '@expo/ui/swift-ui'
2
2
 
3
- import {useHostGuard} from '../../host-context'
3
+ import {useHostGuard} from '../../hooks/host-context'
4
4
  import type {CollapsibleComponent, CollapsibleProps} from './collapsible.types'
5
5
 
6
6
  export const Collapsible: CollapsibleComponent = ({
@@ -1,8 +1,8 @@
1
+ import {Glyph} from '../../atoms/glyph'
1
2
  import {HStack} from '../../atoms/h-stack'
2
3
  import {Icon} from '../../atoms/icon'
3
4
  import {Spacer} from '../../atoms/spacer'
4
5
  import {Text} from '../../atoms/text'
5
- import {Glyph} from '../../glyph'
6
6
  import type {LabeledContentComponent, LabeledContentProps} from './labeled-content.types'
7
7
 
8
8
  const TrailingValue = ({value}: {value: string}) => (
@@ -1,11 +1,10 @@
1
1
  import {Platform} from 'react-native'
2
-
2
+ import {Glyph} from '../../atoms/glyph'
3
3
  import {HStack} from '../../atoms/h-stack'
4
4
  import {Icon} from '../../atoms/icon'
5
5
  import {Spacer} from '../../atoms/spacer'
6
6
  import {Text} from '../../atoms/text'
7
7
  import {VStack} from '../../atoms/v-stack'
8
- import {Glyph} from '../../glyph'
9
8
  import type {ListItemComponent, ListItemProps} from './list-item.types'
10
9
 
11
10
  /**
@@ -0,0 +1,2 @@
1
+ /** A `stacked` search's own row under the bar (iOS); the native view centres the field on it. */
2
+ export const SEARCH_ROW_HEIGHT = 52
@@ -7,21 +7,26 @@ import {
7
7
  import {useAppTheme} from '@hzblj/kara-theme'
8
8
  import {useImperativeHandle, useMemo, useRef} from 'react'
9
9
  import {StyleSheet} from 'react-native'
10
+ import type {IconName} from '../../atoms/icon'
11
+ import {SEARCH_ROW_HEIGHT} from './navigation-bar.constants'
10
12
  import type {NavigationBarComponent, NavigationBarItem, NavigationBarProps} from './navigation-bar.types'
11
13
 
12
- /** Fits iOS 26's 44 pt glass items with the bar's own margin; the bar centres itself vertically in it. */
14
+ /** Fits iOS 26's 44 pt glass items with the bar's own margin; the bar centres its item row vertically in it. */
13
15
  const BAR_HEIGHT = 56
14
16
 
15
17
  const styles = StyleSheet.create({
16
18
  bar: {height: BAR_HEIGHT, width: '100%'},
19
+ stackedSearchBar: {height: BAR_HEIGHT + SEARCH_ROW_HEIGHT, width: '100%'},
17
20
  })
18
21
 
19
- const DEFAULT_LABELS = {back: 'Back', close: 'Close'} as const
22
+ const DEFAULT_LABELS = {back: 'Back', cancel: 'Cancel', close: 'Close', search: 'Search'} as const
23
+
24
+ const toImageName = (icon?: IconName) => (icon ? iconResourceName(icon) : undefined)
20
25
 
21
26
  const toNativeItem = (item: NavigationBarItem): NativeNavigationBarItem =>
22
27
  item.type === 'icon'
23
28
  ? {...item, imageName: iconResourceName(item.icon), type: 'icon'}
24
- : {...item, label: item.label ?? DEFAULT_LABELS[item.type]}
29
+ : {...item, imageName: toImageName(item.icon), label: item.label ?? DEFAULT_LABELS[item.type]}
25
30
 
26
31
  const ignoreDetachedView = () => undefined
27
32
 
@@ -42,12 +47,30 @@ export const NavigationBar: NavigationBarComponent = ({
42
47
 
43
48
  useImperativeHandle(
44
49
  search?.ref,
45
- () => ({clear: () => barRef.current?.clearSearchText().catch(ignoreDetachedView)}),
50
+ () => ({
51
+ clear: () => barRef.current?.clearSearchText().catch(ignoreDetachedView),
52
+ setText: (text: string) => barRef.current?.setSearchText(text).catch(ignoreDetachedView),
53
+ }),
46
54
  []
47
55
  )
48
56
 
57
+ const voice = search?.voice
58
+ const clearIcon = search?.clearIcon
59
+ const nativeVoice = useMemo(
60
+ () =>
61
+ voice && {
62
+ ...voice,
63
+ clearImageName: toImageName(voice.clearIcon ?? clearIcon),
64
+ color: voice.color ?? color,
65
+ microphoneImageName: toImageName(voice.microphoneIcon),
66
+ stopImageName: toImageName(voice.stopIcon),
67
+ },
68
+ [clearIcon, color, voice]
69
+ )
70
+
49
71
  const nativeLeadingItems = useMemo(() => leadingItems?.map(toNativeItem), [leadingItems])
50
72
  const nativeTrailingItems = useMemo(() => trailingItems?.map(toNativeItem), [trailingItems])
73
+ const isStackedSearch = !!search && search.placement !== 'integratedButton'
51
74
 
52
75
  return (
53
76
  <NativeNavigationBar
@@ -58,9 +81,16 @@ export const NavigationBar: NavigationBarComponent = ({
58
81
  onSearchFocusChange={search?.onFocusChange}
59
82
  onSearchTextChange={search?.onChangeText}
60
83
  ref={barRef}
84
+ searchButtonImageName={toImageName(search?.buttonIcon)}
85
+ searchButtonLabel={search ? (search.buttonLabel ?? DEFAULT_LABELS.search) : undefined}
86
+ searchCancelImageName={toImageName(search?.cancelIcon)}
87
+ searchCancelLabel={search ? (search.cancelLabel ?? DEFAULT_LABELS.cancel) : undefined}
88
+ searchClearImageName={toImageName(clearIcon)}
61
89
  searchPlaceholder={search?.placeholder}
90
+ searchPlacement={search?.placement}
62
91
  searchTestID={search?.testID}
63
- style={styles.bar}
92
+ searchVoice={nativeVoice}
93
+ style={isStackedSearch ? styles.stackedSearchBar : styles.bar}
64
94
  testID={testID}
65
95
  title={title}
66
96
  titleAlignment={titleAlignment}
@@ -1,7 +1,45 @@
1
+ import type {SearchVoiceMeter} from '@hzblj/kara-native'
1
2
  import type {ReactNode, Ref} from 'react'
3
+ import type {ColorValue} from 'react-native'
2
4
 
3
5
  import type {IconName} from '../../atoms/icon'
4
6
 
7
+ /**
8
+ * A search field's voice: a microphone while the field is empty, the clear button in its place once it holds text, and
9
+ * while `listening` a live waveform of `meter` beside a stop button. Nothing records here: the app runs the dictation
10
+ * (`@hzblj/expo-speech`'s `SpeechTranscriber`, whose `Transcription` is the `meter`, or anything else) and writes what
11
+ * it hears into the field through the search's `setText`. The icons are the app's; unset, the platform's glyphs.
12
+ */
13
+ export type SearchFieldVoice = {
14
+ /** The clear button that takes the microphone's place once the field holds text. */
15
+ clearIcon?: IconName
16
+ /** The clear button's accessibility label. */
17
+ clearLabel?: string
18
+ /** Tints the microphone, the clear button, the waveform and the stop glyph (iOS). The bar's item colour by default. */
19
+ color?: ColorValue
20
+ /** Dictation is running: the waveform and the stop button replace the microphone. */
21
+ listening: boolean
22
+ /**
23
+ * The transcription to draw, a native shared object that posts its level (`@hzblj/expo-speech`'s `Transcription`), so
24
+ * no level crosses to JavaScript. Without one the waveform stays flat.
25
+ */
26
+ meter?: SearchVoiceMeter | null
27
+ /** The microphone. */
28
+ microphoneIcon?: IconName
29
+ /** The microphone's accessibility label. */
30
+ microphoneLabel: string
31
+ /** The search ended while listening (cancelled, or typed over): drop the dictation. */
32
+ onCancel?: () => void
33
+ /** The microphone was pressed. The field is focused first, so the search opens as if typed into. */
34
+ onStart: () => void
35
+ /** The stop button was pressed. */
36
+ onStop: () => void
37
+ /** The glyph in the stop button. */
38
+ stopIcon?: IconName
39
+ /** The stop button's accessibility label. */
40
+ stopLabel: string
41
+ }
42
+
5
43
  type NavigationBarItemBase = {
6
44
  /** Called when the item is pressed. */
7
45
  onPress: () => void
@@ -16,30 +54,56 @@ type NavigationBarItemBase = {
16
54
 
17
55
  /**
18
56
  * One item of the bar. `back` and `close` are the platform's own (a chevron and the system close item on iOS, the
19
- * Material arrow and cross on Android), with `Back` / `Close` as their labels unless given others. `icon` is one of the
20
- * app's icons and names itself for VoiceOver and TalkBack.
57
+ * Material arrow and cross on Android), with `Back` / `Close` as their labels unless given others; on iOS `icon` puts
58
+ * one of the app's icons in place of the system glyph. An `icon` item is one of the app's icons and names itself for
59
+ * VoiceOver and TalkBack.
21
60
  */
22
61
  export type NavigationBarItem =
23
- | (NavigationBarItemBase & {label?: string; type: 'back' | 'close'})
62
+ | (NavigationBarItemBase & {icon?: IconName; label?: string; type: 'back' | 'close'})
24
63
  | (NavigationBarItemBase & {icon: IconName; label: string; type: 'icon'})
25
64
 
26
65
  export type NavigationBarSearchRef = {
27
66
  /** Empties the field and ends editing. */
28
67
  clear: () => void
68
+ /** Sets the field's text without `onChangeText`, the way dictation fills it in. */
69
+ setText: (text: string) => void
29
70
  }
30
71
 
31
- /** A search field in place of the title. iOS only for now; Android keeps the title. */
72
+ /**
73
+ * Where the search field goes on iOS, as a native-stack header places its search: `stacked` in a row of its own under
74
+ * the title, `integratedButton` as a search item beside the trailing items that turns the bar into the field.
75
+ */
76
+ export type NavigationBarSearchPlacement = 'integratedButton' | 'stacked'
77
+
78
+ /**
79
+ * A search field in the bar. iOS only for now; Android keeps the title. A focused field gets a cancel item that
80
+ * empties it and ends the search, a bar item like the others.
81
+ */
32
82
  export type NavigationBarSearch = {
83
+ /** `integratedButton`: the search item's icon, one of the app's icons; the system magnifying glass unset. */
84
+ buttonIcon?: IconName
85
+ /** `integratedButton`: the search item's label for VoiceOver. `Search` by default. */
86
+ buttonLabel?: string
87
+ /** The cancel item's icon, one of the app's icons; the system cross unset. */
88
+ cancelIcon?: IconName
89
+ /** The cancel item's label for VoiceOver. `Cancel` by default. */
90
+ cancelLabel?: string
91
+ /** The field's clear button, one of the app's icons; the system's unset. */
92
+ clearIcon?: IconName
33
93
  /** Every edit of the field's text. */
34
94
  onChangeText: (text: string) => void
35
95
  /** The field gained or lost focus. */
36
96
  onFocusChange?: (focused: boolean) => void
37
97
  /** Shown while the field is empty. */
38
98
  placeholder: string
99
+ /** `stacked` (a row under the title) by default. */
100
+ placement?: NavigationBarSearchPlacement
39
101
  /** Imperative `clear`. */
40
102
  ref?: Ref<NavigationBarSearchRef>
41
103
  /** Test identifier, forwarded to the native search field. */
42
104
  testID?: string
105
+ /** A microphone in the field: see `SearchFieldVoice`. */
106
+ voice?: SearchFieldVoice
43
107
  }
44
108
 
45
109
  export type NavigationBarTitleAlignment = 'center' | 'leading'
@@ -56,7 +120,7 @@ export type NavigationBarProps = {
56
120
  inverted?: boolean
57
121
  /** In screen order, from the leading edge. */
58
122
  leadingItems?: NavigationBarItem[]
59
- /** Replaces the title with a search field (iOS). */
123
+ /** A search field (iOS): under the title, or behind a search item beside the trailing items. */
60
124
  search?: NavigationBarSearch
61
125
  /** Test identifier, forwarded to the native bar. iOS only; Android ignores it. */
62
126
  testID?: string
@@ -6,7 +6,7 @@ import {Children, useCallback, useEffect, useMemo, useRef, useState} from 'react
6
6
  import {HStack} from '../../atoms/h-stack'
7
7
  import {Spacer} from '../../atoms/spacer'
8
8
  import {VStack} from '../../atoms/v-stack'
9
- import {useHostGuard} from '../../host-context'
9
+ import {useHostGuard} from '../../hooks/host-context'
10
10
  import type {PagerComponent, PagerProps} from './pager.types'
11
11
 
12
12
  const DOT_SIZE = 6
@@ -2,7 +2,7 @@ import {TabView} from '@expo/ui/swift-ui'
2
2
  import {type ModifierConfig, tabViewStyle} from '@expo/ui/swift-ui/modifiers'
3
3
  import {Children, useCallback, useMemo} from 'react'
4
4
 
5
- import {useHostGuard} from '../../host-context'
5
+ import {useHostGuard} from '../../hooks/host-context'
6
6
  import type {PagerComponent, PagerProps} from './pager.types'
7
7
 
8
8
  export const Pager: PagerComponent = ({children, indicators = true, onPageChange, page, testID}: PagerProps) => {
@@ -2,7 +2,7 @@ import {Text as ComposeText, RadioButton, Row} from '@expo/ui/jetpack-compose'
2
2
  import {clickable, fillMaxWidth} from '@expo/ui/jetpack-compose/modifiers'
3
3
  import {useAppTheme} from '@hzblj/kara-theme'
4
4
  import {VStack} from '../../atoms/v-stack'
5
- import {useHostGuard} from '../../host-context'
5
+ import {useHostGuard} from '../../hooks/host-context'
6
6
  import type {RadioGroupComponent, RadioGroupProps} from './radio-group.types'
7
7
 
8
8
  /**
@@ -1,9 +1,9 @@
1
+ import {Glyph} from '../../atoms/glyph'
1
2
  import {HStack} from '../../atoms/h-stack'
2
3
  import {Spacer} from '../../atoms/spacer'
3
4
  import {Text} from '../../atoms/text'
4
5
  import {VStack} from '../../atoms/v-stack'
5
- import {Glyph} from '../../glyph'
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import type {RadioGroupComponent, RadioGroupProps} from './radio-group.types'
8
8
 
9
9
  export const RadioGroup: RadioGroupComponent = ({
@@ -4,9 +4,9 @@ import {useMemo} from 'react'
4
4
  import {Platform, Pressable, type PressableStateCallbackType} from 'react-native'
5
5
 
6
6
  import {Box} from '../../atoms/box'
7
+ import {RnGlyph} from '../../atoms/glyph'
7
8
  import {RnIcon} from '../../atoms/rn-icon'
8
9
  import {RnText} from '../../atoms/rn-text'
9
- import {RnGlyph} from '../../glyph'
10
10
  import type {RnListItemComponent, RnListItemProps} from './rn-list-item.types'
11
11
 
12
12
  export const RnListItem: RnListItemComponent = ({
@@ -3,7 +3,7 @@ import {Text as ComposeText, Host, RNHostView, Row, TextButton} from '@expo/ui/j
3
3
  import {TooltipBox} from '@hzblj/kara-native/jetpack-compose'
4
4
  import {useAppTheme} from '@hzblj/kara-theme'
5
5
  import {Button} from '../../atoms/button'
6
- import {HostBoundary} from '../../host-context'
6
+ import {HostBoundary} from '../../hooks/host-context'
7
7
  import type {RnTooltipAction, RnTooltipComponent, RnTooltipProps} from './rn-tooltip.types'
8
8
 
9
9
  /** Material's rich tooltip width, in dp. */
@@ -2,8 +2,8 @@ import {useAppTheme} from '@hzblj/kara-theme'
2
2
  import {Platform, TextInput} from 'react-native'
3
3
 
4
4
  import {Box} from '../../atoms/box'
5
+ import {RnGlyph} from '../../atoms/glyph'
5
6
  import {Pressable} from '../../atoms/pressable'
6
- import {RnGlyph} from '../../glyph'
7
7
  import type {SearchBarComponent, SearchBarProps} from './search-bar.types'
8
8
 
9
9
  export const SearchBar: SearchBarComponent = ({
@@ -1,9 +1,9 @@
1
1
  import {useCallback} from 'react'
2
+ import {GlyphButton} from '../../atoms/glyph'
2
3
  import {HStack} from '../../atoms/h-stack'
3
4
  import {Spacer} from '../../atoms/spacer'
4
5
  import {Text} from '../../atoms/text'
5
- import {GlyphButton} from '../../glyph'
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import type {StepperComponent, StepperProps} from './stepper.types'
8
8
 
9
9
  export const Stepper: StepperComponent = ({
@@ -6,7 +6,7 @@ import {useRef} from 'react'
6
6
  import {HStack} from '../../atoms/h-stack'
7
7
  import {Spacer} from '../../atoms/spacer'
8
8
  import {Text} from '../../atoms/text'
9
- import {useHostGuard} from '../../host-context'
9
+ import {useHostGuard} from '../../hooks/host-context'
10
10
  import type {StepperComponent, StepperProps} from './stepper.types'
11
11
 
12
12
  /** The label stays VoiceOver's, on the control; on screen it is the row's own text. */
@@ -3,7 +3,7 @@ import {TooltipBox} from '@hzblj/kara-native/jetpack-compose'
3
3
  import {useAppTheme} from '@hzblj/kara-theme'
4
4
  import {useCallback} from 'react'
5
5
 
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import type {TooltipComponent, TooltipProps} from './tooltip.types'
8
8
 
9
9
  /**
@@ -1,7 +1,7 @@
1
1
  import {Popover} from '@expo/ui/swift-ui'
2
2
  import {Text} from '../../atoms/text'
3
3
  import {VStack} from '../../atoms/v-stack'
4
- import {useHostGuard} from '../../host-context'
4
+ import {useHostGuard} from '../../hooks/host-context'
5
5
  import type {TooltipComponent, TooltipProps} from './tooltip.types'
6
6
 
7
7
  export const Tooltip: TooltipComponent = ({children, onDismiss, text, visible}: TooltipProps) => {
@@ -3,7 +3,7 @@ import {Icon} from '../../atoms/icon'
3
3
  import {Island} from '../../atoms/island'
4
4
  import {Text} from '../../atoms/text'
5
5
  import {VStack} from '../../atoms/v-stack'
6
- import {useHostGuard} from '../../host-context'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
7
  import {menuActionColor} from '../menu/menu-parts'
8
8
  import {Sheet} from '../sheet'
9
9
  import type {ActionSheetComponent, ActionSheetProps} from './action-sheet.types'
@@ -1,7 +1,7 @@
1
1
  import {Button, ConfirmationDialog, Spacer, Text as SwiftUIText} from '@expo/ui/swift-ui'
2
2
  import {disabled, frame} from '@expo/ui/swift-ui/modifiers'
3
3
 
4
- import {useHostGuard} from '../../host-context'
4
+ import {useHostGuard} from '../../hooks/host-context'
5
5
  import type {ActionSheetComponent, ActionSheetProps} from './action-sheet.types'
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import {AlertDialog, Text as ComposeText, TextButton} from '@expo/ui/jetpack-compose'
2
2
  import {useAppTheme} from '@hzblj/kara-theme'
3
3
 
4
- import {useHostGuard} from '../../host-context'
4
+ import {useHostGuard} from '../../hooks/host-context'
5
5
  import type {AlertComponent, AlertProps} from './alert.types'
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import {Button, Spacer, Alert as SwiftUIAlert, Text as SwiftUIText} from '@expo/ui/swift-ui'
2
2
  import {frame} from '@expo/ui/swift-ui/modifiers'
3
3
 
4
- import {useHostGuard} from '../../host-context'
4
+ import {useHostGuard} from '../../hooks/host-context'
5
5
  import type {AlertComponent, AlertProps} from './alert.types'
6
6
 
7
7
  /**
@@ -5,8 +5,8 @@ import {useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useCallback, useMemo, useRef, useState} from 'react'
6
6
  import {type GestureResponderEvent, Pressable, StyleSheet, View} from 'react-native'
7
7
  import {Icon} from '../../atoms/icon'
8
- import {HostBoundary} from '../../host-context'
9
- import {splitForRipple} from '../../ripple-clip'
8
+ import {HostBoundary} from '../../hooks/host-context'
9
+ import {splitForRipple} from '../../utils/ripple-clip'
10
10
  import type {MenuAction} from '../menu'
11
11
  import {menuActionColor} from '../menu/menu-parts'
12
12
  import type {ContextMenuComponent, ContextMenuExclusionProps, ContextMenuProps} from './context-menu.types'