zkit-ui 2.0.18 → 2.0.20

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.
@@ -95,7 +95,7 @@ const TITLE_MAX_WIDTH = (0, zkit_tools_1.wp)(214);
95
95
  const IOS_SHADOW_OFFSET_Y = (0, zkit_tools_1.wp)(9);
96
96
  const IOS_SHADOW_RADIUS = (0, zkit_tools_1.wp)(22);
97
97
  const CONTENT_ENTER_OFFSET = (0, zkit_tools_1.wp)(3);
98
- const HOST_BACKDROP = 'transparent';
98
+ const HOST_BACKDROP = 'rgba(17, 24, 39, 0.48)';
99
99
  const IS_IOS = react_native_1.Platform.OS === 'ios';
100
100
  const IS_ANDROID = react_native_1.Platform.OS === 'android';
101
101
  const IS_WEB = react_native_1.Platform.OS === 'web';
@@ -625,7 +625,7 @@ function LoadingHost({ item, onExited }) {
625
625
  if (!item)
626
626
  return null;
627
627
  const pointerEvents = item.open ? (item.blocking ? 'auto' : 'none') : 'none';
628
- return ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: pointerEvents, style: styles.host, accessibilityElementsHidden: !item.open, importantForAccessibility: item.open ? 'yes' : 'no-hide-descendants', collapsable: false, children: (0, jsx_runtime_1.jsx)(LoadingCard, { item: item, onExited: onExited }) }));
628
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: pointerEvents, style: [react_native_1.StyleSheet.absoluteFill, styles.host], accessibilityElementsHidden: !item.open, importantForAccessibility: item.open ? 'yes' : 'no-hide-descendants', collapsable: false, children: (0, jsx_runtime_1.jsx)(LoadingCard, { item: item, onExited: onExited }) }));
629
629
  }
630
630
  function resolveColors(item, themeColors) {
631
631
  var _a, _b, _c, _d, _e, _f, _g, _h;
@@ -724,7 +724,7 @@ function LoadingCard({ item, onExited }) {
724
724
  opacity: (0, react_native_reanimated_1.interpolate)(contentProgress.value, [0, 1], [0.72, 1]),
725
725
  transform: [{ translateY: (0, react_native_reanimated_1.interpolate)(contentProgress.value, [0, 1], [CONTENT_ENTER_OFFSET, 0]) }],
726
726
  }));
727
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { pointerEvents: "none", style: [styles.backdrop, { backgroundColor: colors.backdrop }, backdropStyle] }), (0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { pointerEvents: item.open && item.blocking ? 'auto' : 'none', renderToHardwareTextureAndroid: IS_ANDROID && item.open, style: [
727
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { pointerEvents: "none", style: [react_native_1.StyleSheet.absoluteFill, styles.backdrop, { backgroundColor: colors.backdrop }, backdropStyle] }), (0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { pointerEvents: item.open && item.blocking ? 'auto' : 'none', renderToHardwareTextureAndroid: IS_ANDROID && item.open, style: [
728
728
  styles.frame,
729
729
  webShadowStyle,
730
730
  IS_IOS ? { shadowColor: colors.shadow } : undefined,
@@ -779,14 +779,11 @@ function renderDefaultIcon(item, colors) {
779
779
  // ============================================================================
780
780
  const styles = react_native_1.StyleSheet.create({
781
781
  host: {
782
- ...react_native_1.StyleSheet.absoluteFillObject,
783
782
  alignItems: 'center',
784
783
  justifyContent: 'center',
785
784
  zIndex: HOST_Z_INDEX,
786
785
  },
787
- backdrop: {
788
- ...react_native_1.StyleSheet.absoluteFillObject,
789
- },
786
+ backdrop: {},
790
787
  frame: {
791
788
  alignSelf: 'center',
792
789
  borderRadius: HUD_RADIUS,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/index.tsx"],"names":[],"mappings":"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"}
@@ -459,6 +459,11 @@ function SwitchImpl({ checked: checkedProp, defaultChecked = false, onCheckedCha
459
459
  const pressedOpacity = (0, react_native_reanimated_1.interpolate)(pressSv.value, [0, 1], [1, PRESSED_OPACITY]);
460
460
  return { opacity: pressedOpacity };
461
461
  });
462
+ const trackAnimatedStyle = (0, react_native_reanimated_1.useAnimatedStyle)(() => {
463
+ return {
464
+ backgroundColor: (0, react_native_reanimated_1.interpolateColor)(progressSv.value, [0, 1], [visualUncheckedTrackColor, visualCheckedTrackColor]),
465
+ };
466
+ }, [visualCheckedTrackColor, visualUncheckedTrackColor]);
462
467
  const focusRingAnimatedStyle = (0, react_native_reanimated_1.useAnimatedStyle)(() => {
463
468
  const opacity = (0, react_native_reanimated_1.interpolate)(focusSv.value, [0, 1], [0, 1]);
464
469
  const scale = (0, react_native_reanimated_1.interpolate)(focusSv.value, [0, 1], [0.96, 1]);
@@ -467,9 +472,6 @@ function SwitchImpl({ checked: checkedProp, defaultChecked = false, onCheckedCha
467
472
  transform: [{ scale }],
468
473
  };
469
474
  });
470
- const checkedTrackAnimatedStyle = (0, react_native_reanimated_1.useAnimatedStyle)(() => {
471
- return { opacity: progressSv.value };
472
- });
473
475
  const thumbAnimatedStyle = (0, react_native_reanimated_1.useAnimatedStyle)(() => {
474
476
  if (!thumbColorChanges) {
475
477
  return {
@@ -562,20 +564,16 @@ function SwitchImpl({ checked: checkedProp, defaultChecked = false, onCheckedCha
562
564
  borderColor: focusRingColor,
563
565
  },
564
566
  focusRingAnimatedStyle,
565
- ] }), (0, jsx_runtime_1.jsx)(react_native_1.View, { style: [
566
- react_native_1.StyleSheet.absoluteFillObject,
567
- {
568
- borderRadius: trackRadius,
569
- backgroundColor: visualUncheckedTrackColor,
570
- },
571
- trackStyle,
572
567
  ] }), (0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { pointerEvents: "none", style: [
573
- react_native_1.StyleSheet.absoluteFillObject,
568
+ styles.track,
574
569
  {
570
+ width: trackWidth,
571
+ height: trackHeight,
575
572
  borderRadius: trackRadius,
576
- backgroundColor: visualCheckedTrackColor,
573
+ backgroundColor: checked ? visualCheckedTrackColor : visualUncheckedTrackColor,
577
574
  },
578
- checkedTrackAnimatedStyle,
575
+ trackAnimatedStyle,
576
+ trackStyle,
579
577
  ] }), hasStateText ? ((0, jsx_runtime_1.jsxs)(react_native_1.View, { pointerEvents: "none", style: styles.stateTextLayer, children: [(0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { style: [styles.stateTextSlot, checkedTextSlotStyle, checkedTextAnimatedStyle], children: (0, jsx_runtime_1.jsx)(Text_1.Text, { allowFontScaling: false, ellipsizeMode: "clip", numberOfLines: 1, style: [
580
578
  styles.stateText,
581
579
  {
@@ -624,6 +622,8 @@ exports.Switch.displayName = 'Switch';
624
622
  const styles = react_native_1.StyleSheet.create({
625
623
  root: {
626
624
  alignSelf: 'flex-start',
625
+ maxWidth: '100%',
626
+ minWidth: 0,
627
627
  },
628
628
  content: {
629
629
  alignItems: 'center',
@@ -643,6 +643,11 @@ const styles = react_native_1.StyleSheet.create({
643
643
  flexShrink: 0,
644
644
  overflow: 'visible',
645
645
  },
646
+ track: {
647
+ left: 0,
648
+ position: 'absolute',
649
+ top: 0,
650
+ },
646
651
  focusRing: {
647
652
  position: 'absolute',
648
653
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zkit-ui",
3
- "version": "2.0.18",
3
+ "version": "2.0.20",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,6 +8,7 @@
8
8
  - 全局只展示一个 HUD;新请求默认替换旧请求,并向旧请求派发 `replace`
9
9
  - `loading.promise()` 绑定异步任务,成功/失败结果只会更新当前仍活跃的 handle
10
10
  - `loading` 默认 15s 超时自动关闭,`success/error` 默认短暂停留后关闭
11
+ - blocking loading 默认使用全屏蒙层并将 HUD 居中显示;可通过 `colors.backdrop` 自定义蒙层颜色
11
12
  - Android 不使用 `elevation` 或额外阴影层;iOS/Web 阴影跟随同一动画层,退出完成后卸载,避免残影
12
13
  - 默认文案来自 i18n,可通过 `ZKitProvider loading` 或 `LoadingProvider defaults` 覆盖
13
14
 
@@ -240,7 +240,7 @@ const TITLE_MAX_WIDTH = wp(214);
240
240
  const IOS_SHADOW_OFFSET_Y = wp(9);
241
241
  const IOS_SHADOW_RADIUS = wp(22);
242
242
  const CONTENT_ENTER_OFFSET = wp(3);
243
- const HOST_BACKDROP = 'transparent';
243
+ const HOST_BACKDROP = 'rgba(17, 24, 39, 0.48)';
244
244
 
245
245
  const IS_IOS = Platform.OS === 'ios';
246
246
  const IS_ANDROID = Platform.OS === 'android';
@@ -829,7 +829,7 @@ function LoadingHost({ item, onExited }: LoadingHostProps) {
829
829
  return (
830
830
  <View
831
831
  pointerEvents={pointerEvents}
832
- style={styles.host}
832
+ style={[StyleSheet.absoluteFill, styles.host]}
833
833
  accessibilityElementsHidden={!item.open}
834
834
  importantForAccessibility={item.open ? 'yes' : 'no-hide-descendants'}
835
835
  collapsable={false}
@@ -953,7 +953,7 @@ function LoadingCard({ item, onExited }: LoadingCardProps) {
953
953
  <>
954
954
  <Animated.View
955
955
  pointerEvents="none"
956
- style={[styles.backdrop, { backgroundColor: colors.backdrop }, backdropStyle]}
956
+ style={[StyleSheet.absoluteFill, styles.backdrop, { backgroundColor: colors.backdrop }, backdropStyle]}
957
957
  />
958
958
  <Animated.View
959
959
  pointerEvents={item.open && item.blocking ? 'auto' : 'none'}
@@ -1066,14 +1066,11 @@ function renderDefaultIcon(item: LoadingItem, colors: ResolvedColors) {
1066
1066
 
1067
1067
  const styles = StyleSheet.create({
1068
1068
  host: {
1069
- ...StyleSheet.absoluteFillObject,
1070
1069
  alignItems: 'center',
1071
1070
  justifyContent: 'center',
1072
1071
  zIndex: HOST_Z_INDEX,
1073
1072
  },
1074
- backdrop: {
1075
- ...StyleSheet.absoluteFillObject,
1076
- },
1073
+ backdrop: {},
1077
1074
  frame: {
1078
1075
  alignSelf: 'center',
1079
1076
  borderRadius: HUD_RADIUS,
@@ -724,6 +724,16 @@ function SwitchImpl(
724
724
  return { opacity: pressedOpacity };
725
725
  });
726
726
 
727
+ const trackAnimatedStyle = useAnimatedStyle(() => {
728
+ return {
729
+ backgroundColor: interpolateColor(
730
+ progressSv.value,
731
+ [0, 1],
732
+ [visualUncheckedTrackColor, visualCheckedTrackColor]
733
+ ),
734
+ };
735
+ }, [visualCheckedTrackColor, visualUncheckedTrackColor]);
736
+
727
737
  const focusRingAnimatedStyle = useAnimatedStyle(() => {
728
738
  const opacity = interpolate(focusSv.value, [0, 1], [0, 1]);
729
739
  const scale = interpolate(focusSv.value, [0, 1], [0.96, 1]);
@@ -733,10 +743,6 @@ function SwitchImpl(
733
743
  };
734
744
  });
735
745
 
736
- const checkedTrackAnimatedStyle = useAnimatedStyle(() => {
737
- return { opacity: progressSv.value };
738
- });
739
-
740
746
  const thumbAnimatedStyle = useAnimatedStyle(() => {
741
747
  if (!thumbColorChanges) {
742
748
  return {
@@ -895,25 +901,18 @@ function SwitchImpl(
895
901
  focusRingAnimatedStyle,
896
902
  ]}
897
903
  />
898
- <View
899
- style={[
900
- StyleSheet.absoluteFillObject,
901
- {
902
- borderRadius: trackRadius,
903
- backgroundColor: visualUncheckedTrackColor,
904
- },
905
- trackStyle,
906
- ]}
907
- />
908
904
  <Animated.View
909
905
  pointerEvents="none"
910
906
  style={[
911
- StyleSheet.absoluteFillObject,
907
+ styles.track,
912
908
  {
909
+ width: trackWidth,
910
+ height: trackHeight,
913
911
  borderRadius: trackRadius,
914
- backgroundColor: visualCheckedTrackColor,
912
+ backgroundColor: checked ? visualCheckedTrackColor : visualUncheckedTrackColor,
915
913
  },
916
- checkedTrackAnimatedStyle,
914
+ trackAnimatedStyle,
915
+ trackStyle,
917
916
  ]}
918
917
  />
919
918
 
@@ -1046,6 +1045,8 @@ Switch.displayName = 'Switch';
1046
1045
  const styles = StyleSheet.create({
1047
1046
  root: {
1048
1047
  alignSelf: 'flex-start',
1048
+ maxWidth: '100%',
1049
+ minWidth: 0,
1049
1050
  },
1050
1051
  content: {
1051
1052
  alignItems: 'center',
@@ -1065,6 +1066,11 @@ const styles = StyleSheet.create({
1065
1066
  flexShrink: 0,
1066
1067
  overflow: 'visible',
1067
1068
  },
1069
+ track: {
1070
+ left: 0,
1071
+ position: 'absolute',
1072
+ top: 0,
1073
+ },
1068
1074
  focusRing: {
1069
1075
  position: 'absolute',
1070
1076
  },