@ng-vagabond-lab/ng-dsv 0.2.55 → 0.2.57
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/fesm2022/ng-vagabond-lab-ng-dsv-base.mjs +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-base.mjs.map +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-platform.mjs +49 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-platform.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ng-vagabond-lab-ng-dsv-platform.d.ts +15 -1
|
@@ -127,7 +127,7 @@ class BaseMainContainer {
|
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
effect(() => {
|
|
130
|
-
if (this.
|
|
130
|
+
if (this.authService.isPlatformBrowser() && window.visualViewport) {
|
|
131
131
|
this.resizeListener = () => {
|
|
132
132
|
const vh = window.visualViewport?.height;
|
|
133
133
|
document.documentElement.style.setProperty('--app-height', `${vh}px`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-base.mjs","sources":["../../../projects/ng-dsv/base/service/base/base.service.ts","../../../projects/ng-dsv/base/service/base/base-api.service.ts","../../../projects/ng-dsv/base/service/seo/seo.service.ts","../../../projects/ng-dsv/base/container/base.container.ts","../../../projects/ng-dsv/base/service/analytics/analytics.service.ts","../../../projects/ng-dsv/base/container/main/base-main.container.ts","../../../projects/ng-dsv/base/container/route/base-route.container.ts","../../../projects/ng-dsv/base/container/search/base-search.container.ts","../../../projects/ng-dsv/base/utils/base.utils.ts","../../../projects/ng-dsv/base/ng-vagabond-lab-ng-dsv-base.ts"],"sourcesContent":["import { Directive, inject, signal, TransferState } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { I18nService } from '@ng-vagabond-lab/ng-dsv/i18n';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\n\n@Directive()\nexport abstract class BaseService {\n readonly toastService = inject(ToastService);\n readonly transferState = inject(TransferState);\n readonly platformService = inject(PlatformService);\n readonly i18nService = inject(I18nService);\n readonly translateService = this.i18nService.translateService;\n\n readonly loaded = signal<boolean>(true);\n\n isPlatformBrowser(): boolean {\n return this.platformService.isPlatformBrowser();\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { ApiService } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseService } from './base.service';\n\n@Directive()\nexport abstract class BaseApiService extends BaseService {\n readonly apiService = inject(ApiService);\n}\n","import { inject, Injectable, makeStateKey } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { BaseApiService } from '../base/base-api.service';\n\n@Injectable({ providedIn: 'root' })\nexport class SeoService extends BaseApiService {\n readonly environmentService = inject(EnvironmentService);\n readonly title = inject(Title);\n readonly meta = inject(Meta);\n\n setMeta(title: string, description: string, image?: string): void {\n const newTitle = this.environmentService.config()?.APP_NAME + ' - ' + title;\n this.title.setTitle(newTitle);\n this.transferState.set(makeStateKey<string>('title'), newTitle);\n this.meta.updateTag({ name: 'description', content: description });\n image && this.meta.updateTag({ property: 'og:image', content: image });\n }\n}\n","import { computed, Directive, effect, inject, signal } from '@angular/core';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { SeoService } from '../service/seo/seo.service';\n\n@Directive()\nexport abstract class BaseContainer {\n readonly authService = inject(AuthService);\n readonly seoService = inject(SeoService);\n readonly routerService = inject(RouterService);\n\n protected requiredRole = signal<string>('');\n\n readonly hasAccess = computed<boolean>(() => {\n const role = this.requiredRole();\n return !role || this.authService.hasRole(role);\n });\n\n constructor() {\n effect(() => {\n if (!this.hasAccess()) {\n this.routerService.router.navigate(['/']);\n }\n });\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, Service } from '@angular/core';\n\n@Service()\nexport class AnalyticsService {\n readonly platformId = inject(PLATFORM_ID);\n\n init(analyticsId?: string): void {\n if (!isPlatformBrowser(this.platformId) || !analyticsId) {\n return;\n }\n\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtag/js?id=${analyticsId}`;\n document.head.appendChild(script);\n\n const inlineScript = document.createElement('script');\n inlineScript.innerHTML = `\n window.dataLayer = window.dataLayer || [];\n function gtag(){ dataLayer.push(arguments); }\n gtag('js', new Date());\n gtag('config', '${analyticsId}');\n `;\n document.head.appendChild(inlineScript);\n }\n}\n","import { Directive, effect, inject, signal } from '@angular/core';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { AnalyticsService } from '../../service/analytics/analytics.service';\n\n@Directive()\nexport abstract class BaseMainContainer {\n readonly authService = inject(AuthService);\n readonly routerService = inject(RouterService);\n readonly environmentService = inject(EnvironmentService);\n readonly analyticsService = inject(AnalyticsService);\n\n readonly initRefreshToken = signal<boolean>(false);\n\n private resizeListener?: () => void;\n\n constructor() {\n this.analyticsService.init(this.environmentService.config()?.ANALYTICS_ID);\n effect(() => {\n if (this.authService.isPlatformBrowser() && !this.initRefreshToken()) {\n this.initRefreshToken.set(true);\n this.authService.refreshToken();\n }\n });\n effect(() => {\n if (this.environmentService.platformService.isPlatformBrowser() && window.visualViewport) {\n this.resizeListener = () => {\n const vh = window.visualViewport?.height;\n document.documentElement.style.setProperty('--app-height', `${vh}px`);\n };\n\n window.visualViewport.addEventListener('resize', this.resizeListener);\n this.resizeListener();\n }\n });\n }\n\n ngOnDestroy() {\n if (this.resizeListener && window.visualViewport) {\n window.visualViewport.removeEventListener('resize', this.resizeListener);\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseContainer } from '../base.container';\n\n@Directive()\nexport abstract class BaseRouteContainer extends BaseContainer {\n readonly activatedRoute = inject<ActivatedRoute>(ActivatedRoute);\n\n readonly routeParams = toSignal(this.activatedRoute.params);\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\nimport { SCROLL_CLASS, scrollToTop } from '@ng-vagabond-lab/ng-dsv/ds/scroll';\nimport { BaseSearchService } from '../../service';\nimport { BaseContainer } from '../base.container';\n\n@Directive()\nexport abstract class BaseSearchContainer<\n T extends BaseSearchService<U>,\n U extends ApiDto,\n> extends BaseContainer {\n readonly element = inject(ElementRef);\n\n readonly service: T | undefined = undefined;\n\n constructor(searchService: T) {\n super();\n this.service = searchService;\n this.service.isLoading.set(true);\n effect(() => {\n if (\n this.service?.datas().length === 0 &&\n this.service.search() === '' &&\n !this.service.stopFetch() &&\n this.authService.canFetch(this.service.ssr())\n ) {\n this.doFetch();\n }\n });\n effect(() => {\n if (this.service?.datas()?.length! > 0) {\n this.service?.isLoading.set(false);\n }\n });\n }\n\n doFetch(search: string | undefined = this.service?.search()): void {\n this.service?.fetchByPage(search as string, this.service?.page());\n }\n\n doSearch(search: string): void {\n this.service?.page.set(1);\n scrollToTop(this.element, SCROLL_CLASS);\n this.doFetch(search);\n }\n}\n","import { OutputEmitterRef } from '@angular/core';\n\nexport const isCallback = <T>(callback: OutputEmitterRef<T>): boolean => {\n const listeners = callback['listeners' as keyof OutputEmitterRef<T>];\n return listeners?.length > 0;\n};\n\nexport const generateArray = (length: number = 20): number[] => Array.from({ length }, (_, i) => i);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-base.mjs","sources":["../../../projects/ng-dsv/base/service/base/base.service.ts","../../../projects/ng-dsv/base/service/base/base-api.service.ts","../../../projects/ng-dsv/base/service/seo/seo.service.ts","../../../projects/ng-dsv/base/container/base.container.ts","../../../projects/ng-dsv/base/service/analytics/analytics.service.ts","../../../projects/ng-dsv/base/container/main/base-main.container.ts","../../../projects/ng-dsv/base/container/route/base-route.container.ts","../../../projects/ng-dsv/base/container/search/base-search.container.ts","../../../projects/ng-dsv/base/utils/base.utils.ts","../../../projects/ng-dsv/base/ng-vagabond-lab-ng-dsv-base.ts"],"sourcesContent":["import { Directive, inject, signal, TransferState } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { I18nService } from '@ng-vagabond-lab/ng-dsv/i18n';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\n\n@Directive()\nexport abstract class BaseService {\n readonly toastService = inject(ToastService);\n readonly transferState = inject(TransferState);\n readonly platformService = inject(PlatformService);\n readonly i18nService = inject(I18nService);\n readonly translateService = this.i18nService.translateService;\n\n readonly loaded = signal<boolean>(true);\n\n isPlatformBrowser(): boolean {\n return this.platformService.isPlatformBrowser();\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { ApiService } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseService } from './base.service';\n\n@Directive()\nexport abstract class BaseApiService extends BaseService {\n readonly apiService = inject(ApiService);\n}\n","import { inject, Injectable, makeStateKey } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { BaseApiService } from '../base/base-api.service';\n\n@Injectable({ providedIn: 'root' })\nexport class SeoService extends BaseApiService {\n readonly environmentService = inject(EnvironmentService);\n readonly title = inject(Title);\n readonly meta = inject(Meta);\n\n setMeta(title: string, description: string, image?: string): void {\n const newTitle = this.environmentService.config()?.APP_NAME + ' - ' + title;\n this.title.setTitle(newTitle);\n this.transferState.set(makeStateKey<string>('title'), newTitle);\n this.meta.updateTag({ name: 'description', content: description });\n image && this.meta.updateTag({ property: 'og:image', content: image });\n }\n}\n","import { computed, Directive, effect, inject, signal } from '@angular/core';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { SeoService } from '../service/seo/seo.service';\n\n@Directive()\nexport abstract class BaseContainer {\n readonly authService = inject(AuthService);\n readonly seoService = inject(SeoService);\n readonly routerService = inject(RouterService);\n\n protected requiredRole = signal<string>('');\n\n readonly hasAccess = computed<boolean>(() => {\n const role = this.requiredRole();\n return !role || this.authService.hasRole(role);\n });\n\n constructor() {\n effect(() => {\n if (!this.hasAccess()) {\n this.routerService.router.navigate(['/']);\n }\n });\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, Service } from '@angular/core';\n\n@Service()\nexport class AnalyticsService {\n readonly platformId = inject(PLATFORM_ID);\n\n init(analyticsId?: string): void {\n if (!isPlatformBrowser(this.platformId) || !analyticsId) {\n return;\n }\n\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtag/js?id=${analyticsId}`;\n document.head.appendChild(script);\n\n const inlineScript = document.createElement('script');\n inlineScript.innerHTML = `\n window.dataLayer = window.dataLayer || [];\n function gtag(){ dataLayer.push(arguments); }\n gtag('js', new Date());\n gtag('config', '${analyticsId}');\n `;\n document.head.appendChild(inlineScript);\n }\n}\n","import { Directive, effect, inject, signal } from '@angular/core';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { AnalyticsService } from '../../service/analytics/analytics.service';\n\n@Directive()\nexport abstract class BaseMainContainer {\n readonly authService = inject(AuthService);\n readonly routerService = inject(RouterService);\n readonly environmentService = inject(EnvironmentService);\n readonly analyticsService = inject(AnalyticsService);\n\n readonly initRefreshToken = signal<boolean>(false);\n\n private resizeListener?: () => void;\n\n constructor() {\n this.analyticsService.init(this.environmentService.config()?.ANALYTICS_ID);\n effect(() => {\n if (this.authService.isPlatformBrowser() && !this.initRefreshToken()) {\n this.initRefreshToken.set(true);\n this.authService.refreshToken();\n }\n });\n effect(() => {\n if (this.authService.isPlatformBrowser() && window.visualViewport) {\n this.resizeListener = () => {\n const vh = window.visualViewport?.height;\n document.documentElement.style.setProperty('--app-height', `${vh}px`);\n };\n\n window.visualViewport.addEventListener('resize', this.resizeListener);\n this.resizeListener();\n }\n });\n }\n\n ngOnDestroy() {\n if (this.resizeListener && window.visualViewport) {\n window.visualViewport.removeEventListener('resize', this.resizeListener);\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseContainer } from '../base.container';\n\n@Directive()\nexport abstract class BaseRouteContainer extends BaseContainer {\n readonly activatedRoute = inject<ActivatedRoute>(ActivatedRoute);\n\n readonly routeParams = toSignal(this.activatedRoute.params);\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\nimport { SCROLL_CLASS, scrollToTop } from '@ng-vagabond-lab/ng-dsv/ds/scroll';\nimport { BaseSearchService } from '../../service';\nimport { BaseContainer } from '../base.container';\n\n@Directive()\nexport abstract class BaseSearchContainer<\n T extends BaseSearchService<U>,\n U extends ApiDto,\n> extends BaseContainer {\n readonly element = inject(ElementRef);\n\n readonly service: T | undefined = undefined;\n\n constructor(searchService: T) {\n super();\n this.service = searchService;\n this.service.isLoading.set(true);\n effect(() => {\n if (\n this.service?.datas().length === 0 &&\n this.service.search() === '' &&\n !this.service.stopFetch() &&\n this.authService.canFetch(this.service.ssr())\n ) {\n this.doFetch();\n }\n });\n effect(() => {\n if (this.service?.datas()?.length! > 0) {\n this.service?.isLoading.set(false);\n }\n });\n }\n\n doFetch(search: string | undefined = this.service?.search()): void {\n this.service?.fetchByPage(search as string, this.service?.page());\n }\n\n doSearch(search: string): void {\n this.service?.page.set(1);\n scrollToTop(this.element, SCROLL_CLASS);\n this.doFetch(search);\n }\n}\n","import { OutputEmitterRef } from '@angular/core';\n\nexport const isCallback = <T>(callback: OutputEmitterRef<T>): boolean => {\n const listeners = callback['listeners' as keyof OutputEmitterRef<T>];\n return listeners?.length > 0;\n};\n\nexport const generateArray = (length: number = 20): number[] => Array.from({ length }, (_, i) => i);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,55 @@
|
|
|
1
|
-
import { isPlatformBrowser } from '@angular/common';
|
|
2
1
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject, PLATFORM_ID, signal, computed, Injectable } from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, Renderer2, output, Directive, PLATFORM_ID, signal, computed, Injectable } from '@angular/core';
|
|
3
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
4
4
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { fromEvent, startWith, map } from 'rxjs';
|
|
6
6
|
|
|
7
|
+
class PlatformSwipeDirective {
|
|
8
|
+
el = inject(ElementRef);
|
|
9
|
+
renderer = inject(Renderer2);
|
|
10
|
+
swipeLeft = output();
|
|
11
|
+
swipeRight = output();
|
|
12
|
+
startX = 0;
|
|
13
|
+
startY = 0;
|
|
14
|
+
threshold = 40;
|
|
15
|
+
maxVerticalDelta = 50;
|
|
16
|
+
constructor() {
|
|
17
|
+
this.renderer.listen(this.el.nativeElement, 'touchstart', (e) => {
|
|
18
|
+
const touch = e.touches?.[0] ?? e.changedTouches?.[0];
|
|
19
|
+
if (touch) {
|
|
20
|
+
this.startX = touch.clientX;
|
|
21
|
+
this.startY = touch.clientY;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
this.renderer.listen(this.el.nativeElement, 'touchend', (e) => {
|
|
25
|
+
const touch = e.changedTouches?.[0] ?? e.touches?.[0];
|
|
26
|
+
if (!touch)
|
|
27
|
+
return;
|
|
28
|
+
const endX = touch.clientX;
|
|
29
|
+
const endY = touch.clientY;
|
|
30
|
+
const deltaX = endX - this.startX;
|
|
31
|
+
const deltaY = Math.abs(endY - this.startY);
|
|
32
|
+
if (deltaY <= this.maxVerticalDelta) {
|
|
33
|
+
if (deltaX <= -this.threshold) {
|
|
34
|
+
this.swipeLeft.emit();
|
|
35
|
+
}
|
|
36
|
+
else if (deltaX >= this.threshold) {
|
|
37
|
+
this.swipeRight.emit();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: PlatformSwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
43
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: PlatformSwipeDirective, isStandalone: true, selector: "[appSwipe]", outputs: { swipeLeft: "swipeLeft", swipeRight: "swipeRight" }, ngImport: i0 });
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: PlatformSwipeDirective, decorators: [{
|
|
46
|
+
type: Directive,
|
|
47
|
+
args: [{
|
|
48
|
+
selector: '[appSwipe]',
|
|
49
|
+
standalone: true,
|
|
50
|
+
}]
|
|
51
|
+
}], ctorParameters: () => [], propDecorators: { swipeLeft: [{ type: i0.Output, args: ["swipeLeft"] }], swipeRight: [{ type: i0.Output, args: ["swipeRight"] }] } });
|
|
52
|
+
|
|
7
53
|
class PlatformService {
|
|
8
54
|
platformId = inject(PLATFORM_ID);
|
|
9
55
|
width = this.isPlatformBrowser()
|
|
@@ -32,5 +78,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
32
78
|
* Generated bundle index. Do not edit.
|
|
33
79
|
*/
|
|
34
80
|
|
|
35
|
-
export { PlatformService };
|
|
81
|
+
export { PlatformService, PlatformSwipeDirective };
|
|
36
82
|
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-platform.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-platform.mjs","sources":["../../../projects/ng-dsv/platform/service/platform.service.ts","../../../projects/ng-dsv/platform/ng-vagabond-lab-ng-dsv-platform.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport { computed, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, startWith } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PlatformService {\n readonly platformId = inject(PLATFORM_ID);\n\n width = this.isPlatformBrowser()\n ? toSignal(\n fromEvent(globalThis, 'resize').pipe(\n startWith(null),\n map(() => globalThis.innerWidth),\n ),\n { initialValue: globalThis.innerWidth },\n )\n : signal(1024);\n\n isMobile = computed(() => this.width() < 768);\n isTablet = computed(() => this.width() >= 768 && this.width() < 1024);\n isDesktop = computed(() => this.width() >= 1024);\n\n isPlatformBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-platform.mjs","sources":["../../../projects/ng-dsv/platform/directive/platform.swipe.directive.ts","../../../projects/ng-dsv/platform/service/platform.service.ts","../../../projects/ng-dsv/platform/ng-vagabond-lab-ng-dsv-platform.ts"],"sourcesContent":["import { Directive, ElementRef, inject, output, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[appSwipe]',\n standalone: true,\n})\nexport class PlatformSwipeDirective {\n private el = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n readonly swipeLeft = output<void>();\n readonly swipeRight = output<void>();\n\n private startX = 0;\n private startY = 0;\n\n private readonly threshold = 40;\n private readonly maxVerticalDelta = 50;\n\n constructor() {\n this.renderer.listen(this.el.nativeElement, 'touchstart', (e: TouchEvent) => {\n const touch = e.touches?.[0] ?? e.changedTouches?.[0];\n if (touch) {\n this.startX = touch.clientX;\n this.startY = touch.clientY;\n }\n });\n\n this.renderer.listen(this.el.nativeElement, 'touchend', (e: TouchEvent) => {\n const touch = e.changedTouches?.[0] ?? e.touches?.[0];\n if (!touch) return;\n\n const endX = touch.clientX;\n const endY = touch.clientY;\n\n const deltaX = endX - this.startX;\n const deltaY = Math.abs(endY - this.startY);\n\n if (deltaY <= this.maxVerticalDelta) {\n if (deltaX <= -this.threshold) {\n this.swipeLeft.emit();\n } else if (deltaX >= this.threshold) {\n this.swipeRight.emit();\n }\n }\n });\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { computed, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, startWith } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PlatformService {\n readonly platformId = inject(PLATFORM_ID);\n\n width = this.isPlatformBrowser()\n ? toSignal(\n fromEvent(globalThis, 'resize').pipe(\n startWith(null),\n map(() => globalThis.innerWidth),\n ),\n { initialValue: globalThis.innerWidth },\n )\n : signal(1024);\n\n isMobile = computed(() => this.width() < 768);\n isTablet = computed(() => this.width() >= 768 && this.width() < 1024);\n isDesktop = computed(() => this.width() >= 1024);\n\n isPlatformBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
|
|
3
|
+
declare class PlatformSwipeDirective {
|
|
4
|
+
private el;
|
|
5
|
+
private renderer;
|
|
6
|
+
readonly swipeLeft: _angular_core.OutputEmitterRef<void>;
|
|
7
|
+
readonly swipeRight: _angular_core.OutputEmitterRef<void>;
|
|
8
|
+
private startX;
|
|
9
|
+
private startY;
|
|
10
|
+
private readonly threshold;
|
|
11
|
+
private readonly maxVerticalDelta;
|
|
12
|
+
constructor();
|
|
13
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PlatformSwipeDirective, never>;
|
|
14
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PlatformSwipeDirective, "[appSwipe]", never, {}, { "swipeLeft": "swipeLeft"; "swipeRight": "swipeRight"; }, never, never, true, never>;
|
|
15
|
+
}
|
|
16
|
+
|
|
3
17
|
declare class PlatformService {
|
|
4
18
|
readonly platformId: Object;
|
|
5
19
|
width: _angular_core.Signal<number>;
|
|
@@ -11,4 +25,4 @@ declare class PlatformService {
|
|
|
11
25
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
12
26
|
}
|
|
13
27
|
|
|
14
|
-
export { PlatformService };
|
|
28
|
+
export { PlatformService, PlatformSwipeDirective };
|