@hzblj/kara-components 0.5.0 → 0.7.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 (225) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +31 -3
  3. package/lib/module/atoms/checkbox/checkbox.android.js +7 -3
  4. package/lib/module/atoms/checkbox/checkbox.android.js.map +1 -1
  5. package/lib/module/atoms/chip/chip.js +1 -1
  6. package/lib/module/atoms/chip/chip.js.map +1 -1
  7. package/lib/module/atoms/date-picker/date-picker.ios.js +32 -11
  8. package/lib/module/atoms/date-picker/date-picker.ios.js.map +1 -1
  9. package/lib/module/atoms/index.js +0 -1
  10. package/lib/module/atoms/index.js.map +1 -1
  11. package/lib/module/atoms/pressable/pressable.js +11 -5
  12. package/lib/module/atoms/pressable/pressable.js.map +1 -1
  13. package/lib/module/atoms/rn-flat-list/rn-flat-list.js +10 -9
  14. package/lib/module/atoms/rn-flat-list/rn-flat-list.js.map +1 -1
  15. package/lib/module/atoms/rn-section-list/rn-section-list.js +5 -8
  16. package/lib/module/atoms/rn-section-list/rn-section-list.js.map +1 -1
  17. package/lib/module/atoms/segmented-control/index.js +1 -1
  18. package/lib/module/atoms/segmented-control/index.js.map +1 -1
  19. package/lib/module/atoms/segmented-control/segmented-control.android.js +74 -0
  20. package/lib/module/atoms/segmented-control/segmented-control.android.js.map +1 -0
  21. package/lib/module/atoms/segmented-control/segmented-control.ios.js +44 -0
  22. package/lib/module/atoms/segmented-control/segmented-control.ios.js.map +1 -0
  23. package/lib/module/atoms/slider/slider.android.js +26 -2
  24. package/lib/module/atoms/slider/slider.android.js.map +1 -1
  25. package/lib/module/atoms/switch/switch.android.js +14 -4
  26. package/lib/module/atoms/switch/switch.android.js.map +1 -1
  27. package/lib/module/haptics/haptics.js +56 -0
  28. package/lib/module/haptics/haptics.js.map +1 -0
  29. package/lib/module/haptics/index.js +5 -0
  30. package/lib/module/haptics/index.js.map +1 -0
  31. package/lib/module/haptics/use-haptic-feedback.js +33 -0
  32. package/lib/module/haptics/use-haptic-feedback.js.map +1 -0
  33. package/lib/module/index.js +1 -0
  34. package/lib/module/index.js.map +1 -1
  35. package/lib/module/molecules/search-bar/search-bar.js +15 -2
  36. package/lib/module/molecules/search-bar/search-bar.js.map +1 -1
  37. package/lib/module/molecules/tooltip/tooltip.android.js +16 -5
  38. package/lib/module/molecules/tooltip/tooltip.android.js.map +1 -1
  39. package/lib/module/organisms/action-sheet/action-sheet.android.js +41 -20
  40. package/lib/module/organisms/action-sheet/action-sheet.android.js.map +1 -1
  41. package/lib/module/organisms/action-sheet/action-sheet.ios.js +24 -8
  42. package/lib/module/organisms/action-sheet/action-sheet.ios.js.map +1 -1
  43. package/lib/module/organisms/alert/alert.ios.js +15 -2
  44. package/lib/module/organisms/alert/alert.ios.js.map +1 -1
  45. package/lib/module/organisms/context-menu/context-menu.android.js +2 -2
  46. package/lib/module/organisms/context-menu/context-menu.android.js.map +1 -1
  47. package/lib/module/organisms/form/form.android.js +22 -9
  48. package/lib/module/organisms/form/form.android.js.map +1 -1
  49. package/lib/module/organisms/swipe-actions/swipe-actions.android.js +125 -11
  50. package/lib/module/organisms/swipe-actions/swipe-actions.android.js.map +1 -1
  51. package/lib/module/organisms/swipe-actions/swipe-actions.ios.js +46 -18
  52. package/lib/module/organisms/swipe-actions/swipe-actions.ios.js.map +1 -1
  53. package/lib/module/templates/screen/screen.android.js +31 -10
  54. package/lib/module/templates/screen/screen.android.js.map +1 -1
  55. package/lib/typescript/atoms/avatar/avatar.types.d.ts +5 -0
  56. package/lib/typescript/atoms/badge/badge.types.d.ts +3 -0
  57. package/lib/typescript/atoms/button/button.types.d.ts +12 -0
  58. package/lib/typescript/atoms/card/card.types.d.ts +6 -0
  59. package/lib/typescript/atoms/checkbox/checkbox.types.d.ts +5 -0
  60. package/lib/typescript/atoms/chip/chip.types.d.ts +5 -0
  61. package/lib/typescript/atoms/color-picker/color-picker.types.d.ts +4 -0
  62. package/lib/typescript/atoms/date-picker/date-picker.ios.d.ts +6 -1
  63. package/lib/typescript/atoms/date-picker/date-picker.types.d.ts +14 -0
  64. package/lib/typescript/atoms/divider/divider.types.d.ts +3 -0
  65. package/lib/typescript/atoms/fab/fab.types.d.ts +7 -0
  66. package/lib/typescript/atoms/glass-view/glass-view.types.d.ts +1 -0
  67. package/lib/typescript/atoms/h-stack/h-stack.types.d.ts +6 -0
  68. package/lib/typescript/atoms/icon/icon.types.d.ts +8 -0
  69. package/lib/typescript/atoms/icon-button/icon-button.types.d.ts +5 -0
  70. package/lib/typescript/atoms/index.d.ts +0 -1
  71. package/lib/typescript/atoms/island/island.types.d.ts +4 -0
  72. package/lib/typescript/atoms/list/list.types.d.ts +2 -0
  73. package/lib/typescript/atoms/picker/picker.types.d.ts +12 -0
  74. package/lib/typescript/atoms/pressable/pressable.types.d.ts +11 -1
  75. package/lib/typescript/atoms/progress/progress.types.d.ts +6 -0
  76. package/lib/typescript/atoms/rn-flat-list/rn-flat-list.d.ts +5 -8
  77. package/lib/typescript/atoms/rn-flat-list/rn-flat-list.types.d.ts +3 -1
  78. package/lib/typescript/atoms/rn-scroll-view/rn-scroll-view.types.d.ts +4 -0
  79. package/lib/typescript/atoms/rn-section-list/rn-section-list.d.ts +2 -8
  80. package/lib/typescript/atoms/rn-section-list/rn-section-list.types.d.ts +3 -1
  81. package/lib/typescript/atoms/rn-text/rn-text.types.d.ts +4 -0
  82. package/lib/typescript/atoms/rn-view/rn-view.types.d.ts +2 -0
  83. package/lib/typescript/atoms/scroll-view/scroll-view.types.d.ts +4 -0
  84. package/lib/typescript/atoms/segmented-control/segmented-control.d.ts +1 -2
  85. package/lib/typescript/atoms/segmented-control/segmented-control.ios.d.ts +7 -0
  86. package/lib/typescript/atoms/segmented-control/segmented-control.types.d.ts +13 -0
  87. package/lib/typescript/atoms/skeleton/skeleton.types.d.ts +5 -0
  88. package/lib/typescript/atoms/slider/slider.types.d.ts +7 -0
  89. package/lib/typescript/atoms/spacer/spacer.types.d.ts +3 -0
  90. package/lib/typescript/atoms/surface/surface.types.d.ts +7 -0
  91. package/lib/typescript/atoms/switch/switch.types.d.ts +8 -0
  92. package/lib/typescript/atoms/text/text.types.d.ts +12 -0
  93. package/lib/typescript/atoms/text-field/text-field.types.d.ts +12 -0
  94. package/lib/typescript/atoms/v-stack/v-stack.types.d.ts +9 -0
  95. package/lib/typescript/atoms/z-stack/z-stack.types.d.ts +8 -0
  96. package/lib/typescript/haptics/haptics.d.ts +61 -0
  97. package/lib/typescript/haptics/index.d.ts +2 -0
  98. package/lib/typescript/haptics/use-haptic-feedback.d.ts +15 -0
  99. package/lib/typescript/index.d.ts +1 -0
  100. package/lib/typescript/molecules/collapsible/collapsible.types.d.ts +8 -0
  101. package/lib/typescript/molecules/empty-state/empty-state.types.d.ts +5 -0
  102. package/lib/typescript/molecules/label/label.types.d.ts +6 -0
  103. package/lib/typescript/molecules/labeled-content/labeled-content.types.d.ts +6 -0
  104. package/lib/typescript/molecules/link/link.types.d.ts +6 -0
  105. package/lib/typescript/molecules/list-item/list-item.types.d.ts +9 -0
  106. package/lib/typescript/molecules/navigation-bar/navigation-bar.types.d.ts +8 -0
  107. package/lib/typescript/molecules/pager/pager.types.d.ts +2 -0
  108. package/lib/typescript/molecules/radio-group/radio-group.types.d.ts +10 -0
  109. package/lib/typescript/molecules/rn-list-item/rn-list-item.types.d.ts +1 -1
  110. package/lib/typescript/molecules/rn-tooltip/rn-tooltip.types.d.ts +11 -0
  111. package/lib/typescript/molecules/scroll-edge-container/scroll-edge-container.types.d.ts +3 -0
  112. package/lib/typescript/molecules/search-bar/search-bar.types.d.ts +8 -0
  113. package/lib/typescript/molecules/stepper/stepper.types.d.ts +13 -0
  114. package/lib/typescript/molecules/tooltip/tooltip.types.d.ts +12 -0
  115. package/lib/typescript/organisms/action-sheet/action-sheet.types.d.ts +8 -0
  116. package/lib/typescript/organisms/alert/alert.types.d.ts +11 -0
  117. package/lib/typescript/organisms/context-menu/context-menu.types.d.ts +4 -0
  118. package/lib/typescript/organisms/fab-menu/fab-menu.types.d.ts +2 -0
  119. package/lib/typescript/organisms/form/form.types.d.ts +6 -0
  120. package/lib/typescript/organisms/menu/menu.types.d.ts +17 -0
  121. package/lib/typescript/organisms/sheet/sheet.types.d.ts +19 -0
  122. package/lib/typescript/organisms/snackbar/snackbar.types.d.ts +8 -0
  123. package/lib/typescript/organisms/swipe-actions/swipe-actions.types.d.ts +36 -13
  124. package/lib/typescript/templates/screen/screen.types.d.ts +9 -0
  125. package/package.json +5 -9
  126. package/src/atoms/avatar/avatar.types.ts +5 -0
  127. package/src/atoms/badge/badge.types.ts +3 -0
  128. package/src/atoms/button/button.types.ts +12 -0
  129. package/src/atoms/card/card.types.ts +6 -0
  130. package/src/atoms/checkbox/checkbox.android.tsx +7 -3
  131. package/src/atoms/checkbox/checkbox.types.ts +5 -0
  132. package/src/atoms/chip/chip.tsx +1 -1
  133. package/src/atoms/chip/chip.types.ts +5 -0
  134. package/src/atoms/color-picker/color-picker.types.ts +4 -0
  135. package/src/atoms/date-picker/date-picker.ios.tsx +33 -13
  136. package/src/atoms/date-picker/date-picker.types.ts +14 -0
  137. package/src/atoms/divider/divider.types.ts +3 -0
  138. package/src/atoms/fab/fab.types.ts +7 -0
  139. package/src/atoms/glass-view/glass-view.types.ts +1 -0
  140. package/src/atoms/h-stack/h-stack.types.ts +6 -0
  141. package/src/atoms/icon/icon.types.ts +8 -0
  142. package/src/atoms/icon-button/icon-button.types.ts +5 -0
  143. package/src/atoms/index.ts +0 -1
  144. package/src/atoms/island/island.types.ts +4 -0
  145. package/src/atoms/list/list.types.ts +2 -0
  146. package/src/atoms/picker/picker.types.ts +12 -0
  147. package/src/atoms/pressable/pressable.tsx +12 -5
  148. package/src/atoms/pressable/pressable.types.ts +12 -1
  149. package/src/atoms/progress/progress.types.ts +6 -0
  150. package/src/atoms/rn-flat-list/rn-flat-list.tsx +8 -8
  151. package/src/atoms/rn-flat-list/rn-flat-list.types.ts +3 -1
  152. package/src/atoms/rn-scroll-view/rn-scroll-view.types.ts +4 -0
  153. package/src/atoms/rn-section-list/rn-section-list.tsx +5 -8
  154. package/src/atoms/rn-section-list/rn-section-list.types.ts +3 -1
  155. package/src/atoms/rn-text/rn-text.types.ts +4 -0
  156. package/src/atoms/rn-view/rn-view.types.ts +2 -0
  157. package/src/atoms/scroll-view/scroll-view.types.ts +4 -0
  158. package/src/atoms/segmented-control/segmented-control.android.tsx +79 -0
  159. package/src/atoms/segmented-control/segmented-control.ios.tsx +47 -0
  160. package/src/atoms/segmented-control/segmented-control.types.ts +13 -0
  161. package/src/atoms/skeleton/skeleton.types.ts +5 -0
  162. package/src/atoms/slider/slider.android.tsx +33 -2
  163. package/src/atoms/slider/slider.types.ts +7 -0
  164. package/src/atoms/spacer/spacer.types.ts +3 -0
  165. package/src/atoms/surface/surface.types.ts +7 -0
  166. package/src/atoms/switch/switch.android.tsx +18 -5
  167. package/src/atoms/switch/switch.types.ts +8 -0
  168. package/src/atoms/text/text.types.ts +12 -0
  169. package/src/atoms/text-field/text-field.types.ts +12 -0
  170. package/src/atoms/v-stack/v-stack.types.ts +9 -0
  171. package/src/atoms/z-stack/z-stack.types.ts +8 -0
  172. package/src/haptics/haptics.ts +68 -0
  173. package/src/haptics/index.ts +2 -0
  174. package/src/haptics/use-haptic-feedback.ts +36 -0
  175. package/src/index.ts +1 -0
  176. package/src/molecules/collapsible/collapsible.types.ts +8 -0
  177. package/src/molecules/empty-state/empty-state.types.ts +5 -0
  178. package/src/molecules/label/label.types.ts +6 -0
  179. package/src/molecules/labeled-content/labeled-content.types.ts +6 -0
  180. package/src/molecules/link/link.types.ts +6 -0
  181. package/src/molecules/list-item/list-item.types.ts +9 -0
  182. package/src/molecules/navigation-bar/navigation-bar.types.ts +8 -0
  183. package/src/molecules/pager/pager.types.ts +2 -0
  184. package/src/molecules/radio-group/radio-group.types.ts +10 -0
  185. package/src/molecules/rn-list-item/rn-list-item.types.ts +1 -1
  186. package/src/molecules/rn-tooltip/rn-tooltip.types.ts +11 -0
  187. package/src/molecules/scroll-edge-container/scroll-edge-container.types.ts +3 -0
  188. package/src/molecules/search-bar/search-bar.tsx +9 -2
  189. package/src/molecules/search-bar/search-bar.types.ts +8 -0
  190. package/src/molecules/stepper/stepper.types.ts +13 -0
  191. package/src/molecules/tooltip/tooltip.android.tsx +17 -9
  192. package/src/molecules/tooltip/tooltip.types.ts +12 -0
  193. package/src/organisms/action-sheet/action-sheet.android.tsx +37 -19
  194. package/src/organisms/action-sheet/action-sheet.ios.tsx +22 -9
  195. package/src/organisms/action-sheet/action-sheet.types.ts +8 -0
  196. package/src/organisms/alert/alert.ios.tsx +11 -1
  197. package/src/organisms/alert/alert.types.ts +11 -0
  198. package/src/organisms/context-menu/context-menu.android.tsx +2 -2
  199. package/src/organisms/context-menu/context-menu.types.ts +4 -0
  200. package/src/organisms/fab-menu/fab-menu.types.ts +2 -0
  201. package/src/organisms/form/form.android.tsx +15 -7
  202. package/src/organisms/form/form.types.ts +6 -0
  203. package/src/organisms/menu/menu.types.ts +17 -0
  204. package/src/organisms/sheet/sheet.types.ts +19 -0
  205. package/src/organisms/snackbar/snackbar.types.ts +8 -0
  206. package/src/organisms/swipe-actions/swipe-actions.android.tsx +129 -9
  207. package/src/organisms/swipe-actions/swipe-actions.ios.tsx +45 -11
  208. package/src/organisms/swipe-actions/swipe-actions.types.ts +37 -14
  209. package/src/templates/screen/screen.android.tsx +33 -12
  210. package/src/templates/screen/screen.types.ts +9 -0
  211. package/lib/module/atoms/flash-list/flash-list.js +0 -31
  212. package/lib/module/atoms/flash-list/flash-list.js.map +0 -1
  213. package/lib/module/atoms/flash-list/flash-list.types.js +0 -4
  214. package/lib/module/atoms/flash-list/flash-list.types.js.map +0 -1
  215. package/lib/module/atoms/flash-list/index.js +0 -5
  216. package/lib/module/atoms/flash-list/index.js.map +0 -1
  217. package/lib/module/atoms/segmented-control/segmented-control.js +0 -28
  218. package/lib/module/atoms/segmented-control/segmented-control.js.map +0 -1
  219. package/lib/typescript/atoms/flash-list/flash-list.d.ts +0 -8
  220. package/lib/typescript/atoms/flash-list/flash-list.types.d.ts +0 -18
  221. package/lib/typescript/atoms/flash-list/index.d.ts +0 -2
  222. package/src/atoms/flash-list/flash-list.tsx +0 -28
  223. package/src/atoms/flash-list/flash-list.types.ts +0 -20
  224. package/src/atoms/flash-list/index.ts +0 -2
  225. package/src/atoms/segmented-control/segmented-control.tsx +0 -34
@@ -1 +1 @@
1
- {"version":3,"names":["Slider","ComposeSlider","useAppTheme","useHostGuard","jsx","_jsx","disabled","max","min","onValueChange","step","value","theme","colors","activeTrackColor","color","thumbColor","enabled","steps"],"sourceRoot":"../../../../src","sources":["atoms/slider/slider.android.tsx"],"mappings":";;AAAA,SAAQA,MAAM,IAAIC,aAAa,QAAO,0BAA0B;AAChE,SAAQC,WAAW,QAAO,mBAAmB;AAE7C,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,OAAO,MAAML,MAAuB,GAAGA,CAAC;EACtCM,QAAQ,GAAG,KAAK;EAChBC,GAAG,GAAG,CAAC;EACPC,GAAG,GAAG,CAAC;EACPC,aAAa;EACbC,IAAI;EACJC;AACW,CAAC,KAAK;EACjBR,YAAY,CAAC,QAAQ,CAAC;EACtB,MAAMS,KAAK,GAAGV,WAAW,CAAC,CAAC;EAE3B,oBACEG,IAAA,CAACJ,aAAa;IACZY,MAAM,EAAE;MACNC,gBAAgB,EAAEF,KAAK,CAACG,KAAK,CAAC,qBAAqB,CAAC;MACpDC,UAAU,EAAEJ,KAAK,CAACG,KAAK,CAAC,qBAAqB;IAC/C,CAAE;IACFE,OAAO,EAAE,CAACX,QAAS;IACnBC,GAAG,EAAEA,GAAI;IACTC,GAAG,EAAEA,GAAI;IACTC,aAAa,EAAEA,aAAc;IAC7BS,KAAK,EAAER,IAAK;IACZC,KAAK,EAAEA;EAAM,CACd,CAAC;AAEN,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Slider","ComposeSlider","useAppTheme","useCallback","useEffect","useRef","haptics","useHostGuard","jsx","_jsx","disabled","max","min","onValueChange","step","value","theme","steps","Math","round","stopOf","at","stop","current","onChange","next","reached","tick","colors","activeTrackColor","color","thumbColor","enabled"],"sourceRoot":"../../../../src","sources":["atoms/slider/slider.android.tsx"],"mappings":";;AAAA,SAAQA,MAAM,IAAIC,aAAa,QAAO,0BAA0B;AAChE,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAO,OAAO;AAEpD,SAAQC,OAAO,QAAO,wBAAe;AACrC,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMT,MAAuB,GAAGA,CAAC;EACtCU,QAAQ,GAAG,KAAK;EAChBC,GAAG,GAAG,CAAC;EACPC,GAAG,GAAG,CAAC;EACPC,aAAa;EACbC,IAAI;EACJC;AACW,CAAC,KAAK;EACjBR,YAAY,CAAC,QAAQ,CAAC;EACtB,MAAMS,KAAK,GAAGd,WAAW,CAAC,CAAC;EAC3B,MAAMe,KAAK,GAAGH,IAAI,GAAGI,IAAI,CAACP,GAAG,CAAC,CAAC,EAAEO,IAAI,CAACC,KAAK,CAAC,CAACR,GAAG,GAAGC,GAAG,IAAIE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;;EAExE;EACA;EACA,MAAMM,MAAM,GAAGjB,WAAW,CAAEkB,EAAU,IAAMP,IAAI,GAAGI,IAAI,CAACC,KAAK,CAAC,CAACE,EAAE,GAAGT,GAAG,IAAIE,IAAI,CAAC,GAAG,CAAE,EAAE,CAACF,GAAG,EAAEE,IAAI,CAAC,CAAC;EACnG,MAAMQ,IAAI,GAAGjB,MAAM,CAACe,MAAM,CAACL,KAAK,CAAC,CAAC;EAElCX,SAAS,CAAC,MAAM;IACdkB,IAAI,CAACC,OAAO,GAAGH,MAAM,CAACL,KAAK,CAAC;EAC9B,CAAC,EAAE,CAACK,MAAM,EAAEL,KAAK,CAAC,CAAC;EAEnB,MAAMS,QAAQ,GAAGrB,WAAW,CACzBsB,IAAY,IAAK;IAChB,MAAMC,OAAO,GAAGN,MAAM,CAACK,IAAI,CAAC;IAE5B,IAAIR,KAAK,GAAG,CAAC,IAAIS,OAAO,KAAKJ,IAAI,CAACC,OAAO,EAAE;MACzCjB,OAAO,CAACqB,IAAI,CAAC,CAAC;IAChB;IAEAL,IAAI,CAACC,OAAO,GAAGG,OAAO;IACtBb,aAAa,GAAGY,IAAI,CAAC;EACvB,CAAC,EACD,CAACZ,aAAa,EAAEO,MAAM,EAAEH,KAAK,CAC/B,CAAC;EAED,oBACER,IAAA,CAACR,aAAa;IACZ2B,MAAM,EAAE;MACNC,gBAAgB,EAAEb,KAAK,CAACc,KAAK,CAAC,qBAAqB,CAAC;MACpDC,UAAU,EAAEf,KAAK,CAACc,KAAK,CAAC,qBAAqB;IAC/C,CAAE;IACFE,OAAO,EAAE,CAACtB,QAAS;IACnBC,GAAG,EAAEA,GAAI;IACTC,GAAG,EAAEA,GAAI;IACTC,aAAa,EAAEW,QAAS;IACxBP,KAAK,EAAEA,KAAM;IACbF,KAAK,EAAEA;EAAM,CACd,CAAC;AAEN,CAAC","ignoreList":[]}
@@ -3,12 +3,18 @@
3
3
  import { Switch as ComposeSwitch, Row, Text } from '@expo/ui/jetpack-compose';
4
4
  import { clickable, fillMaxWidth } from '@expo/ui/jetpack-compose/modifiers';
5
5
  import { useAppTheme } from '@hzblj/kara-theme';
6
- import { useMemo } from 'react';
6
+ import { useCallback, useMemo } from 'react';
7
+ import { haptics } from "../../haptics/index.js";
7
8
  import { useHostGuard } from "../../host-context.js";
8
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
+ /** Stands in for a missing handler: Material drops its 48dp touch target without one, and the switch moves. */
11
+ const NOOP = () => undefined;
12
+
9
13
  /**
10
14
  * Material's switch, tinted with the accent like SwiftUI's toggle. With a label it is a full-width row — label at the
11
- * start, switch at the end — and the whole row toggles, the way a Material settings row does.
15
+ * start, switch at the end — and the whole row toggles, the way a Material settings row does. A flip plays
16
+ * `toggleOn`/`toggleOff` — Android 14's constants made for switches — since Compose's Material switch plays nothing
17
+ * of its own. iOS stays silent, as `UISwitch` does.
12
18
  */
13
19
  export const Switch = ({
14
20
  disabled = false,
@@ -18,7 +24,11 @@ export const Switch = ({
18
24
  }) => {
19
25
  useHostGuard('Switch');
20
26
  const theme = useAppTheme();
21
- const rowModifiers = useMemo(() => disabled || !onValueChange ? [fillMaxWidth()] : [fillMaxWidth(), clickable(() => onValueChange(!value))], [disabled, onValueChange, value]);
27
+ const toggle = useCallback(next => {
28
+ haptics.play(next ? 'toggleOn' : 'toggleOff');
29
+ onValueChange?.(next);
30
+ }, [onValueChange]);
31
+ const rowModifiers = useMemo(() => disabled || !onValueChange ? [fillMaxWidth()] : [fillMaxWidth(), clickable(() => toggle(!value))], [disabled, onValueChange, toggle, value]);
22
32
  const control = /*#__PURE__*/_jsx(ComposeSwitch, {
23
33
  colors: {
24
34
  checkedBorderColor: theme.color('fill.accent.primary'),
@@ -26,7 +36,7 @@ export const Switch = ({
26
36
  checkedTrackColor: theme.color('fill.accent.primary')
27
37
  },
28
38
  enabled: !disabled,
29
- onCheckedChange: onValueChange,
39
+ onCheckedChange: onValueChange ? toggle : NOOP,
30
40
  value: value
31
41
  });
32
42
  if (!label) {
@@ -1 +1 @@
1
- {"version":3,"names":["Switch","ComposeSwitch","Row","Text","clickable","fillMaxWidth","useAppTheme","useMemo","useHostGuard","jsx","_jsx","jsxs","_jsxs","disabled","label","onValueChange","value","theme","rowModifiers","control","colors","checkedBorderColor","color","checkedThumbColor","checkedTrackColor","enabled","onCheckedChange","horizontalArrangement","modifiers","verticalAlignment","children","colorString","style","typography","body"],"sourceRoot":"../../../../src","sources":["atoms/switch/switch.android.tsx"],"mappings":";;AAAA,SAAQA,MAAM,IAAIC,aAAa,EAAEC,GAAG,EAAEC,IAAI,QAAO,0BAA0B;AAC3E,SAAQC,SAAS,EAAEC,YAAY,QAAO,oCAAoC;AAC1E,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C;AACA;AACA;AACA;AACA,OAAO,MAAMZ,MAAuB,GAAGA,CAAC;EAACa,QAAQ,GAAG,KAAK;EAAEC,KAAK;EAAEC,aAAa;EAAEC;AAAkB,CAAC,KAAK;EACvGR,YAAY,CAAC,QAAQ,CAAC;EACtB,MAAMS,KAAK,GAAGX,WAAW,CAAC,CAAC;EAC3B,MAAMY,YAAY,GAAGX,OAAO,CAC1B,MAAOM,QAAQ,IAAI,CAACE,aAAa,GAAG,CAACV,YAAY,CAAC,CAAC,CAAC,GAAG,CAACA,YAAY,CAAC,CAAC,EAAED,SAAS,CAAC,MAAMW,aAAa,CAAC,CAACC,KAAK,CAAC,CAAC,CAAE,EAChH,CAACH,QAAQ,EAAEE,aAAa,EAAEC,KAAK,CACjC,CAAC;EACD,MAAMG,OAAO,gBACXT,IAAA,CAACT,aAAa;IACZmB,MAAM,EAAE;MACNC,kBAAkB,EAAEJ,KAAK,CAACK,KAAK,CAAC,qBAAqB,CAAC;MACtDC,iBAAiB,EAAEN,KAAK,CAACK,KAAK,CAAC,eAAe,CAAC;MAC/CE,iBAAiB,EAAEP,KAAK,CAACK,KAAK,CAAC,qBAAqB;IACtD,CAAE;IACFG,OAAO,EAAE,CAACZ,QAAS;IACnBa,eAAe,EAAEX,aAAc;IAC/BC,KAAK,EAAEA;EAAM,CACd,CACF;EAED,IAAI,CAACF,KAAK,EAAE;IACV,OAAOK,OAAO;EAChB;EAEA,oBACEP,KAAA,CAACV,GAAG;IAACyB,qBAAqB,EAAC,cAAc;IAACC,SAAS,EAAEV,YAAa;IAACW,iBAAiB,EAAC,QAAQ;IAAAC,QAAA,gBAC3FpB,IAAA,CAACP,IAAI;MAACmB,KAAK,EAAEL,KAAK,CAACc,WAAW,CAAClB,QAAQ,GAAG,kBAAkB,GAAG,iBAAiB,CAAE;MAACmB,KAAK,EAAEf,KAAK,CAACgB,UAAU,CAACC,IAAK;MAAAJ,QAAA,EAC7GhB;IAAK,CACF,CAAC,EACNK,OAAO;EAAA,CACL,CAAC;AAEV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Switch","ComposeSwitch","Row","Text","clickable","fillMaxWidth","useAppTheme","useCallback","useMemo","haptics","useHostGuard","jsx","_jsx","jsxs","_jsxs","NOOP","undefined","disabled","label","onValueChange","value","theme","toggle","next","play","rowModifiers","control","colors","checkedBorderColor","color","checkedThumbColor","checkedTrackColor","enabled","onCheckedChange","horizontalArrangement","modifiers","verticalAlignment","children","colorString","style","typography","body"],"sourceRoot":"../../../../src","sources":["atoms/switch/switch.android.tsx"],"mappings":";;AAAA,SAAQA,MAAM,IAAIC,aAAa,EAAEC,GAAG,EAAEC,IAAI,QAAO,0BAA0B;AAC3E,SAAQC,SAAS,EAAEC,YAAY,QAAO,oCAAoC;AAC1E,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,WAAW,EAAEC,OAAO,QAAO,OAAO;AAE1C,SAAQC,OAAO,QAAO,wBAAe;AACrC,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C;AACA,MAAMC,IAAI,GAAGA,CAAA,KAAMC,SAAS;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMhB,MAAuB,GAAGA,CAAC;EAACiB,QAAQ,GAAG,KAAK;EAAEC,KAAK;EAAEC,aAAa;EAAEC;AAAkB,CAAC,KAAK;EACvGV,YAAY,CAAC,QAAQ,CAAC;EACtB,MAAMW,KAAK,GAAGf,WAAW,CAAC,CAAC;EAC3B,MAAMgB,MAAM,GAAGf,WAAW,CACvBgB,IAAa,IAAK;IACjBd,OAAO,CAACe,IAAI,CAACD,IAAI,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7CJ,aAAa,GAAGI,IAAI,CAAC;EACvB,CAAC,EACD,CAACJ,aAAa,CAChB,CAAC;EACD,MAAMM,YAAY,GAAGjB,OAAO,CAC1B,MAAOS,QAAQ,IAAI,CAACE,aAAa,GAAG,CAACd,YAAY,CAAC,CAAC,CAAC,GAAG,CAACA,YAAY,CAAC,CAAC,EAAED,SAAS,CAAC,MAAMkB,MAAM,CAAC,CAACF,KAAK,CAAC,CAAC,CAAE,EACzG,CAACH,QAAQ,EAAEE,aAAa,EAAEG,MAAM,EAAEF,KAAK,CACzC,CAAC;EACD,MAAMM,OAAO,gBACXd,IAAA,CAACX,aAAa;IACZ0B,MAAM,EAAE;MACNC,kBAAkB,EAAEP,KAAK,CAACQ,KAAK,CAAC,qBAAqB,CAAC;MACtDC,iBAAiB,EAAET,KAAK,CAACQ,KAAK,CAAC,eAAe,CAAC;MAC/CE,iBAAiB,EAAEV,KAAK,CAACQ,KAAK,CAAC,qBAAqB;IACtD,CAAE;IACFG,OAAO,EAAE,CAACf,QAAS;IACnBgB,eAAe,EAAEd,aAAa,GAAGG,MAAM,GAAGP,IAAK;IAC/CK,KAAK,EAAEA;EAAM,CACd,CACF;EAED,IAAI,CAACF,KAAK,EAAE;IACV,OAAOQ,OAAO;EAChB;EAEA,oBACEZ,KAAA,CAACZ,GAAG;IAACgC,qBAAqB,EAAC,cAAc;IAACC,SAAS,EAAEV,YAAa;IAACW,iBAAiB,EAAC,QAAQ;IAAAC,QAAA,gBAC3FzB,IAAA,CAACT,IAAI;MAAC0B,KAAK,EAAER,KAAK,CAACiB,WAAW,CAACrB,QAAQ,GAAG,kBAAkB,GAAG,iBAAiB,CAAE;MAACsB,KAAK,EAAElB,KAAK,CAACmB,UAAU,CAACC,IAAK;MAAAJ,QAAA,EAC7GnB;IAAK,CACF,CAAC,EACNQ,OAAO;EAAA,CACL,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ import { HAPTICS, playHaptic, prepareHaptic } from '@hzblj/kara-native';
4
+ let enabled = true;
5
+ const play = (haptic, options) => {
6
+ if (enabled) {
7
+ playHaptic(haptic, options?.intensity);
8
+ }
9
+ };
10
+ const prepare = haptic => {
11
+ if (enabled) {
12
+ prepareHaptic(haptic);
13
+ }
14
+ };
15
+ const shorthands = Object.fromEntries(HAPTICS.map(haptic => [haptic, options => play(haptic, options)]));
16
+
17
+ /**
18
+ * The platform's own haptic feedback, named for what happened: UIKit's feedback generators on iOS, the system's
19
+ * `HapticFeedbackConstants` on Android — never a raw vibration. Both follow the user's system haptics setting, and
20
+ * every call is synchronous, with nothing to await.
21
+ *
22
+ * ```ts
23
+ * haptics.success() // a name you know: one function per haptic
24
+ * haptics.play(haptic) // a name that arrives as data
25
+ * haptics.light({intensity: 0.6}) // impacts scale on iOS
26
+ * haptics.prepare('selection') // iOS: warm the Taptic Engine as a gesture begins
27
+ * haptics.setEnabled(userPreference) // silences every kara haptic, the components' own too
28
+ * ```
29
+ *
30
+ * - `selection` — a choice changed: a segment, a chip, a picker row.
31
+ * - `tick` — one step of a continuous gesture: a slider detent, a scrubbed value.
32
+ * - `toggleOn` / `toggleOff` — a switch flipped.
33
+ * - `success` / `warning` / `error` — how a task ended. Android has no warning of its own; it plays a rejection.
34
+ * - `longPress` / `dragStart` — a long press was recognised; an item lifted to be dragged.
35
+ * - `thresholdActivate` / `thresholdDeactivate` — a gesture crossed its commit point, or went back over it.
36
+ * - `keyPress` — a key of the app's own keypad.
37
+ * - `soft`, `light`, `medium`, `rigid`, `heavy` — a collision none of the names above describes.
38
+ *
39
+ * On Android the names that came with Android 14's constants fall back to the nearest older feedback, so every name
40
+ * plays on every version. Haptics are silent in a build without kara's native module.
41
+ */
42
+ export const haptics = {
43
+ ...shorthands,
44
+ /** Whether kara plays haptics — `true` until `setEnabled(false)`. */
45
+ isEnabled: () => enabled,
46
+ play,
47
+ prepare,
48
+ /**
49
+ * Switches every kara haptic on or off, the ones its components play included — for an app's own "Haptics" setting.
50
+ * Not persisted: call it at start-up with the stored preference. The system setting applies either way.
51
+ */
52
+ setEnabled: value => {
53
+ enabled = value;
54
+ }
55
+ };
56
+ //# sourceMappingURL=haptics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["HAPTICS","playHaptic","prepareHaptic","enabled","play","haptic","options","intensity","prepare","shorthands","Object","fromEntries","map","haptics","isEnabled","setEnabled","value"],"sourceRoot":"../../../src","sources":["haptics/haptics.ts"],"mappings":";;AAAA,SAAQA,OAAO,EAAeC,UAAU,EAAEC,aAAa,QAAO,oBAAoB;AAWlF,IAAIC,OAAO,GAAG,IAAI;AAElB,MAAMC,IAAI,GAAGA,CAACC,MAAc,EAAEC,OAAuB,KAAW;EAC9D,IAAIH,OAAO,EAAE;IACXF,UAAU,CAACI,MAAM,EAAEC,OAAO,EAAEC,SAAS,CAAC;EACxC;AACF,CAAC;AAED,MAAMC,OAAO,GAAIH,MAAc,IAAW;EACxC,IAAIF,OAAO,EAAE;IACXD,aAAa,CAACG,MAAM,CAAC;EACvB;AACF,CAAC;AAED,MAAMI,UAAU,GAAGC,MAAM,CAACC,WAAW,CACnCX,OAAO,CAACY,GAAG,CAACP,MAAM,IAAI,CAACA,MAAM,EAAGC,OAAuB,IAAKF,IAAI,CAACC,MAAM,EAAEC,OAAO,CAAC,CAAC,CACpF,CAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,OAAO,GAAG;EACrB,GAAGJ,UAAU;EACb;EACAK,SAAS,EAAEA,CAAA,KAAeX,OAAO;EACjCC,IAAI;EACJI,OAAO;EACP;AACF;AACA;AACA;EACEO,UAAU,EAAGC,KAAc,IAAW;IACpCb,OAAO,GAAGa,KAAK;EACjB;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { haptics } from "./haptics.js";
4
+ export { useHapticFeedback } from "./use-haptic-feedback.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["haptics","useHapticFeedback"],"sourceRoot":"../../../src","sources":["haptics/index.ts"],"mappings":";;AAAA,SAAyCA,OAAO,QAAO,cAAW;AAClE,SAA6BC,iBAAiB,QAAO,0BAAuB","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef } from 'react';
4
+ import { haptics } from "./haptics.js";
5
+
6
+ /** Picks the haptic for one change of a trigger — or none, to stay silent for that change. */
7
+
8
+ /**
9
+ * Plays a haptic whenever `trigger` changes — never on mount — like SwiftUI's `sensoryFeedback(_:trigger:)`. Give it
10
+ * a haptic, or a function of the previous and next value that picks one per change. Changes are compared with
11
+ * `Object.is`, so a trigger is a primitive or a stable reference.
12
+ *
13
+ * ```ts
14
+ * useHapticFeedback(tab, 'selection')
15
+ * useHapticFeedback(quantity, (before, after) => (after > before ? 'tick' : 'soft'))
16
+ * useHapticFeedback(payment.status, (_, status) => status === 'paid' ? 'success' : status === 'failed' && 'error')
17
+ * ```
18
+ */
19
+ export const useHapticFeedback = (trigger, feedback) => {
20
+ const previous = useRef(trigger);
21
+ useEffect(() => {
22
+ const before = previous.current;
23
+ if (Object.is(before, trigger)) {
24
+ return;
25
+ }
26
+ previous.current = trigger;
27
+ const haptic = typeof feedback === 'function' ? feedback(before, trigger) : feedback;
28
+ if (haptic) {
29
+ haptics.play(haptic);
30
+ }
31
+ }, [feedback, trigger]);
32
+ };
33
+ //# sourceMappingURL=use-haptic-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","haptics","useHapticFeedback","trigger","feedback","previous","before","current","Object","is","haptic","play"],"sourceRoot":"../../../src","sources":["haptics/use-haptic-feedback.ts"],"mappings":";;AAAA,SAAQA,SAAS,EAAEC,MAAM,QAAO,OAAO;AAEvC,SAAqBC,OAAO,QAAO,cAAW;;AAE9C;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAAIC,OAAU,EAAEC,QAAoC,KAAW;EAC9F,MAAMC,QAAQ,GAAGL,MAAM,CAACG,OAAO,CAAC;EAEhCJ,SAAS,CAAC,MAAM;IACd,MAAMO,MAAM,GAAGD,QAAQ,CAACE,OAAO;IAE/B,IAAIC,MAAM,CAACC,EAAE,CAACH,MAAM,EAAEH,OAAO,CAAC,EAAE;MAC9B;IACF;IAEAE,QAAQ,CAACE,OAAO,GAAGJ,OAAO;IAC1B,MAAMO,MAAM,GAAG,OAAON,QAAQ,KAAK,UAAU,GAAGA,QAAQ,CAACE,MAAM,EAAEH,OAAO,CAAC,GAAGC,QAAQ;IAEpF,IAAIM,MAAM,EAAE;MACVT,OAAO,CAACU,IAAI,CAACD,MAAM,CAAC;IACtB;EACF,CAAC,EAAE,CAACN,QAAQ,EAAED,OAAO,CAAC,CAAC;AACzB,CAAC","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  export * from "./atoms/index.js";
4
+ export * from "./haptics/index.js";
4
5
  export * from "./molecules/index.js";
5
6
  export * from "./organisms/index.js";
6
7
  export * from "./templates/index.js";
@@ -1 +1 @@
1
- {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,kBAAS;AACvB,cAAc,sBAAa;AAC3B,cAAc,sBAAa;AAC3B,cAAc,sBAAa","ignoreList":[]}
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,kBAAS;AACvB,cAAc,oBAAW;AACzB,cAAc,sBAAa;AAC3B,cAAc,sBAAa;AAC3B,cAAc,sBAAa","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { useAppTheme } from '@hzblj/kara-theme';
4
- import { TextInput } from 'react-native';
4
+ import { Platform, TextInput } from 'react-native';
5
5
  import { Box } from "../../atoms/box/index.js";
6
6
  import { Pressable } from "../../atoms/pressable/index.js";
7
7
  import { RnGlyph } from "../../glyph/index.js";
@@ -13,6 +13,19 @@ export const SearchBar = ({
13
13
  value
14
14
  }) => {
15
15
  const theme = useAppTheme();
16
+ const {
17
+ lineHeight,
18
+ ...face
19
+ } = theme.typography.body;
20
+ /**
21
+ * A single-line `UITextField` sets its text against the bottom of a line taller than the font, so the variant's
22
+ * `lineHeight` pushed the text below the magnifier beside it. iOS takes the face without it, in a field as tall as
23
+ * the line would have been; Android centres the line and keeps it.
24
+ */
25
+ const text = Platform.OS === 'ios' ? {
26
+ ...face,
27
+ height: lineHeight
28
+ } : theme.typography.body;
16
29
  return /*#__PURE__*/_jsxs(Box, {
17
30
  align: "center",
18
31
  bg: "fill.quaternary",
@@ -31,7 +44,7 @@ export const SearchBar = ({
31
44
  onChangeText: onChangeText,
32
45
  placeholder: placeholder,
33
46
  placeholderTextColor: theme.color('content.quaternary'),
34
- style: [theme.typography.body, {
47
+ style: [text, {
35
48
  color: theme.color('content.primary'),
36
49
  flex: 1,
37
50
  padding: 0
@@ -1 +1 @@
1
- {"version":3,"names":["useAppTheme","TextInput","Box","Pressable","RnGlyph","jsx","_jsx","jsxs","_jsxs","SearchBar","onChangeText","placeholder","testID","value","theme","align","bg","borderRadius","flexDirection","gap","px","py","wide","children","color","name","size","placeholderTextColor","style","typography","body","flex","padding","length","onPress"],"sourceRoot":"../../../../src","sources":["molecules/search-bar/search-bar.tsx"],"mappings":";;AAAA,SAAQA,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,SAAS,QAAO,cAAc;AAEtC,SAAQC,GAAG,QAAO,0BAAiB;AACnC,SAAQC,SAAS,QAAO,gCAAuB;AAC/C,SAAQC,OAAO,QAAO,sBAAa;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGnC,OAAO,MAAMC,SAA6B,GAAGA,CAAC;EAC5CC,YAAY;EACZC,WAAW,GAAG,QAAQ;EACtBC,MAAM;EACNC;AACc,CAAC,KAAK;EACpB,MAAMC,KAAK,GAAGd,WAAW,CAAC,CAAC;EAE3B,oBACEQ,KAAA,CAACN,GAAG;IACFa,KAAK,EAAC,QAAQ;IACdC,EAAE,EAAC,iBAAiB;IACpBC,YAAY,EAAC,QAAQ;IACrBC,aAAa,EAAC,KAAK;IACnBC,GAAG,EAAC,IAAI;IACRC,EAAE,EAAC,KAAK;IACRC,EAAE,EAAC,IAAI;IACPT,MAAM,EAAEA,MAAO;IACfU,IAAI;IAAAC,QAAA,gBAEJjB,IAAA,CAACF,OAAO;MAACoB,KAAK,EAAC,kBAAkB;MAACC,IAAI,EAAC,QAAQ;MAACC,IAAI,EAAC;IAAK,CAAE,CAAC,eAC7DpB,IAAA,CAACL,SAAS;MACRS,YAAY,EAAEA,YAAa;MAC3BC,WAAW,EAAEA,WAAY;MACzBgB,oBAAoB,EAAEb,KAAK,CAACU,KAAK,CAAC,oBAAoB,CAAE;MACxDI,KAAK,EAAE,CAACd,KAAK,CAACe,UAAU,CAACC,IAAI,EAAE;QAACN,KAAK,EAAEV,KAAK,CAACU,KAAK,CAAC,iBAAiB,CAAC;QAAEO,IAAI,EAAE,CAAC;QAAEC,OAAO,EAAE;MAAC,CAAC,CAAE;MAC7FnB,KAAK,EAAEA;IAAM,CACd,CAAC,EACDA,KAAK,CAACoB,MAAM,GAAG,CAAC,gBACf3B,IAAA,CAACH,SAAS;MAAC+B,OAAO,EAAEA,CAAA,KAAMxB,YAAY,GAAG,EAAE,CAAE;MAAAa,QAAA,eAC3CjB,IAAA,CAACF,OAAO;QAACoB,KAAK,EAAC,kBAAkB;QAACC,IAAI,EAAC,OAAO;QAACC,IAAI,EAAC;MAAK,CAAE;IAAC,CACnD,CAAC,GACV,IAAI;EAAA,CACL,CAAC;AAEV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useAppTheme","Platform","TextInput","Box","Pressable","RnGlyph","jsx","_jsx","jsxs","_jsxs","SearchBar","onChangeText","placeholder","testID","value","theme","lineHeight","face","typography","body","text","OS","height","align","bg","borderRadius","flexDirection","gap","px","py","wide","children","color","name","size","placeholderTextColor","style","flex","padding","length","onPress"],"sourceRoot":"../../../../src","sources":["molecules/search-bar/search-bar.tsx"],"mappings":";;AAAA,SAAQA,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,QAAQ,EAAEC,SAAS,QAAO,cAAc;AAEhD,SAAQC,GAAG,QAAO,0BAAiB;AACnC,SAAQC,SAAS,QAAO,gCAAuB;AAC/C,SAAQC,OAAO,QAAO,sBAAa;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGnC,OAAO,MAAMC,SAA6B,GAAGA,CAAC;EAC5CC,YAAY;EACZC,WAAW,GAAG,QAAQ;EACtBC,MAAM;EACNC;AACc,CAAC,KAAK;EACpB,MAAMC,KAAK,GAAGf,WAAW,CAAC,CAAC;EAC3B,MAAM;IAACgB,UAAU;IAAE,GAAGC;EAAI,CAAC,GAAGF,KAAK,CAACG,UAAU,CAACC,IAAI;EACnD;AACF;AACA;AACA;AACA;EACE,MAAMC,IAAI,GAAGnB,QAAQ,CAACoB,EAAE,KAAK,KAAK,GAAG;IAAC,GAAGJ,IAAI;IAAEK,MAAM,EAAEN;EAAU,CAAC,GAAGD,KAAK,CAACG,UAAU,CAACC,IAAI;EAE1F,oBACEV,KAAA,CAACN,GAAG;IACFoB,KAAK,EAAC,QAAQ;IACdC,EAAE,EAAC,iBAAiB;IACpBC,YAAY,EAAC,QAAQ;IACrBC,aAAa,EAAC,KAAK;IACnBC,GAAG,EAAC,IAAI;IACRC,EAAE,EAAC,KAAK;IACRC,EAAE,EAAC,IAAI;IACPhB,MAAM,EAAEA,MAAO;IACfiB,IAAI;IAAAC,QAAA,gBAEJxB,IAAA,CAACF,OAAO;MAAC2B,KAAK,EAAC,kBAAkB;MAACC,IAAI,EAAC,QAAQ;MAACC,IAAI,EAAC;IAAK,CAAE,CAAC,eAC7D3B,IAAA,CAACL,SAAS;MACRS,YAAY,EAAEA,YAAa;MAC3BC,WAAW,EAAEA,WAAY;MACzBuB,oBAAoB,EAAEpB,KAAK,CAACiB,KAAK,CAAC,oBAAoB,CAAE;MACxDI,KAAK,EAAE,CAAChB,IAAI,EAAE;QAACY,KAAK,EAAEjB,KAAK,CAACiB,KAAK,CAAC,iBAAiB,CAAC;QAAEK,IAAI,EAAE,CAAC;QAAEC,OAAO,EAAE;MAAC,CAAC,CAAE;MAC5ExB,KAAK,EAAEA;IAAM,CACd,CAAC,EACDA,KAAK,CAACyB,MAAM,GAAG,CAAC,gBACfhC,IAAA,CAACH,SAAS;MAACoC,OAAO,EAAEA,CAAA,KAAM7B,YAAY,GAAG,EAAE,CAAE;MAAAoB,QAAA,eAC3CxB,IAAA,CAACF,OAAO;QAAC2B,KAAK,EAAC,kBAAkB;QAACC,IAAI,EAAC,OAAO;QAACC,IAAI,EAAC;MAAK,CAAE;IAAC,CACnD,CAAC,GACV,IAAI;EAAA,CACL,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -1,19 +1,30 @@
1
1
  "use strict";
2
2
 
3
- import { Text as ComposeText, TooltipBox } from '@expo/ui/jetpack-compose';
3
+ import { Text as ComposeText } from '@expo/ui/jetpack-compose';
4
+ import { TooltipBox } from '@hzblj/kara-native/jetpack-compose';
4
5
  import { useAppTheme } from '@hzblj/kara-theme';
6
+ import { useCallback } from 'react';
5
7
  import { useHostGuard } from "../../host-context.js";
6
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ /**
10
+ * Material's plain tooltip in kara's controlled `TooltipBox`: shown while `visible`, centred above the anchor and kept
11
+ * inside the window. Material's own would open on a long press and hide itself without a word to JS.
12
+ */
7
13
  export const Tooltip = ({
8
14
  children,
9
- text
15
+ onDismiss,
16
+ text,
17
+ visible
10
18
  }) => {
11
19
  useHostGuard('Tooltip');
12
20
  const theme = useAppTheme();
21
+ const onDismissRequest = useCallback(() => onDismiss(), [onDismiss]);
13
22
  return /*#__PURE__*/_jsxs(TooltipBox, {
14
- children: [/*#__PURE__*/_jsx(TooltipBox.PlainTooltip, {
15
- containerColor: theme.colorString('surface.high.contrast'),
16
- contentColor: theme.colorString('content.on.high.contrast'),
23
+ containerColor: theme.color('surface.high.contrast'),
24
+ isPresented: visible,
25
+ onDismissRequest: onDismissRequest,
26
+ plain: true,
27
+ children: [/*#__PURE__*/_jsx(TooltipBox.Text, {
17
28
  children: /*#__PURE__*/_jsx(ComposeText, {
18
29
  color: theme.colorString('content.on.high.contrast'),
19
30
  style: theme.typography.footnote,
@@ -1 +1 @@
1
- {"version":3,"names":["Text","ComposeText","TooltipBox","useAppTheme","useHostGuard","jsx","_jsx","jsxs","_jsxs","Tooltip","children","text","theme","PlainTooltip","containerColor","colorString","contentColor","color","style","typography","footnote"],"sourceRoot":"../../../../src","sources":["molecules/tooltip/tooltip.android.tsx"],"mappings":";;AAAA,SAAQA,IAAI,IAAIC,WAAW,EAAEC,UAAU,QAAO,0BAA0B;AACxE,SAAQC,WAAW,QAAO,mBAAmB;AAE7C,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C,OAAO,MAAMC,OAAyB,GAAGA,CAAC;EAACC,QAAQ;EAAEC;AAAkB,CAAC,KAAK;EAC3EP,YAAY,CAAC,SAAS,CAAC;EAEvB,MAAMQ,KAAK,GAAGT,WAAW,CAAC,CAAC;EAE3B,oBACEK,KAAA,CAACN,UAAU;IAAAQ,QAAA,gBACTJ,IAAA,CAACJ,UAAU,CAACW,YAAY;MACtBC,cAAc,EAAEF,KAAK,CAACG,WAAW,CAAC,uBAAuB,CAAE;MAC3DC,YAAY,EAAEJ,KAAK,CAACG,WAAW,CAAC,0BAA0B,CAAE;MAAAL,QAAA,eAE5DJ,IAAA,CAACL,WAAW;QAACgB,KAAK,EAAEL,KAAK,CAACG,WAAW,CAAC,0BAA0B,CAAE;QAACG,KAAK,EAAEN,KAAK,CAACO,UAAU,CAACC,QAAS;QAAAV,QAAA,EACjGC;MAAI,CACM;IAAC,CACS,CAAC,EACzBD,QAAQ;EAAA,CACC,CAAC;AAEjB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Text","ComposeText","TooltipBox","useAppTheme","useCallback","useHostGuard","jsx","_jsx","jsxs","_jsxs","Tooltip","children","onDismiss","text","visible","theme","onDismissRequest","containerColor","color","isPresented","plain","colorString","style","typography","footnote"],"sourceRoot":"../../../../src","sources":["molecules/tooltip/tooltip.android.tsx"],"mappings":";;AAAA,SAAQA,IAAI,IAAIC,WAAW,QAAO,0BAA0B;AAC5D,SAAQC,UAAU,QAAO,oCAAoC;AAC7D,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,WAAW,QAAO,OAAO;AAEjC,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C;AACA;AACA;AACA;AACA,OAAO,MAAMC,OAAyB,GAAGA,CAAC;EAACC,QAAQ;EAAEC,SAAS;EAAEC,IAAI;EAAEC;AAAqB,CAAC,KAAK;EAC/FT,YAAY,CAAC,SAAS,CAAC;EACvB,MAAMU,KAAK,GAAGZ,WAAW,CAAC,CAAC;EAC3B,MAAMa,gBAAgB,GAAGZ,WAAW,CAAC,MAAMQ,SAAS,CAAC,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EAEpE,oBACEH,KAAA,CAACP,UAAU;IACTe,cAAc,EAAEF,KAAK,CAACG,KAAK,CAAC,uBAAuB,CAAE;IACrDC,WAAW,EAAEL,OAAQ;IACrBE,gBAAgB,EAAEA,gBAAiB;IACnCI,KAAK;IAAAT,QAAA,gBAELJ,IAAA,CAACL,UAAU,CAACF,IAAI;MAAAW,QAAA,eACdJ,IAAA,CAACN,WAAW;QAACiB,KAAK,EAAEH,KAAK,CAACM,WAAW,CAAC,0BAA0B,CAAE;QAACC,KAAK,EAAEP,KAAK,CAACQ,UAAU,CAACC,QAAS;QAAAb,QAAA,EACjGE;MAAI,CACM;IAAC,CACC,CAAC,EACjBF,QAAQ;EAAA,CACC,CAAC;AAEjB,CAAC","ignoreList":[]}
@@ -1,12 +1,18 @@
1
1
  "use strict";
2
2
 
3
- import { Divider } from "../../atoms/divider/index.js";
4
3
  import { HStack } from "../../atoms/h-stack/index.js";
4
+ import { Icon } from "../../atoms/icon/index.js";
5
+ import { Island } from "../../atoms/island/index.js";
5
6
  import { Text } from "../../atoms/text/index.js";
6
7
  import { VStack } from "../../atoms/v-stack/index.js";
7
8
  import { useHostGuard } from "../../host-context.js";
8
9
  import { Sheet } from "../sheet/index.js";
9
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ /**
12
+ * Material's bottom-sheet menu: the title, then a full-width row per action, its icon leading. The sheet is the React
13
+ * Native tier, so the rows — Compose views — sit in an `Island` of their own; rendered straight into the sheet they had
14
+ * no host and threw.
15
+ */
10
16
  export const ActionSheet = ({
11
17
  actions,
12
18
  onDismiss,
@@ -17,26 +23,41 @@ export const ActionSheet = ({
17
23
  return /*#__PURE__*/_jsx(Sheet, {
18
24
  onDismiss: onDismiss,
19
25
  visible: visible,
20
- children: /*#__PURE__*/_jsxs(VStack, {
21
- p: "s16",
22
- spacing: "s4",
23
- wide: true,
24
- children: [/*#__PURE__*/_jsx(Text, {
25
- color: "content.secondary",
26
- variant: "labelMedium",
27
- children: title
28
- }), /*#__PURE__*/_jsx(Divider, {}), actions.map(action => /*#__PURE__*/_jsx(HStack, {
29
- onPress: () => {
30
- onDismiss();
31
- action.onPress();
32
- },
33
- py: "s12",
26
+ children: /*#__PURE__*/_jsx(Island, {
27
+ children: /*#__PURE__*/_jsxs(VStack, {
28
+ pb: "s16",
34
29
  wide: true,
35
- children: /*#__PURE__*/_jsx(Text, {
36
- color: action.destructive ? 'content.destructive' : 'content.primary',
37
- children: action.label
38
- })
39
- }, action.label))]
30
+ children: [/*#__PURE__*/_jsx(HStack, {
31
+ px: "s24",
32
+ py: "s12",
33
+ wide: true,
34
+ children: /*#__PURE__*/_jsx(Text, {
35
+ color: "content.secondary",
36
+ variant: "labelMedium",
37
+ children: title
38
+ })
39
+ }), actions.map(action => {
40
+ const color = action.destructive ? 'content.destructive' : 'content.primary';
41
+ return /*#__PURE__*/_jsxs(HStack, {
42
+ onPress: () => {
43
+ onDismiss();
44
+ action.onPress();
45
+ },
46
+ px: "s24",
47
+ py: "s16",
48
+ spacing: "s16",
49
+ wide: true,
50
+ children: [action.icon ? /*#__PURE__*/_jsx(Icon, {
51
+ color: color,
52
+ name: action.icon
53
+ }) : null, /*#__PURE__*/_jsx(Text, {
54
+ color: color,
55
+ variant: "body",
56
+ children: action.label
57
+ })]
58
+ }, action.label);
59
+ })]
60
+ })
40
61
  })
41
62
  });
42
63
  };
@@ -1 +1 @@
1
- {"version":3,"names":["Divider","HStack","Text","VStack","useHostGuard","Sheet","jsx","_jsx","jsxs","_jsxs","ActionSheet","actions","onDismiss","title","visible","children","p","spacing","wide","color","variant","map","action","onPress","py","destructive","label"],"sourceRoot":"../../../../src","sources":["organisms/action-sheet/action-sheet.android.tsx"],"mappings":";;AAAA,SAAQA,OAAO,QAAO,8BAAqB;AAC3C,SAAQC,MAAM,QAAO,8BAAqB;AAC1C,SAAQC,IAAI,QAAO,2BAAkB;AACrC,SAAQC,MAAM,QAAO,8BAAqB;AAC1C,SAAQC,YAAY,QAAO,uBAAoB;AAC/C,SAAQC,KAAK,QAAO,mBAAU;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG9B,OAAO,MAAMC,WAAiC,GAAGA,CAAC;EAACC,OAAO;EAAEC,SAAS;EAAEC,KAAK;EAAEC;AAAyB,CAAC,KAAK;EAC3GV,YAAY,CAAC,aAAa,CAAC;EAE3B,oBACEG,IAAA,CAACF,KAAK;IAACO,SAAS,EAAEA,SAAU;IAACE,OAAO,EAAEA,OAAQ;IAAAC,QAAA,eAC5CN,KAAA,CAACN,MAAM;MAACa,CAAC,EAAC,KAAK;MAACC,OAAO,EAAC,IAAI;MAACC,IAAI;MAAAH,QAAA,gBAC/BR,IAAA,CAACL,IAAI;QAACiB,KAAK,EAAC,mBAAmB;QAACC,OAAO,EAAC,aAAa;QAAAL,QAAA,EAClDF;MAAK,CACF,CAAC,eACPN,IAAA,CAACP,OAAO,IAAE,CAAC,EACVW,OAAO,CAACU,GAAG,CAACC,MAAM,iBACjBf,IAAA,CAACN,MAAM;QAELsB,OAAO,EAAEA,CAAA,KAAM;UACbX,SAAS,CAAC,CAAC;UACXU,MAAM,CAACC,OAAO,CAAC,CAAC;QAClB,CAAE;QACFC,EAAE,EAAC,KAAK;QACRN,IAAI;QAAAH,QAAA,eAEJR,IAAA,CAACL,IAAI;UAACiB,KAAK,EAAEG,MAAM,CAACG,WAAW,GAAG,qBAAqB,GAAG,iBAAkB;UAAAV,QAAA,EAAEO,MAAM,CAACI;QAAK,CAAO;MAAC,GAR7FJ,MAAM,CAACI,KASN,CACT,CAAC;IAAA,CACI;EAAC,CACJ,CAAC;AAEZ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["HStack","Icon","Island","Text","VStack","useHostGuard","Sheet","jsx","_jsx","jsxs","_jsxs","ActionSheet","actions","onDismiss","title","visible","children","pb","wide","px","py","color","variant","map","action","destructive","onPress","spacing","icon","name","label"],"sourceRoot":"../../../../src","sources":["organisms/action-sheet/action-sheet.android.tsx"],"mappings":";;AAAA,SAAQA,MAAM,QAAO,8BAAqB;AAC1C,SAAQC,IAAI,QAAO,2BAAkB;AACrC,SAAQC,MAAM,QAAO,6BAAoB;AACzC,SAAQC,IAAI,QAAO,2BAAkB;AACrC,SAAQC,MAAM,QAAO,8BAAqB;AAC1C,SAAQC,YAAY,QAAO,uBAAoB;AAC/C,SAAQC,KAAK,QAAO,mBAAU;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG9B;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAiC,GAAGA,CAAC;EAACC,OAAO;EAAEC,SAAS;EAAEC,KAAK;EAAEC;AAAyB,CAAC,KAAK;EAC3GV,YAAY,CAAC,aAAa,CAAC;EAE3B,oBACEG,IAAA,CAACF,KAAK;IAACO,SAAS,EAAEA,SAAU;IAACE,OAAO,EAAEA,OAAQ;IAAAC,QAAA,eAC5CR,IAAA,CAACN,MAAM;MAAAc,QAAA,eACLN,KAAA,CAACN,MAAM;QAACa,EAAE,EAAC,KAAK;QAACC,IAAI;QAAAF,QAAA,gBACnBR,IAAA,CAACR,MAAM;UAACmB,EAAE,EAAC,KAAK;UAACC,EAAE,EAAC,KAAK;UAACF,IAAI;UAAAF,QAAA,eAC5BR,IAAA,CAACL,IAAI;YAACkB,KAAK,EAAC,mBAAmB;YAACC,OAAO,EAAC,aAAa;YAAAN,QAAA,EAClDF;UAAK,CACF;QAAC,CACD,CAAC,EACRF,OAAO,CAACW,GAAG,CAACC,MAAM,IAAI;UACrB,MAAMH,KAAK,GAAGG,MAAM,CAACC,WAAW,GAAG,qBAAqB,GAAG,iBAAiB;UAE5E,oBACEf,KAAA,CAACV,MAAM;YAEL0B,OAAO,EAAEA,CAAA,KAAM;cACbb,SAAS,CAAC,CAAC;cACXW,MAAM,CAACE,OAAO,CAAC,CAAC;YAClB,CAAE;YACFP,EAAE,EAAC,KAAK;YACRC,EAAE,EAAC,KAAK;YACRO,OAAO,EAAC,KAAK;YACbT,IAAI;YAAAF,QAAA,GAEHQ,MAAM,CAACI,IAAI,gBAAGpB,IAAA,CAACP,IAAI;cAACoB,KAAK,EAAEA,KAAM;cAACQ,IAAI,EAAEL,MAAM,CAACI;YAAK,CAAE,CAAC,GAAG,IAAI,eAC/DpB,IAAA,CAACL,IAAI;cAACkB,KAAK,EAAEA,KAAM;cAACC,OAAO,EAAC,MAAM;cAAAN,QAAA,EAC/BQ,MAAM,CAACM;YAAK,CACT,CAAC;UAAA,GAbFN,MAAM,CAACM,KAcN,CAAC;QAEb,CAAC,CAAC;MAAA,CACI;IAAC,CACH;EAAC,CACJ,CAAC;AAEZ,CAAC","ignoreList":[]}
@@ -1,8 +1,18 @@
1
1
  "use strict";
2
2
 
3
- import { Button, ConfirmationDialog } from '@expo/ui/swift-ui';
3
+ import { Button, ConfirmationDialog, Spacer } from '@expo/ui/swift-ui';
4
+ import { frame } from '@expo/ui/swift-ui/modifiers';
4
5
  import { useHostGuard } from "../../host-context.js";
5
- import { jsx as _jsx } from "react/jsx-runtime";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ /**
8
+ * `@expo/ui` hangs the dialog on its `Trigger` and reads the buttons from its `Actions` slot. Without a trigger it
9
+ * attaches to an `EmptyView`, which SwiftUI never presents from — a spacer framed to nothing is a real view that takes
10
+ * no room.
11
+ */
12
+ const ANCHOR = [frame({
13
+ height: 0,
14
+ width: 0
15
+ })];
6
16
  export const ActionSheet = ({
7
17
  actions,
8
18
  onDismiss,
@@ -10,7 +20,7 @@ export const ActionSheet = ({
10
20
  visible
11
21
  }) => {
12
22
  useHostGuard('ActionSheet');
13
- return /*#__PURE__*/_jsx(ConfirmationDialog, {
23
+ return /*#__PURE__*/_jsxs(ConfirmationDialog, {
14
24
  isPresented: visible,
15
25
  onIsPresentedChange: next => {
16
26
  if (!next) {
@@ -18,11 +28,17 @@ export const ActionSheet = ({
18
28
  }
19
29
  },
20
30
  title: title,
21
- children: actions.map(action => /*#__PURE__*/_jsx(Button, {
22
- label: action.label,
23
- onPress: action.onPress,
24
- role: action.destructive ? 'destructive' : 'default'
25
- }, action.label))
31
+ children: [/*#__PURE__*/_jsx(ConfirmationDialog.Trigger, {
32
+ children: /*#__PURE__*/_jsx(Spacer, {
33
+ modifiers: ANCHOR
34
+ })
35
+ }), /*#__PURE__*/_jsx(ConfirmationDialog.Actions, {
36
+ children: actions.map(action => /*#__PURE__*/_jsx(Button, {
37
+ label: action.label,
38
+ onPress: action.onPress,
39
+ role: action.destructive ? 'destructive' : 'default'
40
+ }, action.label))
41
+ })]
26
42
  });
27
43
  };
28
44
  //# sourceMappingURL=action-sheet.ios.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Button","ConfirmationDialog","useHostGuard","jsx","_jsx","ActionSheet","actions","onDismiss","title","visible","isPresented","onIsPresentedChange","next","children","map","action","label","onPress","role","destructive"],"sourceRoot":"../../../../src","sources":["organisms/action-sheet/action-sheet.ios.tsx"],"mappings":";;AAAA,SAAQA,MAAM,EAAEC,kBAAkB,QAAO,mBAAmB;AAE5D,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,OAAO,MAAMC,WAAiC,GAAGA,CAAC;EAACC,OAAO;EAAEC,SAAS;EAAEC,KAAK;EAAEC;AAAyB,CAAC,KAAK;EAC3GP,YAAY,CAAC,aAAa,CAAC;EAE3B,oBACEE,IAAA,CAACH,kBAAkB;IACjBS,WAAW,EAAED,OAAQ;IACrBE,mBAAmB,EAAEC,IAAI,IAAI;MAC3B,IAAI,CAACA,IAAI,EAAE;QACTL,SAAS,CAAC,CAAC;MACb;IACF,CAAE;IACFC,KAAK,EAAEA,KAAM;IAAAK,QAAA,EAEZP,OAAO,CAACQ,GAAG,CAACC,MAAM,iBACjBX,IAAA,CAACJ,MAAM;MAELgB,KAAK,EAAED,MAAM,CAACC,KAAM;MACpBC,OAAO,EAAEF,MAAM,CAACE,OAAQ;MACxBC,IAAI,EAAEH,MAAM,CAACI,WAAW,GAAG,aAAa,GAAG;IAAU,GAHhDJ,MAAM,CAACC,KAIb,CACF;EAAC,CACgB,CAAC;AAEzB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Button","ConfirmationDialog","Spacer","frame","useHostGuard","jsx","_jsx","jsxs","_jsxs","ANCHOR","height","width","ActionSheet","actions","onDismiss","title","visible","isPresented","onIsPresentedChange","next","children","Trigger","modifiers","Actions","map","action","label","onPress","role","destructive"],"sourceRoot":"../../../../src","sources":["organisms/action-sheet/action-sheet.ios.tsx"],"mappings":";;AAAA,SAAQA,MAAM,EAAEC,kBAAkB,EAAEC,MAAM,QAAO,mBAAmB;AACpE,SAAQC,KAAK,QAAO,6BAA6B;AAEjD,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C;AACA;AACA;AACA;AACA;AACA,MAAMC,MAAM,GAAG,CAACN,KAAK,CAAC;EAACO,MAAM,EAAE,CAAC;EAAEC,KAAK,EAAE;AAAC,CAAC,CAAC,CAAC;AAE7C,OAAO,MAAMC,WAAiC,GAAGA,CAAC;EAACC,OAAO;EAAEC,SAAS;EAAEC,KAAK;EAAEC;AAAyB,CAAC,KAAK;EAC3GZ,YAAY,CAAC,aAAa,CAAC;EAE3B,oBACEI,KAAA,CAACP,kBAAkB;IACjBgB,WAAW,EAAED,OAAQ;IACrBE,mBAAmB,EAAEC,IAAI,IAAI;MAC3B,IAAI,CAACA,IAAI,EAAE;QACTL,SAAS,CAAC,CAAC;MACb;IACF,CAAE;IACFC,KAAK,EAAEA,KAAM;IAAAK,QAAA,gBAEbd,IAAA,CAACL,kBAAkB,CAACoB,OAAO;MAAAD,QAAA,eACzBd,IAAA,CAACJ,MAAM;QAACoB,SAAS,EAAEb;MAAO,CAAE;IAAC,CACH,CAAC,eAC7BH,IAAA,CAACL,kBAAkB,CAACsB,OAAO;MAAAH,QAAA,EACxBP,OAAO,CAACW,GAAG,CAACC,MAAM,iBACjBnB,IAAA,CAACN,MAAM;QAEL0B,KAAK,EAAED,MAAM,CAACC,KAAM;QACpBC,OAAO,EAAEF,MAAM,CAACE,OAAQ;QACxBC,IAAI,EAAEH,MAAM,CAACI,WAAW,GAAG,aAAa,GAAG;MAAU,GAHhDJ,MAAM,CAACC,KAIb,CACF;IAAC,CACwB,CAAC;EAAA,CACX,CAAC;AAEzB,CAAC","ignoreList":[]}
@@ -1,8 +1,17 @@
1
1
  "use strict";
2
2
 
3
- import { Button, Alert as SwiftUIAlert, Text as SwiftUIText } from '@expo/ui/swift-ui';
3
+ import { Button, Spacer, Alert as SwiftUIAlert, Text as SwiftUIText } from '@expo/ui/swift-ui';
4
+ import { frame } from '@expo/ui/swift-ui/modifiers';
4
5
  import { useHostGuard } from "../../host-context.js";
5
6
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ /**
8
+ * `@expo/ui` hangs the alert on its `Alert.Trigger`, and on an `EmptyView` when there is none — which SwiftUI never
9
+ * presents from, so the alert would not appear at all. A spacer framed to nothing is a real view that takes no room.
10
+ */
11
+ const ANCHOR = [frame({
12
+ height: 0,
13
+ width: 0
14
+ })];
6
15
  export const Alert = ({
7
16
  confirmLabel = 'OK',
8
17
  destructive = false,
@@ -21,7 +30,11 @@ export const Alert = ({
21
30
  }
22
31
  },
23
32
  title: title,
24
- children: [/*#__PURE__*/_jsxs(SwiftUIAlert.Actions, {
33
+ children: [/*#__PURE__*/_jsx(SwiftUIAlert.Trigger, {
34
+ children: /*#__PURE__*/_jsx(Spacer, {
35
+ modifiers: ANCHOR
36
+ })
37
+ }), /*#__PURE__*/_jsxs(SwiftUIAlert.Actions, {
25
38
  children: [/*#__PURE__*/_jsx(Button, {
26
39
  label: confirmLabel,
27
40
  onPress: onConfirm ?? onDismiss,
@@ -1 +1 @@
1
- {"version":3,"names":["Button","Alert","SwiftUIAlert","Text","SwiftUIText","useHostGuard","jsx","_jsx","jsxs","_jsxs","confirmLabel","destructive","message","onConfirm","onDismiss","title","visible","isPresented","onIsPresentedChange","next","children","Actions","label","onPress","role","Message"],"sourceRoot":"../../../../src","sources":["organisms/alert/alert.ios.tsx"],"mappings":";;AAAA,SAAQA,MAAM,EAAEC,KAAK,IAAIC,YAAY,EAAEC,IAAI,IAAIC,WAAW,QAAO,mBAAmB;AAEpF,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C,OAAO,MAAMR,KAAqB,GAAGA,CAAC;EACpCS,YAAY,GAAG,IAAI;EACnBC,WAAW,GAAG,KAAK;EACnBC,OAAO;EACPC,SAAS;EACTC,SAAS;EACTC,KAAK;EACLC;AACU,CAAC,KAAK;EAChBX,YAAY,CAAC,OAAO,CAAC;EAErB,oBACEI,KAAA,CAACP,YAAY;IACXe,WAAW,EAAED,OAAQ;IACrBE,mBAAmB,EAAEC,IAAI,IAAI;MAC3B,IAAI,CAACA,IAAI,EAAE;QACTL,SAAS,CAAC,CAAC;MACb;IACF,CAAE;IACFC,KAAK,EAAEA,KAAM;IAAAK,QAAA,gBAEbX,KAAA,CAACP,YAAY,CAACmB,OAAO;MAAAD,QAAA,gBACnBb,IAAA,CAACP,MAAM;QAACsB,KAAK,EAAEZ,YAAa;QAACa,OAAO,EAAEV,SAAS,IAAIC,SAAU;QAACU,IAAI,EAAEb,WAAW,GAAG,aAAa,GAAG;MAAU,CAAE,CAAC,eAC/GJ,IAAA,CAACP,MAAM;QAACsB,KAAK,EAAC,QAAQ;QAACC,OAAO,EAAET,SAAU;QAACU,IAAI,EAAC;MAAQ,CAAE,CAAC;IAAA,CACvC,CAAC,EAQtBZ,OAAO,gBACNL,IAAA,CAACL,YAAY,CAACuB,OAAO;MAAAL,QAAA,eACnBb,IAAA,CAACH,WAAW;QAAAgB,QAAA,EAAER;MAAO,CAAc;IAAC,CAChB,CAAC,GACrB,IAAI;EAAA,CACI,CAAC;AAEnB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Button","Spacer","Alert","SwiftUIAlert","Text","SwiftUIText","frame","useHostGuard","jsx","_jsx","jsxs","_jsxs","ANCHOR","height","width","confirmLabel","destructive","message","onConfirm","onDismiss","title","visible","isPresented","onIsPresentedChange","next","children","Trigger","modifiers","Actions","label","onPress","role","Message"],"sourceRoot":"../../../../src","sources":["organisms/alert/alert.ios.tsx"],"mappings":";;AAAA,SAAQA,MAAM,EAAEC,MAAM,EAAEC,KAAK,IAAIC,YAAY,EAAEC,IAAI,IAAIC,WAAW,QAAO,mBAAmB;AAC5F,SAAQC,KAAK,QAAO,6BAA6B;AAEjD,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C;AACA;AACA;AACA;AACA,MAAMC,MAAM,GAAG,CAACN,KAAK,CAAC;EAACO,MAAM,EAAE,CAAC;EAAEC,KAAK,EAAE;AAAC,CAAC,CAAC,CAAC;AAE7C,OAAO,MAAMZ,KAAqB,GAAGA,CAAC;EACpCa,YAAY,GAAG,IAAI;EACnBC,WAAW,GAAG,KAAK;EACnBC,OAAO;EACPC,SAAS;EACTC,SAAS;EACTC,KAAK;EACLC;AACU,CAAC,KAAK;EAChBd,YAAY,CAAC,OAAO,CAAC;EAErB,oBACEI,KAAA,CAACR,YAAY;IACXmB,WAAW,EAAED,OAAQ;IACrBE,mBAAmB,EAAEC,IAAI,IAAI;MAC3B,IAAI,CAACA,IAAI,EAAE;QACTL,SAAS,CAAC,CAAC;MACb;IACF,CAAE;IACFC,KAAK,EAAEA,KAAM;IAAAK,QAAA,gBAEbhB,IAAA,CAACN,YAAY,CAACuB,OAAO;MAAAD,QAAA,eACnBhB,IAAA,CAACR,MAAM;QAAC0B,SAAS,EAAEf;MAAO,CAAE;IAAC,CACT,CAAC,eACvBD,KAAA,CAACR,YAAY,CAACyB,OAAO;MAAAH,QAAA,gBACnBhB,IAAA,CAACT,MAAM;QAAC6B,KAAK,EAAEd,YAAa;QAACe,OAAO,EAAEZ,SAAS,IAAIC,SAAU;QAACY,IAAI,EAAEf,WAAW,GAAG,aAAa,GAAG;MAAU,CAAE,CAAC,eAC/GP,IAAA,CAACT,MAAM;QAAC6B,KAAK,EAAC,QAAQ;QAACC,OAAO,EAAEX,SAAU;QAACY,IAAI,EAAC;MAAQ,CAAE,CAAC;IAAA,CACvC,CAAC,EAQtBd,OAAO,gBACNR,IAAA,CAACN,YAAY,CAAC6B,OAAO;MAAAP,QAAA,eACnBhB,IAAA,CAACJ,WAAW;QAAAoB,QAAA,EAAER;MAAO,CAAc;IAAC,CAChB,CAAC,GACrB,IAAI;EAAA,CACI,CAAC;AAEnB,CAAC","ignoreList":[]}
@@ -3,10 +3,10 @@
3
3
  import { Text as ComposeText, DropdownMenu, DropdownMenuItem, Host } from '@expo/ui/jetpack-compose';
4
4
  import { useSx } from '@hzblj/kara-sx';
5
5
  import { useAppTheme } from '@hzblj/kara-theme';
6
- import * as Haptics from 'expo-haptics';
7
6
  import { useCallback, useMemo, useRef, useState } from 'react';
8
7
  import { Pressable, StyleSheet, View } from 'react-native';
9
8
  import { Icon } from "../../atoms/icon/index.js";
9
+ import { haptics } from "../../haptics/index.js";
10
10
  import { HostBoundary } from "../../host-context.js";
11
11
  import { splitForRipple } from "../../ripple-clip.js";
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -87,7 +87,7 @@ const ContextMenuRoot = ({
87
87
  pageX,
88
88
  pageY
89
89
  } = event.nativeEvent;
90
- Haptics.performAndroidHapticsAsync(Haptics.AndroidHaptics.Long_Press).catch(() => undefined);
90
+ haptics.longPress();
91
91
  // The touch in the trigger's own coordinates: `locationX/Y` are relative to whichever child was touched.
92
92
  trigger.current?.measure((_x, _y, _width, _height, left, top) => {
93
93
  setAnchor({
@@ -1 +1 @@
1
- {"version":3,"names":["Text","ComposeText","DropdownMenu","DropdownMenuItem","Host","useSx","useAppTheme","Haptics","useCallback","useMemo","useRef","useState","Pressable","StyleSheet","View","Icon","HostBoundary","splitForRipple","jsx","_jsx","jsxs","_jsxs","styles","create","anchor","height","position","width","MenuRow","action","onDismiss","theme","color","destructive","onClick","onPress","children","colorString","style","typography","body","label","icon","LeadingIcon","name","size","ContextMenuRoot","actions","testID","props","onPreviewPress","_onPreviewPress","preview","_preview","previewTransition","_previewTransition","sx","resolved","trigger","setAnchor","expanded","setExpanded","inner","outer","ripple","highlight","backgroundColor","open","event","pageX","pageY","nativeEvent","performAndroidHapticsAsync","AndroidHaptics","Long_Press","catch","undefined","current","measure","_x","_y","_width","_height","left","top","x","y","dismiss","android_ripple","onLongPress","ref","pointerEvents","absoluteFill","colorScheme","dark","seedColor","materialSeed","onDismissRequest","Items","map","Exclusion","ContextMenu","Object","assign"],"sourceRoot":"../../../../src","sources":["organisms/context-menu/context-menu.android.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Text","ComposeText","DropdownMenu","DropdownMenuItem","Host","useSx","useAppTheme","useCallback","useMemo","useRef","useState","Pressable","StyleSheet","View","Icon","haptics","HostBoundary","splitForRipple","jsx","_jsx","jsxs","_jsxs","styles","create","anchor","height","position","width","MenuRow","action","onDismiss","theme","color","destructive","onClick","onPress","children","colorString","style","typography","body","label","icon","LeadingIcon","name","size","ContextMenuRoot","actions","testID","props","onPreviewPress","_onPreviewPress","preview","_preview","previewTransition","_previewTransition","sx","resolved","trigger","setAnchor","expanded","setExpanded","inner","outer","ripple","highlight","backgroundColor","open","event","pageX","pageY","nativeEvent","longPress","current","measure","_x","_y","_width","_height","left","top","x","y","dismiss","android_ripple","onLongPress","ref","pointerEvents","absoluteFill","colorScheme","dark","seedColor","materialSeed","onDismissRequest","Items","map","Exclusion","ContextMenu","Object","assign"],"sourceRoot":"../../../../src","sources":["organisms/context-menu/context-menu.android.tsx"],"mappings":";;AAAA,SAAQA,IAAI,IAAIC,WAAW,EAAEC,YAAY,EAAEC,gBAAgB,EAAEC,IAAI,QAAO,0BAA0B;AAClG,SAAQC,KAAK,QAAO,gBAAgB;AACpC,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,WAAW,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAO,OAAO;AAC5D,SAAoCC,SAAS,EAAEC,UAAU,EAAEC,IAAI,QAAO,cAAc;AACpF,SAAQC,IAAI,QAAO,2BAAkB;AACrC,SAAQC,OAAO,QAAO,wBAAe;AACrC,SAAQC,YAAY,QAAO,uBAAoB;AAC/C,SAAQC,cAAc,QAAO,sBAAmB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAMhD,MAAMC,MAAM,GAAGV,UAAU,CAACW,MAAM,CAAC;EAC/B;EACAC,MAAM,EAAE;IAACC,MAAM,EAAE,CAAC;IAAEC,QAAQ,EAAE,UAAU;IAAEC,KAAK,EAAE;EAAC;AACpD,CAAC,CAAC;AAOF;AACA,MAAMC,OAAO,GAAGA,CAAC;EAACC,MAAM;EAAEC;AAAuB,CAAC,KAAK;EACrD,MAAMC,KAAK,GAAGzB,WAAW,CAAC,CAAC;EAC3B,MAAM0B,KAAK,GAAGH,MAAM,CAACI,WAAW,GAAG,qBAAqB,GAAG,iBAAiB;EAE5E,MAAMC,OAAO,GAAG3B,WAAW,CAAC,MAAM;IAChCuB,SAAS,CAAC,CAAC;IACXD,MAAM,CAACM,OAAO,CAAC,CAAC;EAClB,CAAC,EAAE,CAACN,MAAM,EAAEC,SAAS,CAAC,CAAC;EAEvB,oBACET,KAAA,CAAClB,gBAAgB;IAAC+B,OAAO,EAAEA,OAAQ;IAAAE,QAAA,gBACjCjB,IAAA,CAAChB,gBAAgB,CAACH,IAAI;MAAAoC,QAAA,eACpBjB,IAAA,CAAClB,WAAW;QAAC+B,KAAK,EAAED,KAAK,CAACM,WAAW,CAACL,KAAK,CAAE;QAACM,KAAK,EAAEP,KAAK,CAACQ,UAAU,CAACC,IAAK;QAAAJ,QAAA,EACxEP,MAAM,CAACY;MAAK,CACF;IAAC,CACO,CAAC,EACvBZ,MAAM,CAACa,IAAI,gBACVvB,IAAA,CAAChB,gBAAgB,CAACwC,WAAW;MAAAP,QAAA,eAC3BjB,IAAA,CAACL,IAAI;QAACkB,KAAK,EAAEA,KAAM;QAACY,IAAI,EAAEf,MAAM,CAACa,IAAK;QAACG,IAAI,EAAC;MAAK,CAAE;IAAC,CACxB,CAAC,GAC7B,IAAI;EAAA,CACQ,CAAC;AAEvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAGA,CAAC;EAACC,OAAO;EAAEX,QAAQ;EAAEY,MAAM;EAAE,GAAGC;AAAuB,CAAC,KAAK;EACnF,MAAM;IAACC,cAAc,EAAEC,eAAe;IAAEC,OAAO,EAAEC,QAAQ;IAAEC,iBAAiB,EAAEC,kBAAkB;IAAE,GAAGC;EAAE,CAAC,GAAGP,KAAK;EAChH,MAAMlB,KAAK,GAAGzB,WAAW,CAAC,CAAC;EAC3B,MAAMmD,QAAQ,GAAGpD,KAAK,CAACmD,EAAE,CAAC;EAC1B,MAAME,OAAO,GAAGjD,MAAM,CAAO,IAAI,CAAC;EAClC,MAAM,CAACe,MAAM,EAAEmC,SAAS,CAAC,GAAGjD,QAAQ,CAAe,IAAI,CAAC;EACxD,MAAM,CAACkD,QAAQ,EAAEC,WAAW,CAAC,GAAGnD,QAAQ,CAAC,KAAK,CAAC;;EAE/C;EACA,MAAM;IAACoD,KAAK;IAAEC;EAAK,CAAC,GAAGvD,OAAO,CAAC,MAAMS,cAAc,CAACwC,QAAQ,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAC1E,MAAMO,MAAM,GAAGxD,OAAO,CAAC,OAAO;IAACwB,KAAK,EAAED,KAAK,CAACC,KAAK,CAAC,eAAe;EAAC,CAAC,CAAC,EAAE,CAACD,KAAK,CAAC,CAAC;EAC9E,MAAMkC,SAAS,GAAGzD,OAAO,CAAC,OAAO;IAAC0D,eAAe,EAAEnC,KAAK,CAACC,KAAK,CAAC,eAAe;EAAC,CAAC,CAAC,EAAE,CAACD,KAAK,CAAC,CAAC;EAE3F,MAAMoC,IAAI,GAAG5D,WAAW,CAAE6D,KAA4B,IAAK;IACzD,MAAM;MAACC,KAAK;MAAEC;IAAK,CAAC,GAAGF,KAAK,CAACG,WAAW;IAExCxD,OAAO,CAACyD,SAAS,CAAC,CAAC;IACnB;IACAd,OAAO,CAACe,OAAO,EAAEC,OAAO,CAAC,CAACC,EAAE,EAAEC,EAAE,EAAEC,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAEC,GAAG,KAAK;MAC/DrB,SAAS,CAAC;QAACsB,CAAC,EAAEZ,KAAK,GAAGU,IAAI;QAAEG,CAAC,EAAEZ,KAAK,GAAGU;MAAG,CAAC,CAAC;MAC5CnB,WAAW,CAAC,IAAI,CAAC;IACnB,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMsB,OAAO,GAAG5E,WAAW,CAAC,MAAMsD,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;EAEzD,oBACE1C,IAAA,CAACN,IAAI;IAACyB,KAAK,EAAEyB,KAAM;IAAA3B,QAAA,eACjBf,KAAA,CAACV,SAAS;MAACyE,cAAc,EAAEpB,MAAO;MAACqB,WAAW,EAAElB,IAAK;MAACmB,GAAG,EAAE5B,OAAQ;MAACpB,KAAK,EAAEwB,KAAM;MAACd,MAAM,EAAEA,MAAO;MAAAZ,QAAA,GAE9FwB,QAAQ,gBAAGzC,IAAA,CAACN,IAAI;QAAC0E,aAAa,EAAC,MAAM;QAACjD,KAAK,EAAE,CAAC1B,UAAU,CAAC4E,YAAY,EAAEvB,SAAS;MAAE,CAAE,CAAC,GAAG,IAAI,EAC5F7B,QAAQ,EACRZ,MAAM,gBACLL,IAAA,CAACf,IAAI;QACHqF,WAAW,EAAE1D,KAAK,CAAC2D,IAAI,GAAG,MAAM,GAAG,OAAQ;QAC3CH,aAAa,EAAC,MAAM;QACpBI,SAAS,EAAE5D,KAAK,CAAC6D,YAAa;QAC9BtD,KAAK,EAAE,CAAChB,MAAM,CAACE,MAAM,EAAE;UAACuD,IAAI,EAAEvD,MAAM,CAACyD,CAAC;UAAED,GAAG,EAAExD,MAAM,CAAC0D;QAAC,CAAC,CAAE;QAAA9C,QAAA,eAExDjB,IAAA,CAACH,YAAY;UAAAoB,QAAA,eACXjB,IAAA,CAACjB,YAAY;YAAC8B,KAAK,EAAED,KAAK,CAACC,KAAK,CAAC,iBAAiB,CAAE;YAAC4B,QAAQ,EAAEA,QAAS;YAACiC,gBAAgB,EAAEV,OAAQ;YAAA/C,QAAA,eACjGjB,IAAA,CAACjB,YAAY,CAAC4F,KAAK;cAAA1D,QAAA,EAChBW,OAAO,CAACgD,GAAG,CAAClE,MAAM,iBACjBV,IAAA,CAACS,OAAO;gBAACC,MAAM,EAAEA,MAAO;gBAAoBC,SAAS,EAAEqD;cAAQ,GAAjCtD,MAAM,CAACY,KAA4B,CAClE;YAAC,CACgB;UAAC,CACT;QAAC,CACH;MAAC,CACX,CAAC,GACL,IAAI;IAAA,CACC;EAAC,CACR,CAAC;AAEX,CAAC;;AAED;AACA,MAAMuD,SAAS,GAAGA,CAAC;EAAC5D;AAAmC,CAAC,kBAAKjB,IAAA,CAACN,IAAI;EAAAuB,QAAA,EAAEA;AAAQ,CAAO,CAAC;AAEpF,OAAO,MAAM6D,WAAiC,GAAGC,MAAM,CAACC,MAAM,CAACrD,eAAe,EAAE;EAACkD;AAAS,CAAC,CAAC","ignoreList":[]}
@@ -5,12 +5,17 @@ import { Text } from "../../atoms/text/index.js";
5
5
  import { VStack } from "../../atoms/v-stack/index.js";
6
6
  import { useHostGuard } from "../../host-context.js";
7
7
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ /**
9
+ * Inset from its container on every side, as SwiftUI's grouped form is — in a `Screen` the cards would otherwise run
10
+ * into the screen's edges — and the section titles and footers indented to the cards' content.
11
+ */
8
12
  const FormRoot = ({
9
13
  children,
10
14
  testID
11
15
  }) => {
12
16
  useHostGuard('Form');
13
17
  return /*#__PURE__*/_jsx(VStack, {
18
+ p: "s16",
14
19
  spacing: "s16",
15
20
  testID: testID,
16
21
  wide: true,
@@ -24,18 +29,26 @@ const FormSection = ({
24
29
  }) => /*#__PURE__*/_jsxs(VStack, {
25
30
  spacing: "s4",
26
31
  wide: true,
27
- children: [title ? /*#__PURE__*/_jsx(Text, {
28
- color: "content.secondary",
29
- transform: "uppercase",
30
- variant: "labelMedium",
31
- children: title
32
+ children: [title ? /*#__PURE__*/_jsx(VStack, {
33
+ px: "s16",
34
+ wide: true,
35
+ children: /*#__PURE__*/_jsx(Text, {
36
+ color: "content.secondary",
37
+ transform: "uppercase",
38
+ variant: "labelMedium",
39
+ children: title
40
+ })
32
41
  }) : null, /*#__PURE__*/_jsx(Card, {
33
42
  wide: true,
34
43
  children: children
35
- }), footer ? /*#__PURE__*/_jsx(Text, {
36
- color: "content.tertiary",
37
- variant: "footnote",
38
- children: footer
44
+ }), footer ? /*#__PURE__*/_jsx(VStack, {
45
+ px: "s16",
46
+ wide: true,
47
+ children: /*#__PURE__*/_jsx(Text, {
48
+ color: "content.tertiary",
49
+ variant: "footnote",
50
+ children: footer
51
+ })
39
52
  }) : null]
40
53
  });
41
54
  export const Form = Object.assign(FormRoot, {