@ng-vagabond-lab/ng-dsv 0.2.11 → 0.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/fesm2022/ng-vagabond-lab-ng-dsv-api.mjs +16 -11
  2. package/fesm2022/ng-vagabond-lab-ng-dsv-api.mjs.map +1 -1
  3. package/fesm2022/ng-vagabond-lab-ng-dsv-base-service.mjs +32 -22
  4. package/fesm2022/ng-vagabond-lab-ng-dsv-base-service.mjs.map +1 -1
  5. package/fesm2022/ng-vagabond-lab-ng-dsv-base.mjs +29 -25
  6. package/fesm2022/ng-vagabond-lab-ng-dsv-base.mjs.map +1 -1
  7. package/fesm2022/ng-vagabond-lab-ng-dsv-date.mjs +3 -3
  8. package/fesm2022/ng-vagabond-lab-ng-dsv-date.mjs.map +1 -1
  9. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-accordion.mjs +15 -9
  10. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-accordion.mjs.map +1 -1
  11. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-avatar.mjs +11 -7
  12. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-avatar.mjs.map +1 -1
  13. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-button.mjs +26 -16
  14. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-button.mjs.map +1 -1
  15. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-card.mjs +16 -14
  16. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-card.mjs.map +1 -1
  17. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-chip.mjs +7 -5
  18. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-chip.mjs.map +1 -1
  19. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-color.mjs +22 -14
  20. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-color.mjs.map +1 -1
  21. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-container.mjs +7 -5
  22. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-container.mjs.map +1 -1
  23. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-file.mjs +35 -22
  24. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-file.mjs.map +1 -1
  25. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-form-reactive.mjs +70 -47
  26. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-form-reactive.mjs.map +1 -1
  27. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-form-signal.mjs +81 -54
  28. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-form-signal.mjs.map +1 -1
  29. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-header.mjs +11 -7
  30. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-header.mjs.map +1 -1
  31. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-img.mjs +19 -11
  32. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-img.mjs.map +1 -1
  33. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-item.mjs +15 -9
  34. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-item.mjs.map +1 -1
  35. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-linear-progress.mjs +9 -6
  36. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-linear-progress.mjs.map +1 -1
  37. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-link-pipe.mjs +6 -6
  38. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-link-pipe.mjs.map +1 -1
  39. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-list.mjs +22 -17
  40. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-list.mjs.map +1 -1
  41. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-menu.mjs +24 -18
  42. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-menu.mjs.map +1 -1
  43. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-modal.mjs +46 -29
  44. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-modal.mjs.map +1 -1
  45. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-paginate.mjs +7 -5
  46. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-paginate.mjs.map +1 -1
  47. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-scroll.mjs +33 -21
  48. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-scroll.mjs.map +1 -1
  49. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-skeleton.mjs +3 -3
  50. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-skeleton.mjs.map +1 -1
  51. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-tab.mjs +14 -10
  52. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-tab.mjs.map +1 -1
  53. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-table.mjs +15 -9
  54. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-table.mjs.map +1 -1
  55. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-theme.mjs +11 -10
  56. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-theme.mjs.map +1 -1
  57. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-toast.mjs +16 -11
  58. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-toast.mjs.map +1 -1
  59. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-tooltip.mjs +15 -9
  60. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-tooltip.mjs.map +1 -1
  61. package/fesm2022/ng-vagabond-lab-ng-dsv-environment.mjs +7 -5
  62. package/fesm2022/ng-vagabond-lab-ng-dsv-environment.mjs.map +1 -1
  63. package/fesm2022/ng-vagabond-lab-ng-dsv-i18n.mjs +10 -6
  64. package/fesm2022/ng-vagabond-lab-ng-dsv-i18n.mjs.map +1 -1
  65. package/fesm2022/ng-vagabond-lab-ng-dsv-module-admin.mjs +51 -33
  66. package/fesm2022/ng-vagabond-lab-ng-dsv-module-admin.mjs.map +1 -1
  67. package/fesm2022/ng-vagabond-lab-ng-dsv-module-auth.mjs +21 -15
  68. package/fesm2022/ng-vagabond-lab-ng-dsv-module-auth.mjs.map +1 -1
  69. package/fesm2022/ng-vagabond-lab-ng-dsv-module-contact.mjs +5 -4
  70. package/fesm2022/ng-vagabond-lab-ng-dsv-module-contact.mjs.map +1 -1
  71. package/fesm2022/ng-vagabond-lab-ng-dsv-platform.mjs +9 -6
  72. package/fesm2022/ng-vagabond-lab-ng-dsv-platform.mjs.map +1 -1
  73. package/fesm2022/ng-vagabond-lab-ng-dsv-router.mjs +13 -11
  74. package/fesm2022/ng-vagabond-lab-ng-dsv-router.mjs.map +1 -1
  75. package/fesm2022/ng-vagabond-lab-ng-dsv-storage.mjs +15 -9
  76. package/fesm2022/ng-vagabond-lab-ng-dsv-storage.mjs.map +1 -1
  77. package/fesm2022/ng-vagabond-lab-ng-dsv-template.mjs +38 -28
  78. package/fesm2022/ng-vagabond-lab-ng-dsv-template.mjs.map +1 -1
  79. package/package.json +1 -1
  80. package/types/ng-vagabond-lab-ng-dsv-ds-form-signal.d.ts +1 -1
  81. package/types/ng-vagabond-lab-ng-dsv-i18n.d.ts +1 -0
@@ -8,18 +8,20 @@ import { filter, map } from 'rxjs';
8
8
  import { BaseApiService } from '@ng-vagabond-lab/ng-dsv/base/service';
9
9
 
10
10
  class ButtonScrollTopComponent {
11
- scroll = input(0, ...(ngDevMode ? [{ debugName: "scroll" }] : /* istanbul ignore next */ []));
11
+ scroll = input(0, /* @ts-ignore */
12
+ ...(ngDevMode ? [{ debugName: "scroll" }] : /* istanbul ignore next */ []));
12
13
  callback = output();
13
- show = signal(false, ...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
14
+ show = signal(false, /* @ts-ignore */
15
+ ...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
14
16
  constructor() {
15
17
  effect(() => {
16
18
  this.show.set(this.scroll() > 400);
17
19
  });
18
20
  }
19
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ButtonScrollTopComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: ButtonScrollTopComponent, isStandalone: true, selector: "dsv-scroll-top-button", inputs: { scroll: { classPropertyName: "scroll", publicName: "scroll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { callback: "callback" }, ngImport: i0, template: "@if (show()) {\n <dsv-button\n icon=\"ri-arrow-up-line\"\n color=\"default\"\n (callback)=\"callback.emit()\"\n ></dsv-button>\n}\n", styles: [":host{position:absolute;bottom:10px;right:10px}:host dsv-button{--button-border-radius: 50px !important}\n"], dependencies: [{ kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }] });
21
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ButtonScrollTopComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: ButtonScrollTopComponent, isStandalone: true, selector: "dsv-scroll-top-button", inputs: { scroll: { classPropertyName: "scroll", publicName: "scroll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { callback: "callback" }, ngImport: i0, template: "@if (show()) {\n <dsv-button\n icon=\"ri-arrow-up-line\"\n color=\"default\"\n (callback)=\"callback.emit()\"\n ></dsv-button>\n}\n", styles: [":host{position:absolute;bottom:10px;right:10px}:host dsv-button{--button-border-radius: 50px !important}\n"], dependencies: [{ kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }] });
21
23
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ButtonScrollTopComponent, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ButtonScrollTopComponent, decorators: [{
23
25
  type: Component,
24
26
  args: [{ selector: 'dsv-scroll-top-button', imports: [DsvButtonComponent], template: "@if (show()) {\n <dsv-button\n icon=\"ri-arrow-up-line\"\n color=\"default\"\n (callback)=\"callback.emit()\"\n ></dsv-button>\n}\n", styles: [":host{position:absolute;bottom:10px;right:10px}:host dsv-button{--button-border-radius: 50px !important}\n"] }]
25
27
  }], ctorParameters: () => [], propDecorators: { scroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "scroll", required: false }] }], callback: [{ type: i0.Output, args: ["callback"] }] } });
@@ -28,16 +30,25 @@ class DsvScrollInfiniteContainer {
28
30
  scrollService = inject(ScrollService);
29
31
  elementRef = inject(ElementRef);
30
32
  routerService = inject(RouterService);
31
- bottomOffset = input(100, ...(ngDevMode ? [{ debugName: "bottomOffset" }] : /* istanbul ignore next */ []));
32
- loading = input(null, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
33
- id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
33
+ bottomOffset = input(100, /* @ts-ignore */
34
+ ...(ngDevMode ? [{ debugName: "bottomOffset" }] : /* istanbul ignore next */ []));
35
+ loading = input(null, /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
37
+ id = input(/* @ts-ignore */
38
+ ...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
34
39
  callback = output();
35
- uuid = signal('', ...(ngDevMode ? [{ debugName: "uuid" }] : /* istanbul ignore next */ []));
36
- top = signal(0, ...(ngDevMode ? [{ debugName: "top" }] : /* istanbul ignore next */ []));
37
- skeletonCount = signal(0, ...(ngDevMode ? [{ debugName: "skeletonCount" }] : /* istanbul ignore next */ []));
38
- $loading = signal(false, ...(ngDevMode ? [{ debugName: "$loading" }] : /* istanbul ignore next */ []));
39
- skeletonTemplate = contentChild('skeleton', ...(ngDevMode ? [{ debugName: "skeletonTemplate" }] : /* istanbul ignore next */ []));
40
- skeletonArray = signal([], ...(ngDevMode ? [{ debugName: "skeletonArray" }] : /* istanbul ignore next */ []));
40
+ uuid = signal('', /* @ts-ignore */
41
+ ...(ngDevMode ? [{ debugName: "uuid" }] : /* istanbul ignore next */ []));
42
+ top = signal(0, /* @ts-ignore */
43
+ ...(ngDevMode ? [{ debugName: "top" }] : /* istanbul ignore next */ []));
44
+ skeletonCount = signal(0, /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "skeletonCount" }] : /* istanbul ignore next */ []));
46
+ $loading = signal(false, /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "$loading" }] : /* istanbul ignore next */ []));
48
+ skeletonTemplate = contentChild('skeleton', /* @ts-ignore */
49
+ ...(ngDevMode ? [{ debugName: "skeletonTemplate" }] : /* istanbul ignore next */ []));
50
+ skeletonArray = signal([], /* @ts-ignore */
51
+ ...(ngDevMode ? [{ debugName: "skeletonArray" }] : /* istanbul ignore next */ []));
41
52
  constructor() {
42
53
  this.routerService.router.events.subscribe((event) => {
43
54
  if (event instanceof NavigationStart) {
@@ -109,10 +120,10 @@ class DsvScrollInfiniteContainer {
109
120
  this.resetLoading();
110
121
  }
111
122
  }
112
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvScrollInfiniteContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
113
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: DsvScrollInfiniteContainer, isStandalone: true, selector: "dsv-scroll-infinite", inputs: { bottomOffset: { classPropertyName: "bottomOffset", publicName: "bottomOffset", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { callback: "callback" }, host: { listeners: { "scroll": "doScroll()" }, properties: { "id": "id() ?? uuid()" }, classAttribute: "scroll" }, queries: [{ propertyName: "skeletonTemplate", first: true, predicate: ["skeleton"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content></ng-content>\n\n@if (loading()) {\n <ng-container>\n @for (_ of skeletonArray(); track _) {\n <ng-container *ngTemplateOutlet=\"skeletonTemplate()\"></ng-container>\n }\n </ng-container>\n}\n\n<dsv-scroll-top-button [scroll]=\"top()\" (callback)=\"scrollToTop()\" />\n", styles: [":host{display:flex;overflow:auto;scrollbar-width:thin;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: ButtonScrollTopComponent, selector: "dsv-scroll-top-button", inputs: ["scroll"], outputs: ["callback"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
123
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvScrollInfiniteContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
124
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: DsvScrollInfiniteContainer, isStandalone: true, selector: "dsv-scroll-infinite", inputs: { bottomOffset: { classPropertyName: "bottomOffset", publicName: "bottomOffset", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { callback: "callback" }, host: { listeners: { "scroll": "doScroll()" }, properties: { "id": "id() ?? uuid()" }, classAttribute: "scroll" }, queries: [{ propertyName: "skeletonTemplate", first: true, predicate: ["skeleton"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content></ng-content>\n\n@if (loading()) {\n <ng-container>\n @for (_ of skeletonArray(); track _) {\n <ng-container *ngTemplateOutlet=\"skeletonTemplate()\"></ng-container>\n }\n </ng-container>\n}\n\n<dsv-scroll-top-button [scroll]=\"top()\" (callback)=\"scrollToTop()\" />\n", styles: [":host{display:flex;overflow:auto;scrollbar-width:thin;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: ButtonScrollTopComponent, selector: "dsv-scroll-top-button", inputs: ["scroll"], outputs: ["callback"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
114
125
  }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvScrollInfiniteContainer, decorators: [{
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvScrollInfiniteContainer, decorators: [{
116
127
  type: Component,
117
128
  args: [{ selector: 'dsv-scroll-infinite', imports: [ButtonScrollTopComponent, NgTemplateOutlet], host: {
118
129
  '[id]': 'id() ?? uuid()',
@@ -124,7 +135,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
124
135
  class ScrollService extends BaseApiService {
125
136
  router = inject(RouterService).router;
126
137
  routeIds = new Map();
127
- scrolls = signal(new Map(), ...(ngDevMode ? [{ debugName: "scrolls" }] : /* istanbul ignore next */ []));
138
+ scrolls = signal(new Map(), /* @ts-ignore */
139
+ ...(ngDevMode ? [{ debugName: "scrolls" }] : /* istanbul ignore next */ []));
128
140
  getRouteUuid(index = 0) {
129
141
  const key = `${this.router.url}__${index}`;
130
142
  if (!this.routeIds.has(key)) {
@@ -151,10 +163,10 @@ class ScrollService extends BaseApiService {
151
163
  return newMap;
152
164
  });
153
165
  }
154
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ScrollService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
155
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ScrollService, providedIn: 'root' });
166
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ScrollService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
167
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ScrollService, providedIn: 'root' });
156
168
  }
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ScrollService, decorators: [{
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ScrollService, decorators: [{
158
170
  type: Injectable,
159
171
  args: [{ providedIn: 'root' }]
160
172
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-scroll.mjs","sources":["../../../projects/ng-dsv/ds/scroll/component/button/scroll-top-button.component.ts","../../../projects/ng-dsv/ds/scroll/component/button/scroll-top-button.component.html","../../../projects/ng-dsv/ds/scroll/component/scroll-infinite.component.ts","../../../projects/ng-dsv/ds/scroll/component/scroll-infinite.component.html","../../../projects/ng-dsv/ds/scroll/service/scroll.service.ts","../../../projects/ng-dsv/ds/scroll/utils/scroll.utils.ts","../../../projects/ng-dsv/ds/scroll/ng-vagabond-lab-ng-dsv-ds-scroll.ts"],"sourcesContent":["import { Component, effect, input, output, signal } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\n\n@Component({\n selector: 'dsv-scroll-top-button',\n imports: [DsvButtonComponent],\n templateUrl: './scroll-top-button.component.html',\n styleUrls: ['./scroll-top-button.component.scss'],\n})\nexport class ButtonScrollTopComponent {\n readonly scroll = input<number>(0);\n\n readonly callback = output<void>();\n\n readonly show = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n this.show.set(this.scroll() > 400);\n });\n }\n}\n","@if (show()) {\n <dsv-button\n icon=\"ri-arrow-up-line\"\n color=\"default\"\n (callback)=\"callback.emit()\"\n ></dsv-button>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { NavigationStart, Scroll } from '@angular/router';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { filter, map } from 'rxjs';\nimport { ButtonScrollTopComponent, getVisibleCount, ScrollService } from '../public-api';\n\n@Component({\n selector: 'dsv-scroll-infinite',\n imports: [ButtonScrollTopComponent, NgTemplateOutlet],\n templateUrl: './scroll-infinite.component.html',\n styleUrls: ['./scroll-infinite.component.scss'],\n host: {\n '[id]': 'id() ?? uuid()',\n class: 'scroll',\n '(scroll)': 'doScroll()',\n },\n})\nexport class DsvScrollInfiniteContainer {\n readonly scrollService = inject(ScrollService);\n readonly elementRef = inject(ElementRef);\n readonly routerService = inject(RouterService);\n\n readonly bottomOffset = input<number>(100);\n readonly loading = input<boolean | null>(null);\n readonly id = input<string | undefined>();\n\n readonly callback = output<void>();\n readonly uuid = signal<string>('');\n readonly top = signal<number>(0);\n readonly skeletonCount = signal<number>(0);\n\n private readonly $loading = signal(false);\n\n readonly skeletonTemplate = contentChild<TemplateRef<void>>('skeleton');\n\n readonly skeletonArray = signal<number[]>([]);\n\n constructor() {\n this.routerService.router.events.subscribe((event) => {\n if (event instanceof NavigationStart) {\n this.$loading.set(true);\n }\n });\n this.routerService.router.events\n .pipe(\n filter((event): event is Scroll => event instanceof Scroll),\n map((event: Scroll) => event.position),\n )\n .subscribe(() => {\n const url = this.routerService.currentUrl();\n const value = this.scrollService.getScroll(this.uuid(), url);\n this.restoreScroll(value?.top, value?.left);\n setTimeout(() => {\n this.restoreScroll(value?.top, value?.left);\n this.$loading.set(false);\n }, 100);\n });\n\n effect(() => {\n if (this.scrollService.isPlatformBrowser()) {\n if (this.id()) {\n this.uuid.set(this.id()!);\n } else {\n const all = Array.from(document.querySelectorAll('.scroll'));\n const index = all.indexOf(this.elementRef.nativeElement);\n this.uuid.set(this.scrollService.getRouteUuid(index));\n }\n }\n });\n\n effect(() => {\n if (!this.loading()) {\n this.$loading.set(false);\n }\n });\n\n effect(() => {\n this.skeletonArray.set(Array.from({ length: this.skeletonCount() }, (_, i) => i));\n });\n\n effect(() => {\n const small = this.elementRef.nativeElement.classList.contains('small');\n const count = getVisibleCount(this.scrollService.platformService.width(), small);\n this.skeletonCount.set(count);\n });\n }\n\n restoreScroll(top: number, left: number): void {\n this.top.set(top);\n this.elementRef.nativeElement.scrollTop = top;\n this.elementRef.nativeElement.scrollLeft = left;\n }\n\n private resetLoading(): void {\n setTimeout(() => {\n this.$loading.set(false);\n }, 10);\n }\n\n scrollToTop(): void {\n this.elementRef.nativeElement.scrollTop = 0;\n this.scrollService.saveScroll(this.uuid(), this.routerService.currentUrl(), 0, 0);\n }\n\n doScroll(): void {\n if (this.$loading()) {\n return;\n }\n\n const element = this.elementRef.nativeElement;\n\n this.scrollService.saveScroll(\n this.uuid(),\n this.routerService.currentUrl(),\n element.scrollTop,\n element.scrollLeft,\n );\n this.top.set(element.scrollTop);\n\n const distanceToBottom = element.scrollHeight - element.scrollTop - element.clientHeight;\n\n if (distanceToBottom < this.bottomOffset() && !this.$loading()) {\n this.$loading.set(true);\n this.callback.emit();\n this.resetLoading();\n }\n }\n}\n","<ng-content></ng-content>\n\n@if (loading()) {\n <ng-container>\n @for (_ of skeletonArray(); track _) {\n <ng-container *ngTemplateOutlet=\"skeletonTemplate()\"></ng-container>\n }\n </ng-container>\n}\n\n<dsv-scroll-top-button [scroll]=\"top()\" (callback)=\"scrollToTop()\" />\n","import { inject, Injectable, signal } from '@angular/core';\nimport { BaseApiService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { ScrollPositionDto } from '../dto/scroll-position.dto';\n\n@Injectable({ providedIn: 'root' })\nexport class ScrollService extends BaseApiService {\n readonly router = inject(RouterService).router;\n readonly routeIds = new Map<string, string>();\n readonly scrolls = signal<Map<string, Map<string, ScrollPositionDto>>>(new Map());\n\n getRouteUuid(index: number = 0): string {\n const key = `${this.router.url}__${index}`;\n if (!this.routeIds.has(key)) {\n this.routeIds.set(key, crypto.randomUUID());\n }\n return this.routeIds.get(key)!;\n }\n\n saveScroll(id: string, url: string, top: number, left: number): void {\n this.scrolls.update((map) => {\n const newMap = new Map(map);\n const urlMap = new Map(newMap.get(id) ?? []);\n urlMap.set(url, { top, left });\n newMap.set(id, urlMap);\n return newMap;\n });\n }\n\n getScroll(id: string, url: string): ScrollPositionDto {\n return this.scrolls().get(id)?.get(url) ?? { top: 0, left: 0 };\n }\n\n clear(id: string): void {\n this.scrolls.update((map) => {\n const newMap = new Map(map);\n newMap.delete(id);\n return newMap;\n });\n }\n}\n","import { ElementRef } from '@angular/core';\n\nexport const SCROLL_ID = '#main-scroll';\nexport const SCROLL_CLASS = '.scroll';\n\nexport const scrollToTop = (element: ElementRef, name: string = SCROLL_ID): void => {\n element.nativeElement.querySelector(name)?.scrollTo({ top: 0, behavior: 'smooth' });\n};\nexport const scrollToClosestTop = (element: ElementRef, name: string = SCROLL_CLASS): void => {\n element.nativeElement.querySelector(name)?.closest(name)?.scrollTo(0, 0);\n};\n\ntype BreakpointConfig = {\n min: number;\n small: number;\n normal: number;\n};\n\nconst BREAKPOINTS: BreakpointConfig[] = [\n { min: 1500, small: 16, normal: 14 },\n { min: 1150, small: 14, normal: 12 },\n { min: 900, small: 14, normal: 10 },\n { min: 650, small: 14, normal: 8 },\n { min: 350, small: 8, normal: 6 },\n { min: 200, small: 6, normal: 3 },\n { min: 0, small: 4, normal: 2 },\n];\n\nexport function getVisibleCount(width: number, small: boolean): number {\n const config = BREAKPOINTS.find((bp) => width >= bp.min)!;\n\n return small ? config.small : config.normal;\n}\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-ds-scroll.mjs","sources":["../../../projects/ng-dsv/ds/scroll/component/button/scroll-top-button.component.ts","../../../projects/ng-dsv/ds/scroll/component/button/scroll-top-button.component.html","../../../projects/ng-dsv/ds/scroll/component/scroll-infinite.component.ts","../../../projects/ng-dsv/ds/scroll/component/scroll-infinite.component.html","../../../projects/ng-dsv/ds/scroll/service/scroll.service.ts","../../../projects/ng-dsv/ds/scroll/utils/scroll.utils.ts","../../../projects/ng-dsv/ds/scroll/ng-vagabond-lab-ng-dsv-ds-scroll.ts"],"sourcesContent":["import { Component, effect, input, output, signal } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\n\n@Component({\n selector: 'dsv-scroll-top-button',\n imports: [DsvButtonComponent],\n templateUrl: './scroll-top-button.component.html',\n styleUrls: ['./scroll-top-button.component.scss'],\n})\nexport class ButtonScrollTopComponent {\n readonly scroll = input<number>(0);\n\n readonly callback = output<void>();\n\n readonly show = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n this.show.set(this.scroll() > 400);\n });\n }\n}\n","@if (show()) {\n <dsv-button\n icon=\"ri-arrow-up-line\"\n color=\"default\"\n (callback)=\"callback.emit()\"\n ></dsv-button>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { NavigationStart, Scroll } from '@angular/router';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { filter, map } from 'rxjs';\nimport { ButtonScrollTopComponent, getVisibleCount, ScrollService } from '../public-api';\n\n@Component({\n selector: 'dsv-scroll-infinite',\n imports: [ButtonScrollTopComponent, NgTemplateOutlet],\n templateUrl: './scroll-infinite.component.html',\n styleUrls: ['./scroll-infinite.component.scss'],\n host: {\n '[id]': 'id() ?? uuid()',\n class: 'scroll',\n '(scroll)': 'doScroll()',\n },\n})\nexport class DsvScrollInfiniteContainer {\n readonly scrollService = inject(ScrollService);\n readonly elementRef = inject(ElementRef);\n readonly routerService = inject(RouterService);\n\n readonly bottomOffset = input<number>(100);\n readonly loading = input<boolean | null>(null);\n readonly id = input<string | undefined>();\n\n readonly callback = output<void>();\n readonly uuid = signal<string>('');\n readonly top = signal<number>(0);\n readonly skeletonCount = signal<number>(0);\n\n private readonly $loading = signal(false);\n\n readonly skeletonTemplate = contentChild<TemplateRef<void>>('skeleton');\n\n readonly skeletonArray = signal<number[]>([]);\n\n constructor() {\n this.routerService.router.events.subscribe((event) => {\n if (event instanceof NavigationStart) {\n this.$loading.set(true);\n }\n });\n this.routerService.router.events\n .pipe(\n filter((event): event is Scroll => event instanceof Scroll),\n map((event: Scroll) => event.position),\n )\n .subscribe(() => {\n const url = this.routerService.currentUrl();\n const value = this.scrollService.getScroll(this.uuid(), url);\n this.restoreScroll(value?.top, value?.left);\n setTimeout(() => {\n this.restoreScroll(value?.top, value?.left);\n this.$loading.set(false);\n }, 100);\n });\n\n effect(() => {\n if (this.scrollService.isPlatformBrowser()) {\n if (this.id()) {\n this.uuid.set(this.id()!);\n } else {\n const all = Array.from(document.querySelectorAll('.scroll'));\n const index = all.indexOf(this.elementRef.nativeElement);\n this.uuid.set(this.scrollService.getRouteUuid(index));\n }\n }\n });\n\n effect(() => {\n if (!this.loading()) {\n this.$loading.set(false);\n }\n });\n\n effect(() => {\n this.skeletonArray.set(Array.from({ length: this.skeletonCount() }, (_, i) => i));\n });\n\n effect(() => {\n const small = this.elementRef.nativeElement.classList.contains('small');\n const count = getVisibleCount(this.scrollService.platformService.width(), small);\n this.skeletonCount.set(count);\n });\n }\n\n restoreScroll(top: number, left: number): void {\n this.top.set(top);\n this.elementRef.nativeElement.scrollTop = top;\n this.elementRef.nativeElement.scrollLeft = left;\n }\n\n private resetLoading(): void {\n setTimeout(() => {\n this.$loading.set(false);\n }, 10);\n }\n\n scrollToTop(): void {\n this.elementRef.nativeElement.scrollTop = 0;\n this.scrollService.saveScroll(this.uuid(), this.routerService.currentUrl(), 0, 0);\n }\n\n doScroll(): void {\n if (this.$loading()) {\n return;\n }\n\n const element = this.elementRef.nativeElement;\n\n this.scrollService.saveScroll(\n this.uuid(),\n this.routerService.currentUrl(),\n element.scrollTop,\n element.scrollLeft,\n );\n this.top.set(element.scrollTop);\n\n const distanceToBottom = element.scrollHeight - element.scrollTop - element.clientHeight;\n\n if (distanceToBottom < this.bottomOffset() && !this.$loading()) {\n this.$loading.set(true);\n this.callback.emit();\n this.resetLoading();\n }\n }\n}\n","<ng-content></ng-content>\n\n@if (loading()) {\n <ng-container>\n @for (_ of skeletonArray(); track _) {\n <ng-container *ngTemplateOutlet=\"skeletonTemplate()\"></ng-container>\n }\n </ng-container>\n}\n\n<dsv-scroll-top-button [scroll]=\"top()\" (callback)=\"scrollToTop()\" />\n","import { inject, Injectable, signal } from '@angular/core';\nimport { BaseApiService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { ScrollPositionDto } from '../dto/scroll-position.dto';\n\n@Injectable({ providedIn: 'root' })\nexport class ScrollService extends BaseApiService {\n readonly router = inject(RouterService).router;\n readonly routeIds = new Map<string, string>();\n readonly scrolls = signal<Map<string, Map<string, ScrollPositionDto>>>(new Map());\n\n getRouteUuid(index: number = 0): string {\n const key = `${this.router.url}__${index}`;\n if (!this.routeIds.has(key)) {\n this.routeIds.set(key, crypto.randomUUID());\n }\n return this.routeIds.get(key)!;\n }\n\n saveScroll(id: string, url: string, top: number, left: number): void {\n this.scrolls.update((map) => {\n const newMap = new Map(map);\n const urlMap = new Map(newMap.get(id) ?? []);\n urlMap.set(url, { top, left });\n newMap.set(id, urlMap);\n return newMap;\n });\n }\n\n getScroll(id: string, url: string): ScrollPositionDto {\n return this.scrolls().get(id)?.get(url) ?? { top: 0, left: 0 };\n }\n\n clear(id: string): void {\n this.scrolls.update((map) => {\n const newMap = new Map(map);\n newMap.delete(id);\n return newMap;\n });\n }\n}\n","import { ElementRef } from '@angular/core';\n\nexport const SCROLL_ID = '#main-scroll';\nexport const SCROLL_CLASS = '.scroll';\n\nexport const scrollToTop = (element: ElementRef, name: string = SCROLL_ID): void => {\n element.nativeElement.querySelector(name)?.scrollTo({ top: 0, behavior: 'smooth' });\n};\nexport const scrollToClosestTop = (element: ElementRef, name: string = SCROLL_CLASS): void => {\n element.nativeElement.querySelector(name)?.closest(name)?.scrollTo(0, 0);\n};\n\ntype BreakpointConfig = {\n min: number;\n small: number;\n normal: number;\n};\n\nconst BREAKPOINTS: BreakpointConfig[] = [\n { min: 1500, small: 16, normal: 14 },\n { min: 1150, small: 14, normal: 12 },\n { min: 900, small: 14, normal: 10 },\n { min: 650, small: 14, normal: 8 },\n { min: 350, small: 8, normal: 6 },\n { min: 200, small: 6, normal: 3 },\n { min: 0, small: 4, normal: 2 },\n];\n\nexport function getVisibleCount(width: number, small: boolean): number {\n const config = BREAKPOINTS.find((bp) => width >= bp.min)!;\n\n return small ? config.small : config.normal;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MASa,wBAAwB,CAAA;IACxB,MAAM,GAAG,KAAK,CAAS,CAAC;+EAAC;IAEzB,QAAQ,GAAG,MAAM,EAAQ;IAEzB,IAAI,GAAG,MAAM,CAAU,KAAK;6EAAC;AAEtC,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;AACtC,QAAA,CAAC,CAAC;IACN;uGAXS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,QAAA,ECTrC,gKAOA,EAAA,MAAA,EAAA,CAAA,4GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFc,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAInB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;+BACI,uBAAuB,EAAA,OAAA,EACxB,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAAA,gKAAA,EAAA,MAAA,EAAA,CAAA,4GAAA,CAAA,EAAA;;;MEuBpB,0BAA0B,CAAA;AAC1B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAErC,YAAY,GAAG,KAAK,CAAS,GAAG;qFAAC;IACjC,OAAO,GAAG,KAAK,CAAiB,IAAI;gFAAC;AACrC,IAAA,EAAE,GAAG,KAAK;sFAAsB;IAEhC,QAAQ,GAAG,MAAM,EAAQ;IACzB,IAAI,GAAG,MAAM,CAAS,EAAE;6EAAC;IACzB,GAAG,GAAG,MAAM,CAAS,CAAC;4EAAC;IACvB,aAAa,GAAG,MAAM,CAAS,CAAC;sFAAC;IAEzB,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;IAEhC,gBAAgB,GAAG,YAAY,CAAoB,UAAU;yFAAC;IAE9D,aAAa,GAAG,MAAM,CAAW,EAAE;sFAAC;AAE7C,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACjD,YAAA,IAAI,KAAK,YAAY,eAAe,EAAE;AAClC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3B;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;aACrB,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAsB,KAAK,YAAY,MAAM,CAAC,EAC3D,GAAG,CAAC,CAAC,KAAa,KAAK,KAAK,CAAC,QAAQ,CAAC;aAEzC,SAAS,CAAC,MAAK;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AAC3C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC;YAC5D,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC;YAC3C,UAAU,CAAC,MAAK;gBACZ,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC;AAC3C,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,CAAC,CAAC;QAEN,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE;AACxC,gBAAA,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE;oBACX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAG,CAAC;gBAC7B;qBAAO;AACH,oBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC5D,oBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACxD,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACzD;YACJ;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACrF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvE,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC;AAChF,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,QAAA,CAAC,CAAC;IACN;IAEA,aAAa,CAAC,GAAW,EAAE,IAAY,EAAA;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACjB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG;QAC7C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI;IACnD;IAEQ,YAAY,GAAA;QAChB,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B,CAAC,EAAE,EAAE,CAAC;IACV;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QAE7C,IAAI,CAAC,aAAa,CAAC,UAAU,CACzB,IAAI,CAAC,IAAI,EAAE,EACX,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,EAC/B,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,UAAU,CACrB;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AAE/B,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,YAAY;AAExF,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC5D,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YACpB,IAAI,CAAC,YAAY,EAAE;QACvB;IACJ;uGA7GS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5BvC,0TAWA,EAAA,MAAA,EAAA,CAAA,iFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDQc,wBAAwB,6GAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAS3C,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAXtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,WACtB,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,EAAA,IAAA,EAG/C;AACF,wBAAA,MAAM,EAAE,gBAAgB;AACxB,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,UAAU,EAAE,YAAY;AAC3B,qBAAA,EAAA,QAAA,EAAA,0TAAA,EAAA,MAAA,EAAA,CAAA,iFAAA,CAAA,EAAA;0bAkB2D,UAAU,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtCpE,MAAO,aAAc,SAAQ,cAAc,CAAA;AACpC,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM;AACrC,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAkB;AACpC,IAAA,OAAO,GAAG,MAAM,CAA8C,IAAI,GAAG,EAAE;gFAAC;IAEjF,YAAY,CAAC,QAAgB,CAAC,EAAA;QAC1B,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/C;QACA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE;IAClC;AAEA,IAAA,UAAU,CAAC,EAAU,EAAE,GAAW,EAAE,GAAW,EAAE,IAAY,EAAA;QACzD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AACxB,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC9B,YAAA,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AACtB,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;IAEA,SAAS,CAAC,EAAU,EAAE,GAAW,EAAA;QAC7B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IAClE;AAEA,IAAA,KAAK,CAAC,EAAU,EAAA;QACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AACxB,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACjB,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;uGAjCS,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACH3B,MAAM,SAAS,GAAG;AAClB,MAAM,YAAY,GAAG;AAErB,MAAM,WAAW,GAAG,CAAC,OAAmB,EAAE,IAAA,GAAe,SAAS,KAAU;IAC/E,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACvF;AACO,MAAM,kBAAkB,GAAG,CAAC,OAAmB,EAAE,IAAA,GAAe,YAAY,KAAU;AACzF,IAAA,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5E;AAQA,MAAM,WAAW,GAAuB;IACpC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACpC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACpC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACnC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;IAClC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IACjC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IACjC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;CAClC;AAEK,SAAU,eAAe,CAAC,KAAa,EAAE,KAAc,EAAA;AACzD,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,EAAE,CAAC,GAAG,CAAE;AAEzD,IAAA,OAAO,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM;AAC/C;;AChCA;;AAEG;;;;"}
@@ -2,10 +2,10 @@ import * as i0 from '@angular/core';
2
2
  import { Component } from '@angular/core';
3
3
 
4
4
  class DsvSekeletonComponent {
5
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvSekeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: DsvSekeletonComponent, isStandalone: true, selector: "dsv-skeleton", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;background-color:#919191;width:100%;height:100%;border-radius:10px;animation:animation-c7515d 2s ease-in-out .1s infinite}@keyframes animation-c7515d{0%{opacity:1}50%{opacity:.4}to{opacity:1}}\n"] });
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvSekeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.1", type: DsvSekeletonComponent, isStandalone: true, selector: "dsv-skeleton", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;background-color:#919191;width:100%;height:100%;border-radius:10px;animation:animation-c7515d 2s ease-in-out .1s infinite}@keyframes animation-c7515d{0%{opacity:1}50%{opacity:.4}to{opacity:1}}\n"] });
7
7
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvSekeletonComponent, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvSekeletonComponent, decorators: [{
9
9
  type: Component,
10
10
  args: [{ selector: 'dsv-skeleton', imports: [], template: "<ng-content></ng-content>\n", styles: [":host{display:flex;background-color:#919191;width:100%;height:100%;border-radius:10px;animation:animation-c7515d 2s ease-in-out .1s infinite}@keyframes animation-c7515d{0%{opacity:1}50%{opacity:.4}to{opacity:1}}\n"] }]
11
11
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-skeleton.mjs","sources":["../../../projects/ng-dsv/ds/skeleton/component/skeleton.component.ts","../../../projects/ng-dsv/ds/skeleton/component/skeleton.component.html","../../../projects/ng-dsv/ds/skeleton/ng-vagabond-lab-ng-dsv-ds-skeleton.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'dsv-skeleton',\n imports: [],\n templateUrl: './skeleton.component.html',\n styleUrl: './skeleton.component.scss',\n})\nexport class DsvSekeletonComponent {}\n","<ng-content></ng-content>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAQa,qBAAqB,CAAA;wGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,wECRlC,6BACA,EAAA,MAAA,EAAA,CAAA,uNAAA,CAAA,EAAA,CAAA;;4FDOa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,WACf,EAAE,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,uNAAA,CAAA,EAAA;;;AEJf;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-skeleton.mjs","sources":["../../../projects/ng-dsv/ds/skeleton/component/skeleton.component.ts","../../../projects/ng-dsv/ds/skeleton/component/skeleton.component.html","../../../projects/ng-dsv/ds/skeleton/ng-vagabond-lab-ng-dsv-ds-skeleton.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'dsv-skeleton',\n imports: [],\n templateUrl: './skeleton.component.html',\n styleUrl: './skeleton.component.scss',\n})\nexport class DsvSekeletonComponent {}\n","<ng-content></ng-content>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAQa,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wECRlC,6BACA,EAAA,MAAA,EAAA,CAAA,uNAAA,CAAA,EAAA,CAAA;;2FDOa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,WACf,EAAE,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,uNAAA,CAAA,EAAA;;;AEJf;;AAEG;;;;"}
@@ -4,8 +4,10 @@ import { RouterLink } from '@angular/router';
4
4
  import { TranslatePipe } from '@ngx-translate/core';
5
5
 
6
6
  class DsvTabComponent {
7
- tab = input.required(...(ngDevMode ? [{ debugName: "tab" }] : /* istanbul ignore next */ []));
8
- isSelected = input(false, ...(ngDevMode ? [{ debugName: "isSelected" }] : /* istanbul ignore next */ []));
7
+ tab = input.required(/* @ts-ignore */
8
+ ...(ngDevMode ? [{ debugName: "tab" }] : /* istanbul ignore next */ []));
9
+ isSelected = input(false, /* @ts-ignore */
10
+ ...(ngDevMode ? [{ debugName: "isSelected" }] : /* istanbul ignore next */ []));
9
11
  callback = output();
10
12
  doClick(event, tab) {
11
13
  if (!tab.url) {
@@ -13,25 +15,27 @@ class DsvTabComponent {
13
15
  this.callback.emit(tab);
14
16
  }
15
17
  }
16
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: DsvTabComponent, isStandalone: true, selector: "dsv-tab-component", inputs: { tab: { classPropertyName: "tab", publicName: "tab", isSignal: true, isRequired: true, transformFunction: null }, isSelected: { classPropertyName: "isSelected", publicName: "isSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { callback: "callback" }, ngImport: i0, template: "<button\n [routerLink]=\"tab().url ?? null\"\n [class.selected]=\"isSelected()\"\n (click)=\"doClick($event, tab())\"\n>\n {{ tab().title | translate }}\n</button>\n", styles: [":host button{opacity:.6;align-items:baseline;max-width:max-content!important;display:inline-flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0px;border:0px;margin:0;border-radius:0;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle;appearance:none;text-decoration:none;font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:500;font-size:.875rem;line-height:1.25;letter-spacing:.02857em;text-transform:uppercase;max-width:none;min-width:90px;position:relative;min-height:48px;flex:1 1 0px;padding:12px 16px;overflow:hidden;white-space:normal;text-align:center;flex-direction:column;color:inherit;-webkit-box-flex:1}:host button.selected{opacity:1;border-bottom:2px solid var(--primary)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.1", type: DsvTabComponent, isStandalone: true, selector: "dsv-tab-component", inputs: { tab: { classPropertyName: "tab", publicName: "tab", isSignal: true, isRequired: true, transformFunction: null }, isSelected: { classPropertyName: "isSelected", publicName: "isSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { callback: "callback" }, ngImport: i0, template: "<button\n [routerLink]=\"tab().url ?? null\"\n [class.selected]=\"isSelected()\"\n (click)=\"doClick($event, tab())\"\n>\n {{ tab().title | translate }}\n</button>\n", styles: [":host button{opacity:.6;align-items:baseline;max-width:max-content!important;display:inline-flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0px;border:0px;margin:0;border-radius:0;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle;appearance:none;text-decoration:none;font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:500;font-size:.875rem;line-height:1.25;letter-spacing:.02857em;text-transform:uppercase;max-width:none;min-width:90px;position:relative;min-height:48px;flex:1 1 0px;padding:12px 16px;overflow:hidden;white-space:normal;text-align:center;flex-direction:column;color:inherit;-webkit-box-flex:1}:host button.selected{opacity:1;border-bottom:2px solid var(--primary)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
18
20
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvTabComponent, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvTabComponent, decorators: [{
20
22
  type: Component,
21
23
  args: [{ selector: 'dsv-tab-component', imports: [TranslatePipe, RouterLink], template: "<button\n [routerLink]=\"tab().url ?? null\"\n [class.selected]=\"isSelected()\"\n (click)=\"doClick($event, tab())\"\n>\n {{ tab().title | translate }}\n</button>\n", styles: [":host button{opacity:.6;align-items:baseline;max-width:max-content!important;display:inline-flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0px;border:0px;margin:0;border-radius:0;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle;appearance:none;text-decoration:none;font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:500;font-size:.875rem;line-height:1.25;letter-spacing:.02857em;text-transform:uppercase;max-width:none;min-width:90px;position:relative;min-height:48px;flex:1 1 0px;padding:12px 16px;overflow:hidden;white-space:normal;text-align:center;flex-direction:column;color:inherit;-webkit-box-flex:1}:host button.selected{opacity:1;border-bottom:2px solid var(--primary)}\n"] }]
22
24
  }], propDecorators: { tab: [{ type: i0.Input, args: [{ isSignal: true, alias: "tab", required: true }] }], isSelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelected", required: false }] }], callback: [{ type: i0.Output, args: ["callback"] }] } });
23
25
 
24
26
  class DsvTabsComponent {
25
- tabs = input.required(...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
26
- active = input.required(...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
27
+ tabs = input.required(/* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
29
+ active = input.required(/* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
27
31
  callback = output();
28
32
  doClick(tab) {
29
33
  this.callback.emit(tab);
30
34
  }
31
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: DsvTabsComponent, isStandalone: true, selector: "dsv-tabs-component", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { callback: "callback" }, ngImport: i0, template: "<div>\n <div>\n @for (tab of tabs(); track tab.id) {\n <dsv-tab-component\n [tab]=\"tab\"\n [isSelected]=\"active().trim() === tab.id.trim()\"\n (callback)=\"doClick($event)\"\n />\n }\n </div>\n</div>\n", styles: [":host{overflow:hidden;min-height:48px;display:flex;width:100%}:host>div{margin-bottom:0;position:relative;display:inline-block;flex:1 1 auto;overflow:auto;scrollbar-width:thin;overflow-x:hidden;width:100%}:host>div>div{display:flex;overflow:auto;scrollbar-width:thin;margin:0 10px}\n"], dependencies: [{ kind: "component", type: DsvTabComponent, selector: "dsv-tab-component", inputs: ["tab", "isSelected"], outputs: ["callback"] }] });
35
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
36
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: DsvTabsComponent, isStandalone: true, selector: "dsv-tabs-component", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { callback: "callback" }, ngImport: i0, template: "<div>\n <div>\n @for (tab of tabs(); track tab.id) {\n <dsv-tab-component\n [tab]=\"tab\"\n [isSelected]=\"active().trim() === tab.id.trim()\"\n (callback)=\"doClick($event)\"\n />\n }\n </div>\n</div>\n", styles: [":host{overflow:hidden;min-height:48px;display:flex;width:100%}:host>div{margin-bottom:0;position:relative;display:inline-block;flex:1 1 auto;overflow:auto;scrollbar-width:thin;overflow-x:hidden;width:100%}:host>div>div{display:flex;overflow:auto;scrollbar-width:thin;margin:0 10px}\n"], dependencies: [{ kind: "component", type: DsvTabComponent, selector: "dsv-tab-component", inputs: ["tab", "isSelected"], outputs: ["callback"] }] });
33
37
  }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvTabsComponent, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvTabsComponent, decorators: [{
35
39
  type: Component,
36
40
  args: [{ selector: 'dsv-tabs-component', imports: [DsvTabComponent], template: "<div>\n <div>\n @for (tab of tabs(); track tab.id) {\n <dsv-tab-component\n [tab]=\"tab\"\n [isSelected]=\"active().trim() === tab.id.trim()\"\n (callback)=\"doClick($event)\"\n />\n }\n </div>\n</div>\n", styles: [":host{overflow:hidden;min-height:48px;display:flex;width:100%}:host>div{margin-bottom:0;position:relative;display:inline-block;flex:1 1 auto;overflow:auto;scrollbar-width:thin;overflow-x:hidden;width:100%}:host>div>div{display:flex;overflow:auto;scrollbar-width:thin;margin:0 10px}\n"] }]
37
41
  }], propDecorators: { tabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabs", required: true }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: true }] }], callback: [{ type: i0.Output, args: ["callback"] }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-tab.mjs","sources":["../../../projects/ng-dsv/ds/tab/tab/component/tab.component.ts","../../../projects/ng-dsv/ds/tab/tab/component/tab.component.html","../../../projects/ng-dsv/ds/tab/tabs/component/tabs.component.ts","../../../projects/ng-dsv/ds/tab/tabs/component/tabs.component.html","../../../projects/ng-dsv/ds/tab/ng-vagabond-lab-ng-dsv-ds-tab.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { TabDto } from '../dto/tab.dto';\n\n@Component({\n selector: 'dsv-tab-component',\n imports: [TranslatePipe, RouterLink],\n templateUrl: './tab.component.html',\n styleUrls: ['./tab.component.scss'],\n})\nexport class DsvTabComponent {\n readonly tab = input.required<TabDto>();\n readonly isSelected = input<boolean>(false);\n\n readonly callback = output<TabDto>();\n\n doClick(event: Event, tab: TabDto): void {\n if (!tab.url) {\n event.stopPropagation();\n this.callback.emit(tab);\n }\n }\n}\n","<button\n [routerLink]=\"tab().url ?? null\"\n [class.selected]=\"isSelected()\"\n (click)=\"doClick($event, tab())\"\n>\n {{ tab().title | translate }}\n</button>\n","import { Component, input, output } from '@angular/core';\nimport { TabDto } from '../../public-api';\nimport { DsvTabComponent } from '../../tab/component/tab.component';\n\n@Component({\n selector: 'dsv-tabs-component',\n imports: [DsvTabComponent],\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class DsvTabsComponent {\n readonly tabs = input.required<TabDto[]>();\n readonly active = input.required<string>();\n\n readonly callback = output<TabDto>();\n\n doClick(tab: TabDto): void {\n this.callback.emit(tab);\n }\n}\n","<div>\n <div>\n @for (tab of tabs(); track tab.id) {\n <dsv-tab-component\n [tab]=\"tab\"\n [isSelected]=\"active().trim() === tab.id.trim()\"\n (callback)=\"doClick($event)\"\n />\n }\n </div>\n</div>\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-ds-tab.mjs","sources":["../../../projects/ng-dsv/ds/tab/tab/component/tab.component.ts","../../../projects/ng-dsv/ds/tab/tab/component/tab.component.html","../../../projects/ng-dsv/ds/tab/tabs/component/tabs.component.ts","../../../projects/ng-dsv/ds/tab/tabs/component/tabs.component.html","../../../projects/ng-dsv/ds/tab/ng-vagabond-lab-ng-dsv-ds-tab.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { TabDto } from '../dto/tab.dto';\n\n@Component({\n selector: 'dsv-tab-component',\n imports: [TranslatePipe, RouterLink],\n templateUrl: './tab.component.html',\n styleUrls: ['./tab.component.scss'],\n})\nexport class DsvTabComponent {\n readonly tab = input.required<TabDto>();\n readonly isSelected = input<boolean>(false);\n\n readonly callback = output<TabDto>();\n\n doClick(event: Event, tab: TabDto): void {\n if (!tab.url) {\n event.stopPropagation();\n this.callback.emit(tab);\n }\n }\n}\n","<button\n [routerLink]=\"tab().url ?? null\"\n [class.selected]=\"isSelected()\"\n (click)=\"doClick($event, tab())\"\n>\n {{ tab().title | translate }}\n</button>\n","import { Component, input, output } from '@angular/core';\nimport { TabDto } from '../../public-api';\nimport { DsvTabComponent } from '../../tab/component/tab.component';\n\n@Component({\n selector: 'dsv-tabs-component',\n imports: [DsvTabComponent],\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class DsvTabsComponent {\n readonly tabs = input.required<TabDto[]>();\n readonly active = input.required<string>();\n\n readonly callback = output<TabDto>();\n\n doClick(tab: TabDto): void {\n this.callback.emit(tab);\n }\n}\n","<div>\n <div>\n @for (tab of tabs(); track tab.id) {\n <dsv-tab-component\n [tab]=\"tab\"\n [isSelected]=\"active().trim() === tab.id.trim()\"\n (callback)=\"doClick($event)\"\n />\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -5,12 +5,18 @@ import { TranslatePipe } from '@ngx-translate/core';
5
5
  import { formatDate } from '@ng-vagabond-lab/ng-dsv/date';
6
6
 
7
7
  class DsvTableComponent {
8
- url = input.required(...(ngDevMode ? [{ debugName: "url" }] : /* istanbul ignore next */ []));
9
- cells = input.required(...(ngDevMode ? [{ debugName: "cells" }] : /* istanbul ignore next */ []));
10
- datas = input.required(...(ngDevMode ? [{ debugName: "datas" }] : /* istanbul ignore next */ []));
11
- max = input(10, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
12
- showDatas = signal([], ...(ngDevMode ? [{ debugName: "showDatas" }] : /* istanbul ignore next */ []));
13
- links = signal([], ...(ngDevMode ? [{ debugName: "links" }] : /* istanbul ignore next */ []));
8
+ url = input.required(/* @ts-ignore */
9
+ ...(ngDevMode ? [{ debugName: "url" }] : /* istanbul ignore next */ []));
10
+ cells = input.required(/* @ts-ignore */
11
+ ...(ngDevMode ? [{ debugName: "cells" }] : /* istanbul ignore next */ []));
12
+ datas = input.required(/* @ts-ignore */
13
+ ...(ngDevMode ? [{ debugName: "datas" }] : /* istanbul ignore next */ []));
14
+ max = input(10, /* @ts-ignore */
15
+ ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
16
+ showDatas = signal([], /* @ts-ignore */
17
+ ...(ngDevMode ? [{ debugName: "showDatas" }] : /* istanbul ignore next */ []));
18
+ links = signal([], /* @ts-ignore */
19
+ ...(ngDevMode ? [{ debugName: "links" }] : /* istanbul ignore next */ []));
14
20
  constructor() {
15
21
  effect(() => {
16
22
  const { links, datas } = initTable(this.datas(), this.max());
@@ -27,10 +33,10 @@ class DsvTableComponent {
27
33
  this.showDatas.set(showDatas);
28
34
  });
29
35
  }
30
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: DsvTableComponent, isStandalone: true, selector: "dsv-table", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: true, transformFunction: null }, cells: { classPropertyName: "cells", publicName: "cells", isSignal: true, isRequired: true, transformFunction: null }, datas: { classPropertyName: "datas", publicName: "datas", isSignal: true, isRequired: true, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<table>\n <thead>\n <tr>\n @for (cell of cells(); track cell.name) {\n <th [style.maxWidth]=\"cell.width\">{{ cell.label | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (data of showDatas(); track $index; let index = $index) {\n <tr>\n @for (cell of cells(); track cell.name; let indexData = $index) {\n <td\n [class.cursor]=\"links()[index]\"\n [routerLink]=\"links()[index]\"\n [style.maxWidth]=\"cell.width\"\n >\n {{ data[indexData + 1] }}\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: [":host{overflow:auto;scrollbar-width:thin;width:100%}:host table{table-layout:fixed;min-width:100%;display:table;border-collapse:collapse;border-spacing:0px}:host table thead{display:table-header-group}:host table thead tr{background-color:var(--background-table-tr);color:var(--background-table-tr-text);border:1px solid var(--border);display:table-row;vertical-align:middle;outline:0px;height:32px}:host table thead tr th{font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:500;font-size:.875rem;line-height:1.5rem;letter-spacing:.01071em;display:table-cell;vertical-align:inherit;border-bottom:1px solid var(--border);text-align:left;padding:6px 16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host table tbody{display:table-row-group;background-color:var(--background-card)}:host table tbody tr{display:table-row;vertical-align:middle;outline:0px;height:32px}:host table tbody tr td{font-weight:400;font-size:.875rem;line-height:1.43;letter-spacing:.01071em;display:table-cell;vertical-align:inherit;border-bottom:1px solid var(--border);text-align:left;padding:6px 16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}:host table tbody tr td.cursor{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: DsvTableComponent, isStandalone: true, selector: "dsv-table", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: true, transformFunction: null }, cells: { classPropertyName: "cells", publicName: "cells", isSignal: true, isRequired: true, transformFunction: null }, datas: { classPropertyName: "datas", publicName: "datas", isSignal: true, isRequired: true, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<table>\n <thead>\n <tr>\n @for (cell of cells(); track cell.name) {\n <th [style.maxWidth]=\"cell.width\">{{ cell.label | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (data of showDatas(); track $index; let index = $index) {\n <tr>\n @for (cell of cells(); track cell.name; let indexData = $index) {\n <td\n [class.cursor]=\"links()[index]\"\n [routerLink]=\"links()[index]\"\n [style.maxWidth]=\"cell.width\"\n >\n {{ data[indexData + 1] }}\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: [":host{overflow:auto;scrollbar-width:thin;width:100%}:host table{table-layout:fixed;min-width:100%;display:table;border-collapse:collapse;border-spacing:0px}:host table thead{display:table-header-group}:host table thead tr{background-color:var(--background-table-tr);color:var(--background-table-tr-text);border:1px solid var(--border);display:table-row;vertical-align:middle;outline:0px;height:32px}:host table thead tr th{font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:500;font-size:.875rem;line-height:1.5rem;letter-spacing:.01071em;display:table-cell;vertical-align:inherit;border-bottom:1px solid var(--border);text-align:left;padding:6px 16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host table tbody{display:table-row-group;background-color:var(--background-card)}:host table tbody tr{display:table-row;vertical-align:middle;outline:0px;height:32px}:host table tbody tr td{font-weight:400;font-size:.875rem;line-height:1.43;letter-spacing:.01071em;display:table-cell;vertical-align:inherit;border-bottom:1px solid var(--border);text-align:left;padding:6px 16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}:host table tbody tr td.cursor{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
32
38
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvTableComponent, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvTableComponent, decorators: [{
34
40
  type: Component,
35
41
  args: [{ selector: 'dsv-table', imports: [RouterLink, TranslatePipe], template: "<table>\n <thead>\n <tr>\n @for (cell of cells(); track cell.name) {\n <th [style.maxWidth]=\"cell.width\">{{ cell.label | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (data of showDatas(); track $index; let index = $index) {\n <tr>\n @for (cell of cells(); track cell.name; let indexData = $index) {\n <td\n [class.cursor]=\"links()[index]\"\n [routerLink]=\"links()[index]\"\n [style.maxWidth]=\"cell.width\"\n >\n {{ data[indexData + 1] }}\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: [":host{overflow:auto;scrollbar-width:thin;width:100%}:host table{table-layout:fixed;min-width:100%;display:table;border-collapse:collapse;border-spacing:0px}:host table thead{display:table-header-group}:host table thead tr{background-color:var(--background-table-tr);color:var(--background-table-tr-text);border:1px solid var(--border);display:table-row;vertical-align:middle;outline:0px;height:32px}:host table thead tr th{font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:500;font-size:.875rem;line-height:1.5rem;letter-spacing:.01071em;display:table-cell;vertical-align:inherit;border-bottom:1px solid var(--border);text-align:left;padding:6px 16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host table tbody{display:table-row-group;background-color:var(--background-card)}:host table tbody tr{display:table-row;vertical-align:middle;outline:0px;height:32px}:host table tbody tr td{font-weight:400;font-size:.875rem;line-height:1.43;letter-spacing:.01071em;display:table-cell;vertical-align:inherit;border-bottom:1px solid var(--border);text-align:left;padding:6px 16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}:host table tbody tr td.cursor{cursor:pointer}\n"] }]
36
42
  }], ctorParameters: () => [], propDecorators: { url: [{ type: i0.Input, args: [{ isSignal: true, alias: "url", required: true }] }], cells: [{ type: i0.Input, args: [{ isSignal: true, alias: "cells", required: true }] }], datas: [{ type: i0.Input, args: [{ isSignal: true, alias: "datas", required: true }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-table.mjs","sources":["../../../projects/ng-dsv/ds/table/component/table.component.ts","../../../projects/ng-dsv/ds/table/component/table.component.html","../../../projects/ng-dsv/ds/table/utils/table.utils.ts","../../../projects/ng-dsv/ds/table/ng-vagabond-lab-ng-dsv-ds-table.ts"],"sourcesContent":["import { Component, effect, input, signal } from '@angular/core';\n\nimport { RouterLink } from '@angular/router';\nimport { JSONObject } from '@ng-vagabond-lab/ng-dsv/api';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { TableDto } from '../dto/table.dto';\nimport { getValue, initTable } from '../public-api';\n\n@Component({\n selector: 'dsv-table',\n imports: [RouterLink, TranslatePipe],\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n})\nexport class DsvTableComponent {\n readonly url = input.required<string>();\n readonly cells = input.required<TableDto[]>();\n readonly datas = input.required<JSONObject[]>();\n readonly max = input<number>(10);\n\n readonly showDatas = signal<string[][]>([]);\n readonly links = signal<(string | null)[]>([]);\n\n constructor() {\n effect(() => {\n const { links, datas } = initTable(this.datas(), this.max());\n\n this.links.set(links);\n\n const showDatas: string[][] = [];\n datas.forEach((data) => {\n const showData: string[] = [];\n showData.push(getValue(data, 'id', false));\n this.cells()?.forEach((cell) => {\n showData.push(getValue(data, cell.name, cell.date ?? false));\n });\n showDatas.push(showData);\n });\n this.showDatas.set(showDatas);\n });\n }\n}\n","<table>\n <thead>\n <tr>\n @for (cell of cells(); track cell.name) {\n <th [style.maxWidth]=\"cell.width\">{{ cell.label | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (data of showDatas(); track $index; let index = $index) {\n <tr>\n @for (cell of cells(); track cell.name; let indexData = $index) {\n <td\n [class.cursor]=\"links()[index]\"\n [routerLink]=\"links()[index]\"\n [style.maxWidth]=\"cell.width\"\n >\n {{ data[indexData + 1] }}\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import { ApiDto, JSONObject, JSONValue } from '@ng-vagabond-lab/ng-dsv/api';\nimport { formatDate } from '@ng-vagabond-lab/ng-dsv/date';\n\nexport const initTable = (\n datas: JSONObject[],\n max: number,\n): { links: null[]; datas: ({ [x: string]: JSONValue } | JSONObject[] | ApiDto)[] } => {\n const links = [];\n const newDatas = [];\n for (let i = 0, length = max > 0 ? max : datas.length; i < length; i++) {\n let data = datas?.[i];\n if (data) {\n links.push(data['id' as keyof JSONObject]);\n } else {\n data = { id: -1 * (i + 1) } as JSONObject;\n links.push(null);\n }\n newDatas.push(data);\n }\n\n return {\n links: links,\n datas: newDatas,\n };\n};\n\nexport const getValue = (obj: JSONObject, key: string, isDate: boolean): string => {\n let value: string = obj[key as keyof JSONObject];\n if (key.includes('.')) {\n const keys = key.split('.');\n let recurse: JSONObject = obj;\n keys.forEach((key2) => {\n if (recurse) {\n if (Array.isArray(recurse)) {\n recurse = (recurse as JSONObject[])\n .map((item) => item[key2 as keyof JSONObject])\n .join(',') as JSONObject;\n } else {\n recurse = recurse[key2 as keyof JSONObject];\n }\n }\n });\n value = recurse as string;\n }\n if (isDate && value) {\n value = formatDate(value, true, true);\n }\n return value;\n};\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-ds-table.mjs","sources":["../../../projects/ng-dsv/ds/table/component/table.component.ts","../../../projects/ng-dsv/ds/table/component/table.component.html","../../../projects/ng-dsv/ds/table/utils/table.utils.ts","../../../projects/ng-dsv/ds/table/ng-vagabond-lab-ng-dsv-ds-table.ts"],"sourcesContent":["import { Component, effect, input, signal } from '@angular/core';\n\nimport { RouterLink } from '@angular/router';\nimport { JSONObject } from '@ng-vagabond-lab/ng-dsv/api';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { TableDto } from '../dto/table.dto';\nimport { getValue, initTable } from '../public-api';\n\n@Component({\n selector: 'dsv-table',\n imports: [RouterLink, TranslatePipe],\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n})\nexport class DsvTableComponent {\n readonly url = input.required<string>();\n readonly cells = input.required<TableDto[]>();\n readonly datas = input.required<JSONObject[]>();\n readonly max = input<number>(10);\n\n readonly showDatas = signal<string[][]>([]);\n readonly links = signal<(string | null)[]>([]);\n\n constructor() {\n effect(() => {\n const { links, datas } = initTable(this.datas(), this.max());\n\n this.links.set(links);\n\n const showDatas: string[][] = [];\n datas.forEach((data) => {\n const showData: string[] = [];\n showData.push(getValue(data, 'id', false));\n this.cells()?.forEach((cell) => {\n showData.push(getValue(data, cell.name, cell.date ?? false));\n });\n showDatas.push(showData);\n });\n this.showDatas.set(showDatas);\n });\n }\n}\n","<table>\n <thead>\n <tr>\n @for (cell of cells(); track cell.name) {\n <th [style.maxWidth]=\"cell.width\">{{ cell.label | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (data of showDatas(); track $index; let index = $index) {\n <tr>\n @for (cell of cells(); track cell.name; let indexData = $index) {\n <td\n [class.cursor]=\"links()[index]\"\n [routerLink]=\"links()[index]\"\n [style.maxWidth]=\"cell.width\"\n >\n {{ data[indexData + 1] }}\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import { ApiDto, JSONObject, JSONValue } from '@ng-vagabond-lab/ng-dsv/api';\nimport { formatDate } from '@ng-vagabond-lab/ng-dsv/date';\n\nexport const initTable = (\n datas: JSONObject[],\n max: number,\n): { links: null[]; datas: ({ [x: string]: JSONValue } | JSONObject[] | ApiDto)[] } => {\n const links = [];\n const newDatas = [];\n for (let i = 0, length = max > 0 ? max : datas.length; i < length; i++) {\n let data = datas?.[i];\n if (data) {\n links.push(data['id' as keyof JSONObject]);\n } else {\n data = { id: -1 * (i + 1) } as JSONObject;\n links.push(null);\n }\n newDatas.push(data);\n }\n\n return {\n links: links,\n datas: newDatas,\n };\n};\n\nexport const getValue = (obj: JSONObject, key: string, isDate: boolean): string => {\n let value: string = obj[key as keyof JSONObject];\n if (key.includes('.')) {\n const keys = key.split('.');\n let recurse: JSONObject = obj;\n keys.forEach((key2) => {\n if (recurse) {\n if (Array.isArray(recurse)) {\n recurse = (recurse as JSONObject[])\n .map((item) => item[key2 as keyof JSONObject])\n .join(',') as JSONObject;\n } else {\n recurse = recurse[key2 as keyof JSONObject];\n }\n }\n });\n value = recurse as string;\n }\n if (isDate && value) {\n value = formatDate(value, true, true);\n }\n return value;\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -13,19 +13,19 @@ class DsvThemeSwitchComponent {
13
13
  isLightMode() {
14
14
  return this.themeService.themeMode() === 'light';
15
15
  }
16
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvThemeSwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: DsvThemeSwitchComponent, isStandalone: true, selector: "dsv-theme-switch", ngImport: i0, template: "<dsv-button\n width=\"large\"\n color=\"inherit\"\n size=\"small\"\n [noHover]=\"true\"\n (callback)=\"switchTheme()\"\n [icon]=\"isLightMode() ? 'ri-contrast-2-line' : 'ri-contrast-2-fill'\"\n>\n</dsv-button>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }] });
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvThemeSwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.1", type: DsvThemeSwitchComponent, isStandalone: true, selector: "dsv-theme-switch", ngImport: i0, template: "<dsv-button\n width=\"large\"\n color=\"inherit\"\n size=\"small\"\n [noHover]=\"true\"\n (callback)=\"switchTheme()\"\n [icon]=\"isLightMode() ? 'ri-contrast-2-line' : 'ri-contrast-2-fill'\"\n>\n</dsv-button>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }] });
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvThemeSwitchComponent, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvThemeSwitchComponent, decorators: [{
20
20
  type: Component,
21
21
  args: [{ selector: 'dsv-theme-switch', imports: [CommonModule, DsvButtonComponent], template: "<dsv-button\n width=\"large\"\n color=\"inherit\"\n size=\"small\"\n [noHover]=\"true\"\n (callback)=\"switchTheme()\"\n [icon]=\"isLightMode() ? 'ri-contrast-2-line' : 'ri-contrast-2-fill'\"\n>\n</dsv-button>\n" }]
22
22
  }] });
23
23
 
24
24
  class DsvThemeComponent {
25
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvThemeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: DsvThemeComponent, isStandalone: true, selector: "dsv-theme", ngImport: i0, template: "<ng-content></ng-content>\n<div id=\"collapse\"></div>\n", styles: [":host{display:flex;flex:1;flex-direction:column;overflow:hidden;background-color:var(--background);color:var(--text)}:host #collapse{display:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:#0009}:host #collapse.show{display:inline}:host-context(body.light){--button-text: #ffffff;--background: #dcdcdc;--background-card: #ffffff;--background-header: #dcdcdc;--background-table-tr: #000000;--background-table-tr-text: var(--background-card);--scrollbar: #757575 #f5f5f5;--subtitle: #5a5959;--border: #cbcbcb;--text: #000000;--primary: #007bff;--secondary: #6c757d;--success: #189f37;--info: #1c7fc1;--warning: #a2821f;--error: #ca2535}:host-context(body.dark){--background: #000000;--background-card: #1f1f1f;--background-header: #1f1f1f;--background-table-tr: #DCDCDC;--background-table-tr-text: var(--background-card);--scrollbar: #a9a9a9 #383838;--subtitle: #ffffffb3;--border: #606060;--text: #ffffff;--primary: #007bff;--secondary: #6c757d;--success: #128c2e;--info: #106694;--warning: #ac8a24;--error: #df1126}\n"] });
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvThemeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.1", type: DsvThemeComponent, isStandalone: true, selector: "dsv-theme", ngImport: i0, template: "<ng-content></ng-content>\n<div id=\"collapse\"></div>\n", styles: [":host{display:flex;flex:1;flex-direction:column;overflow:hidden;background-color:var(--background);color:var(--text)}:host #collapse{display:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:#0009}:host #collapse.show{display:inline}:host-context(body.light){--button-text: #ffffff;--background: #dcdcdc;--background-card: #ffffff;--background-header: #dcdcdc;--background-table-tr: #000000;--background-table-tr-text: var(--background-card);--scrollbar: #757575 #f5f5f5;--subtitle: #5a5959;--border: #cbcbcb;--text: #000000;--primary: #007bff;--secondary: #6c757d;--success: #189f37;--info: #1c7fc1;--warning: #a2821f;--error: #ca2535}:host-context(body.dark){--background: #000000;--background-card: #1f1f1f;--background-header: #1f1f1f;--background-table-tr: #DCDCDC;--background-table-tr-text: var(--background-card);--scrollbar: #a9a9a9 #383838;--subtitle: #ffffffb3;--border: #606060;--text: #ffffff;--primary: #007bff;--secondary: #6c757d;--success: #128c2e;--info: #106694;--warning: #ac8a24;--error: #df1126}\n"] });
27
27
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DsvThemeComponent, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DsvThemeComponent, decorators: [{
29
29
  type: Component,
30
30
  args: [{ selector: 'dsv-theme', template: "<ng-content></ng-content>\n<div id=\"collapse\"></div>\n", styles: [":host{display:flex;flex:1;flex-direction:column;overflow:hidden;background-color:var(--background);color:var(--text)}:host #collapse{display:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:#0009}:host #collapse.show{display:inline}:host-context(body.light){--button-text: #ffffff;--background: #dcdcdc;--background-card: #ffffff;--background-header: #dcdcdc;--background-table-tr: #000000;--background-table-tr-text: var(--background-card);--scrollbar: #757575 #f5f5f5;--subtitle: #5a5959;--border: #cbcbcb;--text: #000000;--primary: #007bff;--secondary: #6c757d;--success: #189f37;--info: #1c7fc1;--warning: #a2821f;--error: #ca2535}:host-context(body.dark){--background: #000000;--background-card: #1f1f1f;--background-header: #1f1f1f;--background-table-tr: #DCDCDC;--background-table-tr-text: var(--background-card);--scrollbar: #a9a9a9 #383838;--subtitle: #ffffffb3;--border: #606060;--text: #ffffff;--primary: #007bff;--secondary: #6c757d;--success: #128c2e;--info: #106694;--warning: #ac8a24;--error: #df1126}\n"] }]
31
31
  }] });
@@ -33,7 +33,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
33
33
  class ThemeService {
34
34
  platformService = inject(PlatformService);
35
35
  storageService = inject(StorageService);
36
- themeMode = signal(this.storageService.getItem('theme') ?? 'light', ...(ngDevMode ? [{ debugName: "themeMode" }] : /* istanbul ignore next */ []));
36
+ themeMode = signal(this.storageService.getItem('theme') ?? 'light', /* @ts-ignore */
37
+ ...(ngDevMode ? [{ debugName: "themeMode" }] : /* istanbul ignore next */ []));
37
38
  constructor() {
38
39
  if (this.platformService.isPlatformBrowser()) {
39
40
  let html = document.getElementsByTagName('body')[0];
@@ -50,10 +51,10 @@ class ThemeService {
50
51
  html.classList.add(newMode);
51
52
  }
52
53
  }
53
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
54
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ThemeService, providedIn: 'root' });
54
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
55
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ThemeService, providedIn: 'root' });
55
56
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ThemeService, decorators: [{
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ThemeService, decorators: [{
57
58
  type: Injectable,
58
59
  args: [{
59
60
  providedIn: 'root',
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-theme.mjs","sources":["../../../projects/ng-dsv/ds/theme/component/switch/theme-switch.component.ts","../../../projects/ng-dsv/ds/theme/component/switch/theme-switch.component.html","../../../projects/ng-dsv/ds/theme/component/theme.component.ts","../../../projects/ng-dsv/ds/theme/component/theme.component.html","../../../projects/ng-dsv/ds/theme/service/theme.service.ts","../../../projects/ng-dsv/ds/theme/ng-vagabond-lab-ng-dsv-ds-theme.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { ThemeService } from '../../public-api';\n\nexport type Theme = {\n primary: string;\n text: string;\n};\n\n@Component({\n selector: 'dsv-theme-switch',\n imports: [CommonModule, DsvButtonComponent],\n templateUrl: `./theme-switch.component.html`,\n})\nexport class DsvThemeSwitchComponent {\n readonly themeService = inject(ThemeService);\n\n switchTheme(): void {\n this.themeService.switchTheme();\n }\n\n isLightMode(): boolean {\n return this.themeService.themeMode() === 'light';\n }\n}\n","<dsv-button\n width=\"large\"\n color=\"inherit\"\n size=\"small\"\n [noHover]=\"true\"\n (callback)=\"switchTheme()\"\n [icon]=\"isLightMode() ? 'ri-contrast-2-line' : 'ri-contrast-2-fill'\"\n>\n</dsv-button>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'dsv-theme',\n templateUrl: './theme.component.html',\n styleUrls: ['./theme.component.scss'],\n})\nexport class DsvThemeComponent {}\n","<ng-content></ng-content>\n<div id=\"collapse\"></div>\n","import { inject, Injectable, signal } from '@angular/core';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { StorageService } from '@ng-vagabond-lab/ng-dsv/storage';\n\nexport type ThemeMode = 'dark' | 'light';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n readonly platformService = inject(PlatformService);\n readonly storageService = inject(StorageService);\n\n readonly themeMode = signal<ThemeMode>((this.storageService.getItem('theme') as ThemeMode) ?? 'light');\n\n constructor() {\n if (this.platformService.isPlatformBrowser()) {\n let html = document.getElementsByTagName('body')[0];\n html.classList.add(this.themeMode());\n }\n }\n\n switchTheme(): void {\n if (this.platformService.isPlatformBrowser()) {\n let html = document.getElementsByTagName('body')[0];\n html.classList.remove(this.themeMode());\n\n let newMode: ThemeMode = this.themeMode() === 'dark' ? 'light' : 'dark';\n this.themeMode.set(newMode);\n this.storageService.setItem('theme', newMode);\n html.classList.add(newMode);\n }\n }\n}\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-ds-theme.mjs","sources":["../../../projects/ng-dsv/ds/theme/component/switch/theme-switch.component.ts","../../../projects/ng-dsv/ds/theme/component/switch/theme-switch.component.html","../../../projects/ng-dsv/ds/theme/component/theme.component.ts","../../../projects/ng-dsv/ds/theme/component/theme.component.html","../../../projects/ng-dsv/ds/theme/service/theme.service.ts","../../../projects/ng-dsv/ds/theme/ng-vagabond-lab-ng-dsv-ds-theme.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { ThemeService } from '../../public-api';\n\nexport type Theme = {\n primary: string;\n text: string;\n};\n\n@Component({\n selector: 'dsv-theme-switch',\n imports: [CommonModule, DsvButtonComponent],\n templateUrl: `./theme-switch.component.html`,\n})\nexport class DsvThemeSwitchComponent {\n readonly themeService = inject(ThemeService);\n\n switchTheme(): void {\n this.themeService.switchTheme();\n }\n\n isLightMode(): boolean {\n return this.themeService.themeMode() === 'light';\n }\n}\n","<dsv-button\n width=\"large\"\n color=\"inherit\"\n size=\"small\"\n [noHover]=\"true\"\n (callback)=\"switchTheme()\"\n [icon]=\"isLightMode() ? 'ri-contrast-2-line' : 'ri-contrast-2-fill'\"\n>\n</dsv-button>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'dsv-theme',\n templateUrl: './theme.component.html',\n styleUrls: ['./theme.component.scss'],\n})\nexport class DsvThemeComponent {}\n","<ng-content></ng-content>\n<div id=\"collapse\"></div>\n","import { inject, Injectable, signal } from '@angular/core';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { StorageService } from '@ng-vagabond-lab/ng-dsv/storage';\n\nexport type ThemeMode = 'dark' | 'light';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n readonly platformService = inject(PlatformService);\n readonly storageService = inject(StorageService);\n\n readonly themeMode = signal<ThemeMode>((this.storageService.getItem('theme') as ThemeMode) ?? 'light');\n\n constructor() {\n if (this.platformService.isPlatformBrowser()) {\n let html = document.getElementsByTagName('body')[0];\n html.classList.add(this.themeMode());\n }\n }\n\n switchTheme(): void {\n if (this.platformService.isPlatformBrowser()) {\n let html = document.getElementsByTagName('body')[0];\n html.classList.remove(this.themeMode());\n\n let newMode: ThemeMode = this.themeMode() === 'dark' ? 'light' : 'dark';\n this.themeMode.set(newMode);\n this.storageService.setItem('theme', newMode);\n html.classList.add(newMode);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}