@hzblj/kara-components 0.20.1 → 0.22.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 (488) hide show
  1. package/CHANGELOG.md +48 -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-large-title-fade.android.js +6 -0
  183. package/lib/module/organisms/header/header-large-title-fade.android.js.map +1 -0
  184. package/lib/module/organisms/header/header-large-title-fade.ios.js +15 -0
  185. package/lib/module/organisms/header/header-large-title-fade.ios.js.map +1 -0
  186. package/lib/module/organisms/header/header-options.android.js +180 -0
  187. package/lib/module/organisms/header/header-options.android.js.map +1 -0
  188. package/lib/module/organisms/header/header-options.ios.js +145 -0
  189. package/lib/module/organisms/header/header-options.ios.js.map +1 -0
  190. package/lib/module/organisms/header/header-options.types.js +4 -0
  191. package/lib/module/organisms/header/header-options.types.js.map +1 -0
  192. package/lib/module/organisms/header/header-search-accessory.android.js +5 -0
  193. package/lib/module/organisms/header/header-search-accessory.android.js.map +1 -0
  194. package/lib/module/organisms/header/header-search-accessory.ios.js +35 -0
  195. package/lib/module/organisms/header/header-search-accessory.ios.js.map +1 -0
  196. package/lib/module/organisms/header/header-search-accessory.types.js +4 -0
  197. package/lib/module/organisms/header/header-search-accessory.types.js.map +1 -0
  198. package/lib/module/organisms/header/header-search-input.android.js +80 -0
  199. package/lib/module/organisms/header/header-search-input.android.js.map +1 -0
  200. package/lib/module/organisms/header/header-search-input.ios.js +8 -0
  201. package/lib/module/organisms/header/header-search-input.ios.js.map +1 -0
  202. package/lib/module/organisms/header/header-search-input.types.js +4 -0
  203. package/lib/module/organisms/header/header-search-input.types.js.map +1 -0
  204. package/lib/module/organisms/header/header-search-scrim.js +62 -0
  205. package/lib/module/organisms/header/header-search-scrim.js.map +1 -0
  206. package/lib/module/organisms/header/header-title.js +230 -0
  207. package/lib/module/organisms/header/header-title.js.map +1 -0
  208. package/lib/module/organisms/header/header.types.js +4 -0
  209. package/lib/module/organisms/header/header.types.js.map +1 -0
  210. package/lib/module/organisms/header/hero-header-background.android.js +33 -0
  211. package/lib/module/organisms/header/hero-header-background.android.js.map +1 -0
  212. package/lib/module/organisms/header/hero-header-background.ios.js +40 -0
  213. package/lib/module/organisms/header/hero-header-background.ios.js.map +1 -0
  214. package/lib/module/organisms/header/hero-header-background.types.js +4 -0
  215. package/lib/module/organisms/header/hero-header-background.types.js.map +1 -0
  216. package/lib/module/organisms/header/index.js +14 -0
  217. package/lib/module/organisms/header/index.js.map +1 -0
  218. package/lib/module/organisms/header/native-subtitle.android.js +5 -0
  219. package/lib/module/organisms/header/native-subtitle.android.js.map +1 -0
  220. package/lib/module/organisms/header/native-subtitle.ios.js +22 -0
  221. package/lib/module/organisms/header/native-subtitle.ios.js.map +1 -0
  222. package/lib/module/organisms/header/native-subtitle.types.js +4 -0
  223. package/lib/module/organisms/header/native-subtitle.types.js.map +1 -0
  224. package/lib/module/organisms/header/sheet-grabber.android.js +5 -0
  225. package/lib/module/organisms/header/sheet-grabber.android.js.map +1 -0
  226. package/lib/module/organisms/header/sheet-grabber.ios.js +15 -0
  227. package/lib/module/organisms/header/sheet-grabber.ios.js.map +1 -0
  228. package/lib/module/organisms/header/sheet-grabber.types.js +4 -0
  229. package/lib/module/organisms/header/sheet-grabber.types.js.map +1 -0
  230. package/lib/module/organisms/header/use-header-bar-inset.android.js +4 -0
  231. package/lib/module/organisms/header/use-header-bar-inset.android.js.map +1 -0
  232. package/lib/module/organisms/header/use-header-bar-inset.ios.js +9 -0
  233. package/lib/module/organisms/header/use-header-bar-inset.ios.js.map +1 -0
  234. package/lib/module/organisms/header/use-header-bar-inset.types.js +2 -0
  235. package/lib/module/organisms/header/use-header-bar-inset.types.js.map +1 -0
  236. package/lib/module/organisms/header/use-header-scroll-to-top.js +51 -0
  237. package/lib/module/organisms/header/use-header-scroll-to-top.js.map +1 -0
  238. package/lib/module/organisms/header/use-header-search.js +135 -0
  239. package/lib/module/organisms/header/use-header-search.js.map +1 -0
  240. package/lib/module/organisms/header/use-header.js +74 -0
  241. package/lib/module/organisms/header/use-header.js.map +1 -0
  242. package/lib/module/organisms/header/use-hero-header.js +189 -0
  243. package/lib/module/organisms/header/use-hero-header.js.map +1 -0
  244. package/lib/module/organisms/header/use-stack-screen-options.js +77 -0
  245. package/lib/module/organisms/header/use-stack-screen-options.js.map +1 -0
  246. package/lib/module/organisms/menu/menu.android.js +2 -2
  247. package/lib/module/organisms/menu/menu.android.js.map +1 -1
  248. package/lib/module/organisms/menu/menu.ios.js +1 -1
  249. package/lib/module/organisms/menu/menu.ios.js.map +1 -1
  250. package/lib/module/organisms/sheet/use-sheet-header.js +3 -1
  251. package/lib/module/organisms/sheet/use-sheet-header.js.map +1 -1
  252. package/lib/module/organisms/snackbar/snackbar.js +1 -1
  253. package/lib/module/organisms/snackbar/snackbar.js.map +1 -1
  254. package/lib/module/organisms/swipe-actions/swipe-actions.android.js +1 -1
  255. package/lib/module/organisms/swipe-actions/swipe-actions.android.js.map +1 -1
  256. package/lib/module/organisms/swipe-actions/swipe-actions.ios.js +1 -1
  257. package/lib/module/organisms/swipe-actions/swipe-actions.ios.js.map +1 -1
  258. package/lib/module/templates/screen/screen.android.js +3 -3
  259. package/lib/module/templates/screen/screen.android.js.map +1 -1
  260. package/lib/module/templates/screen/screen.ios.js +3 -3
  261. package/lib/module/templates/screen/screen.ios.js.map +1 -1
  262. package/lib/module/utils/ripple-clip.js.map +1 -0
  263. package/lib/module/utils/tap-modifiers.js.map +1 -0
  264. package/lib/typescript/atoms/blur-view/blur-view.types.d.ts +8 -0
  265. package/lib/typescript/atoms/island/island.types.d.ts +17 -0
  266. package/lib/typescript/molecules/navigation-bar/navigation-bar.constants.d.ts +2 -0
  267. package/lib/typescript/molecules/navigation-bar/navigation-bar.types.d.ts +67 -4
  268. package/lib/typescript/organisms/header/header-color.d.ts +6 -0
  269. package/lib/typescript/organisms/header/header-inset.d.ts +1 -0
  270. package/lib/typescript/organisms/header/header-inset.ios.d.ts +2 -0
  271. package/lib/typescript/organisms/header/header-large-title-fade.d.ts +1 -0
  272. package/lib/typescript/organisms/header/header-large-title-fade.ios.d.ts +7 -0
  273. package/lib/typescript/organisms/header/header-options.d.ts +1 -0
  274. package/lib/typescript/organisms/header/header-options.ios.d.ts +2 -0
  275. package/lib/typescript/organisms/header/header-options.types.d.ts +4 -0
  276. package/lib/typescript/organisms/header/header-search-accessory.d.ts +1 -0
  277. package/lib/typescript/organisms/header/header-search-accessory.ios.d.ts +6 -0
  278. package/lib/typescript/organisms/header/header-search-accessory.types.d.ts +9 -0
  279. package/lib/typescript/organisms/header/header-search-input.d.ts +1 -0
  280. package/lib/typescript/organisms/header/header-search-input.ios.d.ts +5 -0
  281. package/lib/typescript/organisms/header/header-search-input.types.d.ts +17 -0
  282. package/lib/typescript/organisms/header/header-search-scrim.d.ts +11 -0
  283. package/lib/typescript/organisms/header/header-title.d.ts +22 -0
  284. package/lib/typescript/organisms/header/header.types.d.ts +445 -0
  285. package/lib/typescript/organisms/header/hero-header-background.d.ts +1 -0
  286. package/lib/typescript/organisms/header/hero-header-background.ios.d.ts +7 -0
  287. package/lib/typescript/organisms/header/hero-header-background.types.d.ts +9 -0
  288. package/lib/typescript/organisms/header/index.d.ts +12 -0
  289. package/lib/typescript/organisms/header/native-subtitle.d.ts +1 -0
  290. package/lib/typescript/organisms/header/native-subtitle.ios.d.ts +4 -0
  291. package/lib/typescript/organisms/header/native-subtitle.types.d.ts +6 -0
  292. package/lib/typescript/organisms/header/sheet-grabber.d.ts +1 -0
  293. package/lib/typescript/organisms/header/sheet-grabber.ios.d.ts +7 -0
  294. package/lib/typescript/organisms/header/sheet-grabber.types.d.ts +6 -0
  295. package/lib/typescript/organisms/header/use-header-bar-inset.d.ts +1 -0
  296. package/lib/typescript/organisms/header/use-header-bar-inset.ios.d.ts +1 -0
  297. package/lib/typescript/organisms/header/use-header-bar-inset.types.d.ts +6 -0
  298. package/lib/typescript/organisms/header/use-header-scroll-to-top.d.ts +8 -0
  299. package/lib/typescript/organisms/header/use-header-search.d.ts +12 -0
  300. package/lib/typescript/organisms/header/use-header.d.ts +14 -0
  301. package/lib/typescript/organisms/header/use-hero-header.d.ts +10 -0
  302. package/lib/typescript/organisms/header/use-stack-screen-options.d.ts +17 -0
  303. package/lib/typescript/templates/screen/screen.types.d.ts +6 -2
  304. package/package.json +24 -5
  305. package/src/atoms/activity-indicator/activity-indicator.android.tsx +1 -1
  306. package/src/atoms/activity-indicator/activity-indicator.ios.tsx +1 -1
  307. package/src/atoms/badge/badge.android.tsx +1 -1
  308. package/src/atoms/badge/badge.ios.tsx +1 -1
  309. package/src/atoms/blur-view/blur-view.android.tsx +28 -1
  310. package/src/atoms/blur-view/blur-view.ios.tsx +25 -0
  311. package/src/atoms/blur-view/blur-view.types.ts +8 -0
  312. package/src/atoms/button/button.android.tsx +1 -1
  313. package/src/atoms/button/button.ios.tsx +1 -1
  314. package/src/atoms/card/card.android.tsx +1 -1
  315. package/src/atoms/card/card.ios.tsx +1 -1
  316. package/src/atoms/checkbox/checkbox.android.tsx +1 -1
  317. package/src/atoms/checkbox/checkbox.ios.tsx +1 -1
  318. package/src/atoms/color-picker/color-picker.android.tsx +1 -1
  319. package/src/atoms/color-picker/color-picker.ios.tsx +1 -1
  320. package/src/atoms/date-picker/date-picker.android.tsx +1 -1
  321. package/src/atoms/date-picker/date-picker.ios.tsx +1 -1
  322. package/src/atoms/divider/divider.android.tsx +1 -1
  323. package/src/atoms/divider/divider.ios.tsx +1 -1
  324. package/src/atoms/fab/fab.android.tsx +1 -1
  325. package/src/atoms/fab/fab.ios.tsx +1 -1
  326. package/src/atoms/h-stack/h-stack.android.tsx +2 -2
  327. package/src/atoms/h-stack/h-stack.ios.tsx +2 -2
  328. package/src/atoms/icon/icon.android.tsx +1 -1
  329. package/src/atoms/icon/icon.ios.tsx +1 -1
  330. package/src/atoms/icon-button/icon-button.android.tsx +1 -1
  331. package/src/atoms/icon-button/icon-button.ios.tsx +1 -1
  332. package/src/atoms/island/island.android.tsx +3 -1
  333. package/src/atoms/island/island.ios.tsx +10 -2
  334. package/src/atoms/island/island.types.ts +18 -0
  335. package/src/atoms/list/list.android.tsx +2 -2
  336. package/src/atoms/list/list.ios.tsx +1 -1
  337. package/src/atoms/picker/picker.android.tsx +2 -3
  338. package/src/atoms/picker/picker.ios.tsx +1 -1
  339. package/src/atoms/pressable/pressable.tsx +1 -1
  340. package/src/atoms/progress/progress.android.tsx +1 -1
  341. package/src/atoms/progress/progress.ios.tsx +1 -1
  342. package/src/atoms/scroll-view/scroll-view.android.tsx +2 -2
  343. package/src/atoms/scroll-view/scroll-view.ios.tsx +1 -1
  344. package/src/atoms/segmented-control/segmented-control.android.tsx +1 -1
  345. package/src/atoms/segmented-control/segmented-control.ios.tsx +1 -1
  346. package/src/atoms/slider/slider.android.tsx +1 -1
  347. package/src/atoms/slider/slider.ios.tsx +1 -1
  348. package/src/atoms/spacer/spacer.android.tsx +1 -1
  349. package/src/atoms/spacer/spacer.ios.tsx +1 -1
  350. package/src/atoms/surface/surface.android.tsx +1 -1
  351. package/src/atoms/surface/surface.ios.tsx +1 -1
  352. package/src/atoms/switch/switch.android.tsx +1 -1
  353. package/src/atoms/switch/switch.ios.tsx +1 -1
  354. package/src/atoms/text/text.android.tsx +1 -1
  355. package/src/atoms/text/text.ios.tsx +1 -1
  356. package/src/atoms/text-field/text-field.android.tsx +2 -2
  357. package/src/atoms/text-field/text-field.ios.tsx +1 -1
  358. package/src/atoms/v-stack/v-stack.android.tsx +2 -2
  359. package/src/atoms/v-stack/v-stack.ios.tsx +2 -2
  360. package/src/atoms/z-stack/z-stack.android.tsx +2 -2
  361. package/src/atoms/z-stack/z-stack.ios.tsx +2 -2
  362. package/src/molecules/collapsible/collapsible.android.tsx +2 -2
  363. package/src/molecules/collapsible/collapsible.ios.tsx +1 -1
  364. package/src/molecules/labeled-content/labeled-content.tsx +1 -1
  365. package/src/molecules/list-item/list-item.tsx +1 -2
  366. package/src/molecules/navigation-bar/navigation-bar.constants.ts +2 -0
  367. package/src/molecules/navigation-bar/navigation-bar.ios.tsx +35 -5
  368. package/src/molecules/navigation-bar/navigation-bar.types.ts +69 -5
  369. package/src/molecules/pager/pager.android.tsx +1 -1
  370. package/src/molecules/pager/pager.ios.tsx +1 -1
  371. package/src/molecules/radio-group/radio-group.android.tsx +1 -1
  372. package/src/molecules/radio-group/radio-group.ios.tsx +2 -2
  373. package/src/molecules/rn-list-item/rn-list-item.tsx +1 -1
  374. package/src/molecules/rn-tooltip/rn-tooltip.android.tsx +1 -1
  375. package/src/molecules/search-bar/search-bar.tsx +1 -1
  376. package/src/molecules/stepper/stepper.android.tsx +2 -2
  377. package/src/molecules/stepper/stepper.ios.tsx +1 -1
  378. package/src/molecules/tooltip/tooltip.android.tsx +1 -1
  379. package/src/molecules/tooltip/tooltip.ios.tsx +1 -1
  380. package/src/organisms/action-sheet/action-sheet.android.tsx +1 -1
  381. package/src/organisms/action-sheet/action-sheet.ios.tsx +1 -1
  382. package/src/organisms/alert/alert.android.tsx +1 -1
  383. package/src/organisms/alert/alert.ios.tsx +1 -1
  384. package/src/organisms/context-menu/context-menu.android.tsx +2 -2
  385. package/src/organisms/fab-menu/fab-menu.android.tsx +2 -2
  386. package/src/organisms/fab-menu/fab-menu.ios.tsx +2 -3
  387. package/src/organisms/form/form.android.tsx +1 -1
  388. package/src/organisms/form/form.ios.tsx +1 -1
  389. package/src/organisms/header/header-color.ts +7 -0
  390. package/src/organisms/header/header-inset.android.tsx +3 -0
  391. package/src/organisms/header/header-inset.ios.tsx +12 -0
  392. package/src/organisms/header/header-large-title-fade.android.tsx +3 -0
  393. package/src/organisms/header/header-large-title-fade.ios.tsx +12 -0
  394. package/src/organisms/header/header-options.android.tsx +168 -0
  395. package/src/organisms/header/header-options.ios.tsx +138 -0
  396. package/src/organisms/header/header-options.types.ts +6 -0
  397. package/src/organisms/header/header-search-accessory.android.tsx +4 -0
  398. package/src/organisms/header/header-search-accessory.ios.tsx +42 -0
  399. package/src/organisms/header/header-search-accessory.types.ts +12 -0
  400. package/src/organisms/header/header-search-input.android.tsx +89 -0
  401. package/src/organisms/header/header-search-input.ios.tsx +7 -0
  402. package/src/organisms/header/header-search-input.types.ts +21 -0
  403. package/src/organisms/header/header-search-scrim.tsx +49 -0
  404. package/src/organisms/header/header-title.tsx +220 -0
  405. package/src/organisms/header/header.types.ts +423 -0
  406. package/src/organisms/header/hero-header-background.android.tsx +22 -0
  407. package/src/organisms/header/hero-header-background.ios.tsx +26 -0
  408. package/src/organisms/header/hero-header-background.types.ts +11 -0
  409. package/src/organisms/header/index.ts +12 -0
  410. package/src/organisms/header/native-subtitle.android.tsx +5 -0
  411. package/src/organisms/header/native-subtitle.ios.tsx +22 -0
  412. package/src/organisms/header/native-subtitle.types.ts +8 -0
  413. package/src/organisms/header/sheet-grabber.android.tsx +4 -0
  414. package/src/organisms/header/sheet-grabber.ios.tsx +12 -0
  415. package/src/organisms/header/sheet-grabber.types.ts +8 -0
  416. package/src/organisms/header/use-header-bar-inset.android.ts +1 -0
  417. package/src/organisms/header/use-header-bar-inset.ios.ts +7 -0
  418. package/src/organisms/header/use-header-bar-inset.types.ts +6 -0
  419. package/src/organisms/header/use-header-scroll-to-top.ts +48 -0
  420. package/src/organisms/header/use-header-search.tsx +138 -0
  421. package/src/organisms/header/use-header.ts +67 -0
  422. package/src/organisms/header/use-hero-header.tsx +222 -0
  423. package/src/organisms/header/use-stack-screen-options.ts +66 -0
  424. package/src/organisms/menu/menu.android.tsx +2 -2
  425. package/src/organisms/menu/menu.ios.tsx +1 -1
  426. package/src/organisms/sheet/use-sheet-header.tsx +4 -1
  427. package/src/organisms/snackbar/snackbar.tsx +1 -1
  428. package/src/organisms/swipe-actions/swipe-actions.android.tsx +1 -1
  429. package/src/organisms/swipe-actions/swipe-actions.ios.tsx +1 -1
  430. package/src/templates/screen/screen.android.tsx +8 -3
  431. package/src/templates/screen/screen.ios.tsx +8 -3
  432. package/src/templates/screen/screen.types.ts +7 -2
  433. package/lib/module/glyph/glyph-button.android.js.map +0 -1
  434. package/lib/module/glyph/glyph-button.ios.js.map +0 -1
  435. package/lib/module/glyph/glyph-button.types.js.map +0 -1
  436. package/lib/module/glyph/glyph.android.js.map +0 -1
  437. package/lib/module/glyph/glyph.ios.js.map +0 -1
  438. package/lib/module/glyph/glyph.types.js.map +0 -1
  439. package/lib/module/glyph/index.js.map +0 -1
  440. package/lib/module/glyph/rn-glyph.android.js.map +0 -1
  441. package/lib/module/glyph/rn-glyph.ios.js.map +0 -1
  442. package/lib/module/host-context.js.map +0 -1
  443. package/lib/module/ripple-clip.js.map +0 -1
  444. package/lib/module/tap-modifiers.js.map +0 -1
  445. package/lib/module/use-refresh-state.js.map +0 -1
  446. package/lib/module/use-stack-modifiers.js.map +0 -1
  447. /package/lib/module/{glyph → atoms/glyph}/glyph-button.android.js +0 -0
  448. /package/lib/module/{glyph → atoms/glyph}/glyph-button.ios.js +0 -0
  449. /package/lib/module/{glyph → atoms/glyph}/glyph-button.types.js +0 -0
  450. /package/lib/module/{glyph → atoms/glyph}/glyph.android.js +0 -0
  451. /package/lib/module/{glyph → atoms/glyph}/glyph.ios.js +0 -0
  452. /package/lib/module/{glyph → atoms/glyph}/glyph.types.js +0 -0
  453. /package/lib/module/{glyph → atoms/glyph}/index.js +0 -0
  454. /package/lib/module/{glyph → atoms/glyph}/rn-glyph.android.js +0 -0
  455. /package/lib/module/{glyph → atoms/glyph}/rn-glyph.ios.js +0 -0
  456. /package/lib/module/{host-context.js → hooks/host-context.js} +0 -0
  457. /package/lib/module/{use-refresh-state.js → hooks/use-refresh-state.js} +0 -0
  458. /package/lib/module/{use-stack-modifiers.js → hooks/use-stack-modifiers.js} +0 -0
  459. /package/lib/module/{ripple-clip.js → utils/ripple-clip.js} +0 -0
  460. /package/lib/module/{tap-modifiers.js → utils/tap-modifiers.js} +0 -0
  461. /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.d.ts +0 -0
  462. /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.ios.d.ts +0 -0
  463. /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.types.d.ts +0 -0
  464. /package/lib/typescript/{glyph → atoms/glyph}/glyph.d.ts +0 -0
  465. /package/lib/typescript/{glyph → atoms/glyph}/glyph.ios.d.ts +0 -0
  466. /package/lib/typescript/{glyph → atoms/glyph}/glyph.types.d.ts +0 -0
  467. /package/lib/typescript/{glyph → atoms/glyph}/index.d.ts +0 -0
  468. /package/lib/typescript/{glyph → atoms/glyph}/rn-glyph.d.ts +0 -0
  469. /package/lib/typescript/{glyph → atoms/glyph}/rn-glyph.ios.d.ts +0 -0
  470. /package/lib/typescript/{host-context.d.ts → hooks/host-context.d.ts} +0 -0
  471. /package/lib/typescript/{use-refresh-state.d.ts → hooks/use-refresh-state.d.ts} +0 -0
  472. /package/lib/typescript/{use-stack-modifiers.d.ts → hooks/use-stack-modifiers.d.ts} +0 -0
  473. /package/lib/typescript/{ripple-clip.d.ts → utils/ripple-clip.d.ts} +0 -0
  474. /package/lib/typescript/{tap-modifiers.d.ts → utils/tap-modifiers.d.ts} +0 -0
  475. /package/src/{glyph → atoms/glyph}/glyph-button.android.tsx +0 -0
  476. /package/src/{glyph → atoms/glyph}/glyph-button.ios.tsx +0 -0
  477. /package/src/{glyph → atoms/glyph}/glyph-button.types.ts +0 -0
  478. /package/src/{glyph → atoms/glyph}/glyph.android.tsx +0 -0
  479. /package/src/{glyph → atoms/glyph}/glyph.ios.tsx +0 -0
  480. /package/src/{glyph → atoms/glyph}/glyph.types.ts +0 -0
  481. /package/src/{glyph → atoms/glyph}/index.ts +0 -0
  482. /package/src/{glyph → atoms/glyph}/rn-glyph.android.tsx +0 -0
  483. /package/src/{glyph → atoms/glyph}/rn-glyph.ios.tsx +0 -0
  484. /package/src/{host-context.tsx → hooks/host-context.tsx} +0 -0
  485. /package/src/{use-refresh-state.ts → hooks/use-refresh-state.ts} +0 -0
  486. /package/src/{use-stack-modifiers.ts → hooks/use-stack-modifiers.ts} +0 -0
  487. /package/src/{ripple-clip.ts → utils/ripple-clip.ts} +0 -0
  488. /package/src/{tap-modifiers.ts → utils/tap-modifiers.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hzblj/kara-components",
3
- "version": "0.20.1",
3
+ "version": "0.22.0",
4
4
  "description": "The atoms, molecules, organisms and templates of @hzblj/kara-ui — real SwiftUI and Jetpack Compose views through @expo/ui.",
5
5
  "author": "Jan Blazej",
6
6
  "license": "MIT",
@@ -26,6 +26,11 @@
26
26
  "types": "./lib/typescript/index.d.ts",
27
27
  "default": "./lib/module/index.js"
28
28
  },
29
+ "./header": {
30
+ "source": "./src/organisms/header/index.ts",
31
+ "types": "./lib/typescript/organisms/header/index.d.ts",
32
+ "default": "./lib/module/organisms/header/index.js"
33
+ },
29
34
  "./package.json": "./package.json"
30
35
  },
31
36
  "files": [
@@ -61,9 +66,9 @@
61
66
  "dependencies": {
62
67
  "@hzblj/expo-native-icons": "^0.1.0",
63
68
  "@hzblj/expo-rich-haptics": "^0.1.0",
64
- "@hzblj/kara-native": "^0.20.1",
65
- "@hzblj/kara-sx": "^0.20.1",
66
- "@hzblj/kara-theme": "^0.20.1",
69
+ "@hzblj/kara-native": "^0.22.0",
70
+ "@hzblj/kara-sx": "^0.22.0",
71
+ "@hzblj/kara-theme": "^0.22.0",
67
72
  "sf-symbols-typescript": "^2.2.0"
68
73
  },
69
74
  "peerDependencies": {
@@ -73,7 +78,10 @@
73
78
  "expo-image": "*",
74
79
  "react": "*",
75
80
  "react-native": "*",
76
- "react-native-reanimated": ">=4.0.0"
81
+ "react-native-reanimated": ">=4.0.0",
82
+ "react-native-safe-area-context": "*",
83
+ "react-native-screens": "*",
84
+ "react-native-worklets": "*"
77
85
  },
78
86
  "devDependencies": {
79
87
  "@expo/ui": "~57.0.18",
@@ -82,15 +90,26 @@
82
90
  "@types/react": "~19.2.18",
83
91
  "expo": "~57.0.22",
84
92
  "expo-image": "~57.0.5",
93
+ "expo-router": "~57.0.21",
85
94
  "react": "19.2.3",
86
95
  "react-native": "0.86.3",
87
96
  "react-native-builder-bob": "^0.43.0",
88
97
  "react-native-reanimated": "4.5.1",
98
+ "react-native-safe-area-context": "~5.7.0",
99
+ "react-native-screens": "~4.26.0",
89
100
  "react-native-worklets": "0.10.1",
90
101
  "storybook": "^10.6.0",
91
102
  "typescript": "~7.0.2"
92
103
  },
93
104
  "publishConfig": {
94
105
  "access": "public"
106
+ },
107
+ "peerDependenciesMeta": {
108
+ "react-native-safe-area-context": {
109
+ "optional": true
110
+ },
111
+ "react-native-screens": {
112
+ "optional": true
113
+ }
95
114
  }
96
115
  }
@@ -5,7 +5,7 @@ import {useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useMemo} from 'react'
6
6
  import {StyleSheet} from 'react-native'
7
7
 
8
- import {useInsideHost} from '../../host-context'
8
+ import {useInsideHost} from '../../hooks/host-context'
9
9
  import type {ActivityIndicatorComponent, ActivityIndicatorProps} from './activity-indicator.types'
10
10
 
11
11
  /** Material's 48dp for a screen; half of it in a row, about where React Native's small spinner sat. */
@@ -2,7 +2,7 @@ import {RNHostView} from '@expo/ui/swift-ui'
2
2
  import {useAppTheme} from '@hzblj/kara-theme'
3
3
  import {ActivityIndicator as RNActivityIndicator} from 'react-native'
4
4
 
5
- import {useInsideHost} from '../../host-context'
5
+ import {useInsideHost} from '../../hooks/host-context'
6
6
  import type {ActivityIndicatorComponent, ActivityIndicatorProps} from './activity-indicator.types'
7
7
 
8
8
  /**
@@ -2,7 +2,7 @@ import {Badge as ComposeBadge, Text as ComposeText} from '@expo/ui/jetpack-compo
2
2
  import {testID as testIdModifier} from '@expo/ui/jetpack-compose/modifiers'
3
3
  import {useAppTheme} from '@hzblj/kara-theme'
4
4
  import {useMemo} from 'react'
5
- import {useHostGuard} from '../../host-context'
5
+ import {useHostGuard} from '../../hooks/host-context'
6
6
  import type {BadgeComponent, BadgeProps} from './badge.types'
7
7
  import {BADGE_TOKENS} from './badge-tokens'
8
8
 
@@ -1,6 +1,6 @@
1
1
  import {HStack} from '@expo/ui/swift-ui'
2
2
  import {useSxModifiers} from '@hzblj/kara-sx'
3
- import {useHostGuard} from '../../host-context'
3
+ import {useHostGuard} from '../../hooks/host-context'
4
4
  import {Text} from '../text'
5
5
  import type {BadgeComponent, BadgeProps} from './badge.types'
6
6
  import {BADGE_TOKENS} from './badge-tokens'
@@ -3,6 +3,7 @@ import {useSx} from '@hzblj/kara-sx'
3
3
  import {type ColorToken, type OpacitySize, useAppTheme, withOpacity} from '@hzblj/kara-theme'
4
4
  import {useMemo} from 'react'
5
5
  import {StyleSheet} from 'react-native'
6
+ import Animated, {isSharedValue, useAnimatedProps} from 'react-native-reanimated'
6
7
 
7
8
  import type {BlurMaterial, BlurViewComponent, BlurViewProps} from './blur-view.types'
8
9
 
@@ -28,6 +29,8 @@ const MATERIALS: Record<BlurMaterial, MaterialSpec> = {
28
29
  ultraThin: {blur: 20, fill: 'surface.base', opacity: {dark: 'o50', light: 'o25'}, saturation: 1.8},
29
30
  }
30
31
 
32
+ const AnimatedBackdropBlurView = Animated.createAnimatedComponent(BackdropBlurView)
33
+
31
34
  /**
32
35
  * The materials in Android's terms: kara's `BackdropBlurView` — what lies behind, blurred and saturated — under a
33
36
  * Material tonal surface that gets higher and more opaque as the material thickens. Pinned to the appearance the app
@@ -36,6 +39,7 @@ const MATERIALS: Record<BlurMaterial, MaterialSpec> = {
36
39
  export const BlurView: BlurViewComponent = ({
37
40
  appearance,
38
41
  children,
42
+ intensity = 1,
39
43
  material = 'regular',
40
44
  testID,
41
45
  vibrancy: _vibrancy,
@@ -52,12 +56,35 @@ export const BlurView: BlurViewComponent = ({
52
56
  return {cornerRadius: typeof borderRadius === 'number' ? borderRadius : 0, style: rest}
53
57
  }, [resolved])
54
58
 
59
+ const animatedProps = useAnimatedProps(() => ({
60
+ intensity: isSharedValue<number>(intensity) ? intensity.value : intensity,
61
+ }))
62
+ const glassTint = withOpacity(base, spec.opacity[dark ? 'dark' : 'light'])
63
+
64
+ if (isSharedValue<number>(intensity)) {
65
+ return (
66
+ <AnimatedBackdropBlurView
67
+ animatedProps={animatedProps}
68
+ blurRadius={spec.blur}
69
+ cornerRadius={cornerRadius}
70
+ fallbackTint={withOpacity(base, 'o95')}
71
+ glassTint={glassTint}
72
+ saturation={spec.saturation}
73
+ style={style}
74
+ testID={testID}
75
+ >
76
+ {children}
77
+ </AnimatedBackdropBlurView>
78
+ )
79
+ }
80
+
55
81
  return (
56
82
  <BackdropBlurView
57
83
  blurRadius={spec.blur}
58
84
  cornerRadius={cornerRadius}
59
85
  fallbackTint={withOpacity(base, 'o95')}
60
- glassTint={withOpacity(base, spec.opacity[dark ? 'dark' : 'light'])}
86
+ glassTint={glassTint}
87
+ intensity={intensity}
61
88
  saturation={spec.saturation}
62
89
  style={style}
63
90
  testID={testID}
@@ -3,13 +3,17 @@ import {useSx} from '@hzblj/kara-sx'
3
3
  import {useAppTheme} from '@hzblj/kara-theme'
4
4
  import {useMemo} from 'react'
5
5
  import {StyleSheet} from 'react-native'
6
+ import Animated, {isSharedValue, useAnimatedProps} from 'react-native-reanimated'
6
7
 
7
8
  import type {BlurViewComponent, BlurViewProps} from './blur-view.types'
8
9
 
10
+ const AnimatedNativeBlurView = Animated.createAnimatedComponent(NativeBlurView)
11
+
9
12
  /** `borderRadius` is the material's shape, so it goes to the effect view — the one that clips — not the layout box. */
10
13
  export const BlurView: BlurViewComponent = ({
11
14
  appearance,
12
15
  children,
16
+ intensity = 1,
13
17
  material = 'regular',
14
18
  testID,
15
19
  vibrancy,
@@ -22,10 +26,31 @@ export const BlurView: BlurViewComponent = ({
22
26
  return {cornerRadius: typeof borderRadius === 'number' ? borderRadius : 0, style: rest}
23
27
  }, [resolved])
24
28
 
29
+ const animatedProps = useAnimatedProps(() => ({
30
+ intensity: isSharedValue<number>(intensity) ? intensity.value : intensity,
31
+ }))
32
+
33
+ if (isSharedValue<number>(intensity)) {
34
+ return (
35
+ <AnimatedNativeBlurView
36
+ animatedProps={animatedProps}
37
+ colorScheme={appearance ?? (theme.dark ? 'dark' : 'light')}
38
+ cornerRadius={cornerRadius}
39
+ material={material}
40
+ style={style}
41
+ testID={testID}
42
+ vibrancy={vibrancy}
43
+ >
44
+ {children}
45
+ </AnimatedNativeBlurView>
46
+ )
47
+ }
48
+
25
49
  return (
26
50
  <NativeBlurView
27
51
  colorScheme={appearance ?? (theme.dark ? 'dark' : 'light')}
28
52
  cornerRadius={cornerRadius}
53
+ intensity={intensity}
29
54
  material={material}
30
55
  style={style}
31
56
  testID={testID}
@@ -1,6 +1,7 @@
1
1
  import type {BlurMaterial, BlurVibrancy} from '@hzblj/kara-native/swift-ui'
2
2
  import type {ResponsiveViewSx} from '@hzblj/kara-sx'
3
3
  import type {ReactNode} from 'react'
4
+ import type {SharedValue} from 'react-native-reanimated'
4
5
 
5
6
  export type {BlurMaterial, BlurVibrancy} from '@hzblj/kara-native/swift-ui'
6
7
 
@@ -19,6 +20,13 @@ export type BlurViewProps = ResponsiveViewSx & {
19
20
  appearance?: 'dark' | 'light'
20
21
  /** React Native content, over the material. */
21
22
  children?: ReactNode
23
+ /**
24
+ * How far the material has come in, from 0 (none) to 1 (the full material), `1` by default. iOS reaches it the way
25
+ * UIKit fades a material in (a paused effect animation at that fraction), Android scales the blur, the saturation and
26
+ * the surface by it. A shared value animates it on the UI thread, a bar's background fading in as content scrolls
27
+ * under it; a number sets it.
28
+ */
29
+ intensity?: number | SharedValue<number>
22
30
  /** How much of what lies behind shows through, from `ultraThin` (most) to `ultraThick` (least). `regular` by default. */
23
31
  material?: BlurMaterial
24
32
  /** Test identifier, forwarded to the view. */
@@ -9,7 +9,7 @@ import {testID as testIdModifier, width as widthModifier} from '@expo/ui/jetpack
9
9
  import {useAccessibilityModifiers, useSxModifiers} from '@hzblj/kara-sx'
10
10
  import {spacing, useAppTheme} from '@hzblj/kara-theme'
11
11
  import {useMemo} from 'react'
12
- import {useHostGuard} from '../../host-context'
12
+ import {useHostGuard} from '../../hooks/host-context'
13
13
  import {Icon} from '../icon'
14
14
  import type {ButtonComponent, ButtonProps} from './button.types'
15
15
  import {buttonTokens, contentOnTint} from './button-tokens'
@@ -12,7 +12,7 @@ import {
12
12
  import {useAccessibilityModifiers} from '@hzblj/kara-sx'
13
13
  import {type ColorToken, type Theme, useAppTheme} from '@hzblj/kara-theme'
14
14
  import {useMemo} from 'react'
15
- import {useHostGuard} from '../../host-context'
15
+ import {useHostGuard} from '../../hooks/host-context'
16
16
  import {Icon} from '../icon'
17
17
  import {Text} from '../text'
18
18
  import {VStack} from '../v-stack'
@@ -2,7 +2,7 @@ import {Column} from '@expo/ui/jetpack-compose'
2
2
  import {testID as testIdModifier} from '@expo/ui/jetpack-compose/modifiers'
3
3
  import {splitAccessibility, useAccessibilityModifiers, useSxModifiers} from '@hzblj/kara-sx'
4
4
  import {useMemo} from 'react'
5
- import {useHostGuard} from '../../host-context'
5
+ import {useHostGuard} from '../../hooks/host-context'
6
6
  import type {CardComponent, CardProps} from './card.types'
7
7
 
8
8
  export const Card: CardComponent = ({children, testID, ...props}: CardProps) => {
@@ -1,7 +1,7 @@
1
1
  import {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 {CardComponent, CardProps} from './card.types'
6
6
 
7
7
  export const Card: CardComponent = ({children, testID, ...props}: CardProps) => {
@@ -3,7 +3,7 @@ import {clickable, fillMaxWidth, testID as testIdModifier} from '@expo/ui/jetpac
3
3
  import {spacing, 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 {CheckboxComponent, CheckboxProps} from './checkbox.types'
8
8
 
9
9
  /** Stands in for a missing handler: Material drops its 48dp touch target without one, and the box 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 {CheckboxComponent, CheckboxProps} from './checkbox.types'
8
8
 
9
9
  export const Checkbox: CheckboxComponent = ({disabled = false, label, onValueChange, testID, value}: CheckboxProps) => {
@@ -1,6 +1,6 @@
1
1
  import {ColorWell} from '@hzblj/kara-native/jetpack-compose'
2
2
 
3
- import {useHostGuard} from '../../host-context'
3
+ import {useHostGuard} from '../../hooks/host-context'
4
4
  import {HStack} from '../h-stack'
5
5
  import {Spacer} from '../spacer'
6
6
  import {Text} from '../text'
@@ -2,7 +2,7 @@ import {ColorPicker as SwiftUIColorPicker} from '@expo/ui/swift-ui'
2
2
  import {disabled as disabledModifier, labelsHidden, opacity as opacityModifier} from '@expo/ui/swift-ui/modifiers'
3
3
  import {opacity} from '@hzblj/kara-theme'
4
4
 
5
- import {useHostGuard} from '../../host-context'
5
+ import {useHostGuard} from '../../hooks/host-context'
6
6
  import {HStack} from '../h-stack'
7
7
  import {Spacer} from '../spacer'
8
8
  import {Text} from '../text'
@@ -4,7 +4,7 @@ import {alpha, testID as testIdModifier} from '@expo/ui/jetpack-compose/modifier
4
4
  import {opacity, useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useCallback, useMemo, useState} from 'react'
6
6
 
7
- import {useInsideHost} from '../../host-context'
7
+ import {useInsideHost} from '../../hooks/host-context'
8
8
  import {Box} from '../box'
9
9
  import {Pressable} from '../pressable'
10
10
  import {RnText} from '../rn-text'
@@ -8,7 +8,7 @@ import {
8
8
  import {useAppTheme} from '@hzblj/kara-theme'
9
9
  import {useMemo} from 'react'
10
10
 
11
- import {useInsideHost} from '../../host-context'
11
+ import {useInsideHost} from '../../hooks/host-context'
12
12
  import type {DatePickerComponent, DatePickerMode, DatePickerProps} from './date-picker.types'
13
13
 
14
14
  const COMPONENTS = {
@@ -3,7 +3,7 @@ import {testID as testIdModifier} from '@expo/ui/jetpack-compose/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 {DividerComponent, DividerProps} from './divider.types'
8
8
 
9
9
  /**
@@ -3,7 +3,7 @@ import {background} 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 {DividerComponent, DividerProps} from './divider.types'
8
8
 
9
9
  /**
@@ -9,7 +9,7 @@ import {useAccessibilityModifiers} from '@hzblj/kara-sx'
9
9
  import {type SpaceSize, useAppTheme} from '@hzblj/kara-theme'
10
10
  import {useMemo} from 'react'
11
11
 
12
- import {useHostGuard} from '../../host-context'
12
+ import {useHostGuard} from '../../hooks/host-context'
13
13
  import {Icon} from '../icon'
14
14
  import {Text} from '../text'
15
15
  import type {FabComponent, FabProps, FabSize} from './fab.types'
@@ -3,7 +3,7 @@ import {buttonStyle} from '@expo/ui/swift-ui/modifiers'
3
3
  import {type ResponsiveSx, useAccessibilityModifiers, useSxModifiers} from '@hzblj/kara-sx'
4
4
  import type {SpaceSize} 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 {HStack} from '../h-stack'
8
8
  import {Icon} from '../icon'
9
9
  import {Text} from '../text'
@@ -1,7 +1,7 @@
1
1
  import {Row} 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 {HStackAlign, HStackComponent, HStackProps} from './h-stack.types'
6
6
 
7
7
  const ALIGNMENT = {
@@ -2,8 +2,8 @@ import {HStack as SwiftUIHStack} 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 {HStackAlign, HStackComponent, HStackProps} from './h-stack.types'
8
8
 
9
9
  const ALIGNMENT = {
@@ -2,7 +2,7 @@ import {iconResourceName} from '@hzblj/expo-native-icons'
2
2
  import {DrawableIcon} from '@hzblj/kara-native/jetpack-compose'
3
3
  import {spacing, useAppTheme} from '@hzblj/kara-theme'
4
4
 
5
- import {useHostGuard} from '../../host-context'
5
+ import {useHostGuard} from '../../hooks/host-context'
6
6
  import type {IconComponent, IconProps} from './icon.types'
7
7
 
8
8
  /** The app's icon as the vector drawable the config plugin generated from the SVG, drawn by Material's `Icon`. */
@@ -4,7 +4,7 @@ import {iconResourceName} from '@hzblj/expo-native-icons'
4
4
  import {spacing, useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useMemo} from 'react'
6
6
 
7
- import {useHostGuard} from '../../host-context'
7
+ import {useHostGuard} from '../../hooks/host-context'
8
8
  import type {IconComponent, IconProps} from './icon.types'
9
9
 
10
10
  /**
@@ -9,7 +9,7 @@ import {useAccessibilityModifiers} from '@hzblj/kara-sx'
9
9
  import {type ColorToken, useAppTheme} from '@hzblj/kara-theme'
10
10
  import {useMemo} from 'react'
11
11
 
12
- import {useHostGuard} from '../../host-context'
12
+ import {useHostGuard} from '../../hooks/host-context'
13
13
  import {buttonTokens, contentOnTint} from '../button/button-tokens'
14
14
  import {Icon} from '../icon'
15
15
  import type {IconButtonComponent, IconButtonProps, IconButtonVariant} from './icon-button.types'
@@ -12,7 +12,7 @@ import {useAccessibilityModifiers} from '@hzblj/kara-sx'
12
12
  import {type ColorToken, useAppTheme} from '@hzblj/kara-theme'
13
13
  import {useMemo} from 'react'
14
14
 
15
- import {useHostGuard} from '../../host-context'
15
+ import {useHostGuard} from '../../hooks/host-context'
16
16
  import type {ButtonStyleName} from '../button/button.types'
17
17
  import {contentOnTint} from '../button/button-tokens'
18
18
  import {Icon} from '../icon'
@@ -2,7 +2,7 @@ import {Host} from '@expo/ui/jetpack-compose'
2
2
  import {useSx} from '@hzblj/kara-sx'
3
3
  import {useAppTheme} from '@hzblj/kara-theme'
4
4
 
5
- import {HostBoundary} from '../../host-context'
5
+ import {HostBoundary} from '../../hooks/host-context'
6
6
  import type {IslandComponent, IslandProps} from './island.types'
7
7
 
8
8
  const MATCH_HEIGHT_ONLY = {horizontal: false, vertical: true}
@@ -11,6 +11,7 @@ const MATCH_NEITHER = {horizontal: false, vertical: false}
11
11
 
12
12
  export const Island: IslandComponent = ({
13
13
  children,
14
+ ignoreSafeArea = 'keyboard',
14
15
  matchContents = true,
15
16
  style,
16
17
  testID: _testID,
@@ -22,6 +23,7 @@ export const Island: IslandComponent = ({
22
23
  return (
23
24
  <Host
24
25
  colorScheme={theme.dark ? 'dark' : 'light'}
26
+ ignoreSafeAreaKeyboardInsets={ignoreSafeArea === 'all' || ignoreSafeArea === 'keyboard'}
25
27
  matchContents={matchContents ? MATCH_HEIGHT_ONLY : MATCH_NEITHER}
26
28
  seedColor={theme.materialSeed}
27
29
  style={style ? [resolved, style] : resolved}
@@ -3,7 +3,7 @@ import {dynamicTypeSize} from '@expo/ui/swift-ui/modifiers'
3
3
  import {useSx} from '@hzblj/kara-sx'
4
4
  import {MAX_DYNAMIC_TYPE_SIZE, useAppTheme} from '@hzblj/kara-theme'
5
5
 
6
- import {HostBoundary} from '../../host-context'
6
+ import {HostBoundary} from '../../hooks/host-context'
7
7
  import type {IslandComponent, IslandProps} from './island.types'
8
8
 
9
9
  const DYNAMIC_TYPE_CAP = [dynamicTypeSize({max: MAX_DYNAMIC_TYPE_SIZE})]
@@ -12,13 +12,21 @@ const MATCH_HEIGHT_ONLY = {horizontal: false, vertical: true}
12
12
 
13
13
  const MATCH_NEITHER = {horizontal: false, vertical: false}
14
14
 
15
- export const Island: IslandComponent = ({children, matchContents = true, style, testID, ...sx}: IslandProps) => {
15
+ export const Island: IslandComponent = ({
16
+ children,
17
+ ignoreSafeArea = 'keyboard',
18
+ matchContents = true,
19
+ style,
20
+ testID,
21
+ ...sx
22
+ }: IslandProps) => {
16
23
  const theme = useAppTheme()
17
24
  const resolved = useSx(sx)
18
25
 
19
26
  return (
20
27
  <Host
21
28
  colorScheme={theme.dark ? 'dark' : 'light'}
29
+ ignoreSafeArea={ignoreSafeArea === 'none' ? undefined : ignoreSafeArea}
22
30
  matchContents={matchContents ? MATCH_HEIGHT_ONLY : MATCH_NEITHER}
23
31
  modifiers={DYNAMIC_TYPE_CAP}
24
32
  seedColor={theme.materialSeed}
@@ -2,6 +2,18 @@ import type {ResponsiveViewSx} from '@hzblj/kara-sx'
2
2
  import type {ReactNode} from 'react'
3
3
  import type {StyleProp, ViewStyle} from 'react-native'
4
4
 
5
+ /**
6
+ * Which of the system's insets a host's native content ignores, the same on both platforms:
7
+ * - `none`: it keeps clear of every one (SwiftUI's own behaviour);
8
+ * - `keyboard`: it stays put when the keyboard opens, for content whose React Native layout handles the keyboard;
9
+ * - `container`: iOS: it runs under the status bar and the home indicator but still moves for the keyboard; Android
10
+ * has nothing to ignore there, so it is `none`;
11
+ * - `all`: both.
12
+ *
13
+ * Android ignores only the keyboard (Compose's `Host` has nothing else to ignore), and reads it once, on mount.
14
+ */
15
+ export type IgnoredSafeArea = 'all' | 'container' | 'keyboard' | 'none'
16
+
5
17
  /**
6
18
  * A host for native atoms in a React Native layout: the SwiftUI / Compose `Host` an `@expo/ui` tree mounts into. It
7
19
  * sits in that layout like a `Box`, and takes `Box`'s `sx` props for it: `h`, `flex`, margins.
@@ -9,6 +21,12 @@ import type {StyleProp, ViewStyle} from 'react-native'
9
21
  export type IslandProps = ResponsiveViewSx & {
10
22
  /** The native views it hosts. */
11
23
  children?: ReactNode
24
+ /**
25
+ * Which insets the native content ignores. `keyboard` by default: an island sits in a React Native layout, which
26
+ * moves it for the keyboard itself, and SwiftUI would otherwise also lift the content inside it. See
27
+ * `IgnoredSafeArea`.
28
+ */
29
+ ignoreSafeArea?: IgnoredSafeArea
12
30
  /**
13
31
  * Sizes the island's height to its native content while the width still comes from the parent, which
14
32
  * is what a full-width card wants. On by default. Only the height is ever measured: auto-sizing the
@@ -3,8 +3,8 @@ import {testID as testIdModifier} from '@expo/ui/jetpack-compose/modifiers'
3
3
  import {useSxModifiers} from '@hzblj/kara-sx'
4
4
  import {spacing} from '@hzblj/kara-theme'
5
5
  import {Children, Fragment, isValidElement, useMemo} from 'react'
6
- import {useHostGuard} from '../../host-context'
7
- import {useRefreshState} from '../../use-refresh-state'
6
+ import {useHostGuard} from '../../hooks/host-context'
7
+ import {useRefreshState} from '../../hooks/use-refresh-state'
8
8
  import {Card} from '../card'
9
9
  import {Divider} from '../divider'
10
10
  import type {ListComponent, ListProps} from './list.types'
@@ -2,7 +2,7 @@ import {Group, List as SwiftUIList} from '@expo/ui/swift-ui'
2
2
  import {listRowSeparator, listStyle, type ModifierConfig, refreshable} from '@expo/ui/swift-ui/modifiers'
3
3
  import {useMemo} from 'react'
4
4
 
5
- import {useHostGuard} from '../../host-context'
5
+ import {useHostGuard} from '../../hooks/host-context'
6
6
  import type {ListComponent, ListProps} from './list.types'
7
7
 
8
8
  /**
@@ -10,9 +10,8 @@ import {
10
10
  import {fillMaxWidth, menuAnchor, testID as testIdModifier} from '@expo/ui/jetpack-compose/modifiers'
11
11
  import {useAppTheme} from '@hzblj/kara-theme'
12
12
  import {useEffect, useMemo, useState} from 'react'
13
-
14
- import {Glyph} from '../../glyph'
15
- import {HostBoundary, useInsideHost} from '../../host-context'
13
+ import {HostBoundary, useInsideHost} from '../../hooks/host-context'
14
+ import {Glyph} from '../glyph'
16
15
  import type {PickerComponent, PickerProps} from './picker.types'
17
16
 
18
17
  const MATCH_HEIGHT_ONLY = {horizontal: false, vertical: true}
@@ -10,7 +10,7 @@ import {
10
10
  import {useAppTheme} from '@hzblj/kara-theme'
11
11
  import {useCallback, useMemo} from 'react'
12
12
 
13
- import {useInsideHost} from '../../host-context'
13
+ import {useInsideHost} from '../../hooks/host-context'
14
14
  import type {PickerComponent, PickerProps} from './picker.types'
15
15
 
16
16
  /**
@@ -14,7 +14,7 @@ import {useCallback, useMemo} from 'react'
14
14
  import {Platform, Pressable as RNPressable, type ViewStyle} from 'react-native'
15
15
  import Animated, {useAnimatedStyle, useSharedValue, withSpring, withTiming} from 'react-native-reanimated'
16
16
 
17
- import {splitForRipple} from '../../ripple-clip'
17
+ import {splitForRipple} from '../../utils/ripple-clip'
18
18
  import type {PressableComponent, PressableProps} from './pressable.types'
19
19
 
20
20
  /**
@@ -4,7 +4,7 @@ import {useAccessibilityModifiers} from '@hzblj/kara-sx'
4
4
  import {useAppTheme, withOpacity} from '@hzblj/kara-theme'
5
5
  import {useMemo} from 'react'
6
6
 
7
- import {useHostGuard} from '../../host-context'
7
+ import {useHostGuard} from '../../hooks/host-context'
8
8
  import type {ProgressComponent, ProgressProps} from './progress.types'
9
9
 
10
10
  /**
@@ -4,7 +4,7 @@ import {useAccessibilityModifiers} from '@hzblj/kara-sx'
4
4
  import {useAppTheme} from '@hzblj/kara-theme'
5
5
  import {useMemo} from 'react'
6
6
 
7
- import {useHostGuard} from '../../host-context'
7
+ import {useHostGuard} from '../../hooks/host-context'
8
8
  import type {ProgressComponent, ProgressProps} from './progress.types'
9
9
 
10
10
  export const Progress: ProgressComponent = ({
@@ -8,8 +8,8 @@ import {
8
8
  import {useSxModifiers} from '@hzblj/kara-sx'
9
9
  import {spacing} from '@hzblj/kara-theme'
10
10
  import {useMemo} from 'react'
11
- import {useHostGuard} from '../../host-context'
12
- import {useRefreshState} from '../../use-refresh-state'
11
+ import {useHostGuard} from '../../hooks/host-context'
12
+ import {useRefreshState} from '../../hooks/use-refresh-state'
13
13
  import type {ScrollViewComponent, ScrollViewProps} from './scroll-view.types'
14
14
 
15
15
  export const ScrollView: ScrollViewComponent = ({