@libs-ui/components-device-support 0.2.356-41 → 0.2.356-43

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
@@ -1,138 +1,254 @@
1
- # Device Support Handle Click
1
+ # @libs-ui/components-device-support
2
2
 
3
- > Directive hỗ trợ xử lý sự kiện click đa thiết bị (desktop/mobile/touch), tự động chọn event phù hợp (click, touchstart, pointerdown) dựa trên loại thiết bị.
3
+ > Directive xử lý sự kiện click đa thiết bị, tự động chọn event type phù hợp (click / pointerdown / touchstart) dựa trên loại thiết bị đang dùng.
4
4
 
5
- ## Version
5
+ ## Giới thiệu
6
6
 
7
- `0.2.355-14`
7
+ `LibsUiComponentsDeviceSupportHandleClickDirective` giải quyết bài toán tương thích click event trên nhiều loại thiết bị: desktop, mobile, và touch screen. Thay vì phải tự phát hiện và bind đúng event type, directive tự động sử dụng `getEventNameHandleClick` từ `@libs-ui/utils` để chọn event phù hợp. Mặc định, directive gọi `stopPropagation()` trên mỗi event để ngăn bubble lên parent, hành vi này có thể tắt qua input `[ignoreStopPropagation]`.
8
+
9
+ ## Tính năng
10
+
11
+ - ✅ Tự động phát hiện loại thiết bị và chọn event type phù hợp (`click` / `pointerdown` / `touchstart`)
12
+ - ✅ Tự động gọi `stopPropagation()` theo mặc định, có thể tắt khi cần
13
+ - ✅ Hỗ trợ gắn click listener vào element tùy chỉnh (không nhất thiết là host element)
14
+ - ✅ Tự động cleanup subscription qua `DestroyRef` + `takeUntilDestroyed`, không rò rỉ bộ nhớ
15
+ - ✅ Standalone directive, dễ import vào bất kỳ component nào
8
16
 
9
17
  ## Khi nào sử dụng
10
18
 
11
19
  - Khi cần xử lý click event hoạt động đúng trên cả desktop và mobile/touch devices
12
- - Khi cần tự động phát hiện loại thiết bị và chọn event phù hợp (click vs touchstart vs pointerdown)
13
- - Khi cần stopPropagation tự động cho click events
14
- - Khi cần gắn click handler vào một element cụ thể (window, document, hoặc element tùy chỉnh)
20
+ - Khi cần tự động phát hiện loại thiết bị và chọn event phù hợp thay hardcode `(click)`
21
+ - Khi muốn `stopPropagation` được xử lý tự động, không cần gọi thủ công trong handler
22
+ - Khi cần gắn click listener vào một element bên ngoài host (ví dụ: `window`, `document`, hoặc một `HTMLElement` tùy chọn)
23
+ - Khi xây dựng component dùng chung cần tương thích nhiều thiết bị
15
24
 
16
- ## Lưu ý quan trọng
25
+ ## Cài đặt
17
26
 
18
- - Directive tự động chọn event type: `click` cho desktop, `touchstart` cho mobile, `pointerdown` cho touch devices
19
- - Mặc định `stopPropagation` được bật - sử dụng `[ignoreStopPropagation]="true"` để tắt
20
- - Có thể gắn vào element khác thông qua `[elementHandleClick]`
21
- - Sử dụng `getEventNameHandleClick` từ `@libs-ui/utils` để xác định event name
22
- - Directive sử dụng `takeUntilDestroyed(destroyRef)` để tự động cleanup, tránh memory leak
27
+ ```bash
28
+ npm install @libs-ui/components-device-support
29
+ ```
23
30
 
24
- ## Cài đặt & Import
31
+ ## Import
25
32
 
26
33
  ```typescript
27
34
  import { LibsUiComponentsDeviceSupportHandleClickDirective } from '@libs-ui/components-device-support';
35
+
36
+ @Component({
37
+ standalone: true,
38
+ imports: [LibsUiComponentsDeviceSupportHandleClickDirective],
39
+ // ...
40
+ })
41
+ export class MyComponent {}
28
42
  ```
29
43
 
30
44
  ## Ví dụ sử dụng
31
45
 
32
- ### Basic Usage
33
-
34
- ```html
35
- <button
36
- libsUiComponentsDeviceSupportHandleClickDirective
37
- (outClick)="onButtonClick($event)"
38
- class="px-4 py-2 bg-blue-500 text-white rounded">
39
- Click me
40
- </button>
41
- ```
46
+ ### 1. Sử dụng cơ bản trên button
42
47
 
43
48
  ```typescript
44
49
  import { Component } from '@angular/core';
45
50
  import { LibsUiComponentsDeviceSupportHandleClickDirective } from '@libs-ui/components-device-support';
46
51
 
47
52
  @Component({
48
- selector: 'app-example',
53
+ selector: 'app-basic-example',
49
54
  standalone: true,
50
55
  imports: [LibsUiComponentsDeviceSupportHandleClickDirective],
51
56
  template: `
52
57
  <button
53
58
  libsUiComponentsDeviceSupportHandleClickDirective
54
- (outClick)="onButtonClick($event)">
59
+ (outClick)="handlerButtonClick($event)"
60
+ class="px-4 py-2 bg-blue-500 text-white rounded">
55
61
  Click me
56
62
  </button>
57
63
  `
58
64
  })
59
- export class ExampleComponent {
60
- onButtonClick(event: Event) {
61
- console.log('Clicked!', event.type);
65
+ export class BasicExampleComponent {
66
+ handlerButtonClick(event: Event): void {
67
+ event.stopPropagation();
68
+ console.log('Clicked! Event type:', event.type);
62
69
  }
63
70
  }
64
71
  ```
65
72
 
66
- ### Custom Element Target
73
+ ### 2. Gắn click listener vào element tùy chỉnh (không phải host)
74
+
75
+ Hữu ích khi directive host ẩn nhưng cần lắng nghe click trên một element khác trong DOM.
76
+
77
+ ```typescript
78
+ import { Component } from '@angular/core';
79
+ import { LibsUiComponentsDeviceSupportHandleClickDirective } from '@libs-ui/components-device-support';
67
80
 
68
- ```html
69
- <div #targetElement class="p-4 border rounded">
70
- Target - Click vào đây
71
- </div>
81
+ @Component({
82
+ selector: 'app-custom-target-example',
83
+ standalone: true,
84
+ imports: [LibsUiComponentsDeviceSupportHandleClickDirective],
85
+ template: `
86
+ <!-- Element sẽ được lắng nghe click -->
87
+ <div #targetEl class="p-4 border rounded cursor-pointer">
88
+ Click vào đây để trigger event
89
+ </div>
72
90
 
73
- <div
74
- libsUiComponentsDeviceSupportHandleClickDirective
75
- [elementHandleClick]="targetElement"
76
- (outClick)="onTargetClick($event)">
77
- </div>
91
+ <!-- Directive host — lắng nghe trên targetEl, không phải div này -->
92
+ <div
93
+ libsUiComponentsDeviceSupportHandleClickDirective
94
+ [elementHandleClick]="targetEl"
95
+ (outClick)="handlerTargetClick($event)"
96
+ class="hidden">
97
+ </div>
98
+ `
99
+ })
100
+ export class CustomTargetExampleComponent {
101
+ handlerTargetClick(event: Event): void {
102
+ event.stopPropagation();
103
+ console.log('Target element clicked, event type:', event.type);
104
+ }
105
+ }
78
106
  ```
79
107
 
80
- ### Disable stopPropagation
81
-
82
- ```html
83
- <div (click)="onParentClick()">
84
- <button
85
- libsUiComponentsDeviceSupportHandleClickDirective
86
- [ignoreStopPropagation]="true"
87
- (outClick)="onChildClick($event)">
88
- Click - event sẽ bubble lên parent
89
- </button>
90
- </div>
108
+ ### 3. Kiểm soát stopPropagation — cho phép event bubble lên parent
109
+
110
+ ```typescript
111
+ import { Component } from '@angular/core';
112
+ import { LibsUiComponentsDeviceSupportHandleClickDirective } from '@libs-ui/components-device-support';
113
+
114
+ @Component({
115
+ selector: 'app-propagation-example',
116
+ standalone: true,
117
+ imports: [LibsUiComponentsDeviceSupportHandleClickDirective],
118
+ template: `
119
+ <div (click)="handlerParentClick()">
120
+ <span class="text-xs text-gray-500">Parent container</span>
121
+
122
+ <!-- stopPropagation BẬT (mặc định) — parent sẽ KHÔNG nhận được click -->
123
+ <button
124
+ libsUiComponentsDeviceSupportHandleClickDirective
125
+ (outClick)="handlerChildClick($event)"
126
+ class="px-3 py-2 bg-green-500 text-white rounded">
127
+ stopPropagation: ON (parent không nhận click)
128
+ </button>
129
+
130
+ <!-- stopPropagation TẮT — event bubble lên parent bình thường -->
131
+ <button
132
+ libsUiComponentsDeviceSupportHandleClickDirective
133
+ [ignoreStopPropagation]="true"
134
+ (outClick)="handlerChildClick($event)"
135
+ class="px-3 py-2 bg-orange-500 text-white rounded">
136
+ stopPropagation: OFF (parent cũng nhận click)
137
+ </button>
138
+ </div>
139
+ `
140
+ })
141
+ export class PropagationExampleComponent {
142
+ handlerChildClick(event: Event): void {
143
+ event.stopPropagation();
144
+ console.log('Child clicked');
145
+ }
146
+
147
+ handlerParentClick(): void {
148
+ console.log('Parent clicked');
149
+ }
150
+ }
91
151
  ```
92
152
 
93
- ## API Reference
153
+ ### 4. Kết hợp với Signal để theo dõi trạng thái tương tác
94
154
 
95
- ### Selector
155
+ ```typescript
156
+ import { Component, signal } from '@angular/core';
157
+ import { LibsUiComponentsDeviceSupportHandleClickDirective } from '@libs-ui/components-device-support';
96
158
 
97
- `[libsUiComponentsDeviceSupportHandleClickDirective]`
159
+ @Component({
160
+ selector: 'app-interactive-example',
161
+ standalone: true,
162
+ imports: [LibsUiComponentsDeviceSupportHandleClickDirective],
163
+ template: `
164
+ <div>
165
+ <button
166
+ libsUiComponentsDeviceSupportHandleClickDirective
167
+ [ignoreStopPropagation]="ignoreStop()"
168
+ (outClick)="handlerClick($event)"
169
+ class="px-4 py-2 bg-blue-500 text-white rounded">
170
+ Click me
171
+ </button>
172
+
173
+ <p>Số lần click: {{ clickCount() }}</p>
174
+ <p>Loại event: {{ lastEventType() }}</p>
175
+
176
+ <button (click)="toggleStop()">
177
+ Toggle stopPropagation (hiện tại: {{ ignoreStop() ? 'OFF' : 'ON' }})
178
+ </button>
179
+ </div>
180
+ `
181
+ })
182
+ export class InteractiveExampleComponent {
183
+ protected clickCount = signal<number>(0);
184
+ protected lastEventType = signal<string>('');
185
+ protected ignoreStop = signal<boolean>(false);
186
+
187
+ handlerClick(event: Event): void {
188
+ event.stopPropagation();
189
+ this.clickCount.update(count => count + 1);
190
+ this.lastEventType.set(event.type);
191
+ }
98
192
 
99
- ### Inputs
193
+ toggleStop(): void {
194
+ this.ignoreStop.update(v => !v);
195
+ }
196
+ }
197
+ ```
198
+
199
+ ## @Input()
100
200
 
101
- | Property | Type | Default | Description |
102
- |---|---|---|---|
103
- | `[elementHandleClick]` | `HTMLElement \| Window \| Document` | host element | Element để lắng nghe event click |
104
- | `[ignoreStopPropagation]` | `boolean` | `false` | Khi true, không gọi stopPropagation() |
201
+ | Input | Type | Default | tả | Ví dụ |
202
+ |---|---|---|---|---|
203
+ | `[elementHandleClick]` | `HTMLElement \| Window \| Document \| undefined` | host element | Element để lắng nghe event click. Khi không truyền, directive sẽ lắng nghe trên chính host element | `[elementHandleClick]="targetEl"` |
204
+ | `[ignoreStopPropagation]` | `boolean` | `false` | Khi `true`, directive sẽ không gọi `stopPropagation()` — event sẽ bubble lên parent elements như bình thường | `[ignoreStopPropagation]="true"` |
105
205
 
106
- ### Outputs
206
+ ## @Output()
107
207
 
108
- | Property | Type | Description |
109
- |---|---|---|
110
- | `(outClick)` | `Event` | Emit event click khi user click/touch vào element |
208
+ | Output | Type | tả | Handler TS | Binding HTML |
209
+ |---|---|---|---|---|
210
+ | `(outClick)` | `Event` | Emit event khi user click/touch vào element. Event type phụ thuộc vào loại thiết bị (`click`, `pointerdown`, hoặc `touchstart`) | `handlerClick(event: Event): void { event.stopPropagation(); console.log(event.type); }` | `(outClick)="handlerClick($event)"` |
111
211
 
112
- ## Logic ẩn
212
+ ## Logic ẩn quan trọng
113
213
 
114
214
  ### Auto Event Detection
115
215
 
116
- Directive sử dụng `getEventNameHandleClick` từ `@libs-ui/utils` để tự động xác định event type:
216
+ Directive sử dụng hàm `getEventNameHandleClick` từ `@libs-ui/utils` để tự động chọn event type phù hợp với thiết bị:
117
217
 
118
- - **Touch device** (có `onpointerdown` và `maxTouchPoints > 0`): `pointerdown`
119
- - **Desktop**: `click`
120
- - **Mobile (non-touch)**: `touchstart`
218
+ - **Touch device** (có `onpointerdown` và `maxTouchPoints > 0`): sử dụng `pointerdown`
219
+ - **Desktop**: sử dụng `click`
220
+ - **Mobile (non-pointer touch)**: sử dụng `touchstart`
221
+
222
+ Việc này đảm bảo click handler luôn phản hồi nhanh và chính xác trên mọi nền tảng.
121
223
 
122
224
  ### Default stopPropagation
123
225
 
124
- Mặc định, directive gọi `e.stopPropagation()` trên mỗi event. Set `[ignoreStopPropagation]="true"` để tắt.
226
+ Mặc định `ignoreStopPropagation = false`, tức là directive luôn gọi `e.stopPropagation()` trước khi emit `outClick`. Điều này ngăn event bubble lên các parent elements, tránh trigger click handler cha không mong muốn.
227
+
228
+ Để cho phép event bubble (ví dụ: khi cần parent cũng nhận click), truyền `[ignoreStopPropagation]="true"`.
125
229
 
126
- ### RxJS & DestroyRef
230
+ ### Custom Element Target
127
231
 
128
- Directive sử dụng `fromEvent()` kết hợp `takeUntilDestroyed(destroyRef)` để tự động unsubscribe khi directive bị destroy.
232
+ Khi truyền `[elementHandleClick]`, directive sẽ gắn `fromEvent` lên element đó thay vì `elementRef.nativeElement`. Điều này cho phép directive host có thể là một element ẩn (`class="hidden"`), trong khi thực sự lắng nghe click trên một element hiển thị khác.
129
233
 
130
- ## Demo
234
+ ### RxJS & Memory Safety
131
235
 
132
- - Local: http://localhost:4500/device-support
236
+ Directive sử dụng `fromEvent()` từ RxJS kết hợp với `takeUntilDestroyed(destroyRef)`. Subscription tự động bị hủy khi directive bị destroy, không cần `ngOnDestroy` thủ công.
133
237
 
134
- ## Test
238
+ ## Lưu ý quan trọng
239
+
240
+ ⚠️ **Gắn vào AfterViewInit**: Directive khởi tạo `fromEvent` trong `ngAfterViewInit`, nên element target (`elementHandleClick`) phải tồn tại trong DOM trước thời điểm này. Không nên truyền element được tạo động sau `ngAfterViewInit`.
241
+
242
+ ⚠️ **stopPropagation trong handler**: Khi directive đã tự gọi `stopPropagation()` (mặc định), handler `(outClick)` nhận được event đã bị stop propagation. Tuy nhiên, nếu bạn có thêm event binding Angular `(click)` trên cùng element, Angular's event system vẫn có thể xử lý — hãy kiểm tra kỹ behavior khi dùng kết hợp.
243
+
244
+ ⚠️ **Selector dạng attribute**: Đây là attribute directive, selector là `[libsUiComponentsDeviceSupportHandleClickDirective]`. Phải dùng dạng attribute trên element, không dùng dạng tag.
245
+
246
+ ⚠️ **window / document làm target**: Khi truyền `window` hoặc `document` vào `[elementHandleClick]`, directive sẽ lắng nghe click toàn trang. Hãy đảm bảo chỉ có một instance directive làm điều này tại một thời điểm, và component chứa directive phải được destroy đúng cách khi không còn dùng nữa.
247
+
248
+ ## Demo
135
249
 
136
250
  ```bash
137
- npx nx test components-device-support
251
+ npx nx serve core-ui
138
252
  ```
253
+
254
+ Truy cập: http://localhost:4500/device-support
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-device-support.mjs","sources":["../../../../../libs-ui/components/device-support/src/device-support-handle-click.directive.ts","../../../../../libs-ui/components/device-support/src/libs-ui-components-device-support.ts"],"sourcesContent":["import { AfterViewInit, DestroyRef, Directive, ElementRef, inject, input, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { getEventNameHandleClick } from '@libs-ui/utils';\nimport { fromEvent } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[libsUiComponentsDeviceSupportHandleClickDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsDeviceSupportHandleClickDirective implements AfterViewInit {\n readonly ignoreStopPropagation = input<boolean>(false);\n\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly elementHandleClick = input<HTMLElement | Window | Document>();\n\n readonly outClick = output<Event>();\n\n ngAfterViewInit() {\n fromEvent<Event>(this.Element, getEventNameHandleClick)\n .pipe(\n tap((e: Event) => {\n if (!this.ignoreStopPropagation()) {\n e.stopPropagation();\n }\n this.outClick.emit(e);\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe();\n }\n\n private get Element(): HTMLElement {\n return this.elementHandleClick() || this.elementRef.nativeElement;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAWa,iDAAiD,CAAA;AACnD,IAAA,qBAAqB,GAAG,KAAK,CAAU,KAAK,CAAC;AAErC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEvC,kBAAkB,GAAG,KAAK,EAAmC;IAE7D,QAAQ,GAAG,MAAM,EAAS;IAEnC,eAAe,GAAA;AACb,QAAA,SAAS,CAAQ,IAAI,CAAC,OAAO,EAAE,uBAAuB;AACnD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAQ,KAAI;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE;gBACjC,CAAC,CAAC,eAAe,EAAE;YACrB;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,EAAE;IAChB;AAEA,IAAA,IAAY,OAAO,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa;IACnE;wGA1BW,iDAAiD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjD,iDAAiD,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAjD,iDAAiD,EAAA,UAAA,EAAA,CAAA;kBAL7D,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,qDAAqD;AAC/D,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACVD;;AAEG;;;;"}
1
+ {"version":3,"file":"libs-ui-components-device-support.mjs","sources":["../../../../../libs-ui/components/device-support/src/device-support-handle-click.directive.ts","../../../../../libs-ui/components/device-support/src/libs-ui-components-device-support.ts"],"sourcesContent":["import { AfterViewInit, DestroyRef, Directive, ElementRef, inject, input, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { getEventNameHandleClick } from '@libs-ui/utils';\nimport { fromEvent } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[libsUiComponentsDeviceSupportHandleClickDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsDeviceSupportHandleClickDirective implements AfterViewInit {\n readonly ignoreStopPropagation = input<boolean>(false);\n\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly elementHandleClick = input<HTMLElement | Window | Document>();\n\n readonly outClick = output<Event>();\n\n ngAfterViewInit() {\n fromEvent<Event>(this.Element, getEventNameHandleClick)\n .pipe(\n tap((e: Event) => {\n if (!this.ignoreStopPropagation()) {\n e.stopPropagation();\n }\n this.outClick.emit(e);\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe();\n }\n\n private get Element(): HTMLElement {\n return this.elementHandleClick() || this.elementRef.nativeElement;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAWa,iDAAiD,CAAA;AACnD,IAAA,qBAAqB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEtC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAExC,kBAAkB,GAAG,KAAK,EAAmC,CAAC;IAE9D,QAAQ,GAAG,MAAM,EAAS,CAAC;IAEpC,eAAe,GAAA;AACb,QAAA,SAAS,CAAQ,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC;AACpD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAQ,KAAI;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE;gBACjC,CAAC,CAAC,eAAe,EAAE,CAAC;aACrB;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACvB,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC;AACA,aAAA,SAAS,EAAE,CAAC;KAChB;AAED,IAAA,IAAY,OAAO,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;KACnE;wGA1BU,iDAAiD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAjD,iDAAiD,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAjD,iDAAiD,EAAA,UAAA,EAAA,CAAA;kBAL7D,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,qDAAqD;AAC/D,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;;;ACVD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@libs-ui/components-device-support",
3
- "version": "0.2.356-41",
3
+ "version": "0.2.356-43",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
- "@libs-ui/utils": "0.2.356-41",
6
+ "@libs-ui/utils": "0.2.356-43",
7
7
  "rxjs": "~7.8.0"
8
8
  },
9
9
  "sideEffects": false,