@iobroker/adapter-react-v5 7.0.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/Components/404.d.ts +3 -2
  2. package/Components/404.js +16 -15
  3. package/Components/ColorPicker.d.ts +22 -8
  4. package/Components/ColorPicker.js +34 -17
  5. package/Components/ComplexCron.js +24 -24
  6. package/Components/CopyToClipboard.d.ts +10 -1
  7. package/Components/CopyToClipboard.js +17 -8
  8. package/Components/CustomModal.d.ts +1 -1
  9. package/Components/CustomModal.js +8 -8
  10. package/Components/FileBrowser.d.ts +11 -11
  11. package/Components/FileBrowser.js +173 -164
  12. package/Components/FileViewer.js +34 -23
  13. package/Components/Icon.d.ts +16 -2
  14. package/Components/Icon.js +19 -8
  15. package/Components/IconPicker.js +10 -14
  16. package/Components/IconSelector.d.ts +1 -1
  17. package/Components/IconSelector.js +64 -74
  18. package/Components/Image.d.ts +8 -4
  19. package/Components/Image.js +13 -32
  20. package/Components/Loader.d.ts +2 -2
  21. package/Components/Loader.js +244 -241
  22. package/Components/Loaders/MV.d.ts +6 -1
  23. package/Components/Loaders/MV.js +23 -7
  24. package/Components/Loaders/PT.d.ts +7 -2
  25. package/Components/Loaders/PT.js +123 -110
  26. package/Components/Loaders/Vendor.d.ts +2 -2
  27. package/Components/Loaders/Vendor.js +22 -14
  28. package/Components/Logo.js +16 -18
  29. package/Components/MDUtils.d.ts +1 -1
  30. package/Components/MDUtils.js +8 -4
  31. package/Components/ObjectBrowser.d.ts +49 -38
  32. package/Components/ObjectBrowser.js +757 -494
  33. package/Components/Router.d.ts +1 -3
  34. package/Components/Router.js +3 -1
  35. package/Components/SaveCloseButtons.d.ts +3 -3
  36. package/Components/SaveCloseButtons.js +3 -3
  37. package/Components/Schedule.d.ts +15 -15
  38. package/Components/Schedule.js +177 -154
  39. package/Components/SelectWithIcon.d.ts +2 -2
  40. package/Components/SelectWithIcon.js +45 -34
  41. package/Components/SimpleCron/index.js +83 -43
  42. package/Components/TabContainer.js +2 -2
  43. package/Components/TabContent.js +1 -1
  44. package/Components/TabHeader.js +1 -1
  45. package/Components/TableResize.d.ts +2 -2
  46. package/Components/TableResize.js +5 -5
  47. package/Components/TextWithIcon.d.ts +1 -1
  48. package/Components/TextWithIcon.js +10 -8
  49. package/Components/ToggleThemeMenu.d.ts +2 -2
  50. package/Components/ToggleThemeMenu.js +3 -3
  51. package/Components/TreeTable.d.ts +18 -18
  52. package/Components/TreeTable.js +76 -72
  53. package/Components/UploadImage.d.ts +2 -2
  54. package/Components/UploadImage.js +330 -326
  55. package/Components/Utils.d.ts +42 -22
  56. package/Components/Utils.js +66 -65
  57. package/Components/withWidth.d.ts +2 -2
  58. package/Components/withWidth.js +10 -6
  59. package/Dialogs/ComplexCron.d.ts +2 -2
  60. package/Dialogs/ComplexCron.js +3 -3
  61. package/Dialogs/Confirm.d.ts +4 -4
  62. package/Dialogs/Confirm.js +18 -8
  63. package/Dialogs/Cron.d.ts +3 -3
  64. package/Dialogs/Cron.js +21 -17
  65. package/Dialogs/Error.d.ts +3 -3
  66. package/Dialogs/Error.js +6 -4
  67. package/Dialogs/Message.d.ts +3 -3
  68. package/Dialogs/Message.js +6 -4
  69. package/Dialogs/SelectFile.d.ts +4 -4
  70. package/Dialogs/SelectFile.js +6 -4
  71. package/Dialogs/SelectID.d.ts +12 -10
  72. package/Dialogs/SelectID.js +12 -8
  73. package/Dialogs/SimpleCron.d.ts +2 -2
  74. package/Dialogs/SimpleCron.js +2 -2
  75. package/Dialogs/TextInput.d.ts +2 -2
  76. package/Dialogs/TextInput.js +3 -3
  77. package/GenericApp.d.ts +19 -13
  78. package/GenericApp.js +177 -134
  79. package/LICENSE +22 -22
  80. package/LegacyConnection.d.ts +240 -248
  81. package/LegacyConnection.js +500 -525
  82. package/Prompt.js +7 -7
  83. package/README.md +1239 -1166
  84. package/Theme.d.ts +1 -1
  85. package/Theme.js +9 -12
  86. package/assets/devices.json +1 -0
  87. package/assets/lamp_ceiling.svg +8 -8
  88. package/assets/lamp_table.svg +7 -7
  89. package/assets/no_icon.svg +9 -9
  90. package/assets/rooms.json +1 -0
  91. package/craco-module-federation.js +62 -71
  92. package/i18n/de.json +434 -431
  93. package/i18n/en.json +434 -431
  94. package/i18n/es.json +434 -431
  95. package/i18n/fr.json +434 -431
  96. package/i18n/it.json +434 -431
  97. package/i18n/nl.json +434 -431
  98. package/i18n/pl.json +434 -431
  99. package/i18n/pt.json +434 -431
  100. package/i18n/ru.json +434 -431
  101. package/i18n/uk.json +434 -431
  102. package/i18n/zh-cn.json +434 -431
  103. package/i18n.d.ts +26 -19
  104. package/i18n.js +28 -22
  105. package/icons/IconAdapter.js +2 -2
  106. package/icons/IconAlias.js +2 -2
  107. package/icons/IconChannel.js +2 -2
  108. package/icons/IconClearFilter.js +2 -2
  109. package/icons/IconClosed.js +2 -2
  110. package/icons/IconCopy.js +2 -2
  111. package/icons/IconDevice.js +2 -2
  112. package/icons/IconDocument.js +2 -2
  113. package/icons/IconDocumentReadOnly.js +2 -2
  114. package/icons/IconExpert.js +2 -2
  115. package/icons/IconFx.js +2 -2
  116. package/icons/IconInstance.js +2 -2
  117. package/icons/IconLogout.js +2 -2
  118. package/icons/IconNoIcon.js +2 -2
  119. package/icons/IconOpen.d.ts +2 -2
  120. package/icons/IconOpen.js +2 -2
  121. package/icons/IconProps.d.ts +4 -3
  122. package/icons/IconState.d.ts +2 -2
  123. package/icons/IconState.js +2 -2
  124. package/index.css +56 -55
  125. package/modulefederation.admin.config.js +31 -31
  126. package/package.json +5 -5
  127. package/src/AdminConnection.tsx +3 -3
  128. package/src/Components/404.tsx +122 -121
  129. package/src/Components/ColorPicker.tsx +343 -315
  130. package/src/Components/ComplexCron.tsx +544 -507
  131. package/src/Components/CopyToClipboard.tsx +178 -165
  132. package/src/Components/CustomModal.tsx +170 -163
  133. package/src/Components/FileBrowser.tsx +2550 -2414
  134. package/src/Components/FileViewer.tsx +412 -393
  135. package/src/Components/Icon.tsx +238 -210
  136. package/src/Components/IconPicker.tsx +165 -149
  137. package/src/Components/IconSelector.tsx +2220 -2202
  138. package/src/Components/Image.tsx +193 -176
  139. package/src/Components/Loader.tsx +328 -304
  140. package/src/Components/Logo.tsx +176 -166
  141. package/src/Components/MDUtils.tsx +104 -100
  142. package/src/Components/ObjectBrowser.tsx +8935 -8032
  143. package/src/Components/Router.tsx +90 -90
  144. package/src/Components/SaveCloseButtons.tsx +117 -113
  145. package/src/Components/Schedule.tsx +1962 -1724
  146. package/src/Components/SelectWithIcon.tsx +239 -197
  147. package/src/Components/TabContainer.tsx +57 -55
  148. package/src/Components/TabContent.tsx +38 -37
  149. package/src/Components/TabHeader.tsx +20 -19
  150. package/src/Components/TableResize.tsx +274 -259
  151. package/src/Components/TextWithIcon.tsx +159 -148
  152. package/src/Components/ToggleThemeMenu.tsx +52 -34
  153. package/src/Components/TreeTable.tsx +1002 -919
  154. package/src/Components/UploadImage.tsx +631 -599
  155. package/src/Components/Utils.tsx +1802 -1794
  156. package/src/Components/loader.css +231 -222
  157. package/src/Components/withWidth.tsx +32 -21
  158. package/src/Connection.tsx +5 -7
  159. package/src/Dialogs/ComplexCron.tsx +123 -129
  160. package/src/Dialogs/Confirm.tsx +185 -162
  161. package/src/Dialogs/Cron.tsx +192 -182
  162. package/src/Dialogs/Error.tsx +67 -72
  163. package/src/Dialogs/Message.tsx +73 -71
  164. package/src/Dialogs/SelectFile.tsx +280 -270
  165. package/src/Dialogs/SelectID.tsx +310 -298
  166. package/src/Dialogs/SimpleCron.tsx +100 -100
  167. package/src/Dialogs/TextInput.tsx +99 -107
  168. package/src/GenericApp.tsx +1076 -976
  169. package/src/LegacyConnection.tsx +3719 -3589
  170. package/src/Prompt.tsx +22 -20
  171. package/src/Theme.tsx +472 -479
  172. package/src/icons/IconAdapter.tsx +22 -20
  173. package/src/icons/IconAlias.tsx +22 -20
  174. package/src/icons/IconChannel.tsx +60 -21
  175. package/src/icons/IconClearFilter.tsx +24 -22
  176. package/src/icons/IconClosed.tsx +22 -17
  177. package/src/icons/IconCopy.tsx +21 -16
  178. package/src/icons/IconDevice.tsx +126 -27
  179. package/src/icons/IconDocument.tsx +22 -17
  180. package/src/icons/IconDocumentReadOnly.tsx +27 -18
  181. package/src/icons/IconExpert.tsx +26 -18
  182. package/src/icons/IconFx.tsx +38 -36
  183. package/src/icons/IconInstance.tsx +22 -20
  184. package/src/icons/IconLogout.tsx +32 -30
  185. package/src/icons/IconNoIcon.tsx +21 -19
  186. package/src/icons/IconOpen.tsx +22 -17
  187. package/src/icons/IconProps.tsx +16 -15
  188. package/src/icons/IconState.tsx +38 -17
  189. package/src/index.css +56 -55
  190. package/tasks.js +91 -0
  191. package/types.d.ts +141 -134
  192. package/Components/Loaders/PT.css +0 -109
  193. package/Components/Loaders/Vendor.css +0 -13
  194. package/Components/loader.css +0 -222
  195. package/Components/types.d.ts +0 -82
  196. package/assets/devices/Alarm Systems.svg +0 -19
  197. package/assets/devices/Amplifier.svg +0 -22
  198. package/assets/devices/Awnings.svg +0 -5
  199. package/assets/devices/Battery Status.svg +0 -5
  200. package/assets/devices/Ceiling Spotlights.svg +0 -16
  201. package/assets/devices/Chandelier.svg +0 -7
  202. package/assets/devices/Climate.svg +0 -12
  203. package/assets/devices/Coffee Makers.svg +0 -6
  204. package/assets/devices/Cold Water.svg +0 -31
  205. package/assets/devices/Computer.svg +0 -21
  206. package/assets/devices/Consumption.svg +0 -8
  207. package/assets/devices/Curtains.svg +0 -43
  208. package/assets/devices/Dishwashers.svg +0 -12
  209. package/assets/devices/Doors.svg +0 -6
  210. package/assets/devices/Doorstep.svg +0 -35
  211. package/assets/devices/Dryer.svg +0 -14
  212. package/assets/devices/Fan.svg +0 -20
  213. package/assets/devices/Floor Lamps.svg +0 -5
  214. package/assets/devices/Garage Doors.svg +0 -9
  215. package/assets/devices/Gates.svg +0 -32
  216. package/assets/devices/Hairdryer.svg +0 -23
  217. package/assets/devices/Handle.svg +0 -6
  218. package/assets/devices/Hanging Lamps.svg +0 -9
  219. package/assets/devices/Heater.svg +0 -44
  220. package/assets/devices/Hoods.svg +0 -12
  221. package/assets/devices/Hot Water.svg +0 -10
  222. package/assets/devices/Humidity.svg +0 -41
  223. package/assets/devices/Iron.svg +0 -5
  224. package/assets/devices/Irrigation.svg +0 -23
  225. package/assets/devices/Led Strip.svg +0 -31
  226. package/assets/devices/Light.svg +0 -30
  227. package/assets/devices/Lightings.svg +0 -46
  228. package/assets/devices/Lock.svg +0 -19
  229. package/assets/devices/Louvre.svg +0 -7
  230. package/assets/devices/Mowing Machine.svg +0 -9
  231. package/assets/devices/Music.svg +0 -13
  232. package/assets/devices/Outdoor Blinds.svg +0 -7
  233. package/assets/devices/People.svg +0 -19
  234. package/assets/devices/Pool.svg +0 -8
  235. package/assets/devices/Power Consumption.svg +0 -13
  236. package/assets/devices/Printer.svg +0 -10
  237. package/assets/devices/Pump.svg +0 -10
  238. package/assets/devices/Receiver.svg +0 -19
  239. package/assets/devices/Sconces.svg +0 -10
  240. package/assets/devices/Security.svg +0 -34
  241. package/assets/devices/Shading.svg +0 -5
  242. package/assets/devices/Shutters.svg +0 -11
  243. package/assets/devices/SmokeDetector.svg +0 -13
  244. package/assets/devices/Sockets.svg +0 -13
  245. package/assets/devices/Speaker.svg +0 -35
  246. package/assets/devices/Stove.svg +0 -12
  247. package/assets/devices/Table Lamps.svg +0 -12
  248. package/assets/devices/Temperature Sensors.svg +0 -28
  249. package/assets/devices/Tv.svg +0 -8
  250. package/assets/devices/Vacuum Cleaner.svg +0 -16
  251. package/assets/devices/Ventilation.svg +0 -12
  252. package/assets/devices/Washing Machines.svg +0 -16
  253. package/assets/devices/Water Consumption.svg +0 -6
  254. package/assets/devices/Water Heater.svg +0 -8
  255. package/assets/devices/Water.svg +0 -40
  256. package/assets/devices/Weather.svg +0 -28
  257. package/assets/devices/Window.svg +0 -8
  258. package/assets/rooms/Anteroom.svg +0 -53
  259. package/assets/rooms/Attic.svg +0 -21
  260. package/assets/rooms/Balcony.svg +0 -13
  261. package/assets/rooms/Barn.svg +0 -6
  262. package/assets/rooms/Basement.svg +0 -5
  263. package/assets/rooms/Bathroom.svg +0 -38
  264. package/assets/rooms/Bedroom.svg +0 -5
  265. package/assets/rooms/Boiler Room.svg +0 -13
  266. package/assets/rooms/Carport.svg +0 -17
  267. package/assets/rooms/Cellar.svg +0 -89
  268. package/assets/rooms/Chamber.svg +0 -9
  269. package/assets/rooms/Corridor.svg +0 -53
  270. package/assets/rooms/Dining Area.svg +0 -37
  271. package/assets/rooms/Dining Room.svg +0 -37
  272. package/assets/rooms/Dining.svg +0 -37
  273. package/assets/rooms/Dressing Room.svg +0 -5
  274. package/assets/rooms/Driveway.svg +0 -15
  275. package/assets/rooms/Entrance.svg +0 -44
  276. package/assets/rooms/Equipment Room.svg +0 -15
  277. package/assets/rooms/Front Yard.svg +0 -64
  278. package/assets/rooms/Gallery.svg +0 -14
  279. package/assets/rooms/Garage.svg +0 -20
  280. package/assets/rooms/Garden.svg +0 -13
  281. package/assets/rooms/Ground Floor.svg +0 -95
  282. package/assets/rooms/Guest Bathroom.svg +0 -33
  283. package/assets/rooms/Guest Room.svg +0 -5
  284. package/assets/rooms/Gym.svg +0 -5
  285. package/assets/rooms/Hall.svg +0 -19
  286. package/assets/rooms/Home Theater.svg +0 -8
  287. package/assets/rooms/Kitchen.svg +0 -18
  288. package/assets/rooms/Laundry Room.svg +0 -12
  289. package/assets/rooms/Living Area.svg +0 -11
  290. package/assets/rooms/Living Room.svg +0 -10
  291. package/assets/rooms/Locker Room.svg +0 -17
  292. package/assets/rooms/Nursery.svg +0 -5
  293. package/assets/rooms/Office.svg +0 -8
  294. package/assets/rooms/Outdoors.svg +0 -7
  295. package/assets/rooms/Playroom.svg +0 -6
  296. package/assets/rooms/Pool.svg +0 -8
  297. package/assets/rooms/Rear Wall.svg +0 -30
  298. package/assets/rooms/Second Floor.svg +0 -95
  299. package/assets/rooms/Shed.svg +0 -16
  300. package/assets/rooms/Sleeping Area.svg +0 -22
  301. package/assets/rooms/Stairway.svg +0 -5
  302. package/assets/rooms/Stairwell.svg +0 -15
  303. package/assets/rooms/Storeroom.svg +0 -5
  304. package/assets/rooms/Summer House.svg +0 -27
  305. package/assets/rooms/Swimming Pool.svg +0 -21
  306. package/assets/rooms/Terrace.svg +0 -7
  307. package/assets/rooms/Toilet.svg +0 -10
  308. package/assets/rooms/Upstairs.svg +0 -6
  309. package/assets/rooms/Wardrobe.svg +0 -60
  310. package/assets/rooms/Washroom.svg +0 -20
  311. package/assets/rooms/Wc.svg +0 -10
  312. package/assets/rooms/Windscreen.svg +0 -60
  313. package/assets/rooms/Workshop.svg +0 -23
  314. package/assets/rooms/Workspace.svg +0 -8
@@ -1,304 +1,328 @@
1
- /**
2
- * Copyright 2018-2024 Denis Haev (bluefox) <dogafox@gmail.com>
3
- *
4
- * MIT License
5
- *
6
- * */
7
- import React, { useEffect } from 'react';
8
- import { ThemeName, ThemeType } from '../types';
9
- // import './loader.css'
10
-
11
- declare global {
12
- interface Window {
13
- loadingBackgroundImage: undefined | string;
14
- loadingBackgroundColor: undefined | string;
15
- loadingHideLogo: undefined | 'true';
16
- }
17
- }
18
-
19
- const loaderStyles = `
20
- /**
21
- * Copyright 2018-2024 Denis Haev (bluefox) <dogafox@gmail.com>
22
- *
23
- * MIT License
24
- *
25
- **/
26
-
27
- .logo-background-light, .logo-background-colored {
28
- background: white;
29
- }
30
- .logo-background-dark, .logo-background-blue {
31
- background: black;
32
- }
33
- .logo-div {
34
- position: absolute;
35
- top: 50%;
36
- left: 50%;
37
- -ms-transform: translateX(-50%) translateY(-50%);
38
- -webkit-transform: translate(-50%,-50%);
39
- transform: translate(-50%,-50%);
40
- overflow: hidden;
41
- border-radius: 50%;
42
- z-index: 2;
43
- }
44
- .logo-border {
45
- /*border-color: #164477;*/
46
- border-top-color: #3399CC;
47
- border-left-color: #164477;
48
- border-bottom-color: #164477;
49
- border-right-color: #164477;
50
- border-radius: 50%;
51
- border-style: solid;
52
- box-sizing: border-box;
53
- width: 100%;
54
- height: 100%;
55
- position: absolute;
56
- }
57
- .logo-top {
58
- position: absolute;
59
- width: 4.5%;
60
- height: 16%;
61
- top: 0;
62
- z-index: 2;
63
- }
64
- .logo-i {
65
- position: absolute;
66
- width: 14.5%;
67
- height: 60%;
68
- top: 20%;
69
- left: 42%;
70
- background: #3399CC;
71
- }
72
- .logo-i-top {
73
- position: absolute;
74
- width: 14.5%;
75
- height: 4%;
76
- left: 42%;
77
- background: #3399CC;
78
- border-radius: 100%;
79
- }
80
- .logo-back {
81
- width: 100%;
82
- height: 100%;
83
- z-index: 0;
84
- overflow: hidden;
85
- }
86
- @keyframes logo-grow {
87
- 0% {
88
- width: 230px;
89
- height: 230px;
90
- transform: translate(-50%,-50%) scale(1);
91
- opacity: 1
92
- }
93
- 99% {
94
- width: 230px;
95
- height: 230px;
96
- transform: translate(-50%,-50%) scale(10);
97
- opacity: 0;
98
- }
99
- 100% {
100
- width: 0;
101
- height: 0;
102
- opacity: 0;
103
- }
104
- }
105
- @keyframes logo-spin { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } }
106
- @keyframes logo-color-inside-light {
107
- 0% {
108
- background: #FEFEFE;
109
- }
110
- 100% {
111
- background: #3399CC;
112
- }
113
- }
114
- @keyframes logo-color-inside-dark {
115
- 0% {
116
- background: #030303;
117
- }
118
- 100% {
119
- background: #3399CC;
120
- }
121
- }
122
- @keyframes logo-color-inside-colored {
123
- 0% {
124
- background: #FEFEFE;
125
- }
126
- 100% {
127
- background: #3399CC;
128
- }
129
- }
130
- @keyframes logo-color-inside-blue {
131
- 0% {
132
- background: #030303;
133
- }
134
- 100% {
135
- background: #3399CC;
136
- }
137
- }
138
-
139
- @keyframes logo-color-outside-light {
140
- 0% {
141
- border-color: #FEFEFE;
142
- }
143
- 100% {
144
- border-top-color: #3399CC;
145
- border-left-color: #164477;
146
- border-bottom-color: #164477;
147
- border-right-color: #164477;
148
- }
149
- }
150
- @keyframes logo-color-outside-dark {
151
- 0% {
152
- border-color: #040404;
153
- }
154
- 100% {
155
- border-top-color: #3399CC;
156
- border-left-color: #164477;
157
- border-bottom-color: #164477;
158
- border-right-color: #164477;
159
- }
160
- }
161
- @keyframes logo-color-outside-colored {
162
- 0% {
163
- border-color: #FEFEFE;
164
- }
165
- 100% {
166
- border-top-color: #3399CC;
167
- border-left-color: #164477;
168
- border-bottom-color: #164477;
169
- border-right-color: #164477;
170
- }
171
- }
172
- @keyframes logo-color-outside-blue {
173
- 0% {
174
- border-color: #040404;
175
- }
176
- 100% {
177
- border-top-color: #3399CC;
178
- border-left-color: #164477;
179
- border-bottom-color: #164477;
180
- border-right-color: #164477;
181
- }
182
- }
183
-
184
- .logo-animate-wait {
185
- animation: logo-color-outside 1.5s, logo-spin 1.5s linear infinite;
186
- }
187
-
188
- .logo-animate-grow-light {
189
- background: #DDD;
190
- }
191
- .logo-animate-grow-dark {
192
- background: #1d1d1d;
193
- }
194
- .logo-animate-grow-colored {
195
- background: #DDD;
196
- }
197
- .logo-animate-grow-blue {
198
- background: #1d1d1d;
199
- }
200
-
201
- .logo-animate-grow {
202
- display: inline-block;
203
- text-align: center;
204
- z-index: 1;
205
- top: 50%;
206
- left: 50%;
207
- -ms-transform: translateX(-50%) translateY(-50%);
208
- -webkit-transform: translate(-50%,-50%);
209
- transform: translate(-50%,-50%);
210
- width: 245px;
211
- height: 245px;
212
- border-radius: 50%;
213
- position: absolute;
214
- animation: logo-grow 1s 1 ease forwards;
215
- }
216
-
217
- .logo-animate-color-inside-light {
218
- animation: logo-color-inside-light 2.5s;
219
- }
220
- .logo-animate-color-inside-dark {
221
- animation: logo-color-inside-dark 2.5s;
222
- }
223
- .logo-animate-color-inside-colored {
224
- animation: logo-color-inside-colored 2.5s;
225
- }
226
- .logo-animate-color-inside-blue {
227
- animation: logo-color-inside-blue 2.5s;
228
- }
229
-
230
- .logo-animate-color-outside-light {
231
- animation: logo-color-outside-light 1.5s;
232
- }
233
- .logo-animate-color-outside-dark {
234
- animation: logo-color-outside-dark 1.5s;
235
- }
236
- .logo-animate-color-outside-colored {
237
- animation: logo-color-outside-colored 1.5s;
238
- }
239
- .logo-animate-color-outside-blue {
240
- animation: logo-color-outside-blue 1.5s;
241
- }
242
- `;
243
-
244
- interface LoaderProps {
245
- /** The size in pixels of this loader. */
246
- size?: number;
247
- /** The chosen theme type. */
248
- themeType?: ThemeType;
249
- /** Theme name */
250
- themeName?: ThemeName;
251
- /** @deprecated Theme name. use themeName instead */
252
- theme?: ThemeName;
253
- /** Background color */
254
- backgroundColor?: string;
255
- /** Background image URL */
256
- backgroundImage?: string;
257
- }
258
-
259
- function Loader(props: LoaderProps) {
260
- useEffect(() => {
261
- if (!window.document.getElementById('loader-iobroker-component')) {
262
- const style = window.document.createElement('style');
263
- style.setAttribute('id', 'loader-iobroker-component');
264
- style.innerHTML = loaderStyles;
265
- window.document.head.appendChild(style);
266
- }
267
- }, []);
268
-
269
- const size = props.size || 234;
270
- const theme = props.themeName || props.theme || props.themeType || 'light';
271
- return <div
272
- className={`logo-back logo-background-${theme}`}
273
- style={{
274
- backgroundImage: (props.backgroundImage && props.backgroundImage !== '@@loginBackgroundImage@@') ? props.backgroundImage :
275
- (window.loadingBackgroundImage && window.loadingBackgroundImage !== '@@loginBackgroundImage@@' ? `url(${window.loadingBackgroundImage})` : undefined),
276
- backgroundColor: (props.backgroundColor && props.backgroundColor !== '@@loginBackgroundColor@@') ? props.backgroundColor :
277
- (window.loadingBackgroundColor && window.loadingBackgroundColor !== '@@loginBackgroundColor@@' ? window.loadingBackgroundColor : undefined),
278
- backgroundSize: 'cover',
279
- }}
280
- >
281
- {window.loadingHideLogo === 'true' ?
282
- null
283
- :
284
- <>
285
- <div className="logo-div" style={{ width: size, height: size }}>
286
- <div className={`logo-top logo-background-${theme}`} style={{ left: '37%' }} />
287
- <div className={`logo-top logo-background-${theme}`} style={{ left: '57%' }} />
288
- <div
289
- className={`logo-border logo-background-${theme} logo-animate-wait`}
290
- style={{ borderWidth: size * 0.132 }}
291
- />
292
- <div className={`logo-i logo-animate-color-inside-${theme}`} />
293
- <div className={`logo-i-top logo-animate-color-inside-${theme}`} style={{ top: '18%' }} />
294
- <div className={`logo-i-top logo-animate-color-inside-${theme}`} style={{ bottom: '18%' }} />
295
- </div>
296
- <div
297
- className={`logo-animate-grow logo-animate-grow-${theme}`}
298
- style={{ width: size + 11, height: size + 11 }}
299
- />
300
- </>}
301
- </div>;
302
- }
303
-
304
- export default Loader;
1
+ /**
2
+ * Copyright 2018-2024 Denis Haev (bluefox) <dogafox@gmail.com>
3
+ *
4
+ * MIT License
5
+ *
6
+ */
7
+ import React, { useEffect } from 'react';
8
+ import type { ThemeName, ThemeType } from '../types';
9
+ // import './loader.css'
10
+
11
+ declare global {
12
+ interface Window {
13
+ loadingBackgroundImage: undefined | string;
14
+ loadingBackgroundColor: undefined | string;
15
+ loadingHideLogo: undefined | 'true';
16
+ }
17
+ }
18
+
19
+ const loaderStyles = `
20
+ /**
21
+ * Copyright 2018-2024 Denis Haev (bluefox) <dogafox@gmail.com>
22
+ *
23
+ * MIT License
24
+ *
25
+ **/
26
+
27
+ .logo-background-light, .logo-background-colored {
28
+ background: white;
29
+ }
30
+ .logo-background-dark, .logo-background-blue {
31
+ background: black;
32
+ }
33
+ .logo-div {
34
+ position: absolute;
35
+ top: 50%;
36
+ left: 50%;
37
+ -ms-transform: translateX(-50%) translateY(-50%);
38
+ -webkit-transform: translate(-50%,-50%);
39
+ transform: translate(-50%,-50%);
40
+ overflow: hidden;
41
+ border-radius: 50%;
42
+ z-index: 2;
43
+ }
44
+ .logo-border {
45
+ /*border-color: #164477;*/
46
+ border-top-color: #3399CC;
47
+ border-left-color: #164477;
48
+ border-bottom-color: #164477;
49
+ border-right-color: #164477;
50
+ border-radius: 50%;
51
+ border-style: solid;
52
+ box-sizing: border-box;
53
+ width: 100%;
54
+ height: 100%;
55
+ position: absolute;
56
+ }
57
+ .logo-top {
58
+ position: absolute;
59
+ width: 4.5%;
60
+ height: 16%;
61
+ top: 0;
62
+ z-index: 2;
63
+ }
64
+ .logo-i {
65
+ position: absolute;
66
+ width: 14.5%;
67
+ height: 60%;
68
+ top: 20%;
69
+ left: 42%;
70
+ background: #3399CC;
71
+ }
72
+ .logo-i-top {
73
+ position: absolute;
74
+ width: 14.5%;
75
+ height: 4%;
76
+ left: 42%;
77
+ background: #3399CC;
78
+ border-radius: 100%;
79
+ }
80
+ .logo-back {
81
+ width: 100%;
82
+ height: 100%;
83
+ z-index: 0;
84
+ overflow: hidden;
85
+ }
86
+ @keyframes logo-grow {
87
+ 0% {
88
+ width: 230px;
89
+ height: 230px;
90
+ transform: translate(-50%,-50%) scale(1);
91
+ opacity: 1
92
+ }
93
+ 99% {
94
+ width: 230px;
95
+ height: 230px;
96
+ transform: translate(-50%,-50%) scale(10);
97
+ opacity: 0;
98
+ }
99
+ 100% {
100
+ width: 0;
101
+ height: 0;
102
+ opacity: 0;
103
+ }
104
+ }
105
+ @keyframes logo-spin { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } }
106
+ @keyframes logo-color-inside-light {
107
+ 0% {
108
+ background: #FEFEFE;
109
+ }
110
+ 100% {
111
+ background: #3399CC;
112
+ }
113
+ }
114
+ @keyframes logo-color-inside-dark {
115
+ 0% {
116
+ background: #030303;
117
+ }
118
+ 100% {
119
+ background: #3399CC;
120
+ }
121
+ }
122
+ @keyframes logo-color-inside-colored {
123
+ 0% {
124
+ background: #FEFEFE;
125
+ }
126
+ 100% {
127
+ background: #3399CC;
128
+ }
129
+ }
130
+ @keyframes logo-color-inside-blue {
131
+ 0% {
132
+ background: #030303;
133
+ }
134
+ 100% {
135
+ background: #3399CC;
136
+ }
137
+ }
138
+
139
+ @keyframes logo-color-outside-light {
140
+ 0% {
141
+ border-color: #FEFEFE;
142
+ }
143
+ 100% {
144
+ border-top-color: #3399CC;
145
+ border-left-color: #164477;
146
+ border-bottom-color: #164477;
147
+ border-right-color: #164477;
148
+ }
149
+ }
150
+ @keyframes logo-color-outside-dark {
151
+ 0% {
152
+ border-color: #040404;
153
+ }
154
+ 100% {
155
+ border-top-color: #3399CC;
156
+ border-left-color: #164477;
157
+ border-bottom-color: #164477;
158
+ border-right-color: #164477;
159
+ }
160
+ }
161
+ @keyframes logo-color-outside-colored {
162
+ 0% {
163
+ border-color: #FEFEFE;
164
+ }
165
+ 100% {
166
+ border-top-color: #3399CC;
167
+ border-left-color: #164477;
168
+ border-bottom-color: #164477;
169
+ border-right-color: #164477;
170
+ }
171
+ }
172
+ @keyframes logo-color-outside-blue {
173
+ 0% {
174
+ border-color: #040404;
175
+ }
176
+ 100% {
177
+ border-top-color: #3399CC;
178
+ border-left-color: #164477;
179
+ border-bottom-color: #164477;
180
+ border-right-color: #164477;
181
+ }
182
+ }
183
+
184
+ .logo-animate-wait {
185
+ animation: logo-color-outside 1.5s, logo-spin 1.5s linear infinite;
186
+ }
187
+
188
+ .logo-animate-grow-light {
189
+ background: #DDD;
190
+ }
191
+ .logo-animate-grow-dark {
192
+ background: #1d1d1d;
193
+ }
194
+ .logo-animate-grow-colored {
195
+ background: #DDD;
196
+ }
197
+ .logo-animate-grow-blue {
198
+ background: #1d1d1d;
199
+ }
200
+
201
+ .logo-animate-grow {
202
+ display: inline-block;
203
+ text-align: center;
204
+ z-index: 1;
205
+ top: 50%;
206
+ left: 50%;
207
+ -ms-transform: translateX(-50%) translateY(-50%);
208
+ -webkit-transform: translate(-50%,-50%);
209
+ transform: translate(-50%,-50%);
210
+ width: 245px;
211
+ height: 245px;
212
+ border-radius: 50%;
213
+ position: absolute;
214
+ animation: logo-grow 1s 1 ease forwards;
215
+ }
216
+
217
+ .logo-animate-color-inside-light {
218
+ animation: logo-color-inside-light 2.5s;
219
+ }
220
+ .logo-animate-color-inside-dark {
221
+ animation: logo-color-inside-dark 2.5s;
222
+ }
223
+ .logo-animate-color-inside-colored {
224
+ animation: logo-color-inside-colored 2.5s;
225
+ }
226
+ .logo-animate-color-inside-blue {
227
+ animation: logo-color-inside-blue 2.5s;
228
+ }
229
+
230
+ .logo-animate-color-outside-light {
231
+ animation: logo-color-outside-light 1.5s;
232
+ }
233
+ .logo-animate-color-outside-dark {
234
+ animation: logo-color-outside-dark 1.5s;
235
+ }
236
+ .logo-animate-color-outside-colored {
237
+ animation: logo-color-outside-colored 1.5s;
238
+ }
239
+ .logo-animate-color-outside-blue {
240
+ animation: logo-color-outside-blue 1.5s;
241
+ }
242
+ `;
243
+
244
+ interface LoaderProps {
245
+ /** The size in pixels of this loader. */
246
+ size?: number;
247
+ /** The chosen theme type. */
248
+ themeType?: ThemeType;
249
+ /** Theme name */
250
+ themeName?: ThemeName;
251
+ /** @deprecated Theme name. use themeName instead */
252
+ theme?: ThemeName;
253
+ /** Background color */
254
+ backgroundColor?: string;
255
+ /** Background image URL */
256
+ backgroundImage?: string;
257
+ }
258
+
259
+ function Loader(props: LoaderProps): React.JSX.Element {
260
+ useEffect(() => {
261
+ if (!window.document.getElementById('loader-iobroker-component')) {
262
+ const style = window.document.createElement('style');
263
+ style.setAttribute('id', 'loader-iobroker-component');
264
+ style.innerHTML = loaderStyles;
265
+ window.document.head.appendChild(style);
266
+ }
267
+ }, []);
268
+
269
+ const size = props.size || 234;
270
+ const theme = props.themeName || props.theme || props.themeType || 'light';
271
+ return (
272
+ <div
273
+ className={`logo-back logo-background-${theme}`}
274
+ style={{
275
+ backgroundImage:
276
+ props.backgroundImage && props.backgroundImage !== '@@loginBackgroundImage@@'
277
+ ? props.backgroundImage
278
+ : window.loadingBackgroundImage && window.loadingBackgroundImage !== '@@loginBackgroundImage@@'
279
+ ? `url(${window.loadingBackgroundImage})`
280
+ : undefined,
281
+ backgroundColor:
282
+ props.backgroundColor && props.backgroundColor !== '@@loginBackgroundColor@@'
283
+ ? props.backgroundColor
284
+ : window.loadingBackgroundColor && window.loadingBackgroundColor !== '@@loginBackgroundColor@@'
285
+ ? window.loadingBackgroundColor
286
+ : undefined,
287
+ backgroundSize: 'cover',
288
+ }}
289
+ >
290
+ {window.loadingHideLogo === 'true' ? null : (
291
+ <>
292
+ <div
293
+ className="logo-div"
294
+ style={{ width: size, height: size }}
295
+ >
296
+ <div
297
+ className={`logo-top logo-background-${theme}`}
298
+ style={{ left: '37%' }}
299
+ />
300
+ <div
301
+ className={`logo-top logo-background-${theme}`}
302
+ style={{ left: '57%' }}
303
+ />
304
+ <div
305
+ className={`logo-border logo-background-${theme} logo-animate-wait`}
306
+ style={{ borderWidth: size * 0.132 }}
307
+ />
308
+ <div className={`logo-i logo-animate-color-inside-${theme}`} />
309
+ <div
310
+ className={`logo-i-top logo-animate-color-inside-${theme}`}
311
+ style={{ top: '18%' }}
312
+ />
313
+ <div
314
+ className={`logo-i-top logo-animate-color-inside-${theme}`}
315
+ style={{ bottom: '18%' }}
316
+ />
317
+ </div>
318
+ <div
319
+ className={`logo-animate-grow logo-animate-grow-${theme}`}
320
+ style={{ width: size + 11, height: size + 11 }}
321
+ />
322
+ </>
323
+ )}
324
+ </div>
325
+ );
326
+ }
327
+
328
+ export default Loader;