@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.
- package/lib/commonjs/components/CodeInput/CodeInput.js +28 -9
- package/lib/commonjs/components/CodeInput/CodeInput.js.map +1 -1
- package/lib/commonjs/components/CodeInput/CodeInput.stories.js +28 -1
- package/lib/commonjs/components/CodeInput/CodeInput.stories.js.map +1 -1
- package/lib/commonjs/components/CodeInput/CodeInput.test.js +16 -0
- package/lib/commonjs/components/CodeInput/CodeInput.test.js.map +1 -1
- package/lib/commonjs/components/Dialog/Dialog.js +116 -71
- package/lib/commonjs/components/Dialog/Dialog.js.map +1 -1
- package/lib/commonjs/components/Dialog/StepDialog.js +111 -0
- package/lib/commonjs/components/Dialog/StepDialog.js.map +1 -0
- package/lib/commonjs/components/Dialog/StepDialog.stories.js +157 -0
- package/lib/commonjs/components/Dialog/StepDialog.stories.js.map +1 -0
- package/lib/commonjs/components/Dialog/StepDialog.test.js +118 -0
- package/lib/commonjs/components/Dialog/StepDialog.test.js.map +1 -0
- package/lib/commonjs/components/Dialog/index.js +7 -0
- package/lib/commonjs/components/Dialog/index.js.map +1 -1
- package/lib/commonjs/components/Icon/icons.generated.js +9 -1
- package/lib/commonjs/components/Icon/icons.generated.js.map +1 -1
- package/lib/commonjs/components/List/List.js +45 -0
- package/lib/commonjs/components/List/List.js.map +1 -0
- package/lib/commonjs/components/List/List.stories.js +215 -0
- package/lib/commonjs/components/List/List.stories.js.map +1 -0
- package/lib/commonjs/components/List/List.test.js +94 -0
- package/lib/commonjs/components/List/List.test.js.map +1 -0
- package/lib/commonjs/components/List/ListItem.js +210 -0
- package/lib/commonjs/components/List/ListItem.js.map +1 -0
- package/lib/commonjs/components/List/index.js +20 -0
- package/lib/commonjs/components/List/index.js.map +1 -0
- package/lib/commonjs/components/Menu/Menu.js +11 -3
- package/lib/commonjs/components/Menu/Menu.js.map +1 -1
- package/lib/commonjs/components/ProgressBar/ProgressBar.js +4 -3
- package/lib/commonjs/components/ProgressBar/ProgressBar.js.map +1 -1
- package/lib/commonjs/components/SegmentedButton/SegmentedButton.js +217 -0
- package/lib/commonjs/components/SegmentedButton/SegmentedButton.js.map +1 -0
- package/lib/commonjs/components/SegmentedButton/SegmentedButton.stories.js +215 -0
- package/lib/commonjs/components/SegmentedButton/SegmentedButton.stories.js.map +1 -0
- package/lib/commonjs/components/SegmentedButton/SegmentedButton.test.js +97 -0
- package/lib/commonjs/components/SegmentedButton/SegmentedButton.test.js.map +1 -0
- package/lib/commonjs/components/SegmentedButton/index.js +13 -0
- package/lib/commonjs/components/SegmentedButton/index.js.map +1 -0
- package/lib/commonjs/components/Sidebar/Sidebar.js +20 -3
- package/lib/commonjs/components/Sidebar/Sidebar.js.map +1 -1
- package/lib/commonjs/components/Sidebar/Sidebar.stories.js +17 -1
- package/lib/commonjs/components/Sidebar/Sidebar.stories.js.map +1 -1
- package/lib/commonjs/components/Table/Table.js +69 -6
- package/lib/commonjs/components/Table/Table.js.map +1 -1
- package/lib/commonjs/components/Table/Table.stories.js +118 -1
- package/lib/commonjs/components/Table/Table.stories.js.map +1 -1
- package/lib/commonjs/components/Table/Table.test.js +58 -0
- package/lib/commonjs/components/Table/Table.test.js.map +1 -1
- package/lib/commonjs/components/_internal/ModalHostContext.js +21 -0
- package/lib/commonjs/components/_internal/ModalHostContext.js.map +1 -0
- package/lib/commonjs/components/index.js +37 -15
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/module/components/CodeInput/CodeInput.js +28 -9
- package/lib/module/components/CodeInput/CodeInput.js.map +1 -1
- package/lib/module/components/CodeInput/CodeInput.stories.js +27 -0
- package/lib/module/components/CodeInput/CodeInput.stories.js.map +1 -1
- package/lib/module/components/CodeInput/CodeInput.test.js +16 -0
- package/lib/module/components/CodeInput/CodeInput.test.js.map +1 -1
- package/lib/module/components/Dialog/Dialog.js +116 -71
- package/lib/module/components/Dialog/Dialog.js.map +1 -1
- package/lib/module/components/Dialog/StepDialog.js +107 -0
- package/lib/module/components/Dialog/StepDialog.js.map +1 -0
- package/lib/module/components/Dialog/StepDialog.stories.js +153 -0
- package/lib/module/components/Dialog/StepDialog.stories.js.map +1 -0
- package/lib/module/components/Dialog/StepDialog.test.js +117 -0
- package/lib/module/components/Dialog/StepDialog.test.js.map +1 -0
- package/lib/module/components/Dialog/index.js +1 -0
- package/lib/module/components/Dialog/index.js.map +1 -1
- package/lib/module/components/Icon/icons.generated.js +9 -1
- package/lib/module/components/Icon/icons.generated.js.map +1 -1
- package/lib/module/components/List/List.js +41 -0
- package/lib/module/components/List/List.js.map +1 -0
- package/lib/module/components/List/List.stories.js +211 -0
- package/lib/module/components/List/List.stories.js.map +1 -0
- package/lib/module/components/List/List.test.js +94 -0
- package/lib/module/components/List/List.test.js.map +1 -0
- package/lib/module/components/List/ListItem.js +206 -0
- package/lib/module/components/List/ListItem.js.map +1 -0
- package/lib/module/components/List/index.js +5 -0
- package/lib/module/components/List/index.js.map +1 -0
- package/lib/module/components/Menu/Menu.js +12 -4
- package/lib/module/components/Menu/Menu.js.map +1 -1
- package/lib/module/components/ProgressBar/ProgressBar.js +4 -3
- package/lib/module/components/ProgressBar/ProgressBar.js.map +1 -1
- package/lib/module/components/SegmentedButton/SegmentedButton.js +213 -0
- package/lib/module/components/SegmentedButton/SegmentedButton.js.map +1 -0
- package/lib/module/components/SegmentedButton/SegmentedButton.stories.js +211 -0
- package/lib/module/components/SegmentedButton/SegmentedButton.stories.js.map +1 -0
- package/lib/module/components/SegmentedButton/SegmentedButton.test.js +96 -0
- package/lib/module/components/SegmentedButton/SegmentedButton.test.js.map +1 -0
- package/lib/module/components/SegmentedButton/index.js +4 -0
- package/lib/module/components/SegmentedButton/index.js.map +1 -0
- package/lib/module/components/Sidebar/Sidebar.js +20 -3
- package/lib/module/components/Sidebar/Sidebar.js.map +1 -1
- package/lib/module/components/Sidebar/Sidebar.stories.js +16 -0
- package/lib/module/components/Sidebar/Sidebar.stories.js.map +1 -1
- package/lib/module/components/Table/Table.js +70 -7
- package/lib/module/components/Table/Table.js.map +1 -1
- package/lib/module/components/Table/Table.stories.js +117 -0
- package/lib/module/components/Table/Table.stories.js.map +1 -1
- package/lib/module/components/Table/Table.test.js +58 -0
- package/lib/module/components/Table/Table.test.js.map +1 -1
- package/lib/module/components/_internal/ModalHostContext.js +17 -0
- package/lib/module/components/_internal/ModalHostContext.js.map +1 -0
- package/lib/module/components/index.js +2 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/typescript/commonjs/components/CodeInput/CodeInput.d.ts +5 -1
- package/lib/typescript/commonjs/components/CodeInput/CodeInput.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts +13 -1
- package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Dialog/StepDialog.d.ts +63 -0
- package/lib/typescript/commonjs/components/Dialog/StepDialog.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Dialog/index.d.ts +1 -0
- package/lib/typescript/commonjs/components/Dialog/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Icon/icons.generated.d.ts +8 -0
- package/lib/typescript/commonjs/components/Icon/icons.generated.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/List/List.d.ts +22 -0
- package/lib/typescript/commonjs/components/List/List.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/List/ListItem.d.ts +61 -0
- package/lib/typescript/commonjs/components/List/ListItem.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/List/index.d.ts +5 -0
- package/lib/typescript/commonjs/components/List/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Menu/Menu.d.ts +4 -2
- package/lib/typescript/commonjs/components/Menu/Menu.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/ProgressBar/ProgressBar.d.ts +3 -1
- package/lib/typescript/commonjs/components/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/SegmentedButton/SegmentedButton.d.ts +68 -0
- package/lib/typescript/commonjs/components/SegmentedButton/SegmentedButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/SegmentedButton/index.d.ts +2 -0
- package/lib/typescript/commonjs/components/SegmentedButton/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Sidebar/Sidebar.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Table/Table.d.ts +25 -3
- package/lib/typescript/commonjs/components/Table/Table.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/_internal/ModalHostContext.d.ts +11 -0
- package/lib/typescript/commonjs/components/_internal/ModalHostContext.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/index.d.ts +2 -0
- package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
- package/lib/typescript/module/components/CodeInput/CodeInput.d.ts +5 -1
- package/lib/typescript/module/components/CodeInput/CodeInput.d.ts.map +1 -1
- package/lib/typescript/module/components/Dialog/Dialog.d.ts +13 -1
- package/lib/typescript/module/components/Dialog/Dialog.d.ts.map +1 -1
- package/lib/typescript/module/components/Dialog/StepDialog.d.ts +63 -0
- package/lib/typescript/module/components/Dialog/StepDialog.d.ts.map +1 -0
- package/lib/typescript/module/components/Dialog/index.d.ts +1 -0
- package/lib/typescript/module/components/Dialog/index.d.ts.map +1 -1
- package/lib/typescript/module/components/Icon/icons.generated.d.ts +8 -0
- package/lib/typescript/module/components/Icon/icons.generated.d.ts.map +1 -1
- package/lib/typescript/module/components/List/List.d.ts +22 -0
- package/lib/typescript/module/components/List/List.d.ts.map +1 -0
- package/lib/typescript/module/components/List/ListItem.d.ts +61 -0
- package/lib/typescript/module/components/List/ListItem.d.ts.map +1 -0
- package/lib/typescript/module/components/List/index.d.ts +5 -0
- package/lib/typescript/module/components/List/index.d.ts.map +1 -0
- package/lib/typescript/module/components/Menu/Menu.d.ts +4 -2
- package/lib/typescript/module/components/Menu/Menu.d.ts.map +1 -1
- package/lib/typescript/module/components/ProgressBar/ProgressBar.d.ts +3 -1
- package/lib/typescript/module/components/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/lib/typescript/module/components/SegmentedButton/SegmentedButton.d.ts +68 -0
- package/lib/typescript/module/components/SegmentedButton/SegmentedButton.d.ts.map +1 -0
- package/lib/typescript/module/components/SegmentedButton/index.d.ts +2 -0
- package/lib/typescript/module/components/SegmentedButton/index.d.ts.map +1 -0
- package/lib/typescript/module/components/Sidebar/Sidebar.d.ts.map +1 -1
- package/lib/typescript/module/components/Table/Table.d.ts +25 -3
- package/lib/typescript/module/components/Table/Table.d.ts.map +1 -1
- package/lib/typescript/module/components/_internal/ModalHostContext.d.ts +11 -0
- package/lib/typescript/module/components/_internal/ModalHostContext.d.ts.map +1 -0
- package/lib/typescript/module/components/index.d.ts +2 -0
- package/lib/typescript/module/components/index.d.ts.map +1 -1
- package/package.json +16 -14
- package/src/components/CodeInput/CodeInput.tsx +46 -14
- package/src/components/Dialog/Dialog.tsx +92 -31
- package/src/components/Dialog/StepDialog.tsx +173 -0
- package/src/components/Dialog/index.ts +1 -0
- package/src/components/Icon/icons.generated.ts +9 -1
- package/src/components/List/List.tsx +45 -0
- package/src/components/List/ListItem.tsx +214 -0
- package/src/components/List/index.ts +4 -0
- package/src/components/Menu/Menu.tsx +15 -6
- package/src/components/ProgressBar/ProgressBar.tsx +6 -3
- package/src/components/SegmentedButton/SegmentedButton.tsx +269 -0
- package/src/components/SegmentedButton/index.ts +7 -0
- package/src/components/Sidebar/Sidebar.tsx +18 -10
- package/src/components/Table/Table.tsx +93 -8
- package/src/components/_internal/ModalHostContext.tsx +15 -0
- 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":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,QAAwC,cAAc;AACrF,SAASC,QAAQ,QAAQ,sBAAa;AACtC,SAASC,IAAI,QAAQ,iBAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;
|
|
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":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,EAAEC,MAAM,EAAEC,SAAS,QAAQ,+BAA+B;AACzE,SAASC,eAAe,QAA8B,sBAAmB;AACzE,SAASC,aAAa,QAAQ,sBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE5C,SAASC,eAAeA,CAACC,EAAsB,EAAE;EAC/C,OAAOR,MAAM,cAACM,IAAA,CAACF,aAAa;IAAAK,QAAA,EAAED;EAAE,CAAgB,CAAC,CAAC;AACpD;AAEA,MAAME,IAAuB,GAAG,CAC9B;EAAEC,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE;AAAI,CAAC,EAC5B;EAAED,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE;AAAI,CAAC,EAC5B;EAAED,KAAK,EAAE,OAAO;EAAEC,KAAK,EAAE;AAAI,CAAC,CAC/B;AAEDC,QAAQ,CAAC,iBAAiB,EAAE,MAAM;EAChCC,EAAE,CAAC,gCAAgC,EAAE,MAAM;IACzCP,eAAe,cAACD,IAAA,CAACH,eAAe;MAACY,OAAO,EAAEL;IAAK,CAAE,CAAC,CAAC;IACnDM,MAAM,CAACf,MAAM,CAACgB,SAAS,CAAC,KAAK,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;IAC5CF,MAAM,CAACf,MAAM,CAACgB,SAAS,CAAC,KAAK,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;IAC5CF,MAAM,CAACf,MAAM,CAACgB,SAAS,CAAC,OAAO,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;EAChD,CAAC,CAAC;EAEFJ,EAAE,CAAC,wEAAwE,EAAE,MAAM;IACjF,MAAMK,QAAQ,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IAC1Bd,eAAe,cAACD,IAAA,CAACH,eAAe;MAACY,OAAO,EAAEL,IAAK;MAACS,QAAQ,EAAEA;IAAS,CAAE,CAAC,CAAC;IACvEH,MAAM,CAACf,MAAM,CAACqB,WAAW,CAAC,WAAW,CAAC,CAACC,KAAK,CAACC,kBAAkB,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACpFxB,SAAS,CAACyB,KAAK,CAAC1B,MAAM,CAACgB,SAAS,CAAC,KAAK,CAAC,CAAC;IACxCD,MAAM,CAACG,QAAQ,CAAC,CAACS,oBAAoB,CAAC,GAAG,CAAC;IAC1CZ,MAAM,CAACf,MAAM,CAACqB,WAAW,CAAC,WAAW,CAAC,CAACC,KAAK,CAACC,kBAAkB,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACtF,CAAC,CAAC;EAEFZ,EAAE,CAAC,qBAAqB,EAAE,MAAM;IAC9BP,eAAe,cAACD,IAAA,CAACH,eAAe;MAACY,OAAO,EAAEL,IAAK;MAACmB,YAAY,EAAC;IAAG,CAAE,CAAC,CAAC;IACpEb,MAAM,CAACf,MAAM,CAACqB,WAAW,CAAC,WAAW,CAAC,CAACC,KAAK,CAACC,kBAAkB,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACtF,CAAC,CAAC;EAEFZ,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC/D,MAAMK,QAAQ,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IAC1Bd,eAAe,cAACD,IAAA,CAACH,eAAe;MAACY,OAAO,EAAEL,IAAK;MAACE,KAAK,EAAC,GAAG;MAACO,QAAQ,EAAEA;IAAS,CAAE,CAAC,CAAC;IACjFH,MAAM,CAACf,MAAM,CAACqB,WAAW,CAAC,WAAW,CAAC,CAACC,KAAK,CAACC,kBAAkB,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACpFxB,SAAS,CAACyB,KAAK,CAAC1B,MAAM,CAACgB,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1CD,MAAM,CAACG,QAAQ,CAAC,CAACS,oBAAoB,CAAC,GAAG,CAAC;IAC1C;IACAZ,MAAM,CAACf,MAAM,CAACqB,WAAW,CAAC,WAAW,CAAC,CAACC,KAAK,CAACC,kBAAkB,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACtF,CAAC,CAAC;EAEFZ,EAAE,CAAC,kDAAkD,EAAE,MAAM;IAC3D,MAAMK,QAAQ,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IAC1Bd,eAAe,cAACD,IAAA,CAACH,eAAe;MAACY,OAAO,EAAEL,IAAK;MAACoB,QAAQ;MAACX,QAAQ,EAAEA;IAAS,CAAE,CAAC,CAAC;IAChFjB,SAAS,CAACyB,KAAK,CAAC1B,MAAM,CAACgB,SAAS,CAAC,KAAK,CAAC,CAAC;IACxCD,MAAM,CAACG,QAAQ,CAAC,CAACY,GAAG,CAACC,gBAAgB,CAAC,CAAC;EACzC,CAAC,CAAC;EAEFlB,EAAE,CAAC,2DAA2D,EAAE,MAAM;IACpE,MAAMK,QAAQ,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IAC1B,MAAMY,IAAuB,GAAG,CAC9B;MAAEtB,KAAK,EAAE,GAAG;MAAEC,KAAK,EAAE;IAAI,CAAC,EAC1B;MAAED,KAAK,EAAE,GAAG;MAAEC,KAAK,EAAE,GAAG;MAAEkB,QAAQ,EAAE;IAAK,CAAC,EAC1C;MAAEnB,KAAK,EAAE,GAAG;MAAEC,KAAK,EAAE;IAAI,CAAC,CAC3B;IACDL,eAAe,cAACD,IAAA,CAACH,eAAe;MAACY,OAAO,EAAEkB,IAAK;MAACd,QAAQ,EAAEA;IAAS,CAAE,CAAC,CAAC;IACvEjB,SAAS,CAACyB,KAAK,CAAC1B,MAAM,CAACgB,SAAS,CAAC,GAAG,CAAC,CAAC;IACtCD,MAAM,CAACG,QAAQ,CAAC,CAACY,GAAG,CAACC,gBAAgB,CAAC,CAAC;IACvC9B,SAAS,CAACyB,KAAK,CAAC1B,MAAM,CAACgB,SAAS,CAAC,GAAG,CAAC,CAAC;IACtCD,MAAM,CAACG,QAAQ,CAAC,CAACS,oBAAoB,CAAC,GAAG,CAAC;EAC5C,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -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:
|
|
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:
|
|
227
|
+
alignItems: 'flex-start',
|
|
219
228
|
justifyContent: 'center'
|
|
220
229
|
},
|
|
221
|
-
children:
|
|
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,
|