@hzblj/kara-components 0.9.0 → 0.11.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 (281) hide show
  1. package/CHANGELOG.md +72 -28
  2. package/README.md +8 -8
  3. package/lib/module/atoms/activity-indicator/activity-indicator.android.js +6 -1
  4. package/lib/module/atoms/activity-indicator/activity-indicator.android.js.map +1 -1
  5. package/lib/module/atoms/activity-indicator/activity-indicator.ios.js +2 -0
  6. package/lib/module/atoms/activity-indicator/activity-indicator.ios.js.map +1 -1
  7. package/lib/module/atoms/avatar/avatar.js +5 -0
  8. package/lib/module/atoms/avatar/avatar.js.map +1 -1
  9. package/lib/module/atoms/button/button-tokens.js +2 -2
  10. package/lib/module/atoms/button/button-tokens.js.map +1 -1
  11. package/lib/module/atoms/button/button.android.js +6 -2
  12. package/lib/module/atoms/button/button.android.js.map +1 -1
  13. package/lib/module/atoms/button/button.ios.js +7 -2
  14. package/lib/module/atoms/button/button.ios.js.map +1 -1
  15. package/lib/module/atoms/card/card.android.js +5 -3
  16. package/lib/module/atoms/card/card.android.js.map +1 -1
  17. package/lib/module/atoms/card/card.ios.js +7 -3
  18. package/lib/module/atoms/card/card.ios.js.map +1 -1
  19. package/lib/module/atoms/checkbox/checkbox.android.js +1 -1
  20. package/lib/module/atoms/checkbox/checkbox.android.js.map +1 -1
  21. package/lib/module/atoms/color-picker/color-picker.android.js +32 -5
  22. package/lib/module/atoms/color-picker/color-picker.android.js.map +1 -1
  23. package/lib/module/atoms/fab/fab.android.js +9 -1
  24. package/lib/module/atoms/fab/fab.android.js.map +1 -1
  25. package/lib/module/atoms/fab/fab.ios.js +9 -3
  26. package/lib/module/atoms/fab/fab.ios.js.map +1 -1
  27. package/lib/module/atoms/glass-view/glass-view.android.js +1 -1
  28. package/lib/module/atoms/glass-view/glass-view.android.js.map +1 -1
  29. package/lib/module/atoms/h-stack/h-stack.ios.js +5 -3
  30. package/lib/module/atoms/h-stack/h-stack.ios.js.map +1 -1
  31. package/lib/module/atoms/icon-button/icon-button.android.js +9 -0
  32. package/lib/module/atoms/icon-button/icon-button.android.js.map +1 -1
  33. package/lib/module/atoms/icon-button/icon-button.ios.js +26 -6
  34. package/lib/module/atoms/icon-button/icon-button.ios.js.map +1 -1
  35. package/lib/module/atoms/image/image.js +4 -4
  36. package/lib/module/atoms/image/image.js.map +1 -1
  37. package/lib/module/atoms/pressable/pressable.js +52 -28
  38. package/lib/module/atoms/pressable/pressable.js.map +1 -1
  39. package/lib/module/atoms/progress/progress.android.js +7 -0
  40. package/lib/module/atoms/progress/progress.android.js.map +1 -1
  41. package/lib/module/atoms/progress/progress.ios.js +6 -1
  42. package/lib/module/atoms/progress/progress.ios.js.map +1 -1
  43. package/lib/module/atoms/segmented-control/segmented-control.android.js +1 -1
  44. package/lib/module/atoms/segmented-control/segmented-control.android.js.map +1 -1
  45. package/lib/module/atoms/segmented-control/segmented-control.ios.js +1 -1
  46. package/lib/module/atoms/segmented-control/segmented-control.ios.js.map +1 -1
  47. package/lib/module/atoms/skeleton/skeleton.js +20 -6
  48. package/lib/module/atoms/skeleton/skeleton.js.map +1 -1
  49. package/lib/module/atoms/surface/surface.android.js +5 -3
  50. package/lib/module/atoms/surface/surface.android.js.map +1 -1
  51. package/lib/module/atoms/surface/surface.ios.js +7 -3
  52. package/lib/module/atoms/surface/surface.ios.js.map +1 -1
  53. package/lib/module/atoms/switch/switch.android.js +1 -1
  54. package/lib/module/atoms/switch/switch.android.js.map +1 -1
  55. package/lib/module/atoms/text/text.android.js +5 -3
  56. package/lib/module/atoms/text/text.android.js.map +1 -1
  57. package/lib/module/atoms/text/text.ios.js +6 -4
  58. package/lib/module/atoms/text/text.ios.js.map +1 -1
  59. package/lib/module/atoms/v-stack/v-stack.ios.js +5 -3
  60. package/lib/module/atoms/v-stack/v-stack.ios.js.map +1 -1
  61. package/lib/module/atoms/z-stack/z-stack.ios.js +5 -3
  62. package/lib/module/atoms/z-stack/z-stack.ios.js.map +1 -1
  63. package/lib/module/glyph/glyph.android.js +2 -0
  64. package/lib/module/glyph/glyph.android.js.map +1 -1
  65. package/lib/module/glyph/glyph.ios.js +5 -2
  66. package/lib/module/glyph/glyph.ios.js.map +1 -1
  67. package/lib/module/molecules/collapsible/collapsible.android.js +18 -8
  68. package/lib/module/molecules/collapsible/collapsible.android.js.map +1 -1
  69. package/lib/module/molecules/labeled-content/labeled-content.js +4 -1
  70. package/lib/module/molecules/labeled-content/labeled-content.js.map +1 -1
  71. package/lib/module/molecules/link/link.js +4 -1
  72. package/lib/module/molecules/link/link.js.map +1 -1
  73. package/lib/module/molecules/list-item/list-item.js +4 -1
  74. package/lib/module/molecules/list-item/list-item.js.map +1 -1
  75. package/lib/module/molecules/navigation-bar/navigation-bar.android.js +1 -1
  76. package/lib/module/molecules/navigation-bar/navigation-bar.android.js.map +1 -1
  77. package/lib/module/molecules/navigation-bar/navigation-bar.ios.js +1 -1
  78. package/lib/module/molecules/navigation-bar/navigation-bar.ios.js.map +1 -1
  79. package/lib/module/molecules/rn-list-item/rn-list-item.js +10 -2
  80. package/lib/module/molecules/rn-list-item/rn-list-item.js.map +1 -1
  81. package/lib/module/molecules/scroll-edge-container/scroll-edge-container.android.js +3 -4
  82. package/lib/module/molecules/scroll-edge-container/scroll-edge-container.android.js.map +1 -1
  83. package/lib/module/molecules/stepper/stepper.ios.js +6 -2
  84. package/lib/module/molecules/stepper/stepper.ios.js.map +1 -1
  85. package/lib/module/motion.js +19 -0
  86. package/lib/module/motion.js.map +1 -0
  87. package/lib/module/organisms/fab-menu/fab-menu.android.js +8 -5
  88. package/lib/module/organisms/fab-menu/fab-menu.android.js.map +1 -1
  89. package/lib/module/organisms/fab-menu/fab-menu.ios.js +5 -2
  90. package/lib/module/organisms/fab-menu/fab-menu.ios.js.map +1 -1
  91. package/lib/module/organisms/snackbar/snackbar.js +142 -17
  92. package/lib/module/organisms/snackbar/snackbar.js.map +1 -1
  93. package/lib/module/organisms/swipe-actions/swipe-actions.android.js +1 -1
  94. package/lib/module/organisms/swipe-actions/swipe-actions.android.js.map +1 -1
  95. package/lib/module/use-stack-modifiers.js +10 -8
  96. package/lib/module/use-stack-modifiers.js.map +1 -1
  97. package/lib/typescript/atoms/activity-indicator/activity-indicator.types.d.ts +3 -1
  98. package/lib/typescript/atoms/avatar/avatar.types.d.ts +7 -2
  99. package/lib/typescript/atoms/badge/badge.types.d.ts +1 -1
  100. package/lib/typescript/atoms/blur-view/blur-view.types.d.ts +6 -6
  101. package/lib/typescript/atoms/button/button-tokens.d.ts +1 -1
  102. package/lib/typescript/atoms/button/button.types.d.ts +9 -7
  103. package/lib/typescript/atoms/card/card.types.d.ts +3 -3
  104. package/lib/typescript/atoms/checkbox/checkbox.types.d.ts +2 -2
  105. package/lib/typescript/atoms/chip/chip.types.d.ts +1 -1
  106. package/lib/typescript/atoms/color-picker/color-picker.types.d.ts +4 -3
  107. package/lib/typescript/atoms/date-picker/date-picker.types.d.ts +4 -4
  108. package/lib/typescript/atoms/divider/divider.types.d.ts +2 -2
  109. package/lib/typescript/atoms/fab/fab.types.d.ts +10 -3
  110. package/lib/typescript/atoms/glass-view/glass-view.types.d.ts +5 -5
  111. package/lib/typescript/atoms/h-stack/h-stack.types.d.ts +8 -5
  112. package/lib/typescript/atoms/icon/icon.types.d.ts +4 -4
  113. package/lib/typescript/atoms/icon-button/icon-button.types.d.ts +14 -3
  114. package/lib/typescript/atoms/image/image.d.ts +2 -2
  115. package/lib/typescript/atoms/island/island.types.d.ts +4 -4
  116. package/lib/typescript/atoms/list/list.types.d.ts +5 -5
  117. package/lib/typescript/atoms/picker/picker.types.d.ts +1 -1
  118. package/lib/typescript/atoms/pressable/pressable.types.d.ts +23 -7
  119. package/lib/typescript/atoms/progress/progress.types.d.ts +3 -1
  120. package/lib/typescript/atoms/rn-flat-list/rn-flat-list.types.d.ts +2 -2
  121. package/lib/typescript/atoms/rn-icon/rn-icon.types.d.ts +1 -1
  122. package/lib/typescript/atoms/rn-scroll-view/rn-scroll-view.types.d.ts +2 -2
  123. package/lib/typescript/atoms/rn-section-list/rn-section-list.types.d.ts +2 -2
  124. package/lib/typescript/atoms/rn-text/rn-text.types.d.ts +2 -2
  125. package/lib/typescript/atoms/rn-view/rn-view.types.d.ts +3 -3
  126. package/lib/typescript/atoms/scroll-view/scroll-view.types.d.ts +3 -3
  127. package/lib/typescript/atoms/segmented-control/segmented-control.types.d.ts +3 -3
  128. package/lib/typescript/atoms/skeleton/skeleton.types.d.ts +2 -1
  129. package/lib/typescript/atoms/spacer/spacer.types.d.ts +1 -1
  130. package/lib/typescript/atoms/surface/surface.types.d.ts +3 -3
  131. package/lib/typescript/atoms/switch/switch.types.d.ts +1 -1
  132. package/lib/typescript/atoms/text/text.types.d.ts +3 -3
  133. package/lib/typescript/atoms/text-field/text-field.types.d.ts +4 -4
  134. package/lib/typescript/atoms/v-stack/v-stack.types.d.ts +4 -4
  135. package/lib/typescript/atoms/z-stack/z-stack.types.d.ts +4 -4
  136. package/lib/typescript/glyph/glyph-button.types.d.ts +1 -1
  137. package/lib/typescript/glyph/glyph.types.d.ts +3 -1
  138. package/lib/typescript/molecules/collapsible/collapsible.types.d.ts +1 -1
  139. package/lib/typescript/molecules/empty-state/empty-state.types.d.ts +1 -1
  140. package/lib/typescript/molecules/label/label.types.d.ts +1 -1
  141. package/lib/typescript/molecules/labeled-content/labeled-content.types.d.ts +6 -4
  142. package/lib/typescript/molecules/link/link.types.d.ts +2 -1
  143. package/lib/typescript/molecules/list-item/list-item.types.d.ts +6 -4
  144. package/lib/typescript/molecules/navigation-bar/navigation-bar.types.d.ts +8 -8
  145. package/lib/typescript/molecules/pager/pager.types.d.ts +2 -2
  146. package/lib/typescript/molecules/radio-group/radio-group.types.d.ts +2 -2
  147. package/lib/typescript/molecules/rn-list-item/rn-list-item.types.d.ts +1 -1
  148. package/lib/typescript/molecules/rn-tooltip/rn-tooltip.types.d.ts +7 -7
  149. package/lib/typescript/molecules/scroll-edge-container/scroll-edge-container.types.d.ts +3 -3
  150. package/lib/typescript/molecules/search-bar/search-bar.types.d.ts +2 -2
  151. package/lib/typescript/molecules/stepper/stepper.ios.d.ts +1 -1
  152. package/lib/typescript/molecules/stepper/stepper.types.d.ts +2 -2
  153. package/lib/typescript/molecules/tooltip/tooltip.types.d.ts +6 -6
  154. package/lib/typescript/motion.d.ts +8 -0
  155. package/lib/typescript/organisms/action-sheet/action-sheet.types.d.ts +3 -3
  156. package/lib/typescript/organisms/alert/alert.types.d.ts +3 -3
  157. package/lib/typescript/organisms/context-menu/context-menu.types.d.ts +9 -9
  158. package/lib/typescript/organisms/fab-menu/fab-menu.types.d.ts +10 -5
  159. package/lib/typescript/organisms/form/form.types.d.ts +1 -1
  160. package/lib/typescript/organisms/menu/menu.types.d.ts +2 -2
  161. package/lib/typescript/organisms/sheet/sheet.types.d.ts +12 -12
  162. package/lib/typescript/organisms/snackbar/snackbar.types.d.ts +39 -6
  163. package/lib/typescript/organisms/swipe-actions/swipe-actions.types.d.ts +5 -5
  164. package/lib/typescript/templates/screen/screen.types.d.ts +2 -2
  165. package/lib/typescript/use-stack-modifiers.d.ts +6 -5
  166. package/package.json +4 -4
  167. package/src/atoms/activity-indicator/activity-indicator.android.tsx +7 -1
  168. package/src/atoms/activity-indicator/activity-indicator.ios.tsx +9 -1
  169. package/src/atoms/activity-indicator/activity-indicator.types.ts +3 -1
  170. package/src/atoms/avatar/avatar.tsx +5 -1
  171. package/src/atoms/avatar/avatar.types.ts +7 -2
  172. package/src/atoms/badge/badge.types.ts +1 -1
  173. package/src/atoms/blur-view/blur-view.types.ts +6 -6
  174. package/src/atoms/button/button-tokens.ts +2 -2
  175. package/src/atoms/button/button.android.tsx +5 -3
  176. package/src/atoms/button/button.ios.tsx +10 -2
  177. package/src/atoms/button/button.types.ts +9 -7
  178. package/src/atoms/card/card.android.tsx +6 -4
  179. package/src/atoms/card/card.ios.tsx +7 -3
  180. package/src/atoms/card/card.types.ts +9 -8
  181. package/src/atoms/checkbox/checkbox.android.tsx +1 -1
  182. package/src/atoms/checkbox/checkbox.types.ts +2 -2
  183. package/src/atoms/chip/chip.types.ts +1 -1
  184. package/src/atoms/color-picker/color-picker.android.tsx +26 -6
  185. package/src/atoms/color-picker/color-picker.types.ts +4 -3
  186. package/src/atoms/date-picker/date-picker.types.ts +4 -4
  187. package/src/atoms/divider/divider.types.ts +2 -2
  188. package/src/atoms/fab/fab.android.tsx +5 -3
  189. package/src/atoms/fab/fab.ios.tsx +8 -4
  190. package/src/atoms/fab/fab.types.ts +10 -3
  191. package/src/atoms/glass-view/glass-view.android.tsx +1 -1
  192. package/src/atoms/glass-view/glass-view.types.ts +5 -5
  193. package/src/atoms/h-stack/h-stack.ios.tsx +6 -4
  194. package/src/atoms/h-stack/h-stack.types.ts +18 -14
  195. package/src/atoms/icon/icon.types.ts +4 -4
  196. package/src/atoms/icon-button/icon-button.android.tsx +16 -3
  197. package/src/atoms/icon-button/icon-button.ios.tsx +24 -5
  198. package/src/atoms/icon-button/icon-button.types.ts +14 -3
  199. package/src/atoms/image/image.tsx +3 -3
  200. package/src/atoms/island/island.types.ts +4 -4
  201. package/src/atoms/list/list.types.ts +5 -5
  202. package/src/atoms/picker/picker.types.ts +1 -1
  203. package/src/atoms/pressable/pressable.tsx +50 -21
  204. package/src/atoms/pressable/pressable.types.ts +35 -17
  205. package/src/atoms/progress/progress.android.tsx +5 -3
  206. package/src/atoms/progress/progress.ios.tsx +5 -2
  207. package/src/atoms/progress/progress.types.ts +3 -1
  208. package/src/atoms/rn-flat-list/rn-flat-list.types.ts +2 -2
  209. package/src/atoms/rn-icon/rn-icon.types.ts +1 -1
  210. package/src/atoms/rn-scroll-view/rn-scroll-view.types.ts +2 -2
  211. package/src/atoms/rn-section-list/rn-section-list.types.ts +2 -2
  212. package/src/atoms/rn-text/rn-text.types.ts +2 -2
  213. package/src/atoms/rn-view/rn-view.types.ts +3 -3
  214. package/src/atoms/scroll-view/scroll-view.types.ts +3 -3
  215. package/src/atoms/segmented-control/segmented-control.android.tsx +1 -1
  216. package/src/atoms/segmented-control/segmented-control.ios.tsx +1 -1
  217. package/src/atoms/segmented-control/segmented-control.types.ts +3 -3
  218. package/src/atoms/skeleton/skeleton.tsx +18 -4
  219. package/src/atoms/skeleton/skeleton.types.ts +2 -1
  220. package/src/atoms/spacer/spacer.types.ts +1 -1
  221. package/src/atoms/surface/surface.android.tsx +6 -4
  222. package/src/atoms/surface/surface.ios.tsx +7 -3
  223. package/src/atoms/surface/surface.types.ts +11 -10
  224. package/src/atoms/switch/switch.android.tsx +1 -1
  225. package/src/atoms/switch/switch.types.ts +1 -1
  226. package/src/atoms/text/text.android.tsx +6 -4
  227. package/src/atoms/text/text.ios.tsx +6 -4
  228. package/src/atoms/text/text.types.ts +24 -23
  229. package/src/atoms/text-field/text-field.types.ts +4 -4
  230. package/src/atoms/v-stack/v-stack.ios.tsx +6 -4
  231. package/src/atoms/v-stack/v-stack.types.ts +18 -17
  232. package/src/atoms/z-stack/z-stack.ios.tsx +6 -4
  233. package/src/atoms/z-stack/z-stack.types.ts +16 -15
  234. package/src/glyph/glyph-button.types.ts +1 -1
  235. package/src/glyph/glyph.android.tsx +14 -2
  236. package/src/glyph/glyph.ios.tsx +13 -3
  237. package/src/glyph/glyph.types.ts +3 -1
  238. package/src/molecules/collapsible/collapsible.android.tsx +27 -7
  239. package/src/molecules/collapsible/collapsible.types.ts +1 -1
  240. package/src/molecules/empty-state/empty-state.types.ts +1 -1
  241. package/src/molecules/label/label.types.ts +1 -1
  242. package/src/molecules/labeled-content/labeled-content.tsx +12 -1
  243. package/src/molecules/labeled-content/labeled-content.types.ts +6 -4
  244. package/src/molecules/link/link.tsx +2 -1
  245. package/src/molecules/link/link.types.ts +2 -1
  246. package/src/molecules/list-item/list-item.tsx +20 -2
  247. package/src/molecules/list-item/list-item.types.ts +6 -4
  248. package/src/molecules/navigation-bar/navigation-bar.android.tsx +1 -1
  249. package/src/molecules/navigation-bar/navigation-bar.ios.tsx +1 -1
  250. package/src/molecules/navigation-bar/navigation-bar.types.ts +8 -8
  251. package/src/molecules/pager/pager.types.ts +2 -2
  252. package/src/molecules/radio-group/radio-group.types.ts +2 -2
  253. package/src/molecules/rn-list-item/rn-list-item.tsx +18 -3
  254. package/src/molecules/rn-list-item/rn-list-item.types.ts +1 -1
  255. package/src/molecules/rn-tooltip/rn-tooltip.types.ts +7 -7
  256. package/src/molecules/scroll-edge-container/scroll-edge-container.android.tsx +3 -2
  257. package/src/molecules/scroll-edge-container/scroll-edge-container.types.ts +3 -3
  258. package/src/molecules/search-bar/search-bar.types.ts +2 -2
  259. package/src/molecules/stepper/stepper.ios.tsx +8 -2
  260. package/src/molecules/stepper/stepper.types.ts +2 -2
  261. package/src/molecules/tooltip/tooltip.types.ts +6 -6
  262. package/src/motion.ts +13 -0
  263. package/src/organisms/action-sheet/action-sheet.types.ts +3 -3
  264. package/src/organisms/alert/alert.types.ts +3 -3
  265. package/src/organisms/context-menu/context-menu.types.ts +9 -9
  266. package/src/organisms/fab-menu/fab-menu.android.tsx +9 -5
  267. package/src/organisms/fab-menu/fab-menu.ios.tsx +6 -2
  268. package/src/organisms/fab-menu/fab-menu.types.ts +10 -5
  269. package/src/organisms/form/form.types.ts +1 -1
  270. package/src/organisms/menu/menu.types.ts +2 -2
  271. package/src/organisms/sheet/sheet.types.ts +12 -12
  272. package/src/organisms/snackbar/snackbar.tsx +143 -19
  273. package/src/organisms/snackbar/snackbar.types.ts +42 -6
  274. package/src/organisms/swipe-actions/swipe-actions.android.tsx +1 -1
  275. package/src/organisms/swipe-actions/swipe-actions.types.ts +5 -5
  276. package/src/templates/screen/screen.types.ts +2 -2
  277. package/src/use-stack-modifiers.ts +20 -7
  278. package/lib/module/platform-support.js +0 -19
  279. package/lib/module/platform-support.js.map +0 -1
  280. package/lib/typescript/platform-support.d.ts +0 -8
  281. package/src/platform-support.ts +0 -20
@@ -1 +1 @@
1
- {"version":3,"names":["FilledIconButton","size","SwipeActionsBox","spacing","useAppTheme","useCallback","useEffect","useId","useState","useSyncExternalStore","HStack","Icon","Text","VStack","useHostGuard","jsx","_jsx","jsxs","_jsxs","BUTTON","openRow","listeners","Set","setOpenRow","row","listener","subscribe","add","delete","getOpenRow","ActionButton","action","onDone","theme","fill","tint","destructive","content","onClick","onPress","align","children","colors","containerColor","color","contentColor","modifiers","accessibilityLabel","label","name","icon","variant","Actions","actions","map","close","SwipeActions","leading","trailing","isOpenRow","edge","setEdge","onOpenChange","next","actionsSpacing","s12","openEdge","length","Leading","Trailing","reverse"],"sourceRoot":"../../../../src","sources":["organisms/swipe-actions/swipe-actions.android.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["FilledIconButton","size","SwipeActionsBox","spacing","useAppTheme","useCallback","useEffect","useId","useState","useSyncExternalStore","HStack","Icon","Text","VStack","useHostGuard","jsx","_jsx","jsxs","_jsxs","BUTTON","openRow","listeners","Set","setOpenRow","row","listener","subscribe","add","delete","getOpenRow","ActionButton","action","onDone","theme","fill","tint","destructive","content","onClick","onPress","align","children","colors","containerColor","color","contentColor","modifiers","accessibilityLabel","label","name","icon","variant","Actions","actions","map","close","SwipeActions","leading","trailing","isOpenRow","edge","setEdge","onOpenChange","next","actionsSpacing","s12","openEdge","length","Leading","Trailing","reverse"],"sourceRoot":"../../../../src","sources":["organisms/swipe-actions/swipe-actions.android.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,16 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  import { clickable, testID as testIdModifier } from '@expo/ui/jetpack-compose/modifiers';
4
- import { useSxModifiers } from '@hzblj/kara-sx';
4
+ import { splitAccessibility, useAccessibilityModifiers, useSxModifiers } from '@hzblj/kara-sx';
5
5
  import { useMemo } from 'react';
6
6
 
7
7
  /**
8
- * A Compose stack's modifiers in the order a pressable one needs: its frame, shape and background, then the press,
9
- * then its padding. Compose clips a `clickable` to what comes after it, so with the padding first the ripple would stop
10
- * at the padding and a row pressed by its edge would light up only in the middle.
8
+ * A Compose stack's modifiers in the order a pressable one needs: its frame, shape and background, then the press, its
9
+ * semantics, then its padding. Compose clips a `clickable` to what comes after it, so with the padding first the ripple
10
+ * would stop at the padding and a row pressed by its edge would light up only in the middle. The semantics come after
11
+ * the click, because a label that replaces the children's clears whatever semantics are inside it.
11
12
  */
12
- export const useStackModifiers = (sx, onPress, testID) => {
13
- const {
13
+ export const useStackModifiers = (props, onPress, testID) => {
14
+ const [accessibility, {
14
15
  p,
15
16
  pb,
16
17
  pl,
@@ -19,7 +20,7 @@ export const useStackModifiers = (sx, onPress, testID) => {
19
20
  px,
20
21
  py,
21
22
  ...frame
22
- } = sx;
23
+ }] = splitAccessibility(props);
23
24
  const frameModifiers = useSxModifiers(frame);
24
25
  const paddingModifiers = useSxModifiers({
25
26
  p,
@@ -30,6 +31,7 @@ export const useStackModifiers = (sx, onPress, testID) => {
30
31
  px,
31
32
  py
32
33
  });
33
- return useMemo(() => [...frameModifiers, ...(testID ? [testIdModifier(testID)] : []), ...(onPress ? [clickable(onPress)] : []), ...paddingModifiers], [frameModifiers, onPress, paddingModifiers, testID]);
34
+ const accessibilityModifiers = useAccessibilityModifiers(accessibility, onPress !== undefined);
35
+ return useMemo(() => [...frameModifiers, ...(testID ? [testIdModifier(testID)] : []), ...(onPress ? [clickable(onPress)] : []), ...accessibilityModifiers, ...paddingModifiers], [accessibilityModifiers, frameModifiers, onPress, paddingModifiers, testID]);
34
36
  };
35
37
  //# sourceMappingURL=use-stack-modifiers.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["clickable","testID","testIdModifier","useSxModifiers","useMemo","useStackModifiers","sx","onPress","p","pb","pl","pr","pt","px","py","frame","frameModifiers","paddingModifiers"],"sourceRoot":"../../src","sources":["use-stack-modifiers.ts"],"mappings":";;AAAA,SAAQA,SAAS,EAAuBC,MAAM,IAAIC,cAAc,QAAO,oCAAoC;AAC3G,SAA2BC,cAAc,QAAO,gBAAgB;AAChE,SAAQC,OAAO,QAAO,OAAO;;AAE7B;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAACC,EAAgB,EAAEC,OAAoB,EAAEN,MAAe,KAAuB;EAC9G,MAAM;IAACO,CAAC;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAE,GAAGC;EAAK,CAAC,GAAGT,EAAE;EAChD,MAAMU,cAAc,GAAGb,cAAc,CAACY,KAAK,CAAC;EAC5C,MAAME,gBAAgB,GAAGd,cAAc,CAAC;IAACK,CAAC;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC;EAAE,CAAC,CAAC;EAEpE,OAAOV,OAAO,CACZ,MAAM,CACJ,GAAGY,cAAc,EACjB,IAAIf,MAAM,GAAG,CAACC,cAAc,CAACD,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAC3C,IAAIM,OAAO,GAAG,CAACP,SAAS,CAACO,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EACxC,GAAGU,gBAAgB,CACpB,EACD,CAACD,cAAc,EAAET,OAAO,EAAEU,gBAAgB,EAAEhB,MAAM,CACpD,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["clickable","testID","testIdModifier","splitAccessibility","useAccessibilityModifiers","useSxModifiers","useMemo","useStackModifiers","props","onPress","accessibility","p","pb","pl","pr","pt","px","py","frame","frameModifiers","paddingModifiers","accessibilityModifiers","undefined"],"sourceRoot":"../../src","sources":["use-stack-modifiers.ts"],"mappings":";;AAAA,SAAQA,SAAS,EAAuBC,MAAM,IAAIC,cAAc,QAAO,oCAAoC;AAC3G,SAGEC,kBAAkB,EAClBC,yBAAyB,EACzBC,cAAc,QACT,gBAAgB;AACvB,SAAQC,OAAO,QAAO,OAAO;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAC/BC,KAAwC,EACxCC,OAAoB,EACpBR,MAAe,KACM;EACrB,MAAM,CAACS,aAAa,EAAE;IAACC,CAAC;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAE,GAAGC;EAAK,CAAC,CAAC,GAAGf,kBAAkB,CAACK,KAAK,CAAC;EACxF,MAAMW,cAAc,GAAGd,cAAc,CAACa,KAAK,CAAC;EAC5C,MAAME,gBAAgB,GAAGf,cAAc,CAAC;IAACM,CAAC;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC,EAAE;IAAEC;EAAE,CAAC,CAAC;EACpE,MAAMI,sBAAsB,GAAGjB,yBAAyB,CAACM,aAAa,EAAED,OAAO,KAAKa,SAAS,CAAC;EAE9F,OAAOhB,OAAO,CACZ,MAAM,CACJ,GAAGa,cAAc,EACjB,IAAIlB,MAAM,GAAG,CAACC,cAAc,CAACD,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAC3C,IAAIQ,OAAO,GAAG,CAACT,SAAS,CAACS,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EACxC,GAAGY,sBAAsB,EACzB,GAAGD,gBAAgB,CACpB,EACD,CAACC,sBAAsB,EAAEF,cAAc,EAAEV,OAAO,EAAEW,gBAAgB,EAAEnB,MAAM,CAC5E,CAAC;AACH,CAAC","ignoreList":[]}
@@ -2,11 +2,13 @@ import type { ColorToken } from '@hzblj/kara-theme';
2
2
  import type { ReactNode } from 'react';
3
3
  export type ActivityIndicatorSize = 'large' | 'small';
4
4
  /**
5
- * That something is loading, for as long as it takes — UIKit's spinner on iOS, Material 3's expressive
5
+ * That something is loading, for as long as it takes: UIKit's spinner on iOS, Material 3's expressive
6
6
  * `LoadingIndicator` on Android, its shapes morphing as it turns. A React Native view on iOS and a host of its own on
7
7
  * Android, so it renders anywhere. For how far along something is, use `Progress`.
8
8
  */
9
9
  export type ActivityIndicatorProps = {
10
+ /** What is loading, for VoiceOver and TalkBack: "Loading photos". Unset, the platform's own word ("In progress"). */
11
+ accessibilityLabel?: string;
10
12
  /** Its colour. `fill.accent.primary` by default. */
11
13
  color?: ColorToken;
12
14
  /** `small` sits in a row or a button, `large` holds a screen that is loading. `small` by default. */
@@ -1,11 +1,16 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { ImageSourcePropType } from 'react-native';
3
3
  export type AvatarSize = 'lg' | 'md' | 'sm';
4
- /** A round avatar: the image in `source`, or `initials` without one. The React Native tier — it needs no host. */
4
+ /** A round avatar: the image in `source`, or `initials` without one. The React Native tier: it needs no host. */
5
5
  export type AvatarProps = {
6
+ /**
7
+ * Who it is, for VoiceOver and TalkBack: "Jan Blazej". Unset, the avatar is decorative and hidden from them, as one
8
+ * beside the person's name should be.
9
+ */
10
+ accessibilityLabel?: string;
6
11
  /** Shown in place of the image when there is no `source`. */
7
12
  initials?: string;
8
- /** The diameter — `sm` is `s24`, `md` `s40`, `lg` `s64`. `md` by default. */
13
+ /** The diameter: `sm` is `s24`, `md` `s40`, `lg` `s64`. `md` by default. */
9
14
  size?: AvatarSize;
10
15
  /** The image, cropped to the circle. */
11
16
  source?: ImageSourcePropType;
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from 'react';
2
2
  export type BadgeTone = 'accent' | 'destructive' | 'neutral' | 'success';
3
- /** A small status label in a capsule — a SwiftUI `HStack` in the tone's fill on iOS, Material's `Badge` on Android. */
3
+ /** A small status label in a capsule: a SwiftUI `HStack` in the tone's fill on iOS, Material's `Badge` on Android. */
4
4
  export type BadgeProps = {
5
5
  /** The text inside. */
6
6
  label: string;
@@ -3,16 +3,16 @@ import type { ResponsiveViewSx } from '@hzblj/kara-sx';
3
3
  import type { ReactNode } from 'react';
4
4
  export type { BlurMaterial, BlurVibrancy } from '@hzblj/kara-native/swift-ui';
5
5
  /**
6
- * One of the system's materials behind React Native content — what sheets, bars, menus and HUDs are made of, in
6
+ * One of the system's materials (what sheets, bars, menus and HUDs are made of) behind React Native content, in
7
7
  * SwiftUI's five thicknesses. iOS: UIKit's `system*Material` blur, with optional vibrancy for the content. Android:
8
- * what lies behind, blurred and saturated (Android 12+), under a Material tonal surface as thick as the material —
9
- * `surface` at `ultraThin` up to `surfaceContainerHighest` at `ultraThick`; below Android 12 the surface alone. The
8
+ * what lies behind, blurred and saturated (Android 12+), under a Material tonal surface as thick as the material
9
+ * (`surface` at `ultraThin` up to `surfaceContainerHighest` at `ultraThick`); below Android 12 the surface alone. The
10
10
  * React Native tier: it needs no host, so it suits a list cell. Shape it with `borderRadius`; it clips its children.
11
11
  */
12
12
  export type BlurViewProps = ResponsiveViewSx & {
13
13
  /**
14
- * Pins the material to light or dark whatever the app's appearance — a dark HUD over a light screen. Unset, it follows
15
- * the app theme. Android draws the opposite appearance with Material's inverse surface.
14
+ * Pins the material to light or dark whatever the app's appearance (a dark HUD over a light screen). Unset, it
15
+ * follows the app theme. Android draws the opposite appearance with Material's inverse surface.
16
16
  */
17
17
  appearance?: 'dark' | 'light';
18
18
  /** React Native content, over the material. */
@@ -22,7 +22,7 @@ export type BlurViewProps = ResponsiveViewSx & {
22
22
  /** Test identifier, forwarded to the view. */
23
23
  testID?: string;
24
24
  /**
25
- * iOS: draws the children vibrant at this level, the way iOS draws its own labels and fills on a material — their
25
+ * iOS: draws the children vibrant at this level, the way iOS draws its own labels and fills on a material. Their
26
26
  * colour becomes the material's vibrant one and their alpha the mask. Android has no vibrancy: the children keep
27
27
  * their colours there.
28
28
  */
@@ -1,7 +1,7 @@
1
1
  import type { ColorToken, Theme } from '@hzblj/kara-theme';
2
2
  import type { ButtonVariant } from './button.types';
3
3
  export declare const buttonTokens: (variant: ButtonVariant, disabled: boolean, theme: Theme) => {
4
- readonly content: 'content.on.bg';
4
+ readonly content: 'content.on.accent';
5
5
  readonly fill: 'fill.accent.primary';
6
6
  readonly shadow: 'btn.accent';
7
7
  } | {
@@ -2,23 +2,25 @@ import type { ColorToken } from '@hzblj/kara-theme';
2
2
  import type { ReactNode } from 'react';
3
3
  export type ButtonVariant = 'accent' | 'destructive' | 'glass' | 'secondary';
4
4
  /**
5
- * SwiftUI `ButtonStyle`. iOS only — Compose has no equivalent, so Android ignores it and keeps
5
+ * SwiftUI `ButtonStyle`. iOS only: Compose has no equivalent, so Android ignores it and keeps
6
6
  * rendering the variant's tokens.
7
7
  */
8
8
  export type ButtonStyleName = 'automatic' | 'bordered' | 'borderedProminent' | 'borderless' | 'glass' | 'glassProminent' | 'plain';
9
9
  /**
10
- * SwiftUI `ControlSize`. iOS only, and it has no `automatic` member — leave it unset to inherit
10
+ * SwiftUI `ControlSize`. iOS only, and it has no `automatic` member: leave it unset to inherit
11
11
  * whatever the surrounding SwiftUI environment provides.
12
12
  */
13
13
  export type ButtonControlSize = 'extraLarge' | 'large' | 'mini' | 'regular' | 'small';
14
- /** A text button — SwiftUI `Button` on iOS, Material's filled button (outlined for `glass`) on Android. */
14
+ /** A text button: SwiftUI `Button` on iOS, Material's filled button (outlined for `glass`) on Android. */
15
15
  export type ButtonProps = {
16
+ /** What pressing it does, when the label alone does not say. See `AccessibilityProps`. */
17
+ accessibilityHint?: string;
16
18
  /**
17
- * Replaces the style the variant picks — `borderedProminent` for `accent` and `destructive`, `bordered` for
18
- * `secondary`, `glass` for `glass`. iOS only — Android ignores it.
19
+ * Replaces the style the variant picks: `borderedProminent` for `accent` and `destructive`, `bordered` for
20
+ * `secondary`, `glass` for `glass`. iOS only. Android ignores it.
19
21
  */
20
22
  buttonStyle?: ButtonStyleName;
21
- /** SwiftUI's control size. `large` by default. iOS only — Android ignores it. */
23
+ /** SwiftUI's control size. `large` by default. iOS only. Android ignores it. */
22
24
  controlSize?: ButtonControlSize;
23
25
  /** Draws the button in its disabled colours and stops it responding to presses. */
24
26
  disabled?: boolean;
@@ -31,7 +33,7 @@ export type ButtonProps = {
31
33
  /**
32
34
  * Overrides the variant's own tint. A prominent style takes it as the fill and picks a contrasting
33
35
  * label. `glass` has to reach the material through `glassEffect` instead, so tinting one costs it
34
- * the stock `.glass` style — see the iOS implementation.
36
+ * the stock `.glass` style (see the iOS implementation).
35
37
  */
36
38
  tint?: ColorToken;
37
39
  /** The look. `accent` by default. Material has no glass, so on Android `glass` is an outlined button. */
@@ -1,10 +1,10 @@
1
- import type { ResponsiveSx } from '@hzblj/kara-sx';
1
+ import type { AccessibilityProps, ResponsiveSx } from '@hzblj/kara-sx';
2
2
  import type { ReactNode } from 'react';
3
3
  /**
4
- * A raised container — SwiftUI `VStack` / Compose `Column` on `surface.primary`, with a large radius, `s16` padding and
4
+ * A raised container: SwiftUI `VStack` / Compose `Column` on `surface.primary`, with a large radius, `s16` padding and
5
5
  * the `card` shadow. Any `sx` prop overrides its default.
6
6
  */
7
- export type CardProps = ResponsiveSx & {
7
+ export type CardProps = ResponsiveSx & AccessibilityProps & {
8
8
  /** Native views, stacked vertically from the leading edge. */
9
9
  children?: ReactNode;
10
10
  /** Test identifier, forwarded to the native view. */
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
- /** Material's `Checkbox` on Android. iOS has none, so there it is a SwiftUI `Toggle` — the same switch as `Switch`. */
2
+ /** Material's `Checkbox` on Android. iOS has none, so there it is a SwiftUI `Toggle`, the same switch as `Switch`. */
3
3
  export type CheckboxProps = {
4
4
  /** Dims the control and ignores taps. */
5
5
  disabled?: boolean;
@@ -7,7 +7,7 @@ export type CheckboxProps = {
7
7
  label?: string;
8
8
  /** Called with the new value when the user toggles it. */
9
9
  onValueChange?: (value: boolean) => void;
10
- /** Whether it is checked. Controlled — update it from `onValueChange`. */
10
+ /** Whether it is checked. Controlled: update it from `onValueChange`. */
11
11
  value: boolean;
12
12
  };
13
13
  export type CheckboxComponent = (props: CheckboxProps) => ReactNode;
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
- /** A filter pill on a `Pressable`, not a native control — the React Native tier, so it needs no host. */
2
+ /** A filter pill on a `Pressable`, not a native control. It belongs to the React Native tier, so it needs no host. */
3
3
  export type ChipProps = {
4
4
  /** The text in the pill. */
5
5
  label: string;
@@ -1,10 +1,11 @@
1
1
  import type { ReactNode } from 'react';
2
2
  /**
3
- * The system colour picker. iOS only — Compose ships no equivalent, so on Android this
4
- * renders nothing and says so in dev. Branch on `Platform.OS` if the screen needs a fallback.
3
+ * A row with a label and a colour well that opens a picker: SwiftUI's `ColorPicker` on iOS. Compose ships none, so on
4
+ * Android it is kara's own, in the same shape: a well with a rainbow ring, and a sheet with a grid of swatches, a
5
+ * spectrum and RGB sliders.
5
6
  */
6
7
  export type ColorPickerProps = {
7
- /** Text beside the colour well. */
8
+ /** Text beside the colour well, and the Android sheet's title. */
8
9
  label?: string;
9
10
  /** Called with the colour the user picks. */
10
11
  onValueChange?: (color: string) => void;
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
2
  export type DatePickerMode = 'date' | 'datetime' | 'time';
3
3
  /**
4
- * A date or time picker — SwiftUI's compact `DatePicker` on iOS, a field that opens Material's picker dialog on a tap
4
+ * A date or time picker: SwiftUI's compact `DatePicker` on iOS, a field that opens Material's picker dialog on a tap
5
5
  * on Android. The React Native tier: it brings its own host and sizes itself to the value, so it sits in a row beside
6
6
  * its label like a `Text`.
7
7
  */
@@ -15,11 +15,11 @@ export type DatePickerProps = {
15
15
  * `value`'s time of day.
16
16
  */
17
17
  mode?: DatePickerMode;
18
- /** Called with the new date — on iOS as it changes, on Android when the dialog is confirmed. */
18
+ /** Called with the new date: on iOS as it changes, on Android when the dialog is confirmed. */
19
19
  onValueChange?: (date: Date) => void;
20
- /** Test identifier — on the native picker on iOS, on the tappable field on Android. */
20
+ /** Test identifier, on the native picker on iOS and on the tappable field on Android. */
21
21
  testID?: string;
22
- /** The selected date. Controlled — update it from `onValueChange`. */
22
+ /** The selected date. Controlled: update it from `onValueChange`. */
23
23
  value: Date;
24
24
  };
25
25
  export type DatePickerComponent = (props: DatePickerProps) => ReactNode;
@@ -1,10 +1,10 @@
1
1
  import type { ColorToken } from '@hzblj/kara-theme';
2
2
  import type { ReactNode } from 'react';
3
- /** A horizontal hairline — SwiftUI `Divider` / Compose `HorizontalDivider`. */
3
+ /** A horizontal hairline: SwiftUI `Divider` / Compose `HorizontalDivider`. */
4
4
  export type DividerProps = {
5
5
  /** The line's colour. `border.tertiary` by default. */
6
6
  color?: ColorToken;
7
- /** Test identifier, forwarded to the native view on iOS — Android ignores it. */
7
+ /** Test identifier, forwarded to the native view on iOS. Android ignores it. */
8
8
  testID?: string;
9
9
  };
10
10
  export type DividerComponent = (props: DividerProps) => ReactNode;
@@ -1,15 +1,22 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { IconName } from '../icon';
3
3
  /**
4
- * A floating action button — Material's `FloatingActionButton` on Android, a 56pt accent circle (a plain SwiftUI
4
+ * A floating action button: Material's `FloatingActionButton` on Android, a 56pt accent circle (a plain SwiftUI
5
5
  * `Button`) on iOS. It renders inline; pinning it to a corner is up to the screen.
6
6
  */
7
7
  export type FabProps = {
8
- /** The icon, one of the app's, drawn in `content.on.bg`. */
8
+ /**
9
+ * What VoiceOver and TalkBack say for the button, since an icon has no words of its own: "Share", "Add to
10
+ * favourites". Required for that reason.
11
+ */
12
+ accessibilityLabel: string;
13
+ /** What pressing it does, when the label alone does not say. See `AccessibilityProps`. */
14
+ accessibilityHint?: string;
15
+ /** The icon, one of the app's, drawn in `content.on.accent`. */
9
16
  name: IconName;
10
17
  /** Called when the button is pressed. */
11
18
  onPress?: () => void;
12
- /** Test identifier, forwarded to the native view on iOS — Android ignores it. */
19
+ /** Test identifier, forwarded to the native view on iOS. Android ignores it. */
13
20
  testID?: string;
14
21
  };
15
22
  export type FabComponent = (props: FabProps) => ReactNode;
@@ -2,13 +2,13 @@ import type { ResponsiveViewSx } from '@hzblj/kara-sx';
2
2
  import type { ColorToken } from '@hzblj/kara-theme';
3
3
  import type { ReactNode } from 'react';
4
4
  /**
5
- * Glass around a React Native subtree, shaped as a capsule — the React Native tier, so it needs no host. iOS 26:
6
- * Liquid Glass. Android: frosted glass — what lies behind, blurred on Android 12+, under a translucent tonal surface
7
- * (or `tint`) and a hairline. iOS before 26 has no Liquid Glass and draws a capsule of `tint` instead, or of the glass
8
- * buttons' translucent fill (`btn.bg.glass.base`) when there is none.
5
+ * Glass around a React Native subtree, shaped as a capsule. It belongs to the React Native tier, so it needs no host.
6
+ * iOS 26: Liquid Glass. Android: frosted glass, made of what lies behind, blurred on Android 12+, under a translucent
7
+ * tonal surface (or `tint`) and a hairline. iOS before 26 has no Liquid Glass and draws a capsule of `tint` instead, or
8
+ * of the glass buttons' translucent fill (`btn.bg.glass.base`) when there is none.
9
9
  *
10
10
  * On Android each glass re-records what lies behind it before every frame: a few buttons cost nothing, but keep it out
11
- * of the cells of a long list — a plain `tint` reads as well there.
11
+ * of the cells of a long list. A plain `tint` reads as well there.
12
12
  */
13
13
  export type GlassViewProps = ResponsiveViewSx & {
14
14
  /** React Native views. Give them `pointerEvents="none"` when `interactive`, so the press reaches the `Pressable`. */
@@ -1,14 +1,17 @@
1
- import type { ResponsiveSx } from '@hzblj/kara-sx';
1
+ import type { AccessibilityProps, ResponsiveSx } from '@hzblj/kara-sx';
2
2
  import type { SpaceSize } from '@hzblj/kara-theme';
3
3
  import type { ReactNode } from 'react';
4
4
  export type HStackAlign = 'center' | 'end' | 'start';
5
- /** A horizontal stack — SwiftUI `HStack` / Compose `Row`. */
6
- export type HStackProps = ResponsiveSx & {
7
- /** How the children line up vertically — `start` is the top, `end` the bottom. `start` by default. */
5
+ /** A horizontal stack: SwiftUI `HStack` / Compose `Row`. */
6
+ export type HStackProps = ResponsiveSx & AccessibilityProps & {
7
+ /** How the children line up vertically: `start` is the top, `end` the bottom. `start` by default. */
8
8
  align?: HStackAlign;
9
9
  /** Native views, laid out from the leading edge. */
10
10
  children?: ReactNode;
11
- /** Makes the stack pressable — a tap gesture on iOS, a `clickable` with Material's ripple on Android. */
11
+ /**
12
+ * Makes the stack pressable: a tap gesture on iOS, a `clickable` with Material's ripple on Android. Screen readers
13
+ * then read the stack as one button.
14
+ */
12
15
  onPress?: () => void;
13
16
  /** The gap between children. Unset, SwiftUI puts its default spacing between them and Compose none. */
14
17
  spacing?: SpaceSize;
@@ -11,12 +11,12 @@ declare global {
11
11
  }
12
12
  type DeclaredIconName = keyof KaraIcons & string;
13
13
  /**
14
- * One of the app's icons. Once the plugin has written `kara-icons.d.ts` only those names type-check — an icon removed
14
+ * One of the app's icons. Once the plugin has written `kara-icons.d.ts` only those names type-check: an icon removed
15
15
  * from the folder fails at every call site. Before that, any string, so a project can adopt icons gradually.
16
16
  */
17
17
  export type IconName = [DeclaredIconName] extends [never] ? string : DeclaredIconName;
18
18
  /**
19
- * One of the app's icons, in a host — SwiftUI `Image` from the asset catalog on iOS, Material's `Icon` with the vector
19
+ * One of the app's icons, in a host: SwiftUI `Image` from the asset catalog on iOS, Material's `Icon` with the vector
20
20
  * drawable on Android. `RnIcon` draws the same asset outside one.
21
21
  */
22
22
  export type IconProps = {
@@ -24,11 +24,11 @@ export type IconProps = {
24
24
  accessibilityLabel?: string;
25
25
  /** The icon's tint. `content.primary` by default. */
26
26
  color?: ColorToken;
27
- /** Which of the app's icons — a key of `KaraIcons`. */
27
+ /** Which of the app's icons, a key of `KaraIcons`. */
28
28
  name: IconName;
29
29
  /** Its width and height, a spacing token. `s24` by default. */
30
30
  size?: SpaceSize;
31
- /** Test identifier, forwarded to the native view on iOS — Android ignores it. */
31
+ /** Test identifier, forwarded to the native view on iOS. Android ignores it. */
32
32
  testID?: string;
33
33
  };
34
34
  export type IconComponent = (props: IconProps) => ReactNode;
@@ -1,14 +1,25 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { IconName } from '../icon';
3
- /** A button that is just an icon — a plain SwiftUI `Button` on iOS, Material's `IconButton` on Android. */
3
+ /**
4
+ * A button that is just an icon: a plain SwiftUI `Button` on iOS, Material's `IconButton` on Android. The icon sits
5
+ * centred in a tap target the size each platform asks for, 44pt on iOS and 48dp on Android, so a row of them spaces
6
+ * itself the same way on both.
7
+ */
4
8
  export type IconButtonProps = {
5
- /** Draws the icon in `btn.content.disabled` and stops the button responding to presses. */
9
+ /**
10
+ * What VoiceOver and TalkBack say for the button, since an icon has no words of its own: "Share", "Add to
11
+ * favourites". Required for that reason.
12
+ */
13
+ accessibilityLabel: string;
14
+ /** What pressing it does, when the label alone does not say. See `AccessibilityProps`. */
15
+ accessibilityHint?: string;
16
+ /** Dims the icon (iOS's own disabled look, `btn.content.disabled` on Android) and stops the button responding. */
6
17
  disabled?: boolean;
7
18
  /** The icon, one of the app's. */
8
19
  name: IconName;
9
20
  /** Called when the button is pressed. */
10
21
  onPress?: () => void;
11
- /** Test identifier, forwarded to the native view on iOS — Android ignores it. */
22
+ /** Test identifier, forwarded to the native view on iOS. Android ignores it. */
12
23
  testID?: string;
13
24
  };
14
25
  export type IconButtonComponent = (props: IconButtonProps) => ReactNode;
@@ -1,8 +1,8 @@
1
1
  import { Image as ExpoImage, type ImageProps as ExpoImageProps } from 'expo-image';
2
2
  import type { Ref } from 'react';
3
3
  /**
4
- * `expo-image` with the `sx` props, the way `Box` is a `View` with them, and the design system's 100 ms linear fade
5
- * already applied, so a loaded image never pops in. An explicit `transition` wins, and so does an explicit `style`.
4
+ * `expo-image` with the `sx` props, the way `Box` is a `View` with them, and the design system's fade (`quick`,
5
+ * eased out) already applied, so a loaded image never pops in. An explicit `transition` wins, and so does an explicit `style`.
6
6
  */
7
7
  export declare const Image: import("react").MemoExoticComponent<{
8
8
  ({ style, ...props }: import("@hzblj/kara-sx").SxProps<ExpoImageProps & {
@@ -2,7 +2,7 @@ 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
- * A host for native atoms in a React Native layout — the SwiftUI / Compose `Host` an `@expo/ui` tree mounts into. It
5
+ * A host for native atoms in a React Native layout: the SwiftUI / Compose `Host` an `@expo/ui` tree mounts into. It
6
6
  * sits in that layout like a `Box`, and takes `Box`'s `sx` props for it: `h`, `flex`, margins.
7
7
  */
8
8
  export type IslandProps = ResponsiveViewSx & {
@@ -14,15 +14,15 @@ export type IslandProps = ResponsiveViewSx & {
14
14
  * width maps to `fixedSize(horizontal: true)`, so the native side ignores the proposed width and
15
15
  * resolves a `wide` stack's ideal width as unbounded.
16
16
  *
17
- * Turn it off — and give the island an explicit height, `h` — when the subtree contains an
17
+ * Turn it off (and give the island an explicit height, `h`) when the subtree contains an
18
18
  * `RnView`: that host drives its SwiftUI frame from the child's Yoga-laid-out bounds while this one
19
19
  * writes its measured size back into the Yoga style, and the two together spin a layout loop that
20
20
  * hangs the main thread as soon as the views lay out on screen.
21
21
  */
22
22
  matchContents?: boolean;
23
- /** A React Native style for the host view, merged over the `sx` props — for what they cannot say. */
23
+ /** A React Native style for the host view, merged over the `sx` props, for what they cannot say. */
24
24
  style?: StyleProp<ViewStyle>;
25
- /** Test identifier, forwarded to the host view on iOS — Android ignores it. */
25
+ /** Test identifier, forwarded to the host view on iOS. Android ignores it. */
26
26
  testID?: string;
27
27
  };
28
28
  export type IslandComponent = (props: IslandProps) => ReactNode;
@@ -1,22 +1,22 @@
1
1
  import type { ReactNode } from 'react';
2
2
  /**
3
- * A scrolling list — SwiftUI `List`, Compose `LazyColumn`. It has no height of its own, so it needs one from outside:
3
+ * A scrolling list: SwiftUI `List`, Compose `LazyColumn`. It has no height of its own, so it needs one from outside:
4
4
  * a `Screen`, or an `Island` with `matchContents={false}` and a height. In an island that sizes itself to its content
5
5
  * Compose measures it against an infinite height and throws ("Vertically scrollable component was measured with an
6
6
  * infinity maximum height"); SwiftUI shows nothing. For a handful of rows that should not scroll, use a `VStack`.
7
7
  *
8
- * Rows are separated for you — SwiftUI's own separators, a `Divider` between rows on Android — so a `Divider` among
8
+ * Rows are separated for you (SwiftUI's own separators, a `Divider` between rows on Android), so a `Divider` among
9
9
  * the children is one too many: on iOS it becomes an empty row of its own.
10
10
  */
11
11
  export type ListProps = {
12
- /** The rows — native views, one row each. */
12
+ /** The rows: native views, one row each. */
13
13
  children: ReactNode;
14
14
  /**
15
- * Enables pull-to-refresh. Async on purpose — see `ScrollViewProps.onRefresh`: the spinner runs
15
+ * Enables pull-to-refresh. Async on purpose (see `ScrollViewProps.onRefresh`): the spinner runs
16
16
  * until the promise settles, so neither platform needs a `refreshing` flag kept in sync by hand.
17
17
  */
18
18
  onRefresh?: () => Promise<void>;
19
- /** Test identifier, forwarded to the native view on iOS — Android ignores it. */
19
+ /** Test identifier, forwarded to the native view on iOS. Android ignores it. */
20
20
  testID?: string;
21
21
  };
22
22
  export type ListComponent = (props: ListProps) => ReactNode;
@@ -7,7 +7,7 @@ export type PickerOption = {
7
7
  value: string;
8
8
  };
9
9
  /**
10
- * A single choice from a list — a SwiftUI wheel picker on iOS, Material's exposed dropdown on Android. It brings its
10
+ * A single choice from a list: a SwiftUI wheel picker on iOS, Material's exposed dropdown on Android. It brings its
11
11
  * own host, so it renders outside `Screen` and `Island` as well.
12
12
  */
13
13
  export type PickerProps = {
@@ -1,21 +1,37 @@
1
- import type { ResponsiveViewSx } from '@hzblj/kara-sx';
1
+ import type { AccessibilityProps, ResponsiveViewSx } from '@hzblj/kara-sx';
2
+ import type { OpacitySize } from '@hzblj/kara-theme';
2
3
  import type { ReactNode } from 'react';
3
4
  import type { Haptic } from '../../haptics';
5
+ /** How the content answers a press: it eases down, it dims, or it stays still. */
6
+ export type PressEffect = 'none' | 'opacity' | 'scale';
4
7
  /**
5
- * React Native's `Pressable`, styled through `sx` like a `Box`, taking touches 8 points past its edges. The press is
6
- * each platform's own: iOS springs it down to 96%; Android draws Material's ripple over the content, clipped to the
7
- * pressable's shape — give it the `borderRadius` of what it wraps (`full` around a `GlassView`). The React Native
8
- * tier — it needs no host.
8
+ * React Native's `Pressable`, styled through `sx` like a `Box`, taking touches 8 points past its edges. Each platform
9
+ * presses its own way by default: iOS eases the content down to 96%, Android draws Material's ripple over it,
10
+ * clipped to the pressable's shape. `pressEffect` picks the same answer on both, and Android keeps its ripple on top
11
+ * unless `ripple` is off. Give it the `borderRadius` of what it wraps (`full` around a `GlassView`). Screen readers read
12
+ * it as a button unless `accessibilityRole` names another role. The React Native tier: it needs no host.
9
13
  */
10
- export type PressableProps = ResponsiveViewSx & {
14
+ export type PressableProps = ResponsiveViewSx & AccessibilityProps & {
11
15
  /** The pressable content. */
12
16
  children?: ReactNode;
13
- /** Ignores presses — no `onPress`, no haptic, no spring or ripple. */
17
+ /** Ignores presses: no `onPress`, no haptic, no press effect or ripple. */
14
18
  disabled?: boolean;
15
19
  /** Played on press. `true` is a `light` impact; a name picks the haptic, e.g. `selection` for a choice. */
16
20
  haptic?: boolean | Haptic;
17
21
  /** Called when the press is released, after the `haptic` plays. */
18
22
  onPress?: () => void;
23
+ /**
24
+ * How the content answers while it is held. `scale` eases it down to `pressedScale`, `opacity` dims it to
25
+ * `pressedOpacity`, `none` leaves it still. `scale` on iOS and `none` on Android by default, where the ripple is the
26
+ * press. With motion reduced, `scale` dims instead: the press still shows, and nothing moves.
27
+ */
28
+ pressEffect?: PressEffect;
29
+ /** What `opacity` dims to, an opacity token. `o60` by default. */
30
+ pressedOpacity?: OpacitySize;
31
+ /** What `scale` eases down to. `0.96` by default: lower reads as a squash, not a press. */
32
+ pressedScale?: number;
33
+ /** Android's ripple: Material's pressed state layer over the content, clipped to the shape. On by default. iOS has none. */
34
+ ripple?: boolean;
19
35
  /** Test identifier, forwarded to the view. */
20
36
  testID?: string;
21
37
  };
@@ -1,9 +1,11 @@
1
1
  import type { ReactNode } from 'react';
2
2
  /**
3
- * A progress bar or ring, tinted `fill.accent.primary` — SwiftUI `ProgressView` (a capacity `Gauge` for a ring with a
3
+ * A progress bar or ring, tinted `fill.accent.primary`: SwiftUI `ProgressView` (a capacity `Gauge` for a ring with a
4
4
  * value, which `ProgressView` cannot draw on iOS) / Compose's `LinearProgressIndicator` and `CircularProgressIndicator`.
5
5
  */
6
6
  export type ProgressProps = {
7
+ /** What is in progress, for VoiceOver and TalkBack: "Uploading". They read how far along it is themselves. */
8
+ accessibilityLabel?: string;
7
9
  /** A circular indicator instead of a bar. Off by default. */
8
10
  circular?: boolean;
9
11
  /** Between `0` and `1`. Leave it unset for an indeterminate indicator. */
@@ -2,10 +2,10 @@ import type { ResponsiveViewSx } from '@hzblj/kara-sx';
2
2
  import type { FlatListProps as RNFlatListProps } from 'react-native';
3
3
  /**
4
4
  * Top-level `sx` styles the viewport; `content` styles the scrolling content container, so padding and
5
- * gap belong there — the same split as `RnScrollView`. `removeClippedSubviews` is off unless you turn it on:
5
+ * gap belong there (the same split as `RnScrollView`). `removeClippedSubviews` is off unless you turn it on:
6
6
  * Android's default would detach a row's host before it has measured itself, and the row would stay empty.
7
7
  */
8
8
  export type RnFlatListProps<TItem> = ResponsiveViewSx & Omit<RNFlatListProps<TItem>, 'contentContainerStyle' | 'style'> & {
9
- /** Styles the scrolling content container — padding and gap belong here. */
9
+ /** Styles the scrolling content container; padding and gap belong here. */
10
10
  content?: ResponsiveViewSx;
11
11
  };
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { IconProps } from '../icon';
3
- /** The same contract as `Icon`, for the React Native tier — anywhere, no `Screen` or `Island` needed. */
3
+ /** The same contract as `Icon`, for the React Native tier: anywhere, no `Screen` or `Island` needed. */
4
4
  export type RnIconProps = IconProps;
5
5
  export type RnIconComponent = (props: RnIconProps) => ReactNode;