@ajf/material 18.4.1 → 18.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +167 -2
- package/audio/src/audio-module.d.ts +7 -6
- package/esm2022/audio/src/audio-module.mjs +22 -4
- package/esm2022/audio/src/audio.mjs +6 -6
- package/esm2022/barcode/barcode.mjs +3 -3
- package/esm2022/calendar/calendar.mjs +2 -2
- package/esm2022/checkbox-group/checkbox-group-item.mjs +3 -3
- package/esm2022/form-builder/form-builder-service.mjs +4 -2
- package/esm2022/form-builder/node-properties.mjs +3 -13
- package/esm2022/forms/boolean-field.mjs +6 -5
- package/esm2022/forms/current-slide.mjs +92 -0
- package/esm2022/forms/date-input-field.mjs +7 -9
- package/esm2022/forms/display-field.mjs +2 -2
- package/esm2022/forms/empty-field.mjs +3 -3
- package/esm2022/forms/field-row.mjs +117 -0
- package/esm2022/forms/field.mjs +2 -2
- package/esm2022/forms/form.mjs +107 -13
- package/esm2022/forms/forms-module.mjs +26 -3
- package/esm2022/forms/input-field.mjs +6 -8
- package/esm2022/forms/multiple-choice-field.mjs +45 -10
- package/esm2022/forms/public_api.mjs +6 -1
- package/esm2022/forms/range-field.mjs +5 -6
- package/esm2022/forms/rep-strip.mjs +61 -0
- package/esm2022/forms/single-choice-field.mjs +26 -11
- package/esm2022/forms/slide-header.mjs +68 -0
- package/esm2022/forms/slide-stats.mjs +148 -0
- package/esm2022/forms/table-field.mjs +2 -2
- package/esm2022/forms/text-field.mjs +2 -2
- package/esm2022/forms/video-url-field.mjs +6 -8
- package/esm2022/geolocation/geolocation.mjs +4 -6
- package/esm2022/page-slider/page-slider.mjs +3 -3
- package/esm2022/signature/signature.mjs +5 -6
- package/esm2022/time/time-module.mjs +22 -4
- package/esm2022/time/time.mjs +4 -4
- package/fesm2022/ajf-material-audio.mjs +27 -9
- package/fesm2022/ajf-material-audio.mjs.map +1 -1
- package/fesm2022/ajf-material-barcode.mjs +2 -2
- package/fesm2022/ajf-material-barcode.mjs.map +1 -1
- package/fesm2022/ajf-material-calendar.mjs +2 -2
- package/fesm2022/ajf-material-calendar.mjs.map +1 -1
- package/fesm2022/ajf-material-checkbox-group.mjs +2 -2
- package/fesm2022/ajf-material-checkbox-group.mjs.map +1 -1
- package/fesm2022/ajf-material-form-builder.mjs +5 -13
- package/fesm2022/ajf-material-form-builder.mjs.map +1 -1
- package/fesm2022/ajf-material-forms.mjs +712 -99
- package/fesm2022/ajf-material-forms.mjs.map +1 -1
- package/fesm2022/ajf-material-geolocation.mjs +5 -7
- package/fesm2022/ajf-material-geolocation.mjs.map +1 -1
- package/fesm2022/ajf-material-page-slider.mjs +2 -2
- package/fesm2022/ajf-material-page-slider.mjs.map +1 -1
- package/fesm2022/ajf-material-signature.mjs +7 -8
- package/fesm2022/ajf-material-signature.mjs.map +1 -1
- package/fesm2022/ajf-material-time.mjs +24 -6
- package/fesm2022/ajf-material-time.mjs.map +1 -1
- package/forms/_theming.scss +142 -0
- package/forms/current-slide.d.ts +61 -0
- package/forms/field-row.d.ts +63 -0
- package/forms/form.d.ts +40 -3
- package/forms/forms-module.d.ts +57 -51
- package/forms/multiple-choice-field.d.ts +15 -1
- package/forms/public_api.d.ts +5 -0
- package/forms/rep-strip.d.ts +52 -0
- package/forms/single-choice-field.d.ts +7 -0
- package/forms/slide-header.d.ts +61 -0
- package/forms/slide-stats.d.ts +76 -0
- package/package.json +2 -2
- package/time/time-module.d.ts +4 -3
|
@@ -5,12 +5,13 @@ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
|
5
5
|
import * as i1 from '@angular/platform-browser';
|
|
6
6
|
import * as i2 from '@angular/common';
|
|
7
7
|
import { CommonModule } from '@angular/common';
|
|
8
|
-
import * as i3 from '@angular/material/
|
|
9
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
10
|
-
import * as i4 from '@angular/material/icon';
|
|
8
|
+
import * as i3 from '@angular/material/icon';
|
|
11
9
|
import { MatIconModule } from '@angular/material/icon';
|
|
12
|
-
import * as
|
|
10
|
+
import * as i4 from '@angular/material/tooltip';
|
|
13
11
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
12
|
+
import * as i5 from '@ngneat/transloco';
|
|
13
|
+
import { AjfTranslocoModule } from '@ajf/core/transloco';
|
|
14
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @license
|
|
@@ -125,7 +126,7 @@ class AjfAudioComponent extends AjfAudio {
|
|
|
125
126
|
useExisting: AjfAudioComponent,
|
|
126
127
|
multi: true,
|
|
127
128
|
},
|
|
128
|
-
], usesInheritance: true, ngImport: i0, template: "<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio
|
|
129
|
+
], usesInheritance: true, ngImport: i0, template: "<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio\">\n <!-- Nothing recorded yet -->\n <div class=\"ajf-audio-row\" *ngIf=\"!isRecording && !safeAudioSrc\">\n <span class=\"ajf-audio-state\">{{ 'empty' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <button\n type=\"button\"\n class=\"ajf-audio-action ajf-audio-rec\"\n (click)=\"startRecording()\"\n [disabled]=\"readonly\"\n [matTooltip]=\"'Start Recording' | transloco\"\n >\n <mat-icon>fiber_manual_record</mat-icon>\n <span>{{ 'Record' | transloco }}</span>\n </button>\n </div>\n </div>\n\n <!-- Recording in progress -->\n <div class=\"ajf-audio-row ajf-audio-recording\" *ngIf=\"isRecording\">\n <span class=\"ajf-audio-state\">{{ 'recording' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <button\n type=\"button\"\n class=\"ajf-audio-action ajf-audio-stop\"\n (click)=\"stopRecording()\"\n [matTooltip]=\"'Stop Recording' | transloco\"\n >\n <mat-icon>stop</mat-icon>\n </button>\n <span class=\"ajf-audio-wave\" aria-hidden=\"true\">\n <i></i><i></i><i></i><i></i><i></i><i></i>\n </span>\n </div>\n </div>\n\n <!-- A recording is held -->\n <div class=\"ajf-audio-row\" *ngIf=\"!isRecording && safeAudioSrc\">\n <span class=\"ajf-audio-state\">{{ 'recorded' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <audio [src]=\"safeAudioSrc\" controls></audio>\n </div>\n <button\n type=\"button\"\n class=\"ajf-audio-delete\"\n (click)=\"clearRecording()\"\n [disabled]=\"readonly\"\n [matTooltip]=\"'Delete Audio' | transloco\"\n >\n {{ 'Delete' | transloco }}\n </button>\n </div>\n </div>\n</div>\n", styles: ["ajf-audio{display:block;width:100%}ajf-audio .ajf-audio{display:flex;flex-direction:column;gap:8px}ajf-audio .ajf-audio-row{display:flex;align-items:center;gap:12px}ajf-audio .ajf-audio-state{flex:0 0 84px;color:var(--ajf-text-muted, #7a736a);font-family:var(--ajf-font-mono, monospace);font-size:11px;letter-spacing:.09em;text-align:right;text-transform:uppercase}ajf-audio .ajf-audio-box{display:flex;flex:1 1 auto;align-items:center;gap:12px;min-width:0;max-width:400px;box-sizing:border-box;min-height:var(--ajf-control-h, 44px);padding:0 12px;border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff)}ajf-audio .ajf-audio-action{display:inline-flex;align-items:center;gap:8px;padding:0;border:0;background:none;color:var(--ajf-text, #1c1a17);font-family:inherit;font-size:14px;cursor:pointer}ajf-audio .ajf-audio-action:disabled{color:var(--ajf-text-faint, #a49c92);cursor:default}ajf-audio .ajf-audio-action .mat-icon{color:var(--ajf-danger, #b8362b)}ajf-audio .ajf-audio-recording .ajf-audio-box{border-color:var(--ajf-danger, #b8362b);background:var(--ajf-danger-bg, #fdf1ef)}ajf-audio .ajf-audio-recording .ajf-audio-state{color:var(--ajf-danger, #b8362b)}ajf-audio .ajf-audio-wave{display:inline-flex;align-items:flex-end;gap:2px;height:18px}ajf-audio .ajf-audio-wave i{width:3px;background:var(--ajf-danger, #b8362b);animation:ajf-audio-pulse 1s ease-in-out infinite}ajf-audio .ajf-audio-wave i:nth-child(1){height:40%;animation-delay:0s}ajf-audio .ajf-audio-wave i:nth-child(2){height:80%;animation-delay:.1s}ajf-audio .ajf-audio-wave i:nth-child(3){height:55%;animation-delay:.2s}ajf-audio .ajf-audio-wave i:nth-child(4){height:100%;animation-delay:.3s}ajf-audio .ajf-audio-wave i:nth-child(5){height:65%;animation-delay:.4s}ajf-audio .ajf-audio-wave i:nth-child(6){height:35%;animation-delay:.5s}ajf-audio .ajf-audio-delete{padding:0 4px;border:0;background:none;color:var(--ajf-danger, #b8362b);font-family:inherit;font-size:14px;cursor:pointer}ajf-audio .ajf-audio-delete:hover:not(:disabled){text-decoration:underline}ajf-audio .ajf-audio-delete:disabled{color:var(--ajf-text-faint, #a49c92);cursor:default}ajf-audio audio{width:100%;min-width:0;height:36px;outline:none}@keyframes ajf-audio-pulse{0%,to{transform:scaleY(.6)}50%{transform:scaleY(1)}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i5.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
129
130
|
}
|
|
130
131
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioComponent, decorators: [{
|
|
131
132
|
type: Component,
|
|
@@ -135,7 +136,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
135
136
|
useExisting: AjfAudioComponent,
|
|
136
137
|
multi: true,
|
|
137
138
|
},
|
|
138
|
-
], template: "<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio
|
|
139
|
+
], template: "<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio\">\n <!-- Nothing recorded yet -->\n <div class=\"ajf-audio-row\" *ngIf=\"!isRecording && !safeAudioSrc\">\n <span class=\"ajf-audio-state\">{{ 'empty' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <button\n type=\"button\"\n class=\"ajf-audio-action ajf-audio-rec\"\n (click)=\"startRecording()\"\n [disabled]=\"readonly\"\n [matTooltip]=\"'Start Recording' | transloco\"\n >\n <mat-icon>fiber_manual_record</mat-icon>\n <span>{{ 'Record' | transloco }}</span>\n </button>\n </div>\n </div>\n\n <!-- Recording in progress -->\n <div class=\"ajf-audio-row ajf-audio-recording\" *ngIf=\"isRecording\">\n <span class=\"ajf-audio-state\">{{ 'recording' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <button\n type=\"button\"\n class=\"ajf-audio-action ajf-audio-stop\"\n (click)=\"stopRecording()\"\n [matTooltip]=\"'Stop Recording' | transloco\"\n >\n <mat-icon>stop</mat-icon>\n </button>\n <span class=\"ajf-audio-wave\" aria-hidden=\"true\">\n <i></i><i></i><i></i><i></i><i></i><i></i>\n </span>\n </div>\n </div>\n\n <!-- A recording is held -->\n <div class=\"ajf-audio-row\" *ngIf=\"!isRecording && safeAudioSrc\">\n <span class=\"ajf-audio-state\">{{ 'recorded' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <audio [src]=\"safeAudioSrc\" controls></audio>\n </div>\n <button\n type=\"button\"\n class=\"ajf-audio-delete\"\n (click)=\"clearRecording()\"\n [disabled]=\"readonly\"\n [matTooltip]=\"'Delete Audio' | transloco\"\n >\n {{ 'Delete' | transloco }}\n </button>\n </div>\n </div>\n</div>\n", styles: ["ajf-audio{display:block;width:100%}ajf-audio .ajf-audio{display:flex;flex-direction:column;gap:8px}ajf-audio .ajf-audio-row{display:flex;align-items:center;gap:12px}ajf-audio .ajf-audio-state{flex:0 0 84px;color:var(--ajf-text-muted, #7a736a);font-family:var(--ajf-font-mono, monospace);font-size:11px;letter-spacing:.09em;text-align:right;text-transform:uppercase}ajf-audio .ajf-audio-box{display:flex;flex:1 1 auto;align-items:center;gap:12px;min-width:0;max-width:400px;box-sizing:border-box;min-height:var(--ajf-control-h, 44px);padding:0 12px;border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff)}ajf-audio .ajf-audio-action{display:inline-flex;align-items:center;gap:8px;padding:0;border:0;background:none;color:var(--ajf-text, #1c1a17);font-family:inherit;font-size:14px;cursor:pointer}ajf-audio .ajf-audio-action:disabled{color:var(--ajf-text-faint, #a49c92);cursor:default}ajf-audio .ajf-audio-action .mat-icon{color:var(--ajf-danger, #b8362b)}ajf-audio .ajf-audio-recording .ajf-audio-box{border-color:var(--ajf-danger, #b8362b);background:var(--ajf-danger-bg, #fdf1ef)}ajf-audio .ajf-audio-recording .ajf-audio-state{color:var(--ajf-danger, #b8362b)}ajf-audio .ajf-audio-wave{display:inline-flex;align-items:flex-end;gap:2px;height:18px}ajf-audio .ajf-audio-wave i{width:3px;background:var(--ajf-danger, #b8362b);animation:ajf-audio-pulse 1s ease-in-out infinite}ajf-audio .ajf-audio-wave i:nth-child(1){height:40%;animation-delay:0s}ajf-audio .ajf-audio-wave i:nth-child(2){height:80%;animation-delay:.1s}ajf-audio .ajf-audio-wave i:nth-child(3){height:55%;animation-delay:.2s}ajf-audio .ajf-audio-wave i:nth-child(4){height:100%;animation-delay:.3s}ajf-audio .ajf-audio-wave i:nth-child(5){height:65%;animation-delay:.4s}ajf-audio .ajf-audio-wave i:nth-child(6){height:35%;animation-delay:.5s}ajf-audio .ajf-audio-delete{padding:0 4px;border:0;background:none;color:var(--ajf-danger, #b8362b);font-family:inherit;font-size:14px;cursor:pointer}ajf-audio .ajf-audio-delete:hover:not(:disabled){text-decoration:underline}ajf-audio .ajf-audio-delete:disabled{color:var(--ajf-text-faint, #a49c92);cursor:default}ajf-audio audio{width:100%;min-width:0;height:36px;outline:none}@keyframes ajf-audio-pulse{0%,to{transform:scaleY(.6)}50%{transform:scaleY(1)}}\n"] }]
|
|
139
140
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }], propDecorators: { readonly: [{
|
|
140
141
|
type: Input
|
|
141
142
|
}] } });
|
|
@@ -163,13 +164,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
163
164
|
*/
|
|
164
165
|
class AjfAudioModule {
|
|
165
166
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
166
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioModule, declarations: [AjfAudioComponent], imports: [
|
|
167
|
-
|
|
167
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioModule, declarations: [AjfAudioComponent], imports: [AjfTranslocoModule,
|
|
168
|
+
CommonModule,
|
|
169
|
+
FormsModule,
|
|
170
|
+
MatButtonModule,
|
|
171
|
+
MatIconModule,
|
|
172
|
+
MatTooltipModule], exports: [AjfAudioComponent] }); }
|
|
173
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioModule, imports: [AjfTranslocoModule,
|
|
174
|
+
CommonModule,
|
|
175
|
+
FormsModule,
|
|
176
|
+
MatButtonModule,
|
|
177
|
+
MatIconModule,
|
|
178
|
+
MatTooltipModule] }); }
|
|
168
179
|
}
|
|
169
180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioModule, decorators: [{
|
|
170
181
|
type: NgModule,
|
|
171
182
|
args: [{
|
|
172
|
-
imports: [
|
|
183
|
+
imports: [
|
|
184
|
+
AjfTranslocoModule,
|
|
185
|
+
CommonModule,
|
|
186
|
+
FormsModule,
|
|
187
|
+
MatButtonModule,
|
|
188
|
+
MatIconModule,
|
|
189
|
+
MatTooltipModule,
|
|
190
|
+
],
|
|
173
191
|
declarations: [AjfAudioComponent],
|
|
174
192
|
exports: [AjfAudioComponent],
|
|
175
193
|
}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ajf-material-audio.mjs","sources":["../../../projects/material/audio/src/audio.ts","../../../projects/material/audio/src/audio.html","../../../projects/material/audio/src/audio-module.ts","../../../projects/material/audio/src/public_api.ts","../../../projects/material/audio/index.ts","../../../projects/material/audio/ajf-material-audio.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfAudio} from '@ajf/core/audio';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n ViewEncapsulation,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DomSanitizer, SafeUrl} from '@angular/platform-browser';\n\n@Component({\n selector: 'ajf-audio',\n templateUrl: 'audio.html',\n styleUrls: ['audio.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AjfAudioComponent,\n multi: true,\n },\n ],\n})\nexport class AjfAudioComponent extends AjfAudio implements OnDestroy {\n @Input() readonly = false;\n\n isRecording = false;\n private mediaRecorder: MediaRecorder | null = null;\n private audioChunks: any[] = [];\n\n constructor(cdr: ChangeDetectorRef, private _sanitizer: DomSanitizer) {\n super(cdr);\n }\n\n ngOnDestroy(): void {\n this.stopRecording();\n }\n\n /**\n * Sanitizes the audio source for playback, either from the base64 content\n * or, as a fallback, from the stored url.\n */\n get safeAudioSrc(): SafeUrl | string | null {\n if (!this.value) return null;\n if (!this.value.content && this.value.deleteUrl) return null;\n\n const rawUrl =\n this.value.content && this.value.content.length ? this.value.content : this.value.url;\n if (!rawUrl) return null;\n\n return this._sanitizer.bypassSecurityTrustUrl(rawUrl);\n }\n\n async startRecording() {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({audio: true});\n this.mediaRecorder = new MediaRecorder(stream);\n this.audioChunks = [];\n\n this.mediaRecorder.ondataavailable = event => {\n this.audioChunks.push(event.data);\n };\n\n this.mediaRecorder.onstop = () => {\n const audioBlob = new Blob(this.audioChunks, {type: 'audio/webm'});\n\n const reader = new FileReader();\n reader.readAsDataURL(audioBlob);\n reader.onloadend = () => {\n const base64data = reader.result as string;\n const head = 'data:audio/webm;base64,';\n const audioFileSize = Math.round(((base64data.length - head.length) * 3) / 4);\n // Keeps the old url to delete old audio from storage\n this.value = {\n name: 'audio.webm',\n type: 'audio/webm',\n size: audioFileSize,\n content: base64data,\n url: this.value?.url ?? undefined,\n deleteUrl: false,\n };\n this._cdr.markForCheck();\n };\n };\n\n this.mediaRecorder.start();\n this.isRecording = true;\n this._cdr.markForCheck();\n } catch (err) {\n console.error('Error accessing microphone:', err);\n }\n }\n\n stopRecording() {\n if (this.mediaRecorder && this.isRecording) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.mediaRecorder.stream.getTracks().forEach(track => track.stop());\n this._cdr.markForCheck();\n }\n }\n\n /**\n * Clears the recording value and preview (keeps the old url to delete old audio from storage)\n */\n clearRecording(): void {\n this.audioChunks = [];\n this.value = {\n name: 'audio.webm',\n type: 'audio/webm',\n size: undefined,\n content: undefined,\n url: this.value?.url ?? undefined,\n deleteUrl: true,\n };\n this._cdr.markForCheck();\n }\n}\n","<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio-controls\">\n <!-- Start Recording Button -->\n <button\n mat-mini-fab\n color=\"primary\"\n (click)=\"startRecording()\"\n *ngIf=\"!isRecording && !safeAudioSrc\"\n [disabled]=\"readonly\"\n matTooltip=\"Start Recording\"\n >\n <mat-icon>mic</mat-icon>\n </button>\n\n <!-- Stop Recording Button -->\n <button\n mat-mini-fab\n color=\"warn\"\n (click)=\"stopRecording()\"\n *ngIf=\"isRecording\"\n matTooltip=\"Stop Recording\"\n >\n <mat-icon>stop</mat-icon>\n </button>\n\n <!-- Recording Indicator -->\n <div *ngIf=\"isRecording\" class=\"recording-indicator\">\n <mat-icon>fiber_manual_record</mat-icon>\n Recording...\n </div>\n\n <!-- Playback -->\n <audio *ngIf=\"safeAudioSrc\" [src]=\"safeAudioSrc\" controls></audio>\n\n <!-- Delete/Reset Button -->\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"clearRecording()\"\n *ngIf=\"safeAudioSrc\"\n [disabled]=\"readonly\"\n matTooltip=\"Delete Audio\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n</div>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\n\nimport {AjfAudioComponent} from './audio';\nimport {FormsModule} from '@angular/forms';\n\n@NgModule({\n imports: [CommonModule, FormsModule, MatButtonModule, MatIconModule, MatTooltipModule],\n declarations: [AjfAudioComponent],\n exports: [AjfAudioComponent],\n})\nexport class AjfAudioModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './audio';\nexport * from './audio-module';\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './src/public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ajf-material-audio.mjs","sources":["../../../projects/material/audio/src/audio.ts","../../../projects/material/audio/src/audio.html","../../../projects/material/audio/src/audio-module.ts","../../../projects/material/audio/src/public_api.ts","../../../projects/material/audio/index.ts","../../../projects/material/audio/ajf-material-audio.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfAudio} from '@ajf/core/audio';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n ViewEncapsulation,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DomSanitizer, SafeUrl} from '@angular/platform-browser';\n\n@Component({\n selector: 'ajf-audio',\n templateUrl: 'audio.html',\n styleUrls: ['audio.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AjfAudioComponent,\n multi: true,\n },\n ],\n})\nexport class AjfAudioComponent extends AjfAudio implements OnDestroy {\n @Input() readonly = false;\n\n isRecording = false;\n private mediaRecorder: MediaRecorder | null = null;\n private audioChunks: any[] = [];\n\n constructor(cdr: ChangeDetectorRef, private _sanitizer: DomSanitizer) {\n super(cdr);\n }\n\n ngOnDestroy(): void {\n this.stopRecording();\n }\n\n /**\n * Sanitizes the audio source for playback, either from the base64 content\n * or, as a fallback, from the stored url.\n */\n get safeAudioSrc(): SafeUrl | string | null {\n if (!this.value) return null;\n if (!this.value.content && this.value.deleteUrl) return null;\n\n const rawUrl =\n this.value.content && this.value.content.length ? this.value.content : this.value.url;\n if (!rawUrl) return null;\n\n return this._sanitizer.bypassSecurityTrustUrl(rawUrl);\n }\n\n async startRecording() {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({audio: true});\n this.mediaRecorder = new MediaRecorder(stream);\n this.audioChunks = [];\n\n this.mediaRecorder.ondataavailable = event => {\n this.audioChunks.push(event.data);\n };\n\n this.mediaRecorder.onstop = () => {\n const audioBlob = new Blob(this.audioChunks, {type: 'audio/webm'});\n\n const reader = new FileReader();\n reader.readAsDataURL(audioBlob);\n reader.onloadend = () => {\n const base64data = reader.result as string;\n const head = 'data:audio/webm;base64,';\n const audioFileSize = Math.round(((base64data.length - head.length) * 3) / 4);\n // Keeps the old url to delete old audio from storage\n this.value = {\n name: 'audio.webm',\n type: 'audio/webm',\n size: audioFileSize,\n content: base64data,\n url: this.value?.url ?? undefined,\n deleteUrl: false,\n };\n this._cdr.markForCheck();\n };\n };\n\n this.mediaRecorder.start();\n this.isRecording = true;\n this._cdr.markForCheck();\n } catch (err) {\n console.error('Error accessing microphone:', err);\n }\n }\n\n stopRecording() {\n if (this.mediaRecorder && this.isRecording) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.mediaRecorder.stream.getTracks().forEach(track => track.stop());\n this._cdr.markForCheck();\n }\n }\n\n /**\n * Clears the recording value and preview (keeps the old url to delete old audio from storage)\n */\n clearRecording(): void {\n this.audioChunks = [];\n this.value = {\n name: 'audio.webm',\n type: 'audio/webm',\n size: undefined,\n content: undefined,\n url: this.value?.url ?? undefined,\n deleteUrl: true,\n };\n this._cdr.markForCheck();\n }\n}\n","<div class=\"ajf-field-wrapper\">\n <div class=\"ajf-audio\">\n <!-- Nothing recorded yet -->\n <div class=\"ajf-audio-row\" *ngIf=\"!isRecording && !safeAudioSrc\">\n <span class=\"ajf-audio-state\">{{ 'empty' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <button\n type=\"button\"\n class=\"ajf-audio-action ajf-audio-rec\"\n (click)=\"startRecording()\"\n [disabled]=\"readonly\"\n [matTooltip]=\"'Start Recording' | transloco\"\n >\n <mat-icon>fiber_manual_record</mat-icon>\n <span>{{ 'Record' | transloco }}</span>\n </button>\n </div>\n </div>\n\n <!-- Recording in progress -->\n <div class=\"ajf-audio-row ajf-audio-recording\" *ngIf=\"isRecording\">\n <span class=\"ajf-audio-state\">{{ 'recording' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <button\n type=\"button\"\n class=\"ajf-audio-action ajf-audio-stop\"\n (click)=\"stopRecording()\"\n [matTooltip]=\"'Stop Recording' | transloco\"\n >\n <mat-icon>stop</mat-icon>\n </button>\n <span class=\"ajf-audio-wave\" aria-hidden=\"true\">\n <i></i><i></i><i></i><i></i><i></i><i></i>\n </span>\n </div>\n </div>\n\n <!-- A recording is held -->\n <div class=\"ajf-audio-row\" *ngIf=\"!isRecording && safeAudioSrc\">\n <span class=\"ajf-audio-state\">{{ 'recorded' | transloco }}</span>\n <div class=\"ajf-audio-box\">\n <audio [src]=\"safeAudioSrc\" controls></audio>\n </div>\n <button\n type=\"button\"\n class=\"ajf-audio-delete\"\n (click)=\"clearRecording()\"\n [disabled]=\"readonly\"\n [matTooltip]=\"'Delete Audio' | transloco\"\n >\n {{ 'Delete' | transloco }}\n </button>\n </div>\n </div>\n</div>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfTranslocoModule} from '@ajf/core/transloco';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\n\nimport {AjfAudioComponent} from './audio';\nimport {FormsModule} from '@angular/forms';\n\n@NgModule({\n imports: [\n AjfTranslocoModule,\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n ],\n declarations: [AjfAudioComponent],\n exports: [AjfAudioComponent],\n})\nexport class AjfAudioModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './audio';\nexport * from './audio-module';\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './src/public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -76,11 +76,11 @@ class AjfBarcodeComponent extends AjfBarcode {
|
|
|
76
76
|
this.resetSub.unsubscribe();
|
|
77
77
|
}
|
|
78
78
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfBarcodeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
79
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfBarcodeComponent, selector: "ajf-barcode", providers: [BARCODE_CONTROL_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"value; else barcode\">\n <div class=\"ajf-code-container\">\n <span>{{ value }}</span>\n <button
|
|
79
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfBarcodeComponent, selector: "ajf-barcode", providers: [BARCODE_CONTROL_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"value; else barcode\">\n <div class=\"ajf-code-container\">\n <span class=\"ajf-code-value\">{{ value }}</span>\n <button type=\"button\" class=\"ajf-code-scan\" (click)=\"reset()\">\n <mat-icon>qr_code_scanner</mat-icon>\n <span>{{ 'Scan' | transloco }}</span>\n </button>\n </div>\n</ng-container>\n<ng-template #barcode>\n <mat-tab-group (selectedIndexChange)=\"onTabChange($event)\">\n <mat-tab [label]=\"'Image'| transloco\">\n <div class=\"ajf-drop-container\">\n <div class=\"ajf-dropzone\" ajfDnd (file)=\"onSelectDrop($event)\">\n <div class=\"ajf-text-wrapper\">\n <div class=\"ajf-centered\">\n <a mat-button (click)=\"fileInput.click()\"\n >{{'Drop your image here or click to select'|transloco}}</a\n >\n </div>\n </div>\n </div>\n <div #barcodeImagePreview class=\"ajf-barcode-image-preview\"></div>\n </div>\n <input\n #fileInput\n type=\"file\"\n (change)=\"onSelectFile($event)\"\n multiple\n style=\"display: none\"\n />\n </mat-tab>\n <mat-tab [label]=\"'Camera'|transloco\">\n <mat-form-field\n appearance=\"fill\"\n class=\"ajf-video-device-select\"\n >\n <mat-label>Choose Video source</mat-label>\n <mat-select #videoSourceSelect\n ><mat-option *ngFor=\"let device of videoDevices|async\" [value]=\"device.deviceId\">\n {{device.label}}\n </mat-option></mat-select\n ></mat-form-field\n >\n <div class=\"ajf-barcode-video\">\n <ng-container *ngIf=\"supportsVideoStream; else noVideo\">\n <div #barcodeVideoPreview class=\"ajf-video-preview ajf-video-preview-hidden\">\n <div *ngIf=\"value && value.length > 0\">{{ value }}</div>\n </div>\n <video #barcodeVideo autoplay playsinline muted></video>\n </ng-container>\n <ng-template #noVideo>\n <div>NO VIDEO</div>\n </ng-template>\n </div>\n </mat-tab>\n </mat-tab-group>\n</ng-template>\n", styles: ["ajf-barcode{display:block;max-width:380px}ajf-barcode .mat-mdc-tab-header{--mat-tab-header-active-label-text-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-active-focus-label-text-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-active-hover-label-text-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-active-focus-indicator-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-active-hover-indicator-color: var(--ajf-accent, #0f4c5c);--mdc-tab-indicator-active-indicator-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-inactive-label-text-color: var(--ajf-text-muted, #7a736a);--mat-tab-header-label-text-size: 13px;border-bottom:1px solid var(--ajf-border, #e6e2dc)}ajf-barcode .ajf-code-container{display:inline-flex;flex-wrap:wrap;align-items:center;gap:10px}ajf-barcode .ajf-code-value{box-sizing:border-box;min-width:180px;min-height:var(--ajf-control-h, 44px);padding:0 12px;border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff);color:var(--ajf-text, #1c1a17);font-family:var(--ajf-font-mono, monospace);font-size:13px;line-height:calc(var(--ajf-control-h, 44px) - 2px)}ajf-barcode .ajf-code-scan{display:inline-flex;align-items:center;gap:8px;min-height:var(--ajf-control-h, 44px);padding:0 14px;border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff);color:var(--ajf-text, #1c1a17);font-family:inherit;font-size:14px;cursor:pointer}ajf-barcode .ajf-code-scan:hover{border-color:var(--ajf-accent, #0f4c5c)}ajf-barcode .ajf-code-scan .mat-icon{width:18px;height:18px;font-size:18px}ajf-barcode .ajf-drop-container{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-content:stretch;align-items:stretch;position:relative}ajf-barcode .ajf-drop-container .ajf-barcode-image-preview{position:absolute;inset:0;z-index:1;background-size:contain;background-repeat:no-repeat;background-position:center}ajf-barcode .ajf-drop-container .ajf-dropzone{z-index:2;order:0;flex:1 1 auto;align-self:auto;height:120px;display:table;background-color:var(--ajf-band, #faf8f5);border:dashed 1px var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);overflow:hidden}ajf-barcode .ajf-drop-container .ajf-dropzone .ajf-text-wrapper{display:table-cell;vertical-align:middle}ajf-barcode .ajf-drop-container .ajf-dropzone .ajf-centered{color:var(--ajf-text-muted, #7a736a);font-family:inherit;font-size:14px;text-align:center}ajf-barcode .ajf-video-device-select{width:100%}ajf-barcode .ajf-barcode-video{height:180px;position:relative}ajf-barcode .ajf-barcode-video>video{width:100%;height:100%}ajf-barcode .ajf-barcode-video>.ajf-video-preview{position:absolute;inset:0;width:100%;height:100%;z-index:5;border:3px solid #000000}ajf-barcode .ajf-barcode-video>.ajf-video-preview.ajf-video-preview-hidden{display:none;position:relative}ajf-barcode .ajf-barcode-video>.ajf-video-preview.ajf-video-preview-hidden>div{position:absolute;right:0;left:0;bottom:-1em;height:2em;box-sizing:border-box;padding:.5em;background-color:#fff;border-radius:.5em}ajf-barcode .ajf-barcode-video>.ajf-barcode-switch-camera{position:absolute;top:1em;right:1em;z-index:10;padding:.5em;border-radius:.5em;background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.AjfDndDirective, selector: "[ajfDnd]", outputs: ["file"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i8.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i8.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "pipe", type: i9.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
80
80
|
}
|
|
81
81
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfBarcodeComponent, decorators: [{
|
|
82
82
|
type: Component,
|
|
83
|
-
args: [{ selector: 'ajf-barcode', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [BARCODE_CONTROL_VALUE_ACCESSOR], template: "<ng-container *ngIf=\"value; else barcode\">\n <div class=\"ajf-code-container\">\n <span>{{ value }}</span>\n <button
|
|
83
|
+
args: [{ selector: 'ajf-barcode', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [BARCODE_CONTROL_VALUE_ACCESSOR], template: "<ng-container *ngIf=\"value; else barcode\">\n <div class=\"ajf-code-container\">\n <span class=\"ajf-code-value\">{{ value }}</span>\n <button type=\"button\" class=\"ajf-code-scan\" (click)=\"reset()\">\n <mat-icon>qr_code_scanner</mat-icon>\n <span>{{ 'Scan' | transloco }}</span>\n </button>\n </div>\n</ng-container>\n<ng-template #barcode>\n <mat-tab-group (selectedIndexChange)=\"onTabChange($event)\">\n <mat-tab [label]=\"'Image'| transloco\">\n <div class=\"ajf-drop-container\">\n <div class=\"ajf-dropzone\" ajfDnd (file)=\"onSelectDrop($event)\">\n <div class=\"ajf-text-wrapper\">\n <div class=\"ajf-centered\">\n <a mat-button (click)=\"fileInput.click()\"\n >{{'Drop your image here or click to select'|transloco}}</a\n >\n </div>\n </div>\n </div>\n <div #barcodeImagePreview class=\"ajf-barcode-image-preview\"></div>\n </div>\n <input\n #fileInput\n type=\"file\"\n (change)=\"onSelectFile($event)\"\n multiple\n style=\"display: none\"\n />\n </mat-tab>\n <mat-tab [label]=\"'Camera'|transloco\">\n <mat-form-field\n appearance=\"fill\"\n class=\"ajf-video-device-select\"\n >\n <mat-label>Choose Video source</mat-label>\n <mat-select #videoSourceSelect\n ><mat-option *ngFor=\"let device of videoDevices|async\" [value]=\"device.deviceId\">\n {{device.label}}\n </mat-option></mat-select\n ></mat-form-field\n >\n <div class=\"ajf-barcode-video\">\n <ng-container *ngIf=\"supportsVideoStream; else noVideo\">\n <div #barcodeVideoPreview class=\"ajf-video-preview ajf-video-preview-hidden\">\n <div *ngIf=\"value && value.length > 0\">{{ value }}</div>\n </div>\n <video #barcodeVideo autoplay playsinline muted></video>\n </ng-container>\n <ng-template #noVideo>\n <div>NO VIDEO</div>\n </ng-template>\n </div>\n </mat-tab>\n </mat-tab-group>\n</ng-template>\n", styles: ["ajf-barcode{display:block;max-width:380px}ajf-barcode .mat-mdc-tab-header{--mat-tab-header-active-label-text-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-active-focus-label-text-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-active-hover-label-text-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-active-focus-indicator-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-active-hover-indicator-color: var(--ajf-accent, #0f4c5c);--mdc-tab-indicator-active-indicator-color: var(--ajf-accent, #0f4c5c);--mat-tab-header-inactive-label-text-color: var(--ajf-text-muted, #7a736a);--mat-tab-header-label-text-size: 13px;border-bottom:1px solid var(--ajf-border, #e6e2dc)}ajf-barcode .ajf-code-container{display:inline-flex;flex-wrap:wrap;align-items:center;gap:10px}ajf-barcode .ajf-code-value{box-sizing:border-box;min-width:180px;min-height:var(--ajf-control-h, 44px);padding:0 12px;border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff);color:var(--ajf-text, #1c1a17);font-family:var(--ajf-font-mono, monospace);font-size:13px;line-height:calc(var(--ajf-control-h, 44px) - 2px)}ajf-barcode .ajf-code-scan{display:inline-flex;align-items:center;gap:8px;min-height:var(--ajf-control-h, 44px);padding:0 14px;border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff);color:var(--ajf-text, #1c1a17);font-family:inherit;font-size:14px;cursor:pointer}ajf-barcode .ajf-code-scan:hover{border-color:var(--ajf-accent, #0f4c5c)}ajf-barcode .ajf-code-scan .mat-icon{width:18px;height:18px;font-size:18px}ajf-barcode .ajf-drop-container{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-content:stretch;align-items:stretch;position:relative}ajf-barcode .ajf-drop-container .ajf-barcode-image-preview{position:absolute;inset:0;z-index:1;background-size:contain;background-repeat:no-repeat;background-position:center}ajf-barcode .ajf-drop-container .ajf-dropzone{z-index:2;order:0;flex:1 1 auto;align-self:auto;height:120px;display:table;background-color:var(--ajf-band, #faf8f5);border:dashed 1px var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);overflow:hidden}ajf-barcode .ajf-drop-container .ajf-dropzone .ajf-text-wrapper{display:table-cell;vertical-align:middle}ajf-barcode .ajf-drop-container .ajf-dropzone .ajf-centered{color:var(--ajf-text-muted, #7a736a);font-family:inherit;font-size:14px;text-align:center}ajf-barcode .ajf-video-device-select{width:100%}ajf-barcode .ajf-barcode-video{height:180px;position:relative}ajf-barcode .ajf-barcode-video>video{width:100%;height:100%}ajf-barcode .ajf-barcode-video>.ajf-video-preview{position:absolute;inset:0;width:100%;height:100%;z-index:5;border:3px solid #000000}ajf-barcode .ajf-barcode-video>.ajf-video-preview.ajf-video-preview-hidden{display:none;position:relative}ajf-barcode .ajf-barcode-video>.ajf-video-preview.ajf-video-preview-hidden>div{position:absolute;right:0;left:0;bottom:-1em;height:2em;box-sizing:border-box;padding:.5em;background-color:#fff;border-radius:.5em}ajf-barcode .ajf-barcode-video>.ajf-barcode-switch-camera{position:absolute;top:1em;right:1em;z-index:10;padding:.5em;border-radius:.5em;background-color:#fff}\n"] }]
|
|
84
84
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }] });
|
|
85
85
|
|
|
86
86
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ajf-material-barcode.mjs","sources":["../../../projects/material/barcode/src/barcode.ts","../../../projects/material/barcode/src/barcode.html","../../../projects/material/barcode/src/barcode-module.ts","../../../projects/material/barcode/src/public_api.ts","../../../projects/material/barcode/src/ajf-material-barcode.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfBarcode} from '@ajf/core/barcode';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n OnDestroy,\n Renderer2,\n ViewEncapsulation,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\n\nexport const BARCODE_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AjfBarcodeComponent),\n multi: true,\n};\n\n/**\n * Ajf barcode component.\n */\n@Component({\n selector: 'ajf-barcode',\n templateUrl: 'barcode.html',\n styleUrls: ['barcode.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [BARCODE_CONTROL_VALUE_ACCESSOR],\n})\nexport class AjfBarcodeComponent extends AjfBarcode implements OnDestroy, AfterViewInit {\n sourceSelectSub: Subscription = Subscription.EMPTY;\n resetSub: Subscription = Subscription.EMPTY;\n constructor(cdr: ChangeDetectorRef, renderer: Renderer2) {\n super(cdr, renderer);\n this.resetSub = this.resetEvt.subscribe(() => this.setupVideoSourceSub());\n }\n\n setupVideoSourceSub() {\n if (this.videoSourceSelect == undefined) return;\n this.sourceSelectSub.unsubscribe();\n this.sourceSelectSub = this.videoSourceSelect.valueChange\n .pipe(switchMap(() => this.getStream()))\n .subscribe(c => console.log(c));\n }\n\n ngAfterViewInit(): void {\n this.initVideoStreams();\n this.setupVideoSourceSub();\n }\n\n ngOnDestroy(): void {\n console.log('a');\n this.stopCurrentStream();\n this.sourceSelectSub.unsubscribe();\n this.resetSub.unsubscribe();\n }\n}\n","<ng-container *ngIf=\"value; else barcode\">\n <div class=\"ajf-code-container\">\n <span>{{ value }}</span>\n <button mat-raised-button (click)=\"reset()\">\n <mat-icon style=\"transform: rotate(90deg)\">format_align_justify</mat-icon>\n </button>\n </div>\n</ng-container>\n<ng-template #barcode>\n <mat-tab-group (selectedIndexChange)=\"onTabChange($event)\">\n <mat-tab [label]=\"'Image'| transloco\">\n <div class=\"ajf-drop-container\">\n <div class=\"ajf-dropzone\" ajfDnd (file)=\"onSelectDrop($event)\">\n <div class=\"ajf-text-wrapper\">\n <div class=\"ajf-centered\">\n <a mat-button (click)=\"fileInput.click()\"\n >{{'Drop your image here or click to select'|transloco}}</a\n >\n </div>\n </div>\n </div>\n <div #barcodeImagePreview class=\"ajf-barcode-image-preview\"></div>\n </div>\n <input\n #fileInput\n type=\"file\"\n (change)=\"onSelectFile($event)\"\n multiple\n style=\"display: none\"\n />\n </mat-tab>\n <mat-tab [label]=\"'Camera'|transloco\">\n <mat-form-field\n appearance=\"fill\"\n class=\"ajf-video-device-select\"\n >\n <mat-label>Choose Video source</mat-label>\n <mat-select #videoSourceSelect\n ><mat-option *ngFor=\"let device of videoDevices|async\" [value]=\"device.deviceId\">\n {{device.label}}\n </mat-option></mat-select\n ></mat-form-field\n >\n <div class=\"ajf-barcode-video\">\n <ng-container *ngIf=\"supportsVideoStream; else noVideo\">\n <div #barcodeVideoPreview class=\"ajf-video-preview ajf-video-preview-hidden\">\n <div *ngIf=\"value && value.length > 0\">{{ value }}</div>\n </div>\n <video #barcodeVideo autoplay playsinline muted></video>\n </ng-container>\n <ng-template #noVideo>\n <div>NO VIDEO</div>\n </ng-template>\n </div>\n </mat-tab>\n </mat-tab-group>\n</ng-template>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfCommonModule} from '@ajf/core/common';\nimport {AjfTranslocoModule} from '@ajf/core/transloco';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTabsModule} from '@angular/material/tabs';\n\nimport {AjfBarcodeComponent} from './barcode';\nimport {MatSelectModule} from '@angular/material/select';\nimport {FormsModule} from '@angular/forms';\n\n@NgModule({\n imports: [\n AjfCommonModule,\n AjfTranslocoModule,\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatSelectModule,\n MatTabsModule,\n ],\n declarations: [AjfBarcodeComponent],\n exports: [AjfBarcodeComponent],\n})\nexport class AjfBarcodeModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './barcode';\nexport * from './barcode-module';\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":"ajf-material-barcode.mjs","sources":["../../../projects/material/barcode/src/barcode.ts","../../../projects/material/barcode/src/barcode.html","../../../projects/material/barcode/src/barcode-module.ts","../../../projects/material/barcode/src/public_api.ts","../../../projects/material/barcode/src/ajf-material-barcode.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfBarcode} from '@ajf/core/barcode';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n OnDestroy,\n Renderer2,\n ViewEncapsulation,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\n\nexport const BARCODE_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AjfBarcodeComponent),\n multi: true,\n};\n\n/**\n * Ajf barcode component.\n */\n@Component({\n selector: 'ajf-barcode',\n templateUrl: 'barcode.html',\n styleUrls: ['barcode.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [BARCODE_CONTROL_VALUE_ACCESSOR],\n})\nexport class AjfBarcodeComponent extends AjfBarcode implements OnDestroy, AfterViewInit {\n sourceSelectSub: Subscription = Subscription.EMPTY;\n resetSub: Subscription = Subscription.EMPTY;\n constructor(cdr: ChangeDetectorRef, renderer: Renderer2) {\n super(cdr, renderer);\n this.resetSub = this.resetEvt.subscribe(() => this.setupVideoSourceSub());\n }\n\n setupVideoSourceSub() {\n if (this.videoSourceSelect == undefined) return;\n this.sourceSelectSub.unsubscribe();\n this.sourceSelectSub = this.videoSourceSelect.valueChange\n .pipe(switchMap(() => this.getStream()))\n .subscribe(c => console.log(c));\n }\n\n ngAfterViewInit(): void {\n this.initVideoStreams();\n this.setupVideoSourceSub();\n }\n\n ngOnDestroy(): void {\n console.log('a');\n this.stopCurrentStream();\n this.sourceSelectSub.unsubscribe();\n this.resetSub.unsubscribe();\n }\n}\n","<ng-container *ngIf=\"value; else barcode\">\n <div class=\"ajf-code-container\">\n <span class=\"ajf-code-value\">{{ value }}</span>\n <button type=\"button\" class=\"ajf-code-scan\" (click)=\"reset()\">\n <mat-icon>qr_code_scanner</mat-icon>\n <span>{{ 'Scan' | transloco }}</span>\n </button>\n </div>\n</ng-container>\n<ng-template #barcode>\n <mat-tab-group (selectedIndexChange)=\"onTabChange($event)\">\n <mat-tab [label]=\"'Image'| transloco\">\n <div class=\"ajf-drop-container\">\n <div class=\"ajf-dropzone\" ajfDnd (file)=\"onSelectDrop($event)\">\n <div class=\"ajf-text-wrapper\">\n <div class=\"ajf-centered\">\n <a mat-button (click)=\"fileInput.click()\"\n >{{'Drop your image here or click to select'|transloco}}</a\n >\n </div>\n </div>\n </div>\n <div #barcodeImagePreview class=\"ajf-barcode-image-preview\"></div>\n </div>\n <input\n #fileInput\n type=\"file\"\n (change)=\"onSelectFile($event)\"\n multiple\n style=\"display: none\"\n />\n </mat-tab>\n <mat-tab [label]=\"'Camera'|transloco\">\n <mat-form-field\n appearance=\"fill\"\n class=\"ajf-video-device-select\"\n >\n <mat-label>Choose Video source</mat-label>\n <mat-select #videoSourceSelect\n ><mat-option *ngFor=\"let device of videoDevices|async\" [value]=\"device.deviceId\">\n {{device.label}}\n </mat-option></mat-select\n ></mat-form-field\n >\n <div class=\"ajf-barcode-video\">\n <ng-container *ngIf=\"supportsVideoStream; else noVideo\">\n <div #barcodeVideoPreview class=\"ajf-video-preview ajf-video-preview-hidden\">\n <div *ngIf=\"value && value.length > 0\">{{ value }}</div>\n </div>\n <video #barcodeVideo autoplay playsinline muted></video>\n </ng-container>\n <ng-template #noVideo>\n <div>NO VIDEO</div>\n </ng-template>\n </div>\n </mat-tab>\n </mat-tab-group>\n</ng-template>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfCommonModule} from '@ajf/core/common';\nimport {AjfTranslocoModule} from '@ajf/core/transloco';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTabsModule} from '@angular/material/tabs';\n\nimport {AjfBarcodeComponent} from './barcode';\nimport {MatSelectModule} from '@angular/material/select';\nimport {FormsModule} from '@angular/forms';\n\n@NgModule({\n imports: [\n AjfCommonModule,\n AjfTranslocoModule,\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatSelectModule,\n MatTabsModule,\n ],\n declarations: [AjfBarcodeComponent],\n exports: [AjfBarcodeComponent],\n})\nexport class AjfBarcodeModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './barcode';\nexport * from './barcode-module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -44,11 +44,11 @@ class AjfCalendarComponent extends AjfCalendar {
|
|
|
44
44
|
super(cdr, service);
|
|
45
45
|
}
|
|
46
46
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfCalendarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfCalendarService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfCalendarComponent, selector: "ajf-calendar", providers: [CALENDAR_CONTROL_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0, template: "<div class=\"ajf-calendar-header\">\n <button (click)=\"prevPage()\" mat-mini-fab>←</button>\n <button (click)=\"previousViewMode()\" mat-button class=\"ajf-calendar-header-title\">\n {{ viewHeader | transloco }}\n </button>\n <button (click)=\"nextPage()\" mat-mini-fab>→</button>\n</div>\n<div class=\"ajf-calendar-row\" *ngIf=\"calendarHeaders.length > 0\">\n <div *ngFor=\"let calendarHeader of calendarHeaders\">\n {{ calendarHeader | transloco }}\n </div>\n</div>\n<div class=\"ajf-calendar-row\" *ngFor=\"let row of calendarRows\">\n <button\n *ngFor=\"let entry of row\"\n mat-raised-button\n [class.ajf-calendar-partial-selection]=\"entry.selected === 'partial'\"\n [disabled]=\"disabled || (entry.disabled || false)\"\n [color]=\"entry.selected !== 'none' ? 'warn' : undefined\"\n (click)=\"selectEntry(entry)\"\n >{{ entry|ajfCalendarEntryLabel }}</button>\n</div>\n", styles: ["ajf-calendar{display:flex;box-sizing:border-box;width:100%;height:320px;flex-direction:column}ajf-calendar .ajf-calendar-header,ajf-calendar .ajf-calendar-row{display:flex;box-sizing:border-box;width:100%;flex-direction:row}ajf-calendar .ajf-calendar-header{height:40px}ajf-calendar .ajf-calendar-header .ajf-calendar-header-title{flex:1;margin:0 10px}ajf-calendar .ajf-calendar-row{flex:1}ajf-calendar .ajf-calendar-row button,ajf-calendar .ajf-calendar-row div{flex:1;margin:3px}ajf-calendar .ajf-calendar-row div{line-height:40px;text-align:center}ajf-calendar .ajf-calendar-row .ajf-calendar-partial-selection :before{content:\"\";position:absolute;inset:0;background-color
|
|
47
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfCalendarComponent, selector: "ajf-calendar", providers: [CALENDAR_CONTROL_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0, template: "<div class=\"ajf-calendar-header\">\n <button (click)=\"prevPage()\" mat-mini-fab>←</button>\n <button (click)=\"previousViewMode()\" mat-button class=\"ajf-calendar-header-title\">\n {{ viewHeader | transloco }}\n </button>\n <button (click)=\"nextPage()\" mat-mini-fab>→</button>\n</div>\n<div class=\"ajf-calendar-row\" *ngIf=\"calendarHeaders.length > 0\">\n <div *ngFor=\"let calendarHeader of calendarHeaders\">\n {{ calendarHeader | transloco }}\n </div>\n</div>\n<div class=\"ajf-calendar-row\" *ngFor=\"let row of calendarRows\">\n <button\n *ngFor=\"let entry of row\"\n mat-raised-button\n [class.ajf-calendar-partial-selection]=\"entry.selected === 'partial'\"\n [disabled]=\"disabled || (entry.disabled || false)\"\n [color]=\"entry.selected !== 'none' ? 'warn' : undefined\"\n (click)=\"selectEntry(entry)\"\n >{{ entry|ajfCalendarEntryLabel }}</button>\n</div>\n", styles: ["ajf-calendar{display:flex;box-sizing:border-box;width:100%;max-width:420px;height:320px;flex-direction:column;padding:8px;border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff);font-family:var(--ajf-font-sans, sans-serif)}ajf-calendar .ajf-calendar-header,ajf-calendar .ajf-calendar-row{display:flex;box-sizing:border-box;width:100%;flex-direction:row}ajf-calendar .ajf-calendar-header{height:40px;align-items:center}ajf-calendar .ajf-calendar-header .ajf-calendar-header-title{flex:1;margin:0 10px;color:var(--ajf-text, #1c1a17);font-weight:600}ajf-calendar .ajf-calendar-header .mat-mdc-mini-fab{width:32px;height:32px;box-shadow:none;background:var(--ajf-band, #faf8f5);color:var(--ajf-text-muted, #7a736a)}ajf-calendar .ajf-calendar-row{flex:1}ajf-calendar .ajf-calendar-row button,ajf-calendar .ajf-calendar-row div{flex:1;margin:3px}ajf-calendar .ajf-calendar-row div{line-height:40px;text-align:center}ajf-calendar .ajf-calendar-row:first-of-type div{color:var(--ajf-text-muted, #7a736a);font-family:var(--ajf-font-mono, monospace);font-size:11px;letter-spacing:.06em;text-transform:uppercase}ajf-calendar .ajf-calendar-row .mat-mdc-raised-button{min-width:0;padding:0;border:1px solid transparent;border-radius:var(--ajf-radius, 4px);box-shadow:none;background:var(--ajf-surface, #fff);color:var(--ajf-text, #1c1a17);font-family:var(--ajf-font-mono, monospace);font-size:13px}ajf-calendar .ajf-calendar-row .mat-mdc-raised-button:hover:not([disabled]){background:var(--ajf-band, #faf8f5)}ajf-calendar .ajf-calendar-row .mat-mdc-raised-button[disabled]{color:var(--ajf-text-faint, #a49c92)}ajf-calendar .ajf-calendar-row .mat-mdc-raised-button.mat-warn{background:var(--ajf-accent, #0f4c5c);color:var(--ajf-accent-fg, #fff)}ajf-calendar .ajf-calendar-row .ajf-calendar-partial-selection :before{content:\"\";position:absolute;inset:0;background-color:color-mix(in srgb,var(--ajf-surface, #fff) 50%,transparent)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "pipe", type: i1.AjfCalendarEntryLabelPipe, name: "ajfCalendarEntryLabel" }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
48
48
|
}
|
|
49
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfCalendarComponent, decorators: [{
|
|
50
50
|
type: Component,
|
|
51
|
-
args: [{ selector: 'ajf-calendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [CALENDAR_CONTROL_VALUE_ACCESSOR], template: "<div class=\"ajf-calendar-header\">\n <button (click)=\"prevPage()\" mat-mini-fab>←</button>\n <button (click)=\"previousViewMode()\" mat-button class=\"ajf-calendar-header-title\">\n {{ viewHeader | transloco }}\n </button>\n <button (click)=\"nextPage()\" mat-mini-fab>→</button>\n</div>\n<div class=\"ajf-calendar-row\" *ngIf=\"calendarHeaders.length > 0\">\n <div *ngFor=\"let calendarHeader of calendarHeaders\">\n {{ calendarHeader | transloco }}\n </div>\n</div>\n<div class=\"ajf-calendar-row\" *ngFor=\"let row of calendarRows\">\n <button\n *ngFor=\"let entry of row\"\n mat-raised-button\n [class.ajf-calendar-partial-selection]=\"entry.selected === 'partial'\"\n [disabled]=\"disabled || (entry.disabled || false)\"\n [color]=\"entry.selected !== 'none' ? 'warn' : undefined\"\n (click)=\"selectEntry(entry)\"\n >{{ entry|ajfCalendarEntryLabel }}</button>\n</div>\n", styles: ["ajf-calendar{display:flex;box-sizing:border-box;width:100%;height:320px;flex-direction:column}ajf-calendar .ajf-calendar-header,ajf-calendar .ajf-calendar-row{display:flex;box-sizing:border-box;width:100%;flex-direction:row}ajf-calendar .ajf-calendar-header{height:40px}ajf-calendar .ajf-calendar-header .ajf-calendar-header-title{flex:1;margin:0 10px}ajf-calendar .ajf-calendar-row{flex:1}ajf-calendar .ajf-calendar-row button,ajf-calendar .ajf-calendar-row div{flex:1;margin:3px}ajf-calendar .ajf-calendar-row div{line-height:40px;text-align:center}ajf-calendar .ajf-calendar-row .ajf-calendar-partial-selection :before{content:\"\";position:absolute;inset:0;background-color
|
|
51
|
+
args: [{ selector: 'ajf-calendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [CALENDAR_CONTROL_VALUE_ACCESSOR], template: "<div class=\"ajf-calendar-header\">\n <button (click)=\"prevPage()\" mat-mini-fab>←</button>\n <button (click)=\"previousViewMode()\" mat-button class=\"ajf-calendar-header-title\">\n {{ viewHeader | transloco }}\n </button>\n <button (click)=\"nextPage()\" mat-mini-fab>→</button>\n</div>\n<div class=\"ajf-calendar-row\" *ngIf=\"calendarHeaders.length > 0\">\n <div *ngFor=\"let calendarHeader of calendarHeaders\">\n {{ calendarHeader | transloco }}\n </div>\n</div>\n<div class=\"ajf-calendar-row\" *ngFor=\"let row of calendarRows\">\n <button\n *ngFor=\"let entry of row\"\n mat-raised-button\n [class.ajf-calendar-partial-selection]=\"entry.selected === 'partial'\"\n [disabled]=\"disabled || (entry.disabled || false)\"\n [color]=\"entry.selected !== 'none' ? 'warn' : undefined\"\n (click)=\"selectEntry(entry)\"\n >{{ entry|ajfCalendarEntryLabel }}</button>\n</div>\n", styles: ["ajf-calendar{display:flex;box-sizing:border-box;width:100%;max-width:420px;height:320px;flex-direction:column;padding:8px;border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff);font-family:var(--ajf-font-sans, sans-serif)}ajf-calendar .ajf-calendar-header,ajf-calendar .ajf-calendar-row{display:flex;box-sizing:border-box;width:100%;flex-direction:row}ajf-calendar .ajf-calendar-header{height:40px;align-items:center}ajf-calendar .ajf-calendar-header .ajf-calendar-header-title{flex:1;margin:0 10px;color:var(--ajf-text, #1c1a17);font-weight:600}ajf-calendar .ajf-calendar-header .mat-mdc-mini-fab{width:32px;height:32px;box-shadow:none;background:var(--ajf-band, #faf8f5);color:var(--ajf-text-muted, #7a736a)}ajf-calendar .ajf-calendar-row{flex:1}ajf-calendar .ajf-calendar-row button,ajf-calendar .ajf-calendar-row div{flex:1;margin:3px}ajf-calendar .ajf-calendar-row div{line-height:40px;text-align:center}ajf-calendar .ajf-calendar-row:first-of-type div{color:var(--ajf-text-muted, #7a736a);font-family:var(--ajf-font-mono, monospace);font-size:11px;letter-spacing:.06em;text-transform:uppercase}ajf-calendar .ajf-calendar-row .mat-mdc-raised-button{min-width:0;padding:0;border:1px solid transparent;border-radius:var(--ajf-radius, 4px);box-shadow:none;background:var(--ajf-surface, #fff);color:var(--ajf-text, #1c1a17);font-family:var(--ajf-font-mono, monospace);font-size:13px}ajf-calendar .ajf-calendar-row .mat-mdc-raised-button:hover:not([disabled]){background:var(--ajf-band, #faf8f5)}ajf-calendar .ajf-calendar-row .mat-mdc-raised-button[disabled]{color:var(--ajf-text-faint, #a49c92)}ajf-calendar .ajf-calendar-row .mat-mdc-raised-button.mat-warn{background:var(--ajf-accent, #0f4c5c);color:var(--ajf-accent-fg, #fff)}ajf-calendar .ajf-calendar-row .ajf-calendar-partial-selection :before{content:\"\";position:absolute;inset:0;background-color:color-mix(in srgb,var(--ajf-surface, #fff) 50%,transparent)}\n"] }]
|
|
52
52
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfCalendarService }] });
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ajf-material-calendar.mjs","sources":["../../../projects/material/calendar/src/calendar.ts","../../../projects/material/calendar/src/calendar.html","../../../projects/material/calendar/src/calendar-module.ts","../../../projects/material/calendar/src/public_api.ts","../../../projects/material/calendar/src/ajf-material-calendar.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfCalendar, AjfCalendarService} from '@ajf/core/calendar';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\n\nexport const CALENDAR_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AjfCalendarComponent),\n multi: true,\n};\n\n/**\n * Ajf calendar component.\n */\n@Component({\n selector: 'ajf-calendar',\n templateUrl: 'calendar.html',\n styleUrls: ['calendar.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CALENDAR_CONTROL_VALUE_ACCESSOR],\n})\nexport class AjfCalendarComponent extends AjfCalendar {\n constructor(cdr: ChangeDetectorRef, service: AjfCalendarService) {\n super(cdr, service);\n }\n}\n","<div class=\"ajf-calendar-header\">\n <button (click)=\"prevPage()\" mat-mini-fab>←</button>\n <button (click)=\"previousViewMode()\" mat-button class=\"ajf-calendar-header-title\">\n {{ viewHeader | transloco }}\n </button>\n <button (click)=\"nextPage()\" mat-mini-fab>→</button>\n</div>\n<div class=\"ajf-calendar-row\" *ngIf=\"calendarHeaders.length > 0\">\n <div *ngFor=\"let calendarHeader of calendarHeaders\">\n {{ calendarHeader | transloco }}\n </div>\n</div>\n<div class=\"ajf-calendar-row\" *ngFor=\"let row of calendarRows\">\n <button\n *ngFor=\"let entry of row\"\n mat-raised-button\n [class.ajf-calendar-partial-selection]=\"entry.selected === 'partial'\"\n [disabled]=\"disabled || (entry.disabled || false)\"\n [color]=\"entry.selected !== 'none' ? 'warn' : undefined\"\n (click)=\"selectEntry(entry)\"\n >{{ entry|ajfCalendarEntryLabel }}</button>\n</div>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfCalendarModule as CoreModule} from '@ajf/core/calendar';\nimport {AjfTranslocoModule} from '@ajf/core/transloco';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\n\nimport {AjfCalendarComponent} from './calendar';\n\n@NgModule({\n imports: [CommonModule, CoreModule, FormsModule, MatButtonModule, AjfTranslocoModule],\n declarations: [AjfCalendarComponent],\n exports: [AjfCalendarComponent],\n})\nexport class AjfCalendarModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './calendar';\nexport * from './calendar-module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["CoreModule"],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;AAoBG;AAYU,MAAA,+BAA+B,GAAQ;AAClD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,IAAA,KAAK,EAAE,IAAI;;AAGb;;AAEG;AASG,MAAO,oBAAqB,SAAQ,WAAW,CAAA;IACnD,WAAY,CAAA,GAAsB,EAAE,OAA2B,EAAA;AAC7D,QAAA,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;;+GAFV,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAFpB,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,CAAC,+BAA+B,CAAC,iDC/C9C,u6BAsBA,EAAA,MAAA,EAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"ajf-material-calendar.mjs","sources":["../../../projects/material/calendar/src/calendar.ts","../../../projects/material/calendar/src/calendar.html","../../../projects/material/calendar/src/calendar-module.ts","../../../projects/material/calendar/src/public_api.ts","../../../projects/material/calendar/src/ajf-material-calendar.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfCalendar, AjfCalendarService} from '@ajf/core/calendar';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\n\nexport const CALENDAR_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AjfCalendarComponent),\n multi: true,\n};\n\n/**\n * Ajf calendar component.\n */\n@Component({\n selector: 'ajf-calendar',\n templateUrl: 'calendar.html',\n styleUrls: ['calendar.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CALENDAR_CONTROL_VALUE_ACCESSOR],\n})\nexport class AjfCalendarComponent extends AjfCalendar {\n constructor(cdr: ChangeDetectorRef, service: AjfCalendarService) {\n super(cdr, service);\n }\n}\n","<div class=\"ajf-calendar-header\">\n <button (click)=\"prevPage()\" mat-mini-fab>←</button>\n <button (click)=\"previousViewMode()\" mat-button class=\"ajf-calendar-header-title\">\n {{ viewHeader | transloco }}\n </button>\n <button (click)=\"nextPage()\" mat-mini-fab>→</button>\n</div>\n<div class=\"ajf-calendar-row\" *ngIf=\"calendarHeaders.length > 0\">\n <div *ngFor=\"let calendarHeader of calendarHeaders\">\n {{ calendarHeader | transloco }}\n </div>\n</div>\n<div class=\"ajf-calendar-row\" *ngFor=\"let row of calendarRows\">\n <button\n *ngFor=\"let entry of row\"\n mat-raised-button\n [class.ajf-calendar-partial-selection]=\"entry.selected === 'partial'\"\n [disabled]=\"disabled || (entry.disabled || false)\"\n [color]=\"entry.selected !== 'none' ? 'warn' : undefined\"\n (click)=\"selectEntry(entry)\"\n >{{ entry|ajfCalendarEntryLabel }}</button>\n</div>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfCalendarModule as CoreModule} from '@ajf/core/calendar';\nimport {AjfTranslocoModule} from '@ajf/core/transloco';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\n\nimport {AjfCalendarComponent} from './calendar';\n\n@NgModule({\n imports: [CommonModule, CoreModule, FormsModule, MatButtonModule, AjfTranslocoModule],\n declarations: [AjfCalendarComponent],\n exports: [AjfCalendarComponent],\n})\nexport class AjfCalendarModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './calendar';\nexport * from './calendar-module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["CoreModule"],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ class CheckboxGroupItem extends AjfCheckboxGroupItem {
|
|
|
40
40
|
this.notCheckedIcon = 'check_box_outline_blank';
|
|
41
41
|
}
|
|
42
42
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CheckboxGroupItem, deps: [{ token: i1.AjfCheckboxGroup, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CheckboxGroupItem, selector: "ajf-checkbox-group-item", host: { properties: { "attr.id": "id", "class.ajf-checkbox-group-checked": "checked", "class.ajf-checkbox-group-disable": "disabled" } }, usesInheritance: true, ngImport: i0, template: "<button
|
|
43
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CheckboxGroupItem, selector: "ajf-checkbox-group-item", host: { properties: { "attr.id": "id", "class.ajf-checkbox-group-checked": "checked", "class.ajf-checkbox-group-disable": "disabled" } }, usesInheritance: true, ngImport: i0, template: "<button\n mat-button\n (click)=\"onInputChange($event)\"\n type=\"button\"\n [id]=\"checkboxId | async\"\n [class.ajf-checked]=\"checkedState | async\"\n [attr.aria-checked]=\"checkedState | async\"\n [attr.aria-disabled]=\"disabledState | async\"\n>\n <mat-icon>{{ icon | async }}</mat-icon>\n <span class=\"ajf-checkbox-group-content\">\n <ng-content></ng-content>\n </span>\n</button>\n", styles: ["ajf-checkbox-group-item{display:inline-flex;min-width:0}ajf-checkbox-group-item .mat-mdc-button{--mdc-text-button-label-text-weight: 400;--mat-text-button-horizontal-padding: 14px;--mat-text-button-with-icon-horizontal-padding: 14px;font-weight:400;height:auto;display:inline-flex;align-items:center;justify-content:flex-start;gap:8px;box-sizing:border-box;min-width:0;min-height:var(--ajf-control-h, 44px);border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff);color:var(--ajf-text, #1c1a17);font-size:14px;letter-spacing:normal}ajf-checkbox-group-item .mat-mdc-button:hover{border-color:var(--ajf-accent, #0f4c5c)}ajf-checkbox-group-item .mat-mdc-button .mat-icon{flex:0 0 auto;width:18px;height:18px;margin:0;color:var(--ajf-text-faint, #a49c92);font-size:18px}ajf-checkbox-group-item .mat-mdc-button .mdc-button__label{min-width:0;overflow-wrap:anywhere;text-align:left}ajf-checkbox-group-item .mat-mdc-button.ajf-checked{border-color:var(--ajf-accent, #0f4c5c);background:var(--ajf-accent-soft, #e8f1f5);color:var(--ajf-accent, #0f4c5c)}ajf-checkbox-group-item .mat-mdc-button.ajf-checked .mat-icon{color:var(--ajf-accent, #0f4c5c)}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
44
44
|
}
|
|
45
45
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CheckboxGroupItem, decorators: [{
|
|
46
46
|
type: Component,
|
|
@@ -48,7 +48,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
48
48
|
'[attr.id]': 'id',
|
|
49
49
|
'[class.ajf-checkbox-group-checked]': 'checked',
|
|
50
50
|
'[class.ajf-checkbox-group-disable]': 'disabled',
|
|
51
|
-
}, template: "<button
|
|
51
|
+
}, template: "<button\n mat-button\n (click)=\"onInputChange($event)\"\n type=\"button\"\n [id]=\"checkboxId | async\"\n [class.ajf-checked]=\"checkedState | async\"\n [attr.aria-checked]=\"checkedState | async\"\n [attr.aria-disabled]=\"disabledState | async\"\n>\n <mat-icon>{{ icon | async }}</mat-icon>\n <span class=\"ajf-checkbox-group-content\">\n <ng-content></ng-content>\n </span>\n</button>\n", styles: ["ajf-checkbox-group-item{display:inline-flex;min-width:0}ajf-checkbox-group-item .mat-mdc-button{--mdc-text-button-label-text-weight: 400;--mat-text-button-horizontal-padding: 14px;--mat-text-button-with-icon-horizontal-padding: 14px;font-weight:400;height:auto;display:inline-flex;align-items:center;justify-content:flex-start;gap:8px;box-sizing:border-box;min-width:0;min-height:var(--ajf-control-h, 44px);border:1px solid var(--ajf-border-strong, #d5cfc6);border-radius:var(--ajf-radius, 4px);background:var(--ajf-surface, #fff);color:var(--ajf-text, #1c1a17);font-size:14px;letter-spacing:normal}ajf-checkbox-group-item .mat-mdc-button:hover{border-color:var(--ajf-accent, #0f4c5c)}ajf-checkbox-group-item .mat-mdc-button .mat-icon{flex:0 0 auto;width:18px;height:18px;margin:0;color:var(--ajf-text-faint, #a49c92);font-size:18px}ajf-checkbox-group-item .mat-mdc-button .mdc-button__label{min-width:0;overflow-wrap:anywhere;text-align:left}ajf-checkbox-group-item .mat-mdc-button.ajf-checked{border-color:var(--ajf-accent, #0f4c5c);background:var(--ajf-accent-soft, #e8f1f5);color:var(--ajf-accent, #0f4c5c)}ajf-checkbox-group-item .mat-mdc-button.ajf-checked .mat-icon{color:var(--ajf-accent, #0f4c5c)}\n"] }]
|
|
52
52
|
}], ctorParameters: () => [{ type: i1.AjfCheckboxGroup, decorators: [{
|
|
53
53
|
type: Optional
|
|
54
54
|
}] }] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ajf-material-checkbox-group.mjs","sources":["../../../projects/material/checkbox-group/src/checkbox-group-item.ts","../../../projects/material/checkbox-group/src/checkbox-group-item.html","../../../projects/material/checkbox-group/src/checkbox-group-module.ts","../../../projects/material/checkbox-group/src/public_api.ts","../../../projects/material/checkbox-group/src/ajf-material-checkbox-group.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {\n AjfCheckboxGroup,\n AjfCheckboxGroupItem as CoreCheckboxGroupItem,\n} from '@ajf/core/checkbox-group';\nimport {ChangeDetectionStrategy, Component, Optional, ViewEncapsulation} from '@angular/core';\n\n@Component({\n selector: 'ajf-checkbox-group-item',\n templateUrl: 'checkbox-group-item.html',\n styleUrls: ['checkbox-group-item.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'id',\n '[class.ajf-checkbox-group-checked]': 'checked',\n '[class.ajf-checkbox-group-disable]': 'disabled',\n },\n})\nexport class CheckboxGroupItem<T> extends CoreCheckboxGroupItem<T> {\n constructor(\n // `AjfCheckboxGroupItem` is commonly used in combination with a `AjfCheckboxGroup`.\n // tslint:disable-next-line: lightweight-tokens\n @Optional() checkboxGroup: AjfCheckboxGroup<T>,\n ) {\n super(checkboxGroup);\n this.checkedIcon = 'check_box';\n this.notCheckedIcon = 'check_box_outline_blank';\n }\n}\n","<button
|
|
1
|
+
{"version":3,"file":"ajf-material-checkbox-group.mjs","sources":["../../../projects/material/checkbox-group/src/checkbox-group-item.ts","../../../projects/material/checkbox-group/src/checkbox-group-item.html","../../../projects/material/checkbox-group/src/checkbox-group-module.ts","../../../projects/material/checkbox-group/src/public_api.ts","../../../projects/material/checkbox-group/src/ajf-material-checkbox-group.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {\n AjfCheckboxGroup,\n AjfCheckboxGroupItem as CoreCheckboxGroupItem,\n} from '@ajf/core/checkbox-group';\nimport {ChangeDetectionStrategy, Component, Optional, ViewEncapsulation} from '@angular/core';\n\n@Component({\n selector: 'ajf-checkbox-group-item',\n templateUrl: 'checkbox-group-item.html',\n styleUrls: ['checkbox-group-item.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.id]': 'id',\n '[class.ajf-checkbox-group-checked]': 'checked',\n '[class.ajf-checkbox-group-disable]': 'disabled',\n },\n})\nexport class CheckboxGroupItem<T> extends CoreCheckboxGroupItem<T> {\n constructor(\n // `AjfCheckboxGroupItem` is commonly used in combination with a `AjfCheckboxGroup`.\n // tslint:disable-next-line: lightweight-tokens\n @Optional() checkboxGroup: AjfCheckboxGroup<T>,\n ) {\n super(checkboxGroup);\n this.checkedIcon = 'check_box';\n this.notCheckedIcon = 'check_box_outline_blank';\n }\n}\n","<button\n mat-button\n (click)=\"onInputChange($event)\"\n type=\"button\"\n [id]=\"checkboxId | async\"\n [class.ajf-checked]=\"checkedState | async\"\n [attr.aria-checked]=\"checkedState | async\"\n [attr.aria-disabled]=\"disabledState | async\"\n>\n <mat-icon>{{ icon | async }}</mat-icon>\n <span class=\"ajf-checkbox-group-content\">\n <ng-content></ng-content>\n </span>\n</button>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfCheckboxGroupModule as CoreCheckboxGroupModule} from '@ajf/core/checkbox-group';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\n\nimport {CheckboxGroupItem} from './checkbox-group-item';\n\n@NgModule({\n imports: [CommonModule, CoreCheckboxGroupModule, MatButtonModule, MatIconModule],\n declarations: [CheckboxGroupItem],\n exports: [CheckboxGroupItem, CoreCheckboxGroupModule],\n})\nexport class AjfCheckboxGroupModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './checkbox-group-item';\nexport * from './checkbox-group-module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["CoreCheckboxGroupItem","CoreCheckboxGroupModule"],"mappings":"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"}
|