@demlanide/react-lucky-components 0.1.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/README.md +184 -0
- package/dist/Alert/Alert.d.ts +3 -0
- package/dist/Alert/Alert.d.ts.map +1 -0
- package/dist/Alert/Alert.js +7 -0
- package/dist/Alert/constants.d.ts +38 -0
- package/dist/Alert/constants.d.ts.map +1 -0
- package/dist/Alert/constants.js +34 -0
- package/dist/Alert/index.d.ts +3 -0
- package/dist/Alert/index.d.ts.map +1 -0
- package/dist/Alert/index.js +1 -0
- package/dist/Alert/styles.d.ts +11 -0
- package/dist/Alert/styles.d.ts.map +1 -0
- package/dist/Alert/styles.js +49 -0
- package/dist/Alert/types.d.ts +20 -0
- package/dist/Alert/types.d.ts.map +1 -0
- package/dist/Alert/types.js +1 -0
- package/dist/Avatar/Avatar.d.ts +3 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -0
- package/dist/Avatar/Avatar.js +33 -0
- package/dist/Avatar/Shapes/.map.json +42 -0
- package/dist/Avatar/Shapes/romb.png +0 -0
- package/dist/Avatar/consts.d.ts +21 -0
- package/dist/Avatar/consts.d.ts.map +1 -0
- package/dist/Avatar/consts.js +20 -0
- package/dist/Avatar/index.d.ts +3 -0
- package/dist/Avatar/index.d.ts.map +1 -0
- package/dist/Avatar/index.js +1 -0
- package/dist/Avatar/styles.d.ts +27 -0
- package/dist/Avatar/styles.d.ts.map +1 -0
- package/dist/Avatar/styles.js +83 -0
- package/dist/Avatar/types.d.ts +31 -0
- package/dist/Avatar/types.d.ts.map +1 -0
- package/dist/Avatar/types.js +1 -0
- package/dist/Avatar/utilities.d.ts +8 -0
- package/dist/Avatar/utilities.d.ts.map +1 -0
- package/dist/Avatar/utilities.js +66 -0
- package/dist/Badge/Badge.d.ts +3 -0
- package/dist/Badge/Badge.d.ts.map +1 -0
- package/dist/Badge/Badge.js +8 -0
- package/dist/Badge/constants.d.ts +20 -0
- package/dist/Badge/constants.d.ts.map +1 -0
- package/dist/Badge/constants.js +32 -0
- package/dist/Badge/index.d.ts +3 -0
- package/dist/Badge/index.d.ts.map +1 -0
- package/dist/Badge/index.js +1 -0
- package/dist/Badge/styles.d.ts +10 -0
- package/dist/Badge/styles.d.ts.map +1 -0
- package/dist/Badge/styles.js +28 -0
- package/dist/Badge/types.d.ts +18 -0
- package/dist/Badge/types.d.ts.map +1 -0
- package/dist/Badge/types.js +1 -0
- package/dist/BigInput/BigInput.d.ts +3 -0
- package/dist/BigInput/BigInput.d.ts.map +1 -0
- package/dist/BigInput/BigInput.js +46 -0
- package/dist/BigInput/constants.d.ts +32 -0
- package/dist/BigInput/constants.d.ts.map +1 -0
- package/dist/BigInput/constants.js +31 -0
- package/dist/BigInput/index.d.ts +3 -0
- package/dist/BigInput/index.d.ts.map +1 -0
- package/dist/BigInput/index.js +1 -0
- package/dist/BigInput/styles.d.ts +14 -0
- package/dist/BigInput/styles.d.ts.map +1 -0
- package/dist/BigInput/styles.js +80 -0
- package/dist/BigInput/types.d.ts +23 -0
- package/dist/BigInput/types.d.ts.map +1 -0
- package/dist/BigInput/types.js +1 -0
- package/dist/Button/Button.d.ts +3 -0
- package/dist/Button/Button.d.ts.map +1 -0
- package/dist/Button/Button.js +7 -0
- package/dist/Button/constants.d.ts +23 -0
- package/dist/Button/constants.d.ts.map +1 -0
- package/dist/Button/constants.js +28 -0
- package/dist/Button/index.d.ts +3 -0
- package/dist/Button/index.d.ts.map +1 -0
- package/dist/Button/index.js +1 -0
- package/dist/Button/styles.d.ts +13 -0
- package/dist/Button/styles.d.ts.map +1 -0
- package/dist/Button/styles.js +34 -0
- package/dist/Button/types.d.ts +20 -0
- package/dist/Button/types.d.ts.map +1 -0
- package/dist/Button/types.js +1 -0
- package/dist/CardStack/BehindCard.d.ts +12 -0
- package/dist/CardStack/BehindCard.d.ts.map +1 -0
- package/dist/CardStack/BehindCard.js +18 -0
- package/dist/CardStack/CardStack.d.ts +3 -0
- package/dist/CardStack/CardStack.d.ts.map +1 -0
- package/dist/CardStack/CardStack.js +77 -0
- package/dist/CardStack/CardStackDots.d.ts +3 -0
- package/dist/CardStack/CardStackDots.d.ts.map +1 -0
- package/dist/CardStack/CardStackDots.js +121 -0
- package/dist/CardStack/StackCard.d.ts +27 -0
- package/dist/CardStack/StackCard.d.ts.map +1 -0
- package/dist/CardStack/StackCard.js +45 -0
- package/dist/CardStack/constants.d.ts +32 -0
- package/dist/CardStack/constants.d.ts.map +1 -0
- package/dist/CardStack/constants.js +31 -0
- package/dist/CardStack/index.d.ts +4 -0
- package/dist/CardStack/index.d.ts.map +1 -0
- package/dist/CardStack/index.js +2 -0
- package/dist/CardStack/types.d.ts +39 -0
- package/dist/CardStack/types.d.ts.map +1 -0
- package/dist/CardStack/types.js +1 -0
- package/dist/CardStack/useSwipeGesture.d.ts +18 -0
- package/dist/CardStack/useSwipeGesture.d.ts.map +1 -0
- package/dist/CardStack/useSwipeGesture.js +70 -0
- package/dist/DatePicker/CalendarModal.d.ts +15 -0
- package/dist/DatePicker/CalendarModal.d.ts.map +1 -0
- package/dist/DatePicker/CalendarModal.js +129 -0
- package/dist/DatePicker/DatePicker.d.ts +3 -0
- package/dist/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/DatePicker/DatePicker.js +57 -0
- package/dist/DatePicker/DayCell.d.ts +14 -0
- package/dist/DatePicker/DayCell.d.ts.map +1 -0
- package/dist/DatePicker/DayCell.js +16 -0
- package/dist/DatePicker/constants.d.ts +46 -0
- package/dist/DatePicker/constants.d.ts.map +1 -0
- package/dist/DatePicker/constants.js +51 -0
- package/dist/DatePicker/icons.d.ts +4 -0
- package/dist/DatePicker/icons.d.ts.map +1 -0
- package/dist/DatePicker/icons.js +12 -0
- package/dist/DatePicker/index.d.ts +3 -0
- package/dist/DatePicker/index.d.ts.map +1 -0
- package/dist/DatePicker/index.js +1 -0
- package/dist/DatePicker/styles.d.ts +40 -0
- package/dist/DatePicker/styles.d.ts.map +1 -0
- package/dist/DatePicker/styles.js +134 -0
- package/dist/DatePicker/types.d.ts +39 -0
- package/dist/DatePicker/types.d.ts.map +1 -0
- package/dist/DatePicker/types.js +1 -0
- package/dist/DatePicker/utils.d.ts +15 -0
- package/dist/DatePicker/utils.d.ts.map +1 -0
- package/dist/DatePicker/utils.js +133 -0
- package/dist/DimmedScrollView/DimmedScrollView.d.ts +5 -0
- package/dist/DimmedScrollView/DimmedScrollView.d.ts.map +1 -0
- package/dist/DimmedScrollView/DimmedScrollView.js +18 -0
- package/dist/DimmedScrollView/index.d.ts +3 -0
- package/dist/DimmedScrollView/index.d.ts.map +1 -0
- package/dist/DimmedScrollView/index.js +1 -0
- package/dist/DimmedScrollView/styles.d.ts +15 -0
- package/dist/DimmedScrollView/styles.d.ts.map +1 -0
- package/dist/DimmedScrollView/styles.js +32 -0
- package/dist/DimmedScrollView/types.d.ts +20 -0
- package/dist/DimmedScrollView/types.d.ts.map +1 -0
- package/dist/DimmedScrollView/types.js +1 -0
- package/dist/FadingEdge/FadingEdge.d.ts +3 -0
- package/dist/FadingEdge/FadingEdge.d.ts.map +1 -0
- package/dist/FadingEdge/FadingEdge.js +30 -0
- package/dist/FadingEdge/index.d.ts +3 -0
- package/dist/FadingEdge/index.d.ts.map +1 -0
- package/dist/FadingEdge/index.js +1 -0
- package/dist/FadingEdge/types.d.ts +14 -0
- package/dist/FadingEdge/types.d.ts.map +1 -0
- package/dist/FadingEdge/types.js +1 -0
- package/dist/Icon/Icon.d.ts +6 -0
- package/dist/Icon/Icon.d.ts.map +1 -0
- package/dist/Icon/Icon.js +16 -0
- package/dist/Icon/defaults.d.ts +7 -0
- package/dist/Icon/defaults.d.ts.map +1 -0
- package/dist/Icon/defaults.js +80 -0
- package/dist/Icon/icons/navigation.d.ts +10 -0
- package/dist/Icon/icons/navigation.d.ts.map +1 -0
- package/dist/Icon/icons/navigation.js +10 -0
- package/dist/Icon/icons/system.d.ts +29 -0
- package/dist/Icon/icons/system.d.ts.map +1 -0
- package/dist/Icon/icons/system.js +29 -0
- package/dist/Icon/icons/tabs.d.ts +6 -0
- package/dist/Icon/icons/tabs.d.ts.map +1 -0
- package/dist/Icon/icons/tabs.js +6 -0
- package/dist/Icon/index.d.ts +3 -0
- package/dist/Icon/index.d.ts.map +1 -0
- package/dist/Icon/index.js +1 -0
- package/dist/Icon/registry.d.ts +3 -0
- package/dist/Icon/registry.d.ts.map +1 -0
- package/dist/Icon/registry.js +43 -0
- package/dist/Icon/types.d.ts +20 -0
- package/dist/Icon/types.d.ts.map +1 -0
- package/dist/Icon/types.js +40 -0
- package/dist/Input/Input.d.ts +5 -0
- package/dist/Input/Input.d.ts.map +1 -0
- package/dist/Input/Input.js +64 -0
- package/dist/Input/constants.d.ts +56 -0
- package/dist/Input/constants.d.ts.map +1 -0
- package/dist/Input/constants.js +61 -0
- package/dist/Input/index.d.ts +3 -0
- package/dist/Input/index.d.ts.map +1 -0
- package/dist/Input/index.js +1 -0
- package/dist/Input/styles.d.ts +23 -0
- package/dist/Input/styles.d.ts.map +1 -0
- package/dist/Input/styles.js +99 -0
- package/dist/Input/types.d.ts +21 -0
- package/dist/Input/types.d.ts.map +1 -0
- package/dist/Input/types.js +1 -0
- package/dist/ListCell/CheckMark.d.ts +10 -0
- package/dist/ListCell/CheckMark.d.ts.map +1 -0
- package/dist/ListCell/CheckMark.js +12 -0
- package/dist/ListCell/Chevron.d.ts +14 -0
- package/dist/ListCell/Chevron.d.ts.map +1 -0
- package/dist/ListCell/Chevron.js +22 -0
- package/dist/ListCell/ListCell.d.ts +3 -0
- package/dist/ListCell/ListCell.d.ts.map +1 -0
- package/dist/ListCell/ListCell.js +120 -0
- package/dist/ListCell/PickerModal.d.ts +13 -0
- package/dist/ListCell/PickerModal.d.ts.map +1 -0
- package/dist/ListCell/PickerModal.js +8 -0
- package/dist/ListCell/RadioButton.d.ts +10 -0
- package/dist/ListCell/RadioButton.d.ts.map +1 -0
- package/dist/ListCell/RadioButton.js +12 -0
- package/dist/ListCell/SwitchTrack.d.ts +19 -0
- package/dist/ListCell/SwitchTrack.d.ts.map +1 -0
- package/dist/ListCell/SwitchTrack.js +8 -0
- package/dist/ListCell/constants.d.ts +30 -0
- package/dist/ListCell/constants.d.ts.map +1 -0
- package/dist/ListCell/constants.js +35 -0
- package/dist/ListCell/index.d.ts +3 -0
- package/dist/ListCell/index.d.ts.map +1 -0
- package/dist/ListCell/index.js +1 -0
- package/dist/ListCell/styles.d.ts +28 -0
- package/dist/ListCell/styles.d.ts.map +1 -0
- package/dist/ListCell/styles.js +111 -0
- package/dist/ListCell/types.d.ts +68 -0
- package/dist/ListCell/types.d.ts.map +1 -0
- package/dist/ListCell/types.js +1 -0
- package/dist/ListCell/useSwitchAnimation.d.ts +12 -0
- package/dist/ListCell/useSwitchAnimation.d.ts.map +1 -0
- package/dist/ListCell/useSwitchAnimation.js +31 -0
- package/dist/ListCell/utilities.d.ts +24 -0
- package/dist/ListCell/utilities.d.ts.map +1 -0
- package/dist/ListCell/utilities.js +29 -0
- package/dist/Picker/Picker.d.ts +3 -0
- package/dist/Picker/Picker.d.ts.map +1 -0
- package/dist/Picker/Picker.js +76 -0
- package/dist/Picker/PickerHeader.d.ts +7 -0
- package/dist/Picker/PickerHeader.d.ts.map +1 -0
- package/dist/Picker/PickerHeader.js +6 -0
- package/dist/Picker/PickerRow.d.ts +9 -0
- package/dist/Picker/PickerRow.d.ts.map +1 -0
- package/dist/Picker/PickerRow.js +9 -0
- package/dist/Picker/SearchField.d.ts +8 -0
- package/dist/Picker/SearchField.d.ts.map +1 -0
- package/dist/Picker/SearchField.js +8 -0
- package/dist/Picker/constants.d.ts +24 -0
- package/dist/Picker/constants.d.ts.map +1 -0
- package/dist/Picker/constants.js +29 -0
- package/dist/Picker/icons.d.ts +3 -0
- package/dist/Picker/icons.d.ts.map +1 -0
- package/dist/Picker/icons.js +9 -0
- package/dist/Picker/index.d.ts +3 -0
- package/dist/Picker/index.d.ts.map +1 -0
- package/dist/Picker/index.js +1 -0
- package/dist/Picker/styles.d.ts +34 -0
- package/dist/Picker/styles.d.ts.map +1 -0
- package/dist/Picker/styles.js +192 -0
- package/dist/Picker/types.d.ts +40 -0
- package/dist/Picker/types.d.ts.map +1 -0
- package/dist/Picker/types.js +1 -0
- package/dist/Picker/useFilteredItems.d.ts +3 -0
- package/dist/Picker/useFilteredItems.d.ts.map +1 -0
- package/dist/Picker/useFilteredItems.js +18 -0
- package/dist/SegmentedTabs/SegmentedTabs.d.ts +3 -0
- package/dist/SegmentedTabs/SegmentedTabs.d.ts.map +1 -0
- package/dist/SegmentedTabs/SegmentedTabs.js +70 -0
- package/dist/SegmentedTabs/index.d.ts +3 -0
- package/dist/SegmentedTabs/index.d.ts.map +1 -0
- package/dist/SegmentedTabs/index.js +1 -0
- package/dist/SegmentedTabs/types.d.ts +10 -0
- package/dist/SegmentedTabs/types.d.ts.map +1 -0
- package/dist/SegmentedTabs/types.js +1 -0
- package/dist/Select/Select.d.ts +3 -0
- package/dist/Select/Select.d.ts.map +1 -0
- package/dist/Select/Select.js +60 -0
- package/dist/Select/index.d.ts +3 -0
- package/dist/Select/index.d.ts.map +1 -0
- package/dist/Select/index.js +1 -0
- package/dist/Select/styles.d.ts +8 -0
- package/dist/Select/styles.d.ts.map +1 -0
- package/dist/Select/styles.js +36 -0
- package/dist/Select/types.d.ts +37 -0
- package/dist/Select/types.d.ts.map +1 -0
- package/dist/Select/types.js +1 -0
- package/dist/Tabs/FloatingTabBar.d.ts +9 -0
- package/dist/Tabs/FloatingTabBar.d.ts.map +1 -0
- package/dist/Tabs/FloatingTabBar.js +55 -0
- package/dist/Tabs/Tabs.d.ts +21 -0
- package/dist/Tabs/Tabs.d.ts.map +1 -0
- package/dist/Tabs/Tabs.js +29 -0
- package/dist/Tabs/constants.d.ts +35 -0
- package/dist/Tabs/constants.d.ts.map +1 -0
- package/dist/Tabs/constants.js +36 -0
- package/dist/Tabs/icons.d.ts +16 -0
- package/dist/Tabs/icons.d.ts.map +1 -0
- package/dist/Tabs/icons.js +8 -0
- package/dist/Tabs/index.d.ts +6 -0
- package/dist/Tabs/index.d.ts.map +1 -0
- package/dist/Tabs/index.js +4 -0
- package/dist/Tabs/styles.d.ts +224 -0
- package/dist/Tabs/styles.d.ts.map +1 -0
- package/dist/Tabs/styles.js +121 -0
- package/dist/Tabs/types.d.ts +61 -0
- package/dist/Tabs/types.d.ts.map +1 -0
- package/dist/Tabs/types.js +4 -0
- package/dist/Tabs/useFloatingTabBarScrollPadding.d.ts +7 -0
- package/dist/Tabs/useFloatingTabBarScrollPadding.d.ts.map +1 -0
- package/dist/Tabs/useFloatingTabBarScrollPadding.js +11 -0
- package/dist/Tabs/utilities.d.ts +7 -0
- package/dist/Tabs/utilities.d.ts.map +1 -0
- package/dist/Tabs/utilities.js +18 -0
- package/dist/ToggleSection/ToggleSection.d.ts +3 -0
- package/dist/ToggleSection/ToggleSection.d.ts.map +1 -0
- package/dist/ToggleSection/ToggleSection.js +18 -0
- package/dist/ToggleSection/index.d.ts +3 -0
- package/dist/ToggleSection/index.d.ts.map +1 -0
- package/dist/ToggleSection/index.js +1 -0
- package/dist/ToggleSection/styles.d.ts +15 -0
- package/dist/ToggleSection/styles.d.ts.map +1 -0
- package/dist/ToggleSection/styles.js +49 -0
- package/dist/ToggleSection/types.d.ts +36 -0
- package/dist/ToggleSection/types.d.ts.map +1 -0
- package/dist/ToggleSection/types.js +1 -0
- package/dist/assets/fonts/.map.json +51 -0
- package/dist/assets/fonts/SB Sans Text.ttf +0 -0
- package/dist/assets/fonts/sf-pro-display/.map.json +114 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYBLACKITALIC.OTF +0 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYBOLD.OTF +0 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYHEAVYITALIC.OTF +0 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYLIGHTITALIC.OTF +0 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYMEDIUM.OTF +0 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYREGULAR.otf +0 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYSEMIBOLDITALIC.OTF +0 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYTHINITALIC.OTF +0 -0
- package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYULTRALIGHTITALIC.OTF +0 -0
- package/dist/fonts.d.ts +6 -0
- package/dist/fonts.d.ts.map +1 -0
- package/dist/fonts.js +8 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/theme.d.ts +19 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +18 -0
- package/package.json +76 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { Animated } from 'react-native';
|
|
3
|
+
import { TRAVEL } from './constants';
|
|
4
|
+
export function useSwitchAnimation(value, { activeTrackColor, inactiveTrackColor }) {
|
|
5
|
+
const anim = useRef(new Animated.Value(value ? 1 : 0)).current;
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
Animated.spring(anim, {
|
|
8
|
+
toValue: value ? 1 : 0,
|
|
9
|
+
useNativeDriver: false, // required for backgroundColor interpolation
|
|
10
|
+
bounciness: 2,
|
|
11
|
+
speed: 15,
|
|
12
|
+
}).start();
|
|
13
|
+
}, [value, anim]);
|
|
14
|
+
const translateX = anim.interpolate({
|
|
15
|
+
inputRange: [0, 1],
|
|
16
|
+
outputRange: [0, TRAVEL],
|
|
17
|
+
});
|
|
18
|
+
const trackBg = anim.interpolate({
|
|
19
|
+
inputRange: [0, 1],
|
|
20
|
+
outputRange: [inactiveTrackColor, activeTrackColor],
|
|
21
|
+
});
|
|
22
|
+
const indicatorOpacity = anim.interpolate({
|
|
23
|
+
inputRange: [0, 0.5, 1],
|
|
24
|
+
outputRange: [0, 0, 1],
|
|
25
|
+
});
|
|
26
|
+
const circleOpacity = anim.interpolate({
|
|
27
|
+
inputRange: [0, 0.5, 1],
|
|
28
|
+
outputRange: [1, 0, 0],
|
|
29
|
+
});
|
|
30
|
+
return { translateX, trackBg, indicatorOpacity, circleOpacity };
|
|
31
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AccessibilityState } from 'react-native';
|
|
2
|
+
interface TogglePressParams {
|
|
3
|
+
disabled: boolean;
|
|
4
|
+
value: boolean;
|
|
5
|
+
onValueChange?: (value: boolean) => void;
|
|
6
|
+
}
|
|
7
|
+
interface ListCellPressParams extends TogglePressParams {
|
|
8
|
+
isSwitchTrailing: boolean;
|
|
9
|
+
isSelectorTrailing: boolean;
|
|
10
|
+
onPress?: () => void;
|
|
11
|
+
onSelectorPress?: () => void;
|
|
12
|
+
}
|
|
13
|
+
interface ListCellAccessibilityParams {
|
|
14
|
+
isSwitchTrailing: boolean;
|
|
15
|
+
isSelectionTrailing?: boolean;
|
|
16
|
+
selected?: boolean;
|
|
17
|
+
value: boolean;
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function handleTogglePress({ disabled, value, onValueChange, }: TogglePressParams): void;
|
|
21
|
+
export declare function createListCellPressHandler({ disabled, isSwitchTrailing: isSwitch, isSelectorTrailing: isSelector, value, onValueChange, onPress, onSelectorPress, }: ListCellPressParams): () => void;
|
|
22
|
+
export declare function getListCellAccessibilityState({ isSwitchTrailing: isSwitch, isSelectionTrailing, selected, value, disabled, }: ListCellAccessibilityParams): AccessibilityState;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=utilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/ListCell/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,UAAU,2BAA2B;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,KAAK,EACL,aAAa,GACd,EAAE,iBAAiB,GAAG,IAAI,CAG1B;AAED,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,EACR,gBAAgB,EAAE,QAAQ,EAC1B,kBAAkB,EAAE,UAAU,EAC9B,KAAK,EACL,aAAa,EACb,OAAO,EACP,eAAe,GAChB,EAAE,mBAAmB,GAAG,MAAM,IAAI,CAalC;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,gBAAgB,EAAE,QAAQ,EAC1B,mBAAmB,EACnB,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,2BAA2B,GAAG,kBAAkB,CAQlD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export function handleTogglePress({ disabled, value, onValueChange, }) {
|
|
2
|
+
if (disabled)
|
|
3
|
+
return;
|
|
4
|
+
onValueChange?.(!value);
|
|
5
|
+
}
|
|
6
|
+
export function createListCellPressHandler({ disabled, isSwitchTrailing: isSwitch, isSelectorTrailing: isSelector, value, onValueChange, onPress, onSelectorPress, }) {
|
|
7
|
+
return () => {
|
|
8
|
+
if (disabled)
|
|
9
|
+
return;
|
|
10
|
+
if (isSwitch) {
|
|
11
|
+
onValueChange?.(!value);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (isSelector) {
|
|
15
|
+
onSelectorPress?.();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
onPress?.();
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function getListCellAccessibilityState({ isSwitchTrailing: isSwitch, isSelectionTrailing, selected, value, disabled, }) {
|
|
22
|
+
if (isSwitch) {
|
|
23
|
+
return { checked: value, disabled };
|
|
24
|
+
}
|
|
25
|
+
if (isSelectionTrailing) {
|
|
26
|
+
return { checked: selected, disabled };
|
|
27
|
+
}
|
|
28
|
+
return { disabled };
|
|
29
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { PickerProps } from './types';
|
|
2
|
+
export declare function Picker({ items, selectedValue, onValueChange, searchable, searchPlaceholder, title, onBack, onSave, style, testID, grabber, fitContent, keyboardInset, }: PickerProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=Picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../src/Picker/Picker.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,SAAS,CAAC;AAwBvD,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAiB,EACjB,iBAA4B,EAC5B,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAe,EACf,UAAkB,EAClB,aAAiB,GAClB,EAAE,WAAW,2CA0Jb"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { FlatList, useWindowDimensions } from 'react-native';
|
|
4
|
+
import { Button } from '../Button';
|
|
5
|
+
import { CELL_PADDING_VERTICAL } from './constants';
|
|
6
|
+
import { useFilteredItems } from './useFilteredItems';
|
|
7
|
+
import { PickerRow } from './PickerRow';
|
|
8
|
+
import { PickerHeader } from './PickerHeader';
|
|
9
|
+
import { SearchField } from './SearchField';
|
|
10
|
+
import { Container, TopOverlay, SearchContainer, EmptyContainer, EmptyText, Grabber, } from './styles';
|
|
11
|
+
const SAVE_BUTTON_STYLE = {
|
|
12
|
+
borderRadius: 12,
|
|
13
|
+
minHeight: 50,
|
|
14
|
+
paddingVertical: 0,
|
|
15
|
+
marginHorizontal: 16,
|
|
16
|
+
marginBottom: 16,
|
|
17
|
+
alignSelf: 'stretch',
|
|
18
|
+
};
|
|
19
|
+
export function Picker({ items, selectedValue, onValueChange, searchable = true, searchPlaceholder = 'Search', title, onBack, onSave, style, testID, grabber = false, fitContent = false, keyboardInset = 0, }) {
|
|
20
|
+
const [query, setQuery] = useState('');
|
|
21
|
+
const hasHeader = title != null && onBack != null;
|
|
22
|
+
const [topOverlayHeight, setTopOverlayHeight] = useState(0);
|
|
23
|
+
const [listContentHeight, setListContentHeight] = useState(0);
|
|
24
|
+
const { height: windowHeight } = useWindowDimensions();
|
|
25
|
+
const filteredItems = useFilteredItems(items, query);
|
|
26
|
+
const handleSelect = useCallback((value) => onValueChange?.(value), [onValueChange]);
|
|
27
|
+
const renderItem = useCallback(({ item }) => (_jsx(PickerRow, { item: item, selected: item.value === selectedValue, onPress: handleSelect })), [selectedValue, handleSelect]);
|
|
28
|
+
const keyExtractor = useCallback((item) => item.value, []);
|
|
29
|
+
/* ── Search field (shared between header overlay & list header) ── */
|
|
30
|
+
const searchField = useMemo(() => {
|
|
31
|
+
if (!searchable)
|
|
32
|
+
return null;
|
|
33
|
+
return (_jsx(SearchField, { value: query, onChangeText: setQuery, placeholder: searchPlaceholder }));
|
|
34
|
+
}, [searchable, searchPlaceholder, query]);
|
|
35
|
+
const listHeader = useMemo(() => {
|
|
36
|
+
if (!searchable || hasHeader || searchField == null)
|
|
37
|
+
return null;
|
|
38
|
+
return _jsx(SearchContainer, { children: searchField });
|
|
39
|
+
}, [searchable, hasHeader, searchField]);
|
|
40
|
+
const listEmpty = useMemo(() => (_jsx(EmptyContainer, { children: _jsx(EmptyText, { children: "No results" }) })), []);
|
|
41
|
+
/* ── Top overlay layout tracking ─────────────────────────────── */
|
|
42
|
+
const handleTopOverlayLayout = useCallback((event) => {
|
|
43
|
+
const measuredHeight = Math.round(event.nativeEvent.layout.height);
|
|
44
|
+
setTopOverlayHeight((prev) => (prev === measuredHeight ? prev : measuredHeight));
|
|
45
|
+
}, []);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!hasHeader)
|
|
48
|
+
setTopOverlayHeight(0);
|
|
49
|
+
}, [hasHeader]);
|
|
50
|
+
const listContentContainerStyle = useMemo(() => ({ paddingTop: hasHeader ? topOverlayHeight : 0 }), [hasHeader, topOverlayHeight]);
|
|
51
|
+
/* ── fitContent sizing ───────────────────────────────────────── */
|
|
52
|
+
const clampedKeyboardInset = useMemo(() => Math.max(0, Math.round(keyboardInset)), [keyboardInset]);
|
|
53
|
+
const maxListHeight = useMemo(() => Math.max(160, Math.round(windowHeight * 0.85) - (fitContent ? clampedKeyboardInset : 0)), [windowHeight, fitContent, clampedKeyboardInset]);
|
|
54
|
+
const handleListContentSizeChange = useCallback((_width, height) => {
|
|
55
|
+
const next = Math.round(height);
|
|
56
|
+
setListContentHeight((prev) => (prev === next ? prev : next));
|
|
57
|
+
}, []);
|
|
58
|
+
const listStyle = useMemo(() => {
|
|
59
|
+
if (!fitContent)
|
|
60
|
+
return { flex: 1 };
|
|
61
|
+
if (listContentHeight > 0)
|
|
62
|
+
return { height: Math.min(listContentHeight, maxListHeight), flexGrow: 0 };
|
|
63
|
+
return { maxHeight: maxListHeight, flexGrow: 0 };
|
|
64
|
+
}, [fitContent, listContentHeight, maxListHeight]);
|
|
65
|
+
const scrollEnabled = !fitContent || listContentHeight > maxListHeight;
|
|
66
|
+
const containerStyle = useMemo(() => [{ flex: fitContent ? 0 : 1 }, style], [fitContent, style]);
|
|
67
|
+
/* ── Save button ─────────────────────────────────────────────── */
|
|
68
|
+
const saveButton = useMemo(() => {
|
|
69
|
+
if (onSave == null)
|
|
70
|
+
return null;
|
|
71
|
+
const handleSave = () => onSave(selectedValue ?? '');
|
|
72
|
+
return (_jsx(Button, { onPress: handleSave, variant: "primary", accessibilityLabel: "Save", accessibilityRole: "button", testID: "picker-save-button", style: SAVE_BUTTON_STYLE, children: "Save" }));
|
|
73
|
+
}, [onSave, selectedValue]);
|
|
74
|
+
/* ── Render ──────────────────────────────────────────────────── */
|
|
75
|
+
return (_jsxs(Container, { style: containerStyle, testID: testID, accessibilityRole: "radiogroup", children: [hasHeader && (_jsxs(TopOverlay, { onLayout: handleTopOverlayLayout, pointerEvents: "box-none", children: [grabber && _jsx(Grabber, {}), _jsx(PickerHeader, { title: title, onBack: onBack }), searchField != null && (_jsx(SearchContainer, { style: { paddingTop: CELL_PADDING_VERTICAL }, children: searchField }))] })), _jsx(FlatList, { data: filteredItems, renderItem: renderItem, keyExtractor: keyExtractor, ListHeaderComponent: listHeader, ListEmptyComponent: listEmpty, keyboardShouldPersistTaps: "handled", contentContainerStyle: listContentContainerStyle, onContentSizeChange: fitContent ? handleListContentSizeChange : undefined, scrollEnabled: scrollEnabled, style: listStyle }), saveButton] }));
|
|
76
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickerHeader.d.ts","sourceRoot":"","sources":["../../src/Picker/PickerHeader.tsx"],"names":[],"mappings":"AAQA,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CAchE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BackChevron } from './icons';
|
|
3
|
+
import { HeaderRow, HeaderBackPressable, HeaderTitle, EmptyView, } from './styles';
|
|
4
|
+
export function PickerHeader({ title, onBack }) {
|
|
5
|
+
return (_jsxs(HeaderRow, { children: [_jsx(HeaderBackPressable, { onPress: onBack, accessibilityLabel: "Go back", accessibilityRole: "button", children: _jsx(BackChevron, {}) }), _jsx(HeaderTitle, { children: title }), _jsx(EmptyView, {})] }));
|
|
6
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PickerItem } from './types';
|
|
2
|
+
interface PickerRowProps {
|
|
3
|
+
item: PickerItem;
|
|
4
|
+
selected: boolean;
|
|
5
|
+
onPress: (value: string) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function PickerRow({ item, selected, onPress }: PickerRowProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=PickerRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickerRow.d.ts","sourceRoot":"","sources":["../../src/Picker/PickerRow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAW1C,UAAU,cAAc;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,cAAc,2CAwBpE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import { CellPressable, Leading, TitleGroup, TitleText, SubtitleText, RadioOuter, RadioCircle, } from './styles';
|
|
4
|
+
export function PickerRow({ item, selected, onPress }) {
|
|
5
|
+
const handlePress = useCallback(() => {
|
|
6
|
+
onPress(item.value);
|
|
7
|
+
}, [item.value, onPress]);
|
|
8
|
+
return (_jsxs(CellPressable, { onPress: handlePress, accessibilityRole: "radio", accessibilityState: { selected }, children: [_jsx(Leading, { children: _jsxs(TitleGroup, { children: [_jsx(TitleText, { numberOfLines: 1, children: item.label }), item.subtitle != null && (_jsx(SubtitleText, { numberOfLines: 1, children: item.subtitle }))] }) }), _jsx(RadioOuter, { "$selected": selected, children: _jsx(RadioCircle, { "$selected": selected }) })] }));
|
|
9
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface SearchFieldProps {
|
|
2
|
+
value: string;
|
|
3
|
+
onChangeText: (text: string) => void;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function SearchField({ value, onChangeText, placeholder, }: SearchFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=SearchField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchField.d.ts","sourceRoot":"","sources":["../../src/Picker/SearchField.tsx"],"names":[],"mappings":"AAaA,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,YAAY,EACZ,WAAsB,GACvB,EAAE,gBAAgB,2CA0BlB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Platform } from 'react-native';
|
|
3
|
+
import { BlurView } from 'expo-blur';
|
|
4
|
+
import { SearchIcon } from './icons';
|
|
5
|
+
import { SearchGlassShell, SearchBlurLayer, SearchGlassOverlay, SearchGlassEdge, SearchGlassHighlight, SearchFieldRow, SearchInput, } from './styles';
|
|
6
|
+
export function SearchField({ value, onChangeText, placeholder = 'Search', }) {
|
|
7
|
+
return (_jsxs(SearchGlassShell, { children: [_jsx(SearchBlurLayer, { pointerEvents: "none", children: _jsx(BlurView, { intensity: 20, tint: Platform.OS === 'ios' ? 'systemChromeMaterialLight' : 'light', style: { flex: 1 } }) }), _jsx(SearchGlassOverlay, { pointerEvents: "none" }), _jsx(SearchGlassEdge, { pointerEvents: "none" }), _jsx(SearchGlassHighlight, { pointerEvents: "none" }), _jsxs(SearchFieldRow, { children: [_jsx(SearchIcon, {}), _jsx(SearchInput, { value: value, onChangeText: onChangeText, placeholder: placeholder, autoCapitalize: "none", autoCorrect: false, returnKeyType: "search" })] })] }));
|
|
8
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Picker design tokens (from Figma node 92:1716).
|
|
3
|
+
* Reuses ListCell text tokens where the values overlap.
|
|
4
|
+
*/
|
|
5
|
+
export declare const TEXT_PRIMARY = "#2C2C2C";
|
|
6
|
+
export declare const TEXT_SECONDARY = "#738295";
|
|
7
|
+
export declare const SEARCH_BG = "rgba(120, 120, 128, 0.16)";
|
|
8
|
+
export declare const SEARCH_PLACEHOLDER_COLOR = "#727272";
|
|
9
|
+
export declare const SEARCH_ICON_COLOR = "#727272";
|
|
10
|
+
export declare const SEARCH_BORDER_RADIUS = 100;
|
|
11
|
+
export declare const SEARCH_PADDING = 11;
|
|
12
|
+
export declare const SEARCH_GLASS_BLUR_INTENSITY = 52;
|
|
13
|
+
export declare const RADIO_SIZE = 21;
|
|
14
|
+
export declare const RADIO_DOT_SIZE = 12;
|
|
15
|
+
export declare const RADIO_BORDER_WIDTH = 1.5;
|
|
16
|
+
export declare const RADIO_BORDER_COLOR = "#C7C7CC";
|
|
17
|
+
export declare const RADIO_ACTIVE_COLOR = "#94E80F";
|
|
18
|
+
export declare const CELL_PADDING_HORIZONTAL = 16;
|
|
19
|
+
export declare const CELL_PADDING_VERTICAL = 14;
|
|
20
|
+
export declare const CELL_GAP = 8;
|
|
21
|
+
export declare const CELL_HEIGHT = 44;
|
|
22
|
+
export declare const HEADER_HEIGHT = 44;
|
|
23
|
+
export declare const HEADER_CHEVRON_COLOR = "#2C2C2C";
|
|
24
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/Picker/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,cAAc,YAAY,CAAC;AAGxC,eAAO,MAAM,SAAS,8BAA8B,CAAC;AACrD,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAI9C,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAG5C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,WAAW,KAAK,CAAC;AAG9B,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,oBAAoB,YAAY,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Picker design tokens (from Figma node 92:1716).
|
|
3
|
+
* Reuses ListCell text tokens where the values overlap.
|
|
4
|
+
*/
|
|
5
|
+
/* ── Text colours ─────────────────────────────────────────────────── */
|
|
6
|
+
export const TEXT_PRIMARY = '#2C2C2C';
|
|
7
|
+
export const TEXT_SECONDARY = '#738295';
|
|
8
|
+
/* ── Search field ─────────────────────────────────────────────────── */
|
|
9
|
+
export const SEARCH_BG = 'rgba(120, 120, 128, 0.16)';
|
|
10
|
+
export const SEARCH_PLACEHOLDER_COLOR = '#727272';
|
|
11
|
+
export const SEARCH_ICON_COLOR = '#727272';
|
|
12
|
+
export const SEARCH_BORDER_RADIUS = 100;
|
|
13
|
+
export const SEARCH_PADDING = 11;
|
|
14
|
+
export const SEARCH_GLASS_BLUR_INTENSITY = 52;
|
|
15
|
+
/* ── Radio button ─────────────────────────────────────────────────── */
|
|
16
|
+
/* From Figma DS node 92:1721; outer ring + inner dot */
|
|
17
|
+
export const RADIO_SIZE = 21;
|
|
18
|
+
export const RADIO_DOT_SIZE = 12;
|
|
19
|
+
export const RADIO_BORDER_WIDTH = 1.5;
|
|
20
|
+
export const RADIO_BORDER_COLOR = '#C7C7CC';
|
|
21
|
+
export const RADIO_ACTIVE_COLOR = '#94E80F';
|
|
22
|
+
/* ── Cell layout ──────────────────────────────────────────────────── */
|
|
23
|
+
export const CELL_PADDING_HORIZONTAL = 16;
|
|
24
|
+
export const CELL_PADDING_VERTICAL = 14;
|
|
25
|
+
export const CELL_GAP = 8;
|
|
26
|
+
export const CELL_HEIGHT = 44;
|
|
27
|
+
/* ── Header ───────────────────────────────────────────────────────── */
|
|
28
|
+
export const HEADER_HEIGHT = 44;
|
|
29
|
+
export const HEADER_CHEVRON_COLOR = '#2C2C2C';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/Picker/icons.tsx"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,4CAE1B;AAED,wBAAgB,UAAU,4CAEzB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { HEADER_CHEVRON_COLOR, SEARCH_ICON_COLOR } from './constants';
|
|
3
|
+
import { Icon } from '../Icon';
|
|
4
|
+
export function BackChevron() {
|
|
5
|
+
return _jsx(Icon, { name: "chevron-left", color: HEADER_CHEVRON_COLOR });
|
|
6
|
+
}
|
|
7
|
+
export function SearchIcon() {
|
|
8
|
+
return _jsx(Icon, { name: "search", color: SEARCH_ICON_COLOR });
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Picker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Picker } from './Picker';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const Container: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
3
|
+
export declare const TopOverlay: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
4
|
+
export declare const Grabber: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
5
|
+
export declare const HeaderRow: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
6
|
+
export declare const HeaderBackPressable: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<Omit<import("react-native").PressableProps & import("react").RefAttributes<import("react-native").View>, "ref"> & {
|
|
7
|
+
ref?: ((instance: import("react-native").View | null) => void) | import("react").RefObject<import("react-native").View> | null | undefined;
|
|
8
|
+
}, never>>;
|
|
9
|
+
export declare const HeaderTitle: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
|
|
10
|
+
export declare const EmptyView: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
11
|
+
export declare const SearchContainer: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
12
|
+
export declare const SearchGlassShell: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
13
|
+
export declare const SearchBlurLayer: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
14
|
+
export declare const SearchGlassOverlay: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
15
|
+
export declare const SearchGlassEdge: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
16
|
+
export declare const SearchGlassHighlight: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
17
|
+
export declare const SearchFieldRow: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
18
|
+
export declare const SearchInput: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("styled-components/native/dist/types").FastOmit<import("styled-components/native/dist/types").Substitute<import("react-native").TextInputProps, import("react-native").TextInputProps & import("react").RefAttributes<import("react-native").TextInput>>, never>, never>>;
|
|
19
|
+
export declare const CellPressable: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<Omit<import("react-native").PressableProps & import("react").RefAttributes<import("react-native").View>, "ref"> & {
|
|
20
|
+
ref?: ((instance: import("react-native").View | null) => void) | import("react").RefObject<import("react-native").View> | null | undefined;
|
|
21
|
+
}, never>>;
|
|
22
|
+
export declare const Leading: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
23
|
+
export declare const TitleGroup: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
24
|
+
export declare const TitleText: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
|
|
25
|
+
export declare const SubtitleText: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
|
|
26
|
+
export declare const RadioOuter: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").ViewProps, {
|
|
27
|
+
$selected: boolean;
|
|
28
|
+
}>>;
|
|
29
|
+
export declare const RadioCircle: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").ViewProps, {
|
|
30
|
+
$selected: boolean;
|
|
31
|
+
}>>;
|
|
32
|
+
export declare const EmptyContainer: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
|
|
33
|
+
export declare const EmptyText: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
|
|
34
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/Picker/styles.ts"],"names":[],"mappings":";AAuBA,eAAO,MAAM,SAAS,+KAErB,CAAC;AAEF,eAAO,MAAM,UAAU,+KAQtB,CAAC;AAIF,eAAO,MAAM,OAAO,+KAOnB,CAAC;AAEF,eAAO,MAAM,SAAS,+KAOrB,CAAC;AAEF,eAAO,MAAM,mBAAmB;;UAM/B,CAAC;AAEF,eAAO,MAAM,WAAW,+KAUvB,CAAC;AAEF,eAAO,MAAM,SAAS,+KAGrB,CAAC;AAIF,eAAO,MAAM,eAAe,+KAG3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,+KAgB1B,CAAC;AAEJ,eAAO,MAAM,eAAe,+KAM3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,+KAS9B,CAAC;AAEF,eAAO,MAAM,eAAe,+KAS3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,+KAOhC,CAAC;AAEF,eAAO,MAAM,cAAc,+KAO1B,CAAC;AAEF,eAAO,MAAM,WAAW,sZAUvB,CAAC;AAIF,eAAO,MAAM,aAAa;;UAKzB,CAAC;AAEF,eAAO,MAAM,OAAO,+KAKnB,CAAC;AAEF,eAAO,MAAM,UAAU,+KAItB,CAAC;AAEF,eAAO,MAAM,SAAS,+KAMrB,CAAC;AAEF,eAAO,MAAM,YAAY,+KAMxB,CAAC;AAIF,eAAO,MAAM,UAAU;eAA4B,OAAO;GAUzD,CAAC;AAEF,eAAO,MAAM,WAAW;eAA4B,OAAO;GAK1D,CAAC;AAIF,eAAO,MAAM,cAAc,+KAG1B,CAAC;AAEF,eAAO,MAAM,SAAS,+KAMrB,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { Platform, Pressable } from 'react-native';
|
|
2
|
+
import styled from 'styled-components/native';
|
|
3
|
+
import { TEXT_PRIMARY, TEXT_SECONDARY, SEARCH_BG, SEARCH_PLACEHOLDER_COLOR, SEARCH_BORDER_RADIUS, SEARCH_PADDING, CELL_GAP, CELL_HEIGHT, RADIO_SIZE, RADIO_DOT_SIZE, RADIO_BORDER_WIDTH, RADIO_BORDER_COLOR, RADIO_ACTIVE_COLOR, HEADER_HEIGHT, CELL_PADDING_HORIZONTAL, } from './constants';
|
|
4
|
+
/* ── Outer wrapper ────────────────────────────────────────────────── */
|
|
5
|
+
export const Container = styled.View `
|
|
6
|
+
background: transparent;
|
|
7
|
+
`;
|
|
8
|
+
export const TopOverlay = styled.View `
|
|
9
|
+
position: absolute;
|
|
10
|
+
top: 0;
|
|
11
|
+
left: 0;
|
|
12
|
+
right: 0;
|
|
13
|
+
z-index: 10;
|
|
14
|
+
gap: 10px;
|
|
15
|
+
align-items: center;
|
|
16
|
+
`;
|
|
17
|
+
/* ── Header ───────────────────────────────────────────────────────── */
|
|
18
|
+
export const Grabber = styled.View `
|
|
19
|
+
width: 36px;
|
|
20
|
+
height: 5px;
|
|
21
|
+
flex-shrink: 0;
|
|
22
|
+
border-radius: 100px;
|
|
23
|
+
background-color: #CCCCCC;
|
|
24
|
+
margin-vertical: 5px;
|
|
25
|
+
`;
|
|
26
|
+
export const HeaderRow = styled.View `
|
|
27
|
+
flex-direction: row;
|
|
28
|
+
align-items: center;
|
|
29
|
+
height: ${HEADER_HEIGHT}px;
|
|
30
|
+
padding-horizontal: ${CELL_PADDING_HORIZONTAL}px;
|
|
31
|
+
padding-vertical: 8px;
|
|
32
|
+
width: 100%;
|
|
33
|
+
`;
|
|
34
|
+
export const HeaderBackPressable = styled(Pressable) `
|
|
35
|
+
width: ${HEADER_HEIGHT}px;
|
|
36
|
+
height: ${HEADER_HEIGHT}px;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
margin-left: -8px;
|
|
40
|
+
`;
|
|
41
|
+
export const HeaderTitle = styled.Text `
|
|
42
|
+
flex: 1;
|
|
43
|
+
color: ${TEXT_PRIMARY};
|
|
44
|
+
text-align: center;
|
|
45
|
+
|
|
46
|
+
font-family: "SB Sans Text";
|
|
47
|
+
font-size: 16px;
|
|
48
|
+
font-weight: 500;
|
|
49
|
+
line-height: 20px;
|
|
50
|
+
letter-spacing: -0.32px;
|
|
51
|
+
`;
|
|
52
|
+
export const EmptyView = styled.View `
|
|
53
|
+
width: ${HEADER_HEIGHT}px;
|
|
54
|
+
height: ${HEADER_HEIGHT}px;
|
|
55
|
+
`;
|
|
56
|
+
/* ── Search field ─────────────────────────────────────────────────── */
|
|
57
|
+
export const SearchContainer = styled.View `
|
|
58
|
+
background: transparent;
|
|
59
|
+
width: 90%;
|
|
60
|
+
`;
|
|
61
|
+
export const SearchGlassShell = styled.View(() => ({
|
|
62
|
+
position: 'relative',
|
|
63
|
+
overflow: 'hidden',
|
|
64
|
+
borderRadius: SEARCH_BORDER_RADIUS,
|
|
65
|
+
...Platform.select({
|
|
66
|
+
ios: {
|
|
67
|
+
shadowColor: '#000',
|
|
68
|
+
shadowOffset: { width: 0, height: 6 },
|
|
69
|
+
shadowOpacity: 0.08,
|
|
70
|
+
shadowRadius: 16,
|
|
71
|
+
},
|
|
72
|
+
android: {
|
|
73
|
+
elevation: 3,
|
|
74
|
+
},
|
|
75
|
+
default: {},
|
|
76
|
+
}),
|
|
77
|
+
}));
|
|
78
|
+
export const SearchBlurLayer = styled.View `
|
|
79
|
+
position: absolute;
|
|
80
|
+
top: 0;
|
|
81
|
+
right: 0;
|
|
82
|
+
bottom: 0;
|
|
83
|
+
left: 0;
|
|
84
|
+
`;
|
|
85
|
+
export const SearchGlassOverlay = styled.View `
|
|
86
|
+
position: absolute;
|
|
87
|
+
top: 0;
|
|
88
|
+
right: 0;
|
|
89
|
+
bottom: 0;
|
|
90
|
+
left: 0;
|
|
91
|
+
background-color: ${Platform.OS === 'ios'
|
|
92
|
+
? 'rgba(255, 255, 255, 0.06)'
|
|
93
|
+
: 'rgba(255, 255, 255, 0.35)'};
|
|
94
|
+
`;
|
|
95
|
+
export const SearchGlassEdge = styled.View `
|
|
96
|
+
position: absolute;
|
|
97
|
+
top: 0;
|
|
98
|
+
right: 0;
|
|
99
|
+
bottom: 0;
|
|
100
|
+
left: 0;
|
|
101
|
+
border-radius: ${SEARCH_BORDER_RADIUS}px;
|
|
102
|
+
border-width: 1px;
|
|
103
|
+
border-color: rgba(255, 255, 255, 0.5);
|
|
104
|
+
`;
|
|
105
|
+
export const SearchGlassHighlight = styled.View `
|
|
106
|
+
position: absolute;
|
|
107
|
+
top: 0;
|
|
108
|
+
left: 16px;
|
|
109
|
+
right: 16px;
|
|
110
|
+
height: 1px;
|
|
111
|
+
background-color: rgba(255, 255, 255, 0.72);
|
|
112
|
+
`;
|
|
113
|
+
export const SearchFieldRow = styled.View `
|
|
114
|
+
flex-direction: row;
|
|
115
|
+
align-items: center;
|
|
116
|
+
gap: 8px;
|
|
117
|
+
background-color: ${SEARCH_BG};
|
|
118
|
+
border-radius: ${SEARCH_BORDER_RADIUS}px;
|
|
119
|
+
padding: ${SEARCH_PADDING}px;
|
|
120
|
+
`;
|
|
121
|
+
export const SearchInput = styled.TextInput.attrs({
|
|
122
|
+
placeholderTextColor: SEARCH_PLACEHOLDER_COLOR,
|
|
123
|
+
}) `
|
|
124
|
+
flex: 1;
|
|
125
|
+
font-size: 17px;
|
|
126
|
+
font-weight: 400;
|
|
127
|
+
line-height: 22px;
|
|
128
|
+
letter-spacing: -0.08px;
|
|
129
|
+
color: ${TEXT_PRIMARY};
|
|
130
|
+
padding: 0;
|
|
131
|
+
`;
|
|
132
|
+
/* ── List cell row ────────────────────────────────────────────────── */
|
|
133
|
+
export const CellPressable = styled(Pressable) `
|
|
134
|
+
flex-direction: row;
|
|
135
|
+
align-items: center;
|
|
136
|
+
padding: ${CELL_PADDING_HORIZONTAL}px;
|
|
137
|
+
gap: ${CELL_GAP}px;
|
|
138
|
+
`;
|
|
139
|
+
export const Leading = styled.View `
|
|
140
|
+
flex: 1;
|
|
141
|
+
height: ${CELL_HEIGHT}px;
|
|
142
|
+
flex-direction: row;
|
|
143
|
+
align-items: center;
|
|
144
|
+
`;
|
|
145
|
+
export const TitleGroup = styled.View `
|
|
146
|
+
flex-shrink: 1;
|
|
147
|
+
justify-content: center;
|
|
148
|
+
padding-bottom: 2px;
|
|
149
|
+
`;
|
|
150
|
+
export const TitleText = styled.Text `
|
|
151
|
+
font-size: 17px;
|
|
152
|
+
font-weight: 400;
|
|
153
|
+
line-height: 22px;
|
|
154
|
+
letter-spacing: -0.43px;
|
|
155
|
+
color: ${TEXT_PRIMARY};
|
|
156
|
+
`;
|
|
157
|
+
export const SubtitleText = styled.Text `
|
|
158
|
+
font-size: 13px;
|
|
159
|
+
font-weight: 400;
|
|
160
|
+
line-height: 18px;
|
|
161
|
+
letter-spacing: -0.08px;
|
|
162
|
+
color: ${TEXT_SECONDARY};
|
|
163
|
+
`;
|
|
164
|
+
/* ── Radio button ─────────────────────────────────────────────────── */
|
|
165
|
+
export const RadioOuter = styled.View `
|
|
166
|
+
width: ${RADIO_SIZE}px;
|
|
167
|
+
height: ${RADIO_SIZE}px;
|
|
168
|
+
border-radius: ${RADIO_SIZE / 2}px;
|
|
169
|
+
border-width: ${RADIO_BORDER_WIDTH}px;
|
|
170
|
+
border-color: ${({ $selected }) => $selected ? RADIO_ACTIVE_COLOR : RADIO_BORDER_COLOR};
|
|
171
|
+
background-color: transparent;
|
|
172
|
+
align-items: center;
|
|
173
|
+
justify-content: center;
|
|
174
|
+
`;
|
|
175
|
+
export const RadioCircle = styled.View `
|
|
176
|
+
width: ${({ $selected }) => ($selected ? RADIO_DOT_SIZE : 0)}px;
|
|
177
|
+
height: ${({ $selected }) => ($selected ? RADIO_DOT_SIZE : 0)}px;
|
|
178
|
+
border-radius: ${RADIO_DOT_SIZE / 2}px;
|
|
179
|
+
background-color: ${RADIO_ACTIVE_COLOR};
|
|
180
|
+
`;
|
|
181
|
+
/* ── Empty state ──────────────────────────────────────────────────── */
|
|
182
|
+
export const EmptyContainer = styled.View `
|
|
183
|
+
padding: ${CELL_PADDING_HORIZONTAL * 2}px;
|
|
184
|
+
align-items: center;
|
|
185
|
+
`;
|
|
186
|
+
export const EmptyText = styled.Text `
|
|
187
|
+
font-size: 17px;
|
|
188
|
+
font-weight: 400;
|
|
189
|
+
line-height: 22px;
|
|
190
|
+
letter-spacing: -0.43px;
|
|
191
|
+
color: ${TEXT_SECONDARY};
|
|
192
|
+
`;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { StyleProp, ViewStyle } from 'react-native';
|
|
2
|
+
export interface PickerItem {
|
|
3
|
+
/** Primary label displayed in the row (e.g. "EUR · €") */
|
|
4
|
+
label: string;
|
|
5
|
+
/** Secondary label shown below the title (e.g. "Euro") */
|
|
6
|
+
subtitle?: string;
|
|
7
|
+
/** Unique value identifying this option */
|
|
8
|
+
value: string;
|
|
9
|
+
/** Additional properties */
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface PickerProps {
|
|
13
|
+
/** List of selectable options */
|
|
14
|
+
items: PickerItem[];
|
|
15
|
+
/** Currently selected value */
|
|
16
|
+
selectedValue?: string;
|
|
17
|
+
/** Called with the new value when the user taps an item */
|
|
18
|
+
onValueChange?: (value: string) => void;
|
|
19
|
+
/** Show the search field above the list. @default true */
|
|
20
|
+
searchable?: boolean;
|
|
21
|
+
/** Placeholder for the search field. @default 'Search' */
|
|
22
|
+
searchPlaceholder?: string;
|
|
23
|
+
/** Header title. When provided with onBack, shows header with back chevron */
|
|
24
|
+
title?: string;
|
|
25
|
+
/** Called when the back chevron is pressed */
|
|
26
|
+
onBack?: () => void;
|
|
27
|
+
/** When provided, shows Save button; called with current selected value when pressed */
|
|
28
|
+
onSave?: (value: string) => void;
|
|
29
|
+
/** Style applied to the outer container */
|
|
30
|
+
style?: StyleProp<ViewStyle>;
|
|
31
|
+
/** Forwarded to the root View */
|
|
32
|
+
testID?: string;
|
|
33
|
+
/** Show the grabber. @default false */
|
|
34
|
+
grabber?: boolean;
|
|
35
|
+
/** When true, picker grows only to content height (up to a max cap). @default false */
|
|
36
|
+
fitContent?: boolean;
|
|
37
|
+
/** Keyboard inset passed by the parent (used for fit-content sheets). @default 0 */
|
|
38
|
+
keyboardInset?: number;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Picker/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilteredItems.d.ts","sourceRoot":"","sources":["../../src/Picker/useFilteredItems.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,gBAmBlE"}
|