@iobroker/adapter-react-v5 7.0.2 → 7.1.1

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 (307) hide show
  1. package/Components/404.d.ts +3 -2
  2. package/Components/404.js +3 -2
  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 +135 -152
  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 +21 -18
  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 +20 -7
  26. package/Components/Loaders/Vendor.d.ts +2 -2
  27. package/Components/Loaders/Vendor.js +15 -7
  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 +40 -39
  32. package/Components/ObjectBrowser.js +550 -435
  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 +25 -21
  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 +128 -85
  79. package/LegacyConnection.d.ts +240 -248
  80. package/LegacyConnection.js +500 -525
  81. package/README.md +1264 -1171
  82. package/Theme.d.ts +1 -1
  83. package/Theme.js +9 -12
  84. package/assets/devices.json +1 -0
  85. package/assets/rooms.json +1 -0
  86. package/craco-module-federation.js +3 -12
  87. package/i18n/de.json +434 -434
  88. package/i18n/en.json +434 -434
  89. package/i18n/es.json +434 -434
  90. package/i18n/fr.json +434 -434
  91. package/i18n/it.json +434 -434
  92. package/i18n/nl.json +434 -434
  93. package/i18n/pl.json +434 -434
  94. package/i18n/pt.json +434 -434
  95. package/i18n/ru.json +434 -434
  96. package/i18n/uk.json +434 -434
  97. package/i18n/zh-cn.json +434 -434
  98. package/i18n.d.ts +26 -19
  99. package/i18n.js +28 -22
  100. package/icons/IconAdapter.js +2 -2
  101. package/icons/IconAlias.js +2 -2
  102. package/icons/IconChannel.js +2 -2
  103. package/icons/IconClearFilter.js +2 -2
  104. package/icons/IconClosed.js +2 -2
  105. package/icons/IconCopy.js +2 -2
  106. package/icons/IconDevice.js +2 -2
  107. package/icons/IconDocument.js +2 -2
  108. package/icons/IconDocumentReadOnly.js +2 -2
  109. package/icons/IconExpert.js +2 -2
  110. package/icons/IconFx.js +2 -2
  111. package/icons/IconInstance.js +2 -2
  112. package/icons/IconLogout.js +2 -2
  113. package/icons/IconNoIcon.js +2 -2
  114. package/icons/IconOpen.d.ts +2 -2
  115. package/icons/IconOpen.js +2 -2
  116. package/icons/IconProps.d.ts +4 -3
  117. package/icons/IconState.d.ts +2 -2
  118. package/icons/IconState.js +2 -2
  119. package/index.css +3 -2
  120. package/package.json +4 -4
  121. package/src/Components/404.tsx +32 -31
  122. package/src/Components/ColorPicker.tsx +142 -114
  123. package/src/Components/ComplexCron.tsx +174 -137
  124. package/src/Components/CopyToClipboard.tsx +22 -9
  125. package/src/Components/CustomModal.tsx +76 -69
  126. package/src/Components/FileBrowser.tsx +959 -852
  127. package/src/Components/FileViewer.tsx +146 -127
  128. package/src/Components/Icon.tsx +80 -52
  129. package/src/Components/IconPicker.tsx +83 -67
  130. package/src/Components/IconSelector.tsx +159 -141
  131. package/src/Components/Image.tsx +43 -26
  132. package/src/Components/Loader.tsx +56 -32
  133. package/src/Components/Logo.tsx +62 -52
  134. package/src/Components/MDUtils.tsx +10 -6
  135. package/src/Components/ObjectBrowser.tsx +3198 -2478
  136. package/src/Components/Router.tsx +11 -11
  137. package/src/Components/SaveCloseButtons.tsx +43 -39
  138. package/src/Components/Schedule.tsx +1091 -853
  139. package/src/Components/SelectWithIcon.tsx +135 -93
  140. package/src/Components/TabContainer.tsx +22 -20
  141. package/src/Components/TabContent.tsx +13 -12
  142. package/src/Components/TabHeader.tsx +10 -9
  143. package/src/Components/TableResize.tsx +52 -37
  144. package/src/Components/TextWithIcon.tsx +30 -19
  145. package/src/Components/ToggleThemeMenu.tsx +31 -13
  146. package/src/Components/TreeTable.tsx +468 -385
  147. package/src/Components/UploadImage.tsx +153 -121
  148. package/src/Components/Utils.tsx +135 -127
  149. package/src/Components/loader.css +40 -31
  150. package/src/Components/withWidth.tsx +23 -12
  151. package/src/Connection.tsx +1 -3
  152. package/src/Dialogs/ComplexCron.tsx +55 -61
  153. package/src/Dialogs/Confirm.tsx +88 -65
  154. package/src/Dialogs/Cron.tsx +122 -112
  155. package/src/Dialogs/Error.tsx +37 -42
  156. package/src/Dialogs/Message.tsx +39 -37
  157. package/src/Dialogs/SelectFile.tsx +95 -85
  158. package/src/Dialogs/SelectID.tsx +141 -129
  159. package/src/Dialogs/SimpleCron.tsx +44 -44
  160. package/src/Dialogs/TextInput.tsx +60 -68
  161. package/src/GenericApp.tsx +342 -242
  162. package/src/LegacyConnection.tsx +972 -842
  163. package/src/Prompt.tsx +3 -1
  164. package/src/Theme.tsx +19 -26
  165. package/src/icons/IconAdapter.tsx +16 -14
  166. package/src/icons/IconAlias.tsx +16 -14
  167. package/src/icons/IconChannel.tsx +55 -16
  168. package/src/icons/IconClearFilter.tsx +17 -15
  169. package/src/icons/IconClosed.tsx +16 -11
  170. package/src/icons/IconCopy.tsx +16 -11
  171. package/src/icons/IconDevice.tsx +121 -22
  172. package/src/icons/IconDocument.tsx +16 -11
  173. package/src/icons/IconDocumentReadOnly.tsx +21 -12
  174. package/src/icons/IconExpert.tsx +20 -12
  175. package/src/icons/IconFx.tsx +16 -14
  176. package/src/icons/IconInstance.tsx +16 -14
  177. package/src/icons/IconLogout.tsx +20 -18
  178. package/src/icons/IconNoIcon.tsx +16 -14
  179. package/src/icons/IconOpen.tsx +17 -12
  180. package/src/icons/IconProps.tsx +4 -3
  181. package/src/icons/IconState.tsx +34 -13
  182. package/src/index.css +3 -2
  183. package/tasks.js +91 -0
  184. package/types.d.ts +141 -0
  185. package/Components/Loaders/PT.css +0 -109
  186. package/Components/Loaders/Vendor.css +0 -13
  187. package/Components/loader.css +0 -222
  188. package/Components/types.d.ts +0 -82
  189. package/assets/devices/Alarm Systems.svg +0 -19
  190. package/assets/devices/Amplifier.svg +0 -22
  191. package/assets/devices/Awnings.svg +0 -5
  192. package/assets/devices/Battery Status.svg +0 -5
  193. package/assets/devices/Ceiling Spotlights.svg +0 -16
  194. package/assets/devices/Chandelier.svg +0 -7
  195. package/assets/devices/Climate.svg +0 -12
  196. package/assets/devices/Coffee Makers.svg +0 -6
  197. package/assets/devices/Cold Water.svg +0 -31
  198. package/assets/devices/Computer.svg +0 -21
  199. package/assets/devices/Consumption.svg +0 -8
  200. package/assets/devices/Curtains.svg +0 -43
  201. package/assets/devices/Dishwashers.svg +0 -12
  202. package/assets/devices/Doors.svg +0 -6
  203. package/assets/devices/Doorstep.svg +0 -35
  204. package/assets/devices/Dryer.svg +0 -14
  205. package/assets/devices/Fan.svg +0 -20
  206. package/assets/devices/Floor Lamps.svg +0 -5
  207. package/assets/devices/Garage Doors.svg +0 -9
  208. package/assets/devices/Gates.svg +0 -32
  209. package/assets/devices/Hairdryer.svg +0 -23
  210. package/assets/devices/Handle.svg +0 -6
  211. package/assets/devices/Hanging Lamps.svg +0 -9
  212. package/assets/devices/Heater.svg +0 -44
  213. package/assets/devices/Hoods.svg +0 -12
  214. package/assets/devices/Hot Water.svg +0 -10
  215. package/assets/devices/Humidity.svg +0 -41
  216. package/assets/devices/Iron.svg +0 -5
  217. package/assets/devices/Irrigation.svg +0 -23
  218. package/assets/devices/Led Strip.svg +0 -31
  219. package/assets/devices/Light.svg +0 -30
  220. package/assets/devices/Lightings.svg +0 -46
  221. package/assets/devices/Lock.svg +0 -19
  222. package/assets/devices/Louvre.svg +0 -7
  223. package/assets/devices/Mowing Machine.svg +0 -9
  224. package/assets/devices/Music.svg +0 -13
  225. package/assets/devices/Outdoor Blinds.svg +0 -7
  226. package/assets/devices/People.svg +0 -19
  227. package/assets/devices/Pool.svg +0 -8
  228. package/assets/devices/Power Consumption.svg +0 -13
  229. package/assets/devices/Printer.svg +0 -10
  230. package/assets/devices/Pump.svg +0 -10
  231. package/assets/devices/Receiver.svg +0 -19
  232. package/assets/devices/Sconces.svg +0 -10
  233. package/assets/devices/Security.svg +0 -34
  234. package/assets/devices/Shading.svg +0 -5
  235. package/assets/devices/Shutters.svg +0 -11
  236. package/assets/devices/SmokeDetector.svg +0 -13
  237. package/assets/devices/Sockets.svg +0 -13
  238. package/assets/devices/Speaker.svg +0 -35
  239. package/assets/devices/Stove.svg +0 -12
  240. package/assets/devices/Table Lamps.svg +0 -12
  241. package/assets/devices/Temperature Sensors.svg +0 -28
  242. package/assets/devices/Tv.svg +0 -8
  243. package/assets/devices/Vacuum Cleaner.svg +0 -16
  244. package/assets/devices/Ventilation.svg +0 -12
  245. package/assets/devices/Washing Machines.svg +0 -16
  246. package/assets/devices/Water Consumption.svg +0 -6
  247. package/assets/devices/Water Heater.svg +0 -8
  248. package/assets/devices/Water.svg +0 -40
  249. package/assets/devices/Weather.svg +0 -28
  250. package/assets/devices/Window.svg +0 -8
  251. package/assets/rooms/Anteroom.svg +0 -53
  252. package/assets/rooms/Attic.svg +0 -21
  253. package/assets/rooms/Balcony.svg +0 -13
  254. package/assets/rooms/Barn.svg +0 -6
  255. package/assets/rooms/Basement.svg +0 -5
  256. package/assets/rooms/Bathroom.svg +0 -38
  257. package/assets/rooms/Bedroom.svg +0 -5
  258. package/assets/rooms/Boiler Room.svg +0 -13
  259. package/assets/rooms/Carport.svg +0 -17
  260. package/assets/rooms/Cellar.svg +0 -89
  261. package/assets/rooms/Chamber.svg +0 -9
  262. package/assets/rooms/Corridor.svg +0 -53
  263. package/assets/rooms/Dining Area.svg +0 -37
  264. package/assets/rooms/Dining Room.svg +0 -37
  265. package/assets/rooms/Dining.svg +0 -37
  266. package/assets/rooms/Dressing Room.svg +0 -5
  267. package/assets/rooms/Driveway.svg +0 -15
  268. package/assets/rooms/Entrance.svg +0 -44
  269. package/assets/rooms/Equipment Room.svg +0 -15
  270. package/assets/rooms/Front Yard.svg +0 -64
  271. package/assets/rooms/Gallery.svg +0 -14
  272. package/assets/rooms/Garage.svg +0 -20
  273. package/assets/rooms/Garden.svg +0 -13
  274. package/assets/rooms/Ground Floor.svg +0 -95
  275. package/assets/rooms/Guest Bathroom.svg +0 -33
  276. package/assets/rooms/Guest Room.svg +0 -5
  277. package/assets/rooms/Gym.svg +0 -5
  278. package/assets/rooms/Hall.svg +0 -19
  279. package/assets/rooms/Home Theater.svg +0 -8
  280. package/assets/rooms/Kitchen.svg +0 -18
  281. package/assets/rooms/Laundry Room.svg +0 -12
  282. package/assets/rooms/Living Area.svg +0 -11
  283. package/assets/rooms/Living Room.svg +0 -10
  284. package/assets/rooms/Locker Room.svg +0 -17
  285. package/assets/rooms/Nursery.svg +0 -5
  286. package/assets/rooms/Office.svg +0 -8
  287. package/assets/rooms/Outdoors.svg +0 -7
  288. package/assets/rooms/Playroom.svg +0 -6
  289. package/assets/rooms/Pool.svg +0 -8
  290. package/assets/rooms/Rear Wall.svg +0 -30
  291. package/assets/rooms/Second Floor.svg +0 -95
  292. package/assets/rooms/Shed.svg +0 -16
  293. package/assets/rooms/Sleeping Area.svg +0 -22
  294. package/assets/rooms/Stairway.svg +0 -5
  295. package/assets/rooms/Stairwell.svg +0 -15
  296. package/assets/rooms/Storeroom.svg +0 -5
  297. package/assets/rooms/Summer House.svg +0 -27
  298. package/assets/rooms/Swimming Pool.svg +0 -21
  299. package/assets/rooms/Terrace.svg +0 -7
  300. package/assets/rooms/Toilet.svg +0 -10
  301. package/assets/rooms/Upstairs.svg +0 -6
  302. package/assets/rooms/Wardrobe.svg +0 -60
  303. package/assets/rooms/Washroom.svg +0 -20
  304. package/assets/rooms/Wc.svg +0 -10
  305. package/assets/rooms/Windscreen.svg +0 -60
  306. package/assets/rooms/Workshop.svg +0 -23
  307. package/assets/rooms/Workspace.svg +0 -8
@@ -1,4 +1,5 @@
1
- import React, { Component } from 'react';
1
+ import React, { type JSX } from 'react';
2
+ import { Component } from 'react';
2
3
 
3
4
  import IconNoIcon from '../icons/IconNoIcon';
4
5
 
@@ -58,8 +59,11 @@ interface ImageState {
58
59
  showError?: boolean;
59
60
  }
60
61
 
62
+ /**
63
+ * A component for displaying an image.
64
+ */
61
65
  class Image extends Component<ImageProps, ImageState> {
62
- private svg: React.JSX.Element | null;
66
+ private svg: JSX.Element | null;
63
67
 
64
68
  static REMOTE_SERVER: boolean = window.location.hostname.includes('iobroker.in');
65
69
 
@@ -79,7 +83,7 @@ class Image extends Component<ImageProps, ImageState> {
79
83
  this.svg = this.state.svg && this.state.src ? this.getSvgFromData(this.state.src) : null;
80
84
  }
81
85
 
82
- static getDerivedStateFromProps(props: ImageProps, state: ImageState) {
86
+ static getDerivedStateFromProps(props: ImageProps, state: ImageState): Partial<ImageState> | null {
83
87
  const newState: ImageState = {};
84
88
  let changed = false;
85
89
 
@@ -104,7 +108,7 @@ class Image extends Component<ImageProps, ImageState> {
104
108
  return changed ? newState : null;
105
109
  }
106
110
 
107
- getSvgFromData(src: string): React.JSX.Element | null {
111
+ getSvgFromData(src: string): JSX.Element | null {
108
112
  const len = 'data:image/svg+xml;base64,';
109
113
  if (!src.startsWith(len)) {
110
114
  return null;
@@ -118,20 +122,21 @@ class Image extends Component<ImageProps, ImageState> {
118
122
 
119
123
  svg.remove();
120
124
 
121
- return <svg
122
- className={this.props.className}
123
- style={this.state.color ? { color: this.state.color } : {}}
124
- {...svgProps}
125
- // eslint-disable-next-line react/no-danger
126
- dangerouslySetInnerHTML={{ __html: inner }}
127
- />;
128
- } catch (e) {
125
+ return (
126
+ <svg
127
+ className={this.props.className}
128
+ style={this.state.color ? { color: this.state.color } : {}}
129
+ {...svgProps}
130
+ dangerouslySetInnerHTML={{ __html: inner }}
131
+ />
132
+ );
133
+ } catch {
129
134
  // ignore
130
135
  }
131
136
  return null;
132
137
  }
133
138
 
134
- render() {
139
+ render(): JSX.Element | null {
135
140
  if (this.state.svg) {
136
141
  if (!this.state.created) {
137
142
  setTimeout(() => {
@@ -146,27 +151,39 @@ class Image extends Component<ImageProps, ImageState> {
146
151
  if (this.state.imgError || !this.state.src) {
147
152
  return <IconNoIcon className={this.props.className} />;
148
153
  }
149
- if (Image.REMOTE_SERVER && !this.state.src.startsWith('http://') && !this.state.src.startsWith('https://')) {
154
+ if (
155
+ Image.REMOTE_SERVER &&
156
+ !this.state.src.startsWith('http://') &&
157
+ !this.state.src.startsWith('https://')
158
+ ) {
150
159
  let src = (this.props.imagePrefix || '') + this.state.src;
151
160
  if (src.startsWith('./')) {
152
161
  src = Image.REMOTE_PREFIX + src.substring(2);
153
162
  } else if (!src.startsWith('/')) {
154
163
  src = Image.REMOTE_PREFIX + src;
155
164
  }
156
- return <img
157
- className={this.props.className}
158
- src={`https://remote-files.iobroker.in${src}`}
159
- alt=""
160
- onError={() => (this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' }))}
161
- />;
165
+ return (
166
+ <img
167
+ className={this.props.className}
168
+ src={`https://remote-files.iobroker.in${src}`}
169
+ alt=""
170
+ onError={() =>
171
+ this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' })
172
+ }
173
+ />
174
+ );
162
175
  }
163
176
 
164
- return <img
165
- className={this.props.className}
166
- src={(this.props.imagePrefix || '') + this.state.src}
167
- alt=""
168
- onError={() => (this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' }))}
169
- />;
177
+ return (
178
+ <img
179
+ className={this.props.className}
180
+ src={(this.props.imagePrefix || '') + this.state.src}
181
+ alt=""
182
+ onError={() =>
183
+ this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' })
184
+ }
185
+ />
186
+ );
170
187
  }
171
188
 
172
189
  return null;
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * MIT License
5
5
  *
6
- * */
6
+ */
7
7
  import React, { useEffect } from 'react';
8
- import { ThemeName, ThemeType } from '../types';
8
+ import type { ThemeName, ThemeType } from '../types';
9
9
  // import './loader.css'
10
10
 
11
11
  declare global {
@@ -256,7 +256,7 @@ interface LoaderProps {
256
256
  backgroundImage?: string;
257
257
  }
258
258
 
259
- function Loader(props: LoaderProps) {
259
+ function Loader(props: LoaderProps): React.JSX.Element {
260
260
  useEffect(() => {
261
261
  if (!window.document.getElementById('loader-iobroker-component')) {
262
262
  const style = window.document.createElement('style');
@@ -268,37 +268,61 @@ function Loader(props: LoaderProps) {
268
268
 
269
269
  const size = props.size || 234;
270
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%' }} />
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
+ <>
288
292
  <div
289
- className={`logo-border logo-background-${theme} logo-animate-wait`}
290
- style={{ borderWidth: size * 0.132 }}
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 }}
291
321
  />
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>;
322
+ </>
323
+ )}
324
+ </div>
325
+ );
302
326
  }
303
327
 
304
328
  export default Loader;
@@ -26,9 +26,12 @@ interface LogoProps {
26
26
  }
27
27
 
28
28
  class Logo extends React.Component<LogoProps> {
29
- static generateFile(fileName: string, obj: any) {
29
+ static generateFile(fileName: string, obj: any): void {
30
30
  const el = window.document.createElement('a');
31
- el.setAttribute('href', `data:application/json;charset=utf-8,${encodeURIComponent(JSON.stringify(obj, null, 2))}`);
31
+ el.setAttribute(
32
+ 'href',
33
+ `data:application/json;charset=utf-8,${encodeURIComponent(JSON.stringify(obj, null, 2))}`,
34
+ );
32
35
  el.setAttribute('download', fileName);
33
36
 
34
37
  el.style.display = 'none';
@@ -39,7 +42,7 @@ class Logo extends React.Component<LogoProps> {
39
42
  window.document.body.removeChild(el);
40
43
  }
41
44
 
42
- handleFileSelect = (evt: Event) => {
45
+ handleFileSelect = (evt: Event): void => {
43
46
  const target = evt.target as HTMLInputElement;
44
47
  const files = target?.files;
45
48
  if (!files || !files.length) {
@@ -73,7 +76,7 @@ class Logo extends React.Component<LogoProps> {
73
76
  }
74
77
  };
75
78
 
76
- download() {
79
+ download(): void {
77
80
  const result = {
78
81
  _id: `system.adapter.${this.props.common.name}.${this.props.instance}`,
79
82
  common: JSON.parse(JSON.stringify(this.props.common)),
@@ -94,72 +97,79 @@ class Logo extends React.Component<LogoProps> {
94
97
  Logo.generateFile(`${result._id}.json`, result);
95
98
  }
96
99
 
97
- upload() {
100
+ upload(): void {
98
101
  const input = window.document.createElement('input');
99
102
  input.setAttribute('type', 'file');
100
103
  input.setAttribute('id', 'files');
101
104
  input.setAttribute('opacity', '0');
102
105
  input.addEventListener('change', this.handleFileSelect, false);
103
- (input.click)();
106
+ input.click();
104
107
  }
105
108
 
106
- render() {
107
- return <div className={this.props.className} style={this.props.style}>
108
- {this.props.common.icon ?
109
- <Icon
110
- src={this.props.common.icon}
109
+ render(): React.JSX.Element {
110
+ return (
111
+ <div
112
+ className={this.props.className}
113
+ style={this.props.style}
114
+ >
115
+ {this.props.common.icon ? (
116
+ <Icon
117
+ src={this.props.common.icon}
118
+ style={{
119
+ padding: 8,
120
+ width: 64,
121
+ }}
122
+ alt="logo"
123
+ />
124
+ ) : null}
125
+ {this.props.common.readme ? (
126
+ <Fab
127
+ size="small"
128
+ color="primary"
129
+ aria-label="Help"
130
+ style={{
131
+ marginRight: 5,
132
+ marginTop: 5,
133
+ float: 'right',
134
+ }}
135
+ onClick={() => {
136
+ const win = window.open(this.props.common.readme, '_blank');
137
+ win?.focus();
138
+ }}
139
+ >
140
+ <IconHelp />
141
+ </Fab>
142
+ ) : null}
143
+ <Fab
144
+ size="small"
145
+ color="primary"
146
+ aria-label="Load config"
111
147
  style={{
112
- padding: 8,
113
- width: 64,
148
+ marginRight: 5,
149
+ marginTop: 5,
150
+ float: 'right',
114
151
  }}
115
- alt="logo"
116
- /> : null}
117
- {this.props.common.readme ?
152
+ title={I18n.t('ra_Load configuration from file')}
153
+ onClick={() => this.upload()}
154
+ >
155
+ <IconUpload />
156
+ </Fab>
118
157
  <Fab
119
158
  size="small"
120
159
  color="primary"
121
- aria-label="Help"
160
+ aria-label="Save config"
122
161
  style={{
123
162
  marginRight: 5,
124
163
  marginTop: 5,
125
164
  float: 'right',
126
165
  }}
127
- onClick={() => {
128
- const win = window.open(this.props.common.readme, '_blank');
129
- win?.focus();
130
- }}
166
+ title={I18n.t('ra_Save configuration to file')}
167
+ onClick={() => this.download()}
131
168
  >
132
- <IconHelp />
133
- </Fab> : null}
134
- <Fab
135
- size="small"
136
- color="primary"
137
- aria-label="Load config"
138
- style={{
139
- marginRight: 5,
140
- marginTop: 5,
141
- float: 'right',
142
- }}
143
- title={I18n.t('ra_Load configuration from file')}
144
- onClick={() => this.upload()}
145
- >
146
- <IconUpload />
147
- </Fab>
148
- <Fab
149
- size="small"
150
- color="primary"
151
- aria-label="Save config"
152
- style={{
153
- marginRight: 5,
154
- marginTop: 5,
155
- float: 'right',
156
- }}
157
- title={I18n.t('ra_Save configuration to file')}
158
- onClick={() => this.download()}
159
- >
160
- <IconDownload />
161
- </Fab>
162
- </div>;
169
+ <IconDownload />
170
+ </Fab>
171
+ </div>
172
+ );
163
173
  }
164
174
  }
165
175
 
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * MIT License
5
5
  *
6
- * */
6
+ */
7
7
  import copy from './CopyToClipboard';
8
8
 
9
9
  class MDUtils {
@@ -13,10 +13,14 @@ class MDUtils {
13
13
  text = text.replace(m[0], m[0].replace(/\s/, '&nbsp;'));
14
14
  }
15
15
 
16
- return text.replace(/[^a-zA-Zа-яА-Я0-9]/g, '').trim().replace(/\s/g, '').toLowerCase();
16
+ return text
17
+ .replace(/[^a-zA-Zа-яА-Я0-9]/g, '')
18
+ .trim()
19
+ .replace(/\s/g, '')
20
+ .toLowerCase();
17
21
  }
18
22
 
19
- static openLink(url: string, target?: string) {
23
+ static openLink(url: string, target?: string): void {
20
24
  // replace IPv6 Address with [ipv6]:port
21
25
  url = url.replace(/\/\/([0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*)(:\d+)?\//i, '//[$1]$2/');
22
26
 
@@ -27,7 +31,7 @@ class MDUtils {
27
31
  }
28
32
  }
29
33
 
30
- static getTitle(text: string) {
34
+ static getTitle(text: string): string {
31
35
  const result = MDUtils.extractHeader(text);
32
36
  let body = result.body;
33
37
  const header = result.header;
@@ -44,7 +48,7 @@ class MDUtils {
44
48
  return '';
45
49
  }
46
50
 
47
- return header.title;
51
+ return header.title.toString();
48
52
  }
49
53
 
50
54
  static extractHeader(text: string): { header: Record<string, string | boolean | number>; body: string } {
@@ -85,7 +89,7 @@ class MDUtils {
85
89
  static removeDocsify(text: string): string {
86
90
  const m = text.match(/{docsify-[^}]*}/g);
87
91
  if (m) {
88
- m.forEach(doc => text = text.replace(doc, ''));
92
+ m.forEach(doc => (text = text.replace(doc, '')));
89
93
  }
90
94
  return text;
91
95
  }