@hzblj/kara-components 0.16.0 → 0.18.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 (211) 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/picker/picker.ios.js +27 -15
  41. package/lib/module/atoms/picker/picker.ios.js.map +1 -1
  42. package/lib/module/atoms/progress/progress.android.js +21 -7
  43. package/lib/module/atoms/progress/progress.android.js.map +1 -1
  44. package/lib/module/atoms/progress/progress.ios.js +5 -1
  45. package/lib/module/atoms/progress/progress.ios.js.map +1 -1
  46. package/lib/module/atoms/slider/slider.android.js +16 -2
  47. package/lib/module/atoms/slider/slider.android.js.map +1 -1
  48. package/lib/module/atoms/slider/slider.ios.js +22 -2
  49. package/lib/module/atoms/slider/slider.ios.js.map +1 -1
  50. package/lib/module/atoms/switch/switch.android.js +5 -1
  51. package/lib/module/atoms/switch/switch.android.js.map +1 -1
  52. package/lib/module/atoms/switch/switch.ios.js +3 -1
  53. package/lib/module/atoms/switch/switch.ios.js.map +1 -1
  54. package/lib/module/atoms/text/spans.js +2 -1
  55. package/lib/module/atoms/text/spans.js.map +1 -1
  56. package/lib/module/atoms/text/text.android.js +18 -6
  57. package/lib/module/atoms/text/text.android.js.map +1 -1
  58. package/lib/module/atoms/text/text.ios.js +6 -2
  59. package/lib/module/atoms/text/text.ios.js.map +1 -1
  60. package/lib/module/atoms/text-field/text-field-input.js +14 -0
  61. package/lib/module/atoms/text-field/text-field-input.js.map +1 -0
  62. package/lib/module/atoms/text-field/text-field.android.js +113 -6
  63. package/lib/module/atoms/text-field/text-field.android.js.map +1 -1
  64. package/lib/module/atoms/text-field/text-field.ios.js +75 -3
  65. package/lib/module/atoms/text-field/text-field.ios.js.map +1 -1
  66. package/lib/module/molecules/collapsible/collapsible.android.js +4 -3
  67. package/lib/module/molecules/collapsible/collapsible.android.js.map +1 -1
  68. package/lib/module/molecules/collapsible/collapsible.ios.js +3 -1
  69. package/lib/module/molecules/collapsible/collapsible.ios.js.map +1 -1
  70. package/lib/module/molecules/radio-group/radio-group.android.js +10 -2
  71. package/lib/module/molecules/radio-group/radio-group.android.js.map +1 -1
  72. package/lib/module/molecules/radio-group/radio-group.ios.js +6 -2
  73. package/lib/module/molecules/radio-group/radio-group.ios.js.map +1 -1
  74. package/lib/module/molecules/search-bar/search-bar.js +9 -0
  75. package/lib/module/molecules/search-bar/search-bar.js.map +1 -1
  76. package/lib/module/molecules/stepper/stepper.android.js +25 -13
  77. package/lib/module/molecules/stepper/stepper.android.js.map +1 -1
  78. package/lib/module/molecules/stepper/stepper.ios.js +12 -6
  79. package/lib/module/molecules/stepper/stepper.ios.js.map +1 -1
  80. package/lib/module/organisms/action-sheet/action-sheet.android.js +16 -8
  81. package/lib/module/organisms/action-sheet/action-sheet.android.js.map +1 -1
  82. package/lib/module/organisms/action-sheet/action-sheet.ios.js +16 -3
  83. package/lib/module/organisms/action-sheet/action-sheet.ios.js.map +1 -1
  84. package/lib/module/organisms/alert/alert.android.js +4 -3
  85. package/lib/module/organisms/alert/alert.android.js.map +1 -1
  86. package/lib/module/organisms/alert/alert.ios.js +3 -2
  87. package/lib/module/organisms/alert/alert.ios.js.map +1 -1
  88. package/lib/module/organisms/context-menu/context-menu.android.js +3 -1
  89. package/lib/module/organisms/context-menu/context-menu.android.js.map +1 -1
  90. package/lib/module/organisms/context-menu/context-menu.ios.js +1 -0
  91. package/lib/module/organisms/context-menu/context-menu.ios.js.map +1 -1
  92. package/lib/module/organisms/fab-menu/fab-menu.android.js +3 -0
  93. package/lib/module/organisms/fab-menu/fab-menu.android.js.map +1 -1
  94. package/lib/module/organisms/fab-menu/fab-menu.ios.js +3 -0
  95. package/lib/module/organisms/fab-menu/fab-menu.ios.js.map +1 -1
  96. package/lib/module/organisms/menu/menu-parts.js +20 -0
  97. package/lib/module/organisms/menu/menu-parts.js.map +1 -0
  98. package/lib/module/organisms/menu/menu.android.js +51 -19
  99. package/lib/module/organisms/menu/menu.android.js.map +1 -1
  100. package/lib/module/organisms/menu/menu.ios.js +71 -8
  101. package/lib/module/organisms/menu/menu.ios.js.map +1 -1
  102. package/lib/module/organisms/sheet/sheet.js +2 -1
  103. package/lib/module/organisms/sheet/sheet.js.map +1 -1
  104. package/lib/typescript/atoms/badge/badge.types.d.ts +2 -0
  105. package/lib/typescript/atoms/button/button-tokens.d.ts +6 -2
  106. package/lib/typescript/atoms/button/button.types.d.ts +19 -5
  107. package/lib/typescript/atoms/checkbox/checkbox.types.d.ts +2 -0
  108. package/lib/typescript/atoms/color-picker/color-picker.types.d.ts +2 -0
  109. package/lib/typescript/atoms/date-picker/date-picker.ios.d.ts +5 -5
  110. package/lib/typescript/atoms/date-picker/date-picker.types.d.ts +30 -7
  111. package/lib/typescript/atoms/divider/divider.ios.d.ts +4 -0
  112. package/lib/typescript/atoms/divider/divider.types.d.ts +13 -2
  113. package/lib/typescript/atoms/fab/fab.types.d.ts +21 -4
  114. package/lib/typescript/atoms/icon-button/icon-button.types.d.ts +23 -4
  115. package/lib/typescript/atoms/list/list.types.d.ts +15 -1
  116. package/lib/typescript/atoms/picker/picker.ios.d.ts +5 -3
  117. package/lib/typescript/atoms/picker/picker.types.d.ts +11 -3
  118. package/lib/typescript/atoms/progress/progress.types.d.ts +13 -2
  119. package/lib/typescript/atoms/slider/slider.ios.d.ts +4 -0
  120. package/lib/typescript/atoms/slider/slider.types.d.ts +7 -0
  121. package/lib/typescript/atoms/switch/switch.types.d.ts +2 -0
  122. package/lib/typescript/atoms/text/spans.d.ts +2 -0
  123. package/lib/typescript/atoms/text/text.types.d.ts +9 -1
  124. package/lib/typescript/atoms/text-field/text-field-input.d.ts +7 -0
  125. package/lib/typescript/atoms/text-field/text-field.types.d.ts +77 -4
  126. package/lib/typescript/molecules/collapsible/collapsible.types.d.ts +2 -0
  127. package/lib/typescript/molecules/radio-group/radio-group.types.d.ts +4 -0
  128. package/lib/typescript/molecules/search-bar/search-bar.types.d.ts +11 -1
  129. package/lib/typescript/molecules/stepper/stepper.ios.d.ts +2 -1
  130. package/lib/typescript/molecules/stepper/stepper.types.d.ts +17 -0
  131. package/lib/typescript/organisms/action-sheet/action-sheet.ios.d.ts +4 -0
  132. package/lib/typescript/organisms/action-sheet/action-sheet.types.d.ts +8 -3
  133. package/lib/typescript/organisms/alert/alert.types.d.ts +8 -3
  134. package/lib/typescript/organisms/menu/menu-parts.d.ts +14 -0
  135. package/lib/typescript/organisms/menu/menu.types.d.ts +35 -7
  136. package/lib/typescript/organisms/sheet/sheet.types.d.ts +7 -1
  137. package/package.json +4 -4
  138. package/src/atoms/badge/badge.android.tsx +9 -2
  139. package/src/atoms/badge/badge.ios.tsx +2 -2
  140. package/src/atoms/badge/badge.types.ts +2 -0
  141. package/src/atoms/button/button-tokens.ts +6 -3
  142. package/src/atoms/button/button.android.tsx +35 -11
  143. package/src/atoms/button/button.ios.tsx +72 -8
  144. package/src/atoms/button/button.types.ts +20 -5
  145. package/src/atoms/checkbox/checkbox.android.tsx +5 -2
  146. package/src/atoms/checkbox/checkbox.ios.tsx +2 -2
  147. package/src/atoms/checkbox/checkbox.types.ts +2 -0
  148. package/src/atoms/color-picker/color-picker.android.tsx +10 -2
  149. package/src/atoms/color-picker/color-picker.ios.tsx +24 -1
  150. package/src/atoms/color-picker/color-picker.types.ts +2 -0
  151. package/src/atoms/date-picker/date-picker.android.tsx +86 -16
  152. package/src/atoms/date-picker/date-picker.ios.tsx +20 -8
  153. package/src/atoms/date-picker/date-picker.types.ts +31 -7
  154. package/src/atoms/divider/divider.android.tsx +14 -3
  155. package/src/atoms/divider/divider.ios.tsx +4 -0
  156. package/src/atoms/divider/divider.types.ts +14 -2
  157. package/src/atoms/fab/fab.android.tsx +61 -11
  158. package/src/atoms/fab/fab.ios.tsx +48 -13
  159. package/src/atoms/fab/fab.types.ts +22 -4
  160. package/src/atoms/icon-button/icon-button.android.tsx +60 -10
  161. package/src/atoms/icon-button/icon-button.ios.tsx +77 -8
  162. package/src/atoms/icon-button/icon-button.types.ts +24 -4
  163. package/src/atoms/list/list.android.tsx +26 -4
  164. package/src/atoms/list/list.ios.tsx +20 -5
  165. package/src/atoms/list/list.types.ts +16 -1
  166. package/src/atoms/picker/picker.ios.tsx +46 -16
  167. package/src/atoms/picker/picker.types.ts +12 -3
  168. package/src/atoms/progress/progress.android.tsx +32 -6
  169. package/src/atoms/progress/progress.ios.tsx +11 -5
  170. package/src/atoms/progress/progress.types.ts +13 -2
  171. package/src/atoms/slider/slider.android.tsx +18 -2
  172. package/src/atoms/slider/slider.ios.tsx +38 -2
  173. package/src/atoms/slider/slider.types.ts +7 -0
  174. package/src/atoms/switch/switch.android.tsx +5 -2
  175. package/src/atoms/switch/switch.ios.tsx +2 -2
  176. package/src/atoms/switch/switch.types.ts +2 -0
  177. package/src/atoms/text/spans.ts +2 -1
  178. package/src/atoms/text/text.android.tsx +20 -7
  179. package/src/atoms/text/text.ios.tsx +7 -0
  180. package/src/atoms/text/text.types.ts +10 -1
  181. package/src/atoms/text-field/text-field-input.ts +17 -0
  182. package/src/atoms/text-field/text-field.android.tsx +132 -9
  183. package/src/atoms/text-field/text-field.ios.tsx +110 -6
  184. package/src/atoms/text-field/text-field.types.ts +98 -4
  185. package/src/molecules/collapsible/collapsible.android.tsx +10 -2
  186. package/src/molecules/collapsible/collapsible.ios.tsx +8 -2
  187. package/src/molecules/collapsible/collapsible.types.ts +2 -0
  188. package/src/molecules/radio-group/radio-group.android.tsx +18 -4
  189. package/src/molecules/radio-group/radio-group.ios.tsx +19 -5
  190. package/src/molecules/radio-group/radio-group.types.ts +4 -0
  191. package/src/molecules/search-bar/search-bar.tsx +9 -0
  192. package/src/molecules/search-bar/search-bar.types.ts +12 -1
  193. package/src/molecules/stepper/stepper.android.tsx +24 -4
  194. package/src/molecules/stepper/stepper.ios.tsx +23 -8
  195. package/src/molecules/stepper/stepper.types.ts +17 -0
  196. package/src/organisms/action-sheet/action-sheet.android.tsx +23 -11
  197. package/src/organisms/action-sheet/action-sheet.ios.tsx +20 -3
  198. package/src/organisms/action-sheet/action-sheet.types.ts +8 -3
  199. package/src/organisms/alert/alert.android.tsx +11 -8
  200. package/src/organisms/alert/alert.ios.tsx +2 -1
  201. package/src/organisms/alert/alert.types.ts +8 -3
  202. package/src/organisms/context-menu/context-menu.android.tsx +3 -2
  203. package/src/organisms/context-menu/context-menu.ios.tsx +1 -0
  204. package/src/organisms/fab-menu/fab-menu.android.tsx +3 -0
  205. package/src/organisms/fab-menu/fab-menu.ios.tsx +9 -1
  206. package/src/organisms/menu/menu-parts.ts +21 -0
  207. package/src/organisms/menu/menu.android.tsx +39 -10
  208. package/src/organisms/menu/menu.ios.tsx +55 -5
  209. package/src/organisms/menu/menu.types.ts +30 -7
  210. package/src/organisms/sheet/sheet.tsx +2 -1
  211. 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,39 +1,51 @@
1
1
  "use strict";
2
2
 
3
3
  import { Picker as NativePicker } from '@expo/ui/community/picker';
4
- import { Picker as SwiftUIPicker, Text as SwiftUIText } from '@expo/ui/swift-ui';
5
- import { disabled as disabledModifier, foregroundStyle, pickerStyle, tag } from '@expo/ui/swift-ui/modifiers';
4
+ import { Host, Picker as SwiftUIPicker, Text as SwiftUIText } from '@expo/ui/swift-ui';
5
+ import { disabled as disabledModifier, foregroundStyle, pickerStyle as pickerStyleModifier, tag, tint } from '@expo/ui/swift-ui/modifiers';
6
6
  import { useAppTheme } from '@hzblj/kara-theme';
7
7
  import { useCallback, useMemo } from 'react';
8
8
  import { useInsideHost } from "../../host-context.js";
9
9
  import { jsx as _jsx } from "react/jsx-runtime";
10
10
  /**
11
- * A SwiftUI wheel. On its own it is `@expo/ui`'s community picker, which brings a host of its own. Inside a `Screen` or
12
- * `Island` it is the same wheel rendered into that host instead (see `useInsideHost`): a host nested in the island's
13
- * stack is given no height there, and the wheel spills over the views around it.
11
+ * A SwiftUI picker: a wheel, or with `pickerStyle="menu"` a button with the selection that opens the options as a
12
+ * menu, in the accent. On its own the wheel is `@expo/ui`'s community picker, which brings a host of its own, and the
13
+ * menu sits in a host sized to its button on both axes, as the date picker's pill does, so it drops into a row the way
14
+ * a `Text` does. Inside a `Screen` or `Island` either renders into that host instead (see `useInsideHost`): a host
15
+ * nested in the island's stack is given no height there, and the wheel spills over the views around it.
14
16
  */
15
17
  export const Picker = ({
16
18
  disabled = false,
17
19
  onValueChange,
18
20
  options,
21
+ pickerStyle = 'wheel',
19
22
  testID,
20
23
  value
21
24
  }) => {
22
25
  const theme = useAppTheme();
23
26
  const insideHost = useInsideHost();
24
27
  const color = theme.colorString('content.primary');
28
+ const menu = pickerStyle === 'menu';
25
29
  const onChange = useCallback(next => onValueChange?.(String(next)), [onValueChange]);
26
- const wheelModifiers = useMemo(() => [pickerStyle('wheel'), ...(disabled ? [disabledModifier(true)] : [])], [disabled]);
30
+ const modifiers = useMemo(() => [pickerStyleModifier(pickerStyle), ...(menu ? [tint(theme.color('fill.accent.primary'))] : []), ...(disabled ? [disabledModifier(true)] : [])], [disabled, menu, pickerStyle, theme]);
31
+ const picker = /*#__PURE__*/_jsx(SwiftUIPicker, {
32
+ modifiers: modifiers,
33
+ onSelectionChange: onChange,
34
+ selection: value,
35
+ testID: testID,
36
+ children: options.map(option => /*#__PURE__*/_jsx(SwiftUIText, {
37
+ modifiers: [tag(option.value), foregroundStyle(color)],
38
+ children: option.label
39
+ }, option.value))
40
+ });
27
41
  if (insideHost) {
28
- return /*#__PURE__*/_jsx(SwiftUIPicker, {
29
- modifiers: wheelModifiers,
30
- onSelectionChange: onChange,
31
- selection: value,
32
- testID: testID,
33
- children: options.map(option => /*#__PURE__*/_jsx(SwiftUIText, {
34
- modifiers: [tag(option.value), foregroundStyle(color)],
35
- children: option.label
36
- }, option.value))
42
+ return picker;
43
+ }
44
+ if (menu) {
45
+ return /*#__PURE__*/_jsx(Host, {
46
+ colorScheme: theme.dark ? 'dark' : 'light',
47
+ matchContents: true,
48
+ children: picker
37
49
  });
38
50
  }
39
51
  return /*#__PURE__*/_jsx(NativePicker, {
@@ -1 +1 @@
1
- {"version":3,"names":["Picker","NativePicker","SwiftUIPicker","Text","SwiftUIText","disabled","disabledModifier","foregroundStyle","pickerStyle","tag","useAppTheme","useCallback","useMemo","useInsideHost","jsx","_jsx","onValueChange","options","testID","value","theme","insideHost","color","colorString","onChange","next","String","wheelModifiers","modifiers","onSelectionChange","selection","children","map","option","label","enabled","selectedValue","Item"],"sourceRoot":"../../../../src","sources":["atoms/picker/picker.ios.tsx"],"mappings":";;AAAA,SAAQA,MAAM,IAAIC,YAAY,QAAO,2BAA2B;AAChE,SAAQD,MAAM,IAAIE,aAAa,EAAEC,IAAI,IAAIC,WAAW,QAAO,mBAAmB;AAC9E,SAAQC,QAAQ,IAAIC,gBAAgB,EAAEC,eAAe,EAAEC,WAAW,EAAEC,GAAG,QAAO,6BAA6B;AAC3G,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,WAAW,EAAEC,OAAO,QAAO,OAAO;AAE1C,SAAQC,aAAa,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGhD;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMf,MAAuB,GAAGA,CAAC;EAACK,QAAQ,GAAG,KAAK;EAAEW,aAAa;EAAEC,OAAO;EAAEC,MAAM;EAAEC;AAAkB,CAAC,KAAK;EACjH,MAAMC,KAAK,GAAGV,WAAW,CAAC,CAAC;EAC3B,MAAMW,UAAU,GAAGR,aAAa,CAAC,CAAC;EAClC,MAAMS,KAAK,GAAGF,KAAK,CAACG,WAAW,CAAC,iBAAiB,CAAC;EAElD,MAAMC,QAAQ,GAAGb,WAAW,CAAEc,IAA4B,IAAKT,aAAa,GAAGU,MAAM,CAACD,IAAI,CAAC,CAAC,EAAE,CAACT,aAAa,CAAC,CAAC;EAC9G,MAAMW,cAAc,GAAGf,OAAO,CAC5B,MAAM,CAACJ,WAAW,CAAC,OAAO,CAAC,EAAE,IAAIH,QAAQ,GAAG,CAACC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAC3E,CAACD,QAAQ,CACX,CAAC;EAED,IAAIgB,UAAU,EAAE;IACd,oBACEN,IAAA,CAACb,aAAa;MAAC0B,SAAS,EAAED,cAAe;MAACE,iBAAiB,EAAEL,QAAS;MAACM,SAAS,EAAEX,KAAM;MAACD,MAAM,EAAEA,MAAO;MAAAa,QAAA,EACrGd,OAAO,CAACe,GAAG,CAACC,MAAM,iBACjBlB,IAAA,CAACX,WAAW;QAAoBwB,SAAS,EAAE,CAACnB,GAAG,CAACwB,MAAM,CAACd,KAAK,CAAC,EAAEZ,eAAe,CAACe,KAAK,CAAC,CAAE;QAAAS,QAAA,EACpFE,MAAM,CAACC;MAAK,GADGD,MAAM,CAACd,KAEZ,CACd;IAAC,CACW,CAAC;EAEpB;EAEA,oBACEJ,IAAA,CAACd,YAAY;IAACkC,OAAO,EAAE,CAAC9B,QAAS;IAACW,aAAa,EAAEQ,QAAS;IAACY,aAAa,EAAEjB,KAAM;IAACD,MAAM,EAAEA,MAAO;IAAAa,QAAA,EAC7Fd,OAAO,CAACe,GAAG,CAACC,MAAM,iBACjBlB,IAAA,CAACd,YAAY,CAACoC,IAAI;MAACf,KAAK,EAAEA,KAAM;MAAoBY,KAAK,EAAED,MAAM,CAACC,KAAM;MAACf,KAAK,EAAEc,MAAM,CAACd;IAAM,GAAvDc,MAAM,CAACd,KAAkD,CAChG;EAAC,CACU,CAAC;AAEnB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Picker","NativePicker","Host","SwiftUIPicker","Text","SwiftUIText","disabled","disabledModifier","foregroundStyle","pickerStyle","pickerStyleModifier","tag","tint","useAppTheme","useCallback","useMemo","useInsideHost","jsx","_jsx","onValueChange","options","testID","value","theme","insideHost","color","colorString","menu","onChange","next","String","modifiers","picker","onSelectionChange","selection","children","map","option","label","colorScheme","dark","matchContents","enabled","selectedValue","Item"],"sourceRoot":"../../../../src","sources":["atoms/picker/picker.ios.tsx"],"mappings":"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","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,22 +1,26 @@
1
1
  "use strict";
2
2
 
3
3
  import { Slider as ComposeSlider } from '@expo/ui/jetpack-compose';
4
+ import { testID as testIdModifier } from '@expo/ui/jetpack-compose/modifiers';
4
5
  import { haptics } from '@hzblj/expo-rich-haptics';
5
6
  import { useAppTheme } from '@hzblj/kara-theme';
6
- import { useCallback, useEffect, useRef } from 'react';
7
+ import { useCallback, useEffect, useMemo, useRef } from 'react';
7
8
  import { useHostGuard } from "../../host-context.js";
8
9
  import { jsx as _jsx } from "react/jsx-runtime";
9
10
  /**
10
11
  * Material's slider. `step` is the increment, as SwiftUI takes it; Compose counts the stops between the two ends
11
12
  * instead, so it is converted. A stepped slider ticks at every stop the thumb reaches — Compose's Material slider
12
- * plays nothing of its own, where iOS 26's slider already does.
13
+ * plays nothing of its own, where iOS 26's slider already does. `onValueChangeEnd` is Material's
14
+ * `onValueChangeFinished`, which reports no value: it gets the last one the drag reported.
13
15
  */
14
16
  export const Slider = ({
15
17
  disabled = false,
16
18
  max = 1,
17
19
  min = 0,
18
20
  onValueChange,
21
+ onValueChangeEnd,
19
22
  step,
23
+ testID,
20
24
  value
21
25
  }) => {
22
26
  useHostGuard('Slider');
@@ -27,6 +31,7 @@ export const Slider = ({
27
31
  // Compose reports faster than React re-renders the controlled value.
28
32
  const stopOf = useCallback(at => step ? Math.round((at - min) / step) : 0, [min, step]);
29
33
  const stop = useRef(stopOf(value));
34
+ const dragged = useRef(undefined);
30
35
  useEffect(() => {
31
36
  stop.current = stopOf(value);
32
37
  }, [stopOf, value]);
@@ -36,8 +41,15 @@ export const Slider = ({
36
41
  haptics.tick();
37
42
  }
38
43
  stop.current = reached;
44
+ dragged.current = next;
39
45
  onValueChange?.(next);
40
46
  }, [onValueChange, stopOf, steps]);
47
+ const onFinished = useCallback(() => {
48
+ const final = dragged.current ?? value;
49
+ dragged.current = undefined;
50
+ onValueChangeEnd?.(final);
51
+ }, [onValueChangeEnd, value]);
52
+ const modifiers = useMemo(() => testID ? [testIdModifier(testID)] : undefined, [testID]);
41
53
  return /*#__PURE__*/_jsx(ComposeSlider, {
42
54
  colors: {
43
55
  activeTrackColor: theme.color('fill.accent.primary'),
@@ -46,7 +58,9 @@ export const Slider = ({
46
58
  enabled: !disabled,
47
59
  max: max,
48
60
  min: min,
61
+ modifiers: modifiers,
49
62
  onValueChange: onChange,
63
+ onValueChangeFinished: onValueChangeEnd ? onFinished : undefined,
50
64
  steps: steps,
51
65
  value: value
52
66
  });
@@ -1 +1 @@
1
- {"version":3,"names":["Slider","ComposeSlider","haptics","useAppTheme","useCallback","useEffect","useRef","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,OAAO,QAAO,0BAA0B;AAChD,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAO,OAAO;AAEpD,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,GAAGb,WAAW,CAAC,CAAC;EAC3B,MAAMc,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,GAAGhB,WAAW,CAAEiB,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,GAAGhB,MAAM,CAACc,MAAM,CAACL,KAAK,CAAC,CAAC;EAElCV,SAAS,CAAC,MAAM;IACdiB,IAAI,CAACC,OAAO,GAAGH,MAAM,CAACL,KAAK,CAAC;EAC9B,CAAC,EAAE,CAACK,MAAM,EAAEL,KAAK,CAAC,CAAC;EAEnB,MAAMS,QAAQ,GAAGpB,WAAW,CACzBqB,IAAY,IAAK;IAChB,MAAMC,OAAO,GAAGN,MAAM,CAACK,IAAI,CAAC;IAE5B,IAAIR,KAAK,GAAG,CAAC,IAAIS,OAAO,KAAKJ,IAAI,CAACC,OAAO,EAAE;MACzCrB,OAAO,CAACyB,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":[]}
1
+ {"version":3,"names":["Slider","ComposeSlider","testID","testIdModifier","haptics","useAppTheme","useCallback","useEffect","useMemo","useRef","useHostGuard","jsx","_jsx","disabled","max","min","onValueChange","onValueChangeEnd","step","value","theme","steps","Math","round","stopOf","at","stop","dragged","undefined","current","onChange","next","reached","tick","onFinished","final","modifiers","colors","activeTrackColor","color","thumbColor","enabled","onValueChangeFinished"],"sourceRoot":"../../../../src","sources":["atoms/slider/slider.android.tsx"],"mappings":";;AAAA,SAAQA,MAAM,IAAIC,aAAa,QAAO,0BAA0B;AAChE,SAAQC,MAAM,IAAIC,cAAc,QAAO,oCAAoC;AAC3E,SAAQC,OAAO,QAAO,0BAA0B;AAChD,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAO,OAAO;AAE7D,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMZ,MAAuB,GAAGA,CAAC;EACtCa,QAAQ,GAAG,KAAK;EAChBC,GAAG,GAAG,CAAC;EACPC,GAAG,GAAG,CAAC;EACPC,aAAa;EACbC,gBAAgB;EAChBC,IAAI;EACJhB,MAAM;EACNiB;AACW,CAAC,KAAK;EACjBT,YAAY,CAAC,QAAQ,CAAC;EACtB,MAAMU,KAAK,GAAGf,WAAW,CAAC,CAAC;EAC3B,MAAMgB,KAAK,GAAGH,IAAI,GAAGI,IAAI,CAACR,GAAG,CAAC,CAAC,EAAEQ,IAAI,CAACC,KAAK,CAAC,CAACT,GAAG,GAAGC,GAAG,IAAIG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;;EAExE;EACA;EACA,MAAMM,MAAM,GAAGlB,WAAW,CAAEmB,EAAU,IAAMP,IAAI,GAAGI,IAAI,CAACC,KAAK,CAAC,CAACE,EAAE,GAAGV,GAAG,IAAIG,IAAI,CAAC,GAAG,CAAE,EAAE,CAACH,GAAG,EAAEG,IAAI,CAAC,CAAC;EACnG,MAAMQ,IAAI,GAAGjB,MAAM,CAACe,MAAM,CAACL,KAAK,CAAC,CAAC;EAClC,MAAMQ,OAAO,GAAGlB,MAAM,CAAqBmB,SAAS,CAAC;EAErDrB,SAAS,CAAC,MAAM;IACdmB,IAAI,CAACG,OAAO,GAAGL,MAAM,CAACL,KAAK,CAAC;EAC9B,CAAC,EAAE,CAACK,MAAM,EAAEL,KAAK,CAAC,CAAC;EAEnB,MAAMW,QAAQ,GAAGxB,WAAW,CACzByB,IAAY,IAAK;IAChB,MAAMC,OAAO,GAAGR,MAAM,CAACO,IAAI,CAAC;IAE5B,IAAIV,KAAK,GAAG,CAAC,IAAIW,OAAO,KAAKN,IAAI,CAACG,OAAO,EAAE;MACzCzB,OAAO,CAAC6B,IAAI,CAAC,CAAC;IAChB;IAEAP,IAAI,CAACG,OAAO,GAAGG,OAAO;IACtBL,OAAO,CAACE,OAAO,GAAGE,IAAI;IACtBf,aAAa,GAAGe,IAAI,CAAC;EACvB,CAAC,EACD,CAACf,aAAa,EAAEQ,MAAM,EAAEH,KAAK,CAC/B,CAAC;EAED,MAAMa,UAAU,GAAG5B,WAAW,CAAC,MAAM;IACnC,MAAM6B,KAAK,GAAGR,OAAO,CAACE,OAAO,IAAIV,KAAK;IACtCQ,OAAO,CAACE,OAAO,GAAGD,SAAS;IAC3BX,gBAAgB,GAAGkB,KAAK,CAAC;EAC3B,CAAC,EAAE,CAAClB,gBAAgB,EAAEE,KAAK,CAAC,CAAC;EAE7B,MAAMiB,SAAS,GAAG5B,OAAO,CAAC,MAAON,MAAM,GAAG,CAACC,cAAc,CAACD,MAAM,CAAC,CAAC,GAAG0B,SAAU,EAAE,CAAC1B,MAAM,CAAC,CAAC;EAE1F,oBACEU,IAAA,CAACX,aAAa;IACZoC,MAAM,EAAE;MACNC,gBAAgB,EAAElB,KAAK,CAACmB,KAAK,CAAC,qBAAqB,CAAC;MACpDC,UAAU,EAAEpB,KAAK,CAACmB,KAAK,CAAC,qBAAqB;IAC/C,CAAE;IACFE,OAAO,EAAE,CAAC5B,QAAS;IACnBC,GAAG,EAAEA,GAAI;IACTC,GAAG,EAAEA,GAAI;IACTqB,SAAS,EAAEA,SAAU;IACrBpB,aAAa,EAAEc,QAAS;IACxBY,qBAAqB,EAAEzB,gBAAgB,GAAGiB,UAAU,GAAGN,SAAU;IACjEP,KAAK,EAAEA,KAAM;IACbF,KAAK,EAAEA;EAAM,CACd,CAAC;AAEN,CAAC","ignoreList":[]}