@ledvance/base 1.2.83 → 1.2.85

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.
Files changed (165) hide show
  1. package/.babelrc +31 -31
  2. package/.eslintignore +5 -5
  3. package/.eslintrc.js +27 -27
  4. package/.prettierrc.js +1 -1
  5. package/.versionrc +5 -5
  6. package/localazy.json +851 -848
  7. package/localazy.keys.json +4 -4
  8. package/package.json +74 -74
  9. package/rn-cli.config.js +8 -8
  10. package/src/api/native.d.ts +71 -71
  11. package/src/api/native.ts +423 -423
  12. package/src/api/nativeEventEmitter.d.ts +3 -3
  13. package/src/api/nativeEventEmitter.ts +125 -125
  14. package/src/components/AdvanceCard.d.ts +25 -25
  15. package/src/components/AdvanceCard.tsx +117 -117
  16. package/src/components/AdvanceList.d.ts +9 -9
  17. package/src/components/AdvanceList.tsx +69 -69
  18. package/src/components/ApplyForDeviceItem.d.ts +6 -6
  19. package/src/components/ApplyForDeviceItem.tsx +83 -83
  20. package/src/components/ApplyForDeviceList.d.ts +7 -7
  21. package/src/components/ApplyForDeviceList.tsx +61 -61
  22. package/src/components/ApplyForText.d.ts +6 -6
  23. package/src/components/ApplyForText.tsx +52 -52
  24. package/src/components/Card.d.ts +10 -10
  25. package/src/components/Card.tsx +40 -40
  26. package/src/components/Cell.d.ts +21 -21
  27. package/src/components/Cell.tsx +69 -69
  28. package/src/components/CircularProgress.d.ts +8 -8
  29. package/src/components/CircularProgress.tsx +42 -42
  30. package/src/components/ColorAdjustView.d.ts +12 -12
  31. package/src/components/ColorAdjustView.tsx +64 -64
  32. package/src/components/ColorExtractor.d.ts +73 -73
  33. package/src/components/ColorExtractor.tsx +374 -374
  34. package/src/components/ColorTempAdjustView.d.ts +13 -13
  35. package/src/components/ColorTempAdjustView.tsx +57 -57
  36. package/src/components/ColorsLine.d.ts +7 -7
  37. package/src/components/ColorsLine.tsx +47 -47
  38. package/src/components/CustomListDialog.d.ts +15 -15
  39. package/src/components/CustomListDialog.tsx +66 -66
  40. package/src/components/DeleteButton.d.ts +10 -10
  41. package/src/components/DeleteButton.tsx +40 -40
  42. package/src/components/Dialog.d.ts +10 -10
  43. package/src/components/Dialog.tsx +38 -38
  44. package/src/components/DrawToolView.d.ts +46 -46
  45. package/src/components/DrawToolView.tsx +262 -262
  46. package/src/components/FanAdjustView.d.ts +23 -23
  47. package/src/components/FanAdjustView.tsx +141 -141
  48. package/src/components/InfoText.d.ts +11 -11
  49. package/src/components/InfoText.tsx +45 -45
  50. package/src/components/LampAdjustView.d.ts +10 -10
  51. package/src/components/LampAdjustView.tsx +75 -75
  52. package/src/components/LampAdjustView2.d.ts +24 -24
  53. package/src/components/LampAdjustView2.tsx +104 -104
  54. package/src/components/LinearGradientLine.d.ts +9 -9
  55. package/src/components/LinearGradientLine.tsx +63 -63
  56. package/src/components/LoadingView.tsx +39 -39
  57. package/src/components/MoodColorsLine.d.ts +9 -9
  58. package/src/components/MoodColorsLine.tsx +38 -38
  59. package/src/components/Page.d.ts +21 -21
  60. package/src/components/Page.tsx +104 -104
  61. package/src/components/Popup.d.ts +7 -7
  62. package/src/components/Popup.tsx +71 -71
  63. package/src/components/Segmented.d.ts +14 -14
  64. package/src/components/Segmented.tsx +76 -76
  65. package/src/components/ShowSelect.d.ts +1 -1
  66. package/src/components/ShowSelect.tsx +158 -158
  67. package/src/components/SocketItem.d.ts +13 -13
  68. package/src/components/SocketItem.tsx +87 -87
  69. package/src/components/Spacer.d.ts +7 -7
  70. package/src/components/Spacer.tsx +13 -13
  71. package/src/components/Stepper.d.ts +19 -19
  72. package/src/components/Stepper.tsx +130 -130
  73. package/src/components/StripAdjustView.d.ts +16 -16
  74. package/src/components/StripAdjustView.tsx +129 -129
  75. package/src/components/StripLightView.d.ts +14 -14
  76. package/src/components/StripLightView.tsx +24 -24
  77. package/src/components/Summary.tsx +116 -116
  78. package/src/components/Tag.d.ts +8 -8
  79. package/src/components/Tag.tsx +56 -56
  80. package/src/components/TextButton.d.ts +9 -9
  81. package/src/components/TextButton.tsx +31 -31
  82. package/src/components/TextField.d.ts +9 -9
  83. package/src/components/TextField.tsx +92 -92
  84. package/src/components/TextFieldStyleButton.d.ts +8 -8
  85. package/src/components/TextFieldStyleButton.tsx +85 -85
  86. package/src/components/UATabTitle.d.ts +6 -6
  87. package/src/components/UATabTitle.tsx +31 -31
  88. package/src/components/UATabs.d.ts +12 -12
  89. package/src/components/UATabs.tsx +77 -77
  90. package/src/components/connect.d.ts +10 -10
  91. package/src/components/connect.tsx +20 -20
  92. package/src/components/ldvColorBrightness.d.ts +1 -1
  93. package/src/components/ldvColorBrightness.tsx +18 -18
  94. package/src/components/ldvColorSlider.d.ts +14 -14
  95. package/src/components/ldvColorSlider.tsx +131 -131
  96. package/src/components/ldvItemView.d.ts +12 -12
  97. package/src/components/ldvItemView.tsx +43 -43
  98. package/src/components/ldvPickerView.d.ts +13 -13
  99. package/src/components/ldvPickerView.tsx +97 -97
  100. package/src/components/ldvPresetView.d.ts +2 -2
  101. package/src/components/ldvPresetView.tsx +86 -86
  102. package/src/components/ldvSaturation.d.ts +2 -2
  103. package/src/components/ldvSaturation.tsx +22 -22
  104. package/src/components/ldvSlider.d.ts +15 -15
  105. package/src/components/ldvSlider.tsx +103 -103
  106. package/src/components/ldvSwitch.d.ts +10 -10
  107. package/src/components/ldvSwitch.tsx +52 -52
  108. package/src/components/ldvTemperatureSlider.d.ts +13 -13
  109. package/src/components/ldvTemperatureSlider.tsx +139 -139
  110. package/src/components/ldvTopBar.d.ts +10 -10
  111. package/src/components/ldvTopBar.tsx +76 -76
  112. package/src/components/ldvTopName.d.ts +9 -9
  113. package/src/components/ldvTopName.tsx +63 -63
  114. package/src/components/segmentControl.d.ts +1 -1
  115. package/src/components/segmentControl.tsx +65 -65
  116. package/src/components/weekSelect.d.ts +7 -7
  117. package/src/components/weekSelect.tsx +98 -98
  118. package/src/composeLayout.d.ts +30 -30
  119. package/src/composeLayout.tsx +261 -261
  120. package/src/config/dark-theme.ts +61 -61
  121. package/src/config/light-theme.ts +61 -61
  122. package/src/hooks/Hooks.d.ts +2 -2
  123. package/src/hooks/Hooks.ts +8 -8
  124. package/src/i18n/index.d.ts +16 -16
  125. package/src/i18n/index.ts +37 -37
  126. package/src/i18n/strings.d.ts +15953 -15953
  127. package/src/i18n/strings.ts +23781 -23723
  128. package/src/main.tsx +9 -9
  129. package/src/models/GlobalParams.d.ts +14 -14
  130. package/src/models/GlobalParams.ts +14 -14
  131. package/src/models/TuyaApi.d.ts +29 -29
  132. package/src/models/TuyaApi.ts +92 -92
  133. package/src/models/combine.d.ts +26 -26
  134. package/src/models/combine.ts +17 -17
  135. package/src/models/configureStore.d.ts +9 -9
  136. package/src/models/configureStore.ts +33 -33
  137. package/src/models/index.d.ts +31 -31
  138. package/src/models/index.ts +22 -22
  139. package/src/models/modules/NativePropsSlice.d.ts +61 -61
  140. package/src/models/modules/NativePropsSlice.tsx +467 -467
  141. package/src/models/modules/Result.d.ts +14 -14
  142. package/src/models/modules/Result.ts +15 -15
  143. package/src/models/modules/common.d.ts +44 -44
  144. package/src/models/modules/common.ts +161 -161
  145. package/src/res/index.d.ts +70 -70
  146. package/src/res/index.ts +73 -73
  147. package/src/utils/ColorParser.d.ts +66 -66
  148. package/src/utils/ColorParser.ts +189 -189
  149. package/src/utils/ColorUtils.d.ts +71 -71
  150. package/src/utils/ColorUtils.tsx +448 -448
  151. package/src/utils/Support.d.ts +13 -13
  152. package/src/utils/Support.ts +108 -108
  153. package/src/utils/TypeUtils.d.ts +3 -3
  154. package/src/utils/cctUtils.d.ts +1 -1
  155. package/src/utils/cctUtils.ts +110 -110
  156. package/src/utils/common.d.ts +35 -35
  157. package/src/utils/common.ts +379 -379
  158. package/src/utils/index.d.ts +26 -26
  159. package/src/utils/index.ts +191 -191
  160. package/src/utils/interface.d.ts +6 -6
  161. package/src/utils/interface.ts +50 -50
  162. package/src/utils/loopsCompare.d.ts +1 -1
  163. package/src/utils/loopsCompare.ts +62 -62
  164. package/tsconfig.json +50 -50
  165. package/update-localazy.py +52 -52
package/src/res/index.ts CHANGED
@@ -1,74 +1,74 @@
1
- export default {
2
- button: 'button',
3
- tuya_decrease: 'tuya_decrease',
4
- tuya_goto_icon: 'tuya_goto_icon',
5
- tuya_increase: 'tuya_increase',
6
- tuya_select_icon: 'tuya_select_icon',
7
- ldv_timer_empty: 'timer_empty',
8
- ldv_right_arrow: 'arrow',
9
- ldv_list_select: 'list_select',
10
- switch_1: 'switch_1',
11
- switch_2: 'switch_2',
12
- switch_3: 'switch_3',
13
- switch_4: 'switch_usb',
14
- ic_cancel: 'ic_cancel',
15
- ic_more: 'ic_more',
16
- device_panel_timer_add: require('./materialiconsOutlinedArrowsNavAddBox.png'),
17
- device_panel_schedule_alert: 'device_panel_schedule_alert',
18
- device_panel_schedule_add: require('./device_panel_schedule_add.png'),
19
- ic_arrows_nav_clear: require('./materialiconsFilledCancel.png'),
20
- ic_info: require('./iconsMaterialOutlinedCommunicationInfo.png'),
21
- ic_warning_amber: require('./materialiconsOutlinedArrowsNavWarningAmber.png'),
22
- ic_check: 'ic_check',
23
- ic_uncheck: require('./componentsIOsButtonsButtonAdd.png'),
24
- rn_ic_download: 'rn_ic_download',
25
- scheduleEmpty: require('./illustrationsHomeRoutines.png'),
26
- summary_icon1: require('./iconsMaterialOutlinedCalendarCalendarToday.png'),
27
- summary_icon2: require('./iconsMaterialOutlinedTimeAccessTime.png'),
28
- summary_icon3: require('./iconsMaterialOutlinedEditorInventory.png'),
29
- energy_consumption_right: require('./iconsMaterialOutlinedArrowsNavArrowForwardIos.png'),
30
- energy_consumption_chart: require('./iconsMaterialOutlinedOtherBarChart.png'),
31
- energy_consumption_cash: require('./cash.png'),
32
- energy_consumption_greenery: require('./iconsMaterialOutlinedOtherEnergySavingsLeaf.png'),
33
- app_music_check: require('./iconsMaterialOutlinedArrowsNavCheck.png'),
34
- co2Icon: require('./iconsMaterialOutlinedCommunicationInfo.png'),
35
- download_icon: require('./iconsMaterialOutlinedEditorFileDownload.png'),
36
- energy_consumption_empty: require('./illustrationsFeaturesLogs.png'),
37
- rhythm_icon1: 'rhythm_icon1',
38
- rhythm_icon2: 'rhythm_icon2',
39
- rhythm_icon3: 'rhythm_icon3',
40
- rhythm_icon4: 'rhythm_icon4',
41
- color_temperature_wheel: 'color_temperature_wheel',
42
- color_wheel: 'color_wheel',
43
- scene_goodnight: 'scene_goodnight',
44
- scene_reading: 'scene_reading',
45
- scene_work: 'scene_work',
46
- scene_leisure: 'scene_leisure',
47
- scene_custom1: 'scene_custom1',
48
- scene_custom2: 'scene_custom2',
49
- biorhythm_plan_timer: 'biorhythm_plantimer',
50
- add: 'add',
51
- delete: 'delete',
52
- icon_edit_scene: 'icon_edit_scene',
53
- light_on: require('./light_on.png'),
54
- light_off: require('./light_off.png'),
55
- rn_image_contact_sensor_open: 'rn_image_contact_sensor_open',
56
- rn_image_contact_sensor_close: 'rn_image_contact_sensor_close',
57
- rn_image_motion_detected: 'rn_image_motion_detected',
58
- rn_image_no_motion_detected: 'rn_image_no_motion_detected',
59
- sensor_status: require('./iconsMaterialOutlinedOtherJoin.png'),
60
- automation_status: require('./iconsMaterialOutlinedWheatherWbCloudy.png'),
61
- ic_colorize: require('./ic_colorize.png'),
62
- ic_mood_del: require('./ic_mood_del.png'),
63
- ic_paint_bucket: require('./ic_paint_bucket.png'),
64
- ic_text_field_input_error: require('./ic_text_field_input_error.png'),
65
- ic_minus: require('./ic_minus.png'),
66
- ic_plus: require('./ic_plus.png'),
67
- ic_disabled_light: require('./ic_disabled_light.png'),
68
- ic_top_arrow: require('./ic_top_arrow.png'),
69
- offline_wifi: require('./offlineWifi.png'),
70
- football_icon: require('./football_icon.png'),
71
- leverkusen_icon: require('./leverkusen_icon.png'),
72
- olympic_icon: require('./olympic.png'),
73
- ic_refresh: require('./refresh.png')
1
+ export default {
2
+ button: 'button',
3
+ tuya_decrease: 'tuya_decrease',
4
+ tuya_goto_icon: 'tuya_goto_icon',
5
+ tuya_increase: 'tuya_increase',
6
+ tuya_select_icon: 'tuya_select_icon',
7
+ ldv_timer_empty: 'timer_empty',
8
+ ldv_right_arrow: 'arrow',
9
+ ldv_list_select: 'list_select',
10
+ switch_1: 'switch_1',
11
+ switch_2: 'switch_2',
12
+ switch_3: 'switch_3',
13
+ switch_4: 'switch_usb',
14
+ ic_cancel: 'ic_cancel',
15
+ ic_more: 'ic_more',
16
+ device_panel_timer_add: require('./materialiconsOutlinedArrowsNavAddBox.png'),
17
+ device_panel_schedule_alert: 'device_panel_schedule_alert',
18
+ device_panel_schedule_add: require('./device_panel_schedule_add.png'),
19
+ ic_arrows_nav_clear: require('./materialiconsFilledCancel.png'),
20
+ ic_info: require('./iconsMaterialOutlinedCommunicationInfo.png'),
21
+ ic_warning_amber: require('./materialiconsOutlinedArrowsNavWarningAmber.png'),
22
+ ic_check: 'ic_check',
23
+ ic_uncheck: require('./componentsIOsButtonsButtonAdd.png'),
24
+ rn_ic_download: 'rn_ic_download',
25
+ scheduleEmpty: require('./illustrationsHomeRoutines.png'),
26
+ summary_icon1: require('./iconsMaterialOutlinedCalendarCalendarToday.png'),
27
+ summary_icon2: require('./iconsMaterialOutlinedTimeAccessTime.png'),
28
+ summary_icon3: require('./iconsMaterialOutlinedEditorInventory.png'),
29
+ energy_consumption_right: require('./iconsMaterialOutlinedArrowsNavArrowForwardIos.png'),
30
+ energy_consumption_chart: require('./iconsMaterialOutlinedOtherBarChart.png'),
31
+ energy_consumption_cash: require('./cash.png'),
32
+ energy_consumption_greenery: require('./iconsMaterialOutlinedOtherEnergySavingsLeaf.png'),
33
+ app_music_check: require('./iconsMaterialOutlinedArrowsNavCheck.png'),
34
+ co2Icon: require('./iconsMaterialOutlinedCommunicationInfo.png'),
35
+ download_icon: require('./iconsMaterialOutlinedEditorFileDownload.png'),
36
+ energy_consumption_empty: require('./illustrationsFeaturesLogs.png'),
37
+ rhythm_icon1: 'rhythm_icon1',
38
+ rhythm_icon2: 'rhythm_icon2',
39
+ rhythm_icon3: 'rhythm_icon3',
40
+ rhythm_icon4: 'rhythm_icon4',
41
+ color_temperature_wheel: 'color_temperature_wheel',
42
+ color_wheel: 'color_wheel',
43
+ scene_goodnight: 'scene_goodnight',
44
+ scene_reading: 'scene_reading',
45
+ scene_work: 'scene_work',
46
+ scene_leisure: 'scene_leisure',
47
+ scene_custom1: 'scene_custom1',
48
+ scene_custom2: 'scene_custom2',
49
+ biorhythm_plan_timer: 'biorhythm_plantimer',
50
+ add: 'add',
51
+ delete: 'delete',
52
+ icon_edit_scene: 'icon_edit_scene',
53
+ light_on: require('./light_on.png'),
54
+ light_off: require('./light_off.png'),
55
+ rn_image_contact_sensor_open: 'rn_image_contact_sensor_open',
56
+ rn_image_contact_sensor_close: 'rn_image_contact_sensor_close',
57
+ rn_image_motion_detected: 'rn_image_motion_detected',
58
+ rn_image_no_motion_detected: 'rn_image_no_motion_detected',
59
+ sensor_status: require('./iconsMaterialOutlinedOtherJoin.png'),
60
+ automation_status: require('./iconsMaterialOutlinedWheatherWbCloudy.png'),
61
+ ic_colorize: require('./ic_colorize.png'),
62
+ ic_mood_del: require('./ic_mood_del.png'),
63
+ ic_paint_bucket: require('./ic_paint_bucket.png'),
64
+ ic_text_field_input_error: require('./ic_text_field_input_error.png'),
65
+ ic_minus: require('./ic_minus.png'),
66
+ ic_plus: require('./ic_plus.png'),
67
+ ic_disabled_light: require('./ic_disabled_light.png'),
68
+ ic_top_arrow: require('./ic_top_arrow.png'),
69
+ offline_wifi: require('./offlineWifi.png'),
70
+ football_icon: require('./football_icon.png'),
71
+ leverkusen_icon: require('./leverkusen_icon.png'),
72
+ olympic_icon: require('./olympic.png'),
73
+ ic_refresh: require('./refresh.png')
74
74
  }
@@ -1,66 +1,66 @@
1
- interface SceneValueData {
2
- t: number;
3
- f: number;
4
- m: number;
5
- h: number;
6
- s: number;
7
- v: number;
8
- b: number;
9
- k: number;
10
- }
11
- export declare const musicEnabled: () => void;
12
- export declare const musicDisabled: () => void;
13
- export declare const isSendMusicEnabled: () => boolean;
14
- declare class Parser {
15
- format(value: string, len?: number): string;
16
- /**
17
- * @desc 将10进制的hsv转换成16进制的hhsssvvvv
18
- * 范围为h(0-360) s(0-1000) v(0-1000)
19
- * @param {Array} hsvArr - [h, s, v]
20
- *
21
- * @return {String} 'hhhhssssvvvv'
22
- *
23
- */
24
- encodeColorData(h: number, s: number, v: number): string;
25
- encodeSceneData(scenes: SceneValueData[], sceneNum: number): string;
26
- encodeControlData(m: number, h: number, s: number, v: number, b: number, k: number): string;
27
- /**
28
- * @desc 将16进制的hhsssvvv转换成10进制的hsv
29
- * 范围为h(0-360) s(0-1000) v(0-1000)
30
- * @param {String} hsvStr - encoded hsvStr (hhhhssssvvvv)
31
- *
32
- * @return {Array} [h, s, v]
33
- *
34
- */
35
- decodeColorData(byte: string): number[];
36
- decodeSceneData(byte: string): {
37
- sceneNum: number;
38
- scenes: {
39
- t: number;
40
- f: number;
41
- m: number;
42
- h: number;
43
- s: number;
44
- v: number;
45
- b: number;
46
- k: number;
47
- }[];
48
- };
49
- bright2Opacity(brightness: number, option?: {
50
- min: number;
51
- max: number;
52
- }): number;
53
- /**
54
- * 格式化hsv
55
- * 亮度将转化为透明度变化
56
- */
57
- hsv2rgba(hue: number, saturation: number, bright: number): string;
58
- brightKelvin2rgba(bright: number, kelvin: number): string;
59
- }
60
- export declare const ColorParser: Parser;
61
- export declare const calcPercent: (start: number, end: number, pos: number, min?: number) => number;
62
- export declare const calcPosition: (start: number, end: number, percent: number) => number;
63
- export declare const randomHsb: () => number[];
64
- export declare const arrayToObject: (arr: any[]) => any;
65
- export declare const isCapability: (id: number) => boolean;
66
- export {};
1
+ interface SceneValueData {
2
+ t: number;
3
+ f: number;
4
+ m: number;
5
+ h: number;
6
+ s: number;
7
+ v: number;
8
+ b: number;
9
+ k: number;
10
+ }
11
+ export declare const musicEnabled: () => void;
12
+ export declare const musicDisabled: () => void;
13
+ export declare const isSendMusicEnabled: () => boolean;
14
+ declare class Parser {
15
+ format(value: string, len?: number): string;
16
+ /**
17
+ * @desc 将10进制的hsv转换成16进制的hhsssvvvv
18
+ * 范围为h(0-360) s(0-1000) v(0-1000)
19
+ * @param {Array} hsvArr - [h, s, v]
20
+ *
21
+ * @return {String} 'hhhhssssvvvv'
22
+ *
23
+ */
24
+ encodeColorData(h: number, s: number, v: number): string;
25
+ encodeSceneData(scenes: SceneValueData[], sceneNum: number): string;
26
+ encodeControlData(m: number, h: number, s: number, v: number, b: number, k: number): string;
27
+ /**
28
+ * @desc 将16进制的hhsssvvv转换成10进制的hsv
29
+ * 范围为h(0-360) s(0-1000) v(0-1000)
30
+ * @param {String} hsvStr - encoded hsvStr (hhhhssssvvvv)
31
+ *
32
+ * @return {Array} [h, s, v]
33
+ *
34
+ */
35
+ decodeColorData(byte: string): number[];
36
+ decodeSceneData(byte: string): {
37
+ sceneNum: number;
38
+ scenes: {
39
+ t: number;
40
+ f: number;
41
+ m: number;
42
+ h: number;
43
+ s: number;
44
+ v: number;
45
+ b: number;
46
+ k: number;
47
+ }[];
48
+ };
49
+ bright2Opacity(brightness: number, option?: {
50
+ min: number;
51
+ max: number;
52
+ }): number;
53
+ /**
54
+ * 格式化hsv
55
+ * 亮度将转化为透明度变化
56
+ */
57
+ hsv2rgba(hue: number, saturation: number, bright: number): string;
58
+ brightKelvin2rgba(bright: number, kelvin: number): string;
59
+ }
60
+ export declare const ColorParser: Parser;
61
+ export declare const calcPercent: (start: number, end: number, pos: number, min?: number) => number;
62
+ export declare const calcPosition: (start: number, end: number, percent: number) => number;
63
+ export declare const randomHsb: () => number[];
64
+ export declare const arrayToObject: (arr: any[]) => any;
65
+ export declare const isCapability: (id: number) => boolean;
66
+ export {};
@@ -1,190 +1,190 @@
1
- import {TYSdk, Utils} from 'tuya-panel-kit'
2
- import ColorObj from 'color'
3
-
4
- interface SceneValueData {
5
- t: number; // 时长
6
- f: number; // 频率
7
- m: number; // 模式
8
- h: number; // 彩光色相
9
- s: number; // 彩光饱和度
10
- v: number; // 彩光亮度
11
- b: number; // 白光亮度
12
- k: number; // 白光色温
13
- }
14
-
15
- const {color: ColorUtils} = Utils.ColorUtils
16
-
17
- let sendMusicEnabled = false
18
-
19
- export const musicEnabled = () => {
20
- sendMusicEnabled = true
21
- }
22
- export const musicDisabled = () => {
23
- sendMusicEnabled = false
24
- }
25
-
26
- export const isSendMusicEnabled = () => {
27
- return sendMusicEnabled
28
- }
29
-
30
- class Parser {
31
- format(value: string, len = 2) {
32
- let v = `${value}`
33
- if (v.length < len) {
34
- v = '0'.repeat(len - v.length) + v
35
- } else {
36
- v = v.slice(0, len)
37
- }
38
- return v
39
- }
40
-
41
- /**
42
- * @desc 将10进制的hsv转换成16进制的hhsssvvvv
43
- * 范围为h(0-360) s(0-1000) v(0-1000)
44
- * @param {Array} hsvArr - [h, s, v]
45
- *
46
- * @return {String} 'hhhhssssvvvv'
47
- *
48
- */
49
- encodeColorData(h: number, s: number, v: number): string {
50
- let hue = h % 360
51
- hue = hue > 0 ? hue : h
52
- hue = hue < 0 ? 360 + hue : hue
53
-
54
- return [hue, s, v].reduce((curr: string, next: number) => {
55
- let hex = parseInt(`${next}`, 10).toString(16)
56
- hex = this.format(hex, 4)
57
- return curr + hex
58
- }, '')
59
- }
60
-
61
- // t: time; f: frequence; m: sceneMode=[0,1,2];
62
- // h: hue; s: saturation; v: lightValue; b: whiteBright; k: kelvin
63
- encodeSceneData(scenes: SceneValueData[], sceneNum: number) {
64
- const scenesValue = scenes.reduce((sum: string, seconde: SceneValueData) => {
65
- const {t, f, m, h = 0, s = 0, v = 0, b = 0, k = 0} = seconde
66
- const tfm = [t, f, m].reduce((total: string, next: number) => {
67
- let cur = parseInt(`${next}`, 10).toString(16)
68
- cur = this.format(cur, 2)
69
- return total + cur
70
- }, '')
71
- const hsvbk = [h, s, v, b, k].reduce((total: string, next: number) => {
72
- let cur = parseInt(`${next}`, 10).toString(16)
73
- cur = this.format(cur, 4)
74
- return total + cur
75
- }, '')
76
- return sum + tfm + hsvbk
77
- }, '')
78
- return this.format(`${sceneNum}`, 2) + scenesValue
79
- }
80
-
81
- // m: mode; h: hue; s: saturation; v: lightValue; b: whiteBright; k: kelvin;
82
- // mode: 0 - 跳变; 1 - 呼吸;
83
- encodeControlData(m: number, h: number, s: number, v: number, b: number, k: number) {
84
- const hsvbk = [h, s, v, b, k].reduce((total: string, next: number) => {
85
- let cur = parseInt(`${next}`, 10).toString(16)
86
- cur = this.format(cur, 4)
87
- return total + cur
88
- }, '')
89
- return m + hsvbk
90
- }
91
-
92
- /**
93
- * @desc 将16进制的hhsssvvv转换成10进制的hsv
94
- * 范围为h(0-360) s(0-1000) v(0-1000)
95
- * @param {String} hsvStr - encoded hsvStr (hhhhssssvvvv)
96
- *
97
- * @return {Array} [h, s, v]
98
- *
99
- */
100
- decodeColorData(byte: string) {
101
- if (!byte || byte.length !== 12) {
102
- return [0, 1000, 1000]
103
- }
104
- const b = byte.match(/[a-z\d]{4}/gi) || []
105
- return b.reduce((curr: number[], hex: string) => {
106
- curr.push(parseInt(hex, 16))
107
- return curr
108
- }, [])
109
- }
110
-
111
- decodeSceneData(byte: string) {
112
- if (!byte || (byte.length - 2) % 26 !== 0) {
113
- return {
114
- sceneNum: 0,
115
- scenes: [],
116
- }
117
- }
118
- const sceneNum = byte.slice(0, 2)
119
- const sceneValueArr = byte.slice(2).match(/[a-z\d]{26}/gi) || []
120
- const scenes = sceneValueArr.map((item: string) => {
121
- const tfm = item.slice(0, 6)
122
- const [t, f, m] = (tfm.match(/[a-z\d]{2}/gi) || []).map(v => parseInt(v, 16))
123
- const hsvbk = item.slice(6)
124
- const [h, s, v, b, k] = (hsvbk.match(/[a-z\d]{4}/gi) || []).map(d => parseInt(d, 16))
125
- return {t, f, m, h, s, v, b, k}
126
- })
127
- return {
128
- sceneNum: parseInt(sceneNum, 16),
129
- scenes,
130
- }
131
- }
132
-
133
- bright2Opacity(brightness: number, option = {min: 0.3, max: 1}) {
134
- const {min = 0.3, max = 1} = option
135
- return Math.round((min + ((brightness - 10) / (1000 - 10)) * (max - min)) * 100) / 100
136
- }
137
-
138
- /**
139
- * 格式化hsv
140
- * 亮度将转化为透明度变化
141
- */
142
- hsv2rgba(hue: number, saturation: number, bright: number) {
143
- let color = ColorUtils.hsb2hex(hue, saturation / 10, 100)
144
- color = new ColorObj(color).alpha(this.bright2Opacity(bright)).rgbString()
145
- return color
146
- }
147
-
148
- brightKelvin2rgba(bright: number, kelvin: number) {
149
- let color = ColorUtils.brightKelvin2rgb(1000, kelvin)
150
- color = new ColorObj(color).alpha(this.bright2Opacity(bright)).rgbString()
151
- return color
152
- }
153
- }
154
-
155
- export const ColorParser = new Parser()
156
-
157
- export const calcPercent = (start: number, end: number, pos: number, min = 0) => {
158
- const distance = end - start
159
- const diff = pos - start
160
- return (diff / distance) * (1 - min) + min
161
- }
162
-
163
- export const calcPosition = (start: number, end: number, percent: number) => {
164
- const distance = end - start
165
- return percent * distance + start
166
- }
167
-
168
- export const randomHsb = () => {
169
- const random = (min: number, max: number) => {
170
- let x = max
171
- let y = min
172
- if (x < y) {
173
- x = min
174
- y = max
175
- }
176
- return Math.random() * (x - y) + y
177
- }
178
- return [random(0, 360), 100, 100]
179
- }
180
-
181
- export const arrayToObject = (arr: any[]) => {
182
- if (arr.length === 0) {
183
- return {}
184
- }
185
- return Object.assign({}, ...arr)
186
- }
187
-
188
- export const isCapability = (id: number) => {
189
- return (TYSdk.devInfo.capability & (1 << id)) > 0 // eslint-disable-line no-bitwise
1
+ import {TYSdk, Utils} from 'tuya-panel-kit'
2
+ import ColorObj from 'color'
3
+
4
+ interface SceneValueData {
5
+ t: number; // 时长
6
+ f: number; // 频率
7
+ m: number; // 模式
8
+ h: number; // 彩光色相
9
+ s: number; // 彩光饱和度
10
+ v: number; // 彩光亮度
11
+ b: number; // 白光亮度
12
+ k: number; // 白光色温
13
+ }
14
+
15
+ const {color: ColorUtils} = Utils.ColorUtils
16
+
17
+ let sendMusicEnabled = false
18
+
19
+ export const musicEnabled = () => {
20
+ sendMusicEnabled = true
21
+ }
22
+ export const musicDisabled = () => {
23
+ sendMusicEnabled = false
24
+ }
25
+
26
+ export const isSendMusicEnabled = () => {
27
+ return sendMusicEnabled
28
+ }
29
+
30
+ class Parser {
31
+ format(value: string, len = 2) {
32
+ let v = `${value}`
33
+ if (v.length < len) {
34
+ v = '0'.repeat(len - v.length) + v
35
+ } else {
36
+ v = v.slice(0, len)
37
+ }
38
+ return v
39
+ }
40
+
41
+ /**
42
+ * @desc 将10进制的hsv转换成16进制的hhsssvvvv
43
+ * 范围为h(0-360) s(0-1000) v(0-1000)
44
+ * @param {Array} hsvArr - [h, s, v]
45
+ *
46
+ * @return {String} 'hhhhssssvvvv'
47
+ *
48
+ */
49
+ encodeColorData(h: number, s: number, v: number): string {
50
+ let hue = h % 360
51
+ hue = hue > 0 ? hue : h
52
+ hue = hue < 0 ? 360 + hue : hue
53
+
54
+ return [hue, s, v].reduce((curr: string, next: number) => {
55
+ let hex = parseInt(`${next}`, 10).toString(16)
56
+ hex = this.format(hex, 4)
57
+ return curr + hex
58
+ }, '')
59
+ }
60
+
61
+ // t: time; f: frequence; m: sceneMode=[0,1,2];
62
+ // h: hue; s: saturation; v: lightValue; b: whiteBright; k: kelvin
63
+ encodeSceneData(scenes: SceneValueData[], sceneNum: number) {
64
+ const scenesValue = scenes.reduce((sum: string, seconde: SceneValueData) => {
65
+ const {t, f, m, h = 0, s = 0, v = 0, b = 0, k = 0} = seconde
66
+ const tfm = [t, f, m].reduce((total: string, next: number) => {
67
+ let cur = parseInt(`${next}`, 10).toString(16)
68
+ cur = this.format(cur, 2)
69
+ return total + cur
70
+ }, '')
71
+ const hsvbk = [h, s, v, b, k].reduce((total: string, next: number) => {
72
+ let cur = parseInt(`${next}`, 10).toString(16)
73
+ cur = this.format(cur, 4)
74
+ return total + cur
75
+ }, '')
76
+ return sum + tfm + hsvbk
77
+ }, '')
78
+ return this.format(`${sceneNum}`, 2) + scenesValue
79
+ }
80
+
81
+ // m: mode; h: hue; s: saturation; v: lightValue; b: whiteBright; k: kelvin;
82
+ // mode: 0 - 跳变; 1 - 呼吸;
83
+ encodeControlData(m: number, h: number, s: number, v: number, b: number, k: number) {
84
+ const hsvbk = [h, s, v, b, k].reduce((total: string, next: number) => {
85
+ let cur = parseInt(`${next}`, 10).toString(16)
86
+ cur = this.format(cur, 4)
87
+ return total + cur
88
+ }, '')
89
+ return m + hsvbk
90
+ }
91
+
92
+ /**
93
+ * @desc 将16进制的hhsssvvv转换成10进制的hsv
94
+ * 范围为h(0-360) s(0-1000) v(0-1000)
95
+ * @param {String} hsvStr - encoded hsvStr (hhhhssssvvvv)
96
+ *
97
+ * @return {Array} [h, s, v]
98
+ *
99
+ */
100
+ decodeColorData(byte: string) {
101
+ if (!byte || byte.length !== 12) {
102
+ return [0, 1000, 1000]
103
+ }
104
+ const b = byte.match(/[a-z\d]{4}/gi) || []
105
+ return b.reduce((curr: number[], hex: string) => {
106
+ curr.push(parseInt(hex, 16))
107
+ return curr
108
+ }, [])
109
+ }
110
+
111
+ decodeSceneData(byte: string) {
112
+ if (!byte || (byte.length - 2) % 26 !== 0) {
113
+ return {
114
+ sceneNum: 0,
115
+ scenes: [],
116
+ }
117
+ }
118
+ const sceneNum = byte.slice(0, 2)
119
+ const sceneValueArr = byte.slice(2).match(/[a-z\d]{26}/gi) || []
120
+ const scenes = sceneValueArr.map((item: string) => {
121
+ const tfm = item.slice(0, 6)
122
+ const [t, f, m] = (tfm.match(/[a-z\d]{2}/gi) || []).map(v => parseInt(v, 16))
123
+ const hsvbk = item.slice(6)
124
+ const [h, s, v, b, k] = (hsvbk.match(/[a-z\d]{4}/gi) || []).map(d => parseInt(d, 16))
125
+ return {t, f, m, h, s, v, b, k}
126
+ })
127
+ return {
128
+ sceneNum: parseInt(sceneNum, 16),
129
+ scenes,
130
+ }
131
+ }
132
+
133
+ bright2Opacity(brightness: number, option = {min: 0.3, max: 1}) {
134
+ const {min = 0.3, max = 1} = option
135
+ return Math.round((min + ((brightness - 10) / (1000 - 10)) * (max - min)) * 100) / 100
136
+ }
137
+
138
+ /**
139
+ * 格式化hsv
140
+ * 亮度将转化为透明度变化
141
+ */
142
+ hsv2rgba(hue: number, saturation: number, bright: number) {
143
+ let color = ColorUtils.hsb2hex(hue, saturation / 10, 100)
144
+ color = new ColorObj(color).alpha(this.bright2Opacity(bright)).rgbString()
145
+ return color
146
+ }
147
+
148
+ brightKelvin2rgba(bright: number, kelvin: number) {
149
+ let color = ColorUtils.brightKelvin2rgb(1000, kelvin)
150
+ color = new ColorObj(color).alpha(this.bright2Opacity(bright)).rgbString()
151
+ return color
152
+ }
153
+ }
154
+
155
+ export const ColorParser = new Parser()
156
+
157
+ export const calcPercent = (start: number, end: number, pos: number, min = 0) => {
158
+ const distance = end - start
159
+ const diff = pos - start
160
+ return (diff / distance) * (1 - min) + min
161
+ }
162
+
163
+ export const calcPosition = (start: number, end: number, percent: number) => {
164
+ const distance = end - start
165
+ return percent * distance + start
166
+ }
167
+
168
+ export const randomHsb = () => {
169
+ const random = (min: number, max: number) => {
170
+ let x = max
171
+ let y = min
172
+ if (x < y) {
173
+ x = min
174
+ y = max
175
+ }
176
+ return Math.random() * (x - y) + y
177
+ }
178
+ return [random(0, 360), 100, 100]
179
+ }
180
+
181
+ export const arrayToObject = (arr: any[]) => {
182
+ if (arr.length === 0) {
183
+ return {}
184
+ }
185
+ return Object.assign({}, ...arr)
186
+ }
187
+
188
+ export const isCapability = (id: number) => {
189
+ return (TYSdk.devInfo.capability & (1 << id)) > 0 // eslint-disable-line no-bitwise
190
190
  }