@ledvance/base 1.3.92 → 1.3.93

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/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "name": "@ledvance/base",
5
5
  "pid": [],
6
6
  "uiid": "",
7
- "version": "1.3.92",
7
+ "version": "1.3.93",
8
8
  "scripts": {
9
9
  "prepublishOnly": "python update-localazy.py"
10
10
  },
@@ -15,6 +15,7 @@ export interface AdvancedData {
15
15
  router: { key: string, params?: any }
16
16
  dp?: { key: string, code: string }
17
17
  icons?: number | string
18
+ onPress?: () => void
18
19
  }
19
20
 
20
21
  const enableStatusColor = 'rgb(0, 201, 49)'
@@ -1,57 +1,92 @@
1
- import React, { useCallback } from 'react'
2
- import { FlatList, StyleSheet, View, Image } from 'react-native'
3
- import AdvanceCard, { AdvancedData } from './AdvanceCard'
4
- import Spacer from './Spacer'
5
1
  import { useNavigation } from '@react-navigation/core'
2
+ import React, { useCallback } from 'react'
3
+ import { FlatList, Image, StyleSheet, View } from 'react-native'
6
4
  import { Utils } from 'tuya-panel-kit'
7
5
  import { getMicrophoneAccess } from '../api/native'
6
+ import AdvanceCard, { AdvancedData } from './AdvanceCard'
7
+ import Spacer from './Spacer'
8
8
 
9
9
  const { convertX: cx } = Utils.RatioUtils
10
10
 
11
11
  const MusicRouterKey = ['ui_biz_music', 'group_ui_biz_music']
12
12
 
13
13
  export interface AdvanceListProps {
14
- advanceData: AdvancedData[],
15
- onAdvanceItemClick?: (advanceData: AdvancedData, index: number) => void | undefined
14
+ advanceData?: AdvancedData[]
16
15
  }
17
16
 
18
17
  function AdvanceList(props: AdvanceListProps) {
19
18
  const navigation = useNavigation()
20
19
 
21
- const { advanceData, onAdvanceItemClick } = props
20
+ const { advanceData = [] } = props
22
21
 
23
- const renderItem = useCallback(({ item, index }) => (
24
- <View style={styles.item}>
25
- <AdvanceCard
26
- data={item}
27
- onPress={async () => {
28
- if(MusicRouterKey.includes(item.router.key)){
29
- getMicrophoneAccess().then(res =>{
30
- if(!res) return
31
- navigation.navigate(item.router.key, item.router.params)
32
- })
33
- }else{
34
- if (!onAdvanceItemClick || onAdvanceItemClick(item, index)) {
35
- navigation.navigate(item.router.key, item.router.params)
36
- }
22
+ const handleNavigate = useCallback(
23
+ async (item: AdvancedData) => {
24
+ try {
25
+ if (MusicRouterKey.includes(item.router.key)) {
26
+ const hasPermission = await getMicrophoneAccess()
27
+ if (hasPermission) {
28
+ navigation.navigate(item.router.key as any, item.router.params)
37
29
  }
38
- }}>
39
- {item.icons && <View style={{
40
- height: cx(118),
41
- justifyContent: 'center',
42
- alignItems: 'center',
43
- }}>
44
- <Image source={{ uri: item.icons }} style={{ width: cx(80), height: cx(80) }} />
45
- </View>}
46
- </AdvanceCard>
47
- </View>
48
- ), [navigation, onAdvanceItemClick])
30
+ } else if (item.onPress) {
31
+ item.onPress()
32
+ } else {
33
+ navigation.navigate(item.router.key as any, item.router.params)
34
+ }
35
+ } catch (error) {
36
+ console.warn('Failed to check microphone access or navigate:', error)
37
+ }
38
+ },
39
+ [navigation]
40
+ )
41
+
42
+ const renderItem = useCallback(
43
+ ({ item }: { item: AdvancedData; index: number }) => (
44
+ <View style={styles.item}>
45
+ <AdvanceCard
46
+ data={item}
47
+ onPress={async () => {
48
+ await handleNavigate(item)
49
+ }}
50
+ >
51
+ {item.icons && (
52
+ <View style={styles.iconContainer}>
53
+ <Image source={typeof item.icons === 'string' ? { uri: item.icons } : item.icons} style={styles.iconImage}/>
54
+ </View>
55
+ )}
56
+ </AdvanceCard>
57
+ </View>
58
+ ),
59
+ [handleNavigate]
60
+ )
61
+
62
+ const keyExtractor = useCallback((item: AdvancedData, index: number) => {
63
+ return item.dp?.code ?? `key-${index}`
64
+ }, [])
49
65
 
50
- const keyExtractor = useCallback((item: AdvancedData, index: number) => item.dp?.code || `key-${index}`, [])
66
+ // 改为普通函数组件提升性能
67
+ const Header = () => <Spacer height={cx(10)}/>
68
+ const Separator = () => <Spacer/>
69
+ const Footer = () => <Spacer height={cx(30)}/>
51
70
 
52
- const Header = useCallback(() => <Spacer height={cx(10)} />, [])
53
- const Separator = useCallback(() => <Spacer />, [])
54
- const Footer = useCallback(() => <Spacer height={cx(30)} />, [])
71
+ const styles = StyleSheet.create({
72
+ container: {
73
+ marginHorizontal: cx(14),
74
+ },
75
+ item: {
76
+ flex: 0.5,
77
+ justifyContent: 'center',
78
+ alignItems: 'center',
79
+ },
80
+ iconContainer: {
81
+ height: cx(118),
82
+ justifyContent: 'center' as const,
83
+ alignItems: 'center' as const,
84
+ },
85
+ iconImage: {
86
+ width: cx(80),
87
+ height: cx(80),
88
+ }
89
+ })
55
90
 
56
91
  return (
57
92
  <FlatList
@@ -63,19 +98,10 @@ function AdvanceList(props: AdvanceListProps) {
63
98
  keyExtractor={keyExtractor}
64
99
  ListHeaderComponent={Header}
65
100
  ItemSeparatorComponent={Separator}
66
- ListFooterComponent={Footer} />
101
+ ListFooterComponent={Footer}
102
+ />
67
103
  )
68
104
  }
69
105
 
70
- const styles = StyleSheet.create({
71
- container: {
72
- marginHorizontal: cx(14),
73
- },
74
- item: {
75
- flex: .5,
76
- justifyContent: 'center',
77
- alignItems: 'center',
78
- },
79
- })
80
106
 
81
107
  export default AdvanceList
@@ -1,7 +1,17 @@
1
- import { IconFont, Utils } from 'tuya-panel-kit'
2
- import { StyleProp, Text, TextStyle, TouchableOpacity, View, ViewStyle, Image, ImageSourcePropType, ImageStyle } from 'react-native'
3
1
  import React from 'react'
4
- import ThemeType from "../config/themeType";
2
+ import {
3
+ Image,
4
+ ImageSourcePropType,
5
+ ImageStyle,
6
+ StyleProp,
7
+ Text,
8
+ TextStyle,
9
+ TouchableOpacity,
10
+ View,
11
+ ViewStyle
12
+ } from 'react-native'
13
+ import { IconFont, Utils } from 'tuya-panel-kit'
14
+ import ThemeType from '../config/themeType'
5
15
 
6
16
  const cx = Utils.RatioUtils.convertX
7
17
  const { withTheme } = Utils.ThemeUtils
@@ -11,19 +21,20 @@ interface CellProps {
11
21
  icon?: ImageSourcePropType
12
22
  iconStyle?: StyleProp<ImageStyle>
13
23
  title: string,
14
- value: string,
15
- onPress: () => void,
24
+ value?: string,
25
+ onPress?: () => void,
16
26
  hideArrow?: boolean
17
27
  style?: StyleProp<ViewStyle>
18
28
  contentStyle?: StyleProp<ViewStyle>
19
29
  titleStyle?: StyleProp<TextStyle>
20
30
  valueStyle?: StyleProp<TextStyle>
31
+ rightContent?: React.ReactNode
21
32
  }
22
33
 
23
34
  export default withTheme(function Cell(props: CellProps) {
24
35
  return (
25
36
  <TouchableOpacity
26
- accessibilityLabel={"Cell"}
37
+ accessibilityLabel={'Cell'}
27
38
  accessibilityHint={props.value}
28
39
  style={[{
29
40
  height: cx(50),
@@ -31,7 +42,9 @@ export default withTheme(function Cell(props: CellProps) {
31
42
  justifyContent: 'center',
32
43
  backgroundColor: props.theme?.card.background,
33
44
  }, props.style]}
34
- onPress={props.onPress}>
45
+ onPress={() => {
46
+ props.onPress && props.onPress()
47
+ }}>
35
48
  <CellContent
36
49
  icon={props.icon}
37
50
  iconStyle={props.iconStyle}
@@ -41,6 +54,7 @@ export default withTheme(function Cell(props: CellProps) {
41
54
  valueStyle={props.valueStyle}
42
55
  hideArrow={props.hideArrow}
43
56
  style={props.contentStyle}
57
+ rightContent={props.rightContent}
44
58
  />
45
59
  </TouchableOpacity>
46
60
  )
@@ -51,12 +65,13 @@ interface CellContentProps {
51
65
  icon?: ImageSourcePropType
52
66
  iconStyle?: StyleProp<ImageStyle>
53
67
  title: string
54
- value: string
68
+ value?: string
55
69
  style?: StyleProp<ViewStyle>
56
70
  titleStyle?: StyleProp<TextStyle>
57
71
  valueStyle?: StyleProp<TextStyle>
58
72
  hideArrow?: boolean
59
73
  arrowStyle?: { color?: any, size?: number }
74
+ rightContent?: React.ReactNode
60
75
  }
61
76
 
62
77
  const CellContentBase = (props: CellContentProps) => {
@@ -67,7 +82,8 @@ const CellContentBase = (props: CellContentProps) => {
67
82
  props.style,
68
83
  ]}>
69
84
  <View style={{ flexDirection: 'row', alignItems: 'center' }}>
70
- {props.icon && (<Image source={props.icon} style={[{ width: cx(24), height: cx(24), marginRight: cx(10) }, props.iconStyle]} />)}
85
+ {props.icon && (<Image source={props.icon}
86
+ style={[{ width: cx(24), height: cx(24), marginRight: cx(10) }, props.iconStyle]}/>)}
71
87
  <Text
72
88
  style={[
73
89
  {
@@ -78,28 +94,32 @@ const CellContentBase = (props: CellContentProps) => {
78
94
  props.titleStyle,
79
95
  ]}>{props.title}</Text>
80
96
  </View>
81
- <View style={{ flexDirection: 'row', alignItems: 'center' }}>
82
- <Text style={[
83
- {
84
- fontSize: cx(14),
85
- color: props.theme?.global.secondFontColor,
86
- fontFamily: 'helvetica_neue_lt_std_roman',
87
- },
88
- props.valueStyle,
89
- ]}>{props.value}</Text>
90
- <View style={{ width: cx(4) }} />
91
- {
92
- !props.hideArrow && (
93
- <IconFont
94
- name="arrow"
95
- color={props.arrowStyle?.color || props.theme?.global.secondFontColor}
96
- size={props.arrowStyle?.size || cx(11)} />
97
- )
98
- }
99
- </View>
97
+ {
98
+ props.rightContent !== undefined ? props.rightContent : (
99
+ <View style={{ flexDirection: 'row', alignItems: 'center' }}>
100
+ <Text style={[
101
+ {
102
+ fontSize: cx(14),
103
+ color: props.theme?.global.secondFontColor,
104
+ fontFamily: 'helvetica_neue_lt_std_roman',
105
+ },
106
+ props.valueStyle,
107
+ ]}>{props.value}</Text>
108
+ <View style={{ width: cx(4) }}/>
109
+ {
110
+ !props.hideArrow && (
111
+ <IconFont
112
+ name="arrow"
113
+ color={props.arrowStyle?.color || props.theme?.global.secondFontColor}
114
+ size={props.arrowStyle?.size || cx(11)}/>
115
+ )
116
+ }
117
+ </View>
118
+ )
119
+ }
100
120
  </View>
101
121
  )
102
122
  }
103
123
  const CellContent = withTheme(CellContentBase) as React.ComponentType<CellContentProps>
104
124
 
105
- export { CellContent };
125
+ export { CellContent }
@@ -3,7 +3,7 @@ import {Text, TouchableOpacity, View} from 'react-native'
3
3
  import {Popup, Utils} from 'tuya-panel-kit'
4
4
  import ThemeType from '../config/themeType'
5
5
 
6
- const {convertX: cx, height} = Utils.RatioUtils
6
+ const {convertX: cx, height, statusBarHeight} = Utils.RatioUtils
7
7
  const { withTheme } = Utils.ThemeUtils
8
8
 
9
9
  interface InformationPopupProps {
@@ -50,7 +50,7 @@ const InformationPopup = (props: InformationPopupProps) => {
50
50
  })
51
51
 
52
52
  Popup.custom({
53
- content: <View style={{height: height - cx(80), padding: cx(24)}}>
53
+ content: <View style={{height: height - statusBarHeight - cx(40), padding: cx(24)}}>
54
54
  {props.content}
55
55
  </View>,
56
56
  title: <TitleNode />,
@@ -11,11 +11,22 @@ interface IProps {
11
11
  }
12
12
 
13
13
  export default class Thumb extends Component<IProps> {
14
+ private animateX: Animated.Value;
15
+ private animateY: Animated.Value;
16
+ private previewRef: NativeComponent;
17
+
18
+ constructor(props: IProps) {
19
+ super(props);
20
+ // 确保在构造函数中初始化
21
+ this.animateX = new Animated.Value(props.x);
22
+ this.animateY = new Animated.Value(props.y);
23
+ }
24
+
14
25
  componentDidUpdate(prevProps: IProps) {
15
- if (prevProps.x !== this.props.x) {
26
+ if (prevProps.x !== this.props.x && this.animateX) {
16
27
  this.animateX.setValue(this.props.x);
17
28
  }
18
- if (prevProps.y !== this.props.y) {
29
+ if (prevProps.y !== this.props.y && this.animateY) {
19
30
  this.animateY.setValue(this.props.y);
20
31
  }
21
32
  }
@@ -34,13 +45,13 @@ export default class Thumb extends Component<IProps> {
34
45
 
35
46
  setNativeProps(props: IProps) {
36
47
  const { x, y, color } = props;
37
- if (typeof x === 'number') {
48
+ if (typeof x === 'number' && this.animateX) {
38
49
  this.animateX.setValue(x);
39
50
  }
40
- if (typeof y === 'number') {
51
+ if (typeof y === 'number' && this.animateY) {
41
52
  this.animateY.setValue(y);
42
53
  }
43
- if (typeof color === 'string') {
54
+ if (typeof color === 'string' && this.previewRef) {
44
55
  this.previewRef.setNativeProps({
45
56
  style: {
46
57
  backgroundColor: color,
@@ -49,10 +60,6 @@ export default class Thumb extends Component<IProps> {
49
60
  }
50
61
  }
51
62
 
52
- private animateX = new Animated.Value(this.props.x);
53
- private animateY = new Animated.Value(this.props.y);
54
- private previewRef: NativeComponent;
55
-
56
63
  render() {
57
64
  const { color, size, img } = this.props;
58
65
  const maskWidth = (size / 38) * 62;
@@ -3,8 +3,8 @@ import React, { Component } from 'react'
3
3
  import { Provider } from 'react-redux'
4
4
  import { DevInfo, DpValue, Theme, TYSdk } from 'tuya-panel-kit'
5
5
  import { actions, store } from './models'
6
- import {addListener, nativeEventEmitter, removeListener} from './api/nativeEventEmitter'
7
- import {getSystemTimeFormat, getTimeZone, NativeApi} from './api/native'
6
+ import { addListener, nativeEventEmitter, removeListener } from './api/nativeEventEmitter'
7
+ import { getSystemTimeFormat, getTimeZone, NativeApi } from './api/native'
8
8
  import {
9
9
  DeviceInfo,
10
10
  NativeProps,
@@ -17,8 +17,8 @@ import {
17
17
  } from './models/modules/NativePropsSlice'
18
18
  import { LdvDpSchema, GlobalParams } from './models/GlobalParams'
19
19
  import Connect from './components/connect'
20
- import darkTheme from "./config/dark-theme";
21
- import lightTheme from "./config/light-theme";
20
+ import darkTheme from './config/dark-theme'
21
+ import lightTheme from './config/light-theme'
22
22
 
23
23
  interface Props {
24
24
  devInfo: DevInfo
@@ -78,7 +78,11 @@ const composeLayout = (component: React.ComponentType) => {
78
78
  * 每当设备信息变更时,会将变更的设备信息值同步更新到`redux`中去。
79
79
  */
80
80
  TYSdk.event.on('networkStateChange', data => {
81
- dispatch(actions.common.deviceChange(data as any))
81
+ if (actions && actions.common && actions.common.deviceChange) {
82
+ dispatch(actions.common.deviceChange(data as any))
83
+ } else {
84
+ console.warn('actions.common.deviceChange is not available')
85
+ }
82
86
  })
83
87
 
84
88
  class PanelComponent extends Component<Props> {
@@ -92,6 +96,7 @@ const composeLayout = (component: React.ComponentType) => {
92
96
  state = {
93
97
  colorScheme: 'light'
94
98
  }
99
+
95
100
  constructor(props: Props) {
96
101
  super(props)
97
102
  if (props && props.devInfo && props.devInfo.devId) {
@@ -153,7 +158,7 @@ const composeLayout = (component: React.ComponentType) => {
153
158
  config: {},
154
159
  groupDevices: []
155
160
  },
156
- initialDps: {...dps, ...JSON.parse(ldvDevInfo.dps)},
161
+ initialDps: { ...dps, ...JSON.parse(ldvDevInfo.dps) },
157
162
  familyName: ldvDevInfo.familyName,
158
163
  role: ldvDevInfo.role,
159
164
  moods: [],
@@ -198,10 +203,10 @@ const composeLayout = (component: React.ComponentType) => {
198
203
  dispatch(setGroupNativeProps(nativeProps))
199
204
  }
200
205
 
201
- async initGroupDevices(tyGroupId: number){
202
- if(!tyGroupId) return
206
+ async initGroupDevices(tyGroupId: number) {
207
+ if (!tyGroupId) return
203
208
  const res = await NativeApi.getGroupDevices(tyGroupId)
204
- if(res.success && Array.isArray(res.data)){
209
+ if (res.success && Array.isArray(res.data)) {
205
210
  dispatch(setGroupDevices(res.data))
206
211
  }
207
212
  }
@@ -218,7 +223,7 @@ const composeLayout = (component: React.ComponentType) => {
218
223
  type: schemaItem.type,
219
224
  mode: schemaItem.mode,
220
225
  property: schemaItem.property,
221
- };
226
+ }
222
227
  dpSchemaMap[schemaItem.code] = dpSchema
223
228
  dpSchemaMap[schemaItem.id] = dpSchema
224
229
  dps[schemaItem.id] = null
@@ -17128,7 +17128,7 @@ export default {
17128
17128
  "Onoff_button_socket": "켜기 / 끄기",
17129
17129
  "Remotecontrol_Title": "WiFi 리모컨을 정말로 활성화하시겠습니까?",
17130
17130
  "Remotecontrol_description": "WiFi 리모컨이 활성화되면 대기 전력이 증가한다는 점에 유의하세요.",
17131
- "activate_sensor": "센서 활성화",
17131
+ "activate_sensor": "센서 활성화하기",
17132
17132
  "addTimeCycle_settings_sec_text": "장치의 전원을 얼마동안 켜두어야 합니까?",
17133
17133
  "addTimeCycle_settings_sec_text2": "장치의 전원을 얼마동안 꺼두어야 합니까?",
17134
17134
  "addTimeCycle_warning_text": "시간 설정이 사용 가능한 기간을 초과했습니다.",
@@ -17603,7 +17603,7 @@ export default {
17603
17603
  "curtain_fast_calibration_step2": "커튼이 완전히 닫힌 상태에서 완전히 열리는 시간까지 필요한 시간을 입력하십시오.",
17604
17604
  "curtain_fast_toast_text": "커튼이 0% 로 완전히 닫혔을 때만 빠른 보정이 가능합니다.",
17605
17605
  "curtain_intelligent_calibration": "지능형 캘리브레이션",
17606
- "curtain_intelligent_calibration_step1": "지능형 캘리브레이션을 위해서는 커튼을 완전히 열고 닫으려면 벽 스위치가 필요하다는 점에 유의하세요.월 스위치를 사용하지 않는 경우 고속 보정 모드를 사용하십시오.\n\n1.커튼을 완전히 열거나 닫을 수 있도록 보정 전에 커튼 모터를 올바르게 설치하십시오.\n\n2.“다음 단계”를 클릭합니다.",
17606
+ "curtain_intelligent_calibration_step1": "자동커튼을 보정할시 커튼을 완전히 열고 닫을 수 있는 벽 스위치가 필요하다는 점에 유의하세요. 스위치를 사용하지 않는 경우에는 고속 보정모드를 사용하십시오.\n\n1. 자동 보정 전에 커튼 모터를 올바르게 설치하여 커튼을 완전히 열고 닫을 수 있도록 하십시오.\n\n2. 스위치를 눌러 커튼이 완전히 닫히도록 하십시오.\n\n3. \"다음 단계 \"를 눌러주세요.",
17607
17607
  "curtain_intelligent_calibration_step2": "1.커튼이 완전히 열릴 때까지 벽 스위치를 눌러 커튼을 엽니다.\n\n2.커튼이 완전히 닫힐 때까지 벽 스위치를 눌러 커튼을 닫습니다.\n\n3.1과 2의 단계가 완료되면 “보정”을 클릭합니다.",
17608
17608
  "curtain_motor_steering": "모터 스티어링",
17609
17609
  "curtain_motor_steering1": "전진 방향",
@@ -18617,11 +18617,11 @@ export default {
18617
18617
  "ceiling_fan_tile_uvc_fan_speed": "Greitis",
18618
18618
  "ceiling_light_title_lighting_headline": "Papildomas apšvietimas",
18619
18619
  "chartdisplay_energy": "Energija",
18620
- "chartdisplay_power": "Power",
18621
- "charttime_type1": "24 h",
18622
- "charttime_type2": "6 h",
18623
- "charttime_type3": "1 h",
18624
- "charttime_type4": "5 min",
18620
+ "chartdisplay_power": "Maitinimas",
18621
+ "charttime_type1": "24 val.",
18622
+ "charttime_type2": "6 val.",
18623
+ "charttime_type3": "1 val.",
18624
+ "charttime_type4": "5 min.",
18625
18625
  "childlock_overview_description_text": "Ši funkcija išjungia įtaiso fizinį jungiklį. Funkciją galima išjungti čia arba per penkias sekundes paspausti jungiklį keturis kartus iš eilės.",
18626
18626
  "conflict_dialog_active_item_bio_rhythm_description": "Žinokite, kad biologinis ritmas yra priešingas vienai ar daugiau funkcijų. Priešingos funkcijos bus išjungtos.",
18627
18627
  "conflict_dialog_active_item_bio_rhythm_titel": "Ar tikrai norite įjungti šį biologinio ritmo grafiką?",
@@ -18826,7 +18826,7 @@ export default {
18826
18826
  "curtain_fast_calibration_step2": "Įveskite laiką, kurio reikia užuolaidai pilnai atsidaryti",
18827
18827
  "curtain_fast_toast_text": "Greitas kalibravimas yra leidžiamas tik tuomet, kai užuolaida yra 0% atidarymo lygyje.",
18828
18828
  "curtain_intelligent_calibration": "Išmanus kalibravimas",
18829
- "curtain_intelligent_calibration_step1": "Atkreipkite dėmesį, kad norint atlikti išmanųjį kalibravimą, jums reikės sieninio jungiklio, kad užuolaida būtų visiškai atidaryta / uždaryta. Jei nenaudojate sieninio jungiklio, naudokite greitojo kalibravimo režimą. \n\n1. Prieš kalibravimą teisingai sumontuokite užuolaidos variklį, kad užuolaidą būtų galima visiškai atidaryti / uždaryti. \n\n2. Spustelėkite „Kitas žingsnis“.",
18829
+ "curtain_intelligent_calibration_step1": "Atkreipkite dėmesį, kad norint atlikti pažangų kalibravimą, reikia sieninio jungiklio, kad užuolaidos būtų visiškai atidarytos/uždarytos. Jei nenaudojate sieninio jungiklio, naudokite greito kalibravimo režimą.\n\n1. Prieš kalibravimą teisingai sumontuokite užuolaidų variklį, kad užuolaidos galėtų būti visiškai atidarytos/uždarytos.\n\n2. Paspauskite sieninį jungiklį, kad užuolaidos būtų uždarytos, kol jos bus visiškai uždarytos.\n\n3. Spustelėkite „Kitas žingsnis“.",
18830
18830
  "curtain_intelligent_calibration_step2": "1. Paspauskite sieninį jungiklį, kad atidarytumėte užuolaidą, kol ji bus visiškai atidaryta.\n\n2. Paspauskite sieninį jungiklį, kad uždarytumėte užuolaidą, kol ji bus visiškai uždaryta.\n\n3. Atlikę 1 ir 2 veiksmus, spustelėkite “Kalibruoti”.",
18831
18831
  "curtain_motor_steering": "Variklio valdymas",
18832
18832
  "curtain_motor_steering1": "Į priekį",
@@ -19183,7 +19183,7 @@ export default {
19183
19183
  "plug_energyconsumptionswitch": "Perjungti į energijos suvartojimo režimą",
19184
19184
  "plug_energygenerationswitch": "Perjungti į energijos gamybos režimą",
19185
19185
  "pos_mode_switching_fail_tips": "Neteisingas slaptažodis. Patikrinkite ir įveskite teisingą slaptažodį.",
19186
- "power_chart_empty": "There is no data in the current time period",
19186
+ "power_chart_empty": "Dabartiniu laikotarpiu duomenų nėra",
19187
19187
  "power_management_battery_remaining": "Likęs akumuliatoriaus lygis",
19188
19188
  "power_management_low_battery_alarm_threshold": "Nustatykite signalą, kai akumuliatoriaus įkrovos lygis sumažės",
19189
19189
  "power_management_power_source": "Maitinimo šaltinis",
@@ -19543,13 +19543,13 @@ export default {
19543
19543
  "timeschedule_add_schedule_weekday5_text": "Pn",
19544
19544
  "timeschedule_add_schedule_weekday6_text": "Š",
19545
19545
  "timeschedule_add_schedule_weekday7_text": "S",
19546
- "timeschedule_off": "OFF - Time schedule",
19547
- "timeschedule_on": "ON - Time schedule",
19546
+ "timeschedule_off": "IŠJUNGTA Laiko grafikas",
19547
+ "timeschedule_on": "ĮJUNGTA Laiko grafikas",
19548
19548
  "timeschedule_overview_description_text": "Gali būti nedidelių vėlavimų iki 30 sekundžių.",
19549
19549
  "timeschedule_overview_empty_button_add_text": "Pridėkite laiko grafiką",
19550
19550
  "timeschedule_overview_empty_information_text": "Dar nepridėjote laiko grafiko.",
19551
19551
  "timeschedule_overview_headline_text": "Laiko grafikas",
19552
- "timeschedule_own": "Create your own time schedule",
19552
+ "timeschedule_own": "Sukurkite savo laiko grafiką",
19553
19553
  "title_COsensor": "CO detektorius",
19554
19554
  "title_smokesensor": "Dūmų detektorius",
19555
19555
  "title_watersensor": "Vandens nuotėkio detektorius",
@@ -19841,9 +19841,9 @@ export default {
19841
19841
  "ceiling_light_title_lighting_headline": "Sekundārais apgaismojums",
19842
19842
  "chartdisplay_energy": "Enerģija",
19843
19843
  "chartdisplay_power": "Jauda",
19844
- "charttime_type1": "24 stundas",
19845
- "charttime_type2": "6 stundas",
19846
- "charttime_type3": "1 stunda",
19844
+ "charttime_type1": "24 h",
19845
+ "charttime_type2": "6 h",
19846
+ "charttime_type3": "1 h",
19847
19847
  "charttime_type4": "5 minūtes",
19848
19848
  "childlock_overview_description_text": "Šī funkcija atspējo ierīces fizisko slēdzi. Lai to izslēgtu, varat nospiest slēdzi četras reizes pēc kārtas piecu sekunžu laikā vai izslēgt šo funkciju no šejienes.",
19849
19849
  "conflict_dialog_active_item_bio_rhythm_description": "Ņemiet vērā, ka bioloģiskais ritms ir pretrunā ar vienu vai vairākām funkcijām. Konfliktējošās funkcijas tiks deaktivizētas.",
@@ -20049,7 +20049,7 @@ export default {
20049
20049
  "curtain_fast_calibration_step2": "Lūdzu, ievadiet laiku, kas nepieciešams aizkaram no pilnīgas aizvēršanas līdz pilnīgai atvēršanai.",
20050
20050
  "curtain_fast_toast_text": "Ātrā kalibrēšana ir atļauta tikai tad, ja aizkars ir pilnībā aizvērts 0 %.",
20051
20051
  "curtain_intelligent_calibration": "Viedā kalibrēšana",
20052
- "curtain_intelligent_calibration_step1": "Lūdzu, ņemiet vērā, ka inteliģentai kalibrēšanai ir nepieciešams sienas slēdzis, lai pilnībā atvērtu / aizvērtu aizkaru. Ja neizmantojat sienas slēdzi, lūdzu, izmantojiet ātrās kalibrēšanas režīmu.\n\n1. Pirms kalibrēšanas pareizi uzstādiet aizkaru motoru, lai aizkaru varētu pilnībā atvērt/aizvērt.\n\n2. Noklikšķiniet uz \"Nākamais solis\".",
20052
+ "curtain_intelligent_calibration_step1": "Lūdzu, ņemiet vērā, ka, lai veiktu viedo kalibrēšanu, ir nepieciešams sienas slēdzis, lai pilnībā atvērtu/aizvērtu aizkaru. Ja neizmantojat sienas slēdzi, lūdzu, izmantojiet ātrās kalibrēšanas režīmu.\n\n1. Pirms kalibrēšanas pareizi uzstādiet aizkara motoru, lai aizkaru varētu pilnībā atvērt/aizvērt.\n\n2. Nospiediet sienas slēdzi, lai aizvērtu aizkaru, līdz tas ir pilnībā aizvērtas.\n\n3. Noklikšķiniet uz Nākamais solis”.",
20053
20053
  "curtain_intelligent_calibration_step2": "1. Nospiediet sienas slēdzi, lai atvērtu aizkaru, līdz tas ir pilnībā atvērts.\n\n2. Nospiediet sienas slēdzi, lai aizkaru aizvērtu, līdz tas ir pilnībā aizvērts.\n\n3. Kad 1. un 2. darbība ir pabeigta, noklikšķiniet uz \"Kalibrēt\".",
20054
20054
  "curtain_motor_steering": "Motora vadīšana",
20055
20055
  "curtain_motor_steering1": "Virziens uz priekšu",
@@ -20406,7 +20406,7 @@ export default {
20406
20406
  "plug_energyconsumptionswitch": "Pārslēgšanās uz enerģijas patēriņa režīmu",
20407
20407
  "plug_energygenerationswitch": "Pārslēgšanās uz enerģijas ražošanas režīmu",
20408
20408
  "pos_mode_switching_fail_tips": "Nepareiza parole. Lūdzu, pārbaudiet un ievadiet pareizo paroli.",
20409
- "power_chart_empty": "There is no data in the current time period",
20409
+ "power_chart_empty": "Pašreizējā laika periodā nav datu.",
20410
20410
  "power_management_battery_remaining": "Atlikušais akumulatora uzlādes līmenis",
20411
20411
  "power_management_low_battery_alarm_threshold": "Iestatiet trauksmes signālu zema akumulatora sliekšņa gadījumā",
20412
20412
  "power_management_power_source": "Enerģijas avots",
@@ -20766,13 +20766,13 @@ export default {
20766
20766
  "timeschedule_add_schedule_weekday5_text": "Pk",
20767
20767
  "timeschedule_add_schedule_weekday6_text": "S",
20768
20768
  "timeschedule_add_schedule_weekday7_text": "Sv",
20769
- "timeschedule_off": "OFF - Time schedule",
20770
- "timeschedule_on": "ON - Time schedule",
20769
+ "timeschedule_off": "IZSLĒGTS - Laika grafiks",
20770
+ "timeschedule_on": "IESLĒGTS Laika grafiks",
20771
20771
  "timeschedule_overview_description_text": "Var rasties nelieli kavējumi līdz 30 sekundēm.",
20772
20772
  "timeschedule_overview_empty_button_add_text": "Pievienot laika grafiku",
20773
20773
  "timeschedule_overview_empty_information_text": "Jūs vēl neesat pievienojis laika grafiku.",
20774
20774
  "timeschedule_overview_headline_text": "Laika grafiks",
20775
- "timeschedule_own": "Create your own time schedule",
20775
+ "timeschedule_own": "Izveidojiet savu laika grafiku",
20776
20776
  "title_COsensor": "CO detektors",
20777
20777
  "title_smokesensor": "Dūmu detektors",
20778
20778
  "title_watersensor": "Ūdens noplūdes detektors",