home-assistant-query-selector 2.1.5 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,14 +10,20 @@ When one wants to build a `Home Assistant` front-end plugin, like many of the on
10
10
 
11
11
  As I develop and maintain several `Home Assistant` plugins that change the style of the `DOM` elements, I find myself repeating the same piece of logic over and over to select the elements, and when the `Home Asistant` front-end code changes ([something that occurs more than I would like](https://github.com/NemesisRE/kiosk-mode/issues/27)), I need to go and fix the same in all of them.
12
12
 
13
- This is from where the idea of `home-assistant-query-selector` comes from. Imagine instantiating a class, and without querying for any element, just wait for them to be created and rendered in the `DOM`, and after that, a function that you have created gets automatically executed. That sounds great! doesn‘t it?. In that way, the `Home Assistant` plugins that I maintain could be agnostic to the `DOM` tree, and if someting changes with a new version and all the plugins break at the same time, the changes to fix them could be done in a single place, to fix the plugins only a simple update of this library is needed once the patch is released.
13
+ This is from where the idea of `home-assistant-query-selector` comes from. Imagine instantiating a class, and without querying for any element, through promises, just wait for the main `Home Assistant` DOM elements to be created and rendered to be able to access them. That sounds great! doesn‘t it?. In that way, the `Home Assistant` plugins that I maintain could be agnostic to the `DOM` tree, and if someting changes with a new version and all the plugins break at the same time, the changes to fix them could be done in a single place, to fix the plugins only a simple update of this library is needed once the patch is released.
14
14
 
15
15
  ### How to detect if something will break with a new Home Assistant version?
16
16
 
17
17
  There are exhaustive end-to-end tests in place in this library, when a new version of `Home Assistant` is released, running the end-to-end tests in this repository will ensure that the library still works with the new version, so no need to manually check this.
18
18
 
19
+ #### End-to-end tests
20
+
19
21
  ![end-to-end tests](https://raw.githubusercontent.com/elchininet/home-assistant-query-selector/master/images/tests.png)
20
22
 
23
+ #### Code coverage
24
+
25
+ ![code-coverage](https://raw.githubusercontent.com/elchininet/home-assistant-query-selector/master/images/coverage.png)
26
+
21
27
  ### Code example
22
28
 
23
29
  More details of the API can be consulted in [the API section](#api):
@@ -27,29 +33,57 @@ import { HAQuerySelector } from 'home-assistant-query-selector';
27
33
 
28
34
  const instance = new HAQuerySelector();
29
35
 
30
- //This event will be triggered every time the lovelace dashboard changes
31
- instance.addEventListener('onLovelacePanelLoad', ({ detail }) => {
36
+ // This even will be triggered when the listen method is called
37
+ // You can also use the enum value HAQuerySelectorEvent.ON_LISTEN
38
+ instance.addEventListener('onListen', ({ detail }) => {
32
39
 
33
- const { HEADER, HA_SIDEBAR, HOME_ASSISTANT, HA_PANEL_LOVELACE } = detail;
40
+ const { HOME_ASSISTANT, HOME_ASSISTANT_MAIN, HA_SIDEBAR } = detail;
34
41
 
35
- // When the header is available in the DOM
36
- HEADER.element
37
- .then((header) => {
38
- // Do whatever we want with the header
42
+ // Querying the ha-sidebar element from the home-assistant element
43
+ HOME_ASSISTANT.selector.$.query('home-assistant-main').$.query('ha-sidebar').element
44
+ .then((sidebar) => {
45
+ // sidebar === ha-sidebar element
39
46
  });
40
-
47
+
48
+ // Deep-querying the sidebar element
49
+ HOME_ASSISTANT.selector.deepQuery('ha-sidebar').element
50
+ .then((sidebar) => {
51
+ // sidebar === ha-sidebar element
52
+ });
53
+
41
54
  // When the sidebar is available in the DOM
42
55
  HA_SIDEBAR.element
43
56
  then((sidebar) => {
44
57
  // Do whatever we want with the sidebar
45
58
  });
59
+ });
46
60
 
47
- // Querying the ha-sidebar element from the home-assistant element
48
- HOME_ASSISTANT.selector.$.query('home-assistant-main').$.query('ha-sidebar').element
49
- .then((sidebar) => {
50
- // sidebar === ha-sidebar element
61
+ // This event will be triggered when any panel loads
62
+ // You can also use the enum value HAQuerySelectorEvent.ON_PANEL_LOAD
63
+ instance.addEventListener('onPanelLoad', ({ detail }) => {
64
+
65
+ const { PARTIAL_PANEL_RESOLVER } = detail;
66
+
67
+ // When the partial panel resolver is available in the DOM
68
+ PARTIAL_PANEL_RESOLVER.element
69
+ .then((partialPanelResolver) => {
70
+ // Do whatever we want with the partial panel resolver
51
71
  });
52
72
 
73
+ });
74
+
75
+ // This event will be triggered every time a lovelace dashboard loads
76
+ // You can also use the enum value HAQuerySelectorEvent.ON_LOVELACE_PANEL_LOAD
77
+ instance.addEventListener('onLovelacePanelLoad', ({ detail }) => {
78
+
79
+ const { HEADER, HA_PANEL_LOVELACE } = detail;
80
+
81
+ // When the header is available in the DOM
82
+ HEADER.element
83
+ .then((header) => {
84
+ // Do whatever we want with the header
85
+ });
86
+
53
87
  // Querying all the ha-icon-button elements inside the .action-items in the header
54
88
  HEADER.selector.query('.action-items ha-icon-button').all
55
89
  .then((buttons) => {
@@ -62,16 +96,11 @@ instance.addEventListener('onLovelacePanelLoad', ({ detail }) => {
62
96
  // shadowRoot === hui-root‘s shadowRoot
63
97
  });
64
98
 
65
- // Deep-querying the sidebar element
66
- HOME_ASSISTANT.selector.deepQuery('ha-sidebar').element
67
- .then((sidebar) => {
68
- // sidebar === ha-sidebar element
69
- });
70
-
71
99
  });
72
100
 
73
101
  // This event will be triggered every time a more-info dialog is open
74
- instance.addEventListener('onLovelaceMoreInfoDialogOpen', ({ detail }) => {
102
+ // You can also use the enum value HAQuerySelectorEvent.ON_MORE_INFO_DIALOG_OPEN
103
+ instance.addEventListener('onMoreInfoDialogOpen', ({ detail }) => {
75
104
 
76
105
  // When the ha-more-info-info element is available in the DOM
77
106
  detail.HA_MORE_INFO_DIALOG_INFO.element.then((dialogInfo) => {
@@ -130,7 +159,7 @@ new HAQuerySelector([config])
130
159
 
131
160
  ### Public methods
132
161
 
133
- `HAQuerySelector` instances count with a public method. When it is called, this method will trigger the `onLovelacePanelLoad` event inmediatly and start to watchg for changes in the `DOM` to trigger the proper events.
162
+ `HAQuerySelector` instances count with a public method. When it is called, this method will trigger the `onListen` and `onPanelLoad` (and `onLovelacePanelLoad` if the panel in which it is invoked is a lovelace panel) events inmediatly and start to watch for changes in the `DOM` to trigger the proper events.
134
163
 
135
164
  ```typescript
136
165
  instance.listen();
@@ -140,12 +169,92 @@ instance.listen();
140
169
 
141
170
  The `HAQuerySelector` class extends from [EventTarget], so it is possible to add events listeners to it. It will dispatch events that will allow us to access the proper elements in the `DOM`.
142
171
 
172
+ #### onListen
173
+
174
+ This event is triggered when [the listen method](#public-methods) is called. It is useful if you only want to access the main Home Assistant elements only once.
175
+
176
+ ```typescript
177
+ instance.addEventListener('onListen', function({detail}) {
178
+ /* detail:
179
+ {
180
+ HOME_ASSISTANT: {...},
181
+ HOME_ASSISTANT_MAIN: {...},
182
+ HA_DRAWER: {...},
183
+ ...
184
+ }
185
+ */
186
+ });
187
+ ```
188
+
189
+ The dispatched event is a [CustomEvent] and its `detail` property is an object containing the main `Home Assistant` `DOM` elements. All the properties and methods included in each element are Promises, so they are async and will be resolved when the element is ready to work with it.
190
+
191
+ ##### onListen event elements
192
+
193
+ This is the list of the elements available inside the `detail` property of the `onListen` event:
194
+
195
+ ![dom tree](https://raw.githubusercontent.com/elchininet/home-assistant-query-selector/master/images/dom-tree.png)
196
+
197
+ | Detail element | DOM element |
198
+ | ------------------------ | ------------------------ |
199
+ | `HOME_ASSISTANT` | `home-assistant` |
200
+ | `HOME_ASSISTANT_MAIN` | `home-assistant-main` |
201
+ | `HA_DRAWER` | `ha-drawer` |
202
+ | `HA_SIDEBAR` | `ha-sidebar` |
203
+ | `PARTIAL_PANEL_RESOLVER` | `partial-panel-resolver` |
204
+
205
+ All the available elements contain an `element` property and the `selector` property:
206
+
207
+ | Property or method | Description |
208
+ | ------------------------- | --------------------------------------------------------------- |
209
+ | `element` | Promise that resolves in the respective `DOM` element |
210
+ | `selector` | Object that allows one to query for elements using dot notation |
211
+
212
+ #### onPanelLoad
213
+
214
+ This event is triggered when [the listen method](#public-methods) is called or when any panel is loaded.
215
+
216
+ ```typescript
217
+ instance.addEventListener('onPanelLoad', function({detail}) {
218
+ /* detail:
219
+ {
220
+ HOME_ASSISTANT: {...},
221
+ HOME_ASSISTANT_MAIN: {...},
222
+ HA_DRAWER: {...},
223
+ ...
224
+ }
225
+ */
226
+ });
227
+ ```
228
+
229
+ The dispatched event is a [CustomEvent] and its `detail` property is an object containing the main `Home Assistant` `DOM` elements. All the properties and methods included in each element are Promises, so they are async and will be resolved when the element is ready to work with it.
230
+
231
+ ##### onPanelLoad event elements
232
+
233
+ This is the list of the elements available inside the `detail` property of the `onPanelLoad` event:
234
+
235
+ ![dom tree](https://raw.githubusercontent.com/elchininet/home-assistant-query-selector/master/images/dom-tree.png)
236
+
237
+ | Detail element | DOM element |
238
+ | ------------------------ | ------------------------ |
239
+ | `HOME_ASSISTANT` | `home-assistant` |
240
+ | `HOME_ASSISTANT_MAIN` | `home-assistant-main` |
241
+ | `HA_DRAWER` | `ha-drawer` |
242
+ | `HA_SIDEBAR` | `ha-sidebar` |
243
+ | `PARTIAL_PANEL_RESOLVER` | `partial-panel-resolver` |
244
+
245
+ All the available elements contain an `element` property and the `selector` property:
246
+
247
+ | Property or method | Description |
248
+ | ------------------------- | --------------------------------------------------------------- |
249
+ | `element` | Promise that resolves in the respective `DOM` element |
250
+ | `selector` | Object that allows one to query for elements using dot notation |
251
+
143
252
  #### onLovelacePanelLoad
144
253
 
145
- This event is triggered when [the listen method](#public-methods) is called or when the lovelace dashboard is rendered (every time that, after being abandoned the the lovelace dashboard containing your code you return to it).
254
+ This event is triggered when [the listen method](#public-methods) is called on a lovelace dashboard or when a lovelace dashboard is loaded.
146
255
 
147
256
  ```typescript
148
- instance.addEventListener('onLovelacePanelLoad', function({detail}) {
257
+ instance.addEventListener('onLovelacePanelLoad', function({ detail }) {
149
258
  /* detail:
150
259
  {
151
260
  HOME_ASSISTANT: {...},
@@ -163,7 +272,7 @@ The dispatched event is a [CustomEvent] and its `detail` property is an object c
163
272
 
164
273
  This is the list of the elements available inside the `detail` property of the `onLovelacePanelLoad` event:
165
274
 
166
- ![dom tree](https://raw.githubusercontent.com/elchininet/home-assistant-query-selector/master/images/dom-tree.png)
275
+ ![dom tree](https://raw.githubusercontent.com/elchininet/home-assistant-query-selector/master/images/lovelace-dom-tree.png)
167
276
 
168
277
  | Detail element | DOM element |
169
278
  | ------------------------ | ------------------------ |
@@ -184,12 +293,12 @@ All the available elements contain an `element` property and the `selector` prop
184
293
  | `element` | Promise that resolves in the respective `DOM` element |
185
294
  | `selector` | Object that allows one to query for elements using dot notation |
186
295
 
187
- #### onLovelaceMoreInfoDialogOpen
296
+ #### onMoreInfoDialogOpen
188
297
 
189
298
  This event is triggered when a more-info dialog is open or when one returns to the main view of the more-info dialog from the `History` or `Settings` view inside the dialog.
190
299
 
191
300
  ```typescript
192
- instance.addEventListener('onLovelaceMoreInfoDialogOpen', function({detail}) {
301
+ instance.addEventListener('onMoreInfoDialogOpen', function({detail}) {
193
302
  /* detail:
194
303
  {
195
304
  HA_MORE_INFO_DIALOG: {...},
@@ -203,9 +312,9 @@ instance.addEventListener('onLovelaceMoreInfoDialogOpen', function({detail}) {
203
312
 
204
313
  The dispatched event is a [CustomEvent] and its `detail` property is an object containing the main `Home Assistant` `DOM` elements inside a more-info dialog. All the properties and methods included in each element are Promises, so they are async and will be resolved when the element is ready to work with it.
205
314
 
206
- ##### onLovelaceMoreInfoDialogOpen event elements
315
+ ##### onMoreInfoDialogOpen event elements
207
316
 
208
- This is the list of the elements available inside the `detail` property of the `onLovelaceMoreInfoDialogOpen` event:
317
+ This is the list of the elements available inside the `detail` property of the `onMoreInfoDialogOpen` event:
209
318
 
210
319
  ![more-info dialog dom tree](./images/more-info-dialog-dom-tree.png)
211
320
 
@@ -223,12 +332,12 @@ All the available elements contain an `element` property and three methods:
223
332
  | `element` | Promise that resolves in the respective `DOM` element |
224
333
  | `selector` | Object that allows one to query for elements using dot notation |
225
334
 
226
- #### onLovelaceHistoryAndLogBookDialogOpen
335
+ #### onHistoryAndLogBookDialogOpen
227
336
 
228
337
  This event is triggered when the `History` view is opened from the header actions of a more-info dialog.
229
338
 
230
339
  ```typescript
231
- instance.addEventListener('onLovelaceHistoryAndLogBookDialogOpen', function({detail}) {
340
+ instance.addEventListener('onHistoryAndLogBookDialogOpen', function({detail}) {
232
341
  /* detail:
233
342
  {
234
343
  HA_MORE_INFO_DIALOG: {...},
@@ -242,9 +351,9 @@ instance.addEventListener('onLovelaceHistoryAndLogBookDialogOpen', function({det
242
351
 
243
352
  The dispatched event is a [CustomEvent] and its `detail` property is an object containing the main `Home Assistant` `DOM` elements inside a more-info dialog `History` view. All the properties and methods included in each element are Promises, so they are async and will be resolved when the element is ready to work with it.
244
353
 
245
- ##### onLovelaceHistoryAndLogBookDialogOpen event elements
354
+ ##### onHistoryAndLogBookDialogOpen event elements
246
355
 
247
- This is the list of the elements available inside the `detail` property of the `onLovelaceHistoryAndLogBookDialogOpen` event:
356
+ This is the list of the elements available inside the `detail` property of the `onHistoryAndLogBookDialogOpen` event:
248
357
 
249
358
  ![more-info dialog dom tree](https://raw.githubusercontent.com/elchininet/home-assistant-query-selector/master/images/more-info-dialog-history-dom-tree.png)
250
359
 
@@ -262,12 +371,12 @@ All the available elements contain an `element` property and three methods:
262
371
  | `element` | Promise that resolves in the respective `DOM` element |
263
372
  | `selector` | Object that allows one to query for elements using dot notation |
264
373
 
265
- #### onLovelaceSettingsDialogOpen
374
+ #### onSettingsDialogOpen
266
375
 
267
376
  This event is triggered when the `Settings` view is opened from the header actions of a more-info dialog.
268
377
 
269
378
  ```typescript
270
- instance.addEventListener('onLovelaceSettingsDialogOpen', function({detail}) {
379
+ instance.addEventListener('onSettingsDialogOpen', function({detail}) {
271
380
  /* detail:
272
381
  {
273
382
  HA_MORE_INFO_DIALOG: {...},
@@ -281,9 +390,9 @@ instance.addEventListener('onLovelaceSettingsDialogOpen', function({detail}) {
281
390
 
282
391
  The dispatched event is a [CustomEvent] and its `detail` property is an object containing the main `Home Assistant` `DOM` elements inside a more-info dialog `Settings` view. All the properties and methods included in each element are Promises, so they are async and will be resolved when the element is ready to work with it.
283
392
 
284
- ##### onLovelaceSettingsDialogOpen event elements
393
+ ##### onSettingsDialogOpen event elements
285
394
 
286
- This is the list of the elements available inside the `detail` property of the `onLovelaceSettingsDialogOpen` event:
395
+ This is the list of the elements available inside the `detail` property of the `onSettingsDialogOpen` event:
287
396
 
288
397
  ![more-info dialog dom tree](https://raw.githubusercontent.com/elchininet/home-assistant-query-selector/master/images/more-info-dialog-settings-dom-tree.png)
289
398
 
@@ -23,10 +23,10 @@ declare enum HA_ROOT_ELEMENT {
23
23
  HOME_ASSISTANT = "HOME_ASSISTANT",
24
24
  HOME_ASSISTANT_MAIN = "HOME_ASSISTANT_MAIN",
25
25
  HA_DRAWER = "HA_DRAWER",
26
- HA_SIDEBAR = "HA_SIDEBAR"
26
+ HA_SIDEBAR = "HA_SIDEBAR",
27
+ PARTIAL_PANEL_RESOLVER = "PARTIAL_PANEL_RESOLVER"
27
28
  }
28
- declare enum HA_RESOLVER_ELEMENT {
29
- PARTIAL_PANEL_RESOLVER = "PARTIAL_PANEL_RESOLVER",
29
+ declare enum HA_LOVELACE_ELEMENT {
30
30
  HA_PANEL_LOVELACE = "HA_PANEL_LOVELACE",
31
31
  HUI_ROOT = "HUI_ROOT",
32
32
  HEADER = "HEADER",
@@ -41,15 +41,19 @@ declare enum HA_DIALOG_ELEMENT {
41
41
  HA_DIALOG_MORE_INFO_SETTINGS = "HA_DIALOG_MORE_INFO_SETTINGS"
42
42
  }
43
43
  declare enum HAQuerySelectorEvent {
44
+ ON_LISTEN = "onListen",
45
+ ON_PANEL_LOAD = "onPanelLoad",
44
46
  ON_LOVELACE_PANEL_LOAD = "onLovelacePanelLoad",
45
- ON_LOVELACE_MORE_INFO_DIALOG_OPEN = "onLovelaceMoreInfoDialogOpen",
46
- ON_LOVELACE_HISTORY_AND_LOGBOOK_DIALOG_OPEN = "onLovelaceHistoryAndLogBookDialogOpen",
47
- ON_LOVELACE_SETTINGS_DIALOG_OPEN = "onLovelaceSettingsDialogOpen"
47
+ ON_MORE_INFO_DIALOG_OPEN = "onMoreInfoDialogOpen",
48
+ ON_HISTORY_AND_LOGBOOK_DIALOG_OPEN = "onHistoryAndLogBookDialogOpen",
49
+ ON_SETTINGS_DIALOG_OPEN = "onSettingsDialogOpen"
48
50
  }
49
- type OnLovelacePanelLoadDetail = Record<keyof typeof HA_ROOT_ELEMENT | keyof typeof HA_RESOLVER_ELEMENT, HAElement>;
50
- type OnLovelaceMoreInfoDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK' | 'HA_DIALOG_MORE_INFO_SETTINGS'>, HAElement>;
51
- type OnLovelaceHistoryAndLogBookDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_MORE_INFO_DIALOG_INFO' | 'HA_DIALOG_MORE_INFO_SETTINGS'>, HAElement>;
52
- type OnLovelaceSettingsDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_MORE_INFO_DIALOG_INFO' | 'HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK'>, HAElement>;
51
+ type OnListenDetail = Record<keyof typeof HA_ROOT_ELEMENT, HAElement>;
52
+ type OnPanelLoadDetail = Record<keyof typeof HA_ROOT_ELEMENT, HAElement>;
53
+ type OnLovelacePanelLoadDetail = Record<keyof typeof HA_ROOT_ELEMENT | keyof typeof HA_LOVELACE_ELEMENT, HAElement>;
54
+ type OnMoreInfoDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK' | 'HA_DIALOG_MORE_INFO_SETTINGS'>, HAElement>;
55
+ type OnHistoryAndLogBookDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_MORE_INFO_DIALOG_INFO' | 'HA_DIALOG_MORE_INFO_SETTINGS'>, HAElement>;
56
+ type OnSettingsDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_MORE_INFO_DIALOG_INFO' | 'HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK'>, HAElement>;
53
57
  declare class DelegatedEventTarget implements EventTarget {
54
58
  private delegate;
55
59
  addEventListener(...args: Parameters<EventTarget['addEventListener']>): void;
@@ -77,15 +81,17 @@ declare class HAQuerySelector extends DelegatedEventTarget {
77
81
  private _dispatchEvent;
78
82
  private _updateDialogElements;
79
83
  private _updateRootElements;
80
- private _updateResolverElements;
84
+ private _updateLovelaceElements;
81
85
  private _watchDialogs;
82
86
  private _watchDialogsContent;
83
87
  private _watchDashboards;
84
88
  private _watchLovelace;
85
89
  listen(): void;
90
+ addEventListener(type: `${HAQuerySelectorEvent.ON_LISTEN}`, callback: HAQuerySelectorEventListener<OnListenDetail>, options?: boolean | AddEventListenerOptions): void;
91
+ addEventListener(type: `${HAQuerySelectorEvent.ON_PANEL_LOAD}`, callback: HAQuerySelectorEventListener<OnPanelLoadDetail>, options?: boolean | AddEventListenerOptions): void;
86
92
  addEventListener(type: `${HAQuerySelectorEvent.ON_LOVELACE_PANEL_LOAD}`, callback: HAQuerySelectorEventListener<OnLovelacePanelLoadDetail>, options?: boolean | AddEventListenerOptions): void;
87
- addEventListener(type: `${HAQuerySelectorEvent.ON_LOVELACE_MORE_INFO_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnLovelaceMoreInfoDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
88
- addEventListener(type: `${HAQuerySelectorEvent.ON_LOVELACE_HISTORY_AND_LOGBOOK_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnLovelaceHistoryAndLogBookDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
89
- addEventListener(type: `${HAQuerySelectorEvent.ON_LOVELACE_SETTINGS_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnLovelaceSettingsDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
93
+ addEventListener(type: `${HAQuerySelectorEvent.ON_MORE_INFO_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnMoreInfoDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
94
+ addEventListener(type: `${HAQuerySelectorEvent.ON_HISTORY_AND_LOGBOOK_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnHistoryAndLogBookDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
95
+ addEventListener(type: `${HAQuerySelectorEvent.ON_SETTINGS_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnSettingsDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
90
96
  }
91
- export { HAQuerySelector, HAQuerySelectorEvent, ElementProps, OnLovelacePanelLoadDetail, OnLovelaceMoreInfoDialogOpenDetail, OnLovelaceHistoryAndLogBookDialogOpenDetail, OnLovelaceSettingsDialogOpenDetail };
97
+ export { HAQuerySelector, HAQuerySelectorEvent, HAElement, OnLovelacePanelLoadDetail, OnMoreInfoDialogOpenDetail, OnHistoryAndLogBookDialogOpenDetail, OnSettingsDialogOpenDetail };
package/dist/esm/index.js CHANGED
@@ -1 +1 @@
1
- import{asyncQuerySelector as e,AsyncSelector as t}from"shadow-dom-selector";var o=function(e,t){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])},o(e,t)};var _=function(){return _=Object.assign||function(e){for(var t,o=1,_=arguments.length;o<_;o++)for(var n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},_.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError;var n,r,O,i,s,a,A,l,c,E,h,I,L,d,N,R,u,H="$",D={retries:100,delay:50};!function(e){e.HOME_ASSISTANT="HOME_ASSISTANT",e.HOME_ASSISTANT_MAIN="HOME_ASSISTANT_MAIN",e.HA_DRAWER="HA_DRAWER",e.HA_SIDEBAR="HA_SIDEBAR"}(n||(n={})),function(e){e.PARTIAL_PANEL_RESOLVER="PARTIAL_PANEL_RESOLVER",e.HA_PANEL_LOVELACE="HA_PANEL_LOVELACE",e.HUI_ROOT="HUI_ROOT",e.HEADER="HEADER",e.HUI_VIEW="HUI_VIEW"}(r||(r={})),function(e){e.HA_MORE_INFO_DIALOG="HA_MORE_INFO_DIALOG",e.HA_DIALOG="HA_DIALOG",e.HA_DIALOG_CONTENT="HA_DIALOG_CONTENT",e.HA_MORE_INFO_DIALOG_INFO="HA_MORE_INFO_DIALOG_INFO",e.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK="HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK",e.HA_DIALOG_MORE_INFO_SETTINGS="HA_DIALOG_MORE_INFO_SETTINGS"}(O||(O={})),function(e){e.ON_LOVELACE_PANEL_LOAD="onLovelacePanelLoad",e.ON_LOVELACE_MORE_INFO_DIALOG_OPEN="onLovelaceMoreInfoDialogOpen",e.ON_LOVELACE_HISTORY_AND_LOGBOOK_DIALOG_OPEN="onLovelaceHistoryAndLogBookDialogOpen",e.ON_LOVELACE_SETTINGS_DIALOG_OPEN="onLovelaceSettingsDialogOpen"}(i||(i={})),function(e){e.HOME_ASSISTANT="home-assistant",e.HOME_ASSISTANT_MAIN="home-assistant-main",e.HA_DRAWER="ha-drawer",e.HA_SIDEBAR="ha-sidebar",e.PARTIAL_PANEL_RESOLVER="partial-panel-resolver",e.HA_PANEL_LOVELACE="ha-panel-lovelace",e.HUI_ROOT="hui-root",e.HEADER=".header",e.HUI_VIEW="hui-view",e.HA_MORE_INFO_DIALOG="ha-more-info-dialog",e.HA_DIALOG="ha-dialog",e.HA_DIALOG_CONTENT=".content",e.HA_MORE_INFO_DIALOG_INFO="ha-more-info-info",e.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK="ha-more-info-history-and-logbook",e.HA_DIALOG_MORE_INFO_SETTINGS="ha-more-info-settings"}(u||(u={}));var v=((s={})[n.HOME_ASSISTANT]={selector:u.HOME_ASSISTANT,children:{shadowRoot:{selector:H,children:(a={},a[n.HOME_ASSISTANT_MAIN]={selector:u.HOME_ASSISTANT_MAIN,children:{shadowRoot:{selector:H,children:(A={},A[n.HA_DRAWER]={selector:u.HA_DRAWER,children:(l={},l[n.HA_SIDEBAR]={selector:u.HA_SIDEBAR,children:{shadowRoot:{selector:H}}},l)},A)}}},a)}}},s),p=((c={})[r.PARTIAL_PANEL_RESOLVER]={selector:u.PARTIAL_PANEL_RESOLVER,children:(E={},E[r.HA_PANEL_LOVELACE]={selector:u.HA_PANEL_LOVELACE,children:{shadowRoot:{selector:H,children:(h={},h[r.HUI_ROOT]={selector:u.HUI_ROOT,children:{shadowRoot:{selector:H,children:(I={},I[r.HEADER]={selector:u.HEADER},I[r.HUI_VIEW]={selector:u.HUI_VIEW},I)}}},h)}}},E)},c),f={shadowRoot:{selector:H,children:(L={},L[O.HA_MORE_INFO_DIALOG]={selector:u.HA_MORE_INFO_DIALOG,children:{shadowRoot:{selector:H,children:(d={},d[O.HA_DIALOG]={selector:u.HA_DIALOG,children:(N={},N[O.HA_DIALOG_CONTENT]={selector:u.HA_DIALOG_CONTENT,children:(R={},R[O.HA_MORE_INFO_DIALOG_INFO]={selector:u.HA_MORE_INFO_DIALOG_INFO},R[O.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]={selector:u.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK},R[O.HA_DIALOG_MORE_INFO_SETTINGS]={selector:u.HA_DIALOG_MORE_INFO_SETTINGS},R)},N)},d)}}},L)}},T=function(o,n,r,O){return void 0===r&&(r=null),void 0===O&&(O=!1),Object.entries(n||{}).reduce((function(n,i){var s=i[0],a=i[1];if(a.selector===H&&r)return a.children?_(_({},n),T(o,a.children,r,!0)):n;var A=r?r.then((function(t){return e(t,(_=a.selector,O?"$ "+_:_),o);var _})):e(a.selector,o);return n[s]={element:A,children:T(o,a.children,A),selector:new t(A,o)},n}),{})},S=function(e,t){for(var o=0,_=Object.entries(t);o<_.length;o++){var n=_[o];if(n[0]===e)return n[1];var r=S(e,n[1].children);if(r)return r}},G=function(e,t){return Object.keys(e).reduce((function(e,o){var n=S(o,t);n.children;var r=function(e,t){var o={};for(var _ in e)Object.prototype.hasOwnProperty.call(e,_)&&t.indexOf(_)<0&&(o[_]=e[_]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(_=Object.getOwnPropertySymbols(e);n<_.length;n++)t.indexOf(_[n])<0&&Object.prototype.propertyIsEnumerable.call(e,_[n])&&(o[_[n]]=e[_[n]])}return o}(n,["children"]);return e[o]=_({},r),e}),{})},m=function(){function e(){this.delegate=document.createDocumentFragment()}return e.prototype.addEventListener=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];(e=this.delegate).addEventListener.apply(e,t)},e.prototype.dispatchEvent=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return(e=this.delegate).dispatchEvent.apply(e,t)},e.prototype.removeEventListener=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return(e=this.delegate).removeEventListener.apply(e,t)},e}(),M=function(e){function t(t){void 0===t&&(t={});var o=e.call(this)||this;return o._config=_(_({},D),t),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function _(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(_.prototype=t.prototype,new _)}(t,e),t.prototype._dispatchEvent=function(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t}))},t.prototype._updateDialogElements=function(e){var t,o=this;void 0===e&&(e=O.HA_MORE_INFO_DIALOG_INFO),this._dialogTree=T(this._config,f,this._haRootElements.HOME_ASSISTANT.element);var _=G(O,this._dialogTree);_.HA_DIALOG_CONTENT.element.then((function(e){o._dialogsContentObserver.disconnect(),o._dialogsContentObserver.observe(e,{childList:!0})})),this._haDialogElements=function(e,t){return[O.HA_MORE_INFO_DIALOG,O.HA_DIALOG,O.HA_DIALOG_CONTENT,t].reduce((function(t,o){return t[o]=e[o],t}),{})}(_,e);var n=((t={})[O.HA_MORE_INFO_DIALOG_INFO]=i.ON_LOVELACE_MORE_INFO_DIALOG_OPEN,t[O.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]=i.ON_LOVELACE_HISTORY_AND_LOGBOOK_DIALOG_OPEN,t[O.HA_DIALOG_MORE_INFO_SETTINGS]=i.ON_LOVELACE_SETTINGS_DIALOG_OPEN,t);this._dispatchEvent(n[e],this._haDialogElements)},t.prototype._updateRootElements=function(){var e=this;this._homeAssistantRootTree=T(this._config,v),this._haRootElements=G(n,this._homeAssistantRootTree),this._haRootElements[n.HOME_ASSISTANT].selector.$.element.then((function(t){e._dialogsObserver.disconnect(),e._dialogsObserver.observe(t,{childList:!0})}))},t.prototype._updateResolverElements=function(){var e=this,t=Date.now();t-this._timestap<500||(this._timestap=t,this._homeAssistantResolverTree=T(this._config,p,this._haRootElements[n.HA_DRAWER].element),this._haResolverElements=G(r,this._homeAssistantResolverTree),this._haResolverElements[r.PARTIAL_PANEL_RESOLVER].element.then((function(t){e._panelResolverObserver.disconnect(),e._panelResolverObserver.observe(t,{childList:!0})})),this._haResolverElements[r.HA_PANEL_LOVELACE].selector.$.element.then((function(t){e._lovelaceObserver.disconnect(),e._lovelaceObserver.observe(t,{childList:!0})})),this._dispatchEvent(i.ON_LOVELACE_PANEL_LOAD,_(_({},this._haRootElements),this._haResolverElements)))},t.prototype._watchDialogs=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===u.HA_MORE_INFO_DIALOG&&t._updateDialogElements()}))}))},t.prototype._watchDialogsContent=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){var o,_=((o={})[u.HA_MORE_INFO_DIALOG_INFO]=O.HA_MORE_INFO_DIALOG_INFO,o[u.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]=O.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK,o[u.HA_DIALOG_MORE_INFO_SETTINGS]=O.HA_DIALOG_MORE_INFO_SETTINGS,o);if(e.localName&&e.localName in _){var n=e.localName;t._updateDialogElements(_[n])}}))}))},t.prototype._watchDashboards=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===u.HA_PANEL_LOVELACE&&t._updateResolverElements()}))}))},t.prototype._watchLovelace=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===u.HUI_ROOT&&t._updateResolverElements()}))}))},t.prototype.listen=function(){this._watchDialogsBinded=this._watchDialogs.bind(this),this._watchDialogsContentBinded=this._watchDialogsContent.bind(this),this._watchDashboardsBinded=this._watchDashboards.bind(this),this._watchLovelaceBinded=this._watchLovelace.bind(this),this._dialogsObserver=new MutationObserver(this._watchDialogsBinded),this._dialogsContentObserver=new MutationObserver(this._watchDialogsContentBinded),this._panelResolverObserver=new MutationObserver(this._watchDashboardsBinded),this._lovelaceObserver=new MutationObserver(this._watchLovelaceBinded),this._updateRootElements(),this._updateResolverElements()},t.prototype.addEventListener=function(t,o,_){e.prototype.addEventListener.call(this,t,o,_)},t}(m);export{M as HAQuerySelector,i as HAQuerySelectorEvent};
1
+ import{asyncQuerySelector as e,AsyncSelector as t}from"shadow-dom-selector";var o=function(e,t){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])},o(e,t)};var _=function(){return _=Object.assign||function(e){for(var t,o=1,_=arguments.length;o<_;o++)for(var n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},_.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError;var n,r,O,i,s,a,A,c,l,E,h,I,N,d,L,R,u="$",D={retries:100,delay:50};!function(e){e.HOME_ASSISTANT="HOME_ASSISTANT",e.HOME_ASSISTANT_MAIN="HOME_ASSISTANT_MAIN",e.HA_DRAWER="HA_DRAWER",e.HA_SIDEBAR="HA_SIDEBAR",e.PARTIAL_PANEL_RESOLVER="PARTIAL_PANEL_RESOLVER"}(n||(n={})),function(e){e.HA_PANEL_LOVELACE="HA_PANEL_LOVELACE",e.HUI_ROOT="HUI_ROOT",e.HEADER="HEADER",e.HUI_VIEW="HUI_VIEW"}(r||(r={})),function(e){e.HA_MORE_INFO_DIALOG="HA_MORE_INFO_DIALOG",e.HA_DIALOG="HA_DIALOG",e.HA_DIALOG_CONTENT="HA_DIALOG_CONTENT",e.HA_MORE_INFO_DIALOG_INFO="HA_MORE_INFO_DIALOG_INFO",e.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK="HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK",e.HA_DIALOG_MORE_INFO_SETTINGS="HA_DIALOG_MORE_INFO_SETTINGS"}(O||(O={})),function(e){e.ON_LISTEN="onListen",e.ON_PANEL_LOAD="onPanelLoad",e.ON_LOVELACE_PANEL_LOAD="onLovelacePanelLoad",e.ON_MORE_INFO_DIALOG_OPEN="onMoreInfoDialogOpen",e.ON_HISTORY_AND_LOGBOOK_DIALOG_OPEN="onHistoryAndLogBookDialogOpen",e.ON_SETTINGS_DIALOG_OPEN="onSettingsDialogOpen"}(i||(i={})),function(e){e.HOME_ASSISTANT="home-assistant",e.HOME_ASSISTANT_MAIN="home-assistant-main",e.HA_DRAWER="ha-drawer",e.HA_SIDEBAR="ha-sidebar",e.PARTIAL_PANEL_RESOLVER="partial-panel-resolver",e.HA_PANEL_LOVELACE="ha-panel-lovelace",e.HUI_ROOT="hui-root",e.HEADER=".header",e.HUI_VIEW="hui-view",e.HA_MORE_INFO_DIALOG="ha-more-info-dialog",e.HA_DIALOG="ha-dialog",e.HA_DIALOG_CONTENT=".content",e.HA_MORE_INFO_DIALOG_INFO="ha-more-info-info",e.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK="ha-more-info-history-and-logbook",e.HA_DIALOG_MORE_INFO_SETTINGS="ha-more-info-settings"}(R||(R={}));var H=((s={})[n.HOME_ASSISTANT]={selector:R.HOME_ASSISTANT,children:{shadowRoot:{selector:u,children:(a={},a[n.HOME_ASSISTANT_MAIN]={selector:R.HOME_ASSISTANT_MAIN,children:{shadowRoot:{selector:u,children:(A={},A[n.HA_DRAWER]={selector:R.HA_DRAWER,children:(c={},c[n.HA_SIDEBAR]={selector:R.HA_SIDEBAR,children:{shadowRoot:{selector:u}}},c[n.PARTIAL_PANEL_RESOLVER]={selector:R.PARTIAL_PANEL_RESOLVER},c)},A)}}},a)}}},s),p=((l={})[r.HA_PANEL_LOVELACE]={selector:R.HA_PANEL_LOVELACE,children:{shadowRoot:{selector:u,children:(E={},E[r.HUI_ROOT]={selector:R.HUI_ROOT,children:{shadowRoot:{selector:u,children:(h={},h[r.HEADER]={selector:R.HEADER},h[r.HUI_VIEW]={selector:R.HUI_VIEW},h)}}},E)}}},l),v={shadowRoot:{selector:u,children:(I={},I[O.HA_MORE_INFO_DIALOG]={selector:R.HA_MORE_INFO_DIALOG,children:{shadowRoot:{selector:u,children:(N={},N[O.HA_DIALOG]={selector:R.HA_DIALOG,children:(d={},d[O.HA_DIALOG_CONTENT]={selector:R.HA_DIALOG_CONTENT,children:(L={},L[O.HA_MORE_INFO_DIALOG_INFO]={selector:R.HA_MORE_INFO_DIALOG_INFO},L[O.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]={selector:R.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK},L[O.HA_DIALOG_MORE_INFO_SETTINGS]={selector:R.HA_DIALOG_MORE_INFO_SETTINGS},L)},d)},N)}}},I)}},f=function(o,n,r,O){return void 0===r&&(r=null),void 0===O&&(O=!1),Object.entries(n||{}).reduce((function(n,i){var s=i[0],a=i[1];if(a.selector===u&&r)return a.children?_(_({},n),f(o,a.children,r,!0)):n;var A=r?r.then((function(t){return e(t,(_=a.selector,O?"$ "+_:_),o);var _})):e(a.selector,o);return n[s]={element:A,children:f(o,a.children,A),selector:new t(A,o)},n}),{})},T=function(e,t){for(var o=0,_=Object.entries(t);o<_.length;o++){var n=_[o];if(n[0]===e)return n[1];var r=T(e,n[1].children);if(r)return r}},S=function(e,t){return Object.keys(e).reduce((function(e,o){var n=T(o,t);n.children;var r=function(e,t){var o={};for(var _ in e)Object.prototype.hasOwnProperty.call(e,_)&&t.indexOf(_)<0&&(o[_]=e[_]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(_=Object.getOwnPropertySymbols(e);n<_.length;n++)t.indexOf(_[n])<0&&Object.prototype.propertyIsEnumerable.call(e,_[n])&&(o[_[n]]=e[_[n]])}return o}(n,["children"]);return e[o]=_({},r),e}),{})},G=function(){function e(){this.delegate=document.createDocumentFragment()}return e.prototype.addEventListener=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];(e=this.delegate).addEventListener.apply(e,t)},e.prototype.dispatchEvent=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return(e=this.delegate).dispatchEvent.apply(e,t)},e.prototype.removeEventListener=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return(e=this.delegate).removeEventListener.apply(e,t)},e}(),m=function(e){function t(t){void 0===t&&(t={});var o=e.call(this)||this;return o._config=_(_({},D),t),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function _(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(_.prototype=t.prototype,new _)}(t,e),t.prototype._dispatchEvent=function(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t}))},t.prototype._updateDialogElements=function(e){var t,o=this;void 0===e&&(e=O.HA_MORE_INFO_DIALOG_INFO),this._dialogTree=f(this._config,v,this._haRootElements.HOME_ASSISTANT.element);var _=S(O,this._dialogTree);_.HA_DIALOG_CONTENT.element.then((function(e){o._dialogsContentObserver.disconnect(),o._dialogsContentObserver.observe(e,{childList:!0})})),this._haDialogElements=function(e,t){return[O.HA_MORE_INFO_DIALOG,O.HA_DIALOG,O.HA_DIALOG_CONTENT,t].reduce((function(t,o){return t[o]=e[o],t}),{})}(_,e);var n=((t={})[O.HA_MORE_INFO_DIALOG_INFO]=i.ON_MORE_INFO_DIALOG_OPEN,t[O.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]=i.ON_HISTORY_AND_LOGBOOK_DIALOG_OPEN,t[O.HA_DIALOG_MORE_INFO_SETTINGS]=i.ON_SETTINGS_DIALOG_OPEN,t);this._dispatchEvent(n[e],this._haDialogElements)},t.prototype._updateRootElements=function(){var e=this;this._homeAssistantRootTree=f(this._config,H),this._haRootElements=S(n,this._homeAssistantRootTree),this._haRootElements[n.HOME_ASSISTANT].selector.$.element.then((function(t){e._dialogsObserver.disconnect(),e._dialogsObserver.observe(t,{childList:!0})})),this._haRootElements[n.PARTIAL_PANEL_RESOLVER].element.then((function(t){e._panelResolverObserver.disconnect(),t&&e._panelResolverObserver.observe(t,{childList:!0})})),this._dispatchEvent(i.ON_LISTEN,this._haRootElements),this._dispatchEvent(i.ON_PANEL_LOAD,this._haRootElements)},t.prototype._updateLovelaceElements=function(){var e=this,t=Date.now();t-this._timestap<500||(this._timestap=t,this._homeAssistantResolverTree=f(this._config,p,this._haRootElements[n.HA_DRAWER].element),this._haResolverElements=S(r,this._homeAssistantResolverTree),this._haResolverElements[r.HA_PANEL_LOVELACE].selector.$.element.then((function(t){e._lovelaceObserver.disconnect(),t&&(e._lovelaceObserver.observe(t,{childList:!0}),e._dispatchEvent(i.ON_LOVELACE_PANEL_LOAD,_(_({},e._haRootElements),e._haResolverElements)))})))},t.prototype._watchDialogs=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===R.HA_MORE_INFO_DIALOG&&t._updateDialogElements()}))}))},t.prototype._watchDialogsContent=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){var o,_=((o={})[R.HA_MORE_INFO_DIALOG_INFO]=O.HA_MORE_INFO_DIALOG_INFO,o[R.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]=O.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK,o[R.HA_DIALOG_MORE_INFO_SETTINGS]=O.HA_DIALOG_MORE_INFO_SETTINGS,o);if(e.localName&&e.localName in _){var n=e.localName;t._updateDialogElements(_[n])}}))}))},t.prototype._watchDashboards=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){t._dispatchEvent(i.ON_PANEL_LOAD,t._haRootElements),e.localName===R.HA_PANEL_LOVELACE&&t._updateLovelaceElements()}))}))},t.prototype._watchLovelace=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===R.HUI_ROOT&&t._updateLovelaceElements()}))}))},t.prototype.listen=function(){this._watchDialogsBinded=this._watchDialogs.bind(this),this._watchDialogsContentBinded=this._watchDialogsContent.bind(this),this._watchDashboardsBinded=this._watchDashboards.bind(this),this._watchLovelaceBinded=this._watchLovelace.bind(this),this._dialogsObserver=new MutationObserver(this._watchDialogsBinded),this._dialogsContentObserver=new MutationObserver(this._watchDialogsContentBinded),this._panelResolverObserver=new MutationObserver(this._watchDashboardsBinded),this._lovelaceObserver=new MutationObserver(this._watchLovelaceBinded),this._updateRootElements(),this._updateLovelaceElements()},t.prototype.addEventListener=function(t,o,_){e.prototype.addEventListener.call(this,t,o,_)},t}(G);export{m as HAQuerySelector,i as HAQuerySelectorEvent};
package/dist/index.d.ts CHANGED
@@ -23,10 +23,10 @@ declare enum HA_ROOT_ELEMENT {
23
23
  HOME_ASSISTANT = "HOME_ASSISTANT",
24
24
  HOME_ASSISTANT_MAIN = "HOME_ASSISTANT_MAIN",
25
25
  HA_DRAWER = "HA_DRAWER",
26
- HA_SIDEBAR = "HA_SIDEBAR"
26
+ HA_SIDEBAR = "HA_SIDEBAR",
27
+ PARTIAL_PANEL_RESOLVER = "PARTIAL_PANEL_RESOLVER"
27
28
  }
28
- declare enum HA_RESOLVER_ELEMENT {
29
- PARTIAL_PANEL_RESOLVER = "PARTIAL_PANEL_RESOLVER",
29
+ declare enum HA_LOVELACE_ELEMENT {
30
30
  HA_PANEL_LOVELACE = "HA_PANEL_LOVELACE",
31
31
  HUI_ROOT = "HUI_ROOT",
32
32
  HEADER = "HEADER",
@@ -41,15 +41,19 @@ declare enum HA_DIALOG_ELEMENT {
41
41
  HA_DIALOG_MORE_INFO_SETTINGS = "HA_DIALOG_MORE_INFO_SETTINGS"
42
42
  }
43
43
  declare enum HAQuerySelectorEvent {
44
+ ON_LISTEN = "onListen",
45
+ ON_PANEL_LOAD = "onPanelLoad",
44
46
  ON_LOVELACE_PANEL_LOAD = "onLovelacePanelLoad",
45
- ON_LOVELACE_MORE_INFO_DIALOG_OPEN = "onLovelaceMoreInfoDialogOpen",
46
- ON_LOVELACE_HISTORY_AND_LOGBOOK_DIALOG_OPEN = "onLovelaceHistoryAndLogBookDialogOpen",
47
- ON_LOVELACE_SETTINGS_DIALOG_OPEN = "onLovelaceSettingsDialogOpen"
47
+ ON_MORE_INFO_DIALOG_OPEN = "onMoreInfoDialogOpen",
48
+ ON_HISTORY_AND_LOGBOOK_DIALOG_OPEN = "onHistoryAndLogBookDialogOpen",
49
+ ON_SETTINGS_DIALOG_OPEN = "onSettingsDialogOpen"
48
50
  }
49
- type OnLovelacePanelLoadDetail = Record<keyof typeof HA_ROOT_ELEMENT | keyof typeof HA_RESOLVER_ELEMENT, HAElement>;
50
- type OnLovelaceMoreInfoDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK' | 'HA_DIALOG_MORE_INFO_SETTINGS'>, HAElement>;
51
- type OnLovelaceHistoryAndLogBookDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_MORE_INFO_DIALOG_INFO' | 'HA_DIALOG_MORE_INFO_SETTINGS'>, HAElement>;
52
- type OnLovelaceSettingsDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_MORE_INFO_DIALOG_INFO' | 'HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK'>, HAElement>;
51
+ type OnListenDetail = Record<keyof typeof HA_ROOT_ELEMENT, HAElement>;
52
+ type OnPanelLoadDetail = Record<keyof typeof HA_ROOT_ELEMENT, HAElement>;
53
+ type OnLovelacePanelLoadDetail = Record<keyof typeof HA_ROOT_ELEMENT | keyof typeof HA_LOVELACE_ELEMENT, HAElement>;
54
+ type OnMoreInfoDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK' | 'HA_DIALOG_MORE_INFO_SETTINGS'>, HAElement>;
55
+ type OnHistoryAndLogBookDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_MORE_INFO_DIALOG_INFO' | 'HA_DIALOG_MORE_INFO_SETTINGS'>, HAElement>;
56
+ type OnSettingsDialogOpenDetail = Record<Exclude<keyof typeof HA_DIALOG_ELEMENT, 'HA_MORE_INFO_DIALOG_INFO' | 'HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK'>, HAElement>;
53
57
  declare class DelegatedEventTarget implements EventTarget {
54
58
  private delegate;
55
59
  addEventListener(...args: Parameters<EventTarget['addEventListener']>): void;
@@ -77,15 +81,17 @@ declare class HAQuerySelector extends DelegatedEventTarget {
77
81
  private _dispatchEvent;
78
82
  private _updateDialogElements;
79
83
  private _updateRootElements;
80
- private _updateResolverElements;
84
+ private _updateLovelaceElements;
81
85
  private _watchDialogs;
82
86
  private _watchDialogsContent;
83
87
  private _watchDashboards;
84
88
  private _watchLovelace;
85
89
  listen(): void;
90
+ addEventListener(type: `${HAQuerySelectorEvent.ON_LISTEN}`, callback: HAQuerySelectorEventListener<OnListenDetail>, options?: boolean | AddEventListenerOptions): void;
91
+ addEventListener(type: `${HAQuerySelectorEvent.ON_PANEL_LOAD}`, callback: HAQuerySelectorEventListener<OnPanelLoadDetail>, options?: boolean | AddEventListenerOptions): void;
86
92
  addEventListener(type: `${HAQuerySelectorEvent.ON_LOVELACE_PANEL_LOAD}`, callback: HAQuerySelectorEventListener<OnLovelacePanelLoadDetail>, options?: boolean | AddEventListenerOptions): void;
87
- addEventListener(type: `${HAQuerySelectorEvent.ON_LOVELACE_MORE_INFO_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnLovelaceMoreInfoDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
88
- addEventListener(type: `${HAQuerySelectorEvent.ON_LOVELACE_HISTORY_AND_LOGBOOK_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnLovelaceHistoryAndLogBookDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
89
- addEventListener(type: `${HAQuerySelectorEvent.ON_LOVELACE_SETTINGS_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnLovelaceSettingsDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
93
+ addEventListener(type: `${HAQuerySelectorEvent.ON_MORE_INFO_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnMoreInfoDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
94
+ addEventListener(type: `${HAQuerySelectorEvent.ON_HISTORY_AND_LOGBOOK_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnHistoryAndLogBookDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
95
+ addEventListener(type: `${HAQuerySelectorEvent.ON_SETTINGS_DIALOG_OPEN}`, callback: HAQuerySelectorEventListener<OnSettingsDialogOpenDetail>, options?: boolean | AddEventListenerOptions): void;
90
96
  }
91
- export { HAQuerySelector, HAQuerySelectorEvent, ElementProps, OnLovelacePanelLoadDetail, OnLovelaceMoreInfoDialogOpenDetail, OnLovelaceHistoryAndLogBookDialogOpenDetail, OnLovelaceSettingsDialogOpenDetail };
97
+ export { HAQuerySelector, HAQuerySelectorEvent, HAElement, OnLovelacePanelLoadDetail, OnMoreInfoDialogOpenDetail, OnHistoryAndLogBookDialogOpenDetail, OnSettingsDialogOpenDetail };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("shadow-dom-selector"),t=function(e,o){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])},t(e,o)};var o=function(){return o=Object.assign||function(e){for(var t,o=1,_=arguments.length;o<_;o++)for(var n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},o.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError;var _,n,r,O,s,i,A,a,c,l,E,h,I,L,d,N,R,u="$",H={retries:100,delay:50};!function(e){e.HOME_ASSISTANT="HOME_ASSISTANT",e.HOME_ASSISTANT_MAIN="HOME_ASSISTANT_MAIN",e.HA_DRAWER="HA_DRAWER",e.HA_SIDEBAR="HA_SIDEBAR"}(_||(_={})),function(e){e.PARTIAL_PANEL_RESOLVER="PARTIAL_PANEL_RESOLVER",e.HA_PANEL_LOVELACE="HA_PANEL_LOVELACE",e.HUI_ROOT="HUI_ROOT",e.HEADER="HEADER",e.HUI_VIEW="HUI_VIEW"}(n||(n={})),function(e){e.HA_MORE_INFO_DIALOG="HA_MORE_INFO_DIALOG",e.HA_DIALOG="HA_DIALOG",e.HA_DIALOG_CONTENT="HA_DIALOG_CONTENT",e.HA_MORE_INFO_DIALOG_INFO="HA_MORE_INFO_DIALOG_INFO",e.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK="HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK",e.HA_DIALOG_MORE_INFO_SETTINGS="HA_DIALOG_MORE_INFO_SETTINGS"}(r||(r={})),exports.HAQuerySelectorEvent=void 0,(O=exports.HAQuerySelectorEvent||(exports.HAQuerySelectorEvent={})).ON_LOVELACE_PANEL_LOAD="onLovelacePanelLoad",O.ON_LOVELACE_MORE_INFO_DIALOG_OPEN="onLovelaceMoreInfoDialogOpen",O.ON_LOVELACE_HISTORY_AND_LOGBOOK_DIALOG_OPEN="onLovelaceHistoryAndLogBookDialogOpen",O.ON_LOVELACE_SETTINGS_DIALOG_OPEN="onLovelaceSettingsDialogOpen",function(e){e.HOME_ASSISTANT="home-assistant",e.HOME_ASSISTANT_MAIN="home-assistant-main",e.HA_DRAWER="ha-drawer",e.HA_SIDEBAR="ha-sidebar",e.PARTIAL_PANEL_RESOLVER="partial-panel-resolver",e.HA_PANEL_LOVELACE="ha-panel-lovelace",e.HUI_ROOT="hui-root",e.HEADER=".header",e.HUI_VIEW="hui-view",e.HA_MORE_INFO_DIALOG="ha-more-info-dialog",e.HA_DIALOG="ha-dialog",e.HA_DIALOG_CONTENT=".content",e.HA_MORE_INFO_DIALOG_INFO="ha-more-info-info",e.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK="ha-more-info-history-and-logbook",e.HA_DIALOG_MORE_INFO_SETTINGS="ha-more-info-settings"}(R||(R={}));var v=((s={})[_.HOME_ASSISTANT]={selector:R.HOME_ASSISTANT,children:{shadowRoot:{selector:u,children:(i={},i[_.HOME_ASSISTANT_MAIN]={selector:R.HOME_ASSISTANT_MAIN,children:{shadowRoot:{selector:u,children:(A={},A[_.HA_DRAWER]={selector:R.HA_DRAWER,children:(a={},a[_.HA_SIDEBAR]={selector:R.HA_SIDEBAR,children:{shadowRoot:{selector:u}}},a)},A)}}},i)}}},s),p=((c={})[n.PARTIAL_PANEL_RESOLVER]={selector:R.PARTIAL_PANEL_RESOLVER,children:(l={},l[n.HA_PANEL_LOVELACE]={selector:R.HA_PANEL_LOVELACE,children:{shadowRoot:{selector:u,children:(E={},E[n.HUI_ROOT]={selector:R.HUI_ROOT,children:{shadowRoot:{selector:u,children:(h={},h[n.HEADER]={selector:R.HEADER},h[n.HUI_VIEW]={selector:R.HUI_VIEW},h)}}},E)}}},l)},c),D={shadowRoot:{selector:u,children:(I={},I[r.HA_MORE_INFO_DIALOG]={selector:R.HA_MORE_INFO_DIALOG,children:{shadowRoot:{selector:u,children:(L={},L[r.HA_DIALOG]={selector:R.HA_DIALOG,children:(d={},d[r.HA_DIALOG_CONTENT]={selector:R.HA_DIALOG_CONTENT,children:(N={},N[r.HA_MORE_INFO_DIALOG_INFO]={selector:R.HA_MORE_INFO_DIALOG_INFO},N[r.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]={selector:R.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK},N[r.HA_DIALOG_MORE_INFO_SETTINGS]={selector:R.HA_DIALOG_MORE_INFO_SETTINGS},N)},d)},L)}}},I)}},S=function(t,_,n,r){return void 0===n&&(n=null),void 0===r&&(r=!1),Object.entries(_||{}).reduce((function(_,O){var s=O[0],i=O[1];if(i.selector===u&&n)return i.children?o(o({},_),S(t,i.children,n,!0)):_;var A=n?n.then((function(o){return e.asyncQuerySelector(o,(_=i.selector,r?"$ "+_:_),t);var _})):e.asyncQuerySelector(i.selector,t);return _[s]={element:A,children:S(t,i.children,A),selector:new e.AsyncSelector(A,t)},_}),{})},f=function(e,t){for(var o=0,_=Object.entries(t);o<_.length;o++){var n=_[o];if(n[0]===e)return n[1];var r=f(e,n[1].children);if(r)return r}},T=function(e,t){return Object.keys(e).reduce((function(e,_){var n=f(_,t);n.children;var r=function(e,t){var o={};for(var _ in e)Object.prototype.hasOwnProperty.call(e,_)&&t.indexOf(_)<0&&(o[_]=e[_]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(_=Object.getOwnPropertySymbols(e);n<_.length;n++)t.indexOf(_[n])<0&&Object.prototype.propertyIsEnumerable.call(e,_[n])&&(o[_[n]]=e[_[n]])}return o}(n,["children"]);return e[_]=o({},r),e}),{})},G=function(){function e(){this.delegate=document.createDocumentFragment()}return e.prototype.addEventListener=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];(e=this.delegate).addEventListener.apply(e,t)},e.prototype.dispatchEvent=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return(e=this.delegate).dispatchEvent.apply(e,t)},e.prototype.removeEventListener=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return(e=this.delegate).removeEventListener.apply(e,t)},e}(),m=function(e){function O(t){void 0===t&&(t={});var _=e.call(this)||this;return _._config=o(o({},H),t),_}return function(e,o){if("function"!=typeof o&&null!==o)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");function _(){this.constructor=e}t(e,o),e.prototype=null===o?Object.create(o):(_.prototype=o.prototype,new _)}(O,e),O.prototype._dispatchEvent=function(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t}))},O.prototype._updateDialogElements=function(e){var t,o=this;void 0===e&&(e=r.HA_MORE_INFO_DIALOG_INFO),this._dialogTree=S(this._config,D,this._haRootElements.HOME_ASSISTANT.element);var _=T(r,this._dialogTree);_.HA_DIALOG_CONTENT.element.then((function(e){o._dialogsContentObserver.disconnect(),o._dialogsContentObserver.observe(e,{childList:!0})})),this._haDialogElements=function(e,t){return[r.HA_MORE_INFO_DIALOG,r.HA_DIALOG,r.HA_DIALOG_CONTENT,t].reduce((function(t,o){return t[o]=e[o],t}),{})}(_,e);var n=((t={})[r.HA_MORE_INFO_DIALOG_INFO]=exports.HAQuerySelectorEvent.ON_LOVELACE_MORE_INFO_DIALOG_OPEN,t[r.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]=exports.HAQuerySelectorEvent.ON_LOVELACE_HISTORY_AND_LOGBOOK_DIALOG_OPEN,t[r.HA_DIALOG_MORE_INFO_SETTINGS]=exports.HAQuerySelectorEvent.ON_LOVELACE_SETTINGS_DIALOG_OPEN,t);this._dispatchEvent(n[e],this._haDialogElements)},O.prototype._updateRootElements=function(){var e=this;this._homeAssistantRootTree=S(this._config,v),this._haRootElements=T(_,this._homeAssistantRootTree),this._haRootElements[_.HOME_ASSISTANT].selector.$.element.then((function(t){e._dialogsObserver.disconnect(),e._dialogsObserver.observe(t,{childList:!0})}))},O.prototype._updateResolverElements=function(){var e=this,t=Date.now();t-this._timestap<500||(this._timestap=t,this._homeAssistantResolverTree=S(this._config,p,this._haRootElements[_.HA_DRAWER].element),this._haResolverElements=T(n,this._homeAssistantResolverTree),this._haResolverElements[n.PARTIAL_PANEL_RESOLVER].element.then((function(t){e._panelResolverObserver.disconnect(),e._panelResolverObserver.observe(t,{childList:!0})})),this._haResolverElements[n.HA_PANEL_LOVELACE].selector.$.element.then((function(t){e._lovelaceObserver.disconnect(),e._lovelaceObserver.observe(t,{childList:!0})})),this._dispatchEvent(exports.HAQuerySelectorEvent.ON_LOVELACE_PANEL_LOAD,o(o({},this._haRootElements),this._haResolverElements)))},O.prototype._watchDialogs=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===R.HA_MORE_INFO_DIALOG&&t._updateDialogElements()}))}))},O.prototype._watchDialogsContent=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){var o,_=((o={})[R.HA_MORE_INFO_DIALOG_INFO]=r.HA_MORE_INFO_DIALOG_INFO,o[R.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]=r.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK,o[R.HA_DIALOG_MORE_INFO_SETTINGS]=r.HA_DIALOG_MORE_INFO_SETTINGS,o);if(e.localName&&e.localName in _){var n=e.localName;t._updateDialogElements(_[n])}}))}))},O.prototype._watchDashboards=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===R.HA_PANEL_LOVELACE&&t._updateResolverElements()}))}))},O.prototype._watchLovelace=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===R.HUI_ROOT&&t._updateResolverElements()}))}))},O.prototype.listen=function(){this._watchDialogsBinded=this._watchDialogs.bind(this),this._watchDialogsContentBinded=this._watchDialogsContent.bind(this),this._watchDashboardsBinded=this._watchDashboards.bind(this),this._watchLovelaceBinded=this._watchLovelace.bind(this),this._dialogsObserver=new MutationObserver(this._watchDialogsBinded),this._dialogsContentObserver=new MutationObserver(this._watchDialogsContentBinded),this._panelResolverObserver=new MutationObserver(this._watchDashboardsBinded),this._lovelaceObserver=new MutationObserver(this._watchLovelaceBinded),this._updateRootElements(),this._updateResolverElements()},O.prototype.addEventListener=function(t,o,_){e.prototype.addEventListener.call(this,t,o,_)},O}(G);exports.HAQuerySelector=m;
1
+ "use strict";var e=require("shadow-dom-selector"),t=function(e,o){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])},t(e,o)};var o=function(){return o=Object.assign||function(e){for(var t,o=1,n=arguments.length;o<n;o++)for(var _ in t=arguments[o])Object.prototype.hasOwnProperty.call(t,_)&&(e[_]=t[_]);return e},o.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError;var n,_,r,O,s,i,a,A,c,l,E,h,I,N,d,L,u="$",R={retries:100,delay:50};!function(e){e.HOME_ASSISTANT="HOME_ASSISTANT",e.HOME_ASSISTANT_MAIN="HOME_ASSISTANT_MAIN",e.HA_DRAWER="HA_DRAWER",e.HA_SIDEBAR="HA_SIDEBAR",e.PARTIAL_PANEL_RESOLVER="PARTIAL_PANEL_RESOLVER"}(n||(n={})),function(e){e.HA_PANEL_LOVELACE="HA_PANEL_LOVELACE",e.HUI_ROOT="HUI_ROOT",e.HEADER="HEADER",e.HUI_VIEW="HUI_VIEW"}(_||(_={})),function(e){e.HA_MORE_INFO_DIALOG="HA_MORE_INFO_DIALOG",e.HA_DIALOG="HA_DIALOG",e.HA_DIALOG_CONTENT="HA_DIALOG_CONTENT",e.HA_MORE_INFO_DIALOG_INFO="HA_MORE_INFO_DIALOG_INFO",e.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK="HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK",e.HA_DIALOG_MORE_INFO_SETTINGS="HA_DIALOG_MORE_INFO_SETTINGS"}(r||(r={})),exports.HAQuerySelectorEvent=void 0,(O=exports.HAQuerySelectorEvent||(exports.HAQuerySelectorEvent={})).ON_LISTEN="onListen",O.ON_PANEL_LOAD="onPanelLoad",O.ON_LOVELACE_PANEL_LOAD="onLovelacePanelLoad",O.ON_MORE_INFO_DIALOG_OPEN="onMoreInfoDialogOpen",O.ON_HISTORY_AND_LOGBOOK_DIALOG_OPEN="onHistoryAndLogBookDialogOpen",O.ON_SETTINGS_DIALOG_OPEN="onSettingsDialogOpen",function(e){e.HOME_ASSISTANT="home-assistant",e.HOME_ASSISTANT_MAIN="home-assistant-main",e.HA_DRAWER="ha-drawer",e.HA_SIDEBAR="ha-sidebar",e.PARTIAL_PANEL_RESOLVER="partial-panel-resolver",e.HA_PANEL_LOVELACE="ha-panel-lovelace",e.HUI_ROOT="hui-root",e.HEADER=".header",e.HUI_VIEW="hui-view",e.HA_MORE_INFO_DIALOG="ha-more-info-dialog",e.HA_DIALOG="ha-dialog",e.HA_DIALOG_CONTENT=".content",e.HA_MORE_INFO_DIALOG_INFO="ha-more-info-info",e.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK="ha-more-info-history-and-logbook",e.HA_DIALOG_MORE_INFO_SETTINGS="ha-more-info-settings"}(L||(L={}));var H=((s={})[n.HOME_ASSISTANT]={selector:L.HOME_ASSISTANT,children:{shadowRoot:{selector:u,children:(i={},i[n.HOME_ASSISTANT_MAIN]={selector:L.HOME_ASSISTANT_MAIN,children:{shadowRoot:{selector:u,children:(a={},a[n.HA_DRAWER]={selector:L.HA_DRAWER,children:(A={},A[n.HA_SIDEBAR]={selector:L.HA_SIDEBAR,children:{shadowRoot:{selector:u}}},A[n.PARTIAL_PANEL_RESOLVER]={selector:L.PARTIAL_PANEL_RESOLVER},A)},a)}}},i)}}},s),v=((c={})[_.HA_PANEL_LOVELACE]={selector:L.HA_PANEL_LOVELACE,children:{shadowRoot:{selector:u,children:(l={},l[_.HUI_ROOT]={selector:L.HUI_ROOT,children:{shadowRoot:{selector:u,children:(E={},E[_.HEADER]={selector:L.HEADER},E[_.HUI_VIEW]={selector:L.HUI_VIEW},E)}}},l)}}},c),p={shadowRoot:{selector:u,children:(h={},h[r.HA_MORE_INFO_DIALOG]={selector:L.HA_MORE_INFO_DIALOG,children:{shadowRoot:{selector:u,children:(I={},I[r.HA_DIALOG]={selector:L.HA_DIALOG,children:(N={},N[r.HA_DIALOG_CONTENT]={selector:L.HA_DIALOG_CONTENT,children:(d={},d[r.HA_MORE_INFO_DIALOG_INFO]={selector:L.HA_MORE_INFO_DIALOG_INFO},d[r.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]={selector:L.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK},d[r.HA_DIALOG_MORE_INFO_SETTINGS]={selector:L.HA_DIALOG_MORE_INFO_SETTINGS},d)},N)},I)}}},h)}},D=function(t,n,_,r){return void 0===_&&(_=null),void 0===r&&(r=!1),Object.entries(n||{}).reduce((function(n,O){var s=O[0],i=O[1];if(i.selector===u&&_)return i.children?o(o({},n),D(t,i.children,_,!0)):n;var a=_?_.then((function(o){return e.asyncQuerySelector(o,(n=i.selector,r?"$ "+n:n),t);var n})):e.asyncQuerySelector(i.selector,t);return n[s]={element:a,children:D(t,i.children,a),selector:new e.AsyncSelector(a,t)},n}),{})},S=function(e,t){for(var o=0,n=Object.entries(t);o<n.length;o++){var _=n[o];if(_[0]===e)return _[1];var r=S(e,_[1].children);if(r)return r}},f=function(e,t){return Object.keys(e).reduce((function(e,n){var _=S(n,t);_.children;var r=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var _=0;for(n=Object.getOwnPropertySymbols(e);_<n.length;_++)t.indexOf(n[_])<0&&Object.prototype.propertyIsEnumerable.call(e,n[_])&&(o[n[_]]=e[n[_]])}return o}(_,["children"]);return e[n]=o({},r),e}),{})},T=function(){function e(){this.delegate=document.createDocumentFragment()}return e.prototype.addEventListener=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];(e=this.delegate).addEventListener.apply(e,t)},e.prototype.dispatchEvent=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return(e=this.delegate).dispatchEvent.apply(e,t)},e.prototype.removeEventListener=function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return(e=this.delegate).removeEventListener.apply(e,t)},e}(),G=function(e){function O(t){void 0===t&&(t={});var n=e.call(this)||this;return n._config=o(o({},R),t),n}return function(e,o){if("function"!=typeof o&&null!==o)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");function n(){this.constructor=e}t(e,o),e.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}(O,e),O.prototype._dispatchEvent=function(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t}))},O.prototype._updateDialogElements=function(e){var t,o=this;void 0===e&&(e=r.HA_MORE_INFO_DIALOG_INFO),this._dialogTree=D(this._config,p,this._haRootElements.HOME_ASSISTANT.element);var n=f(r,this._dialogTree);n.HA_DIALOG_CONTENT.element.then((function(e){o._dialogsContentObserver.disconnect(),o._dialogsContentObserver.observe(e,{childList:!0})})),this._haDialogElements=function(e,t){return[r.HA_MORE_INFO_DIALOG,r.HA_DIALOG,r.HA_DIALOG_CONTENT,t].reduce((function(t,o){return t[o]=e[o],t}),{})}(n,e);var _=((t={})[r.HA_MORE_INFO_DIALOG_INFO]=exports.HAQuerySelectorEvent.ON_MORE_INFO_DIALOG_OPEN,t[r.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]=exports.HAQuerySelectorEvent.ON_HISTORY_AND_LOGBOOK_DIALOG_OPEN,t[r.HA_DIALOG_MORE_INFO_SETTINGS]=exports.HAQuerySelectorEvent.ON_SETTINGS_DIALOG_OPEN,t);this._dispatchEvent(_[e],this._haDialogElements)},O.prototype._updateRootElements=function(){var e=this;this._homeAssistantRootTree=D(this._config,H),this._haRootElements=f(n,this._homeAssistantRootTree),this._haRootElements[n.HOME_ASSISTANT].selector.$.element.then((function(t){e._dialogsObserver.disconnect(),e._dialogsObserver.observe(t,{childList:!0})})),this._haRootElements[n.PARTIAL_PANEL_RESOLVER].element.then((function(t){e._panelResolverObserver.disconnect(),t&&e._panelResolverObserver.observe(t,{childList:!0})})),this._dispatchEvent(exports.HAQuerySelectorEvent.ON_LISTEN,this._haRootElements),this._dispatchEvent(exports.HAQuerySelectorEvent.ON_PANEL_LOAD,this._haRootElements)},O.prototype._updateLovelaceElements=function(){var e=this,t=Date.now();t-this._timestap<500||(this._timestap=t,this._homeAssistantResolverTree=D(this._config,v,this._haRootElements[n.HA_DRAWER].element),this._haResolverElements=f(_,this._homeAssistantResolverTree),this._haResolverElements[_.HA_PANEL_LOVELACE].selector.$.element.then((function(t){e._lovelaceObserver.disconnect(),t&&(e._lovelaceObserver.observe(t,{childList:!0}),e._dispatchEvent(exports.HAQuerySelectorEvent.ON_LOVELACE_PANEL_LOAD,o(o({},e._haRootElements),e._haResolverElements)))})))},O.prototype._watchDialogs=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===L.HA_MORE_INFO_DIALOG&&t._updateDialogElements()}))}))},O.prototype._watchDialogsContent=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){var o,n=((o={})[L.HA_MORE_INFO_DIALOG_INFO]=r.HA_MORE_INFO_DIALOG_INFO,o[L.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK]=r.HA_DIALOG_MORE_INFO_HISTORY_AND_LOGBOOK,o[L.HA_DIALOG_MORE_INFO_SETTINGS]=r.HA_DIALOG_MORE_INFO_SETTINGS,o);if(e.localName&&e.localName in n){var _=e.localName;t._updateDialogElements(n[_])}}))}))},O.prototype._watchDashboards=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){t._dispatchEvent(exports.HAQuerySelectorEvent.ON_PANEL_LOAD,t._haRootElements),e.localName===L.HA_PANEL_LOVELACE&&t._updateLovelaceElements()}))}))},O.prototype._watchLovelace=function(e){var t=this;e.forEach((function(e){e.addedNodes.forEach((function(e){e.localName===L.HUI_ROOT&&t._updateLovelaceElements()}))}))},O.prototype.listen=function(){this._watchDialogsBinded=this._watchDialogs.bind(this),this._watchDialogsContentBinded=this._watchDialogsContent.bind(this),this._watchDashboardsBinded=this._watchDashboards.bind(this),this._watchLovelaceBinded=this._watchLovelace.bind(this),this._dialogsObserver=new MutationObserver(this._watchDialogsBinded),this._dialogsContentObserver=new MutationObserver(this._watchDialogsContentBinded),this._panelResolverObserver=new MutationObserver(this._watchDashboardsBinded),this._lovelaceObserver=new MutationObserver(this._watchLovelaceBinded),this._updateRootElements(),this._updateLovelaceElements()},O.prototype.addEventListener=function(t,o,n){e.prototype.addEventListener.call(this,t,o,n)},O}(T);exports.HAQuerySelector=G;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "home-assistant-query-selector",
3
- "version": "2.1.5",
3
+ "version": "4.0.0",
4
4
  "description": "Easily query home-assistant DOM elements in an async way",
5
5
  "keywords": [
6
6
  "query-selector",
@@ -36,18 +36,19 @@
36
36
  "url": "git+https://github.com/elchininet/home-assistant-query-selector"
37
37
  },
38
38
  "scripts": {
39
- "clean": "rm -rf dist .nyc_output coverage",
39
+ "clean": "rm -rf dist || true",
40
+ "test:clean": "rm -rf .nyc_output coverage || true",
40
41
  "build": "yarn clean && rollup --config rollup.config.js --bundleConfigAsCjs",
41
42
  "lint": "eslint \"src/**/*.ts\"",
42
43
  "coverage:report": "nyc report --reporter=lcov --reporter=text-summary",
43
44
  "test:ts": "tsc --noEmit",
44
- "test:run": "cypress run",
45
- "test:open": "cypress open",
46
- "test:ci": "yarn demo:ha && yarn test:run && yarn coverage:report && yarn stop:ha",
47
- "test:copy": "cp test/index.js .hass/config/www/home-assistant-query-selector-tests.js",
48
- "start:ha": "docker run --rm -d -p8123:8123 -v ${PWD}/.hass/config:/config homeassistant/home-assistant:2023.12.3",
49
- "stop:ha": "docker stop $(docker ps -a -q --filter ancestor=homeassistant/home-assistant:2023.12.3) || true",
50
- "demo:ha": "yarn build && yarn test:copy && yarn start:ha",
45
+ "test:run": "playwright test",
46
+ "test:open": "playwright test --ui",
47
+ "test:ci": "yarn demo:ha && yarn start:playwright && yarn stop:ha",
48
+ "start:ha": "docker run --rm -d -p8123:8123 -v ${PWD}/.hass/config:/config homeassistant/home-assistant:2023.12.4",
49
+ "stop:ha": "docker stop $(docker ps -a -q --filter ancestor=homeassistant/home-assistant:2023.12.4) || true",
50
+ "demo:ha": "yarn test:clean && yarn build && yarn start:ha",
51
+ "start:playwright": "docker run --rm --network host --add-host host.docker.internal:host-gateway -v $(pwd):/$(pwd)/ -w $(pwd) -i mcr.microsoft.com/playwright:v1.40.0-jammy sh -c \"yarn test:run && exit\"",
51
52
  "prepare": "yarn build",
52
53
  "prepublishOnly": "yarn lint && yarn test:ts && yarn test:ci",
53
54
  "version": "git add .",
@@ -57,19 +58,22 @@
57
58
  "shadow-dom-selector": "^4.1.2"
58
59
  },
59
60
  "devDependencies": {
60
- "@cypress/code-coverage": "^3.12.15",
61
+ "@playwright/test": "^1.40.1",
61
62
  "@rollup/plugin-node-resolve": "^15.2.3",
62
- "@types/eslint": "^8.44.9",
63
- "@typescript-eslint/eslint-plugin": "^6.15.0",
64
- "@typescript-eslint/parser": "^6.15.0",
65
- "cypress": "^13.6.1",
66
- "cypress-wait-until": "^3.0.1",
63
+ "@types/eslint": "^8.56.0",
64
+ "@types/node": "^20.10.6",
65
+ "@types/sinon": "^17.0.2",
66
+ "@typescript-eslint/eslint-plugin": "^6.16.0",
67
+ "@typescript-eslint/parser": "^6.16.0",
67
68
  "eslint": "^8.56.0",
68
- "rollup": "^4.9.1",
69
+ "nyc": "^15.1.0",
70
+ "playwright-test-coverage": "^1.2.12",
71
+ "rollup": "^4.9.2",
69
72
  "rollup-plugin-istanbul": "^5.0.0",
70
73
  "rollup-plugin-serve": "^2.0.3",
71
74
  "rollup-plugin-terser": "^7.0.2",
72
75
  "rollup-plugin-ts": "^3.4.5",
76
+ "sinon": "^17.0.1",
73
77
  "typescript": "^5.3.3"
74
78
  }
75
79
  }