@bacon-pos/ui 0.11.0 → 0.16.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 (187) hide show
  1. package/lib/commonjs/components/CodeInput/CodeInput.js +28 -9
  2. package/lib/commonjs/components/CodeInput/CodeInput.js.map +1 -1
  3. package/lib/commonjs/components/CodeInput/CodeInput.stories.js +28 -1
  4. package/lib/commonjs/components/CodeInput/CodeInput.stories.js.map +1 -1
  5. package/lib/commonjs/components/CodeInput/CodeInput.test.js +16 -0
  6. package/lib/commonjs/components/CodeInput/CodeInput.test.js.map +1 -1
  7. package/lib/commonjs/components/Dialog/Dialog.js +116 -71
  8. package/lib/commonjs/components/Dialog/Dialog.js.map +1 -1
  9. package/lib/commonjs/components/Dialog/StepDialog.js +111 -0
  10. package/lib/commonjs/components/Dialog/StepDialog.js.map +1 -0
  11. package/lib/commonjs/components/Dialog/StepDialog.stories.js +157 -0
  12. package/lib/commonjs/components/Dialog/StepDialog.stories.js.map +1 -0
  13. package/lib/commonjs/components/Dialog/StepDialog.test.js +118 -0
  14. package/lib/commonjs/components/Dialog/StepDialog.test.js.map +1 -0
  15. package/lib/commonjs/components/Dialog/index.js +7 -0
  16. package/lib/commonjs/components/Dialog/index.js.map +1 -1
  17. package/lib/commonjs/components/Icon/icons.generated.js +9 -1
  18. package/lib/commonjs/components/Icon/icons.generated.js.map +1 -1
  19. package/lib/commonjs/components/List/List.js +45 -0
  20. package/lib/commonjs/components/List/List.js.map +1 -0
  21. package/lib/commonjs/components/List/List.stories.js +215 -0
  22. package/lib/commonjs/components/List/List.stories.js.map +1 -0
  23. package/lib/commonjs/components/List/List.test.js +94 -0
  24. package/lib/commonjs/components/List/List.test.js.map +1 -0
  25. package/lib/commonjs/components/List/ListItem.js +210 -0
  26. package/lib/commonjs/components/List/ListItem.js.map +1 -0
  27. package/lib/commonjs/components/List/index.js +20 -0
  28. package/lib/commonjs/components/List/index.js.map +1 -0
  29. package/lib/commonjs/components/Menu/Menu.js +11 -3
  30. package/lib/commonjs/components/Menu/Menu.js.map +1 -1
  31. package/lib/commonjs/components/ProgressBar/ProgressBar.js +4 -3
  32. package/lib/commonjs/components/ProgressBar/ProgressBar.js.map +1 -1
  33. package/lib/commonjs/components/SegmentedButton/SegmentedButton.js +217 -0
  34. package/lib/commonjs/components/SegmentedButton/SegmentedButton.js.map +1 -0
  35. package/lib/commonjs/components/SegmentedButton/SegmentedButton.stories.js +215 -0
  36. package/lib/commonjs/components/SegmentedButton/SegmentedButton.stories.js.map +1 -0
  37. package/lib/commonjs/components/SegmentedButton/SegmentedButton.test.js +97 -0
  38. package/lib/commonjs/components/SegmentedButton/SegmentedButton.test.js.map +1 -0
  39. package/lib/commonjs/components/SegmentedButton/index.js +13 -0
  40. package/lib/commonjs/components/SegmentedButton/index.js.map +1 -0
  41. package/lib/commonjs/components/Sidebar/Sidebar.js +20 -3
  42. package/lib/commonjs/components/Sidebar/Sidebar.js.map +1 -1
  43. package/lib/commonjs/components/Sidebar/Sidebar.stories.js +17 -1
  44. package/lib/commonjs/components/Sidebar/Sidebar.stories.js.map +1 -1
  45. package/lib/commonjs/components/Table/Table.js +69 -6
  46. package/lib/commonjs/components/Table/Table.js.map +1 -1
  47. package/lib/commonjs/components/Table/Table.stories.js +118 -1
  48. package/lib/commonjs/components/Table/Table.stories.js.map +1 -1
  49. package/lib/commonjs/components/Table/Table.test.js +58 -0
  50. package/lib/commonjs/components/Table/Table.test.js.map +1 -1
  51. package/lib/commonjs/components/_internal/ModalHostContext.js +21 -0
  52. package/lib/commonjs/components/_internal/ModalHostContext.js.map +1 -0
  53. package/lib/commonjs/components/index.js +37 -15
  54. package/lib/commonjs/components/index.js.map +1 -1
  55. package/lib/module/components/CodeInput/CodeInput.js +28 -9
  56. package/lib/module/components/CodeInput/CodeInput.js.map +1 -1
  57. package/lib/module/components/CodeInput/CodeInput.stories.js +27 -0
  58. package/lib/module/components/CodeInput/CodeInput.stories.js.map +1 -1
  59. package/lib/module/components/CodeInput/CodeInput.test.js +16 -0
  60. package/lib/module/components/CodeInput/CodeInput.test.js.map +1 -1
  61. package/lib/module/components/Dialog/Dialog.js +116 -71
  62. package/lib/module/components/Dialog/Dialog.js.map +1 -1
  63. package/lib/module/components/Dialog/StepDialog.js +107 -0
  64. package/lib/module/components/Dialog/StepDialog.js.map +1 -0
  65. package/lib/module/components/Dialog/StepDialog.stories.js +153 -0
  66. package/lib/module/components/Dialog/StepDialog.stories.js.map +1 -0
  67. package/lib/module/components/Dialog/StepDialog.test.js +117 -0
  68. package/lib/module/components/Dialog/StepDialog.test.js.map +1 -0
  69. package/lib/module/components/Dialog/index.js +1 -0
  70. package/lib/module/components/Dialog/index.js.map +1 -1
  71. package/lib/module/components/Icon/icons.generated.js +9 -1
  72. package/lib/module/components/Icon/icons.generated.js.map +1 -1
  73. package/lib/module/components/List/List.js +41 -0
  74. package/lib/module/components/List/List.js.map +1 -0
  75. package/lib/module/components/List/List.stories.js +211 -0
  76. package/lib/module/components/List/List.stories.js.map +1 -0
  77. package/lib/module/components/List/List.test.js +94 -0
  78. package/lib/module/components/List/List.test.js.map +1 -0
  79. package/lib/module/components/List/ListItem.js +206 -0
  80. package/lib/module/components/List/ListItem.js.map +1 -0
  81. package/lib/module/components/List/index.js +5 -0
  82. package/lib/module/components/List/index.js.map +1 -0
  83. package/lib/module/components/Menu/Menu.js +12 -4
  84. package/lib/module/components/Menu/Menu.js.map +1 -1
  85. package/lib/module/components/ProgressBar/ProgressBar.js +4 -3
  86. package/lib/module/components/ProgressBar/ProgressBar.js.map +1 -1
  87. package/lib/module/components/SegmentedButton/SegmentedButton.js +213 -0
  88. package/lib/module/components/SegmentedButton/SegmentedButton.js.map +1 -0
  89. package/lib/module/components/SegmentedButton/SegmentedButton.stories.js +211 -0
  90. package/lib/module/components/SegmentedButton/SegmentedButton.stories.js.map +1 -0
  91. package/lib/module/components/SegmentedButton/SegmentedButton.test.js +96 -0
  92. package/lib/module/components/SegmentedButton/SegmentedButton.test.js.map +1 -0
  93. package/lib/module/components/SegmentedButton/index.js +4 -0
  94. package/lib/module/components/SegmentedButton/index.js.map +1 -0
  95. package/lib/module/components/Sidebar/Sidebar.js +20 -3
  96. package/lib/module/components/Sidebar/Sidebar.js.map +1 -1
  97. package/lib/module/components/Sidebar/Sidebar.stories.js +16 -0
  98. package/lib/module/components/Sidebar/Sidebar.stories.js.map +1 -1
  99. package/lib/module/components/Table/Table.js +70 -7
  100. package/lib/module/components/Table/Table.js.map +1 -1
  101. package/lib/module/components/Table/Table.stories.js +117 -0
  102. package/lib/module/components/Table/Table.stories.js.map +1 -1
  103. package/lib/module/components/Table/Table.test.js +58 -0
  104. package/lib/module/components/Table/Table.test.js.map +1 -1
  105. package/lib/module/components/_internal/ModalHostContext.js +17 -0
  106. package/lib/module/components/_internal/ModalHostContext.js.map +1 -0
  107. package/lib/module/components/index.js +2 -0
  108. package/lib/module/components/index.js.map +1 -1
  109. package/lib/typescript/commonjs/components/CodeInput/CodeInput.d.ts +5 -1
  110. package/lib/typescript/commonjs/components/CodeInput/CodeInput.d.ts.map +1 -1
  111. package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts +13 -1
  112. package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts.map +1 -1
  113. package/lib/typescript/commonjs/components/Dialog/StepDialog.d.ts +63 -0
  114. package/lib/typescript/commonjs/components/Dialog/StepDialog.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/components/Dialog/index.d.ts +1 -0
  116. package/lib/typescript/commonjs/components/Dialog/index.d.ts.map +1 -1
  117. package/lib/typescript/commonjs/components/Icon/icons.generated.d.ts +8 -0
  118. package/lib/typescript/commonjs/components/Icon/icons.generated.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/components/List/List.d.ts +22 -0
  120. package/lib/typescript/commonjs/components/List/List.d.ts.map +1 -0
  121. package/lib/typescript/commonjs/components/List/ListItem.d.ts +61 -0
  122. package/lib/typescript/commonjs/components/List/ListItem.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/components/List/index.d.ts +5 -0
  124. package/lib/typescript/commonjs/components/List/index.d.ts.map +1 -0
  125. package/lib/typescript/commonjs/components/Menu/Menu.d.ts +4 -2
  126. package/lib/typescript/commonjs/components/Menu/Menu.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/components/ProgressBar/ProgressBar.d.ts +3 -1
  128. package/lib/typescript/commonjs/components/ProgressBar/ProgressBar.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/components/SegmentedButton/SegmentedButton.d.ts +68 -0
  130. package/lib/typescript/commonjs/components/SegmentedButton/SegmentedButton.d.ts.map +1 -0
  131. package/lib/typescript/commonjs/components/SegmentedButton/index.d.ts +2 -0
  132. package/lib/typescript/commonjs/components/SegmentedButton/index.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/components/Sidebar/Sidebar.d.ts.map +1 -1
  134. package/lib/typescript/commonjs/components/Table/Table.d.ts +25 -3
  135. package/lib/typescript/commonjs/components/Table/Table.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/components/_internal/ModalHostContext.d.ts +11 -0
  137. package/lib/typescript/commonjs/components/_internal/ModalHostContext.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/components/index.d.ts +2 -0
  139. package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
  140. package/lib/typescript/module/components/CodeInput/CodeInput.d.ts +5 -1
  141. package/lib/typescript/module/components/CodeInput/CodeInput.d.ts.map +1 -1
  142. package/lib/typescript/module/components/Dialog/Dialog.d.ts +13 -1
  143. package/lib/typescript/module/components/Dialog/Dialog.d.ts.map +1 -1
  144. package/lib/typescript/module/components/Dialog/StepDialog.d.ts +63 -0
  145. package/lib/typescript/module/components/Dialog/StepDialog.d.ts.map +1 -0
  146. package/lib/typescript/module/components/Dialog/index.d.ts +1 -0
  147. package/lib/typescript/module/components/Dialog/index.d.ts.map +1 -1
  148. package/lib/typescript/module/components/Icon/icons.generated.d.ts +8 -0
  149. package/lib/typescript/module/components/Icon/icons.generated.d.ts.map +1 -1
  150. package/lib/typescript/module/components/List/List.d.ts +22 -0
  151. package/lib/typescript/module/components/List/List.d.ts.map +1 -0
  152. package/lib/typescript/module/components/List/ListItem.d.ts +61 -0
  153. package/lib/typescript/module/components/List/ListItem.d.ts.map +1 -0
  154. package/lib/typescript/module/components/List/index.d.ts +5 -0
  155. package/lib/typescript/module/components/List/index.d.ts.map +1 -0
  156. package/lib/typescript/module/components/Menu/Menu.d.ts +4 -2
  157. package/lib/typescript/module/components/Menu/Menu.d.ts.map +1 -1
  158. package/lib/typescript/module/components/ProgressBar/ProgressBar.d.ts +3 -1
  159. package/lib/typescript/module/components/ProgressBar/ProgressBar.d.ts.map +1 -1
  160. package/lib/typescript/module/components/SegmentedButton/SegmentedButton.d.ts +68 -0
  161. package/lib/typescript/module/components/SegmentedButton/SegmentedButton.d.ts.map +1 -0
  162. package/lib/typescript/module/components/SegmentedButton/index.d.ts +2 -0
  163. package/lib/typescript/module/components/SegmentedButton/index.d.ts.map +1 -0
  164. package/lib/typescript/module/components/Sidebar/Sidebar.d.ts.map +1 -1
  165. package/lib/typescript/module/components/Table/Table.d.ts +25 -3
  166. package/lib/typescript/module/components/Table/Table.d.ts.map +1 -1
  167. package/lib/typescript/module/components/_internal/ModalHostContext.d.ts +11 -0
  168. package/lib/typescript/module/components/_internal/ModalHostContext.d.ts.map +1 -0
  169. package/lib/typescript/module/components/index.d.ts +2 -0
  170. package/lib/typescript/module/components/index.d.ts.map +1 -1
  171. package/package.json +16 -14
  172. package/src/components/CodeInput/CodeInput.tsx +46 -14
  173. package/src/components/Dialog/Dialog.tsx +92 -31
  174. package/src/components/Dialog/StepDialog.tsx +173 -0
  175. package/src/components/Dialog/index.ts +1 -0
  176. package/src/components/Icon/icons.generated.ts +9 -1
  177. package/src/components/List/List.tsx +45 -0
  178. package/src/components/List/ListItem.tsx +214 -0
  179. package/src/components/List/index.ts +4 -0
  180. package/src/components/Menu/Menu.tsx +15 -6
  181. package/src/components/ProgressBar/ProgressBar.tsx +6 -3
  182. package/src/components/SegmentedButton/SegmentedButton.tsx +269 -0
  183. package/src/components/SegmentedButton/index.ts +7 -0
  184. package/src/components/Sidebar/Sidebar.tsx +18 -10
  185. package/src/components/Table/Table.tsx +93 -8
  186. package/src/components/_internal/ModalHostContext.tsx +15 -0
  187. package/src/components/index.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","Animated","Easing","View","useTheme","Text","jsx","_jsx","jsxs","_jsxs","clamp01","n","ProgressBar","progress","label","showSupporting","showValue","formatValue","height","width","color","trackColor","borderColor","animated","style","accessibilityLabel","theme","value","percent","Math","round","anim","Value","current","timing","toValue","duration","easing","out","ease","useNativeDriver","start","setValue","fillWidth","interpolate","inputRange","outputRange","extrapolate","inset","gap","undefined","alignSelf","accessibilityRole","accessibilityValue","min","max","now","children","borderRadius","borderWidth","colors","border","default","backgroundColor","background","subtle","padding","justifyContent","overflow","action","primary","flexDirection","alignItems","paddingHorizontal","variant","numberOfLines","flexShrink"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/ProgressBar/ProgressBar.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","Animated","Easing","View","useTheme","Text","jsx","_jsx","jsxs","_jsxs","clamp01","n","ProgressBar","progress","label","showSupporting","showValue","formatValue","height","width","color","trackColor","borderColor","bordered","animated","style","accessibilityLabel","theme","value","percent","Math","round","anim","Value","current","timing","toValue","duration","easing","out","ease","useNativeDriver","start","setValue","fillWidth","interpolate","inputRange","outputRange","extrapolate","inset","gap","undefined","alignSelf","accessibilityRole","accessibilityValue","min","max","now","children","borderRadius","borderWidth","colors","border","default","backgroundColor","background","subtle","padding","justifyContent","overflow","action","primary","flexDirection","alignItems","paddingHorizontal","variant","numberOfLines","flexShrink"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/ProgressBar/ProgressBar.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { Animated, Easing, Pressable, View } from 'react-native';
5
+ import { useTheme } from "../../theme/index.js";
6
+ import { Icon } from "../Icon/Icon.js";
7
+ import { Text } from "../Text/Text.js";
8
+
9
+ /** `default` = soft-rounded rectangle; `round` = fully rounded (pill). */
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ const SIZES = {
12
+ sm: {
13
+ paddingH: 12,
14
+ paddingV: 10,
15
+ gap: 6,
16
+ trackPadding: 4,
17
+ text: 'bodyMedium',
18
+ icon: 18,
19
+ radius: 'md'
20
+ },
21
+ md: {
22
+ paddingH: 16,
23
+ paddingV: 12,
24
+ gap: 8,
25
+ trackPadding: 5,
26
+ text: 'bodyLarge',
27
+ icon: 20,
28
+ radius: 'lg'
29
+ }
30
+ };
31
+
32
+ /**
33
+ * SegmentedButton — faithful to the Bacon POS Figma "Segmented button". A single
34
+ * connected control of 2+ options where exactly one is selected: the active
35
+ * segment fills dark with inverse text; the rest are transparent with secondary
36
+ * text, all inside a rounded track. Supports `sm`/`md` sizes, `default`/`round`
37
+ * shapes (or a custom `radius`), hug / `fullWidth` / fixed `width` layouts, icons,
38
+ * per-segment disabling, and color overrides. Controlled or uncontrolled.
39
+ */
40
+ export function SegmentedButton({
41
+ options,
42
+ value,
43
+ defaultValue,
44
+ onChange,
45
+ size = 'md',
46
+ shape = 'default',
47
+ radius,
48
+ fullWidth = false,
49
+ width,
50
+ disabled = false,
51
+ bordered = true,
52
+ trackColor,
53
+ selectedColor,
54
+ selectedTextColor,
55
+ textColor,
56
+ iconSize,
57
+ animated = true,
58
+ style,
59
+ accessibilityLabel,
60
+ testID
61
+ }) {
62
+ const theme = useTheme();
63
+ const cfg = SIZES[size];
64
+ const isControlled = value !== undefined;
65
+ const [uncontrolled, setUncontrolled] = useState(defaultValue ?? options[0]?.value ?? '');
66
+ const selected = isControlled ? value : uncontrolled;
67
+ const select = next => {
68
+ if (!isControlled) setUncontrolled(next);
69
+ onChange?.(next);
70
+ };
71
+
72
+ // Sliding highlight (thumb): we measure each segment's position/size and glide
73
+ // an absolutely-positioned fill to the selected one.
74
+ const layouts = useRef({});
75
+ const thumbX = useRef(new Animated.Value(0)).current;
76
+ const thumbW = useRef(new Animated.Value(0)).current;
77
+ const placed = useRef(false);
78
+ const [measured, setMeasured] = useState(false);
79
+ const placeThumb = (x, width, withAnim) => {
80
+ if (withAnim && animated) {
81
+ Animated.parallel([Animated.timing(thumbX, {
82
+ toValue: x,
83
+ duration: 200,
84
+ easing: Easing.out(Easing.cubic),
85
+ useNativeDriver: false
86
+ }), Animated.timing(thumbW, {
87
+ toValue: width,
88
+ duration: 200,
89
+ easing: Easing.out(Easing.cubic),
90
+ useNativeDriver: false
91
+ })]).start();
92
+ } else {
93
+ thumbX.setValue(x);
94
+ thumbW.setValue(width);
95
+ }
96
+ };
97
+
98
+ // Animate to the selected segment when it changes (once layouts are known).
99
+ useEffect(() => {
100
+ const l = layouts.current[selected];
101
+ if (!l) return;
102
+ placeThumb(l.x, l.width, placed.current);
103
+ if (!placed.current) {
104
+ placed.current = true;
105
+ setMeasured(true);
106
+ }
107
+ // eslint-disable-next-line react-hooks/exhaustive-deps
108
+ }, [selected, animated]);
109
+ const onSegmentLayout = value => e => {
110
+ const {
111
+ x,
112
+ width
113
+ } = e.nativeEvent.layout;
114
+ layouts.current[value] = {
115
+ x,
116
+ width
117
+ };
118
+ // Place/keep the thumb aligned with the selected segment (initial mount and
119
+ // on relayout/resize) without animating.
120
+ if (value === selected) {
121
+ placeThumb(x, width, false);
122
+ if (!placed.current) {
123
+ placed.current = true;
124
+ setMeasured(true);
125
+ }
126
+ }
127
+ };
128
+ const trackRadius = radius ?? (shape === 'round' ? theme.radii.pill : theme.radii.xl);
129
+ const segmentRadius = shape === 'round' ? theme.radii.pill : radius != null ? Math.max(radius - cfg.trackPadding, 0) : theme.radii[cfg.radius];
130
+ const selectedBg = selectedColor ?? theme.colors.action.inverse;
131
+ const selectedFg = selectedTextColor ?? theme.colors.action.inverseForeground;
132
+ const restFg = textColor ?? theme.colors.text.secondary;
133
+ const resolvedIconSize = iconSize ?? cfg.icon;
134
+ return /*#__PURE__*/_jsx(View, {
135
+ testID: testID,
136
+ accessibilityRole: "radiogroup",
137
+ accessibilityLabel: accessibilityLabel,
138
+ style: [{
139
+ padding: cfg.trackPadding,
140
+ borderRadius: trackRadius,
141
+ borderWidth: bordered ? 1 : 0,
142
+ borderColor: theme.colors.border.default,
143
+ backgroundColor: trackColor ?? theme.colors.background.muted,
144
+ alignSelf: fullWidth && width == null ? 'stretch' : 'flex-start',
145
+ width: width ?? (fullWidth ? '100%' : undefined),
146
+ opacity: disabled ? 0.5 : 1
147
+ }, style],
148
+ children: /*#__PURE__*/_jsxs(View, {
149
+ style: {
150
+ flexDirection: 'row',
151
+ alignItems: 'stretch',
152
+ gap: cfg.gap,
153
+ position: 'relative'
154
+ },
155
+ children: [/*#__PURE__*/_jsx(Animated.View, {
156
+ pointerEvents: "none",
157
+ style: {
158
+ position: 'absolute',
159
+ top: 0,
160
+ bottom: 0,
161
+ left: thumbX,
162
+ width: thumbW,
163
+ borderRadius: segmentRadius,
164
+ backgroundColor: selectedBg,
165
+ opacity: measured ? 1 : 0
166
+ }
167
+ }), options.map(opt => {
168
+ const isSelected = opt.value === selected;
169
+ const isDisabled = disabled || opt.disabled;
170
+ const fg = isSelected ? selectedFg : restFg;
171
+ const iconNode = opt.icon ? /*#__PURE__*/_jsx(Icon, {
172
+ name: opt.icon,
173
+ size: resolvedIconSize,
174
+ color: fg
175
+ }) : null;
176
+ const iconRight = opt.iconPosition === 'right';
177
+ return /*#__PURE__*/_jsxs(Pressable, {
178
+ onLayout: onSegmentLayout(opt.value),
179
+ onPress: isDisabled ? undefined : () => select(opt.value),
180
+ disabled: isDisabled,
181
+ accessibilityRole: "button",
182
+ accessibilityState: {
183
+ selected: isSelected,
184
+ disabled: isDisabled
185
+ },
186
+ accessibilityLabel: opt.label,
187
+ testID: `segment-${opt.value}`,
188
+ style: ({
189
+ pressed
190
+ }) => ({
191
+ flex: fullWidth || width != null ? 1 : undefined,
192
+ flexDirection: 'row',
193
+ alignItems: 'center',
194
+ justifyContent: 'center',
195
+ gap: cfg.gap,
196
+ paddingHorizontal: cfg.paddingH,
197
+ paddingVertical: cfg.paddingV,
198
+ borderRadius: segmentRadius,
199
+ opacity: opt.disabled ? 0.5 : pressed && !isSelected ? 0.6 : 1
200
+ }),
201
+ children: [iconNode && !iconRight ? iconNode : null, /*#__PURE__*/_jsx(Text, {
202
+ variant: cfg.text,
203
+ weight: "medium",
204
+ color: fg,
205
+ numberOfLines: 1,
206
+ children: opt.label
207
+ }), iconNode && iconRight ? iconNode : null]
208
+ }, opt.value);
209
+ })]
210
+ })
211
+ });
212
+ }
213
+ //# sourceMappingURL=SegmentedButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","useState","Animated","Easing","Pressable","View","useTheme","Icon","Text","jsx","_jsx","jsxs","_jsxs","SIZES","sm","paddingH","paddingV","gap","trackPadding","text","icon","radius","md","SegmentedButton","options","value","defaultValue","onChange","size","shape","fullWidth","width","disabled","bordered","trackColor","selectedColor","selectedTextColor","textColor","iconSize","animated","style","accessibilityLabel","testID","theme","cfg","isControlled","undefined","uncontrolled","setUncontrolled","selected","select","next","layouts","thumbX","Value","current","thumbW","placed","measured","setMeasured","placeThumb","x","withAnim","parallel","timing","toValue","duration","easing","out","cubic","useNativeDriver","start","setValue","l","onSegmentLayout","e","nativeEvent","layout","trackRadius","radii","pill","xl","segmentRadius","Math","max","selectedBg","colors","action","inverse","selectedFg","inverseForeground","restFg","secondary","resolvedIconSize","accessibilityRole","padding","borderRadius","borderWidth","borderColor","border","default","backgroundColor","background","muted","alignSelf","opacity","children","flexDirection","alignItems","position","pointerEvents","top","bottom","left","map","opt","isSelected","isDisabled","fg","iconNode","name","color","iconRight","iconPosition","onLayout","onPress","accessibilityState","label","pressed","flex","justifyContent","paddingHorizontal","paddingVertical","variant","weight","numberOfLines"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/SegmentedButton/SegmentedButton.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+
3
+ import { useState } from 'react';
4
+ import { View } from 'react-native';
5
+ import { SegmentedButton } from "./SegmentedButton.js";
6
+ import { Text } from "../Text/Text.js";
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ const meta = {
9
+ title: 'Components/SegmentedButton',
10
+ component: SegmentedButton
11
+ };
12
+ export default meta;
13
+ const THREE = [{
14
+ label: 'Option 01',
15
+ value: '1'
16
+ }, {
17
+ label: 'Option 02',
18
+ value: '2'
19
+ }, {
20
+ label: 'Option 03',
21
+ value: '3'
22
+ }];
23
+ function Demo(props) {
24
+ const [value, setValue] = useState(props.defaultValue ?? '1');
25
+ return /*#__PURE__*/_jsxs(View, {
26
+ style: {
27
+ gap: 8,
28
+ alignItems: 'flex-start'
29
+ },
30
+ children: [/*#__PURE__*/_jsx(SegmentedButton, {
31
+ options: THREE,
32
+ ...props,
33
+ value: value,
34
+ onChange: setValue
35
+ }), /*#__PURE__*/_jsxs(Text, {
36
+ variant: "caption",
37
+ color: "secondary",
38
+ children: ["value: ", value]
39
+ })]
40
+ });
41
+ }
42
+
43
+ /** Default (rounded rectangle), md size. */
44
+ export const Default = {
45
+ render: () => /*#__PURE__*/_jsx(Demo, {})
46
+ };
47
+
48
+ /** Round (pill) shape. */
49
+ export const Round = {
50
+ render: () => /*#__PURE__*/_jsx(Demo, {
51
+ shape: "round"
52
+ })
53
+ };
54
+
55
+ /** Both sizes. */
56
+ export const Sizes = {
57
+ render: () => /*#__PURE__*/_jsxs(View, {
58
+ style: {
59
+ gap: 24,
60
+ alignItems: 'flex-start'
61
+ },
62
+ children: [/*#__PURE__*/_jsx(Demo, {
63
+ size: "md"
64
+ }), /*#__PURE__*/_jsx(Demo, {
65
+ size: "sm"
66
+ })]
67
+ })
68
+ };
69
+
70
+ /** Two options (the common A/B toggle). */
71
+ export const TwoOptions = {
72
+ render: () => /*#__PURE__*/_jsx(Demo, {
73
+ options: [{
74
+ label: 'Dine in',
75
+ value: 'dine'
76
+ }, {
77
+ label: 'Take out',
78
+ value: 'take'
79
+ }]
80
+ })
81
+ };
82
+
83
+ /** Many options. */
84
+ export const ManyOptions = {
85
+ render: () => /*#__PURE__*/_jsx(Demo, {
86
+ options: [{
87
+ label: 'Day',
88
+ value: 'day'
89
+ }, {
90
+ label: 'Week',
91
+ value: 'week'
92
+ }, {
93
+ label: 'Month',
94
+ value: 'month'
95
+ }, {
96
+ label: 'Quarter',
97
+ value: 'quarter'
98
+ }, {
99
+ label: 'Year',
100
+ value: 'year'
101
+ }]
102
+ })
103
+ };
104
+
105
+ /** With icons (left and right positions). */
106
+ export const WithIcons = {
107
+ render: () => /*#__PURE__*/_jsxs(View, {
108
+ style: {
109
+ gap: 24,
110
+ alignItems: 'flex-start'
111
+ },
112
+ children: [/*#__PURE__*/_jsx(Demo, {
113
+ shape: "round",
114
+ options: [{
115
+ label: 'List',
116
+ value: 'list',
117
+ icon: 'menu-02'
118
+ }, {
119
+ label: 'Grid',
120
+ value: 'grid',
121
+ icon: 'layout1'
122
+ }, {
123
+ label: 'Table',
124
+ value: 'table',
125
+ icon: 'table'
126
+ }]
127
+ }), /*#__PURE__*/_jsx(Demo, {
128
+ options: [{
129
+ label: 'Prev',
130
+ value: 'prev',
131
+ icon: 'arrow-left'
132
+ }, {
133
+ label: 'Next',
134
+ value: 'next',
135
+ icon: 'chevron-forward',
136
+ iconPosition: 'right'
137
+ }]
138
+ })]
139
+ })
140
+ };
141
+
142
+ /** Full width — segments share the container equally. */
143
+ export const FullWidth = {
144
+ render: () => /*#__PURE__*/_jsx(View, {
145
+ style: {
146
+ width: 520
147
+ },
148
+ children: /*#__PURE__*/_jsx(Demo, {
149
+ fullWidth: true
150
+ })
151
+ })
152
+ };
153
+
154
+ /** Fixed width. */
155
+ export const FixedWidth = {
156
+ render: () => /*#__PURE__*/_jsx(Demo, {
157
+ width: 420
158
+ })
159
+ };
160
+
161
+ /** Custom radius (overrides shape). */
162
+ export const CustomRadius = {
163
+ render: () => /*#__PURE__*/_jsxs(View, {
164
+ style: {
165
+ gap: 24,
166
+ alignItems: 'flex-start'
167
+ },
168
+ children: [/*#__PURE__*/_jsx(Demo, {
169
+ radius: 6
170
+ }), /*#__PURE__*/_jsx(Demo, {
171
+ radius: 24
172
+ })]
173
+ })
174
+ };
175
+
176
+ /** Disabled control and per-segment disabling. */
177
+ export const Disabled = {
178
+ render: () => /*#__PURE__*/_jsxs(View, {
179
+ style: {
180
+ gap: 24,
181
+ alignItems: 'flex-start'
182
+ },
183
+ children: [/*#__PURE__*/_jsx(Demo, {
184
+ disabled: true
185
+ }), /*#__PURE__*/_jsx(Demo, {
186
+ options: [{
187
+ label: 'Available',
188
+ value: 'a'
189
+ }, {
190
+ label: 'Soon',
191
+ value: 'b',
192
+ disabled: true
193
+ }, {
194
+ label: 'Also',
195
+ value: 'c'
196
+ }]
197
+ })]
198
+ })
199
+ };
200
+
201
+ /** Color overrides and no border. */
202
+ export const Themed = {
203
+ render: () => /*#__PURE__*/_jsx(Demo, {
204
+ shape: "round",
205
+ bordered: false,
206
+ selectedColor: "#008C57",
207
+ selectedTextColor: "#FFFFFF",
208
+ trackColor: "#E6F5EE"
209
+ })
210
+ };
211
+ //# sourceMappingURL=SegmentedButton.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","View","SegmentedButton","Text","jsx","_jsx","jsxs","_jsxs","meta","title","component","THREE","label","value","Demo","props","setValue","defaultValue","style","gap","alignItems","children","options","onChange","variant","color","Default","render","Round","shape","Sizes","size","TwoOptions","ManyOptions","WithIcons","icon","iconPosition","FullWidth","width","fullWidth","FixedWidth","CustomRadius","radius","Disabled","disabled","Themed","bordered","selectedColor","selectedTextColor","trackColor"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/SegmentedButton/SegmentedButton.stories.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { render, screen, fireEvent } from '@testing-library/react-native';
5
+ import { SegmentedButton } from "./SegmentedButton.js";
6
+ import { ThemeProvider } from "../../theme/index.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ function renderWithTheme(ui) {
9
+ return render(/*#__PURE__*/_jsx(ThemeProvider, {
10
+ children: ui
11
+ }));
12
+ }
13
+ const OPTS = [{
14
+ label: 'One',
15
+ value: '1'
16
+ }, {
17
+ label: 'Two',
18
+ value: '2'
19
+ }, {
20
+ label: 'Three',
21
+ value: '3'
22
+ }];
23
+ describe('SegmentedButton', () => {
24
+ it('renders one segment per option', () => {
25
+ renderWithTheme(/*#__PURE__*/_jsx(SegmentedButton, {
26
+ options: OPTS
27
+ }));
28
+ expect(screen.getByText('One')).toBeTruthy();
29
+ expect(screen.getByText('Two')).toBeTruthy();
30
+ expect(screen.getByText('Three')).toBeTruthy();
31
+ });
32
+ it('selects the first option by default (uncontrolled) and reports changes', () => {
33
+ const onChange = jest.fn();
34
+ renderWithTheme(/*#__PURE__*/_jsx(SegmentedButton, {
35
+ options: OPTS,
36
+ onChange: onChange
37
+ }));
38
+ expect(screen.getByTestId('segment-1').props.accessibilityState.selected).toBe(true);
39
+ fireEvent.press(screen.getByText('Two'));
40
+ expect(onChange).toHaveBeenCalledWith('2');
41
+ expect(screen.getByTestId('segment-2').props.accessibilityState.selected).toBe(true);
42
+ });
43
+ it('honors defaultValue', () => {
44
+ renderWithTheme(/*#__PURE__*/_jsx(SegmentedButton, {
45
+ options: OPTS,
46
+ defaultValue: "3"
47
+ }));
48
+ expect(screen.getByTestId('segment-3').props.accessibilityState.selected).toBe(true);
49
+ });
50
+ it('respects a controlled value and does not self-update', () => {
51
+ const onChange = jest.fn();
52
+ renderWithTheme(/*#__PURE__*/_jsx(SegmentedButton, {
53
+ options: OPTS,
54
+ value: "2",
55
+ onChange: onChange
56
+ }));
57
+ expect(screen.getByTestId('segment-2').props.accessibilityState.selected).toBe(true);
58
+ fireEvent.press(screen.getByText('Three'));
59
+ expect(onChange).toHaveBeenCalledWith('3');
60
+ // value prop still "2" → stays selected
61
+ expect(screen.getByTestId('segment-2').props.accessibilityState.selected).toBe(true);
62
+ });
63
+ it('does not fire when the whole control is disabled', () => {
64
+ const onChange = jest.fn();
65
+ renderWithTheme(/*#__PURE__*/_jsx(SegmentedButton, {
66
+ options: OPTS,
67
+ disabled: true,
68
+ onChange: onChange
69
+ }));
70
+ fireEvent.press(screen.getByText('Two'));
71
+ expect(onChange).not.toHaveBeenCalled();
72
+ });
73
+ it('does not fire for a disabled segment but works for others', () => {
74
+ const onChange = jest.fn();
75
+ const opts = [{
76
+ label: 'A',
77
+ value: 'a'
78
+ }, {
79
+ label: 'B',
80
+ value: 'b',
81
+ disabled: true
82
+ }, {
83
+ label: 'C',
84
+ value: 'c'
85
+ }];
86
+ renderWithTheme(/*#__PURE__*/_jsx(SegmentedButton, {
87
+ options: opts,
88
+ onChange: onChange
89
+ }));
90
+ fireEvent.press(screen.getByText('B'));
91
+ expect(onChange).not.toHaveBeenCalled();
92
+ fireEvent.press(screen.getByText('C'));
93
+ expect(onChange).toHaveBeenCalledWith('c');
94
+ });
95
+ });
96
+ //# sourceMappingURL=SegmentedButton.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","render","screen","fireEvent","SegmentedButton","ThemeProvider","jsx","_jsx","renderWithTheme","ui","children","OPTS","label","value","describe","it","options","expect","getByText","toBeTruthy","onChange","jest","fn","getByTestId","props","accessibilityState","selected","toBe","press","toHaveBeenCalledWith","defaultValue","disabled","not","toHaveBeenCalled","opts"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/SegmentedButton/SegmentedButton.test.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { SegmentedButton } from "./SegmentedButton.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SegmentedButton"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/SegmentedButton/index.ts"],"mappings":";;AAAA,SACEA,eAAe,QAKV,sBAAmB","ignoreList":[]}
@@ -168,6 +168,15 @@ export function Sidebar({
168
168
  outputRange: [Math.max(0, (collapsedWidth - 2 * PADDING - TOGGLE_SIZE) / 2), 0],
169
169
  extrapolate: 'clamp'
170
170
  });
171
+
172
+ // The logo glides to center the same way (measured so any custom logo works),
173
+ // at a constant size — no discrete size/alignment swap, so no flicker.
174
+ const [logoWidth, setLogoWidth] = useState(0);
175
+ const logoTranslateX = width.interpolate({
176
+ inputRange: [collapsedWidth, expandedWidth],
177
+ outputRange: [Math.max(0, (collapsedWidth - 2 * PADDING - logoWidth) / 2), 0],
178
+ extrapolate: 'clamp'
179
+ });
171
180
  const selectItem = item => {
172
181
  if (!activeControlled) setActiveInternal(item.key);
173
182
  item.onPress?.();
@@ -179,7 +188,7 @@ export function Sidebar({
179
188
  onCollapsedChange?.(next);
180
189
  };
181
190
  const logoNode = logo ?? /*#__PURE__*/_jsx(BaconLogo, {
182
- height: visualCollapsed ? 36 : 40
191
+ height: 40
183
192
  });
184
193
  const toggle = showToggle ? /*#__PURE__*/_jsx(Animated.View, {
185
194
  style: {
@@ -215,10 +224,18 @@ export function Sidebar({
215
224
  children: [/*#__PURE__*/_jsx(View, {
216
225
  style: {
217
226
  minHeight: 56,
218
- alignItems: visualCollapsed ? 'center' : 'flex-start',
227
+ alignItems: 'flex-start',
219
228
  justifyContent: 'center'
220
229
  },
221
- children: logoNode
230
+ children: /*#__PURE__*/_jsx(Animated.View, {
231
+ onLayout: e => setLogoWidth(e.nativeEvent.layout.width),
232
+ style: {
233
+ transform: [{
234
+ translateX: logoTranslateX
235
+ }]
236
+ },
237
+ children: logoNode
238
+ })
222
239
  }), /*#__PURE__*/_jsx(ScrollArea, {
223
240
  style: {
224
241
  flex: 1,