@hzblj/kara-components 0.7.0 → 0.8.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/CHANGELOG.md +42 -0
- package/README.md +5 -5
- package/lib/module/atoms/activity-indicator/activity-indicator.android.js +42 -0
- package/lib/module/atoms/activity-indicator/activity-indicator.android.js.map +1 -0
- package/lib/module/atoms/activity-indicator/activity-indicator.ios.js +19 -0
- package/lib/module/atoms/activity-indicator/activity-indicator.ios.js.map +1 -0
- package/lib/module/atoms/activity-indicator/activity-indicator.types.js +4 -0
- package/lib/module/atoms/activity-indicator/activity-indicator.types.js.map +1 -0
- package/lib/module/atoms/activity-indicator/index.js +2 -1
- package/lib/module/atoms/activity-indicator/index.js.map +1 -1
- package/lib/module/atoms/avatar/avatar.js +2 -4
- package/lib/module/atoms/avatar/avatar.js.map +1 -1
- package/lib/module/atoms/blur-view/blur-view.android.js +100 -0
- package/lib/module/atoms/blur-view/blur-view.android.js.map +1 -0
- package/lib/module/atoms/blur-view/blur-view.ios.js +43 -0
- package/lib/module/atoms/blur-view/blur-view.ios.js.map +1 -0
- package/lib/module/atoms/blur-view/blur-view.types.js +4 -0
- package/lib/module/atoms/blur-view/blur-view.types.js.map +1 -0
- package/lib/module/atoms/blur-view/index.js +5 -0
- package/lib/module/atoms/blur-view/index.js.map +1 -0
- package/lib/module/atoms/glass-view/glass-view.android.js +36 -5
- package/lib/module/atoms/glass-view/glass-view.android.js.map +1 -1
- package/lib/module/atoms/image/image.js +13 -6
- package/lib/module/atoms/image/image.js.map +1 -1
- package/lib/module/atoms/image/image.types.js +4 -0
- package/lib/module/atoms/image/image.types.js.map +1 -0
- package/lib/module/atoms/image/index.js +1 -0
- package/lib/module/atoms/image/index.js.map +1 -1
- package/lib/module/atoms/index.js +1 -0
- package/lib/module/atoms/index.js.map +1 -1
- package/lib/module/atoms/island/island.android.js +6 -2
- package/lib/module/atoms/island/island.android.js.map +1 -1
- package/lib/module/atoms/island/island.ios.js +5 -2
- package/lib/module/atoms/island/island.ios.js.map +1 -1
- package/lib/module/atoms/pressable/pressable.js +38 -6
- package/lib/module/atoms/pressable/pressable.js.map +1 -1
- package/lib/module/atoms/rn-text/rn-text.js +5 -2
- package/lib/module/atoms/rn-text/rn-text.js.map +1 -1
- package/lib/module/atoms/skeleton/skeleton.js +5 -5
- package/lib/module/atoms/skeleton/skeleton.js.map +1 -1
- package/lib/module/atoms/text/text.android.js +5 -2
- package/lib/module/atoms/text/text.android.js.map +1 -1
- package/lib/module/atoms/text/text.ios.js +14 -3
- package/lib/module/atoms/text/text.ios.js.map +1 -1
- package/lib/module/molecules/collapsible/collapsible.android.js +37 -7
- package/lib/module/molecules/collapsible/collapsible.android.js.map +1 -1
- package/lib/module/molecules/navigation-bar/navigation-bar.android.js +2 -8
- package/lib/module/molecules/navigation-bar/navigation-bar.android.js.map +1 -1
- package/lib/module/molecules/pager/pager.android.js +5 -4
- package/lib/module/molecules/pager/pager.android.js.map +1 -1
- package/lib/module/molecules/scroll-edge-container/scroll-edge-container.android.js +114 -11
- package/lib/module/molecules/scroll-edge-container/scroll-edge-container.android.js.map +1 -1
- package/lib/module/molecules/stepper/stepper.ios.js +45 -8
- package/lib/module/molecules/stepper/stepper.ios.js.map +1 -1
- package/lib/module/ripple-clip.js +9 -1
- package/lib/module/ripple-clip.js.map +1 -1
- package/lib/typescript/atoms/activity-indicator/activity-indicator.d.ts +1 -3
- package/lib/typescript/atoms/activity-indicator/activity-indicator.ios.d.ts +3 -0
- package/lib/typescript/atoms/activity-indicator/activity-indicator.types.d.ts +17 -0
- package/lib/typescript/atoms/activity-indicator/index.d.ts +1 -0
- package/lib/typescript/atoms/blur-view/blur-view.d.ts +1 -0
- package/lib/typescript/atoms/blur-view/blur-view.ios.d.ts +3 -0
- package/lib/typescript/atoms/blur-view/blur-view.types.d.ts +31 -0
- package/lib/typescript/atoms/blur-view/index.d.ts +2 -0
- package/lib/typescript/atoms/box/a-box.d.ts +1 -1
- package/lib/typescript/atoms/glass-view/glass-view.types.d.ts +12 -5
- package/lib/typescript/atoms/image/image.d.ts +12 -4
- package/lib/typescript/atoms/image/image.types.d.ts +4 -0
- package/lib/typescript/atoms/image/index.d.ts +1 -0
- package/lib/typescript/atoms/index.d.ts +1 -0
- package/lib/typescript/atoms/island/island.types.d.ts +8 -4
- package/lib/typescript/atoms/pressable/pressable.types.d.ts +5 -3
- package/lib/typescript/atoms/rn-text/rn-text.types.d.ts +7 -2
- package/lib/typescript/atoms/skeleton/skeleton.types.d.ts +8 -4
- package/lib/typescript/atoms/text/text.types.d.ts +7 -2
- package/lib/typescript/molecules/scroll-edge-container/scroll-edge-container.types.d.ts +6 -4
- package/lib/typescript/molecules/stepper/stepper.ios.d.ts +5 -0
- package/lib/typescript/molecules/stepper/stepper.types.d.ts +1 -4
- package/package.json +5 -5
- package/src/atoms/activity-indicator/activity-indicator.android.tsx +32 -0
- package/src/atoms/activity-indicator/activity-indicator.ios.tsx +15 -0
- package/src/atoms/activity-indicator/activity-indicator.types.ts +20 -0
- package/src/atoms/activity-indicator/index.ts +1 -0
- package/src/atoms/avatar/avatar.tsx +1 -1
- package/src/atoms/blur-view/blur-view.android.tsx +68 -0
- package/src/atoms/blur-view/blur-view.ios.tsx +37 -0
- package/src/atoms/blur-view/blur-view.types.ts +34 -0
- package/src/atoms/blur-view/index.ts +2 -0
- package/src/atoms/glass-view/glass-view.android.tsx +41 -3
- package/src/atoms/glass-view/glass-view.types.ts +12 -5
- package/src/atoms/image/image.tsx +11 -12
- package/src/atoms/image/image.types.ts +6 -0
- package/src/atoms/image/index.ts +1 -0
- package/src/atoms/index.ts +1 -0
- package/src/atoms/island/island.android.tsx +10 -2
- package/src/atoms/island/island.ios.tsx +4 -2
- package/src/atoms/island/island.types.ts +8 -4
- package/src/atoms/pressable/pressable.tsx +46 -6
- package/src/atoms/pressable/pressable.types.ts +5 -3
- package/src/atoms/rn-text/rn-text.tsx +6 -3
- package/src/atoms/rn-text/rn-text.types.ts +15 -9
- package/src/atoms/skeleton/skeleton.tsx +4 -4
- package/src/atoms/skeleton/skeleton.types.ts +8 -4
- package/src/atoms/text/text.android.tsx +7 -1
- package/src/atoms/text/text.ios.tsx +14 -3
- package/src/atoms/text/text.types.ts +7 -2
- package/src/molecules/collapsible/collapsible.android.tsx +47 -7
- package/src/molecules/navigation-bar/navigation-bar.android.tsx +1 -6
- package/src/molecules/pager/pager.android.tsx +4 -1
- package/src/molecules/scroll-edge-container/scroll-edge-container.android.tsx +103 -10
- package/src/molecules/scroll-edge-container/scroll-edge-container.types.ts +6 -4
- package/src/molecules/stepper/stepper.ios.tsx +37 -1
- package/src/molecules/stepper/stepper.types.ts +1 -4
- package/src/ripple-clip.ts +10 -1
- package/lib/module/atoms/activity-indicator/activity-indicator.js +0 -14
- package/lib/module/atoms/activity-indicator/activity-indicator.js.map +0 -1
- package/src/atoms/activity-indicator/activity-indicator.tsx +0 -9
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useSplitSx } from '@hzblj/kara-sx';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { useAppTheme, withOpacity } from '@hzblj/kara-theme';
|
|
5
|
+
import { useCallback, useMemo } from 'react';
|
|
6
|
+
import { Platform, Pressable as RNPressable, View } from 'react-native';
|
|
6
7
|
import Animated, { useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
|
|
7
8
|
import { haptics } from "../../haptics/index.js";
|
|
9
|
+
import { splitForRipple } from "../../ripple-clip.js";
|
|
8
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
11
|
const SPRING = {
|
|
10
12
|
damping: 20,
|
|
@@ -22,28 +24,58 @@ export const Pressable = ({
|
|
|
22
24
|
const [resolved, rest] = useSplitSx(props);
|
|
23
25
|
const scale = useSharedValue(1);
|
|
24
26
|
const feedback = haptic === true ? 'light' : haptic || undefined;
|
|
27
|
+
const theme = useAppTheme();
|
|
28
|
+
const isAndroid = Platform.OS === 'android';
|
|
25
29
|
const rStyle = useAnimatedStyle(() => ({
|
|
26
30
|
transform: [{
|
|
27
31
|
scale: scale.value
|
|
28
32
|
}]
|
|
29
33
|
}), []);
|
|
30
34
|
|
|
35
|
+
// Android's press is Material's: a ripple over the content — the pressed state layer, `onSurface` at 10 % — clipped to
|
|
36
|
+
// the shape by an outer view (`splitForRipple`), and nothing moves. iOS springs down.
|
|
37
|
+
const ripple = useMemo(() => isAndroid ? {
|
|
38
|
+
color: withOpacity(String(theme.color('content.primary')), 'o10'),
|
|
39
|
+
foreground: true
|
|
40
|
+
} : undefined, [isAndroid, theme]);
|
|
41
|
+
const androidStyle = useMemo(() => isAndroid ? splitForRipple(resolved) : undefined, [isAndroid, resolved]);
|
|
42
|
+
|
|
31
43
|
// The finger is down: the Taptic Engine has until the release to wake, so the haptic lands with the press.
|
|
32
44
|
const onPressIn = useCallback(() => {
|
|
33
|
-
|
|
45
|
+
if (!isAndroid) {
|
|
46
|
+
scale.value = withSpring(0.96, SPRING);
|
|
47
|
+
}
|
|
34
48
|
if (feedback) {
|
|
35
49
|
haptics.prepare(feedback);
|
|
36
50
|
}
|
|
37
|
-
}, [feedback, scale]);
|
|
51
|
+
}, [feedback, isAndroid, scale]);
|
|
38
52
|
const onPressOut = useCallback(() => {
|
|
39
|
-
|
|
40
|
-
|
|
53
|
+
if (!isAndroid) {
|
|
54
|
+
scale.value = withSpring(1, SPRING);
|
|
55
|
+
}
|
|
56
|
+
}, [isAndroid, scale]);
|
|
41
57
|
const onPressWithHaptic = useCallback(() => {
|
|
42
58
|
if (feedback) {
|
|
43
59
|
haptics.play(feedback);
|
|
44
60
|
}
|
|
45
61
|
onPress?.();
|
|
46
62
|
}, [feedback, onPress]);
|
|
63
|
+
if (androidStyle) {
|
|
64
|
+
return /*#__PURE__*/_jsx(View, {
|
|
65
|
+
style: androidStyle.outer,
|
|
66
|
+
children: /*#__PURE__*/_jsx(RNPressable, {
|
|
67
|
+
android_ripple: ripple,
|
|
68
|
+
disabled: disabled,
|
|
69
|
+
hitSlop: 8,
|
|
70
|
+
onPress: onPressWithHaptic,
|
|
71
|
+
onPressIn: onPressIn,
|
|
72
|
+
style: androidStyle.inner,
|
|
73
|
+
testID: testID,
|
|
74
|
+
...rest,
|
|
75
|
+
children: children
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
}
|
|
47
79
|
return /*#__PURE__*/_jsx(AnimatedPressable, {
|
|
48
80
|
disabled: disabled,
|
|
49
81
|
hitSlop: 8,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useSplitSx","useCallback","Pressable","RNPressable","Animated","useAnimatedStyle","useSharedValue","withSpring","haptics","jsx","_jsx","SPRING","damping","stiffness","AnimatedPressable","createAnimatedComponent","children","disabled","haptic","onPress","testID","props","resolved","rest","scale","feedback","undefined","rStyle","transform","value","onPressIn","prepare","onPressOut","onPressWithHaptic","play","hitSlop","
|
|
1
|
+
{"version":3,"names":["useSplitSx","useAppTheme","withOpacity","useCallback","useMemo","Platform","Pressable","RNPressable","View","Animated","useAnimatedStyle","useSharedValue","withSpring","haptics","splitForRipple","jsx","_jsx","SPRING","damping","stiffness","AnimatedPressable","createAnimatedComponent","children","disabled","haptic","onPress","testID","props","resolved","rest","scale","feedback","undefined","theme","isAndroid","OS","rStyle","transform","value","ripple","color","String","foreground","androidStyle","onPressIn","prepare","onPressOut","onPressWithHaptic","play","style","outer","android_ripple","hitSlop","inner"],"sourceRoot":"../../../../src","sources":["atoms/pressable/pressable.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { useSplitSx } from '@hzblj/kara-sx';
|
|
3
4
|
import { MAX_FONT_SCALE, useAppTheme } from '@hzblj/kara-theme';
|
|
4
5
|
import { Text as RNText, useWindowDimensions } from 'react-native';
|
|
5
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -10,6 +11,8 @@ export const RnText = ({
|
|
|
10
11
|
...props
|
|
11
12
|
}) => {
|
|
12
13
|
const theme = useAppTheme();
|
|
14
|
+
// A view style, which a text accepts whole — only React Native's types disagree, on `userSelect`'s width.
|
|
15
|
+
const [sx, rest] = useSplitSx(props);
|
|
13
16
|
const {
|
|
14
17
|
fontScale
|
|
15
18
|
} = useWindowDimensions();
|
|
@@ -26,12 +29,12 @@ export const RnText = ({
|
|
|
26
29
|
const lineHeight = style.lineHeight * Math.min(fontScale, MAX_FONT_SCALE);
|
|
27
30
|
return /*#__PURE__*/_jsx(RNText, {
|
|
28
31
|
maxFontSizeMultiplier: MAX_FONT_SCALE,
|
|
29
|
-
style: [style, {
|
|
32
|
+
style: [style, sx, {
|
|
30
33
|
color: theme.color(color),
|
|
31
34
|
lineHeight,
|
|
32
35
|
textAlign: align
|
|
33
36
|
}],
|
|
34
|
-
...
|
|
37
|
+
...rest
|
|
35
38
|
});
|
|
36
39
|
};
|
|
37
40
|
//# sourceMappingURL=rn-text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MAX_FONT_SCALE","useAppTheme","Text","RNText","useWindowDimensions","jsx","_jsx","RnText","align","color","variant","props","theme","fontScale","style","typography","lineHeight","Math","min","maxFontSizeMultiplier","textAlign"],"sourceRoot":"../../../../src","sources":["atoms/rn-text/rn-text.tsx"],"mappings":";;AAAA,SAAQA,cAAc,EAAEC,WAAW,QAAO,mBAAmB;AAC7D,SAAQC,IAAI,IAAIC,MAAM,
|
|
1
|
+
{"version":3,"names":["useSplitSx","MAX_FONT_SCALE","useAppTheme","Text","RNText","useWindowDimensions","jsx","_jsx","RnText","align","color","variant","props","theme","sx","rest","fontScale","style","typography","lineHeight","Math","min","maxFontSizeMultiplier","textAlign"],"sourceRoot":"../../../../src","sources":["atoms/rn-text/rn-text.tsx"],"mappings":";;AAAA,SAAQA,UAAU,QAAO,gBAAgB;AACzC,SAAQC,cAAc,EAAEC,WAAW,QAAO,mBAAmB;AAC7D,SAAQC,IAAI,IAAIC,MAAM,EAAkBC,mBAAmB,QAAO,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAIhF,OAAO,MAAMC,MAAuB,GAAGA,CAAC;EACtCC,KAAK;EACLC,KAAK,GAAG,iBAAiB;EACzBC,OAAO,GAAG,MAAM;EAChB,GAAGC;AACQ,CAAC,KAAK;EACjB,MAAMC,KAAK,GAAGX,WAAW,CAAC,CAAC;EAC3B;EACA,MAAM,CAACY,EAAE,EAAEC,IAAI,CAAC,GAAGf,UAAU,CAACY,KAAK,CAAyC;EAC5E,MAAM;IAACI;EAAS,CAAC,GAAGX,mBAAmB,CAAC,CAAC;EACzC,MAAMY,KAAK,GAAGJ,KAAK,CAACK,UAAU,CAACP,OAAO,CAAC;;EAEvC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMQ,UAAU,GAAGF,KAAK,CAACE,UAAU,GAAGC,IAAI,CAACC,GAAG,CAACL,SAAS,EAAEf,cAAc,CAAC;EAEzE,oBACEM,IAAA,CAACH,MAAM;IACLkB,qBAAqB,EAAErB,cAAe;IACtCgB,KAAK,EAAE,CAACA,KAAK,EAAEH,EAAE,EAAE;MAACJ,KAAK,EAAEG,KAAK,CAACH,KAAK,CAACA,KAAK,CAAC;MAAES,UAAU;MAAEI,SAAS,EAAEd;IAAK,CAAC,CAAE;IAAA,GAC1EM;EAAI,CACT,CAAC;AAEN,CAAC","ignoreList":[]}
|
|
@@ -7,9 +7,9 @@ import { ABox } from "../box/index.js";
|
|
|
7
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
8
|
export const Skeleton = ({
|
|
9
9
|
borderRadius = 'small',
|
|
10
|
-
|
|
10
|
+
h,
|
|
11
11
|
testID,
|
|
12
|
-
|
|
12
|
+
w
|
|
13
13
|
}) => {
|
|
14
14
|
const pulse = useSharedValue(opacity.o40);
|
|
15
15
|
useEffect(() => {
|
|
@@ -23,11 +23,11 @@ export const Skeleton = ({
|
|
|
23
23
|
return /*#__PURE__*/_jsx(ABox, {
|
|
24
24
|
bg: "fill.quaternary",
|
|
25
25
|
borderRadius: borderRadius,
|
|
26
|
-
h:
|
|
26
|
+
h: h,
|
|
27
27
|
style: rStyle,
|
|
28
28
|
testID: testID,
|
|
29
|
-
w:
|
|
30
|
-
wide:
|
|
29
|
+
w: w,
|
|
30
|
+
wide: w === undefined
|
|
31
31
|
});
|
|
32
32
|
};
|
|
33
33
|
//# sourceMappingURL=skeleton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["duration","opacity","useEffect","useAnimatedStyle","useSharedValue","withRepeat","withTiming","ABox","jsx","_jsx","Skeleton","borderRadius","
|
|
1
|
+
{"version":3,"names":["duration","opacity","useEffect","useAnimatedStyle","useSharedValue","withRepeat","withTiming","ABox","jsx","_jsx","Skeleton","borderRadius","h","testID","w","pulse","o40","value","o100","d800","rStyle","bg","style","wide","undefined"],"sourceRoot":"../../../../src","sources":["atoms/skeleton/skeleton.tsx"],"mappings":";;AAAA,SAAQA,QAAQ,EAAEC,OAAO,QAAO,mBAAmB;AACnD,SAAQC,SAAS,QAAO,OAAO;AAC/B,SAAQC,gBAAgB,EAAEC,cAAc,EAAEC,UAAU,EAAEC,UAAU,QAAO,yBAAyB;AAEhG,SAAQC,IAAI,QAAO,iBAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG3B,OAAO,MAAMC,QAA2B,GAAGA,CAAC;EAACC,YAAY,GAAG,OAAO;EAAEC,CAAC;EAAEC,MAAM;EAAEC;AAAgB,CAAC,KAAK;EACpG,MAAMC,KAAK,GAAGX,cAAc,CAASH,OAAO,CAACe,GAAG,CAAC;EAEjDd,SAAS,CAAC,MAAM;IACda,KAAK,CAACE,KAAK,GAAGZ,UAAU,CAACC,UAAU,CAACL,OAAO,CAACiB,IAAI,EAAE;MAAClB,QAAQ,EAAEA,QAAQ,CAACmB;IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;EACzF,CAAC,EAAE,CAACJ,KAAK,CAAC,CAAC;EAEX,MAAMK,MAAM,GAAGjB,gBAAgB,CAAC,OAAO;IAACF,OAAO,EAAEc,KAAK,CAACE;EAAK,CAAC,CAAC,EAAE,EAAE,CAAC;EAEnE,oBACER,IAAA,CAACF,IAAI;IACHc,EAAE,EAAC,iBAAiB;IACpBV,YAAY,EAAEA,YAAa;IAC3BC,CAAC,EAAEA,CAAE;IACLU,KAAK,EAAEF,MAAO;IACdP,MAAM,EAAEA,MAAO;IACfC,CAAC,EAAEA,CAAE;IACLS,IAAI,EAAET,CAAC,KAAKU;EAAU,CACvB,CAAC;AAEN,CAAC","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { Text as ComposeText } from '@expo/ui/jetpack-compose';
|
|
4
4
|
import { testID as testIdModifier } from '@expo/ui/jetpack-compose/modifiers';
|
|
5
|
+
import { useSxModifiers } from '@hzblj/kara-sx';
|
|
5
6
|
import { useAppTheme } from '@hzblj/kara-theme';
|
|
6
7
|
import { useMemo } from 'react';
|
|
7
8
|
import { useHostGuard } from "../../host-context.js";
|
|
@@ -26,12 +27,14 @@ export const Text = ({
|
|
|
26
27
|
numberOfLines,
|
|
27
28
|
testID,
|
|
28
29
|
transform,
|
|
29
|
-
variant = 'body'
|
|
30
|
+
variant = 'body',
|
|
31
|
+
...sx
|
|
30
32
|
}) => {
|
|
31
33
|
useHostGuard('Text');
|
|
32
34
|
const theme = useAppTheme();
|
|
33
35
|
const style = theme.typography[variant];
|
|
34
|
-
const
|
|
36
|
+
const sxModifiers = useSxModifiers(sx);
|
|
37
|
+
const modifiers = useMemo(() => testID ? [...sxModifiers, testIdModifier(testID)] : sxModifiers, [sxModifiers, testID]);
|
|
35
38
|
return /*#__PURE__*/_jsx(ComposeText, {
|
|
36
39
|
color: theme.colorString(color),
|
|
37
40
|
maxLines: numberOfLines,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Text","ComposeText","testID","testIdModifier","useAppTheme","useMemo","useHostGuard","jsx","_jsx","DECORATION","none","strikethrough","underline","applyTransform","children","transform","toUpperCase","toLowerCase","decorationOf","decoration","undefined","align","color","numberOfLines","variant","theme","style","typography","modifiers","colorString","maxLines","fontFamily","fontSize","fontWeight","lineHeight","textAlign","textDecoration"],"sourceRoot":"../../../../src","sources":["atoms/text/text.android.tsx"],"mappings":";;AAAA,SAAQA,IAAI,IAAIC,WAAW,QAAO,0BAA0B;AAC5D,SAAQC,MAAM,IAAIC,cAAc,QAAO,oCAAoC;AAC3E,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,MAAMC,UAAU,GAAG;EACjBC,IAAI,EAAE,MAAM;EACZC,aAAa,EAAE,aAAa;EAC5BC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,cAAc,GAAGA,CAACC,QAA+B,EAAEC,SAAoC,KAAK;EAChG,IAAI,CAACA,SAAS,IAAI,OAAOD,QAAQ,KAAK,QAAQ,EAAE;IAC9C,OAAOA,QAAQ;EACjB;EAEA,OAAOC,SAAS,KAAK,WAAW,GAAGD,QAAQ,CAACE,WAAW,CAAC,CAAC,GAAGF,QAAQ,CAACG,WAAW,CAAC,CAAC;AACpF,CAAC;AAED,MAAMC,YAAY,GAAIC,UAAsC,IAC1DA,UAAU,KAAKC,SAAS,GAAGA,SAAS,GAAGX,UAAU,CAACU,UAAU,CAAC;AAE/D,OAAO,
|
|
1
|
+
{"version":3,"names":["Text","ComposeText","testID","testIdModifier","useSxModifiers","useAppTheme","useMemo","useHostGuard","jsx","_jsx","DECORATION","none","strikethrough","underline","applyTransform","children","transform","toUpperCase","toLowerCase","decorationOf","decoration","undefined","align","color","numberOfLines","variant","sx","theme","style","typography","sxModifiers","modifiers","colorString","maxLines","fontFamily","fontSize","fontWeight","lineHeight","textAlign","textDecoration"],"sourceRoot":"../../../../src","sources":["atoms/text/text.android.tsx"],"mappings":";;AAAA,SAAQA,IAAI,IAAIC,WAAW,QAAO,0BAA0B;AAC5D,SAAQC,MAAM,IAAIC,cAAc,QAAO,oCAAoC;AAC3E,SAAQC,cAAc,QAAO,gBAAgB;AAC7C,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,MAAMC,UAAU,GAAG;EACjBC,IAAI,EAAE,MAAM;EACZC,aAAa,EAAE,aAAa;EAC5BC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,cAAc,GAAGA,CAACC,QAA+B,EAAEC,SAAoC,KAAK;EAChG,IAAI,CAACA,SAAS,IAAI,OAAOD,QAAQ,KAAK,QAAQ,EAAE;IAC9C,OAAOA,QAAQ;EACjB;EAEA,OAAOC,SAAS,KAAK,WAAW,GAAGD,QAAQ,CAACE,WAAW,CAAC,CAAC,GAAGF,QAAQ,CAACG,WAAW,CAAC,CAAC;AACpF,CAAC;AAED,MAAMC,YAAY,GAAIC,UAAsC,IAC1DA,UAAU,KAAKC,SAAS,GAAGA,SAAS,GAAGX,UAAU,CAACU,UAAU,CAAC;AAE/D,OAAO,MAAMpB,IAAmB,GAAGA,CAAC;EAClCsB,KAAK;EACLP,QAAQ;EACRQ,KAAK,GAAG,iBAAiB;EACzBH,UAAU;EACVI,aAAa;EACbtB,MAAM;EACNc,SAAS;EACTS,OAAO,GAAG,MAAM;EAChB,GAAGC;AACM,CAAC,KAAK;EACfnB,YAAY,CAAC,MAAM,CAAC;EACpB,MAAMoB,KAAK,GAAGtB,WAAW,CAAC,CAAC;EAC3B,MAAMuB,KAAK,GAAGD,KAAK,CAACE,UAAU,CAACJ,OAAO,CAAC;EACvC,MAAMK,WAAW,GAAG1B,cAAc,CAACsB,EAAE,CAAC;EACtC,MAAMK,SAAS,GAAGzB,OAAO,CACvB,MAAOJ,MAAM,GAAG,CAAC,GAAG4B,WAAW,EAAE3B,cAAc,CAACD,MAAM,CAAC,CAAC,GAAG4B,WAAY,EACvE,CAACA,WAAW,EAAE5B,MAAM,CACtB,CAAC;EAED,oBACEO,IAAA,CAACR,WAAW;IACVsB,KAAK,EAAEI,KAAK,CAACK,WAAW,CAACT,KAAK,CAAE;IAChCU,QAAQ,EAAET,aAAc;IACxBO,SAAS,EAAEA,SAAU;IACrBH,KAAK,EAAE;MACLM,UAAU,EAAEN,KAAK,CAACM,UAAU;MAC5BC,QAAQ,EAAEP,KAAK,CAACO,QAAQ;MACxBC,UAAU,EAAER,KAAK,CAACQ,UAAU;MAC5BC,UAAU,EAAET,KAAK,CAACS,UAAU;MAC5BC,SAAS,EAAEhB,KAAK;MAChBiB,cAAc,EAAEpB,YAAY,CAACC,UAAU;IACzC,CAAE;IAAAL,QAAA,EAEDD,cAAc,CAACC,QAAQ,EAAEC,SAAS;EAAC,CACzB,CAAC;AAElB,CAAC","ignoreList":[]}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { Text as SwiftUIText } from '@expo/ui/swift-ui';
|
|
4
4
|
import { foregroundStyle, lineLimit, lineSpacing, multilineTextAlignment, strikethrough, textCase, underline } from '@expo/ui/swift-ui/modifiers';
|
|
5
5
|
import { scaledFont } from '@hzblj/kara-native/swift-ui';
|
|
6
|
+
import { useSxModifiers } from '@hzblj/kara-sx';
|
|
6
7
|
import { useAppTheme } from '@hzblj/kara-theme';
|
|
7
8
|
import { useMemo } from 'react';
|
|
8
9
|
import { useHostGuard } from "../../host-context.js";
|
|
@@ -12,6 +13,13 @@ const ALIGNMENT = {
|
|
|
12
13
|
left: 'leading',
|
|
13
14
|
right: 'trailing'
|
|
14
15
|
};
|
|
16
|
+
|
|
17
|
+
/** Where a frame larger than the text — `wide`, `w`, `h` — puts it: on the side its lines align to, centred vertically. */
|
|
18
|
+
const FRAME_ALIGNMENT = {
|
|
19
|
+
center: 'center',
|
|
20
|
+
left: 'leading',
|
|
21
|
+
right: 'trailing'
|
|
22
|
+
};
|
|
15
23
|
export const Text = ({
|
|
16
24
|
align,
|
|
17
25
|
children,
|
|
@@ -20,11 +28,14 @@ export const Text = ({
|
|
|
20
28
|
numberOfLines,
|
|
21
29
|
testID,
|
|
22
30
|
transform,
|
|
23
|
-
variant = 'body'
|
|
31
|
+
variant = 'body',
|
|
32
|
+
...sx
|
|
24
33
|
}) => {
|
|
25
34
|
useHostGuard('Text');
|
|
26
35
|
const theme = useAppTheme();
|
|
27
36
|
const style = theme.typography[variant];
|
|
37
|
+
// After the text's own modifiers: the font and colour belong to the glyphs, the padding and frame to the box around.
|
|
38
|
+
const sxModifiers = useSxModifiers(sx, FRAME_ALIGNMENT[align ?? 'left']);
|
|
28
39
|
const modifiers = useMemo(() => {
|
|
29
40
|
const list = [
|
|
30
41
|
// Not `@expo/ui`'s `font()`: for the platform's face it gives either Apple's size or a size that ignores Dynamic
|
|
@@ -56,8 +67,8 @@ export const Text = ({
|
|
|
56
67
|
if (numberOfLines !== undefined) {
|
|
57
68
|
list.push(lineLimit(numberOfLines));
|
|
58
69
|
}
|
|
59
|
-
return list;
|
|
60
|
-
}, [align, color, decoration, numberOfLines, style, theme, transform]);
|
|
70
|
+
return [...list, ...sxModifiers];
|
|
71
|
+
}, [align, color, decoration, numberOfLines, style, sxModifiers, theme, transform]);
|
|
61
72
|
return /*#__PURE__*/_jsx(SwiftUIText, {
|
|
62
73
|
modifiers: modifiers,
|
|
63
74
|
testID: testID,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Text","SwiftUIText","foregroundStyle","lineLimit","lineSpacing","multilineTextAlignment","strikethrough","textCase","underline","scaledFont","useAppTheme","useMemo","useHostGuard","jsx","_jsx","ALIGNMENT","center","left","right","align","children","color","decoration","numberOfLines","testID","transform","variant","theme","style","typography","modifiers","list","family","fontFamily","size","fontSize","textStyle","scalesWith","weight","Math","max","lineHeight","push","isActive","pattern","undefined"],"sourceRoot":"../../../../src","sources":["atoms/text/text.ios.tsx"],"mappings":";;AAAA,SAAQA,IAAI,IAAIC,WAAW,QAAO,mBAAmB;AACrD,SACEC,eAAe,EACfC,SAAS,EACTC,WAAW,EAEXC,sBAAsB,EACtBC,aAAa,EACbC,QAAQ,EACRC,SAAS,QACJ,6BAA6B;AACpC,SAAQC,UAAU,QAAO,6BAA6B;AACtD,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,OAAO,QAAO,OAAO;AAE7B,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG/C,MAAMC,SAAS,GAAG;EAChBC,MAAM,EAAE,QAAQ;EAChBC,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE;AACT,CAAU;
|
|
1
|
+
{"version":3,"names":["Text","SwiftUIText","foregroundStyle","lineLimit","lineSpacing","multilineTextAlignment","strikethrough","textCase","underline","scaledFont","useSxModifiers","useAppTheme","useMemo","useHostGuard","jsx","_jsx","ALIGNMENT","center","left","right","FRAME_ALIGNMENT","align","children","color","decoration","numberOfLines","testID","transform","variant","sx","theme","style","typography","sxModifiers","modifiers","list","family","fontFamily","size","fontSize","textStyle","scalesWith","weight","Math","max","lineHeight","push","isActive","pattern","undefined"],"sourceRoot":"../../../../src","sources":["atoms/text/text.ios.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { AnimatedVisibility, Column, Text as ComposeText, Row } from '@expo/ui/jetpack-compose';
|
|
4
|
-
import { clickable } from '@expo/ui/jetpack-compose/modifiers';
|
|
5
|
-
import { useAppTheme } from '@hzblj/kara-theme';
|
|
3
|
+
import { AnimatedVisibility, Box, Column, Text as ComposeText, EnterTransition, ExitTransition, Row } from '@expo/ui/jetpack-compose';
|
|
4
|
+
import { animated, clickable, defaultMinSize, fillMaxWidth, graphicsLayer, tween } from '@expo/ui/jetpack-compose/modifiers';
|
|
5
|
+
import { duration, useAppTheme } from '@hzblj/kara-theme';
|
|
6
6
|
import { useMemo } from 'react';
|
|
7
7
|
import { Glyph } from "../../glyph/index.js";
|
|
8
8
|
import { useHostGuard } from "../../host-context.js";
|
|
9
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
/** Material's standard easing, at the length a disclosure takes. */
|
|
11
|
+
const TURN = tween({
|
|
12
|
+
durationMillis: duration.d200,
|
|
13
|
+
easing: 'fastOutSlowIn'
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
/** Down from the row, fading in — Compose's default grows from a corner, sideways as well as down. */
|
|
17
|
+
const ENTER = EnterTransition.expandVertically().plus(EnterTransition.fadeIn());
|
|
18
|
+
const EXIT = ExitTransition.shrinkVertically().plus(ExitTransition.fadeOut());
|
|
19
|
+
const WIDE = [fillMaxWidth()];
|
|
20
|
+
|
|
21
|
+
/** Material's least touch target. */
|
|
22
|
+
const ROW_HEIGHT = 48;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A pressable row and an animated reveal: the content expands down from the row, and the chevron turns a quarter
|
|
26
|
+
* toward it, as a Material disclosure does — it used to jump between two glyphs. The row spans its parent, the chevron
|
|
27
|
+
* at the far end, and is never shorter than a touch target.
|
|
28
|
+
*/
|
|
10
29
|
export const Collapsible = ({
|
|
11
30
|
children,
|
|
12
31
|
expanded,
|
|
@@ -15,8 +34,14 @@ export const Collapsible = ({
|
|
|
15
34
|
}) => {
|
|
16
35
|
useHostGuard('Collapsible');
|
|
17
36
|
const theme = useAppTheme();
|
|
18
|
-
const modifiers = useMemo(() => [
|
|
37
|
+
const modifiers = useMemo(() => [fillMaxWidth(), defaultMinSize({
|
|
38
|
+
minHeight: ROW_HEIGHT
|
|
39
|
+
}), clickable(() => onExpandedChange(!expanded))], [expanded, onExpandedChange]);
|
|
40
|
+
const turn = useMemo(() => [graphicsLayer({
|
|
41
|
+
rotationZ: animated(expanded ? 90 : 0, TURN)
|
|
42
|
+
})], [expanded]);
|
|
19
43
|
return /*#__PURE__*/_jsxs(Column, {
|
|
44
|
+
modifiers: WIDE,
|
|
20
45
|
children: [/*#__PURE__*/_jsxs(Row, {
|
|
21
46
|
horizontalArrangement: "spaceBetween",
|
|
22
47
|
modifiers: modifiers,
|
|
@@ -25,11 +50,16 @@ export const Collapsible = ({
|
|
|
25
50
|
color: theme.colorString('content.primary'),
|
|
26
51
|
style: theme.typography.body,
|
|
27
52
|
children: label
|
|
28
|
-
}), /*#__PURE__*/_jsx(
|
|
29
|
-
|
|
30
|
-
|
|
53
|
+
}), /*#__PURE__*/_jsx(Box, {
|
|
54
|
+
modifiers: turn,
|
|
55
|
+
children: /*#__PURE__*/_jsx(Glyph, {
|
|
56
|
+
name: "chevronRight",
|
|
57
|
+
size: "s20"
|
|
58
|
+
})
|
|
31
59
|
})]
|
|
32
60
|
}), /*#__PURE__*/_jsx(AnimatedVisibility, {
|
|
61
|
+
enterTransition: ENTER,
|
|
62
|
+
exitTransition: EXIT,
|
|
33
63
|
visible: expanded,
|
|
34
64
|
children: children
|
|
35
65
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AnimatedVisibility","Column","Text","ComposeText","Row","clickable","useAppTheme","useMemo","Glyph","useHostGuard","jsx","_jsx","jsxs","_jsxs","Collapsible","children","expanded","label","onExpandedChange","theme","modifiers","horizontalArrangement","verticalAlignment","color","colorString","style","typography","body","name","size","visible"],"sourceRoot":"../../../../src","sources":["molecules/collapsible/collapsible.android.tsx"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"names":["AnimatedVisibility","Box","Column","Text","ComposeText","EnterTransition","ExitTransition","Row","animated","clickable","defaultMinSize","fillMaxWidth","graphicsLayer","tween","duration","useAppTheme","useMemo","Glyph","useHostGuard","jsx","_jsx","jsxs","_jsxs","TURN","durationMillis","d200","easing","ENTER","expandVertically","plus","fadeIn","EXIT","shrinkVertically","fadeOut","WIDE","ROW_HEIGHT","Collapsible","children","expanded","label","onExpandedChange","theme","modifiers","minHeight","turn","rotationZ","horizontalArrangement","verticalAlignment","color","colorString","style","typography","body","name","size","enterTransition","exitTransition","visible"],"sourceRoot":"../../../../src","sources":["molecules/collapsible/collapsible.android.tsx"],"mappings":";;AAAA,SACEA,kBAAkB,EAClBC,GAAG,EACHC,MAAM,EACNC,IAAI,IAAIC,WAAW,EACnBC,eAAe,EACfC,cAAc,EACdC,GAAG,QACE,0BAA0B;AACjC,SACEC,QAAQ,EACRC,SAAS,EACTC,cAAc,EACdC,YAAY,EACZC,aAAa,EACbC,KAAK,QACA,oCAAoC;AAC3C,SAAQC,QAAQ,EAAEC,WAAW,QAAO,mBAAmB;AACvD,SAAQC,OAAO,QAAO,OAAO;AAC7B,SAAQC,KAAK,QAAO,sBAAa;AACjC,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C;AACA,MAAMC,IAAI,GAAGV,KAAK,CAAC;EAACW,cAAc,EAAEV,QAAQ,CAACW,IAAI;EAAEC,MAAM,EAAE;AAAe,CAAC,CAAC;;AAE5E;AACA,MAAMC,KAAK,GAAGtB,eAAe,CAACuB,gBAAgB,CAAC,CAAC,CAACC,IAAI,CAACxB,eAAe,CAACyB,MAAM,CAAC,CAAC,CAAC;AAC/E,MAAMC,IAAI,GAAGzB,cAAc,CAAC0B,gBAAgB,CAAC,CAAC,CAACH,IAAI,CAACvB,cAAc,CAAC2B,OAAO,CAAC,CAAC,CAAC;AAE7E,MAAMC,IAAI,GAAG,CAACvB,YAAY,CAAC,CAAC,CAAC;;AAE7B;AACA,MAAMwB,UAAU,GAAG,EAAE;;AAErB;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAiC,GAAGA,CAAC;EAACC,QAAQ;EAAEC,QAAQ;EAAEC,KAAK;EAAEC;AAAkC,CAAC,KAAK;EACpHtB,YAAY,CAAC,aAAa,CAAC;EAC3B,MAAMuB,KAAK,GAAG1B,WAAW,CAAC,CAAC;EAC3B,MAAM2B,SAAS,GAAG1B,OAAO,CACvB,MAAM,CAACL,YAAY,CAAC,CAAC,EAAED,cAAc,CAAC;IAACiC,SAAS,EAAER;EAAU,CAAC,CAAC,EAAE1B,SAAS,CAAC,MAAM+B,gBAAgB,CAAC,CAACF,QAAQ,CAAC,CAAC,CAAC,EAC7G,CAACA,QAAQ,EAAEE,gBAAgB,CAC7B,CAAC;EACD,MAAMI,IAAI,GAAG5B,OAAO,CAAC,MAAM,CAACJ,aAAa,CAAC;IAACiC,SAAS,EAAErC,QAAQ,CAAC8B,QAAQ,GAAG,EAAE,GAAG,CAAC,EAAEf,IAAI;EAAC,CAAC,CAAC,CAAC,EAAE,CAACe,QAAQ,CAAC,CAAC;EAEvG,oBACEhB,KAAA,CAACpB,MAAM;IAACwC,SAAS,EAAER,IAAK;IAAAG,QAAA,gBACtBf,KAAA,CAACf,GAAG;MAACuC,qBAAqB,EAAC,cAAc;MAACJ,SAAS,EAAEA,SAAU;MAACK,iBAAiB,EAAC,QAAQ;MAAAV,QAAA,gBACxFjB,IAAA,CAAChB,WAAW;QAAC4C,KAAK,EAAEP,KAAK,CAACQ,WAAW,CAAC,iBAAiB,CAAE;QAACC,KAAK,EAAET,KAAK,CAACU,UAAU,CAACC,IAAK;QAAAf,QAAA,EACpFE;MAAK,CACK,CAAC,eACdnB,IAAA,CAACnB,GAAG;QAACyC,SAAS,EAAEE,IAAK;QAAAP,QAAA,eACnBjB,IAAA,CAACH,KAAK;UAACoC,IAAI,EAAC,cAAc;UAACC,IAAI,EAAC;QAAK,CAAE;MAAC,CACrC,CAAC;IAAA,CACH,CAAC,eACNlC,IAAA,CAACpB,kBAAkB;MAACuD,eAAe,EAAE5B,KAAM;MAAC6B,cAAc,EAAEzB,IAAK;MAAC0B,OAAO,EAAEnB,QAAS;MAAAD,QAAA,EACjFA;IAAQ,CACS,CAAC;EAAA,CACf,CAAC;AAEb,CAAC","ignoreList":[]}
|
|
@@ -4,17 +4,10 @@ import { iconResourceName } from '@hzblj/kara-native';
|
|
|
4
4
|
import { TopAppBar } from '@hzblj/kara-native/jetpack-compose';
|
|
5
5
|
import { useAppTheme } from '@hzblj/kara-theme';
|
|
6
6
|
import { useMemo } from 'react';
|
|
7
|
-
import { StyleSheet } from 'react-native';
|
|
8
7
|
import { Island } from "../../atoms/island/index.js";
|
|
9
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
9
|
/** Material's small top app bar. */
|
|
11
10
|
const BAR_HEIGHT = 64;
|
|
12
|
-
const styles = StyleSheet.create({
|
|
13
|
-
bar: {
|
|
14
|
-
height: BAR_HEIGHT,
|
|
15
|
-
width: '100%'
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
11
|
const DEFAULT_LABELS = {
|
|
19
12
|
back: 'Back',
|
|
20
13
|
close: 'Close'
|
|
@@ -52,9 +45,10 @@ export const NavigationBar = ({
|
|
|
52
45
|
const nativeLeadingItems = useMemo(() => leadingItems?.map(toNativeItem), [leadingItems]);
|
|
53
46
|
const nativeTrailingItems = useMemo(() => trailingItems?.map(toNativeItem), [trailingItems]);
|
|
54
47
|
return /*#__PURE__*/_jsx(Island, {
|
|
48
|
+
h: BAR_HEIGHT,
|
|
55
49
|
matchContents: false,
|
|
56
|
-
style: styles.bar,
|
|
57
50
|
testID: testID,
|
|
51
|
+
w: "100%",
|
|
58
52
|
children: /*#__PURE__*/_jsx(TopAppBar, {
|
|
59
53
|
fontFamily: font.fontFamily,
|
|
60
54
|
fontSize: font.fontSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["iconResourceName","TopAppBar","useAppTheme","useMemo","
|
|
1
|
+
{"version":3,"names":["iconResourceName","TopAppBar","useAppTheme","useMemo","Island","jsx","_jsx","BAR_HEIGHT","DEFAULT_LABELS","back","close","toNativeItem","onPress","testID","item","type","iconName","icon","label","NavigationBar","inverted","leadingItems","title","titleAlignment","titleVisible","trailingItems","theme","font","typography","headline","color","nativeLeadingItems","map","nativeTrailingItems","h","matchContents","w","children","fontFamily","fontSize","itemColor","titleColor"],"sourceRoot":"../../../../src","sources":["molecules/navigation-bar/navigation-bar.android.tsx"],"mappings":";;AAAA,SAAQA,gBAAgB,QAAO,oBAAoB;AACnD,SAAQC,SAAS,QAA2B,oCAAoC;AAChF,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,OAAO,QAAO,OAAO;AAC7B,SAAQC,MAAM,QAAO,6BAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGzC;AACA,MAAMC,UAAU,GAAG,EAAE;AAErB,MAAMC,cAAc,GAAG;EAACC,IAAI,EAAE,MAAM;EAAEC,KAAK,EAAE;AAAO,CAAU;AAE9D,MAAMC,YAAY,GAAGA,CAAC;EAACC,OAAO;EAAEC,MAAM;EAAE,GAAGC;AAAuB,CAAC,KACjEA,IAAI,CAACC,IAAI,KAAK,MAAM,GAChB;EAACC,QAAQ,EAAEhB,gBAAgB,CAACc,IAAI,CAACG,IAAI,CAAC;EAAEC,KAAK,EAAEJ,IAAI,CAACI,KAAK;EAAEN,OAAO;EAAEC,MAAM;EAAEE,IAAI,EAAE;AAAM,CAAC,GACzF;EAACG,KAAK,EAAEJ,IAAI,CAACI,KAAK,IAAIV,cAAc,CAACM,IAAI,CAACC,IAAI,CAAC;EAAEH,OAAO;EAAEC,MAAM;EAAEE,IAAI,EAAED,IAAI,CAACC;AAAI,CAAC;;AAExF;AACA,OAAO,MAAMI,aAAqC,GAAGA,CAAC;EACpDC,QAAQ,GAAG,KAAK;EAChBC,YAAY;EACZR,MAAM;EACNS,KAAK;EACLC,cAAc,GAAG,QAAQ;EACzBC,YAAY,GAAG,IAAI;EACnBC;AACkB,CAAC,KAAK;EACxB,MAAMC,KAAK,GAAGxB,WAAW,CAAC,CAAC;EAC3B,MAAMyB,IAAI,GAAGD,KAAK,CAACE,UAAU,CAACC,QAAQ;EACtC,MAAMC,KAAK,GAAGJ,KAAK,CAACI,KAAK,CAACV,QAAQ,GAAG,eAAe,GAAG,iBAAiB,CAAC;EAEzE,MAAMW,kBAAkB,GAAG5B,OAAO,CAAC,MAAMkB,YAAY,EAAEW,GAAG,CAACrB,YAAY,CAAC,EAAE,CAACU,YAAY,CAAC,CAAC;EACzF,MAAMY,mBAAmB,GAAG9B,OAAO,CAAC,MAAMsB,aAAa,EAAEO,GAAG,CAACrB,YAAY,CAAC,EAAE,CAACc,aAAa,CAAC,CAAC;EAE5F,oBACEnB,IAAA,CAACF,MAAM;IAAC8B,CAAC,EAAE3B,UAAW;IAAC4B,aAAa,EAAE,KAAM;IAACtB,MAAM,EAAEA,MAAO;IAACuB,CAAC,EAAC,MAAM;IAAAC,QAAA,eACnE/B,IAAA,CAACL,SAAS;MACRqC,UAAU,EAAEX,IAAI,CAACW,UAAW;MAC5BC,QAAQ,EAAEZ,IAAI,CAACY,QAAS;MACxBC,SAAS,EAAEV,KAAM;MACjBT,YAAY,EAAEU,kBAAmB;MACjCT,KAAK,EAAEA,KAAM;MACbC,cAAc,EAAEA,cAAe;MAC/BkB,UAAU,EAAEX,KAAM;MAClBN,YAAY,EAAEA,YAAa;MAC3BC,aAAa,EAAEQ;IAAoB,CACpC;EAAC,CACI,CAAC;AAEb,CAAC","ignoreList":[]}
|
|
@@ -5,28 +5,29 @@ import { fillMaxSize, testID as testIdModifier, weight } from '@expo/ui/jetpack-
|
|
|
5
5
|
import { spacing } from '@hzblj/kara-theme';
|
|
6
6
|
import { Children, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
7
7
|
import { HStack } from "../../atoms/h-stack/index.js";
|
|
8
|
+
import { Spacer } from "../../atoms/spacer/index.js";
|
|
8
9
|
import { VStack } from "../../atoms/v-stack/index.js";
|
|
9
10
|
import { useHostGuard } from "../../host-context.js";
|
|
10
11
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
12
|
const DOT_SIZE = 6;
|
|
12
13
|
|
|
13
|
-
/** Compose ships no page indicator, so the dots are composed out of atoms. */
|
|
14
|
+
/** Compose ships no page indicator, so the dots are composed out of atoms — centred between two spacers. */
|
|
14
15
|
const PagerDots = ({
|
|
15
16
|
count,
|
|
16
17
|
current
|
|
17
|
-
}) => /*#__PURE__*/
|
|
18
|
+
}) => /*#__PURE__*/_jsxs(HStack, {
|
|
18
19
|
align: "center",
|
|
19
20
|
py: "s12",
|
|
20
21
|
spacing: "s6",
|
|
21
22
|
wide: true,
|
|
22
|
-
children: Array.from({
|
|
23
|
+
children: [/*#__PURE__*/_jsx(Spacer, {}), Array.from({
|
|
23
24
|
length: count
|
|
24
25
|
}, (_, index) => /*#__PURE__*/_jsx(VStack, {
|
|
25
26
|
bg: index === current ? 'content.primary' : 'fill.tertiary',
|
|
26
27
|
borderRadius: "full",
|
|
27
28
|
h: DOT_SIZE,
|
|
28
29
|
w: DOT_SIZE
|
|
29
|
-
}, index))
|
|
30
|
+
}, index)), /*#__PURE__*/_jsx(Spacer, {})]
|
|
30
31
|
});
|
|
31
32
|
export const Pager = ({
|
|
32
33
|
children,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["HorizontalPager","fillMaxSize","testID","testIdModifier","weight","spacing","Children","useCallback","useEffect","useMemo","useRef","useState","HStack","VStack","useHostGuard","jsx","_jsx","jsxs","_jsxs","DOT_SIZE","PagerDots","count","current","align","py","wide","children","Array","from","length","_","index","bg","borderRadius","h","w","Pager","indicators","onPageChange","page","pageSpacing","scrollEnabled","pagerRef","settledPage","currentPage","setCurrentPage","undefined","animateScrollToPage","onSettledPageChange","next","modifiers","pager","initialPage","onCurrentPageChange","ref","userScrollEnabled","tall"],"sourceRoot":"../../../../src","sources":["molecules/pager/pager.android.tsx"],"mappings":";;AAAA,SAAQA,eAAe,QAAmC,0BAA0B;AACpF,SAAQC,WAAW,EAAuBC,MAAM,IAAIC,cAAc,EAAEC,MAAM,QAAO,oCAAoC;AACrH,SAAQC,OAAO,QAAO,mBAAmB;AACzC,SAAQC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAO,OAAO;AAEjF,SAAQC,MAAM,QAAO,8BAAqB;AAC1C,SAAQC,MAAM,QAAO,8BAAqB;AAC1C,SAAQC,YAAY,QAAO,uBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG/C,MAAMC,QAAQ,GAAG,CAAC;;AAElB;AACA,MAAMC,SAAS,GAAGA,CAAC;EAACC,KAAK;EAAEC;AAAyC,CAAC,
|
|
1
|
+
{"version":3,"names":["HorizontalPager","fillMaxSize","testID","testIdModifier","weight","spacing","Children","useCallback","useEffect","useMemo","useRef","useState","HStack","Spacer","VStack","useHostGuard","jsx","_jsx","jsxs","_jsxs","DOT_SIZE","PagerDots","count","current","align","py","wide","children","Array","from","length","_","index","bg","borderRadius","h","w","Pager","indicators","onPageChange","page","pageSpacing","scrollEnabled","pagerRef","settledPage","currentPage","setCurrentPage","undefined","animateScrollToPage","onSettledPageChange","next","modifiers","pager","initialPage","onCurrentPageChange","ref","userScrollEnabled","tall"],"sourceRoot":"../../../../src","sources":["molecules/pager/pager.android.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { duration, opacity } from '@hzblj/kara-theme';
|
|
4
|
+
import { cloneElement, useCallback, useRef } from 'react';
|
|
5
|
+
import { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
|
|
6
|
+
import { ABox, Box } from "../../atoms/box/index.js";
|
|
4
7
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
/** Less than a pixel scrolled is not scrolled — a fling settles a fraction away from the edge. */
|
|
9
|
+
const EDGE_SLOP = 0.5;
|
|
10
|
+
const FILL = {
|
|
11
|
+
duration: duration.d200
|
|
12
|
+
};
|
|
13
|
+
/** A bar, and behind it the container colour it fills with — faded in and out, not switched. */
|
|
14
|
+
const EdgeBar = ({
|
|
15
|
+
children,
|
|
16
|
+
filled
|
|
17
|
+
}) => {
|
|
18
|
+
const fill = useAnimatedStyle(() => ({
|
|
19
|
+
opacity: filled.value
|
|
20
|
+
}), []);
|
|
21
|
+
if (!children) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return /*#__PURE__*/_jsxs(Box, {
|
|
25
|
+
children: [/*#__PURE__*/_jsx(ABox, {
|
|
26
|
+
bg: "surface.secondary",
|
|
27
|
+
bottom: 0,
|
|
28
|
+
left: 0,
|
|
29
|
+
pointerEvents: "none",
|
|
30
|
+
position: "absolute",
|
|
31
|
+
right: 0,
|
|
32
|
+
style: fill,
|
|
33
|
+
top: 0
|
|
34
|
+
}), children]
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
|
|
5
38
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
39
|
+
* Material's take on the scroll edge: a React Native scroll view has no `contentInset` to slide content under a bar on
|
|
40
|
+
* Android, so the bars stack above and below it, and do what a Material top app bar does on scroll — transparent at
|
|
41
|
+
* rest, filled with `surface.secondary` (the scrolled container colour, `surfaceContainer`) once content has scrolled
|
|
42
|
+
* under it. The bottom bar mirrors it: filled while there is more content below. The scroll view keeps its own
|
|
43
|
+
* `onScroll`, `onLayout` and `onContentSizeChange`.
|
|
8
44
|
*/
|
|
9
45
|
export const ScrollEdgeContainer = ({
|
|
10
46
|
automaticInsets: _automaticInsets,
|
|
@@ -14,12 +50,79 @@ export const ScrollEdgeContainer = ({
|
|
|
14
50
|
testID,
|
|
15
51
|
topBar,
|
|
16
52
|
...sx
|
|
17
|
-
}) =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
53
|
+
}) => {
|
|
54
|
+
const topFilled = useSharedValue(opacity.o0);
|
|
55
|
+
const bottomFilled = useSharedValue(opacity.o0);
|
|
56
|
+
const metrics = useRef({
|
|
57
|
+
content: 0,
|
|
58
|
+
offset: 0,
|
|
59
|
+
viewport: 0
|
|
60
|
+
});
|
|
61
|
+
const state = useRef({
|
|
62
|
+
bottom: false,
|
|
63
|
+
top: false
|
|
64
|
+
});
|
|
65
|
+
const {
|
|
66
|
+
flex,
|
|
67
|
+
onContentSizeChange,
|
|
68
|
+
onLayout,
|
|
69
|
+
onScroll,
|
|
70
|
+
scrollEventThrottle
|
|
71
|
+
} = children.props;
|
|
72
|
+
|
|
73
|
+
// Only a change of state animates; a scroll event restating the same one would restart the fade.
|
|
74
|
+
const update = useCallback(() => {
|
|
75
|
+
const {
|
|
76
|
+
content,
|
|
77
|
+
offset,
|
|
78
|
+
viewport
|
|
79
|
+
} = metrics.current;
|
|
80
|
+
const top = offset > EDGE_SLOP;
|
|
81
|
+
const bottom = viewport > 0 && offset + viewport < content - EDGE_SLOP;
|
|
82
|
+
if (top !== state.current.top) {
|
|
83
|
+
state.current.top = top;
|
|
84
|
+
topFilled.value = withTiming(top ? opacity.o100 : opacity.o0, FILL);
|
|
85
|
+
}
|
|
86
|
+
if (bottom !== state.current.bottom) {
|
|
87
|
+
state.current.bottom = bottom;
|
|
88
|
+
bottomFilled.value = withTiming(bottom ? opacity.o100 : opacity.o0, FILL);
|
|
89
|
+
}
|
|
90
|
+
}, [bottomFilled, topFilled]);
|
|
91
|
+
|
|
92
|
+
// `flex` so the scroll view takes the room between the bars — left to its content, it grew to the content's height,
|
|
93
|
+
// ran under the bottom bar and had nothing to scroll.
|
|
94
|
+
const scrollable = /*#__PURE__*/cloneElement(children, {
|
|
95
|
+
flex: flex ?? 1,
|
|
96
|
+
onContentSizeChange: (width, height) => {
|
|
97
|
+
metrics.current.content = height;
|
|
98
|
+
update();
|
|
99
|
+
onContentSizeChange?.(width, height);
|
|
100
|
+
},
|
|
101
|
+
onLayout: event => {
|
|
102
|
+
metrics.current.viewport = event.nativeEvent.layout.height;
|
|
103
|
+
update();
|
|
104
|
+
onLayout?.(event);
|
|
105
|
+
},
|
|
106
|
+
onScroll: event => {
|
|
107
|
+
metrics.current.offset = event.nativeEvent.contentOffset.y;
|
|
108
|
+
update();
|
|
109
|
+
onScroll?.(event);
|
|
110
|
+
},
|
|
111
|
+
scrollEventThrottle: scrollEventThrottle ?? 16
|
|
112
|
+
});
|
|
113
|
+
return /*#__PURE__*/_jsxs(Box, {
|
|
114
|
+
...sx,
|
|
115
|
+
testID: testID,
|
|
116
|
+
children: [/*#__PURE__*/_jsx(EdgeBar, {
|
|
117
|
+
filled: topFilled,
|
|
118
|
+
children: topBar
|
|
119
|
+
}), /*#__PURE__*/_jsx(Box, {
|
|
120
|
+
flex: 1,
|
|
121
|
+
children: scrollable
|
|
122
|
+
}), /*#__PURE__*/_jsx(EdgeBar, {
|
|
123
|
+
filled: bottomFilled,
|
|
124
|
+
children: bottomBar
|
|
125
|
+
})]
|
|
126
|
+
});
|
|
127
|
+
};
|
|
25
128
|
//# sourceMappingURL=scroll-edge-container.android.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Box","jsx","_jsx","jsxs","_jsxs","ScrollEdgeContainer","automaticInsets","_automaticInsets","bottomBar","
|
|
1
|
+
{"version":3,"names":["duration","opacity","cloneElement","useCallback","useRef","useAnimatedStyle","useSharedValue","withTiming","ABox","Box","jsx","_jsx","jsxs","_jsxs","EDGE_SLOP","FILL","d200","EdgeBar","children","filled","fill","value","bg","bottom","left","pointerEvents","position","right","style","top","ScrollEdgeContainer","automaticInsets","_automaticInsets","bottomBar","effect","_effect","testID","topBar","sx","topFilled","o0","bottomFilled","metrics","content","offset","viewport","state","flex","onContentSizeChange","onLayout","onScroll","scrollEventThrottle","props","update","current","o100","scrollable","width","height","event","nativeEvent","layout","contentOffset","y"],"sourceRoot":"../../../../src","sources":["molecules/scroll-edge-container/scroll-edge-container.android.tsx"],"mappings":"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","ignoreList":[]}
|