@iobroker/gui-components 8.0.1 → 10.0.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 (160) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +834 -543
  3. package/build/AdminConnection.js.map +1 -1
  4. package/build/Components/404.js +13 -13
  5. package/build/Components/404.js.map +1 -1
  6. package/build/Components/ColorPicker.js.map +1 -1
  7. package/build/Components/ComplexCron.js +2 -2
  8. package/build/Components/ComplexCron.js.map +1 -1
  9. package/build/Components/CopyToClipboard.js.map +1 -1
  10. package/build/Components/CustomModal.js +1 -1
  11. package/build/Components/CustomModal.js.map +1 -1
  12. package/build/Components/DeviceType/DeviceTypeIcon.js +1 -0
  13. package/build/Components/DeviceType/DeviceTypeIcon.js.map +1 -1
  14. package/build/Components/DeviceType/DeviceTypeSelector.js +2 -2
  15. package/build/Components/DeviceType/DeviceTypeSelector.js.map +1 -1
  16. package/build/Components/DeviceType/i18n/de.json +1 -0
  17. package/build/Components/DeviceType/i18n/en.json +1 -0
  18. package/build/Components/DeviceType/i18n/fr.json +1 -0
  19. package/build/Components/DeviceType/i18n/it.json +1 -0
  20. package/build/Components/DeviceType/i18n/nl.json +1 -0
  21. package/build/Components/DeviceType/i18n/pl.json +1 -0
  22. package/build/Components/DeviceType/i18n/pt.json +1 -0
  23. package/build/Components/DeviceType/i18n/ru.json +1 -0
  24. package/build/Components/DeviceType/i18n/uk.json +1 -0
  25. package/build/Components/DeviceType/i18n/zh-cn.json +1 -0
  26. package/build/Components/FileBrowser.d.ts +39 -4
  27. package/build/Components/FileBrowser.js +104 -11
  28. package/build/Components/FileBrowser.js.map +1 -1
  29. package/build/Components/FileViewer.js +2 -4
  30. package/build/Components/FileViewer.js.map +1 -1
  31. package/build/Components/Icon.d.ts +1 -3
  32. package/build/Components/Icon.js +11 -11
  33. package/build/Components/Icon.js.map +1 -1
  34. package/build/Components/Image.js +8 -4
  35. package/build/Components/Image.js.map +1 -1
  36. package/build/Components/InfoBox.js +1 -1
  37. package/build/Components/InfoBox.js.map +1 -1
  38. package/build/Components/IobUri.js +5 -5
  39. package/build/Components/IobUri.js.map +1 -1
  40. package/build/Components/Loader.d.ts +2 -3
  41. package/build/Components/Loader.js +25 -257
  42. package/build/Components/Loader.js.map +1 -1
  43. package/build/Components/Loaders/Community.d.ts +31 -0
  44. package/build/Components/Loaders/Community.js +265 -0
  45. package/build/Components/Loaders/Community.js.map +1 -0
  46. package/build/Components/Loaders/HA.d.ts +17 -0
  47. package/build/Components/Loaders/HA.js +99 -0
  48. package/build/Components/Loaders/HA.js.map +1 -0
  49. package/build/Components/Loaders/MV.js.map +1 -1
  50. package/build/Components/Loaders/NW.d.ts +17 -0
  51. package/build/Components/Loaders/NW.js +70 -0
  52. package/build/Components/Loaders/NW.js.map +1 -0
  53. package/build/Components/Loaders/PT.js +103 -103
  54. package/build/Components/Loaders/PT.js.map +1 -1
  55. package/build/Components/Loaders/Vendor.js +7 -7
  56. package/build/Components/Loaders/Vendor.js.map +1 -1
  57. package/build/Components/MDUtils.js.map +1 -1
  58. package/build/Components/ObjectBrowser.d.ts +25 -406
  59. package/build/Components/ObjectBrowser.js +460 -1543
  60. package/build/Components/ObjectBrowser.js.map +1 -1
  61. package/build/Components/Router.js.map +1 -1
  62. package/build/Components/SaveCloseButtons.js.map +1 -1
  63. package/build/Components/Schedule.d.ts +27 -1
  64. package/build/Components/Schedule.js +60 -50
  65. package/build/Components/Schedule.js.map +1 -1
  66. package/build/Components/SelectWithIcon.js +1 -1
  67. package/build/Components/SelectWithIcon.js.map +1 -1
  68. package/build/Components/SimpleCron/cronText.js.map +1 -1
  69. package/build/Components/SimpleCron/index.js +3 -3
  70. package/build/Components/SimpleCron/index.js.map +1 -1
  71. package/build/Components/TabContainer.js +7 -2
  72. package/build/Components/TabContainer.js.map +1 -1
  73. package/build/Components/TabContent.d.ts +1 -1
  74. package/build/Components/TabContent.js +5 -5
  75. package/build/Components/TabContent.js.map +1 -1
  76. package/build/Components/TabHeader.js +2 -2
  77. package/build/Components/TabHeader.js.map +1 -1
  78. package/build/Components/TableResize.js.map +1 -1
  79. package/build/Components/TextWithIcon.js.map +1 -1
  80. package/build/Components/TreeTable.d.ts +1 -0
  81. package/build/Components/TreeTable.js +16 -6
  82. package/build/Components/TreeTable.js.map +1 -1
  83. package/build/Components/UploadImage.js +305 -305
  84. package/build/Components/UploadImage.js.map +1 -1
  85. package/build/Components/Utils.d.ts +17 -3
  86. package/build/Components/Utils.js +167 -9
  87. package/build/Components/Utils.js.map +1 -1
  88. package/build/Components/objectBrowser.types.d.ts +496 -0
  89. package/build/Components/objectBrowserUtils.d.ts +170 -0
  90. package/build/Components/objectBrowserUtils.js +1375 -0
  91. package/build/Components/objectBrowserUtils.js.map +1 -0
  92. package/build/Connection.js.map +1 -1
  93. package/build/Dialogs/ComplexCron.js.map +1 -1
  94. package/build/Dialogs/Confirm.js.map +1 -1
  95. package/build/Dialogs/Cron.js.map +1 -1
  96. package/build/Dialogs/Error.js.map +1 -1
  97. package/build/Dialogs/Message.js.map +1 -1
  98. package/build/Dialogs/SelectFile.d.ts +1 -1
  99. package/build/Dialogs/SelectFile.js +1 -1
  100. package/build/Dialogs/SelectFile.js.map +1 -1
  101. package/build/Dialogs/SelectID.d.ts +1 -1
  102. package/build/Dialogs/SelectID.js +1 -1
  103. package/build/Dialogs/SelectID.js.map +1 -1
  104. package/build/Dialogs/SimpleCron.js.map +1 -1
  105. package/build/Dialogs/TextInput.js +1 -1
  106. package/build/Dialogs/TextInput.js.map +1 -1
  107. package/build/GenericApp.d.ts +6 -4
  108. package/build/GenericApp.js +22 -16
  109. package/build/GenericApp.js.map +1 -1
  110. package/build/Prompt.js +7 -7
  111. package/build/Prompt.js.map +1 -1
  112. package/build/Theme.js +57 -11
  113. package/build/Theme.js.map +1 -1
  114. package/build/assets/devices/parseNames.js +1 -0
  115. package/build/assets/devices/parseNames.js.map +1 -1
  116. package/build/assets/rooms/parseNames.js +1 -0
  117. package/build/assets/rooms/parseNames.js.map +1 -1
  118. package/build/dictionary.js.map +1 -1
  119. package/build/globals.d.ts +2 -0
  120. package/build/i18n/de.json +5 -66
  121. package/build/i18n/en.json +5 -66
  122. package/build/i18n/es.json +5 -66
  123. package/build/i18n/fr.json +5 -66
  124. package/build/i18n/it.json +5 -61
  125. package/build/i18n/nl.json +5 -61
  126. package/build/i18n/pl.json +5 -61
  127. package/build/i18n/pt.json +5 -61
  128. package/build/i18n/ru.json +5 -61
  129. package/build/i18n/uk.json +5 -61
  130. package/build/i18n/zh-cn.json +5 -61
  131. package/build/i18n.js +12 -15
  132. package/build/i18n.js.map +1 -1
  133. package/build/index.css +56 -56
  134. package/build/index.d.ts +9 -4
  135. package/build/index.js +5 -2
  136. package/build/index.js.map +1 -1
  137. package/build/modulefederation.admin.config.d.ts +1 -0
  138. package/build/modulefederation.admin.config.js +1 -1
  139. package/build/modulefederation.admin.config.js.map +1 -1
  140. package/build/types.d.ts +4 -84
  141. package/i18n/de.json +5 -66
  142. package/i18n/en.json +5 -66
  143. package/i18n/es.json +5 -66
  144. package/i18n/fr.json +5 -66
  145. package/i18n/it.json +5 -61
  146. package/i18n/nl.json +5 -61
  147. package/i18n/pl.json +5 -61
  148. package/i18n/pt.json +5 -61
  149. package/i18n/ru.json +5 -61
  150. package/i18n/uk.json +5 -61
  151. package/i18n/zh-cn.json +5 -61
  152. package/index.css +56 -56
  153. package/modulefederation.admin.config.d.ts +1 -0
  154. package/modulefederation.admin.config.js +1 -2
  155. package/package.json +49 -34
  156. package/tasksExample.ts +93 -0
  157. package/build/LegacyConnection.d.ts +0 -938
  158. package/build/LegacyConnection.js +0 -2849
  159. package/build/LegacyConnection.js.map +0 -1
  160. package/tasksExample.js +0 -91
package/README.md CHANGED
@@ -1,80 +1,122 @@
1
- # Help ReactJS classes for adapter config
1
+ # ioBroker GUI components
2
2
 
3
- You can find demo on https://github.com/ioBroker/adapter-react-demo
3
+ `@iobroker/gui-components` is the shared React component library for ioBroker adapter configuration
4
+ pages, admin tabs and web applications: theme system, i18n, socket connection handling, object and file
5
+ browser, and a set of ready-to-use dialogs.
6
+
7
+ - Requires **React 19** and **MUI 9** (both are peer dependencies)
8
+ - Successor of `@iobroker/adapter-react-v5` (React 18 / MUI 6), which is still maintained on the
9
+ `adapter-react-v5` branch for older systems.
10
+ See [migration from 8.x to 10.x](MIGRATION_8_10.md)
11
+
12
+ You can find a demo on https://github.com/ioBroker/adapter-react-demo
4
13
 
5
14
  ## Getting started
6
15
 
7
- If you want to create the configuration page with ReactJS:
16
+ The GUI of an adapter is a standalone React application in the `src` directory of the adapter.
17
+ It is built with [vite](https://vite.dev/) and the result is copied into the `admin` directory.
18
+
19
+ 1. Create the GitHub repository for the adapter (e.g., with `npx @iobroker/create-adapter`).
20
+
21
+ 2. Create the GUI project in the `src` directory:
22
+
23
+ ```bash
24
+ npm create vite@latest src -- --template react-ts
25
+ ```
8
26
 
9
- 1. Create github repo for adapter.
10
- 2. execute `npx create-react-app src` . It will take a while.
11
- 3. `cd src`
12
- 4. Modify package.json file in src directory:
13
- - Change `name` from `src` to `ADAPTERNAME-admin` (Of course replace `ADAPTERNAME` with yours)
14
- - Add to devDependencies:
15
- ```json
16
- "@iobroker/adapter-react-v5": "^7.4.10",
17
- ```
18
- Versions can be higher.
19
- So your `src/package.json` should look like:
27
+ 3. Modify `src/package.json`:
20
28
 
21
29
  ```json
22
30
  {
23
31
  "name": "ADAPTERNAME-admin",
24
32
  "version": "0.1.0",
25
33
  "private": true,
34
+ "type": "module",
35
+ "homepage": ".",
26
36
  "dependencies": {
27
- "@iobroker/adapter-react-v5": "^7.4.10",
28
- "@iobroker/build-tools": "^1.0.0",
29
- "babel-eslint": "^10.1.0",
30
- "react-scripts": "^5.0.1"
37
+ "@emotion/react": "^11.14.0",
38
+ "@emotion/styled": "^11.14.1",
39
+ "@iobroker/gui-components": "^10.0.1",
40
+ "@mui/icons-material": "^9.0.1",
41
+ "@mui/material": "^9.0.1",
42
+ "react": "^19.2.5",
43
+ "react-dom": "^19.2.5"
44
+ },
45
+ "devDependencies": {
46
+ "@types/react": "^19.2.0",
47
+ "@types/react-dom": "^19.2.0",
48
+ "@vitejs/plugin-react": "^6.0.4",
49
+ "typescript": "~5.9.3",
50
+ "vite": "^8.1.5"
31
51
  },
32
52
  "scripts": {
33
- "start": "react-scripts start",
34
- "build": "react-scripts build",
35
- "test": "react-scripts test",
36
- "eject": "react-scripts eject"
53
+ "start": "vite",
54
+ "build": "vite build",
55
+ "preview": "vite preview"
56
+ }
57
+ }
58
+ ```
59
+
60
+ Of course, replace `ADAPTERNAME` with your adapter name. The versions can be higher, but React must
61
+ stay at 19 and MUI at 9.
62
+
63
+ 4. Write the vite configuration `src/vite.config.ts`. Important are `base` (the GUI is served from a
64
+ subdirectory of the admin) and `build.outDir` (the build script expects the result in `src/build`):
65
+
66
+ ```ts
67
+ import { defineConfig } from 'vite';
68
+ import react from '@vitejs/plugin-react';
69
+
70
+ export default defineConfig({
71
+ plugins: [react()],
72
+ base: './',
73
+ build: {
74
+ outDir: 'build',
37
75
  },
38
- "eslintConfig": {
39
- "extends": "react-app"
76
+ server: {
77
+ port: 3000,
40
78
  },
41
- "homepage": ".",
42
- "browserslist": [">0.2%", "not dead", "not ie <= 11", "not op_mini all"]
43
- }
79
+ });
80
+ ```
81
+
82
+ 5. Install the packages: `cd src && npm install && cd ..`
83
+
84
+ 6. Copy the build script into the root of the adapter:
85
+
86
+ ```bash
87
+ cp src/node_modules/@iobroker/gui-components/tasksExample.ts tasks.ts
44
88
  ```
45
89
 
46
- 5. Call in `src`: `npm install`
47
- 6. Copy `tasks.js` into `src`: `cp node_modules/@iobroker/adapter-react-v5/tasks.js tasks.js`
48
- 7. Add scripts to your `package.json` `scripts` section:
90
+ The build script is TypeScript and is executed directly by node, which strips the types at load
91
+ time. This requires **node >= 22.18** (or >= 23.6). Note that node does not resolve the extension
92
+ for TypeScript, so the scripts below must call `node tasks.ts` and not `node tasks`.
93
+
94
+ 7. Add `@iobroker/build-tools` to the `devDependencies` of the **adapter** `package.json` and the
95
+ following scripts:
49
96
 
50
97
  ```json
51
- "scripts": {
52
- "0-clean": "node tasks --0-clean",
53
- "1-npm": "node tasks --1-npm",
54
- "2-build": "node tasks --2-build",
55
- "3-copy": "node tasks --3-copy",
56
- "4-patch": "node tasks --4-patch",
57
- "build": "node tasks"
98
+ {
99
+ "scripts": {
100
+ "0-clean": "node tasks.ts --0-clean",
101
+ "1-npm": "node tasks.ts --1-npm",
102
+ "2-build": "node tasks.ts --2-build",
103
+ "3-copy": "node tasks.ts --3-copy",
104
+ "4-patch": "node tasks.ts --4-patch",
105
+ "build": "node tasks.ts"
106
+ }
58
107
  }
59
108
  ```
60
109
 
61
- 7. Start your dummy application `npm run start` for developing or build with `npm run build` and
62
- copy files in `build` directory to `www` or to `admin`. In the admin you must rename `index.html` to `index_m.html`.
63
- 8. You can do that with `npm` tasks: `npm run build`
110
+ 8. Develop with `cd src && npm run start` (vite dev server on port 3000) or build everything with
111
+ `npm run build` in the adapter root. The build copies all files into the `admin` directory and
112
+ patches the socket.io script tag in `index.html`.
64
113
 
65
114
  ## Development
66
115
 
67
- 1. Add `socket.io` to `public/index.html`.
68
- After
69
-
70
- ```html
71
- <link
72
- rel="manifest"
73
- href="%PUBLIC_URL%/manifest.json"
74
- />
75
- ```
116
+ ### 1. Load socket.io in `src/index.html`
76
117
 
77
- insert
118
+ The GUI does not bundle socket.io. It is delivered by the admin instance and must be loaded before the
119
+ application starts. Add this to the `<head>` of `src/index.html`:
78
120
 
79
121
  ```html
80
122
  <script>
@@ -91,343 +133,425 @@ insert
91
133
  script.onload = function () {
92
134
  typeof window.socketLoadedHandler === 'function' && window.socketLoadedHandler();
93
135
  };
136
+ // On the vite dev server (port 3000) the socket must be loaded from the admin instance (port 8081)
94
137
  script.src =
95
138
  window.location.port === '3000'
96
- ? window.location.protocol +
97
- '//' +
98
- (query.host || window.location.hostname) +
99
- ':' +
100
- (query.port || 8081) +
101
- '/lib/js/socket.io.js'
102
- : '%PUBLIC_URL%/../../lib/js/socket.io.js';
139
+ ? `${window.location.protocol}//${query.host || window.location.hostname}:${query.port || 8081}/lib/js/socket.io.js`
140
+ : './../../lib/js/socket.io.js';
103
141
 
104
142
  document.head.appendChild(script);
105
143
  </script>
106
144
  ```
107
145
 
108
- 3. Add to App.js constructor initialization for I18n:
109
-
110
- ```jsx
111
- class App extends GenericApp {
112
- constructor(props) {
113
- const extendedProps = { ...props };
114
- extendedProps.encryptedFields = ['pass']; // this parameter will be encrypted and decrypted automatically
115
- extendedProps.translations = {
116
- en: require('./i18n/en'),
117
- de: require('./i18n/de'),
118
- ru: require('./i18n/ru'),
119
- pt: require('./i18n/pt'),
120
- nl: require('./i18n/nl'),
121
- fr: require('./i18n/fr'),
122
- it: require('./i18n/it'),
123
- es: require('./i18n/es'),
124
- pl: require('./i18n/pl'),
125
- uk: require('./i18n/uk'),
126
- 'zh-cn': require('./i18n/zh-cn'),
127
- };
128
- // get actual admin port
146
+ `node tasks.ts --4-patch` replaces this block in the built `index.html` with a direct include of
147
+ `./../../lib/js/socket.io.js`.
148
+
149
+ ### 2. Extend `GenericApp` in `src/src/App.tsx`
150
+
151
+ `GenericApp` handles the socket connection, the theme, loading and saving of the instance
152
+ configuration, the save/close buttons, and the Sentry initialization.
153
+
154
+ ```tsx
155
+ import React from 'react';
156
+ import { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';
157
+ import {
158
+ GenericApp,
159
+ Loader,
160
+ I18n,
161
+ type GenericAppProps,
162
+ type GenericAppSettings,
163
+ type GenericAppState,
164
+ } from '@iobroker/gui-components';
165
+
166
+ import en from './i18n/en.json';
167
+ import de from './i18n/de.json';
168
+ import ru from './i18n/ru.json';
169
+ import pt from './i18n/pt.json';
170
+ import nl from './i18n/nl.json';
171
+ import fr from './i18n/fr.json';
172
+ import it from './i18n/it.json';
173
+ import es from './i18n/es.json';
174
+ import pl from './i18n/pl.json';
175
+ import uk from './i18n/uk.json';
176
+ import zhCn from './i18n/zh-cn.json';
177
+
178
+ interface AppState extends GenericAppState {
179
+ // your own state
180
+ }
181
+
182
+ export default class App extends GenericApp<GenericAppProps, AppState> {
183
+ constructor(props: GenericAppProps) {
184
+ const extendedProps: GenericAppSettings = { ...props };
185
+ // these fields will be encrypted and decrypted automatically
186
+ extendedProps.encryptedFields = ['pass'];
187
+ extendedProps.translations = { en, de, ru, pt, nl, fr, it, es, pl, uk, 'zh-cn': zhCn };
188
+ // get the actual admin port
129
189
  extendedProps.socket = { port: parseInt(window.location.port, 10) };
130
190
 
131
- // Only if close, save buttons are not required at the bottom (e.g. if admin tab)
191
+ // only if the save/close buttons at the bottom are not required (e.g., for an admin tab)
132
192
  // extendedProps.bottomButtons = false;
133
193
 
134
- // only for debug purposes
194
+ // only for debug purposes: the vite dev server runs on 3000, the admin on 8081
135
195
  if (extendedProps.socket.port === 3000) {
136
196
  extendedProps.socket.port = 8081;
137
197
  }
138
198
 
139
- // allow to manage GenericApp the sentry initialisation or do not set the sentryDSN if no sentry available
199
+ // let GenericApp manage the Sentry initialization. Do not set it if no Sentry is available
140
200
  extendedProps.sentryDSN = 'https://yyy@sentry.iobroker.net/xx';
141
201
 
142
- super(extendedProps);
202
+ super(props, extendedProps);
203
+ }
204
+
205
+ onConnectionReady(): void {
206
+ // called after the socket is connected and the configuration is loaded
207
+ }
208
+
209
+ render(): React.JSX.Element {
210
+ if (!this.state.loaded) {
211
+ return (
212
+ <StyledEngineProvider injectFirst>
213
+ <ThemeProvider theme={this.state.theme}>
214
+ <Loader themeType={this.state.themeType} />
215
+ </ThemeProvider>
216
+ </StyledEngineProvider>
217
+ );
218
+ }
219
+
220
+ return (
221
+ <StyledEngineProvider injectFirst>
222
+ <ThemeProvider theme={this.state.theme}>
223
+ <div
224
+ className="App"
225
+ style={{
226
+ background: this.state.theme.palette.background.default,
227
+ color: this.state.theme.palette.text.primary,
228
+ }}
229
+ >
230
+ <div>
231
+ {I18n.t('Port')}:
232
+ <input
233
+ value={this.state.native.port || ''}
234
+ onChange={e => this.updateNativeValue('port', e.target.value)}
235
+ />
236
+ </div>
237
+ {/* renders the error, toast, alert dialogs and the save/close buttons */}
238
+ {this.renderHelperDialogs()}
239
+ </div>
240
+ </ThemeProvider>
241
+ </StyledEngineProvider>
242
+ );
143
243
  }
144
- // ...
145
244
  }
146
245
  ```
147
246
 
148
- 4. Replace `index.js` with the following code to support themes:
247
+ ### 3. Entry point `src/src/index.tsx`
149
248
 
150
- ```jsx
249
+ ```tsx
151
250
  import React from 'react';
152
251
  import { createRoot } from 'react-dom/client';
153
- import * as serviceWorker from './serviceWorker';
154
252
 
155
253
  import './index.css';
156
254
  import App from './App';
157
255
  import { version } from '../package.json';
158
256
 
159
- console.log(`iobroker.scenes@${version}`);
257
+ console.log(`iobroker.ADAPTERNAME@${version}`);
160
258
 
161
259
  const container = document.getElementById('root');
162
- const root = createRoot(container);
163
- root.render(<App />);
164
-
165
- // If you want your app to work offline and load faster, you can change
166
- // unregister() to register() below. Note this comes with some pitfalls.
167
- // Learn more about service workers: http://bit.ly/CRA-PWA
168
- serviceWorker.unregister();
260
+ if (container) {
261
+ createRoot(container).render(<App />);
262
+ }
169
263
  ```
170
264
 
171
- 5. Add to App.js encoding and decoding of values:
265
+ ### 4. Encrypt and decrypt values
172
266
 
173
- ```jsx
174
- class App extends GenericApp {
267
+ Fields listed in `encryptedFields` are encrypted and decrypted automatically. If you need more control,
268
+ override the hooks:
269
+
270
+ ```tsx
271
+ class App extends GenericApp<GenericAppProps, AppState> {
175
272
  // ...
176
- onPrepareLoad(settings) {
177
- settings.pass = this.decode(settings.pass);
273
+ onPrepareLoad(settings: Record<string, any>, encryptedNative?: string[]): void {
274
+ settings.pass = this.decrypt(settings.pass);
178
275
  }
179
- onPrepareSave(settings) {
180
- settings.pass = this.encode(settings.pass);
276
+
277
+ onPrepareSave(settings: Record<string, any>): boolean {
278
+ settings.pass = this.encrypt(settings.pass);
279
+ return true;
181
280
  }
182
281
  }
183
282
  ```
184
283
 
185
- 6. The optional step is to validate the data to be saved:
186
-
187
- ```jsx
188
- onPrepareSave(settings) {
189
- super.onPrepareSave(settings);
190
- if (DATA_INVALID) {
191
- return false; // configuration will not be saved
192
- } else {
193
- return true;
194
- }
195
- }
284
+ ### 5. Validate the data before saving (optional)
285
+
286
+ ```tsx
287
+ onPrepareSave(settings: Record<string, any>): boolean {
288
+ super.onPrepareSave(settings);
289
+ if (DATA_INVALID) {
290
+ return false; // the configuration will not be saved
291
+ }
292
+ return true;
293
+ }
196
294
  ```
197
295
 
198
296
  ## Components
199
297
 
200
- ### Connection.tsx
201
-
202
- This is a non-React class to provide the communication for socket connection with the server.
298
+ All components, dialogs, icons, and types are exported from the package root:
203
299
 
204
- ### GenericApp.tsx
300
+ ```ts
301
+ import { GenericApp, ObjectBrowser, DialogSelectID, I18n, Utils } from '@iobroker/gui-components';
302
+ ```
205
303
 
206
- ### i18n.ts
304
+ ### Core modules
207
305
 
208
- ### Theme.tsx
306
+ | Module | Description |
307
+ | -------------------------------- | ------------------------------------------------------------------------------------------------ |
308
+ | `GenericApp` | Base class of every adapter GUI: connection, theme, config load/save, save/close buttons, Sentry |
309
+ | `Connection` / `AdminConnection` | Re-export of the socket classes from `@iobroker/socket-client` |
310
+ | `I18n` | Static translation class (`I18n.t`, `I18n.setLanguage`, `I18n.getLanguage`) |
311
+ | `Theme` | MUI theme factory that produces the ioBroker themes (`IobTheme`) |
312
+ | `Router` | Simple hash-based router |
313
+ | `Utils` | Helper functions for names, icons, colors, clipboard, ... |
209
314
 
210
315
  ### Dialogs
211
316
 
212
- Some dialogs are predefined and could be used out of the box.
317
+ Some dialogs are predefined and can be used out of the box. In all dialogs, the OK button is first (on
318
+ the left) and the cancel button is last (on the right).
213
319
 
214
- #### Confirm.tsx
320
+ | Dialog | Deprecated alias | Description |
321
+ | ------------------- | ------------------- | ------------------------------------- |
322
+ | `DialogConfirm` | `Confirm` | Yes/no question, can be suppressed |
323
+ | `DialogError` | `Error` | Error message |
324
+ | `DialogMessage` | `Message` | Information message |
325
+ | `DialogTextInput` | `TextInput` | Ask for a text |
326
+ | `DialogSelectID` | `SelectID` | Object ID selector |
327
+ | `DialogSelectFile` | `SelectFile` | File selector |
328
+ | `DialogCron` | `Cron` | CRON editor (wizard, simple, complex) |
329
+ | `DialogSimpleCron` | `SimpleCronDialog` | Only the simple CRON editor |
330
+ | `DialogComplexCron` | `ComplexCronDialog` | Only the complex CRON editor |
215
331
 
216
- <!-- TODO: Provide screenshot here -->
332
+ #### DialogConfirm
217
333
 
218
- Usage:
334
+ <!-- TODO: Provide screenshot here -->
219
335
 
220
- ```jsx
336
+ ```tsx
221
337
  import React from 'react';
222
- import { I18n, Confirm as ConfirmDialog } from '@iobroker/adapter-react-v5';
223
-
224
- class ExportImportDialog extends React.Component {
225
- constructor(props) {
226
- super(props);
227
-
228
- this.state = {
229
- confirmDialog: false,
230
- };
231
- }
232
-
233
- renderConfirmDialog() {
234
- if (!this.state.confirmDialog) {
235
- return null;
236
- }
237
- return (
238
- <ConfirmDialog
239
- title={I18n.t('Scene will be overwritten.')}
240
- text={I18n.t('All data will be lost. Confirm?')}
241
- ok={I18n.t('Yes')}
242
- cancel={I18n.t('Cancel')}
243
- suppressQuestionMinutes={5}
244
- dialogName="myConfirmDialogThatCouldBeSuppressed"
245
- suppressText={I18n.t('Suppress question for next %s minutes', 5)}
246
- onClose={isYes => {
247
- this.setState({ confirmDialog: false });
248
- }}
249
- />
250
- );
251
- }
252
- render() {
253
- return (
254
- <div>
255
- <Button onClick={() => this.setState({ confirmDialog: true })}>Click</Button>
256
- {this.renderConfirmDialog()}
257
- </div>
258
- );
259
- }
338
+ import { Button } from '@mui/material';
339
+ import { I18n, DialogConfirm } from '@iobroker/gui-components';
340
+
341
+ export default function ExportImportDialog(): React.JSX.Element {
342
+ const [confirmDialog, setConfirmDialog] = React.useState(false);
343
+
344
+ return (
345
+ <div>
346
+ <Button onClick={() => setConfirmDialog(true)}>Click</Button>
347
+ {confirmDialog ? (
348
+ <DialogConfirm
349
+ title={I18n.t('Scene will be overwritten.')}
350
+ text={I18n.t('All data will be lost. Confirm?')}
351
+ ok={I18n.t('Yes')}
352
+ cancel={I18n.t('Cancel')}
353
+ suppressQuestionMinutes={5}
354
+ // `dialogName` is required if `suppressQuestionMinutes` is used
355
+ dialogName="myConfirmDialogThatCouldBeSuppressed"
356
+ suppressText={I18n.t('Suppress question for next %s minutes', 5)}
357
+ onClose={(isYes: boolean) => {
358
+ setConfirmDialog(false);
359
+ if (isYes) {
360
+ // do something
361
+ }
362
+ }}
363
+ />
364
+ ) : null}
365
+ </div>
366
+ );
260
367
  }
261
-
262
- export default ExportImportDialog;
263
368
  ```
264
369
 
265
- #### Error.tsx
370
+ #### DialogError
266
371
 
267
372
  <!-- TODO: Provide screenshot here -->
268
373
 
269
- #### Message.tsx
374
+ ```tsx
375
+ {
376
+ this.state.errorText ? (
377
+ <DialogError
378
+ text={this.state.errorText}
379
+ onClose={() => this.setState({ errorText: '' })}
380
+ />
381
+ ) : null;
382
+ }
383
+ ```
384
+
385
+ #### DialogMessage
270
386
 
271
387
  <!-- TODO: Provide screenshot here -->
272
388
 
273
- ```jsx
274
- renderMessage() {
275
- if (this.state.showMessage) {
276
- return <Message
277
- text={this.state.showMessage}
278
- onClose={() => this.setState({showMessage: false})}
279
- />;
280
- } else {
281
- return null;
282
- }
389
+ ```tsx
390
+ {
391
+ this.state.showMessage ? (
392
+ <DialogMessage
393
+ text={this.state.showMessage}
394
+ onClose={() => this.setState({ showMessage: '' })}
395
+ />
396
+ ) : null;
283
397
  }
284
398
  ```
285
399
 
286
- #### SelectID.tsx
400
+ #### DialogSelectID
287
401
 
288
- ![Logo](img/selectID.png)
402
+ <!-- TODO: Provide screenshot here -->
289
403
 
290
- ```jsx
291
- import { SelectID as DialogSelectID } from '@iobroker/adapter-react-v5';
404
+ ```tsx
405
+ import React, { Component } from 'react';
406
+ import { DialogSelectID, type IobTheme } from '@iobroker/gui-components';
407
+ import type { AdminConnection } from '@iobroker/socket-client';
292
408
 
293
- class MyComponent extends Component {
294
- constructor(props) {
295
- super(props);
296
- this.state = {
297
- showSelectId: false,
298
- };
299
- }
409
+ interface MyComponentProps {
410
+ socket: AdminConnection;
411
+ theme: IobTheme;
412
+ themeType: 'dark' | 'light';
413
+ adapterName: string;
414
+ }
300
415
 
301
- renderSelectIdDialog() {
302
- if (this.state.showSelectId) {
303
- return (
304
- <DialogSelectID
305
- key="tableSelect"
306
- imagePrefix="../.."
307
- dialogName={this.props.adapterName}
308
- themeType={this.props.themeType}
309
- socket={this.props.socket}
310
- statesOnly={true}
311
- selected={this.state.selectIdValue}
312
- onClose={() => this.setState({ showSelectId: false })}
313
- onOk={(selected, name) => {
314
- this.setState({ showSelectId: false, selectIdValue: selected });
315
- }}
316
- />
317
- );
318
- } else {
416
+ class MyComponent extends Component<MyComponentProps, { showSelectId: boolean; selectIdValue: string }> {
417
+ renderSelectIdDialog(): React.JSX.Element | null {
418
+ if (!this.state.showSelectId) {
319
419
  return null;
320
420
  }
421
+ return (
422
+ <DialogSelectID
423
+ imagePrefix="../.."
424
+ dialogName={this.props.adapterName}
425
+ // `theme` is mandatory, without it the dialog will crash
426
+ theme={this.props.theme}
427
+ themeType={this.props.themeType}
428
+ socket={this.props.socket}
429
+ types={['state']}
430
+ selected={this.state.selectIdValue}
431
+ onClose={() => this.setState({ showSelectId: false })}
432
+ onOk={(selected, _name) => this.setState({ showSelectId: false, selectIdValue: selected as string })}
433
+ />
434
+ );
321
435
  }
322
- render() {
323
- return renderSelectIdDialog();
436
+
437
+ render(): React.JSX.Element | null {
438
+ return this.renderSelectIdDialog();
324
439
  }
325
440
  }
326
441
  ```
327
442
 
328
- #### Cron
329
-
330
- Include `"react-text-mask": "^5.4.3",` in package.json.
443
+ #### DialogCron
331
444
 
332
445
  <!-- TODO: Provide screenshot here -->
333
446
 
334
- ```jsx
335
- function renderCron() {
447
+ ```tsx
448
+ function renderCron(): React.JSX.Element | null {
336
449
  if (!showCron) {
337
450
  return null;
338
- } else {
339
- return (
340
- <DialogCron
341
- key="dialogCron1"
342
- cron={this.state.cronValue || '* * * * *'}
343
- onClose={() => this.setState({ showCron: false })}
344
- onOk={cronValue => {
345
- this.setState({ cronValue });
346
- }}
347
- />
348
- );
349
451
  }
452
+ return (
453
+ <DialogCron
454
+ cron={this.state.cronValue || '* * * * *'}
455
+ // `theme` is mandatory
456
+ theme={this.props.theme}
457
+ // noWizard, simple or complex can limit the available editors
458
+ onClose={() => this.setState({ showCron: false })}
459
+ onOk={(cronValue: string) => this.setState({ cronValue })}
460
+ />
461
+ );
350
462
  }
351
463
  ```
352
464
 
353
- ### Components
465
+ ### Component examples
354
466
 
355
- #### Utils.tsx
467
+ #### Utils
356
468
 
357
469
  ##### getObjectNameFromObj
358
470
 
359
- `getObjectNameFromObj(obj, settings, options, isDesc)`
471
+ `getObjectNameFromObj(obj, settings, options, isDesc, noTrim)`
360
472
 
361
- Get object name from a single object.
473
+ Get the name from a single object.
362
474
 
363
- Usage: `Utils.getObjectNameFromObj(this.objects[id], null, {language: I18n.getLanguage()})`
475
+ Usage: `Utils.getObjectNameFromObj(this.objects[id], null, { language: I18n.getLanguage() })`
364
476
 
365
477
  ##### getObjectIcon
366
478
 
367
479
  `getObjectIcon(id, obj)`
368
480
 
369
- Get icon from the object.
370
-
371
- Usage:
481
+ Get the icon from the object.
372
482
 
373
- ```jsx
483
+ ```tsx
374
484
  const icon = Utils.getObjectIcon(id, this.objects[id]);
375
- return <img src={icon} />;
485
+ return (
486
+ <img
487
+ src={icon}
488
+ alt=""
489
+ />
490
+ );
376
491
  ```
377
492
 
378
493
  ##### isUseBright
379
494
 
380
495
  `isUseBright(color, defaultValue)`
381
496
 
382
- Usage: `
497
+ Returns `true` if a bright (white) text must be used on the given background color.
383
498
 
384
- #### Loader.tsx
499
+ Usage: `const textColor = Utils.isUseBright(backgroundColor) ? '#FFF' : '#000';`
385
500
 
386
- ![Logo](img/loader.png)
501
+ #### Loader
387
502
 
388
- ```jsx
389
- render() {
390
- if (!this.state.loaded) {
391
- return <MuiThemeProvider theme={this.state.theme}>
392
- <Loader theme={this.state.themeType}/>
393
- </MuiThemeProvider>;
394
- }
395
- // render loaded data
396
- }
503
+ <!-- TODO: Provide screenshot here -->
397
504
 
398
- ```
505
+ The loader detects the vendor (`window.vendorPrefix`) and shows the corresponding animation.
399
506
 
400
- #### Logo.tsx
401
-
402
- ![Logo](img/logo.png)
403
-
404
- ```jsx
405
- render() {
406
- return <form className={this.props.classes.tab}>
407
- <Logo
408
- instance={this.props.instance}
409
- common={this.props.common}
410
- native={this.props.native}
411
- onError={text => this.setState({errorText: text})}
412
- onLoad={this.props.onLoad}
413
- />
414
- ...
415
- </form>;
507
+ ```tsx
508
+ render(): React.JSX.Element {
509
+ if (!this.state.loaded) {
510
+ return (
511
+ <StyledEngineProvider injectFirst>
512
+ <ThemeProvider theme={this.state.theme}>
513
+ <Loader themeType={this.state.themeType} />
514
+ </ThemeProvider>
515
+ </StyledEngineProvider>
516
+ );
517
+ }
518
+ // render the loaded data
416
519
  }
417
520
  ```
418
521
 
419
- #### Router.tsx
522
+ #### Logo
523
+
524
+ <!-- TODO: Provide screenshot here -->
525
+
526
+ Shows the adapter logo and the import/export buttons for the configuration.
527
+
528
+ ```tsx
529
+ render(): React.JSX.Element {
530
+ return (
531
+ <form style={styles.tab}>
532
+ <Logo
533
+ instance={this.props.instance}
534
+ common={this.props.common}
535
+ native={this.props.native}
536
+ onError={(text: string) => this.setState({ errorText: text })}
537
+ onLoad={this.props.onLoad}
538
+ />
539
+ ...
540
+ </form>
541
+ );
542
+ }
543
+ ```
420
544
 
421
- #### ObjectBrowser.js
545
+ #### ObjectBrowser
422
546
 
423
- It is better to use `Dialog/SelectID`, but if you want:
547
+ It is better to use `DialogSelectID`, but if you want:
424
548
 
425
- ![Logo](img/objectBrowser.png)
549
+ <!-- TODO: Provide screenshot here -->
426
550
 
427
- ```jsx
551
+ ```tsx
428
552
  <ObjectBrowser
429
553
  foldersFirst={this.props.foldersFirst}
430
- imagePrefix={this.props.imagePrefix || this.props.prefix} // prefix is for back compatibility
554
+ imagePrefix={this.props.imagePrefix}
431
555
  defaultFilters={this.filters}
432
556
  dialogName={this.dialogName}
433
557
  showExpertButton={this.props.showExpertButton !== undefined ? this.props.showExpertButton : true}
@@ -459,21 +583,25 @@ It is better to use `Dialog/SelectID`, but if you want:
459
583
  />
460
584
  ```
461
585
 
462
- #### TreeTable.ts
586
+ #### TreeTable
463
587
 
464
- ![Logo](img/tableTree.png)
588
+ <!-- TODO: Provide screenshot here -->
465
589
 
466
- ```jsx
590
+ ```tsx
467
591
  // STYLES
468
- const styles = {
592
+ const styles: Record<string, React.CSSProperties> = {
469
593
  tableDiv: {
470
594
  width: '100%',
471
595
  overflow: 'hidden',
472
596
  height: 'calc(100% - 48px)',
473
597
  },
474
598
  };
475
- class MyComponent extends Component {
476
- constructor(props) {
599
+
600
+ class MyComponent extends Component<MyComponentProps, MyComponentState> {
601
+ // the `Column` type is not exported, the structure is described below
602
+ private readonly columns: Record<string, any>[];
603
+
604
+ constructor(props: MyComponentProps) {
477
605
  super(props);
478
606
 
479
607
  this.state = {
@@ -534,13 +662,16 @@ class MyComponent extends Component {
534
662
  },
535
663
  ];
536
664
  }
537
- // renderTable
538
- render() {
665
+
666
+ render(): React.JSX.Element {
539
667
  return (
540
- <div className={this.props.classes.tableDiv}>
668
+ <div style={styles.tableDiv}>
541
669
  <TreeTable
542
670
  columns={this.columns}
543
671
  data={this.state.data}
672
+ // `theme` and `adapterName` are mandatory
673
+ theme={this.props.theme}
674
+ adapterName={this.props.adapterName}
544
675
  onUpdate={(newData, oldData) => {
545
676
  const data = JSON.parse(JSON.stringify(this.state.data));
546
677
 
@@ -548,24 +679,23 @@ class MyComponent extends Component {
548
679
  if (newData === true) {
549
680
  // find unique ID
550
681
  let i = 1;
551
- let id = 'line_' + i;
682
+ let id = `line_${i}`;
552
683
 
553
- // eslint-disable-next-line
554
684
  while (this.state.data.find(item => item.id === id)) {
555
685
  i++;
556
- id = 'line_' + i;
686
+ id = `line_${i}`;
557
687
  }
558
688
 
559
689
  data.push({
560
690
  id,
561
- name: I18n.t('New resource') + '_' + i,
691
+ name: `${I18n.t('New resource')}_${i}`,
562
692
  color: '',
563
693
  icon: '',
564
694
  unit: '',
565
695
  price: 0,
566
696
  });
567
697
  } else {
568
- // existing line was modifed
698
+ // an existing line was modified
569
699
  const pos = this.state.data.indexOf(oldData);
570
700
  if (pos !== -1) {
571
701
  Object.keys(newData).forEach(attr => (data[pos][attr] = newData[attr]));
@@ -575,7 +705,6 @@ class MyComponent extends Component {
575
705
  this.setState({ data });
576
706
  }}
577
707
  onDelete={oldData => {
578
- console.log('Delete: ' + JSON.stringify(oldData));
579
708
  const pos = this.state.data.indexOf(oldData);
580
709
  if (pos !== -1) {
581
710
  const data = JSON.parse(JSON.stringify(this.state.data));
@@ -594,75 +723,112 @@ class MyComponent extends Component {
594
723
 
595
724
  <!-- TODO: Provide screenshot here -->
596
725
 
597
- Toast is not a part of `adapter-react` but it is an example how to use toast in application:
598
-
599
- ```jsx
600
- import { Component } from 'react';
601
- import { Snackbar } from '@mui/material';
726
+ Toast is not a part of this package, but this is an example of how to use a toast in the application.
727
+ `GenericApp` already provides one via `this.showToast('text')`.
602
728
 
603
- class MyComponent extends Component {
604
- constructor(props) {
605
- super(props);
606
- this.state = {
607
- // ....
608
- toast: '',
609
- };
610
- }
729
+ ```tsx
730
+ import React, { Component } from 'react';
731
+ import { IconButton, Snackbar } from '@mui/material';
732
+ import { Close as IconClose } from '@mui/icons-material';
611
733
 
612
- // ...
613
- renderToast() {
734
+ class MyComponent extends Component<MyComponentProps, { toast: string }> {
735
+ renderToast(): React.JSX.Element | null {
614
736
  if (!this.state.toast) {
615
737
  return null;
616
738
  }
617
739
  return (
618
740
  <Snackbar
619
- anchorOrigin={{
620
- vertical: 'bottom',
621
- horizontal: 'left',
622
- }}
623
- open={true}
741
+ anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
742
+ open
624
743
  autoHideDuration={6000}
625
744
  onClose={() => this.setState({ toast: '' })}
626
- ContentProps={{ 'aria-describedby': 'message-id' }}
745
+ // MUI 9: `ContentProps` was replaced by `slotProps`
746
+ slotProps={{ content: { 'aria-describedby': 'message-id' } }}
627
747
  message={<span id="message-id">{this.state.toast}</span>}
628
- action={[
748
+ action={
629
749
  <IconButton
630
750
  key="close"
631
751
  aria-label="Close"
632
752
  color="inherit"
633
- className={this.props.classes.close}
634
753
  onClick={() => this.setState({ toast: '' })}
635
754
  >
636
755
  <IconClose />
637
- </IconButton>,
638
- ]}
756
+ </IconButton>
757
+ }
639
758
  />
640
759
  );
641
760
  }
642
761
 
643
- render() {
762
+ render(): React.JSX.Element {
644
763
  return <div>{this.renderToast()}</div>;
645
764
  }
646
765
  }
647
766
  ```
648
767
 
649
- ## List of adapters that use adapter-react
650
-
651
- - Admin
652
- - Backitup
653
- - iot
654
- - echarts
655
- - text2command
656
- - scenes
657
- - javascript
658
- - devices
659
- - eventlist
660
- - cameras
661
- - web
662
- - vis-2
663
- - vis-2-widgets-xxx
664
- - fullcalendar
665
- - openweathermap
768
+ ### Further components
769
+
770
+ | Component | Description |
771
+ | ----------------------------------------- | -------------------------------------------------------------------------- |
772
+ | `ColorPicker` | Color selector with a custom palette |
773
+ | `CustomModal` | Simple modal dialog with OK/Cancel |
774
+ | `DeviceTypeSelector` / `DeviceTypeIcon` | Selector and icons for the device types of `@iobroker/type-detector` |
775
+ | `FileBrowser` | Browser for the files of the ioBroker file system |
776
+ | `FileViewer` | Viewer/editor for a single file |
777
+ | `IconPicker` / `IconSelector` | Selection of an icon (base64 or from the icon sets) |
778
+ | `Icon` / `Image` | Renders an icon or an image from any source (base64, URL, UTF-8 character) |
779
+ | `InfoBox` | Colored box for hints, warnings, and errors |
780
+ | `Loader`, `LoaderPT`, `LoaderMV`, ... | Vendor-specific loading animations |
781
+ | `Logo` | Adapter logo with import/export of the configuration |
782
+ | `SaveCloseButtons` | Save and close buttons (used by `GenericApp`) |
783
+ | `Schedule` | Editor for the ioBroker schedule format |
784
+ | `SelectWithIcon` | Select box with icons (e.g., for rooms and functions) |
785
+ | `SimpleCron` / `ComplexCron` | Inline CRON editors |
786
+ | `TabContainer`, `TabHeader`, `TabContent` | Layout components for tabs in the adapter configuration |
787
+ | `TableResize` | Table with resizable columns |
788
+ | `TextWithIcon` | Text with the icon of the object in front |
789
+ | `ToggleThemeMenu` | Menu to switch between the themes |
790
+ | `UploadImage` | Upload with drag-and-drop and cropper |
791
+ | `iobUriParse` / `iobUriRead` | Helpers to parse and read `iob://` URIs |
792
+
793
+ ### Module federation
794
+
795
+ The ioBroker admin loads the adapter GUIs as micro-frontends. The list of the packages that must be
796
+ shared is delivered with this package:
797
+
798
+ ```js
799
+ const { moduleFederationShared } = require('@iobroker/gui-components/modulefederation.admin.config');
800
+ ```
801
+
802
+ ## Test GUI
803
+
804
+ The `test-gui` directory contains a vite application to develop and test the components visually.
805
+ It imports directly from `../../src`, so changes are visible immediately:
806
+
807
+ ```bash
808
+ cd test-gui
809
+ npm install
810
+ npm start
811
+ ```
812
+
813
+ It expects a running ioBroker admin on `127.0.0.1:8081`.
814
+
815
+ ## List of adapters that use this library
816
+
817
+ - Admin
818
+ - Backitup
819
+ - iot
820
+ - echarts
821
+ - text2command
822
+ - scenes
823
+ - javascript
824
+ - devices
825
+ - eventlist
826
+ - cameras
827
+ - web
828
+ - vis-2
829
+ - vis-2-widgets-xxx
830
+ - fullcalendar
831
+ - openweathermap
666
832
 
667
833
  ## Usability
668
834
 
@@ -679,9 +845,10 @@ The icons may not be reused in other projects without the proper flaticon licens
679
845
 
680
846
  You can find the migration instructions:
681
847
 
682
- - [from adapter-react-v5@6.x to adapter-react-v5@7.x](MIGRATION_6_7.md)
683
- - [from adapter-react-v5@5.x to adapter-react-v5@6.x](MIGRATION_5_6.md)
684
- - [from adapter-react to adapter-react-v5@5.x](MIGRATION_4_5.md)
848
+ - [from adapter-react-v5@8.x to gui-components@10.x](MIGRATION_8_10.md)
849
+ - [from adapter-react-v5@6.x to adapter-react-v5@7.x](MIGRATION_6_7.md)
850
+ - [from adapter-react-v5@5.x to adapter-react-v5@6.x](MIGRATION_5_6.md)
851
+ - [from adapter-react to adapter-react-v5@5.x](MIGRATION_4_5.md)
685
852
 
686
853
  <!--
687
854
  Placeholder for the next version (at the beginning of the line):
@@ -689,747 +856,871 @@ You can find the migration instructions:
689
856
  -->
690
857
 
691
858
  ## Changelog
692
- ### 8.0.1 (2025-10-23)
859
+ ### 10.0.1 (2026-07-25)
860
+
861
+ - (@GermanBluefox) BREAKING: Package renamed from `@iobroker/adapter-react-v5` to `@iobroker/gui-components`
862
+ - (@GermanBluefox) BREAKING: React19 + MUI9
863
+ - (@GermanBluefox) BREAKING: Removed `LegacyConnection`. Use `Connection`/`AdminConnection` instead
864
+ - (@GermanBluefox) Used TypeScript 6
865
+ - (@GermanBluefox) Updated README and added the migration guide `MIGRATION_8_10.md`
866
+
867
+ ### 8.3.2 (2026-07-22)
868
+
869
+ - (@GermanBluefox) Corrected tooltip if object is wrong
870
+
871
+ ### 8.3.1 (2026-07-12)
872
+
873
+ - (@GermanBluefox) Used strict types
874
+
875
+ ### 8.2.13 (2026-06-21)
876
+
877
+ - (@GermanBluefox) Updated socket-client package to support web-socket-only mode
878
+
879
+ ### 8.2.12 (2026-06-20)
880
+
881
+ - (@GermanBluefox) Corrected InfoBox color
882
+
883
+ ### 8.2.11 (2026-06-19)
884
+
885
+ - (@GermanBluefox) Correcting background of state if overloaded
886
+ - (@GermanBluefox) Moved translations for json-config to another package
887
+
888
+ ### 8.2.10 (2026-06-16)
889
+
890
+ - (@GermanBluefox) Corrected the folder creation
891
+
892
+ ### 8.2.9 (2026-06-12)
893
+
894
+ - (@GermanBluefox) Updated socket-client package to support reverse proxy
895
+
896
+ ### 8.2.8 (2026-06-11)
897
+
898
+ - (@GermanBluefox) Added object and file navigation
899
+
900
+ ### 8.2.7 (2026-05-29)
901
+
902
+ - (@GermanBluefox) Updated loader
903
+
904
+ ### 8.2.6 (2026-05-25)
905
+
906
+ - (@GermanBluefox) Updated loader
907
+
908
+ ### 8.2.4 (2026-05-15)
909
+
910
+ - (@GermanBluefox) allowed to define the theme by query parameter `?theme=dark` or `?theme=light` or `?theme=auto`
911
+
912
+ ### 8.2.2 (2026-04-21)
913
+
914
+ - (@GermanBluefox) Force using React 18
915
+
916
+ ### 8.2.0 (2026-04-17)
917
+
918
+ - (@GermanBluefox) Added support for a new post-message about the theme change
919
+ - (@GermanBluefox) Updated packages
920
+
921
+ ### 8.1.8 (2026-04-11)
922
+
923
+ - (@GermanBluefox) Fixed some minor bugs
924
+
925
+ ### 8.1.6 (2026-03-24)
926
+
927
+ - (@GermanBluefox) Added translations
928
+
929
+ ### 8.1.4 (2026-03-21)
930
+
931
+ - (@GermanBluefox) Optimisations of the translation engine
932
+
933
+ ### 8.1.3 (2026-03-09)
934
+
935
+ - (@GermanBluefox) Added export of the types icons
936
+
937
+ ### 8.1.2 (2026-03-05)
938
+
939
+ - (@GermanBluefox) Updated packages
940
+
941
+ ### 8.1.1 (2026-03-02)
942
+
943
+ - (@GermanBluefox) Force react 18
944
+
945
+ ### 8.0.21 (2026-02-10)
946
+
947
+ - (@GermanBluefox) Added translations
948
+
949
+ ### 8.0.20 (2026-02-09)
950
+
951
+ - (@GermanBluefox) Small typing fixes
952
+
953
+ ### 8.0.17 (2026-01-27)
954
+
955
+ - (@GermanBluefox) Added percentage icon
956
+
957
+ ### 8.0.16 (2025-12-16)
958
+
959
+ - (@GermanBluefox) Updated packages and used standard GitHub actions
960
+
961
+ ### 8.0.13 (2025-11-13)
962
+
963
+ - (@GermanBluefox) Changed theme for NW
964
+
965
+ ### 8.0.12 (2025-11-09)
966
+
967
+ - (@GermanBluefox) Fixing ref for Icon and TabContent components
968
+
969
+ ### 8.0.9 (2025-11-02)
970
+
971
+ - (@GermanBluefox) Added possibility to import objects from text
972
+ - (@GermanBluefox) Object browser was split into a few files
973
+
974
+ ### 8.0.7 (2025-10-28)
975
+
976
+ - (@GermanBluefox) Added `updateSmartNameEx` function to Utils
977
+ - (@GermanBluefox) Corrected expert mode toggle in object browser
978
+
979
+ ### 8.0.5 (2025-10-25)
980
+
981
+ - (@GermanBluefox) Fixed filter in the object browser
982
+
983
+ ### 8.0.3 (2025-10-23)
693
984
 
694
- - (@GermanBluefox) Split packages from mono-repo
985
+ - (@GermanBluefox) Split packages from mono-repo
695
986
 
696
987
  ### 7.2.3 (2024-10-05)
697
988
 
698
- - (@GermanBluefox) Corrected error in the simple CRON dialog
989
+ - (@GermanBluefox) Corrected error in the simple CRON dialog
699
990
 
700
991
  ### 7.2.2 (2024-10-04)
701
992
 
702
- - (@GermanBluefox) Small layout change for Icon Picker
993
+ - (@GermanBluefox) Small layout change for Icon Picker
703
994
 
704
995
  ### 7.2.1 (2024-09-30)
705
996
 
706
- - (@GermanBluefox) Allowed using an array of elements in dialogs
707
- - (@GermanBluefox) Allowed to use `socket.iob` instead of `socket.io`
997
+ - (@GermanBluefox) Allowed using an array of elements in dialogs
998
+ - (@GermanBluefox) Allowed to use `socket.iob` instead of `socket.io`
708
999
 
709
1000
  ### 7.1.4 (2024-09-15)
710
1001
 
711
- - (@GermanBluefox) Updated socket classes
1002
+ - (@GermanBluefox) Updated socket classes
712
1003
 
713
1004
  ### 7.1.3 (2024-09-15)
714
1005
 
715
- - (@GermanBluefox) Updated socket classes
716
- - (@GermanBluefox) Added additional confirmation dialog for CRONs for every minute execution
1006
+ - (@GermanBluefox) Updated socket classes
1007
+ - (@GermanBluefox) Added additional confirmation dialog for CRONs for every minute execution
717
1008
 
718
1009
  ### 7.1.1 (2024-09-13)
719
1010
 
720
- - (@GermanBluefox) Corrected TabContainer
1011
+ - (@GermanBluefox) Corrected TabContainer
721
1012
 
722
1013
  ### 7.1.0 (2024-09-12)
723
1014
 
724
- - (@GermanBluefox) Optimized the icon picker
725
- - (@GermanBluefox) Used common eslint-config
1015
+ - (@GermanBluefox) Optimized the icon picker
1016
+ - (@GermanBluefox) Used common eslint-config
726
1017
 
727
1018
  ### 7.0.2 (2024-09-10)
728
1019
 
729
- - (@GermanBluefox) Showed the context menu under cursor position in the object browser
730
- - (@GermanBluefox) Added links to aliases in the object browser
1020
+ - (@GermanBluefox) Showed the context menu under cursor position in the object browser
1021
+ - (@GermanBluefox) Added links to aliases in the object browser
731
1022
 
732
1023
  ### 7.0.1 (2024-08-29)
733
1024
 
734
- - (@GermanBluefox) Updated the object browser
735
- - (@GermanBluefox) Used MUI Library 6.0
1025
+ - (@GermanBluefox) Updated the object browser
1026
+ - (@GermanBluefox) Used MUI Library 6.0
736
1027
 
737
1028
  ### 6.1.10 (2024-08-30)
738
1029
 
739
- - (@GermanBluefox) Updated the object browser
1030
+ - (@GermanBluefox) Updated the object browser
740
1031
 
741
1032
  ### 6.1.9 (2024-08-14)
742
1033
 
743
- - (@GermanBluefox) Updated JSON schema
1034
+ - (@GermanBluefox) Updated JSON schema
744
1035
 
745
1036
  ### 6.1.8 (2024-08-03)
746
1037
 
747
- - (@GermanBluefox) Added translations
1038
+ - (@GermanBluefox) Added translations
748
1039
 
749
1040
  ### 6.1.6 (2024-07-23)
750
1041
 
751
- - (@GermanBluefox) Optimize package
1042
+ - (@GermanBluefox) Optimize package
752
1043
 
753
1044
  ### 6.1.5 (2024-07-20)
754
1045
 
755
- - (@GermanBluefox) Added sources to package
1046
+ - (@GermanBluefox) Added sources to package
756
1047
 
757
1048
  ### 6.1.3 (2024-07-20)
758
1049
 
759
- - (@GermanBluefox) Better typing of legacy connection
1050
+ - (@GermanBluefox) Better typing of legacy connection
760
1051
 
761
1052
  ### 6.1.1 (2024-07-16)
762
1053
 
763
- - (@GermanBluefox) Added translations
1054
+ - (@GermanBluefox) Added translations
764
1055
 
765
1056
  ### 6.1.0 (2024-07-15)
766
1057
 
767
- - (@GermanBluefox) Replace by CRON to text the package to `cronstrue`
1058
+ - (@GermanBluefox) Replace by CRON to text the package to `cronstrue`
768
1059
 
769
1060
  ### 6.0.19 (2024-07-14)
770
1061
 
771
- - (@GermanBluefox) added some packages for federation
1062
+ - (@GermanBluefox) added some packages for federation
772
1063
 
773
1064
  ### 6.0.17 (2024-07-14)
774
1065
 
775
- - (@GermanBluefox) Allowed playing mp3 files in the file browser
776
- - (@GermanBluefox) Corrected jump by object selection
1066
+ - (@GermanBluefox) Allowed playing mp3 files in the file browser
1067
+ - (@GermanBluefox) Corrected jump by object selection
777
1068
 
778
1069
  ### 6.0.14 (2024-07-07)
779
1070
 
780
- - (@GermanBluefox) Corrected theme type selection
1071
+ - (@GermanBluefox) Corrected theme type selection
781
1072
 
782
1073
  ### 6.0.13 (2024-06-30)
783
1074
 
784
- - (@GermanBluefox) Corrected color picker
1075
+ - (@GermanBluefox) Corrected color picker
785
1076
 
786
1077
  ### 6.0.12 (2024-06-29)
787
1078
 
788
- - (@GermanBluefox) Added support for the overrides in the theme
1079
+ - (@GermanBluefox) Added support for the overrides in the theme
789
1080
 
790
1081
  ### 6.0.10 (2024-06-27)
791
1082
 
792
- - (@GermanBluefox) Added translation
793
- - (@GermanBluefox) Mobile object browser improved
1083
+ - (@GermanBluefox) Added translation
1084
+ - (@GermanBluefox) Mobile object browser improved
794
1085
 
795
1086
  ### 6.0.9 (2024-06-26)
796
1087
 
797
- - (@GermanBluefox) Corrected Icons
1088
+ - (@GermanBluefox) Corrected Icons
798
1089
 
799
1090
  ### 6.0.8 (2024-06-26)
800
1091
 
801
- - (@GermanBluefox) Corrected types of the select ID dialog
802
- - (@GermanBluefox) Made the tooltips neutral to the pointer events
1092
+ - (@GermanBluefox) Corrected types of the select ID dialog
1093
+ - (@GermanBluefox) Made the tooltips neutral to the pointer events
803
1094
 
804
1095
  ### 6.0.6 (2024-06-24)
805
1096
 
806
- - (@GermanBluefox) Synchronised with admin
807
- - (@GermanBluefox) Added translations for time scheduler
1097
+ - (@GermanBluefox) Synchronised with admin
1098
+ - (@GermanBluefox) Added translations for time scheduler
808
1099
 
809
1100
  ### 6.0.4 (2024-06-21)
810
1101
 
811
- - (@GermanBluefox) Removed the usage of `withStyles` in favor of `sx` and `style` properties (see [Migration from v5 to v6](#migration-from-v5-to-v6)
812
- - (@GermanBluefox) (BREAKING) Higher version of `@mui/material` (5.15.20) is used
1102
+ - (@GermanBluefox) Removed the usage of `withStyles` in favor of `sx` and `style` properties (see [Migration from v5 to v6](#migration-from-v5-to-v6)
1103
+ - (@GermanBluefox) (BREAKING) Higher version of `@mui/material` (5.15.20) is used
813
1104
 
814
1105
  ### 5.0.8 (2024-06-15)
815
1106
 
816
- - (@GermanBluefox) Added `modulefederation.admin.config.js` for module federation
1107
+ - (@GermanBluefox) Added `modulefederation.admin.config.js` for module federation
817
1108
 
818
1109
  ### 5.0.5 (2024-06-10)
819
1110
 
820
- - (@GermanBluefox) Sources were synchronized with admin
1111
+ - (@GermanBluefox) Sources were synchronized with admin
821
1112
 
822
1113
  ### 5.0.4 (2024-06-07)
823
1114
 
824
- - (@GermanBluefox) Added better typing
1115
+ - (@GermanBluefox) Added better typing
825
1116
 
826
1117
  ### 5.0.2 (2024-05-30)
827
1118
 
828
- - (@GermanBluefox) Added better typing
829
- - (@GermanBluefox) Json-Config is now a separate package and must be installed additionally
1119
+ - (@GermanBluefox) Added better typing
1120
+ - (@GermanBluefox) Json-Config is now a separate package and must be installed additionally
830
1121
 
831
1122
  ### 5.0.0 (2024-05-29)
832
1123
 
833
- - (@GermanBluefox) Types are now exported
834
- - (@GermanBluefox) Translator renamed to Translate
835
- - (@GermanBluefox) Breaking: Theme renamed to IobTheme because of the naming conflict
1124
+ - (@GermanBluefox) Types are now exported
1125
+ - (@GermanBluefox) Translator renamed to Translate
1126
+ - (@GermanBluefox) Breaking: Theme renamed to IobTheme because of the naming conflict
836
1127
 
837
1128
  ### 4.13.24 (2024-05-25)
838
1129
 
839
- - (@GermanBluefox) Updated packages
1130
+ - (@GermanBluefox) Updated packages
840
1131
 
841
- - ### 4.13.22 (2024-05-23)
842
- - (@GermanBluefox) Updated packages
1132
+ - ### 4.13.22 (2024-05-23)
1133
+ - (@GermanBluefox) Updated packages
843
1134
 
844
1135
  ### 4.13.20 (2024-05-22)
845
1136
 
846
- - (@GermanBluefox) Better types added
847
- - (@GermanBluefox) updated theme definitions
848
- - (@GermanBluefox) corrected dates in cron dialog
1137
+ - (@GermanBluefox) Better types added
1138
+ - (@GermanBluefox) updated theme definitions
1139
+ - (@GermanBluefox) corrected dates in cron dialog
849
1140
 
850
1141
  ### 4.13.14 (2024-05-19)
851
1142
 
852
- - (@GermanBluefox) Updated packages
1143
+ - (@GermanBluefox) Updated packages
853
1144
 
854
1145
  ### 4.13.13 (2024-05-09)
855
1146
 
856
- - (@GermanBluefox) Updated ioBroker types
1147
+ - (@GermanBluefox) Updated ioBroker types
857
1148
 
858
1149
  ### 4.13.12 (2024-05-06)
859
1150
 
860
- - (@GermanBluefox) All files are migrated to Typescript
1151
+ - (@GermanBluefox) All files are migrated to TypeScript
861
1152
 
862
1153
  ### 4.13.11 (2024-04-23)
863
1154
 
864
- - (@GermanBluefox) Corrected the size of icons
1155
+ - (@GermanBluefox) Corrected the size of icons
865
1156
 
866
1157
  ### 4.13.10 (2024-04-22)
867
1158
 
868
- - (@GermanBluefox) Migrated all icons to Typescript
1159
+ - (@GermanBluefox) Migrated all icons to TypeScript
869
1160
 
870
1161
  ### 4.13.9 (2024-04-20)
871
1162
 
872
- - (@GermanBluefox) Updated socket-client package
1163
+ - (@GermanBluefox) Updated socket-client package
873
1164
 
874
1165
  ### 4.13.8 (2024-04-19)
875
1166
 
876
- - (@GermanBluefox) Corrected CRON selector
1167
+ - (@GermanBluefox) Corrected CRON selector
877
1168
 
878
1169
  ### 4.13.7 (2024-04-19)
879
1170
 
880
- - (@GermanBluefox) Migrated ColorPicker to typescript
1171
+ - (@GermanBluefox) Migrated ColorPicker to TypeScript
881
1172
 
882
1173
  ### 4.13.6 (2024-04-11)
883
1174
 
884
- - (@GermanBluefox) Migrated TreeTable to typescript
885
- - (@GermanBluefox) corrected the object subscription
1175
+ - (@GermanBluefox) Migrated TreeTable to TypeScript
1176
+ - (@GermanBluefox) corrected the object subscription
886
1177
 
887
1178
  ### 4.13.5 (2024-04-02)
888
1179
 
889
- - (@GermanBluefox) used new connection classes
890
- - (@GermanBluefox) Improved the `SelectID` dialog
1180
+ - (@GermanBluefox) used new connection classes
1181
+ - (@GermanBluefox) Improved the `SelectID` dialog
891
1182
 
892
1183
  ### 4.13.3 (2024-04-01)
893
1184
 
894
- - (@GermanBluefox) used new connection classes
1185
+ - (@GermanBluefox) used new connection classes
895
1186
 
896
1187
  ### 4.12.3 (2024-03-30)
897
1188
 
898
- - (@GermanBluefox) Migrated legacy connection to typescript
1189
+ - (@GermanBluefox) Migrated legacy connection to TypeScript
899
1190
 
900
1191
  ### 4.12.2 (2024-03-25)
901
1192
 
902
- - (@GermanBluefox) Added support for remote cloud
1193
+ - (@GermanBluefox) Added support for remote cloud
903
1194
 
904
1195
  ### 4.11.6 (2024-03-19)
905
1196
 
906
- - (@GermanBluefox) Corrected rendering of LoaderMV
1197
+ - (@GermanBluefox) Corrected rendering of LoaderMV
907
1198
 
908
1199
  ### 4.11.4 (2024-03-18)
909
1200
 
910
- - (@GermanBluefox) Corrected types of IconPicker
1201
+ - (@GermanBluefox) Corrected types of IconPicker
911
1202
 
912
1203
  ### 4.11.3 (2024-03-17)
913
1204
 
914
- - (@GermanBluefox) Made filters for the file selector dialog optional
1205
+ - (@GermanBluefox) Made filters for the file selector dialog optional
915
1206
 
916
1207
  ### 4.11.2 (2024-03-16)
917
1208
 
918
- - (@GermanBluefox) Migrated GenericApp to typescript
1209
+ - (@GermanBluefox) Migrated GenericApp to TypeScript
919
1210
 
920
1211
  ### 4.10.4 (2024-03-16)
921
1212
 
922
- - (@GermanBluefox) Migrated some components to typescript
1213
+ - (@GermanBluefox) Migrated some components to TypeScript
923
1214
 
924
1215
  ### 4.10.1 (2024-03-11)
925
1216
 
926
- - (@GermanBluefox) Migrated some components to typescript
1217
+ - (@GermanBluefox) Migrated some components to TypeScript
927
1218
 
928
1219
  ### 4.9.11 (2024-03-08)
929
1220
 
930
- - (foxriver76) type GenericApp socket correctly
1221
+ - (foxriver76) type GenericApp socket correctly
931
1222
 
932
1223
  ### 4.9.10 (2024-02-21)
933
1224
 
934
- - (@GermanBluefox) translations
935
- - (@GermanBluefox) updated JSON config
1225
+ - (@GermanBluefox) translations
1226
+ - (@GermanBluefox) updated JSON config
936
1227
 
937
1228
  ### 4.9.9 (2024-02-16)
938
1229
 
939
- - (foxriver76) also check plugin state of instance to see if Sentry is explicitly disabled
1230
+ - (foxriver76) also check plugin state of instance to see if Sentry is explicitly disabled
940
1231
 
941
1232
  ### 4.9.8 (2024-02-13)
942
1233
 
943
- - (@GermanBluefox) allowed hiding wizard in cron dialog
1234
+ - (@GermanBluefox) allowed hiding wizard in cron dialog
944
1235
 
945
1236
  ### 4.9.7 (2024-02-03)
946
1237
 
947
- - (foxriver76) allow passing down the instance number do avoid determining from url
1238
+ - (foxriver76) allow passing down the instance number do avoid determining from url
948
1239
 
949
1240
  ### 4.9.5 (2024-01-01)
950
1241
 
951
- - (foxriver76) make `copyToClipboard` event parameter optional
1242
+ - (foxriver76) make `copyToClipboard` event parameter optional
952
1243
 
953
1244
  ### 4.9.4 (2024-01-01)
954
1245
 
955
- - (foxriver76) try to fix `SelectID` scrolling
1246
+ - (foxriver76) try to fix `SelectID` scrolling
956
1247
 
957
1248
  ### 4.9.2 (2023-12-30)
958
1249
 
959
- - (foxriver76) bump version of `@iobroker/json-config`
1250
+ - (foxriver76) bump version of `@iobroker/json-config`
960
1251
 
961
1252
  ### 4.9.1 (2023-12-22)
962
1253
 
963
- - (foxriver76) `@iobroker/json-config` moved to real dependencies
1254
+ - (foxriver76) `@iobroker/json-config` moved to real dependencies
964
1255
 
965
1256
  ### 4.9.0 (2023-12-22)
966
1257
 
967
- - (foxriver76) migrate to `@iobroker/json-config` module to have a single point of truth
968
- - (@GermanBluefox) Allowed using of `filterFunc` as string
1258
+ - (foxriver76) migrate to `@iobroker/json-config` module to have a single point of truth
1259
+ - (@GermanBluefox) Allowed using of `filterFunc` as string
969
1260
 
970
1261
  ### 4.8.1 (2023-12-14)
971
1262
 
972
- - (@GermanBluefox) Added Device manager to JSON Config
1263
+ - (@GermanBluefox) Added Device manager to JSON Config
973
1264
 
974
1265
  ### 4.7.15 (2023-12-12)
975
1266
 
976
- - (@GermanBluefox) Corrected parsing of a text
1267
+ - (@GermanBluefox) Corrected parsing of a text
977
1268
 
978
1269
  ### 4.7.13 (2023-12-10)
979
1270
 
980
- - (@GermanBluefox) Added possibility to define the root style and embedded property
1271
+ - (@GermanBluefox) Added possibility to define the root style and embedded property
981
1272
 
982
1273
  ### 4.7.11 (2023-12-06)
983
1274
 
984
- - (@GermanBluefox) Extended color picker with "noInputField" option
1275
+ - (@GermanBluefox) Extended color picker with "noInputField" option
985
1276
 
986
1277
  ### 4.7.9 (2023-12-04)
987
1278
 
988
- - (@GermanBluefox) Corrected the icon picker
1279
+ - (@GermanBluefox) Corrected the icon picker
989
1280
 
990
1281
  ### 4.7.8 (2023-12-04)
991
1282
 
992
- - (foxriver76) port to `@iobroker/types`
1283
+ - (foxriver76) port to `@iobroker/types`
993
1284
 
994
1285
  ### 4.7.6 (2023-11-29)
995
1286
 
996
- - (@GermanBluefox) Added translations
1287
+ - (@GermanBluefox) Added translations
997
1288
 
998
1289
  ### 4.7.5 (2023-11-28)
999
1290
 
1000
- - (@GermanBluefox) Corrected subscribe on objects in the legacy connection
1291
+ - (@GermanBluefox) Corrected subscribe on objects in the legacy connection
1001
1292
 
1002
1293
  ### 4.7.4 (2023-11-23)
1003
1294
 
1004
- - (@GermanBluefox) Updated packages
1005
- - (@GermanBluefox) Made getStates method in legacy connection compatible with new one
1295
+ - (@GermanBluefox) Updated packages
1296
+ - (@GermanBluefox) Made getStates method in legacy connection compatible with new one
1006
1297
 
1007
1298
  ### 4.7.3 (2023-11-08)
1008
1299
 
1009
- - (@GermanBluefox) Updated packages
1300
+ - (@GermanBluefox) Updated packages
1010
1301
 
1011
1302
  ### 4.7.2 (2023-11-03)
1012
1303
 
1013
- - (foxriver76) fixed problem with color picker, where editing TextField was buggy
1014
- - (foxriver76) fixed light mode color of a path in FileBrowser
1304
+ - (foxriver76) fixed the problem with color picker, where editing TextField was buggy
1305
+ - (foxriver76) fixed light mode color of a path in FileBrowser
1015
1306
 
1016
1307
  ### 4.7.0 (2023-10-31)
1017
1308
 
1018
- - (@GermanBluefox) Synced with admin
1019
- - (@GermanBluefox) Added GIF to image files
1309
+ - (@GermanBluefox) Synced with admin
1310
+ - (@GermanBluefox) Added GIF to image files
1020
1311
 
1021
1312
  ### 4.6.7 (2023-10-19)
1022
1313
 
1023
- - (@GermanBluefox) Added return value for `subscribeOnInstance` for Connection class
1314
+ - (@GermanBluefox) Added return value for `subscribeOnInstance` for Connection class
1024
1315
 
1025
1316
  ### 4.6.6 (2023-10-13)
1026
1317
 
1027
- - (@GermanBluefox) Fixed the legacy connection
1318
+ - (@GermanBluefox) Fixed the legacy connection
1028
1319
 
1029
1320
  ### 4.6.5 (2023-10-12)
1030
1321
 
1031
- - (foxriver76) fixed object browser with date
1322
+ - (foxriver76) fixed object browser with date
1032
1323
 
1033
1324
  ### 4.6.4 (2023-10-11)
1034
1325
 
1035
- - (@GermanBluefox) Updated the packages
1326
+ - (@GermanBluefox) Updated the packages
1036
1327
 
1037
1328
  ### 4.6.3 (2023-10-09)
1038
1329
 
1039
- - (@GermanBluefox) Just updated the packages
1040
- - (@GermanBluefox) Synced with admin
1330
+ - (@GermanBluefox) Just updated the packages
1331
+ - (@GermanBluefox) Synced with admin
1041
1332
 
1042
1333
  ### 4.6.2 (2023-09-29)
1043
1334
 
1044
- - (@GermanBluefox) Experimental feature added: update states on re-subscribe
1335
+ - (@GermanBluefox) Experimental feature added: update states on re-subscribe
1045
1336
 
1046
1337
  ### 4.5.5 (2023-09-27)
1047
1338
 
1048
- - (@GermanBluefox) Added export for IconNoIcon
1339
+ - (@GermanBluefox) Added export for IconNoIcon
1049
1340
 
1050
1341
  ### 4.5.4 (2023-09-17)
1051
1342
 
1052
- - (@GermanBluefox) Added the restricting to folder property for select file dialog
1343
+ - (@GermanBluefox) Added the restricting to folder property for select file dialog
1053
1344
 
1054
1345
  ### 4.5.3 (2023-08-20)
1055
1346
 
1056
- - (foxriver76) fixed css classes of TableResize, see https://github.com/ioBroker/ioBroker.admin/issues/1860
1347
+ - (foxriver76) fixed CSS classes of TableResize, see https://github.com/ioBroker/ioBroker.admin/issues/1860
1057
1348
 
1058
1349
  ### 4.5.2 (2023-08-20)
1059
1350
 
1060
- - (foxriver76) added missing export of TableResize
1351
+ - (foxriver76) added missing export of TableResize
1061
1352
 
1062
1353
  ### 4.5.1 (2023-08-19)
1063
1354
 
1064
- - (foxriver76) fix dialog TextInput
1355
+ - (foxriver76) fix dialog TextInput
1065
1356
 
1066
1357
  ### 4.5.0 (2023-08-18)
1067
1358
 
1068
- - (@GermanBluefox) Synchronize components with admin
1359
+ - (@GermanBluefox) Synchronize components with admin
1069
1360
 
1070
1361
  ### 4.4.8 (2023-08-17)
1071
1362
 
1072
- - (@GermanBluefox) Added translations
1363
+ - (@GermanBluefox) Added translations
1073
1364
 
1074
1365
  ### 4.4.7 (2023-08-10)
1075
1366
 
1076
- - (@GermanBluefox) Added `subscribeStateAsync` method to wait for answer
1077
- - (@GermanBluefox) Added support for arrays for un/subscriptions
1367
+ - (@GermanBluefox) Added `subscribeStateAsync` method to wait for answer
1368
+ - (@GermanBluefox) Added support for arrays for un/subscriptions
1078
1369
 
1079
1370
  ### 4.4.5 (2023-08-01)
1080
1371
 
1081
- - (@GermanBluefox) Updated packages
1372
+ - (@GermanBluefox) Updated packages
1082
1373
 
1083
1374
  ### 4.3.3 (2023-07-28)
1084
1375
 
1085
- - (@GermanBluefox) Added translations
1376
+ - (@GermanBluefox) Added translations
1086
1377
 
1087
1378
  ### 4.3.0 (2023-07-19)
1088
1379
 
1089
- - (@GermanBluefox) Updated packages
1090
- - (@GermanBluefox) Added translations
1091
- - (@GermanBluefox) Synced object browser
1092
- - (@GermanBluefox) formatting
1380
+ - (@GermanBluefox) Updated packages
1381
+ - (@GermanBluefox) Added translations
1382
+ - (@GermanBluefox) Synced object browser
1383
+ - (@GermanBluefox) formatting
1093
1384
 
1094
1385
  ### 4.2.1 (2023-07-17)
1095
1386
 
1096
- - (@GermanBluefox) Updated packages
1097
- - (@GermanBluefox) Added translations
1387
+ - (@GermanBluefox) Updated packages
1388
+ - (@GermanBluefox) Added translations
1098
1389
 
1099
1390
  ### 4.2.0 (2023-07-07)
1100
1391
 
1101
- - (@GermanBluefox) Updated packages
1102
- - (@GermanBluefox) Added new method `getObjectsById` to the socket communication
1392
+ - (@GermanBluefox) Updated packages
1393
+ - (@GermanBluefox) Added new method `getObjectsById` to the socket communication
1103
1394
 
1104
1395
  ### 4.1.2 (2023-06-20)
1105
1396
 
1106
- - (@GermanBluefox) Allowed setting theme name directly by theme toggle
1397
+ - (@GermanBluefox) Allowed setting theme name directly by theme toggle
1107
1398
 
1108
1399
  ### 4.1.0 (2023-05-10)
1109
1400
 
1110
- - (@GermanBluefox) `craco-module-federation.js` was added. For node 16
1401
+ - (@GermanBluefox) `craco-module-federation.js` was added. For node 16
1111
1402
 
1112
1403
  ### 4.0.27 (2023-05-09)
1113
1404
 
1114
- - (@GermanBluefox) Allowed showing only specific root in SelectIDDialog
1405
+ - (@GermanBluefox) Allowed showing only specific root in SelectIDDialog
1115
1406
 
1116
1407
  ### 4.0.26 (2023-05-08)
1117
1408
 
1118
- - (@GermanBluefox) Added IDs to the buttons in the dialog for GUI tests
1409
+ - (@GermanBluefox) Added IDs to the buttons in the dialog for GUI tests
1119
1410
 
1120
1411
  ### 4.0.25 (2023-04-23)
1121
1412
 
1122
- - (@GermanBluefox) Extended `TextWithIcon` with defined color and icon
1413
+ - (@GermanBluefox) Extended `TextWithIcon` with defined color and icon
1123
1414
 
1124
1415
  ### 4.0.24 (2023-04-03)
1125
1416
 
1126
- - (@GermanBluefox) Updated the file selector in tile mode
1417
+ - (@GermanBluefox) Updated the file selector in tile mode
1127
1418
 
1128
1419
  ### 4.0.23 (2023-03-27)
1129
1420
 
1130
- - (@GermanBluefox) Added translations
1421
+ - (@GermanBluefox) Added translations
1131
1422
 
1132
1423
  ### 4.0.22 (2023-03-22)
1133
1424
 
1134
- - (@GermanBluefox) Re-Activate legacy connection
1425
+ - (@GermanBluefox) Re-Activate legacy connection
1135
1426
 
1136
1427
  ### 4.0.21 (2023-03-22)
1137
1428
 
1138
- - (@GermanBluefox) Added translations
1429
+ - (@GermanBluefox) Added translations
1139
1430
 
1140
1431
  ### 4.0.20 (2023-03-21)
1141
1432
 
1142
- - (@GermanBluefox) Color picker was improved
1433
+ - (@GermanBluefox) Color picker was improved
1143
1434
 
1144
1435
  ### 4.0.19 (2023-03-20)
1145
1436
 
1146
- - (@GermanBluefox) Packages were updated
1147
- - (@GermanBluefox) Added new translations
1437
+ - (@GermanBluefox) Packages were updated
1438
+ - (@GermanBluefox) Added new translations
1148
1439
 
1149
1440
  ### 4.0.18 (2023-03-16)
1150
1441
 
1151
- - (@GermanBluefox) Packages were updated
1442
+ - (@GermanBluefox) Packages were updated
1152
1443
 
1153
1444
  ### 4.0.17 (2023-03-15)
1154
1445
 
1155
- - (@GermanBluefox) Added translations
1156
- - (@GermanBluefox) Added port controller to JSON config
1446
+ - (@GermanBluefox) Added translations
1447
+ - (@GermanBluefox) Added port controller to JSON config
1157
1448
 
1158
1449
  ### 4.0.15 (2023-03-12)
1159
1450
 
1160
- - (@GermanBluefox) Updated the object browser and file browser
1451
+ - (@GermanBluefox) Updated the object browser and file browser
1161
1452
 
1162
1453
  ### 4.0.14 (2023-03-03)
1163
1454
 
1164
- - (@GermanBluefox) added handler of alert messages
1455
+ - (@GermanBluefox) added handler of alert messages
1165
1456
 
1166
1457
  ### 4.0.13 (2023-02-15)
1167
1458
 
1168
- - (@GermanBluefox) Corrected the theme button
1459
+ - (@GermanBluefox) Corrected the theme button
1169
1460
 
1170
1461
  ### 4.0.12 (2023-02-15)
1171
1462
 
1172
- - (@GermanBluefox) made the fix for `echarts`
1463
+ - (@GermanBluefox) made the fix for `echarts`
1173
1464
 
1174
1465
  ### 4.0.11 (2023-02-14)
1175
1466
 
1176
- - (@GermanBluefox) Updated packages
1177
- - (@GermanBluefox) The `chartReady` event was omitted
1467
+ - (@GermanBluefox) Updated packages
1468
+ - (@GermanBluefox) The `chartReady` event was omitted
1178
1469
 
1179
1470
  ### 4.0.10 (2023-02-10)
1180
1471
 
1181
- - (@GermanBluefox) Updated packages
1182
- - (@GermanBluefox) made the fix for `material`
1472
+ - (@GermanBluefox) Updated packages
1473
+ - (@GermanBluefox) made the fix for `material`
1183
1474
 
1184
1475
  ### 4.0.9 (2023-02-02)
1185
1476
 
1186
- - (@GermanBluefox) Updated packages
1477
+ - (@GermanBluefox) Updated packages
1187
1478
 
1188
1479
  ### 4.0.8 (2022-12-19)
1189
1480
 
1190
- - (@GermanBluefox) Extended socket with `log` command
1481
+ - (@GermanBluefox) Extended socket with `log` command
1191
1482
 
1192
1483
  ### 4.0.6 (2022-12-19)
1193
1484
 
1194
- - (@GermanBluefox) Corrected URL for the connection
1485
+ - (@GermanBluefox) Corrected URL for the connection
1195
1486
 
1196
1487
  ### 4.0.5 (2022-12-14)
1197
1488
 
1198
- - (@GermanBluefox) Added support of custom palette for color picker
1489
+ - (@GermanBluefox) Added support of custom palette for color picker
1199
1490
 
1200
1491
  ### 4.0.2 (2022-12-01)
1201
1492
 
1202
- - (@GermanBluefox) use `@iobroker/socket-client` instead of `Connection.tsx`
1493
+ - (@GermanBluefox) use `@iobroker/socket-client` instead of `Connection.tsx`
1203
1494
 
1204
1495
  ### 3.5.3 (2022-11-30)
1205
1496
 
1206
- - (@GermanBluefox) Improved `renderTextWithA` function to support `<b>` and `<i>` tags
1497
+ - (@GermanBluefox) Improved `renderTextWithA` function to support `<b>` and `<i>` tags
1207
1498
 
1208
1499
  ### 3.5.2 (2022-11-30)
1209
1500
 
1210
- - (@GermanBluefox) updated json config component
1501
+ - (@GermanBluefox) updated json config component
1211
1502
 
1212
1503
  ### 3.4.1 (2022-11-29)
1213
1504
 
1214
- - (@GermanBluefox) Added button text for message dialog
1505
+ - (@GermanBluefox) Added button text for message dialog
1215
1506
 
1216
1507
  ### 3.4.0 (2022-11-29)
1217
1508
 
1218
- - (@GermanBluefox) Added file selector
1509
+ - (@GermanBluefox) Added file selector
1219
1510
 
1220
1511
  ### 3.3.0 (2022-11-26)
1221
1512
 
1222
- - (@GermanBluefox) Added subscribe on files
1513
+ - (@GermanBluefox) Added subscribe on files
1223
1514
 
1224
1515
  ### 3.2.7 (2022-11-13)
1225
1516
 
1226
- - (@GermanBluefox) Added `fullWidth` property to `Dialog`
1517
+ - (@GermanBluefox) Added `fullWidth` property to `Dialog`
1227
1518
 
1228
1519
  ### 3.2.6 (2022-11-08)
1229
1520
 
1230
- - (xXBJXx) Improved TreeTable component
1521
+ - (xXBJXx) Improved TreeTable component
1231
1522
 
1232
1523
  ### 3.2.5 (2022-11-08)
1233
1524
 
1234
- - (@GermanBluefox) Added the role filter for the object browser
1525
+ - (@GermanBluefox) Added the role filter for the object browser
1235
1526
 
1236
1527
  ### 3.2.4 (2022-11-03)
1237
1528
 
1238
- - (@GermanBluefox) Added support for alfa channel for `invertColor`
1529
+ - (@GermanBluefox) Added support for alfa channel for `invertColor`
1239
1530
 
1240
1531
  ### 3.2.3 (2022-10-26)
1241
1532
 
1242
- - (@GermanBluefox) Corrected expert mode for object browser
1533
+ - (@GermanBluefox) Corrected expert mode for object browser
1243
1534
 
1244
1535
  ### 3.2.2 (2022-10-25)
1245
1536
 
1246
- - (@GermanBluefox) Added support for prefixes for translations
1537
+ - (@GermanBluefox) Added support for prefixes for translations
1247
1538
 
1248
1539
  ### 3.2.1 (2022-10-24)
1249
1540
 
1250
- - (@GermanBluefox) Corrected color inversion
1541
+ - (@GermanBluefox) Corrected color inversion
1251
1542
 
1252
1543
  ### 3.2.0 (2022-10-19)
1253
1544
 
1254
- - (@GermanBluefox) Added ukrainian translation
1545
+ - (@GermanBluefox) Added ukrainian translation
1255
1546
 
1256
1547
  ### 3.1.35 (2022-10-17)
1257
1548
 
1258
- - (@GermanBluefox) small changes for material
1549
+ - (@GermanBluefox) small changes for material
1259
1550
 
1260
1551
  ### 3.1.34 (2022-08-24)
1261
1552
 
1262
- - (@GermanBluefox) Implemented fallback to english by translations
1553
+ - (@GermanBluefox) Implemented fallback to english by translations
1263
1554
 
1264
1555
  ### 3.1.33 (2022-08-24)
1265
1556
 
1266
- - (@GermanBluefox) Added support for onchange flag
1557
+ - (@GermanBluefox) Added support for onchange flag
1267
1558
 
1268
1559
  ### 3.1.30 (2022-08-23)
1269
1560
 
1270
- - (@GermanBluefox) Added method `getCompactSystemRepositories`
1271
- - (@GermanBluefox) corrected error in `ObjectBrowser`
1561
+ - (@GermanBluefox) Added method `getCompactSystemRepositories`
1562
+ - (@GermanBluefox) corrected error in `ObjectBrowser`
1272
1563
 
1273
1564
  ### 3.1.27 (2022-08-01)
1274
1565
 
1275
- - (@GermanBluefox) Disable file editing in FileViewer
1566
+ - (@GermanBluefox) Disable file editing in FileViewer
1276
1567
 
1277
1568
  ### 3.1.26 (2022-08-01)
1278
1569
 
1279
- - (@GermanBluefox) Added translations
1280
- - (@GermanBluefox) JSON schema was extended with missing definitions
1570
+ - (@GermanBluefox) Added translations
1571
+ - (@GermanBluefox) JSON schema was extended with missing definitions
1281
1572
 
1282
1573
  ### 3.1.24 (2022-07-28)
1283
1574
 
1284
- - (@GermanBluefox) Updated file browser and object browser
1575
+ - (@GermanBluefox) Updated file browser and object browser
1285
1576
 
1286
1577
  ### 3.1.23 (2022-07-25)
1287
1578
 
1288
- - (@GermanBluefox) Extend custom filter for object selector
1579
+ - (@GermanBluefox) Extend custom filter for object selector
1289
1580
 
1290
1581
  ### 3.1.22 (2022-07-22)
1291
1582
 
1292
- - (@GermanBluefox) Added i18n tools for development
1583
+ - (@GermanBluefox) Added i18n tools for development
1293
1584
 
1294
1585
  ### 3.1.20 (2022-07-14)
1295
1586
 
1296
- - (@GermanBluefox) Allowed to show select dialog with the expert mode enabled
1587
+ - (@GermanBluefox) Allowed showing the select dialog with the expert mode enabled
1297
1588
 
1298
1589
  ### 3.1.19 (2022-07-08)
1299
1590
 
1300
- - (@GermanBluefox) Allowed extending translations for all languages together
1591
+ - (@GermanBluefox) Allowed extending translations for all languages together
1301
1592
 
1302
1593
  ### 3.1.18 (2022-07-06)
1303
1594
 
1304
- - (@GermanBluefox) Added translation
1595
+ - (@GermanBluefox) Added translation
1305
1596
 
1306
1597
  ### 3.1.17 (2022-07-05)
1307
1598
 
1308
- - (@GermanBluefox) Deactivate JSON editor for JSONConfig because of space
1599
+ - (@GermanBluefox) Deactivate JSON editor for JSONConfig because of space
1309
1600
 
1310
1601
  ### 3.1.16 (2022-06-27)
1311
1602
 
1312
- - (@GermanBluefox) Update object browser
1603
+ - (@GermanBluefox) Update object browser
1313
1604
 
1314
1605
  ### 3.1.15 (2022-06-27)
1315
1606
 
1316
- - (@GermanBluefox) Allowed using of spaces in name
1607
+ - (@GermanBluefox) Allowed using of spaces in name
1317
1608
 
1318
1609
  ### 3.1.14 (2022-06-23)
1319
1610
 
1320
- - (@GermanBluefox) Added translations
1611
+ - (@GermanBluefox) Added translations
1321
1612
 
1322
1613
  ### 3.1.11 (2022-06-22)
1323
1614
 
1324
- - (@GermanBluefox) Added preparations for iobroker cloud
1615
+ - (@GermanBluefox) Added preparations for iobroker cloud
1325
1616
 
1326
1617
  ### 3.1.10 (2022-06-22)
1327
1618
 
1328
- - (@GermanBluefox) Added translations
1619
+ - (@GermanBluefox) Added translations
1329
1620
 
1330
1621
  ### 3.1.9 (2022-06-20)
1331
1622
 
1332
- - (@GermanBluefox) Allowed working behind reverse proxy
1623
+ - (@GermanBluefox) Allowed working behind reverse proxy
1333
1624
 
1334
1625
  ### 3.1.7 (2022-06-19)
1335
1626
 
1336
- - (@GermanBluefox) Added file select dialog
1627
+ - (@GermanBluefox) Added file select dialog
1337
1628
 
1338
1629
  ### 3.1.3 (2022-06-13)
1339
1630
 
1340
- - (@GermanBluefox) Added table with resized headers
1631
+ - (@GermanBluefox) Added table with resized headers
1341
1632
 
1342
1633
  ### 3.1.2 (2022-06-09)
1343
1634
 
1344
- - (@GermanBluefox) Added new document icon (read only)
1635
+ - (@GermanBluefox) Added new document icon (read only)
1345
1636
 
1346
1637
  ### 3.1.1 (2022-06-09)
1347
1638
 
1348
- - (@GermanBluefox) Allowed working behind reverse proxy
1639
+ - (@GermanBluefox) Allowed working behind reverse proxy
1349
1640
 
1350
1641
  ### 3.1.0 (2022-06-07)
1351
1642
 
1352
- - (@GermanBluefox) Some german texts were corrected
1643
+ - (@GermanBluefox) Some german texts were corrected
1353
1644
 
1354
1645
  ### 3.0.17 (2022-06-03)
1355
1646
 
1356
- - (@GermanBluefox) Allowed calling getAdapterInstances not for admin too
1647
+ - (@GermanBluefox) Allowed calling getAdapterInstances not for admin too
1357
1648
 
1358
1649
  ### 3.0.15 (2022-06-01)
1359
1650
 
1360
- - (@GermanBluefox) Updated JsonConfigComponent: password, table
1651
+ - (@GermanBluefox) Updated JsonConfigComponent: password, table
1361
1652
 
1362
1653
  ### 3.0.14 (2022-05-25)
1363
1654
 
1364
- - (@GermanBluefox) Added ConfigGeneric to import
1655
+ - (@GermanBluefox) Added ConfigGeneric to import
1365
1656
 
1366
1657
  ### 3.0.7 (2022-05-25)
1367
1658
 
1368
- - (@GermanBluefox) Made the module definitions
1659
+ - (@GermanBluefox) Made the module definitions
1369
1660
 
1370
1661
  ### 3.0.6 (2022-05-25)
1371
1662
 
1372
- - (@GermanBluefox) Added JsonConfigComponent
1663
+ - (@GermanBluefox) Added JsonConfigComponent
1373
1664
 
1374
1665
  ### 2.1.11 (2022-05-24)
1375
1666
 
1376
- - (@GermanBluefox) Update file browser. It supports now the file changed events.
1667
+ - (@GermanBluefox) Update file browser. It supports now the file changed events.
1377
1668
 
1378
1669
  ### 2.1.10 (2022-05-24)
1379
1670
 
1380
- - (@GermanBluefox) Corrected object browser
1671
+ - (@GermanBluefox) Corrected object browser
1381
1672
 
1382
1673
  ### 2.1.9 (2022-05-16)
1383
1674
 
1384
- - (@GermanBluefox) Corrected expert mode in object browser
1675
+ - (@GermanBluefox) Corrected expert mode in object browser
1385
1676
 
1386
1677
  ### 2.1.7 (2022-05-09)
1387
1678
 
1388
- - (@GermanBluefox) Changes were synchronized with adapter-react-v5
1389
- - (@GermanBluefox) Added `I18n.disableWarning` method
1679
+ - (@GermanBluefox) Changes were synchronized with adapter-react-v5
1680
+ - (@GermanBluefox) Added `I18n.disableWarning` method
1390
1681
 
1391
1682
  ### 2.1.6 (2022-03-28)
1392
1683
 
1393
- - (@GermanBluefox) Added `log` method to connection
1394
- - (@GermanBluefox) Corrected translations
1684
+ - (@GermanBluefox) Added `log` method to connection
1685
+ - (@GermanBluefox) Corrected translations
1395
1686
 
1396
1687
  ### 2.1.1 (2022-03-27)
1397
1688
 
1398
- - (@GermanBluefox) Corrected error in TreeTable
1689
+ - (@GermanBluefox) Corrected error in TreeTable
1399
1690
 
1400
1691
  ### 2.1.0 (2022-03-26)
1401
1692
 
1402
- - (@GermanBluefox) BREAKING_CHANGE: Corrected error with readFile(base64=false)
1693
+ - (@GermanBluefox) BREAKING_CHANGE: Corrected error with readFile(base64=false)
1403
1694
 
1404
1695
  ### 2.0.0 (2022-03-26)
1405
1696
 
1406
- - (@GermanBluefox) Initial version
1697
+ - (@GermanBluefox) Initial version
1407
1698
 
1408
1699
  ### 0.1.0 (2022-03-23)
1409
1700
 
1410
- - (@GermanBluefox) Fixed theme errors
1701
+ - (@GermanBluefox) Fixed theme errors
1411
1702
 
1412
1703
  ### 0.0.4 (2022-03-22)
1413
1704
 
1414
- - (@GermanBluefox) Fixed eslint warnings
1705
+ - (@GermanBluefox) Fixed eslint warnings
1415
1706
 
1416
1707
  ### 0.0.3 (2022-03-19)
1417
1708
 
1418
- - (@GermanBluefox) beta version
1709
+ - (@GermanBluefox) beta version
1419
1710
 
1420
1711
  ### 0.0.2 (2022-02-24)
1421
1712
 
1422
- - (@GermanBluefox) try to publish a first version
1713
+ - (@GermanBluefox) try to publish a first version
1423
1714
 
1424
1715
  ### 0.0.1 (2022-02-24)
1425
1716
 
1426
- - initial commit
1717
+ - initial commit
1427
1718
 
1428
1719
  ## License
1429
1720
 
1430
1721
  The MIT License (MIT)
1431
1722
 
1432
- Copyright (c) 2019-2025 @GermanBluefox <dogafox@gmail.com>
1723
+ Copyright © 2019-2026 @GermanBluefox <dogafox@gmail.com>
1433
1724
 
1434
1725
  Permission is hereby granted, free of charge, to any person obtaining a copy
1435
1726
  of this software and associated documentation files (the "Software"), to deal