@libs-ui/components-device-support 0.2.356-42 → 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
|
-
#
|
|
1
|
+
# @libs-ui/components-device-support
|
|
2
2
|
|
|
3
|
-
> Directive
|
|
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
|
-
##
|
|
5
|
+
## Giới thiệu
|
|
6
6
|
|
|
7
|
-
`
|
|
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
|
|
13
|
-
- Khi
|
|
14
|
-
- Khi cần gắn click
|
|
20
|
+
- Khi cần tự động phát hiện loại thiết bị và chọn event phù hợp thay vì 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
|
-
##
|
|
25
|
+
## Cài đặt
|
|
17
26
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
##
|
|
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
|
-
###
|
|
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)="
|
|
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
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
###
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
153
|
+
### 4. Kết hợp với Signal để theo dõi trạng thái tương tác
|
|
94
154
|
|
|
95
|
-
|
|
155
|
+
```typescript
|
|
156
|
+
import { Component, signal } from '@angular/core';
|
|
157
|
+
import { LibsUiComponentsDeviceSupportHandleClickDirective } from '@libs-ui/components-device-support';
|
|
96
158
|
|
|
97
|
-
|
|
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
|
-
|
|
193
|
+
toggleStop(): void {
|
|
194
|
+
this.ignoreStop.update(v => !v);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## @Input()
|
|
100
200
|
|
|
101
|
-
|
|
|
102
|
-
|
|
103
|
-
| `[elementHandleClick]` | `HTMLElement \| Window \| Document` | host element | Element để lắng nghe event click |
|
|
104
|
-
| `[ignoreStopPropagation]` | `boolean` | `false` | Khi true
|
|
201
|
+
| Input | Type | Default | Mô 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
|
-
|
|
206
|
+
## @Output()
|
|
107
207
|
|
|
108
|
-
|
|
|
109
|
-
|
|
110
|
-
| `(outClick)` | `Event` | Emit event
|
|
208
|
+
| Output | Type | Mô 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
|
|
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
|
|
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
|
-
###
|
|
230
|
+
### Custom Element Target
|
|
127
231
|
|
|
128
|
-
|
|
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
|
-
|
|
234
|
+
### RxJS & Memory Safety
|
|
131
235
|
|
|
132
|
-
|
|
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
|
-
##
|
|
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
|
|
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;
|
|
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-
|
|
3
|
+
"version": "0.2.356-43",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": ">=18.0.0",
|
|
6
|
-
"@libs-ui/utils": "0.2.356-
|
|
6
|
+
"@libs-ui/utils": "0.2.356-43",
|
|
7
7
|
"rxjs": "~7.8.0"
|
|
8
8
|
},
|
|
9
9
|
"sideEffects": false,
|