@hzblj/kara-components 0.17.0 → 0.19.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 (218) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/lib/module/atoms/badge/badge.android.js +5 -0
  3. package/lib/module/atoms/badge/badge.android.js.map +1 -1
  4. package/lib/module/atoms/badge/badge.ios.js +2 -0
  5. package/lib/module/atoms/badge/badge.ios.js.map +1 -1
  6. package/lib/module/atoms/button/button-tokens.js +8 -0
  7. package/lib/module/atoms/button/button-tokens.js.map +1 -1
  8. package/lib/module/atoms/button/button.android.js +43 -15
  9. package/lib/module/atoms/button/button.android.js.map +1 -1
  10. package/lib/module/atoms/button/button.ios.js +66 -10
  11. package/lib/module/atoms/button/button.ios.js.map +1 -1
  12. package/lib/module/atoms/checkbox/checkbox.android.js +5 -1
  13. package/lib/module/atoms/checkbox/checkbox.android.js.map +1 -1
  14. package/lib/module/atoms/checkbox/checkbox.ios.js +3 -1
  15. package/lib/module/atoms/checkbox/checkbox.ios.js.map +1 -1
  16. package/lib/module/atoms/color-picker/color-picker.android.js +4 -0
  17. package/lib/module/atoms/color-picker/color-picker.android.js.map +1 -1
  18. package/lib/module/atoms/color-picker/color-picker.ios.js +24 -2
  19. package/lib/module/atoms/color-picker/color-picker.ios.js.map +1 -1
  20. package/lib/module/atoms/date-picker/date-picker.android.js +85 -10
  21. package/lib/module/atoms/date-picker/date-picker.android.js.map +1 -1
  22. package/lib/module/atoms/date-picker/date-picker.ios.js +9 -7
  23. package/lib/module/atoms/date-picker/date-picker.ios.js.map +1 -1
  24. package/lib/module/atoms/divider/divider.android.js +17 -4
  25. package/lib/module/atoms/divider/divider.android.js.map +1 -1
  26. package/lib/module/atoms/divider/divider.ios.js +4 -0
  27. package/lib/module/atoms/divider/divider.ios.js.map +1 -1
  28. package/lib/module/atoms/fab/fab.android.js +64 -8
  29. package/lib/module/atoms/fab/fab.android.js.map +1 -1
  30. package/lib/module/atoms/fab/fab.ios.js +68 -12
  31. package/lib/module/atoms/fab/fab.ios.js.map +1 -1
  32. package/lib/module/atoms/icon-button/icon-button.android.js +48 -5
  33. package/lib/module/atoms/icon-button/icon-button.android.js.map +1 -1
  34. package/lib/module/atoms/icon-button/icon-button.ios.js +60 -10
  35. package/lib/module/atoms/icon-button/icon-button.ios.js.map +1 -1
  36. package/lib/module/atoms/list/list.android.js +32 -4
  37. package/lib/module/atoms/list/list.android.js.map +1 -1
  38. package/lib/module/atoms/list/list.ios.js +15 -5
  39. package/lib/module/atoms/list/list.ios.js.map +1 -1
  40. package/lib/module/atoms/progress/progress.android.js +21 -7
  41. package/lib/module/atoms/progress/progress.android.js.map +1 -1
  42. package/lib/module/atoms/progress/progress.ios.js +5 -1
  43. package/lib/module/atoms/progress/progress.ios.js.map +1 -1
  44. package/lib/module/atoms/segmented-control/segmented-control.android.js +66 -12
  45. package/lib/module/atoms/segmented-control/segmented-control.android.js.map +1 -1
  46. package/lib/module/atoms/segmented-control/segmented-control.ios.js +19 -8
  47. package/lib/module/atoms/segmented-control/segmented-control.ios.js.map +1 -1
  48. package/lib/module/atoms/segmented-control/segments.js +16 -0
  49. package/lib/module/atoms/segmented-control/segments.js.map +1 -0
  50. package/lib/module/atoms/slider/slider.android.js +16 -2
  51. package/lib/module/atoms/slider/slider.android.js.map +1 -1
  52. package/lib/module/atoms/slider/slider.ios.js +22 -2
  53. package/lib/module/atoms/slider/slider.ios.js.map +1 -1
  54. package/lib/module/atoms/switch/switch.android.js +5 -1
  55. package/lib/module/atoms/switch/switch.android.js.map +1 -1
  56. package/lib/module/atoms/switch/switch.ios.js +3 -1
  57. package/lib/module/atoms/switch/switch.ios.js.map +1 -1
  58. package/lib/module/atoms/text/spans.js +2 -1
  59. package/lib/module/atoms/text/spans.js.map +1 -1
  60. package/lib/module/atoms/text/text.android.js +18 -6
  61. package/lib/module/atoms/text/text.android.js.map +1 -1
  62. package/lib/module/atoms/text/text.ios.js +6 -2
  63. package/lib/module/atoms/text/text.ios.js.map +1 -1
  64. package/lib/module/atoms/text-field/text-field-input.js +14 -0
  65. package/lib/module/atoms/text-field/text-field-input.js.map +1 -0
  66. package/lib/module/atoms/text-field/text-field.android.js +113 -6
  67. package/lib/module/atoms/text-field/text-field.android.js.map +1 -1
  68. package/lib/module/atoms/text-field/text-field.ios.js +75 -3
  69. package/lib/module/atoms/text-field/text-field.ios.js.map +1 -1
  70. package/lib/module/molecules/collapsible/collapsible.android.js +4 -3
  71. package/lib/module/molecules/collapsible/collapsible.android.js.map +1 -1
  72. package/lib/module/molecules/collapsible/collapsible.ios.js +3 -1
  73. package/lib/module/molecules/collapsible/collapsible.ios.js.map +1 -1
  74. package/lib/module/molecules/radio-group/radio-group.android.js +10 -2
  75. package/lib/module/molecules/radio-group/radio-group.android.js.map +1 -1
  76. package/lib/module/molecules/radio-group/radio-group.ios.js +6 -2
  77. package/lib/module/molecules/radio-group/radio-group.ios.js.map +1 -1
  78. package/lib/module/molecules/search-bar/search-bar.js +9 -0
  79. package/lib/module/molecules/search-bar/search-bar.js.map +1 -1
  80. package/lib/module/molecules/stepper/stepper.android.js +25 -13
  81. package/lib/module/molecules/stepper/stepper.android.js.map +1 -1
  82. package/lib/module/molecules/stepper/stepper.ios.js +12 -6
  83. package/lib/module/molecules/stepper/stepper.ios.js.map +1 -1
  84. package/lib/module/organisms/action-sheet/action-sheet.android.js +16 -8
  85. package/lib/module/organisms/action-sheet/action-sheet.android.js.map +1 -1
  86. package/lib/module/organisms/action-sheet/action-sheet.ios.js +16 -3
  87. package/lib/module/organisms/action-sheet/action-sheet.ios.js.map +1 -1
  88. package/lib/module/organisms/alert/alert.android.js +4 -3
  89. package/lib/module/organisms/alert/alert.android.js.map +1 -1
  90. package/lib/module/organisms/alert/alert.ios.js +3 -2
  91. package/lib/module/organisms/alert/alert.ios.js.map +1 -1
  92. package/lib/module/organisms/context-menu/context-menu.android.js +3 -1
  93. package/lib/module/organisms/context-menu/context-menu.android.js.map +1 -1
  94. package/lib/module/organisms/context-menu/context-menu.ios.js +1 -0
  95. package/lib/module/organisms/context-menu/context-menu.ios.js.map +1 -1
  96. package/lib/module/organisms/fab-menu/fab-menu.android.js +3 -0
  97. package/lib/module/organisms/fab-menu/fab-menu.android.js.map +1 -1
  98. package/lib/module/organisms/fab-menu/fab-menu.ios.js +3 -0
  99. package/lib/module/organisms/fab-menu/fab-menu.ios.js.map +1 -1
  100. package/lib/module/organisms/menu/menu-parts.js +20 -0
  101. package/lib/module/organisms/menu/menu-parts.js.map +1 -0
  102. package/lib/module/organisms/menu/menu.android.js +51 -19
  103. package/lib/module/organisms/menu/menu.android.js.map +1 -1
  104. package/lib/module/organisms/menu/menu.ios.js +71 -8
  105. package/lib/module/organisms/menu/menu.ios.js.map +1 -1
  106. package/lib/module/organisms/sheet/sheet.js +2 -1
  107. package/lib/module/organisms/sheet/sheet.js.map +1 -1
  108. package/lib/typescript/atoms/badge/badge.types.d.ts +2 -0
  109. package/lib/typescript/atoms/button/button-tokens.d.ts +6 -2
  110. package/lib/typescript/atoms/button/button.types.d.ts +19 -5
  111. package/lib/typescript/atoms/checkbox/checkbox.types.d.ts +2 -0
  112. package/lib/typescript/atoms/color-picker/color-picker.types.d.ts +2 -0
  113. package/lib/typescript/atoms/date-picker/date-picker.ios.d.ts +5 -5
  114. package/lib/typescript/atoms/date-picker/date-picker.types.d.ts +30 -7
  115. package/lib/typescript/atoms/divider/divider.ios.d.ts +4 -0
  116. package/lib/typescript/atoms/divider/divider.types.d.ts +13 -2
  117. package/lib/typescript/atoms/fab/fab.types.d.ts +21 -4
  118. package/lib/typescript/atoms/icon-button/icon-button.types.d.ts +23 -4
  119. package/lib/typescript/atoms/list/list.types.d.ts +15 -1
  120. package/lib/typescript/atoms/progress/progress.types.d.ts +13 -2
  121. package/lib/typescript/atoms/segmented-control/segmented-control.ios.d.ts +3 -1
  122. package/lib/typescript/atoms/segmented-control/segmented-control.types.d.ts +26 -3
  123. package/lib/typescript/atoms/segmented-control/segments.d.ts +6 -0
  124. package/lib/typescript/atoms/slider/slider.ios.d.ts +4 -0
  125. package/lib/typescript/atoms/slider/slider.types.d.ts +7 -0
  126. package/lib/typescript/atoms/switch/switch.types.d.ts +2 -0
  127. package/lib/typescript/atoms/text/spans.d.ts +2 -0
  128. package/lib/typescript/atoms/text/text.types.d.ts +9 -1
  129. package/lib/typescript/atoms/text-field/text-field-input.d.ts +7 -0
  130. package/lib/typescript/atoms/text-field/text-field.types.d.ts +77 -4
  131. package/lib/typescript/molecules/collapsible/collapsible.types.d.ts +2 -0
  132. package/lib/typescript/molecules/radio-group/radio-group.types.d.ts +4 -0
  133. package/lib/typescript/molecules/search-bar/search-bar.types.d.ts +11 -1
  134. package/lib/typescript/molecules/stepper/stepper.ios.d.ts +2 -1
  135. package/lib/typescript/molecules/stepper/stepper.types.d.ts +17 -0
  136. package/lib/typescript/organisms/action-sheet/action-sheet.ios.d.ts +4 -0
  137. package/lib/typescript/organisms/action-sheet/action-sheet.types.d.ts +8 -3
  138. package/lib/typescript/organisms/alert/alert.types.d.ts +8 -3
  139. package/lib/typescript/organisms/menu/menu-parts.d.ts +14 -0
  140. package/lib/typescript/organisms/menu/menu.types.d.ts +35 -7
  141. package/lib/typescript/organisms/sheet/sheet.types.d.ts +7 -1
  142. package/package.json +4 -4
  143. package/src/atoms/badge/badge.android.tsx +9 -2
  144. package/src/atoms/badge/badge.ios.tsx +2 -2
  145. package/src/atoms/badge/badge.types.ts +2 -0
  146. package/src/atoms/button/button-tokens.ts +6 -3
  147. package/src/atoms/button/button.android.tsx +35 -11
  148. package/src/atoms/button/button.ios.tsx +72 -8
  149. package/src/atoms/button/button.types.ts +20 -5
  150. package/src/atoms/checkbox/checkbox.android.tsx +5 -2
  151. package/src/atoms/checkbox/checkbox.ios.tsx +2 -2
  152. package/src/atoms/checkbox/checkbox.types.ts +2 -0
  153. package/src/atoms/color-picker/color-picker.android.tsx +10 -2
  154. package/src/atoms/color-picker/color-picker.ios.tsx +24 -1
  155. package/src/atoms/color-picker/color-picker.types.ts +2 -0
  156. package/src/atoms/date-picker/date-picker.android.tsx +86 -16
  157. package/src/atoms/date-picker/date-picker.ios.tsx +20 -8
  158. package/src/atoms/date-picker/date-picker.types.ts +31 -7
  159. package/src/atoms/divider/divider.android.tsx +14 -3
  160. package/src/atoms/divider/divider.ios.tsx +4 -0
  161. package/src/atoms/divider/divider.types.ts +14 -2
  162. package/src/atoms/fab/fab.android.tsx +61 -11
  163. package/src/atoms/fab/fab.ios.tsx +48 -13
  164. package/src/atoms/fab/fab.types.ts +22 -4
  165. package/src/atoms/icon-button/icon-button.android.tsx +60 -10
  166. package/src/atoms/icon-button/icon-button.ios.tsx +77 -8
  167. package/src/atoms/icon-button/icon-button.types.ts +24 -4
  168. package/src/atoms/list/list.android.tsx +26 -4
  169. package/src/atoms/list/list.ios.tsx +20 -5
  170. package/src/atoms/list/list.types.ts +16 -1
  171. package/src/atoms/progress/progress.android.tsx +32 -6
  172. package/src/atoms/progress/progress.ios.tsx +11 -5
  173. package/src/atoms/progress/progress.types.ts +13 -2
  174. package/src/atoms/segmented-control/segmented-control.android.tsx +69 -10
  175. package/src/atoms/segmented-control/segmented-control.ios.tsx +24 -5
  176. package/src/atoms/segmented-control/segmented-control.types.ts +28 -3
  177. package/src/atoms/segmented-control/segments.ts +16 -0
  178. package/src/atoms/slider/slider.android.tsx +18 -2
  179. package/src/atoms/slider/slider.ios.tsx +38 -2
  180. package/src/atoms/slider/slider.types.ts +7 -0
  181. package/src/atoms/switch/switch.android.tsx +5 -2
  182. package/src/atoms/switch/switch.ios.tsx +2 -2
  183. package/src/atoms/switch/switch.types.ts +2 -0
  184. package/src/atoms/text/spans.ts +2 -1
  185. package/src/atoms/text/text.android.tsx +20 -7
  186. package/src/atoms/text/text.ios.tsx +7 -0
  187. package/src/atoms/text/text.types.ts +10 -1
  188. package/src/atoms/text-field/text-field-input.ts +17 -0
  189. package/src/atoms/text-field/text-field.android.tsx +132 -9
  190. package/src/atoms/text-field/text-field.ios.tsx +110 -6
  191. package/src/atoms/text-field/text-field.types.ts +98 -4
  192. package/src/molecules/collapsible/collapsible.android.tsx +10 -2
  193. package/src/molecules/collapsible/collapsible.ios.tsx +8 -2
  194. package/src/molecules/collapsible/collapsible.types.ts +2 -0
  195. package/src/molecules/radio-group/radio-group.android.tsx +18 -4
  196. package/src/molecules/radio-group/radio-group.ios.tsx +19 -5
  197. package/src/molecules/radio-group/radio-group.types.ts +4 -0
  198. package/src/molecules/search-bar/search-bar.tsx +9 -0
  199. package/src/molecules/search-bar/search-bar.types.ts +12 -1
  200. package/src/molecules/stepper/stepper.android.tsx +24 -4
  201. package/src/molecules/stepper/stepper.ios.tsx +23 -8
  202. package/src/molecules/stepper/stepper.types.ts +17 -0
  203. package/src/organisms/action-sheet/action-sheet.android.tsx +23 -11
  204. package/src/organisms/action-sheet/action-sheet.ios.tsx +20 -3
  205. package/src/organisms/action-sheet/action-sheet.types.ts +8 -3
  206. package/src/organisms/alert/alert.android.tsx +11 -8
  207. package/src/organisms/alert/alert.ios.tsx +2 -1
  208. package/src/organisms/alert/alert.types.ts +8 -3
  209. package/src/organisms/context-menu/context-menu.android.tsx +3 -2
  210. package/src/organisms/context-menu/context-menu.ios.tsx +1 -0
  211. package/src/organisms/fab-menu/fab-menu.android.tsx +3 -0
  212. package/src/organisms/fab-menu/fab-menu.ios.tsx +9 -1
  213. package/src/organisms/menu/menu-parts.ts +21 -0
  214. package/src/organisms/menu/menu.android.tsx +39 -10
  215. package/src/organisms/menu/menu.ios.tsx +55 -5
  216. package/src/organisms/menu/menu.types.ts +30 -7
  217. package/src/organisms/sheet/sheet.tsx +2 -1
  218. package/src/organisms/sheet/sheet.types.ts +7 -1
@@ -1,29 +1,72 @@
1
1
  "use strict";
2
2
 
3
- import { IconButton as ComposeIconButton } from '@expo/ui/jetpack-compose';
3
+ import { IconButton as ComposeIconButton, FilledIconButton, FilledTonalIconButton, OutlinedIconButton } from '@expo/ui/jetpack-compose';
4
+ import { testID as testIdModifier } from '@expo/ui/jetpack-compose/modifiers';
4
5
  import { useAccessibilityModifiers } from '@hzblj/kara-sx';
6
+ import { useAppTheme } from '@hzblj/kara-theme';
7
+ import { useMemo } from 'react';
5
8
  import { useHostGuard } from "../../host-context.js";
9
+ import { buttonTokens, contentOnTint } from "../button/button-tokens.js";
6
10
  import { Icon } from "../icon/index.js";
7
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
+ /** Material has no glass: `glass` is the tonal button, a contained one that still reads over a photo or a map. */
13
+ const MATERIAL_BY_VARIANT = {
14
+ filled: FilledIconButton,
15
+ glass: FilledTonalIconButton,
16
+ outlined: OutlinedIconButton,
17
+ plain: ComposeIconButton,
18
+ tonal: FilledTonalIconButton
19
+ };
20
+
21
+ /** Which `Button` variant's tokens fill the container: the same accent and secondary fills a `Button` draws. */
22
+ const FILL_BY_VARIANT = {
23
+ filled: 'accent',
24
+ glass: 'secondary',
25
+ outlined: undefined,
26
+ plain: undefined,
27
+ tonal: 'secondary'
28
+ };
8
29
  export const IconButton = ({
9
30
  accessibilityHint,
10
31
  accessibilityLabel,
32
+ color,
11
33
  disabled = false,
12
34
  name,
13
- onPress
35
+ onPress,
36
+ testID,
37
+ variant = 'plain'
14
38
  }) => {
15
39
  useHostGuard('IconButton');
40
+ const theme = useAppTheme();
16
41
  // The label rides on the icon, as Material's own icon buttons carry it; the hint labels the click.
17
- const modifiers = useAccessibilityModifiers({
42
+ const accessibilityModifiers = useAccessibilityModifiers({
18
43
  accessibilityHint
19
44
  }, accessibilityHint !== undefined);
20
- return /*#__PURE__*/_jsx(ComposeIconButton, {
45
+ const modifiers = useMemo(() => testID ? [testIdModifier(testID), ...accessibilityModifiers] : accessibilityModifiers, [accessibilityModifiers, testID]);
46
+ const MaterialIconButton = MATERIAL_BY_VARIANT[variant];
47
+ const fillVariant = FILL_BY_VARIANT[variant];
48
+ const tokens = fillVariant ? buttonTokens(fillVariant, disabled, theme) : undefined;
49
+
50
+ // `filled` takes the colour as its fill and picks the icon's on it, as a tinted `Button` does; the rest colour the icon.
51
+ const filled = variant === 'filled';
52
+ const fill = filled && color && !disabled ? color : tokens?.fill;
53
+ let iconColor = color ?? 'content.primary';
54
+ if (disabled) {
55
+ iconColor = 'btn.content.disabled';
56
+ } else if (filled) {
57
+ iconColor = color ? contentOnTint(color, theme) : 'content.on.accent';
58
+ }
59
+ return /*#__PURE__*/_jsx(MaterialIconButton, {
60
+ colors: fill ? {
61
+ containerColor: theme.color(fill),
62
+ disabledContainerColor: theme.color(fill)
63
+ } : undefined,
21
64
  enabled: !disabled,
22
65
  modifiers: modifiers,
23
66
  onClick: onPress,
24
67
  children: /*#__PURE__*/_jsx(Icon, {
25
68
  accessibilityLabel: accessibilityLabel,
26
- color: disabled ? 'btn.content.disabled' : 'content.primary',
69
+ color: iconColor,
27
70
  name: name
28
71
  })
29
72
  });
@@ -1 +1 @@
1
- {"version":3,"names":["IconButton","ComposeIconButton","useAccessibilityModifiers","useHostGuard","Icon","jsx","_jsx","accessibilityHint","accessibilityLabel","disabled","name","onPress","modifiers","undefined","enabled","onClick","children","color"],"sourceRoot":"../../../../src","sources":["atoms/icon-button/icon-button.android.tsx"],"mappings":";;AAAA,SAAQA,UAAU,IAAIC,iBAAiB,QAAO,0BAA0B;AACxE,SAAQC,yBAAyB,QAAO,gBAAgB;AAExD,SAAQC,YAAY,QAAO,uBAAoB;AAC/C,SAAQC,IAAI,QAAO,kBAAS;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG5B,OAAO,MAAMN,UAA+B,GAAGA,CAAC;EAC9CO,iBAAiB;EACjBC,kBAAkB;EAClBC,QAAQ,GAAG,KAAK;EAChBC,IAAI;EACJC;AACe,CAAC,KAAK;EACrBR,YAAY,CAAC,YAAY,CAAC;EAC1B;EACA,MAAMS,SAAS,GAAGV,yBAAyB,CAAC;IAACK;EAAiB,CAAC,EAAEA,iBAAiB,KAAKM,SAAS,CAAC;EAEjG,oBACEP,IAAA,CAACL,iBAAiB;IAACa,OAAO,EAAE,CAACL,QAAS;IAACG,SAAS,EAAEA,SAAU;IAACG,OAAO,EAAEJ,OAAQ;IAAAK,QAAA,eAC5EV,IAAA,CAACF,IAAI;MACHI,kBAAkB,EAAEA,kBAAmB;MACvCS,KAAK,EAAER,QAAQ,GAAG,sBAAsB,GAAG,iBAAkB;MAC7DC,IAAI,EAAEA;IAAK,CACZ;EAAC,CACe,CAAC;AAExB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["IconButton","ComposeIconButton","FilledIconButton","FilledTonalIconButton","OutlinedIconButton","testID","testIdModifier","useAccessibilityModifiers","useAppTheme","useMemo","useHostGuard","buttonTokens","contentOnTint","Icon","jsx","_jsx","MATERIAL_BY_VARIANT","filled","glass","outlined","plain","tonal","FILL_BY_VARIANT","undefined","accessibilityHint","accessibilityLabel","color","disabled","name","onPress","variant","theme","accessibilityModifiers","modifiers","MaterialIconButton","fillVariant","tokens","fill","iconColor","colors","containerColor","disabledContainerColor","enabled","onClick","children"],"sourceRoot":"../../../../src","sources":["atoms/icon-button/icon-button.android.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,52 +1,102 @@
1
1
  "use strict";
2
2
 
3
3
  import { Button } from '@expo/ui/swift-ui';
4
- import { buttonStyle, contentShape, disabled as disabledModifier, shapes } from '@expo/ui/swift-ui/modifiers';
4
+ import { buttonBorderShape, buttonStyle, contentShape, disabled as disabledModifier, shapes, tint as tintModifier } from '@expo/ui/swift-ui/modifiers';
5
+ import { isLiquidGlassAvailable } from '@hzblj/kara-native';
5
6
  import { useAccessibilityModifiers } from '@hzblj/kara-sx';
7
+ import { useAppTheme } from '@hzblj/kara-theme';
6
8
  import { useMemo } from 'react';
7
9
  import { useHostGuard } from "../../host-context.js";
10
+ import { contentOnTint } from "../button/button-tokens.js";
8
11
  import { Icon } from "../icon/index.js";
9
12
  import { ZStack } from "../z-stack/index.js";
10
13
  import { jsx as _jsx } from "react/jsx-runtime";
11
14
  /** Apple's least tap target. Android's `IconButton` is Material's 48dp; this is the same idea in points. */
12
15
  const TARGET = 44;
13
16
 
17
+ /** Material's 40dp container, the ring an `outlined` button draws inside its tap target. */
18
+ const RING = 40;
19
+
14
20
  /** The whole square takes the tap, not only the glyph's own pixels. */
15
21
  const WHOLE_TARGET = {
16
22
  modifiers: [contentShape(shapes.circle())]
17
23
  };
24
+
25
+ /**
26
+ * The SwiftUI style behind each variant. `outlined` has none (SwiftUI draws no ring around a button), so it is a plain
27
+ * button whose label draws the ring.
28
+ */
29
+ const STYLE_BY_VARIANT = {
30
+ filled: 'borderedProminent',
31
+ glass: 'glass',
32
+ outlined: 'plain',
33
+ plain: 'plain',
34
+ tonal: 'bordered'
35
+ };
18
36
  export const IconButton = ({
19
37
  accessibilityHint,
20
38
  accessibilityLabel,
39
+ color,
21
40
  disabled = false,
22
41
  name,
23
42
  onPress,
24
- testID
43
+ testID,
44
+ variant = 'plain'
25
45
  }) => {
26
46
  useHostGuard('IconButton');
47
+ const theme = useAppTheme();
27
48
  const accessibilityModifiers = useAccessibilityModifiers({
28
49
  accessibilityHint
29
50
  });
51
+ // Below iOS 26 `@expo/ui` turns `.glass` into `.automatic`, a bare icon; the tonal circle is what Android draws too.
52
+ const style = variant === 'glass' && !isLiquidGlassAvailable() ? 'bordered' : STYLE_BY_VARIANT[variant];
53
+ const bezel = style !== 'plain';
54
+
55
+ /**
56
+ * `filled` takes the colour as its fill, and the icon a colour that reads on it. `tonal` passes it as the tint too,
57
+ * which SwiftUI's bordered style draws its pale circle in. SwiftUI dims a disabled button's label itself, and greys a
58
+ * prominent one's fill, so a disabled filled icon goes back to the primary content colour rather than white on grey.
59
+ */
60
+ const fill = variant === 'filled' ? color ?? 'fill.accent.primary' : undefined;
61
+ const tint = fill ?? (variant === 'tonal' ? color : undefined);
62
+ const iconColor = fill ? disabled ? 'content.primary' : color ? contentOnTint(color, theme) : 'content.on.accent' : color ?? 'content.primary';
30
63
  const modifiers = useMemo(() => {
31
- const list = [buttonStyle('plain'), ...accessibilityModifiers];
64
+ const list = [buttonStyle(style)];
65
+ if (bezel) {
66
+ list.push(buttonBorderShape('circle'));
67
+ }
68
+ if (tint) {
69
+ list.push(tintModifier(theme.color(tint)));
70
+ }
71
+ list.push(...accessibilityModifiers);
32
72
  if (disabled) {
33
73
  list.push(disabledModifier(true));
34
74
  }
35
75
  return list;
36
- }, [accessibilityModifiers, disabled]);
76
+ }, [accessibilityModifiers, bezel, disabled, style, theme, tint]);
77
+
78
+ // A bezel style sizes its circle around the icon itself; a plain button's label is the whole target.
79
+ const icon = /*#__PURE__*/_jsx(Icon, {
80
+ accessibilityLabel: accessibilityLabel,
81
+ color: iconColor,
82
+ name: name
83
+ });
37
84
  return /*#__PURE__*/_jsx(Button, {
38
85
  modifiers: modifiers,
39
86
  onPress: onPress,
40
87
  testID: testID,
41
- children: /*#__PURE__*/_jsx(ZStack, {
88
+ children: bezel ? icon : /*#__PURE__*/_jsx(ZStack, {
42
89
  h: TARGET,
43
90
  ios: WHOLE_TARGET,
44
91
  w: TARGET,
45
- children: /*#__PURE__*/_jsx(Icon, {
46
- accessibilityLabel: accessibilityLabel,
47
- color: "content.primary",
48
- name: name
49
- })
92
+ children: variant === 'outlined' ? /*#__PURE__*/_jsx(ZStack, {
93
+ borderColor: "border.secondary.base",
94
+ borderRadius: "full",
95
+ borderWidth: 1,
96
+ h: RING,
97
+ w: RING,
98
+ children: icon
99
+ }) : icon
50
100
  })
51
101
  });
52
102
  };
@@ -1 +1 @@
1
- {"version":3,"names":["Button","buttonStyle","contentShape","disabled","disabledModifier","shapes","useAccessibilityModifiers","useMemo","useHostGuard","Icon","ZStack","jsx","_jsx","TARGET","WHOLE_TARGET","modifiers","circle","IconButton","accessibilityHint","accessibilityLabel","name","onPress","testID","accessibilityModifiers","list","push","children","h","ios","w","color"],"sourceRoot":"../../../../src","sources":["atoms/icon-button/icon-button.ios.tsx"],"mappings":";;AAAA,SAAQA,MAAM,QAAO,mBAAmB;AACxC,SAAQC,WAAW,EAAEC,YAAY,EAAEC,QAAQ,IAAIC,gBAAgB,EAAEC,MAAM,QAAO,6BAA6B;AAC3G,SAAQC,yBAAyB,QAAO,gBAAgB;AACxD,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAC/C,SAAQC,IAAI,QAAO,kBAAS;AAC5B,SAAQC,MAAM,QAAO,qBAAY;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGjC;AACA,MAAMC,MAAM,GAAG,EAAE;;AAEjB;AACA,MAAMC,YAAY,GAAG;EAACC,SAAS,EAAE,CAACb,YAAY,CAACG,MAAM,CAACW,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC;AAEjE,OAAO,MAAMC,UAA+B,GAAGA,CAAC;EAC9CC,iBAAiB;EACjBC,kBAAkB;EAClBhB,QAAQ,GAAG,KAAK;EAChBiB,IAAI;EACJC,OAAO;EACPC;AACe,CAAC,KAAK;EACrBd,YAAY,CAAC,YAAY,CAAC;EAC1B,MAAMe,sBAAsB,GAAGjB,yBAAyB,CAAC;IAACY;EAAiB,CAAC,CAAC;EAE7E,MAAMH,SAAS,GAAGR,OAAO,CAAC,MAAM;IAC9B,MAAMiB,IAAI,GAAG,CAACvB,WAAW,CAAC,OAAO,CAAC,EAAE,GAAGsB,sBAAsB,CAAC;IAE9D,IAAIpB,QAAQ,EAAE;MACZqB,IAAI,CAACC,IAAI,CAACrB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACnC;IAEA,OAAOoB,IAAI;EACb,CAAC,EAAE,CAACD,sBAAsB,EAAEpB,QAAQ,CAAC,CAAC;EAEtC,oBACES,IAAA,CAACZ,MAAM;IAACe,SAAS,EAAEA,SAAU;IAACM,OAAO,EAAEA,OAAQ;IAACC,MAAM,EAAEA,MAAO;IAAAI,QAAA,eAC7Dd,IAAA,CAACF,MAAM;MAACiB,CAAC,EAAEd,MAAO;MAACe,GAAG,EAAEd,YAAa;MAACe,CAAC,EAAEhB,MAAO;MAAAa,QAAA,eAE9Cd,IAAA,CAACH,IAAI;QAACU,kBAAkB,EAAEA,kBAAmB;QAACW,KAAK,EAAC,iBAAiB;QAACV,IAAI,EAAEA;MAAK,CAAE;IAAC,CAC9E;EAAC,CACH,CAAC;AAEb,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Button","buttonBorderShape","buttonStyle","contentShape","disabled","disabledModifier","shapes","tint","tintModifier","isLiquidGlassAvailable","useAccessibilityModifiers","useAppTheme","useMemo","useHostGuard","contentOnTint","Icon","ZStack","jsx","_jsx","TARGET","RING","WHOLE_TARGET","modifiers","circle","STYLE_BY_VARIANT","filled","glass","outlined","plain","tonal","IconButton","accessibilityHint","accessibilityLabel","color","name","onPress","testID","variant","theme","accessibilityModifiers","style","bezel","fill","undefined","iconColor","list","push","icon","children","h","ios","w","borderColor","borderRadius","borderWidth"],"sourceRoot":"../../../../src","sources":["atoms/icon-button/icon-button.ios.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,31 +1,59 @@
1
1
  "use strict";
2
2
 
3
3
  import { LazyColumn, PullToRefreshBox } from '@expo/ui/jetpack-compose';
4
+ import { testID as testIdModifier } from '@expo/ui/jetpack-compose/modifiers';
4
5
  import { useSxModifiers } from '@hzblj/kara-sx';
5
- import { Children, Fragment, isValidElement } from 'react';
6
+ import { spacing } from '@hzblj/kara-theme';
7
+ import { Children, Fragment, isValidElement, useMemo } from 'react';
6
8
  import { useHostGuard } from "../../host-context.js";
7
9
  import { useRefreshState } from "../../use-refresh-state.js";
10
+ import { Card } from "../card/index.js";
8
11
  import { Divider } from "../divider/index.js";
9
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
13
  /** A divider between rows, the separator SwiftUI's `List` draws on its own — so rows are written the same for both. */
11
14
  const withSeparators = children => Children.toArray(children).map((child, index) => /*#__PURE__*/_jsxs(Fragment, {
12
15
  children: [index > 0 ? /*#__PURE__*/_jsx(Divider, {}) : null, child]
13
16
  }, /*#__PURE__*/isValidElement(child) && child.key !== null ? child.key : index));
17
+
18
+ /** The card's inset from the column's edges, as `Form` keeps its cards off the screen's. */
19
+ const INSET = {
20
+ bottom: spacing.s16,
21
+ end: spacing.s16,
22
+ start: spacing.s16,
23
+ top: spacing.s16
24
+ };
25
+
26
+ /**
27
+ * `plain` is the column as it always was. `insetGrouped` sets the rows in one `Card`, the way `Form` draws a section,
28
+ * inset by the column's content padding: the card is a single item of the column, so its rows are composed together
29
+ * rather than as they scroll in. A long list that wants laziness stays `plain`.
30
+ */
14
31
  export const List = ({
15
32
  children,
16
- onRefresh
33
+ onRefresh,
34
+ separators = true,
35
+ testID,
36
+ variant = 'plain'
17
37
  }) => {
18
38
  useHostGuard('List');
19
- const modifiers = useSxModifiers({
39
+ const sxModifiers = useSxModifiers({
20
40
  wide: true
21
41
  });
42
+ // On the column, not the refresh box around it: the column is what scrolls.
43
+ const modifiers = useMemo(() => testID ? [...sxModifiers, testIdModifier(testID)] : sxModifiers, [sxModifiers, testID]);
22
44
  const {
23
45
  isRefreshing,
24
46
  refresh
25
47
  } = useRefreshState(onRefresh);
48
+ const rows = separators ? withSeparators(children) : children;
49
+ const grouped = variant === 'insetGrouped';
26
50
  const column = /*#__PURE__*/_jsx(LazyColumn, {
51
+ contentPadding: grouped ? INSET : undefined,
27
52
  modifiers: modifiers,
28
- children: withSeparators(children)
53
+ children: grouped && Children.toArray(children).length > 0 ? /*#__PURE__*/_jsx(Card, {
54
+ wide: true,
55
+ children: rows
56
+ }) : rows
29
57
  });
30
58
  if (!onRefresh) {
31
59
  return column;
@@ -1 +1 @@
1
- {"version":3,"names":["LazyColumn","PullToRefreshBox","useSxModifiers","Children","Fragment","isValidElement","useHostGuard","useRefreshState","Divider","jsx","_jsx","jsxs","_jsxs","withSeparators","children","toArray","map","child","index","key","List","onRefresh","modifiers","wide","isRefreshing","refresh","column"],"sourceRoot":"../../../../src","sources":["atoms/list/list.android.tsx"],"mappings":";;AAAA,SAAQA,UAAU,EAAEC,gBAAgB,QAAO,0BAA0B;AACrE,SAAQC,cAAc,QAAO,gBAAgB;AAC7C,SAAQC,QAAQ,EAAEC,QAAQ,EAAEC,cAAc,QAAO,OAAO;AACxD,SAAQC,YAAY,QAAO,uBAAoB;AAC/C,SAAQC,eAAe,QAAO,4BAAyB;AACvD,SAAQC,OAAO,QAAO,qBAAY;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGlC;AACA,MAAMC,cAAc,GAAIC,QAA+B,IACrDX,QAAQ,CAACY,OAAO,CAACD,QAAQ,CAAC,CAACE,GAAG,CAAC,CAACC,KAAK,EAAEC,KAAK,kBAC1CN,KAAA,CAACR,QAAQ;EAAAU,QAAA,GACNI,KAAK,GAAG,CAAC,gBAAGR,IAAA,CAACF,OAAO,IAAE,CAAC,GAAG,IAAI,EAC9BS,KAAK;AAAA,GAFO,aAAAZ,cAAc,CAACY,KAAK,CAAC,IAAIA,KAAK,CAACE,GAAG,KAAK,IAAI,GAAGF,KAAK,CAACE,GAAG,GAAGD,KAG/D,CACX,CAAC;AAEJ,OAAO,MAAME,IAAmB,GAAGA,CAAC;EAACN,QAAQ;EAAEO;AAAoB,CAAC,KAAK;EACvEf,YAAY,CAAC,MAAM,CAAC;EACpB,MAAMgB,SAAS,GAAGpB,cAAc,CAAC;IAACqB,IAAI,EAAE;EAAI,CAAC,CAAC;EAC9C,MAAM;IAACC,YAAY;IAAEC;EAAO,CAAC,GAAGlB,eAAe,CAACc,SAAS,CAAC;EAE1D,MAAMK,MAAM,gBAAGhB,IAAA,CAACV,UAAU;IAACsB,SAAS,EAAEA,SAAU;IAAAR,QAAA,EAAED,cAAc,CAACC,QAAQ;EAAC,CAAa,CAAC;EAExF,IAAI,CAACO,SAAS,EAAE;IACd,OAAOK,MAAM;EACf;EAEA,oBACEhB,IAAA,CAACT,gBAAgB;IAACuB,YAAY,EAAEA,YAAa;IAACH,SAAS,EAAEI,OAAQ;IAAAX,QAAA,EAC9DY;EAAM,CACS,CAAC;AAEvB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["LazyColumn","PullToRefreshBox","testID","testIdModifier","useSxModifiers","spacing","Children","Fragment","isValidElement","useMemo","useHostGuard","useRefreshState","Card","Divider","jsx","_jsx","jsxs","_jsxs","withSeparators","children","toArray","map","child","index","key","INSET","bottom","s16","end","start","top","List","onRefresh","separators","variant","sxModifiers","wide","modifiers","isRefreshing","refresh","rows","grouped","column","contentPadding","undefined","length"],"sourceRoot":"../../../../src","sources":["atoms/list/list.android.tsx"],"mappings":";;AAAA,SAAQA,UAAU,EAAEC,gBAAgB,QAAO,0BAA0B;AACrE,SAAQC,MAAM,IAAIC,cAAc,QAAO,oCAAoC;AAC3E,SAAQC,cAAc,QAAO,gBAAgB;AAC7C,SAAQC,OAAO,QAAO,mBAAmB;AACzC,SAAQC,QAAQ,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,OAAO,QAAO,OAAO;AACjE,SAAQC,YAAY,QAAO,uBAAoB;AAC/C,SAAQC,eAAe,QAAO,4BAAyB;AACvD,SAAQC,IAAI,QAAO,kBAAS;AAC5B,SAAQC,OAAO,QAAO,qBAAY;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGlC;AACA,MAAMC,cAAc,GAAIC,QAA+B,IACrDb,QAAQ,CAACc,OAAO,CAACD,QAAQ,CAAC,CAACE,GAAG,CAAC,CAACC,KAAK,EAAEC,KAAK,kBAC1CN,KAAA,CAACV,QAAQ;EAAAY,QAAA,GACNI,KAAK,GAAG,CAAC,gBAAGR,IAAA,CAACF,OAAO,IAAE,CAAC,GAAG,IAAI,EAC9BS,KAAK;AAAA,GAFO,aAAAd,cAAc,CAACc,KAAK,CAAC,IAAIA,KAAK,CAACE,GAAG,KAAK,IAAI,GAAGF,KAAK,CAACE,GAAG,GAAGD,KAG/D,CACX,CAAC;;AAEJ;AACA,MAAME,KAAK,GAAG;EAACC,MAAM,EAAErB,OAAO,CAACsB,GAAG;EAAEC,GAAG,EAAEvB,OAAO,CAACsB,GAAG;EAAEE,KAAK,EAAExB,OAAO,CAACsB,GAAG;EAAEG,GAAG,EAAEzB,OAAO,CAACsB;AAAG,CAAC;;AAE3F;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,IAAmB,GAAGA,CAAC;EAACZ,QAAQ;EAAEa,SAAS;EAAEC,UAAU,GAAG,IAAI;EAAE/B,MAAM;EAAEgC,OAAO,GAAG;AAAkB,CAAC,KAAK;EACrHxB,YAAY,CAAC,MAAM,CAAC;EACpB,MAAMyB,WAAW,GAAG/B,cAAc,CAAC;IAACgC,IAAI,EAAE;EAAI,CAAC,CAAC;EAChD;EACA,MAAMC,SAAS,GAAG5B,OAAO,CACvB,MAAOP,MAAM,GAAG,CAAC,GAAGiC,WAAW,EAAEhC,cAAc,CAACD,MAAM,CAAC,CAAC,GAAGiC,WAAY,EACvE,CAACA,WAAW,EAAEjC,MAAM,CACtB,CAAC;EACD,MAAM;IAACoC,YAAY;IAAEC;EAAO,CAAC,GAAG5B,eAAe,CAACqB,SAAS,CAAC;EAC1D,MAAMQ,IAAI,GAAGP,UAAU,GAAGf,cAAc,CAACC,QAAQ,CAAC,GAAGA,QAAQ;EAC7D,MAAMsB,OAAO,GAAGP,OAAO,KAAK,cAAc;EAE1C,MAAMQ,MAAM,gBACV3B,IAAA,CAACf,UAAU;IAAC2C,cAAc,EAAEF,OAAO,GAAGhB,KAAK,GAAGmB,SAAU;IAACP,SAAS,EAAEA,SAAU;IAAAlB,QAAA,EAC3EsB,OAAO,IAAInC,QAAQ,CAACc,OAAO,CAACD,QAAQ,CAAC,CAAC0B,MAAM,GAAG,CAAC,gBAAG9B,IAAA,CAACH,IAAI;MAACwB,IAAI;MAAAjB,QAAA,EAAEqB;IAAI,CAAO,CAAC,GAAGA;EAAI,CACzE,CACb;EAED,IAAI,CAACR,SAAS,EAAE;IACd,OAAOU,MAAM;EACf;EAEA,oBACE3B,IAAA,CAACd,gBAAgB;IAACqC,YAAY,EAAEA,YAAa;IAACN,SAAS,EAAEO,OAAQ;IAAApB,QAAA,EAC9DuB;EAAM,CACS,CAAC;AAEvB,CAAC","ignoreList":[]}
@@ -1,21 +1,31 @@
1
1
  "use strict";
2
2
 
3
- import { List as SwiftUIList } from '@expo/ui/swift-ui';
4
- import { refreshable } from '@expo/ui/swift-ui/modifiers';
3
+ import { Group, List as SwiftUIList } from '@expo/ui/swift-ui';
4
+ import { listRowSeparator, listStyle, refreshable } from '@expo/ui/swift-ui/modifiers';
5
5
  import { useMemo } from 'react';
6
6
  import { useHostGuard } from "../../host-context.js";
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
8
+ /**
9
+ * `listRowSeparator` is a row's preference, not the list's: set on the `List` it reaches no row. A `Group` hands a
10
+ * modifier to each of its children, so the rows go in one, and each of them hides its own separator.
11
+ */
12
+ const NO_SEPARATORS = [listRowSeparator('hidden')];
8
13
  export const List = ({
9
14
  children,
10
15
  onRefresh,
11
- testID
16
+ separators = true,
17
+ testID,
18
+ variant = 'insetGrouped'
12
19
  }) => {
13
20
  useHostGuard('List');
14
- const modifiers = useMemo(() => onRefresh ? [refreshable(onRefresh)] : [], [onRefresh]);
21
+ const modifiers = useMemo(() => [listStyle(variant), ...(onRefresh ? [refreshable(onRefresh)] : [])], [onRefresh, variant]);
15
22
  return /*#__PURE__*/_jsx(SwiftUIList, {
16
23
  modifiers: modifiers,
17
24
  testID: testID,
18
- children: children
25
+ children: separators ? children : /*#__PURE__*/_jsx(Group, {
26
+ modifiers: NO_SEPARATORS,
27
+ children: children
28
+ })
19
29
  });
20
30
  };
21
31
  //# sourceMappingURL=list.ios.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["List","SwiftUIList","refreshable","useMemo","useHostGuard","jsx","_jsx","children","onRefresh","testID","modifiers"],"sourceRoot":"../../../../src","sources":["atoms/list/list.ios.tsx"],"mappings":";;AAAA,SAAQA,IAAI,IAAIC,WAAW,QAAO,mBAAmB;AACrD,SAA6BC,WAAW,QAAO,6BAA6B;AAC5E,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,OAAO,MAAMN,IAAmB,GAAGA,CAAC;EAACO,QAAQ;EAAEC,SAAS;EAAEC;AAAiB,CAAC,KAAK;EAC/EL,YAAY,CAAC,MAAM,CAAC;EAEpB,MAAMM,SAAS,GAAGP,OAAO,CAAmB,MAAOK,SAAS,GAAG,CAACN,WAAW,CAACM,SAAS,CAAC,CAAC,GAAG,EAAG,EAAE,CAACA,SAAS,CAAC,CAAC;EAE3G,oBACEF,IAAA,CAACL,WAAW;IAACS,SAAS,EAAEA,SAAU;IAACD,MAAM,EAAEA,MAAO;IAAAF,QAAA,EAC/CA;EAAQ,CACE,CAAC;AAElB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Group","List","SwiftUIList","listRowSeparator","listStyle","refreshable","useMemo","useHostGuard","jsx","_jsx","NO_SEPARATORS","children","onRefresh","separators","testID","variant","modifiers"],"sourceRoot":"../../../../src","sources":["atoms/list/list.ios.tsx"],"mappings":";;AAAA,SAAQA,KAAK,EAAEC,IAAI,IAAIC,WAAW,QAAO,mBAAmB;AAC5D,SAAQC,gBAAgB,EAAEC,SAAS,EAAuBC,WAAW,QAAO,6BAA6B;AACzG,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAG,CAACP,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAElD,OAAO,MAAMF,IAAmB,GAAGA,CAAC;EAClCU,QAAQ;EACRC,SAAS;EACTC,UAAU,GAAG,IAAI;EACjBC,MAAM;EACNC,OAAO,GAAG;AACD,CAAC,KAAK;EACfR,YAAY,CAAC,MAAM,CAAC;EAEpB,MAAMS,SAAS,GAAGV,OAAO,CACvB,MAAM,CAACF,SAAS,CAACW,OAAO,CAAC,EAAE,IAAIH,SAAS,GAAG,CAACP,WAAW,CAACO,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAC1E,CAACA,SAAS,EAAEG,OAAO,CACrB,CAAC;EAED,oBACEN,IAAA,CAACP,WAAW;IAACc,SAAS,EAAEA,SAAU;IAACF,MAAM,EAAEA,MAAO;IAAAH,QAAA,EAC/CE,UAAU,GAAGF,QAAQ,gBAAGF,IAAA,CAACT,KAAK;MAACgB,SAAS,EAAEN,aAAc;MAAAC,QAAA,EAAEA;IAAQ,CAAQ;EAAC,CACjE,CAAC;AAElB,CAAC","ignoreList":[]}
@@ -1,32 +1,46 @@
1
1
  "use strict";
2
2
 
3
3
  import { CircularProgressIndicator, LinearProgressIndicator } from '@expo/ui/jetpack-compose';
4
+ import { testID as testIdModifier } from '@expo/ui/jetpack-compose/modifiers';
4
5
  import { useAccessibilityModifiers } from '@hzblj/kara-sx';
5
- import { useAppTheme } from '@hzblj/kara-theme';
6
+ import { useAppTheme, withOpacity } from '@hzblj/kara-theme';
7
+ import { useMemo } from 'react';
6
8
  import { useHostGuard } from "../../host-context.js";
7
9
  import { jsx as _jsx } from "react/jsx-runtime";
10
+ /**
11
+ * Material draws the track in the seeded scheme's `secondaryContainer`, a pale accent: under a red or a green bar it
12
+ * would read as a second colour. Any other colour gets its own faded track instead, the way the accent's is pale; the
13
+ * accent keeps Material's. An indeterminate ring has no track in Material, so it is left without one.
14
+ */
8
15
  export const Progress = ({
9
16
  accessibilityLabel,
10
17
  circular = false,
18
+ color = 'fill.accent.primary',
19
+ testID,
11
20
  value
12
21
  }) => {
13
22
  useHostGuard('Progress');
14
23
  const theme = useAppTheme();
15
- const color = theme.color('fill.accent.primary');
16
- const modifiers = useAccessibilityModifiers({
24
+ const indicator = theme.color(color);
25
+ // The website reads the default above from the source, so it stays a literal rather than a shared constant.
26
+ const track = color === 'fill.accent.primary' ? undefined : withOpacity(String(indicator), 'o20');
27
+ const accessibilityModifiers = useAccessibilityModifiers({
17
28
  accessibilityLabel
18
29
  });
30
+ const modifiers = useMemo(() => testID ? [testIdModifier(testID), ...accessibilityModifiers] : accessibilityModifiers, [accessibilityModifiers, testID]);
19
31
  if (circular) {
20
32
  return /*#__PURE__*/_jsx(CircularProgressIndicator, {
21
- color: color,
33
+ color: indicator,
22
34
  modifiers: modifiers,
23
- progress: value
35
+ progress: value,
36
+ trackColor: value === undefined ? undefined : track
24
37
  });
25
38
  }
26
39
  return /*#__PURE__*/_jsx(LinearProgressIndicator, {
27
- color: color,
40
+ color: indicator,
28
41
  modifiers: modifiers,
29
- progress: value
42
+ progress: value,
43
+ trackColor: track
30
44
  });
31
45
  };
32
46
  //# sourceMappingURL=progress.android.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CircularProgressIndicator","LinearProgressIndicator","useAccessibilityModifiers","useAppTheme","useHostGuard","jsx","_jsx","Progress","accessibilityLabel","circular","value","theme","color","modifiers","progress"],"sourceRoot":"../../../../src","sources":["atoms/progress/progress.android.tsx"],"mappings":";;AAAA,SAAQA,yBAAyB,EAAEC,uBAAuB,QAAO,0BAA0B;AAC3F,SAAQC,yBAAyB,QAAO,gBAAgB;AACxD,SAAQC,WAAW,QAAO,mBAAmB;AAE7C,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,OAAO,MAAMC,QAA2B,GAAGA,CAAC;EAACC,kBAAkB;EAAEC,QAAQ,GAAG,KAAK;EAAEC;AAAoB,CAAC,KAAK;EAC3GN,YAAY,CAAC,UAAU,CAAC;EACxB,MAAMO,KAAK,GAAGR,WAAW,CAAC,CAAC;EAC3B,MAAMS,KAAK,GAAGD,KAAK,CAACC,KAAK,CAAC,qBAAqB,CAAC;EAChD,MAAMC,SAAS,GAAGX,yBAAyB,CAAC;IAACM;EAAkB,CAAC,CAAC;EAEjE,IAAIC,QAAQ,EAAE;IACZ,oBAAOH,IAAA,CAACN,yBAAyB;MAACY,KAAK,EAAEA,KAAM;MAACC,SAAS,EAAEA,SAAU;MAACC,QAAQ,EAAEJ;IAAM,CAAE,CAAC;EAC3F;EAEA,oBAAOJ,IAAA,CAACL,uBAAuB;IAACW,KAAK,EAAEA,KAAM;IAACC,SAAS,EAAEA,SAAU;IAACC,QAAQ,EAAEJ;EAAM,CAAE,CAAC;AACzF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["CircularProgressIndicator","LinearProgressIndicator","testID","testIdModifier","useAccessibilityModifiers","useAppTheme","withOpacity","useMemo","useHostGuard","jsx","_jsx","Progress","accessibilityLabel","circular","color","value","theme","indicator","track","undefined","String","accessibilityModifiers","modifiers","progress","trackColor"],"sourceRoot":"../../../../src","sources":["atoms/progress/progress.android.tsx"],"mappings":";;AAAA,SAAQA,yBAAyB,EAAEC,uBAAuB,QAAO,0BAA0B;AAC3F,SAAQC,MAAM,IAAIC,cAAc,QAAO,oCAAoC;AAC3E,SAAQC,yBAAyB,QAAO,gBAAgB;AACxD,SAAQC,WAAW,EAAEC,WAAW,QAAO,mBAAmB;AAC1D,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAA2B,GAAGA,CAAC;EAC1CC,kBAAkB;EAClBC,QAAQ,GAAG,KAAK;EAChBC,KAAK,GAAG,qBAAqB;EAC7BZ,MAAM;EACNa;AACa,CAAC,KAAK;EACnBP,YAAY,CAAC,UAAU,CAAC;EACxB,MAAMQ,KAAK,GAAGX,WAAW,CAAC,CAAC;EAC3B,MAAMY,SAAS,GAAGD,KAAK,CAACF,KAAK,CAACA,KAAK,CAAC;EACpC;EACA,MAAMI,KAAK,GAAGJ,KAAK,KAAK,qBAAqB,GAAGK,SAAS,GAAGb,WAAW,CAACc,MAAM,CAACH,SAAS,CAAC,EAAE,KAAK,CAAC;EACjG,MAAMI,sBAAsB,GAAGjB,yBAAyB,CAAC;IAACQ;EAAkB,CAAC,CAAC;EAC9E,MAAMU,SAAS,GAAGf,OAAO,CACvB,MAAOL,MAAM,GAAG,CAACC,cAAc,CAACD,MAAM,CAAC,EAAE,GAAGmB,sBAAsB,CAAC,GAAGA,sBAAuB,EAC7F,CAACA,sBAAsB,EAAEnB,MAAM,CACjC,CAAC;EAED,IAAIW,QAAQ,EAAE;IACZ,oBACEH,IAAA,CAACV,yBAAyB;MACxBc,KAAK,EAAEG,SAAU;MACjBK,SAAS,EAAEA,SAAU;MACrBC,QAAQ,EAAER,KAAM;MAChBS,UAAU,EAAET,KAAK,KAAKI,SAAS,GAAGA,SAAS,GAAGD;IAAM,CACrD,CAAC;EAEN;EAEA,oBAAOR,IAAA,CAACT,uBAAuB;IAACa,KAAK,EAAEG,SAAU;IAACK,SAAS,EAAEA,SAAU;IAACC,QAAQ,EAAER,KAAM;IAACS,UAAU,EAAEN;EAAM,CAAE,CAAC;AAChH,CAAC","ignoreList":[]}
@@ -10,6 +10,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
10
10
  export const Progress = ({
11
11
  accessibilityLabel,
12
12
  circular = false,
13
+ color = 'fill.accent.primary',
14
+ testID,
13
15
  value
14
16
  }) => {
15
17
  useHostGuard('Progress');
@@ -18,14 +20,16 @@ export const Progress = ({
18
20
  accessibilityLabel
19
21
  });
20
22
  const ring = circular && value !== undefined;
21
- const modifiers = useMemo(() => [ring ? gaugeStyle('circularCapacity') : progressViewStyle(circular ? 'circular' : 'linear'), tint(theme.color('fill.accent.primary')), ...accessibilityModifiers], [accessibilityModifiers, circular, ring, theme]);
23
+ const modifiers = useMemo(() => [ring ? gaugeStyle('circularCapacity') : progressViewStyle(circular ? 'circular' : 'linear'), tint(theme.color(color)), ...accessibilityModifiers], [accessibilityModifiers, circular, color, ring, theme]);
22
24
 
23
25
  // SwiftUI's circular `ProgressView` ignores its value on iOS and spins; a ring that fills is a capacity `Gauge`.
24
26
  return ring ? /*#__PURE__*/_jsx(Gauge, {
25
27
  modifiers: modifiers,
28
+ testID: testID,
26
29
  value: value
27
30
  }) : /*#__PURE__*/_jsx(ProgressView, {
28
31
  modifiers: modifiers,
32
+ testID: testID,
29
33
  value: value ?? null
30
34
  });
31
35
  };
@@ -1 +1 @@
1
- {"version":3,"names":["Gauge","ProgressView","gaugeStyle","progressViewStyle","tint","useAccessibilityModifiers","useAppTheme","useMemo","useHostGuard","jsx","_jsx","Progress","accessibilityLabel","circular","value","theme","accessibilityModifiers","ring","undefined","modifiers","color"],"sourceRoot":"../../../../src","sources":["atoms/progress/progress.ios.tsx"],"mappings":";;AAAA,SAAQA,KAAK,EAAEC,YAAY,QAAO,mBAAmB;AACrD,SAAQC,UAAU,EAAEC,iBAAiB,EAAEC,IAAI,QAAO,6BAA6B;AAC/E,SAAQC,yBAAyB,QAAO,gBAAgB;AACxD,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,OAAO,MAAMC,QAA2B,GAAGA,CAAC;EAACC,kBAAkB;EAAEC,QAAQ,GAAG,KAAK;EAAEC;AAAoB,CAAC,KAAK;EAC3GN,YAAY,CAAC,UAAU,CAAC;EACxB,MAAMO,KAAK,GAAGT,WAAW,CAAC,CAAC;EAC3B,MAAMU,sBAAsB,GAAGX,yBAAyB,CAAC;IAACO;EAAkB,CAAC,CAAC;EAE9E,MAAMK,IAAI,GAAGJ,QAAQ,IAAIC,KAAK,KAAKI,SAAS;EAC5C,MAAMC,SAAS,GAAGZ,OAAO,CACvB,MAAM,CACJU,IAAI,GAAGf,UAAU,CAAC,kBAAkB,CAAC,GAAGC,iBAAiB,CAACU,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC,EAC3FT,IAAI,CAACW,KAAK,CAACK,KAAK,CAAC,qBAAqB,CAAC,CAAC,EACxC,GAAGJ,sBAAsB,CAC1B,EACD,CAACA,sBAAsB,EAAEH,QAAQ,EAAEI,IAAI,EAAEF,KAAK,CAChD,CAAC;;EAED;EACA,OAAOE,IAAI,gBACTP,IAAA,CAACV,KAAK;IAACmB,SAAS,EAAEA,SAAU;IAACL,KAAK,EAAEA;EAAM,CAAE,CAAC,gBAE7CJ,IAAA,CAACT,YAAY;IAACkB,SAAS,EAAEA,SAAU;IAACL,KAAK,EAAEA,KAAK,IAAI;EAAK,CAAE,CAC5D;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Gauge","ProgressView","gaugeStyle","progressViewStyle","tint","useAccessibilityModifiers","useAppTheme","useMemo","useHostGuard","jsx","_jsx","Progress","accessibilityLabel","circular","color","testID","value","theme","accessibilityModifiers","ring","undefined","modifiers"],"sourceRoot":"../../../../src","sources":["atoms/progress/progress.ios.tsx"],"mappings":";;AAAA,SAAQA,KAAK,EAAEC,YAAY,QAAO,mBAAmB;AACrD,SAAQC,UAAU,EAAEC,iBAAiB,EAAEC,IAAI,QAAO,6BAA6B;AAC/E,SAAQC,yBAAyB,QAAO,gBAAgB;AACxD,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,OAAO,MAAMC,QAA2B,GAAGA,CAAC;EAC1CC,kBAAkB;EAClBC,QAAQ,GAAG,KAAK;EAChBC,KAAK,GAAG,qBAAqB;EAC7BC,MAAM;EACNC;AACa,CAAC,KAAK;EACnBR,YAAY,CAAC,UAAU,CAAC;EACxB,MAAMS,KAAK,GAAGX,WAAW,CAAC,CAAC;EAC3B,MAAMY,sBAAsB,GAAGb,yBAAyB,CAAC;IAACO;EAAkB,CAAC,CAAC;EAE9E,MAAMO,IAAI,GAAGN,QAAQ,IAAIG,KAAK,KAAKI,SAAS;EAC5C,MAAMC,SAAS,GAAGd,OAAO,CACvB,MAAM,CACJY,IAAI,GAAGjB,UAAU,CAAC,kBAAkB,CAAC,GAAGC,iBAAiB,CAACU,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC,EAC3FT,IAAI,CAACa,KAAK,CAACH,KAAK,CAACA,KAAK,CAAC,CAAC,EACxB,GAAGI,sBAAsB,CAC1B,EACD,CAACA,sBAAsB,EAAEL,QAAQ,EAAEC,KAAK,EAAEK,IAAI,EAAEF,KAAK,CACvD,CAAC;;EAED;EACA,OAAOE,IAAI,gBACTT,IAAA,CAACV,KAAK;IAACqB,SAAS,EAAEA,SAAU;IAACN,MAAM,EAAEA,MAAO;IAACC,KAAK,EAAEA;EAAM,CAAE,CAAC,gBAE7DN,IAAA,CAACT,YAAY;IAACoB,SAAS,EAAEA,SAAU;IAACN,MAAM,EAAEA,MAAO;IAACC,KAAK,EAAEA,KAAK,IAAI;EAAK,CAAE,CAC5E;AACH,CAAC","ignoreList":[]}
@@ -1,19 +1,59 @@
1
1
  "use strict";
2
2
 
3
3
  import { Host, SegmentedButton, SingleChoiceSegmentedButtonRow, Text } from '@expo/ui/jetpack-compose';
4
- import { fillMaxWidth, testID as testIdModifier, weight } from '@expo/ui/jetpack-compose/modifiers';
4
+ import { fillMaxWidth, height, testID as testIdModifier, weight } from '@expo/ui/jetpack-compose/modifiers';
5
+ import { iconResourceName } from '@hzblj/expo-native-icons';
5
6
  import { haptics } from '@hzblj/expo-rich-haptics';
6
- import { useAppTheme } from '@hzblj/kara-theme';
7
+ import { DrawableIcon, NativeImage } from '@hzblj/kara-native/jetpack-compose';
8
+ import { spacing as spacingTokens, useAppTheme } from '@hzblj/kara-theme';
7
9
  import { useCallback, useMemo } from 'react';
8
10
  import { useInsideHost } from "../../host-context.js";
9
- import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { HStack } from "../h-stack/index.js";
12
+ import { imageUri, segmentOf } from "./segments.js";
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
14
  const MATCH_HEIGHT_ONLY = {
11
15
  horizontal: false,
12
16
  vertical: true
13
17
  };
14
18
 
15
- /** Every segment the same width, like UIKit's: Material's would size each to its label. */
16
- const SEGMENT = [weight(1)];
19
+ /** Material's own segment height, which `spacing` only ever adds to. */
20
+ const MATERIAL_HEIGHT = 40;
21
+ /**
22
+ * What a segment shows: its label, one of the app's icons before it, or an image loaded by kara-native. The icon and a
23
+ * label the image falls back to take the segment's content colour, so they follow the selection and `disabled`.
24
+ */
25
+ const SegmentLabel = ({
26
+ iconSize,
27
+ segment
28
+ }) => {
29
+ const theme = useAppTheme();
30
+ const face = theme.typography.subheadlineMedium;
31
+ if (segment.image !== undefined) {
32
+ return /*#__PURE__*/_jsx(NativeImage, {
33
+ fontFamily: face.fontFamily,
34
+ fontSize: face.fontSize,
35
+ fontWeight: String(face.fontWeight),
36
+ imageHeight: iconSize,
37
+ label: segment.label,
38
+ source: imageUri(segment.image)
39
+ });
40
+ }
41
+ const label = /*#__PURE__*/_jsx(Text, {
42
+ style: face,
43
+ children: segment.label
44
+ });
45
+ if (segment.icon === undefined) {
46
+ return label;
47
+ }
48
+ return /*#__PURE__*/_jsxs(HStack, {
49
+ align: "center",
50
+ spacing: "s6",
51
+ children: [/*#__PURE__*/_jsx(DrawableIcon, {
52
+ iconSize: iconSize,
53
+ resourceName: iconResourceName(segment.icon)
54
+ }), label]
55
+ });
56
+ };
17
57
 
18
58
  /**
19
59
  * Material's single-choice segmented buttons, the selected one filled with the accent like a checked `Switch`. Its own
@@ -23,13 +63,27 @@ const SEGMENT = [weight(1)];
23
63
  */
24
64
  export const SegmentedControl = ({
25
65
  disabled = false,
66
+ iconSize = 's20',
26
67
  onChange,
27
68
  selectedIndex,
69
+ spacing,
28
70
  testID,
29
71
  values
30
72
  }) => {
31
73
  const theme = useAppTheme();
32
74
  const insideHost = useInsideHost();
75
+ const segments = useMemo(() => values.map(segmentOf), [values]);
76
+ const iconPoints = spacingTokens[iconSize];
77
+
78
+ // Every segment the same width, like UIKit's: Material's would size each to its label. With `spacing`, as tall as
79
+ // the content and that space, and never shorter than Material's own segment.
80
+ const segmentModifiers = useMemo(() => {
81
+ if (spacing === undefined) {
82
+ return [weight(1)];
83
+ }
84
+ const content = Math.max(theme.typography.subheadlineMedium.lineHeight, iconPoints);
85
+ return [weight(1), height(Math.max(MATERIAL_HEIGHT, content + 2 * spacingTokens[spacing]))];
86
+ }, [iconPoints, spacing, theme]);
33
87
 
34
88
  // Every segment keeps the same outline, the selected one too: an accent border would run its fill out over the line
35
89
  // the others draw inside, and make it look taller than its neighbours.
@@ -53,20 +107,20 @@ export const SegmentedControl = ({
53
107
  return;
54
108
  }
55
109
  haptics.selection();
56
- onChange?.(index, values[index] ?? '');
57
- }, [onChange, selectedIndex, values]);
110
+ onChange?.(index, segments[index]?.label ?? '');
111
+ }, [onChange, segments, selectedIndex]);
58
112
  const row = /*#__PURE__*/_jsx(SingleChoiceSegmentedButtonRow, {
59
113
  modifiers: rowModifiers,
60
- children: values.map((label, index) => /*#__PURE__*/_jsx(SegmentedButton, {
114
+ children: segments.map((segment, index) => /*#__PURE__*/_jsx(SegmentedButton, {
61
115
  colors: colors,
62
116
  enabled: !disabled,
63
- modifiers: SEGMENT,
117
+ modifiers: segmentModifiers,
64
118
  onClick: () => select(index),
65
119
  selected: index === selectedIndex,
66
120
  children: /*#__PURE__*/_jsx(SegmentedButton.Label, {
67
- children: /*#__PURE__*/_jsx(Text, {
68
- style: theme.typography.subheadlineMedium,
69
- children: label
121
+ children: /*#__PURE__*/_jsx(SegmentLabel, {
122
+ iconSize: iconPoints,
123
+ segment: segment
70
124
  })
71
125
  })
72
126
  }, index))
@@ -1 +1 @@
1
- {"version":3,"names":["Host","SegmentedButton","SingleChoiceSegmentedButtonRow","Text","fillMaxWidth","testID","testIdModifier","weight","haptics","useAppTheme","useCallback","useMemo","useInsideHost","jsx","_jsx","MATCH_HEIGHT_ONLY","horizontal","vertical","SEGMENT","SegmentedControl","disabled","onChange","selectedIndex","values","theme","insideHost","colors","activeBorderColor","color","activeContainerColor","activeContentColor","disabledActiveBorderColor","disabledActiveContainerColor","disabledActiveContentColor","disabledInactiveBorderColor","disabledInactiveContentColor","inactiveBorderColor","inactiveContentColor","rowModifiers","select","index","selection","row","modifiers","children","map","label","enabled","onClick","selected","Label","style","typography","subheadlineMedium","colorScheme","dark","matchContents","seedColor","materialSeed"],"sourceRoot":"../../../../src","sources":["atoms/segmented-control/segmented-control.android.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Host","SegmentedButton","SingleChoiceSegmentedButtonRow","Text","fillMaxWidth","height","testID","testIdModifier","weight","iconResourceName","haptics","DrawableIcon","NativeImage","spacing","spacingTokens","useAppTheme","useCallback","useMemo","useInsideHost","HStack","imageUri","segmentOf","jsx","_jsx","jsxs","_jsxs","MATCH_HEIGHT_ONLY","horizontal","vertical","MATERIAL_HEIGHT","SegmentLabel","iconSize","segment","theme","face","typography","subheadlineMedium","image","undefined","fontFamily","fontSize","fontWeight","String","imageHeight","label","source","style","children","icon","align","resourceName","SegmentedControl","disabled","onChange","selectedIndex","values","insideHost","segments","map","iconPoints","segmentModifiers","content","Math","max","lineHeight","colors","activeBorderColor","color","activeContainerColor","activeContentColor","disabledActiveBorderColor","disabledActiveContainerColor","disabledActiveContentColor","disabledInactiveBorderColor","disabledInactiveContentColor","inactiveBorderColor","inactiveContentColor","rowModifiers","select","index","selection","row","modifiers","enabled","onClick","selected","Label","colorScheme","dark","matchContents","seedColor","materialSeed"],"sourceRoot":"../../../../src","sources":["atoms/segmented-control/segmented-control.android.tsx"],"mappings":"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","ignoreList":[]}