carriera-intern 1.1.130 → 1.1.131
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/carriera-intern.mjs +51 -13
- package/fesm2022/carriera-intern.mjs.map +1 -1
- package/index.d.ts +8 -2
- package/package.json +1 -1
|
@@ -12135,8 +12135,12 @@ const PREVIEW_HEIGHT = 81;
|
|
|
12135
12135
|
const EXPORT_SCALE = 2;
|
|
12136
12136
|
const EXPORT_WIDTH = PREVIEW_WIDTH * EXPORT_SCALE;
|
|
12137
12137
|
const EXPORT_HEIGHT = PREVIEW_HEIGHT * EXPORT_SCALE;
|
|
12138
|
-
const
|
|
12138
|
+
const DEFAULT_MOBILE_BREAKPOINT = 575;
|
|
12139
|
+
const PHONE_VIEWPORT_MAX_HEIGHT = 500;
|
|
12139
12140
|
const FULLSCREEN_EDGE_GAP = 20;
|
|
12141
|
+
function phoneViewportQuery(maxWidthPx) {
|
|
12142
|
+
return `(max-width: ${maxWidthPx}px), (max-height: ${PHONE_VIEWPORT_MAX_HEIGHT}px)`;
|
|
12143
|
+
}
|
|
12140
12144
|
const INK_STROKE_STYLE = {
|
|
12141
12145
|
strokeStyle: '#000000',
|
|
12142
12146
|
fillStyle: '#000000',
|
|
@@ -12233,12 +12237,13 @@ function toPadPoint(event, canvas, padSize) {
|
|
|
12233
12237
|
}
|
|
12234
12238
|
|
|
12235
12239
|
// constants
|
|
12236
|
-
function needsFullscreenPad() {
|
|
12240
|
+
function needsFullscreenPad(maxWidthPx) {
|
|
12237
12241
|
if (typeof window === 'undefined') {
|
|
12238
12242
|
return false;
|
|
12239
12243
|
}
|
|
12240
12244
|
const shortSide = Math.min(window.innerWidth, window.innerHeight);
|
|
12241
|
-
return shortSide <=
|
|
12245
|
+
return (shortSide <= PHONE_VIEWPORT_MAX_HEIGHT ||
|
|
12246
|
+
window.matchMedia(phoneViewportQuery(maxWidthPx)).matches);
|
|
12242
12247
|
}
|
|
12243
12248
|
function buildFullscreenStage(vw, vh) {
|
|
12244
12249
|
const margin = FULLSCREEN_EDGE_GAP * 2;
|
|
@@ -12263,7 +12268,7 @@ function cloneStrokes(strokes) {
|
|
|
12263
12268
|
return strokes.map((stroke) => stroke.map((point) => ({ ...point })));
|
|
12264
12269
|
}
|
|
12265
12270
|
|
|
12266
|
-
function createSignatureVm(
|
|
12271
|
+
function createSignatureVm(useSavedSignature) {
|
|
12267
12272
|
const isPadOpen = signal(false, ...(ngDevMode ? [{ debugName: "isPadOpen" }] : []));
|
|
12268
12273
|
const previewSrc = signal(null, ...(ngDevMode ? [{ debugName: "previewSrc" }] : []));
|
|
12269
12274
|
const locksFullscreen = signal(false, ...(ngDevMode ? [{ debugName: "locksFullscreen" }] : []));
|
|
@@ -12272,7 +12277,7 @@ function createSignatureVm(savedSignature) {
|
|
|
12272
12277
|
const isStrokeInProgress = signal(false, ...(ngDevMode ? [{ debugName: "isStrokeInProgress" }] : []));
|
|
12273
12278
|
const padSize = signal({ width: 0, height: 0 }, ...(ngDevMode ? [{ debugName: "padSize" }] : []));
|
|
12274
12279
|
const hasInk = computed(() => !!completedStrokes().length || isStrokeInProgress(), ...(ngDevMode ? [{ debugName: "hasInk" }] : []));
|
|
12275
|
-
const hasExistingSignature = computed(() => !!(
|
|
12280
|
+
const hasExistingSignature = computed(() => !!useSavedSignature(), ...(ngDevMode ? [{ debugName: "hasExistingSignature" }] : []));
|
|
12276
12281
|
const showsPreview = computed(() => !!previewSrc() && !isPadOpen(), ...(ngDevMode ? [{ debugName: "showsPreview" }] : []));
|
|
12277
12282
|
const isFullscreenOpen = computed(() => isPadOpen() && locksFullscreen(), ...(ngDevMode ? [{ debugName: "isFullscreenOpen" }] : []));
|
|
12278
12283
|
return {
|
|
@@ -12298,15 +12303,19 @@ class SignatureComponent {
|
|
|
12298
12303
|
padSizeRef = viewChild('padSize', ...(ngDevMode ? [{ debugName: "padSizeRef" }] : []));
|
|
12299
12304
|
// inputs
|
|
12300
12305
|
savedSignature = input(null, ...(ngDevMode ? [{ debugName: "savedSignature" }] : []));
|
|
12306
|
+
useSavedSignature = input(null, ...(ngDevMode ? [{ debugName: "useSavedSignature" }] : []));
|
|
12301
12307
|
requiredInvalid = input(false, ...(ngDevMode ? [{ debugName: "requiredInvalid" }] : []));
|
|
12308
|
+
isDisabled = input(false, ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
|
|
12309
|
+
mobileBreakpoint = input(DEFAULT_MOBILE_BREAKPOINT, ...(ngDevMode ? [{ debugName: "mobileBreakpoint" }] : []));
|
|
12302
12310
|
// outputs
|
|
12303
12311
|
signatureChange = output();
|
|
12304
12312
|
// constants
|
|
12305
12313
|
previewWidth = PREVIEW_WIDTH;
|
|
12306
12314
|
previewHeight = PREVIEW_HEIGHT;
|
|
12307
12315
|
// view models
|
|
12308
|
-
viewModel = createSignatureVm(this.
|
|
12316
|
+
viewModel = createSignatureVm(this.useSavedSignature);
|
|
12309
12317
|
// state
|
|
12318
|
+
isMobileViewport = signal(false, ...(ngDevMode ? [{ debugName: "isMobileViewport" }] : []));
|
|
12310
12319
|
canvasContext = null;
|
|
12311
12320
|
confirmedInk = [];
|
|
12312
12321
|
padSizeObserver = null;
|
|
@@ -12315,6 +12324,7 @@ class SignatureComponent {
|
|
|
12315
12324
|
prevPadHeight = 0;
|
|
12316
12325
|
constructor() {
|
|
12317
12326
|
this.setupSavedSignatureSync();
|
|
12327
|
+
this.setupMobileBreakpointWatch();
|
|
12318
12328
|
this.setupPadSizeWatch();
|
|
12319
12329
|
this.setupCanvasSync();
|
|
12320
12330
|
this.setupFullscreenViewport();
|
|
@@ -12329,6 +12339,23 @@ class SignatureComponent {
|
|
|
12329
12339
|
this.viewModel.previewSrc.set(saved ? toSignatureDataUrl(saved) : null);
|
|
12330
12340
|
});
|
|
12331
12341
|
}
|
|
12342
|
+
setupMobileBreakpointWatch() {
|
|
12343
|
+
effect((onCleanup) => {
|
|
12344
|
+
if (typeof window === 'undefined') {
|
|
12345
|
+
return;
|
|
12346
|
+
}
|
|
12347
|
+
const maxWidthPx = this.mobileBreakpoint();
|
|
12348
|
+
const mediaQuery = window.matchMedia(`(max-width: ${maxWidthPx}px)`);
|
|
12349
|
+
const syncViewport = () => {
|
|
12350
|
+
this.isMobileViewport.set(mediaQuery.matches);
|
|
12351
|
+
};
|
|
12352
|
+
syncViewport();
|
|
12353
|
+
mediaQuery.addEventListener('change', syncViewport);
|
|
12354
|
+
onCleanup(() => {
|
|
12355
|
+
mediaQuery.removeEventListener('change', syncViewport);
|
|
12356
|
+
});
|
|
12357
|
+
});
|
|
12358
|
+
}
|
|
12332
12359
|
setupPadSizeWatch() {
|
|
12333
12360
|
effect(() => {
|
|
12334
12361
|
this.watchPadSize(this.padSizeRef()?.nativeElement);
|
|
@@ -12469,14 +12496,20 @@ class SignatureComponent {
|
|
|
12469
12496
|
}
|
|
12470
12497
|
openPad(event) {
|
|
12471
12498
|
event?.stopPropagation();
|
|
12472
|
-
if (this.viewModel.isPadOpen()) {
|
|
12499
|
+
if (this.isDisabled() || this.viewModel.isPadOpen()) {
|
|
12473
12500
|
return;
|
|
12474
12501
|
}
|
|
12475
12502
|
this.viewModel.completedStrokes.set(cloneStrokes(this.confirmedInk));
|
|
12476
12503
|
this.endStrokeInProgress();
|
|
12477
|
-
this.applyPadPresentation(needsFullscreenPad());
|
|
12504
|
+
this.applyPadPresentation(needsFullscreenPad(this.mobileBreakpoint()));
|
|
12478
12505
|
this.viewModel.isPadOpen.set(true);
|
|
12479
12506
|
}
|
|
12507
|
+
onPreviewClick(event) {
|
|
12508
|
+
if (!this.isMobileViewport() || this.isDisabled()) {
|
|
12509
|
+
return;
|
|
12510
|
+
}
|
|
12511
|
+
this.openPad(event);
|
|
12512
|
+
}
|
|
12480
12513
|
cancelPad() {
|
|
12481
12514
|
this.clearInk();
|
|
12482
12515
|
if (this.canvasContext) {
|
|
@@ -12508,14 +12541,17 @@ class SignatureComponent {
|
|
|
12508
12541
|
this.commitSignature(dataUrl);
|
|
12509
12542
|
}
|
|
12510
12543
|
restoreSavedSignature() {
|
|
12511
|
-
const saved = this.
|
|
12512
|
-
if (!saved) {
|
|
12544
|
+
const saved = this.useSavedSignature();
|
|
12545
|
+
if (!saved || this.isDisabled()) {
|
|
12513
12546
|
return;
|
|
12514
12547
|
}
|
|
12515
12548
|
this.clearInk({ forgetConfirmed: true });
|
|
12516
12549
|
this.commitSignature(toSignatureDataUrl(saved));
|
|
12517
12550
|
}
|
|
12518
12551
|
clearSignature() {
|
|
12552
|
+
if (this.isDisabled()) {
|
|
12553
|
+
return;
|
|
12554
|
+
}
|
|
12519
12555
|
this.clearInk({ forgetConfirmed: true });
|
|
12520
12556
|
this.commitSignature(null);
|
|
12521
12557
|
}
|
|
@@ -12571,7 +12607,7 @@ class SignatureComponent {
|
|
|
12571
12607
|
}
|
|
12572
12608
|
}
|
|
12573
12609
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.32", ngImport: i0, type: SignatureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12574
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.32", type: SignatureComponent, isStandalone: true, selector: "cai-signature", inputs: { savedSignature: { classPropertyName: "savedSignature", publicName: "savedSignature", isSignal: true, isRequired: false, transformFunction: null }, requiredInvalid: { classPropertyName: "requiredInvalid", publicName: "requiredInvalid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { signatureChange: "signatureChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, properties: { "class.signature--has-current": "viewModel.showsPreview()", "style.--signature-preview-width.px": "previewWidth", "style.--signature-preview-height.px": "previewHeight" }, classAttribute: "signature" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, isSignal: true }, { propertyName: "padSizeRef", first: true, predicate: ["padSize"], descendants: true, isSignal: true }], ngImport: i0, template: "@let promptTitle = requiredInvalid() ? 'Signature Required' : 'Click Here';\n@let promptBody = requiredInvalid()\n ? 'Click Here To Sign Using Your Mouse'\n : 'To Sign Using Your Mouse';\n@let isFullscreen = viewModel.isFullscreenOpen();\n@let isInlinePad = viewModel.isPadOpen() && !isFullscreen;\n\n@if (viewModel.showsPreview()) {\n <div class=\"signature__preview\">\n <div class=\"signature__preview-frame\">\n <div class=\"signature__preview-image\">\n <img\n [src]=\"viewModel.previewSrc()\"\n [width]=\"previewWidth\"\n [height]=\"previewHeight\"\n alt=\"\"\n draggable=\"false\"\n />\n </div>\n </div>\n <div class=\"signature__preview-actions\">\n <button\n type=\"button\"\n class=\"signature__icon-button\"\n (click)=\"openPad()\"\n >\n <svg-icon name=\"cai-edit\"></svg-icon>\n </button>\n <button\n type=\"button\"\n class=\"signature__icon-button\"\n (click)=\"clearSignature()\"\n >\n <svg-icon name=\"cai-delete\"></svg-icon>\n </button>\n </div>\n </div>\n} @else {\n <div\n class=\"signature__pad\"\n [class.signature__pad--invalid]=\"\n requiredInvalid() && !viewModel.isPadOpen()\n \"\n >\n <div\n class=\"signature__surface\"\n [class.signature__surface--drawing]=\"isInlinePad\"\n (click)=\"openPad($event)\"\n >\n @if (!isInlinePad) {\n <div\n class=\"signature__prompt\"\n [class.signature__prompt--invalid]=\"requiredInvalid()\"\n >\n <span class=\"signature__prompt-title\">{{ promptTitle }}</span>\n <span class=\"signature__prompt-body\">{{ promptBody }}</span>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"signaturePad\" />\n }\n </div>\n </div>\n\n @if (isInlinePad) {\n <div class=\"signature__actions\">\n <ng-container *ngTemplateOutlet=\"signatureActions\" />\n </div>\n }\n}\n\n@if (isFullscreen) {\n @let stage = viewModel.fullscreenStage();\n <div class=\"signature__overlay\" (click)=\"onBackdropClick($event)\">\n <div\n class=\"signature__overlay-stage\"\n [class.signature__overlay-stage--rotated]=\"stage?.isRotated\"\n [style.width.px]=\"stage?.width\"\n [style.height.px]=\"stage?.height\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"signature__overlay-panel\">\n <div class=\"signature__overlay-pad\">\n <div class=\"signature__surface signature__surface--drawing\">\n <ng-container *ngTemplateOutlet=\"signaturePad\" />\n </div>\n </div>\n <div class=\"signature__actions signature__actions--overlay\">\n <ng-container *ngTemplateOutlet=\"signatureActions\" />\n </div>\n </div>\n </div>\n </div>\n}\n\n<ng-template #signaturePad>\n <div class=\"signature__surface-measure\" #padSize>\n <canvas\n class=\"signature__canvas\"\n #canvas\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n ></canvas>\n </div>\n</ng-template>\n\n<ng-template #signatureActions>\n <div class=\"signature__actions-start\">\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-neutral\"\n (click)=\"cancelPad()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-neutral\"\n (click)=\"undoLastStroke()\"\n >\n Undo\n </button>\n @if (viewModel.hasInk()) {\n <span class=\"signature__actions-label\">Confirmation Required</span>\n }\n </div>\n <div class=\"signature__actions-end\">\n @if (viewModel.hasExistingSignature()) {\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-positive\"\n (click)=\"restoreSavedSignature()\"\n >\n Use Saved Signature\n </button>\n }\n <button\n type=\"button\"\n class=\"signature__button signature__button--primary-positive\"\n [disabled]=\"!viewModel.hasInk()\"\n (click)=\"confirmSignature()\"\n >\n Confirm\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:grid;gap:8px;width:100%;max-width:628px;-webkit-user-select:none;user-select:none}:host.signature--has-current{justify-items:center}:host:hover .signature__preview-image{background-color:#eee}:host:hover .signature__preview-actions{opacity:1;pointer-events:auto}.signature__preview{display:flex;align-items:center;gap:4px;margin-left:60px}.signature__preview-frame{box-sizing:border-box;border-bottom:1px solid #dadada;padding:4px}.signature__preview-image{width:var(--signature-preview-width, 302px);height:var(--signature-preview-height, 81px);border-radius:2px;overflow:hidden;transition:background-color .2s ease-in-out}.signature__preview-image img{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;pointer-events:none}.signature__preview-actions{display:flex;gap:4px;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out}.signature__icon-button{width:26px;height:26px;padding:4px;border:0;border-radius:2px;background-color:#eee;transition:background-color .2s ease-in-out}.signature__icon-button:hover{background-color:#424242}.signature__icon-button:hover svg-icon svg path{fill:#fff}.signature__icon-button svg-icon{display:flex}.signature__icon-button svg-icon svg{width:18px;height:18px}.signature__icon-button svg-icon svg path{fill:#919191}.signature__pad{width:100%;height:178px;box-sizing:border-box;padding:4px;background-image:linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;border-radius:2px}.signature__pad--invalid{background-image:linear-gradient(to right,#ed9292 50%,#fff 50%),linear-gradient(to right,#ed9292 50%,#fff 50%),linear-gradient(to top,#ed9292 50%,#fff 50%),linear-gradient(to top,#ed9292 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y}.signature__surface{display:flex;justify-content:center;align-items:center;width:100%;height:100%;cursor:pointer;background-color:#fff;transition:background-color .2s ease-in-out}.signature__surface:hover{background-color:#eee}.signature__surface--drawing{display:block;cursor:default;background-color:#fff;min-width:0;min-height:0}.signature__surface--drawing:hover{background-color:#fff}.signature__surface-measure{width:100%;height:100%;min-width:0;min-height:0}.signature__prompt{display:flex;flex-direction:column;align-items:center;gap:4px}.signature__prompt--invalid .signature__prompt-title{color:#df3c3c}.signature__prompt-title{font-weight:700;font-size:14px;line-height:18px;color:#424242;text-align:center;text-transform:uppercase}.signature__prompt-body{font-weight:600;font-size:11px;line-height:14px;color:#424242;text-align:center;text-transform:uppercase}.signature__canvas{display:block;width:100%;height:100%;min-width:0;min-height:0;touch-action:none;cursor:default}.signature__actions{display:flex;gap:12px;width:100%;flex-shrink:0}.signature__actions--overlay .signature__button{padding:11px 8px}.signature__actions-start,.signature__actions-end{display:flex;align-items:center;gap:6px}.signature__actions-start{flex-grow:1}.signature__actions-label{flex-grow:1;font-weight:600;font-size:11px;line-height:15px;color:#df3c3c;text-align:right}.signature__button{padding:4px 8px;border:0;border-radius:2px;min-width:80px;font-weight:700;font-size:11px;line-height:14px;text-transform:uppercase;transition:background-color .2s ease-in-out,color .2s ease-in-out}.signature__button--secondary-neutral{background-color:#eee;color:#6c6c6c}.signature__button--secondary-neutral:hover{background-color:#424242;color:#fff}.signature__button--secondary-positive{background-color:#eee;color:#3b73ed}.signature__button--secondary-positive:hover{background-color:#0b49d1;color:#fff}.signature__button--primary-positive{background-color:#3b73ed;color:#fff}.signature__button--primary-positive:hover{background-color:#0b49d1;color:#fff}.signature__button:disabled,.signature__button[disabled]{background-color:#f7f7f7;color:#ccc;pointer-events:none}.signature__overlay{position:fixed;inset:0;z-index:1000;background-color:#00000073}.signature__overlay-stage{position:absolute;top:50%;left:50%;box-sizing:border-box;transform:translate(-50%,-50%)}.signature__overlay-stage--rotated{transform:translate(-50%,-50%) rotate(90deg)}.signature__overlay-panel{box-sizing:border-box;display:flex;flex-direction:column;gap:12px;width:100%;height:100%;padding:12px;background-color:#fff;border-radius:2px}.signature__overlay-pad{box-sizing:border-box;padding:4px;background-image:linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;border-radius:2px;min-width:0;min-height:0;flex:1 1 auto;width:100%}.signature__overlay-pad .signature__surface{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type:
|
|
12610
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.32", type: SignatureComponent, isStandalone: true, selector: "cai-signature", inputs: { savedSignature: { classPropertyName: "savedSignature", publicName: "savedSignature", isSignal: true, isRequired: false, transformFunction: null }, useSavedSignature: { classPropertyName: "useSavedSignature", publicName: "useSavedSignature", isSignal: true, isRequired: false, transformFunction: null }, requiredInvalid: { classPropertyName: "requiredInvalid", publicName: "requiredInvalid", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, mobileBreakpoint: { classPropertyName: "mobileBreakpoint", publicName: "mobileBreakpoint", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { signatureChange: "signatureChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, properties: { "class.signature--has-current": "viewModel.showsPreview()", "class.signature--disabled": "isDisabled()", "class.signature--mobile": "isMobileViewport()", "style.--signature-preview-width.px": "previewWidth", "style.--signature-preview-height.px": "previewHeight" }, classAttribute: "signature" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, isSignal: true }, { propertyName: "padSizeRef", first: true, predicate: ["padSize"], descendants: true, isSignal: true }], ngImport: i0, template: "@let promptTitle = requiredInvalid() ? 'Signature Required' : 'Click Here';\n@let promptBody = requiredInvalid()\n ? 'Click Here To Sign Using Your Mouse'\n : 'To Sign Using Your Mouse';\n@let isFullscreen = viewModel.isFullscreenOpen();\n@let isInlinePad = viewModel.isPadOpen() && !isFullscreen;\n@let showPreviewActions = !isDisabled() && !isMobileViewport();\n\n@if (viewModel.showsPreview()) {\n <div class=\"signature__preview\" (click)=\"onPreviewClick($event)\">\n <div class=\"signature__preview-frame\">\n <div class=\"signature__preview-image\">\n <img\n [src]=\"viewModel.previewSrc()\"\n [width]=\"previewWidth\"\n [height]=\"previewHeight\"\n alt=\"\"\n draggable=\"false\"\n />\n </div>\n </div>\n @if (showPreviewActions) {\n <div class=\"signature__preview-actions\">\n <button\n type=\"button\"\n class=\"signature__icon-button\"\n (click)=\"openPad($event)\"\n >\n <svg-icon name=\"cai-edit\"></svg-icon>\n </button>\n <button\n type=\"button\"\n class=\"signature__icon-button\"\n (click)=\"clearSignature()\"\n >\n <svg-icon name=\"cai-delete\"></svg-icon>\n </button>\n </div>\n }\n </div>\n} @else {\n <div\n class=\"signature__pad\"\n [class.signature__pad--invalid]=\"\n requiredInvalid() && !viewModel.isPadOpen()\n \"\n >\n <div\n class=\"signature__surface\"\n [class.signature__surface--drawing]=\"isInlinePad\"\n (click)=\"openPad($event)\"\n >\n @if (!isInlinePad) {\n <div\n class=\"signature__prompt\"\n [class.signature__prompt--invalid]=\"requiredInvalid()\"\n >\n <span class=\"signature__prompt-title\">{{ promptTitle }}</span>\n <span class=\"signature__prompt-body\">{{ promptBody }}</span>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"signaturePad\" />\n }\n </div>\n </div>\n\n @if (isInlinePad) {\n <div class=\"signature__actions\">\n <ng-container *ngTemplateOutlet=\"signatureActions\" />\n </div>\n }\n}\n\n@if (isFullscreen) {\n @let stage = viewModel.fullscreenStage();\n <div class=\"signature__overlay\" (click)=\"onBackdropClick($event)\">\n <div\n class=\"signature__overlay-stage\"\n [class.signature__overlay-stage--rotated]=\"stage?.isRotated\"\n [style.width.px]=\"stage?.width\"\n [style.height.px]=\"stage?.height\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"signature__overlay-panel\">\n <div class=\"signature__overlay-pad\">\n <div class=\"signature__surface signature__surface--drawing\">\n <ng-container *ngTemplateOutlet=\"signaturePad\" />\n </div>\n </div>\n <div class=\"signature__actions signature__actions--overlay\">\n <ng-container *ngTemplateOutlet=\"signatureActions\" />\n </div>\n </div>\n </div>\n </div>\n}\n\n<ng-template #signaturePad>\n <div class=\"signature__surface-measure\" #padSize>\n <canvas\n class=\"signature__canvas\"\n #canvas\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n ></canvas>\n </div>\n</ng-template>\n\n<ng-template #signatureActions>\n <div class=\"signature__actions-start\">\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-neutral\"\n (click)=\"cancelPad()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-neutral\"\n (click)=\"undoLastStroke()\"\n >\n Undo\n </button>\n @if (viewModel.hasInk()) {\n <span class=\"signature__actions-label\">Confirmation Required</span>\n }\n </div>\n <div class=\"signature__actions-end\">\n @if (viewModel.hasExistingSignature()) {\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-positive\"\n (click)=\"restoreSavedSignature()\"\n >\n Use Saved Signature\n </button>\n }\n <button\n type=\"button\"\n class=\"signature__button signature__button--primary-positive\"\n [disabled]=\"!viewModel.hasInk()\"\n (click)=\"confirmSignature()\"\n >\n Confirm\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:grid;gap:8px;width:100%;max-width:628px;-webkit-user-select:none;user-select:none}:host.signature--has-current{justify-items:center}:host.signature--disabled{opacity:.6;pointer-events:none;cursor:default}:host.signature--mobile .signature__preview{cursor:pointer;margin-left:0}:host.signature--mobile .signature__preview-actions{display:none}:host.signature--mobile .signature__preview-image{transition:background-color .2s ease-in-out}@media(hover:hover){:host:hover:not(.signature--disabled):not(.signature--mobile) .signature__preview-image{background-color:#eee}:host:hover:not(.signature--disabled):not(.signature--mobile) .signature__preview-actions{opacity:1;pointer-events:auto}:host.signature--mobile:not(.signature--disabled):hover .signature__preview-image{background-color:#eee}}.signature__preview{display:flex;align-items:center;gap:4px;margin-left:60px}.signature__preview-frame{box-sizing:border-box;border-bottom:1px solid #dadada;padding:4px}.signature__preview-image{width:var(--signature-preview-width, 302px);height:var(--signature-preview-height, 81px);border-radius:2px;overflow:hidden;transition:background-color .2s ease-in-out}.signature__preview-image img{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;pointer-events:none}.signature__preview-actions{display:flex;gap:4px;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out}.signature__icon-button{width:26px;height:26px;padding:4px;border:0;border-radius:2px;background-color:#eee;transition:background-color .2s ease-in-out}.signature__icon-button:hover{background-color:#424242}.signature__icon-button:hover svg-icon svg path{fill:#fff}.signature__icon-button svg-icon{display:flex}.signature__icon-button svg-icon svg{width:18px;height:18px}.signature__icon-button svg-icon svg path{fill:#919191;transition:fill .2s ease-in-out}.signature__pad{width:100%;height:178px;box-sizing:border-box;padding:4px;background-image:linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;border-radius:2px}.signature__pad--invalid{background-image:linear-gradient(to right,#ed9292 50%,#fff 50%),linear-gradient(to right,#ed9292 50%,#fff 50%),linear-gradient(to top,#ed9292 50%,#fff 50%),linear-gradient(to top,#ed9292 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y}.signature__surface{display:flex;justify-content:center;align-items:center;width:100%;height:100%;cursor:pointer;background-color:#fff;transition:background-color .2s ease-in-out}.signature__surface:hover{background-color:#eee}.signature__surface--drawing{display:block;cursor:default;background-color:#fff;min-width:0;min-height:0}.signature__surface--drawing:hover{background-color:#fff}.signature__surface-measure{width:100%;height:100%;min-width:0;min-height:0}.signature__prompt{display:flex;flex-direction:column;align-items:center;gap:4px}.signature__prompt--invalid .signature__prompt-title{color:#df3c3c}.signature__prompt-title{font-weight:700;font-size:14px;line-height:18px;color:#424242;text-align:center;text-transform:uppercase}.signature__prompt-body{font-weight:600;font-size:11px;line-height:14px;color:#424242;text-align:center;text-transform:uppercase}.signature__canvas{display:block;width:100%;height:100%;min-width:0;min-height:0;touch-action:none;cursor:default}.signature__actions{display:flex;gap:12px;width:100%;flex-shrink:0}.signature__actions--overlay .signature__button{padding:11px 8px}.signature__actions-start,.signature__actions-end{display:flex;align-items:center;gap:6px}.signature__actions-start{flex-grow:1}.signature__actions-label{flex-grow:1;font-weight:600;font-size:11px;line-height:15px;color:#df3c3c;text-align:right}.signature__button{padding:4px 8px;border:0;border-radius:2px;min-width:80px;font-weight:700;font-size:11px;line-height:14px;text-transform:uppercase;transition:background-color .2s ease-in-out,color .2s ease-in-out}.signature__button--secondary-neutral{background-color:#eee;color:#6c6c6c}.signature__button--secondary-neutral:hover{background-color:#424242;color:#fff}.signature__button--secondary-positive{background-color:#eee;color:#3b73ed}.signature__button--secondary-positive:hover{background-color:#0b49d1;color:#fff}.signature__button--primary-positive{background-color:#3b73ed;color:#fff}.signature__button--primary-positive:hover{background-color:#0b49d1;color:#fff}.signature__button:disabled,.signature__button[disabled]{background-color:#f7f7f7;color:#ccc;pointer-events:none}.signature__overlay{position:fixed;inset:0;z-index:1000;background-color:#00000073}.signature__overlay-stage{position:absolute;top:50%;left:50%;box-sizing:border-box;transform:translate(-50%,-50%)}.signature__overlay-stage--rotated{transform:translate(-50%,-50%) rotate(90deg)}.signature__overlay-panel{box-sizing:border-box;display:flex;flex-direction:column;gap:12px;width:100%;height:100%;padding:12px;background-color:#fff;border-radius:2px}.signature__overlay-pad{box-sizing:border-box;padding:4px;background-image:linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;border-radius:2px;min-width:0;min-height:0;flex:1 1 auto;width:100%}.signature__overlay-pad .signature__surface{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type:
|
|
12575
12611
|
// components
|
|
12576
12612
|
SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "svgClass", "class", "viewBox", "svgAriaLabel", "onSVGLoaded", "svgStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
12577
12613
|
}
|
|
@@ -12580,6 +12616,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.32", ngImpo
|
|
|
12580
12616
|
args: [{ selector: 'cai-signature', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
12581
12617
|
class: 'signature',
|
|
12582
12618
|
'[class.signature--has-current]': 'viewModel.showsPreview()',
|
|
12619
|
+
'[class.signature--disabled]': 'isDisabled()',
|
|
12620
|
+
'[class.signature--mobile]': 'isMobileViewport()',
|
|
12583
12621
|
'[style.--signature-preview-width.px]': 'previewWidth',
|
|
12584
12622
|
'[style.--signature-preview-height.px]': 'previewHeight',
|
|
12585
12623
|
'(document:keydown.escape)': 'onEscape()',
|
|
@@ -12587,8 +12625,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.32", ngImpo
|
|
|
12587
12625
|
NgTemplateOutlet,
|
|
12588
12626
|
// components
|
|
12589
12627
|
SvgIconComponent,
|
|
12590
|
-
], template: "@let promptTitle = requiredInvalid() ? 'Signature Required' : 'Click Here';\n@let promptBody = requiredInvalid()\n ? 'Click Here To Sign Using Your Mouse'\n : 'To Sign Using Your Mouse';\n@let isFullscreen = viewModel.isFullscreenOpen();\n@let isInlinePad = viewModel.isPadOpen() && !isFullscreen;\n\n@if (viewModel.showsPreview()) {\n <div class=\"signature__preview\">\n <div class=\"signature__preview-frame\">\n <div class=\"signature__preview-image\">\n <img\n [src]=\"viewModel.previewSrc()\"\n [width]=\"previewWidth\"\n [height]=\"previewHeight\"\n alt=\"\"\n draggable=\"false\"\n />\n </div>\n </div>\n <div class=\"signature__preview-actions\">\n <button\n type=\"button\"\n class=\"signature__icon-button\"\n (click)=\"openPad()\"\n >\n <svg-icon name=\"cai-edit\"></svg-icon>\n </button>\n <button\n type=\"button\"\n class=\"signature__icon-button\"\n (click)=\"clearSignature()\"\n >\n <svg-icon name=\"cai-delete\"></svg-icon>\n </button>\n </div>\n </div>\n} @else {\n <div\n class=\"signature__pad\"\n [class.signature__pad--invalid]=\"\n requiredInvalid() && !viewModel.isPadOpen()\n \"\n >\n <div\n class=\"signature__surface\"\n [class.signature__surface--drawing]=\"isInlinePad\"\n (click)=\"openPad($event)\"\n >\n @if (!isInlinePad) {\n <div\n class=\"signature__prompt\"\n [class.signature__prompt--invalid]=\"requiredInvalid()\"\n >\n <span class=\"signature__prompt-title\">{{ promptTitle }}</span>\n <span class=\"signature__prompt-body\">{{ promptBody }}</span>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"signaturePad\" />\n }\n </div>\n </div>\n\n @if (isInlinePad) {\n <div class=\"signature__actions\">\n <ng-container *ngTemplateOutlet=\"signatureActions\" />\n </div>\n }\n}\n\n@if (isFullscreen) {\n @let stage = viewModel.fullscreenStage();\n <div class=\"signature__overlay\" (click)=\"onBackdropClick($event)\">\n <div\n class=\"signature__overlay-stage\"\n [class.signature__overlay-stage--rotated]=\"stage?.isRotated\"\n [style.width.px]=\"stage?.width\"\n [style.height.px]=\"stage?.height\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"signature__overlay-panel\">\n <div class=\"signature__overlay-pad\">\n <div class=\"signature__surface signature__surface--drawing\">\n <ng-container *ngTemplateOutlet=\"signaturePad\" />\n </div>\n </div>\n <div class=\"signature__actions signature__actions--overlay\">\n <ng-container *ngTemplateOutlet=\"signatureActions\" />\n </div>\n </div>\n </div>\n </div>\n}\n\n<ng-template #signaturePad>\n <div class=\"signature__surface-measure\" #padSize>\n <canvas\n class=\"signature__canvas\"\n #canvas\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n ></canvas>\n </div>\n</ng-template>\n\n<ng-template #signatureActions>\n <div class=\"signature__actions-start\">\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-neutral\"\n (click)=\"cancelPad()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-neutral\"\n (click)=\"undoLastStroke()\"\n >\n Undo\n </button>\n @if (viewModel.hasInk()) {\n <span class=\"signature__actions-label\">Confirmation Required</span>\n }\n </div>\n <div class=\"signature__actions-end\">\n @if (viewModel.hasExistingSignature()) {\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-positive\"\n (click)=\"restoreSavedSignature()\"\n >\n Use Saved Signature\n </button>\n }\n <button\n type=\"button\"\n class=\"signature__button signature__button--primary-positive\"\n [disabled]=\"!viewModel.hasInk()\"\n (click)=\"confirmSignature()\"\n >\n Confirm\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:grid;gap:8px;width:100%;max-width:628px;-webkit-user-select:none;user-select:none}:host.signature--has-current{justify-items:center}:host:hover .signature__preview-image{background-color:#eee}:host:hover .signature__preview-actions{opacity:1;pointer-events:auto}.signature__preview{display:flex;align-items:center;gap:4px;margin-left:60px}.signature__preview-frame{box-sizing:border-box;border-bottom:1px solid #dadada;padding:4px}.signature__preview-image{width:var(--signature-preview-width, 302px);height:var(--signature-preview-height, 81px);border-radius:2px;overflow:hidden;transition:background-color .2s ease-in-out}.signature__preview-image img{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;pointer-events:none}.signature__preview-actions{display:flex;gap:4px;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out}.signature__icon-button{width:26px;height:26px;padding:4px;border:0;border-radius:2px;background-color:#eee;transition:background-color .2s ease-in-out}.signature__icon-button:hover{background-color:#424242}.signature__icon-button:hover svg-icon svg path{fill:#fff}.signature__icon-button svg-icon{display:flex}.signature__icon-button svg-icon svg{width:18px;height:18px}.signature__icon-button svg-icon svg path{fill:#919191}.signature__pad{width:100%;height:178px;box-sizing:border-box;padding:4px;background-image:linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;border-radius:2px}.signature__pad--invalid{background-image:linear-gradient(to right,#ed9292 50%,#fff 50%),linear-gradient(to right,#ed9292 50%,#fff 50%),linear-gradient(to top,#ed9292 50%,#fff 50%),linear-gradient(to top,#ed9292 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y}.signature__surface{display:flex;justify-content:center;align-items:center;width:100%;height:100%;cursor:pointer;background-color:#fff;transition:background-color .2s ease-in-out}.signature__surface:hover{background-color:#eee}.signature__surface--drawing{display:block;cursor:default;background-color:#fff;min-width:0;min-height:0}.signature__surface--drawing:hover{background-color:#fff}.signature__surface-measure{width:100%;height:100%;min-width:0;min-height:0}.signature__prompt{display:flex;flex-direction:column;align-items:center;gap:4px}.signature__prompt--invalid .signature__prompt-title{color:#df3c3c}.signature__prompt-title{font-weight:700;font-size:14px;line-height:18px;color:#424242;text-align:center;text-transform:uppercase}.signature__prompt-body{font-weight:600;font-size:11px;line-height:14px;color:#424242;text-align:center;text-transform:uppercase}.signature__canvas{display:block;width:100%;height:100%;min-width:0;min-height:0;touch-action:none;cursor:default}.signature__actions{display:flex;gap:12px;width:100%;flex-shrink:0}.signature__actions--overlay .signature__button{padding:11px 8px}.signature__actions-start,.signature__actions-end{display:flex;align-items:center;gap:6px}.signature__actions-start{flex-grow:1}.signature__actions-label{flex-grow:1;font-weight:600;font-size:11px;line-height:15px;color:#df3c3c;text-align:right}.signature__button{padding:4px 8px;border:0;border-radius:2px;min-width:80px;font-weight:700;font-size:11px;line-height:14px;text-transform:uppercase;transition:background-color .2s ease-in-out,color .2s ease-in-out}.signature__button--secondary-neutral{background-color:#eee;color:#6c6c6c}.signature__button--secondary-neutral:hover{background-color:#424242;color:#fff}.signature__button--secondary-positive{background-color:#eee;color:#3b73ed}.signature__button--secondary-positive:hover{background-color:#0b49d1;color:#fff}.signature__button--primary-positive{background-color:#3b73ed;color:#fff}.signature__button--primary-positive:hover{background-color:#0b49d1;color:#fff}.signature__button:disabled,.signature__button[disabled]{background-color:#f7f7f7;color:#ccc;pointer-events:none}.signature__overlay{position:fixed;inset:0;z-index:1000;background-color:#00000073}.signature__overlay-stage{position:absolute;top:50%;left:50%;box-sizing:border-box;transform:translate(-50%,-50%)}.signature__overlay-stage--rotated{transform:translate(-50%,-50%) rotate(90deg)}.signature__overlay-panel{box-sizing:border-box;display:flex;flex-direction:column;gap:12px;width:100%;height:100%;padding:12px;background-color:#fff;border-radius:2px}.signature__overlay-pad{box-sizing:border-box;padding:4px;background-image:linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;border-radius:2px;min-width:0;min-height:0;flex:1 1 auto;width:100%}.signature__overlay-pad .signature__surface{width:100%;height:100%}\n"] }]
|
|
12591
|
-
}], ctorParameters: () => [], propDecorators: { canvasRef: [{ type: i0.ViewChild, args: ['canvas', { isSignal: true }] }], padSizeRef: [{ type: i0.ViewChild, args: ['padSize', { isSignal: true }] }], savedSignature: [{ type: i0.Input, args: [{ isSignal: true, alias: "savedSignature", required: false }] }], requiredInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "requiredInvalid", required: false }] }], signatureChange: [{ type: i0.Output, args: ["signatureChange"] }] } });
|
|
12628
|
+
], template: "@let promptTitle = requiredInvalid() ? 'Signature Required' : 'Click Here';\n@let promptBody = requiredInvalid()\n ? 'Click Here To Sign Using Your Mouse'\n : 'To Sign Using Your Mouse';\n@let isFullscreen = viewModel.isFullscreenOpen();\n@let isInlinePad = viewModel.isPadOpen() && !isFullscreen;\n@let showPreviewActions = !isDisabled() && !isMobileViewport();\n\n@if (viewModel.showsPreview()) {\n <div class=\"signature__preview\" (click)=\"onPreviewClick($event)\">\n <div class=\"signature__preview-frame\">\n <div class=\"signature__preview-image\">\n <img\n [src]=\"viewModel.previewSrc()\"\n [width]=\"previewWidth\"\n [height]=\"previewHeight\"\n alt=\"\"\n draggable=\"false\"\n />\n </div>\n </div>\n @if (showPreviewActions) {\n <div class=\"signature__preview-actions\">\n <button\n type=\"button\"\n class=\"signature__icon-button\"\n (click)=\"openPad($event)\"\n >\n <svg-icon name=\"cai-edit\"></svg-icon>\n </button>\n <button\n type=\"button\"\n class=\"signature__icon-button\"\n (click)=\"clearSignature()\"\n >\n <svg-icon name=\"cai-delete\"></svg-icon>\n </button>\n </div>\n }\n </div>\n} @else {\n <div\n class=\"signature__pad\"\n [class.signature__pad--invalid]=\"\n requiredInvalid() && !viewModel.isPadOpen()\n \"\n >\n <div\n class=\"signature__surface\"\n [class.signature__surface--drawing]=\"isInlinePad\"\n (click)=\"openPad($event)\"\n >\n @if (!isInlinePad) {\n <div\n class=\"signature__prompt\"\n [class.signature__prompt--invalid]=\"requiredInvalid()\"\n >\n <span class=\"signature__prompt-title\">{{ promptTitle }}</span>\n <span class=\"signature__prompt-body\">{{ promptBody }}</span>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"signaturePad\" />\n }\n </div>\n </div>\n\n @if (isInlinePad) {\n <div class=\"signature__actions\">\n <ng-container *ngTemplateOutlet=\"signatureActions\" />\n </div>\n }\n}\n\n@if (isFullscreen) {\n @let stage = viewModel.fullscreenStage();\n <div class=\"signature__overlay\" (click)=\"onBackdropClick($event)\">\n <div\n class=\"signature__overlay-stage\"\n [class.signature__overlay-stage--rotated]=\"stage?.isRotated\"\n [style.width.px]=\"stage?.width\"\n [style.height.px]=\"stage?.height\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"signature__overlay-panel\">\n <div class=\"signature__overlay-pad\">\n <div class=\"signature__surface signature__surface--drawing\">\n <ng-container *ngTemplateOutlet=\"signaturePad\" />\n </div>\n </div>\n <div class=\"signature__actions signature__actions--overlay\">\n <ng-container *ngTemplateOutlet=\"signatureActions\" />\n </div>\n </div>\n </div>\n </div>\n}\n\n<ng-template #signaturePad>\n <div class=\"signature__surface-measure\" #padSize>\n <canvas\n class=\"signature__canvas\"\n #canvas\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n ></canvas>\n </div>\n</ng-template>\n\n<ng-template #signatureActions>\n <div class=\"signature__actions-start\">\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-neutral\"\n (click)=\"cancelPad()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-neutral\"\n (click)=\"undoLastStroke()\"\n >\n Undo\n </button>\n @if (viewModel.hasInk()) {\n <span class=\"signature__actions-label\">Confirmation Required</span>\n }\n </div>\n <div class=\"signature__actions-end\">\n @if (viewModel.hasExistingSignature()) {\n <button\n type=\"button\"\n class=\"signature__button signature__button--secondary-positive\"\n (click)=\"restoreSavedSignature()\"\n >\n Use Saved Signature\n </button>\n }\n <button\n type=\"button\"\n class=\"signature__button signature__button--primary-positive\"\n [disabled]=\"!viewModel.hasInk()\"\n (click)=\"confirmSignature()\"\n >\n Confirm\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:grid;gap:8px;width:100%;max-width:628px;-webkit-user-select:none;user-select:none}:host.signature--has-current{justify-items:center}:host.signature--disabled{opacity:.6;pointer-events:none;cursor:default}:host.signature--mobile .signature__preview{cursor:pointer;margin-left:0}:host.signature--mobile .signature__preview-actions{display:none}:host.signature--mobile .signature__preview-image{transition:background-color .2s ease-in-out}@media(hover:hover){:host:hover:not(.signature--disabled):not(.signature--mobile) .signature__preview-image{background-color:#eee}:host:hover:not(.signature--disabled):not(.signature--mobile) .signature__preview-actions{opacity:1;pointer-events:auto}:host.signature--mobile:not(.signature--disabled):hover .signature__preview-image{background-color:#eee}}.signature__preview{display:flex;align-items:center;gap:4px;margin-left:60px}.signature__preview-frame{box-sizing:border-box;border-bottom:1px solid #dadada;padding:4px}.signature__preview-image{width:var(--signature-preview-width, 302px);height:var(--signature-preview-height, 81px);border-radius:2px;overflow:hidden;transition:background-color .2s ease-in-out}.signature__preview-image img{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;pointer-events:none}.signature__preview-actions{display:flex;gap:4px;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out}.signature__icon-button{width:26px;height:26px;padding:4px;border:0;border-radius:2px;background-color:#eee;transition:background-color .2s ease-in-out}.signature__icon-button:hover{background-color:#424242}.signature__icon-button:hover svg-icon svg path{fill:#fff}.signature__icon-button svg-icon{display:flex}.signature__icon-button svg-icon svg{width:18px;height:18px}.signature__icon-button svg-icon svg path{fill:#919191;transition:fill .2s ease-in-out}.signature__pad{width:100%;height:178px;box-sizing:border-box;padding:4px;background-image:linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;border-radius:2px}.signature__pad--invalid{background-image:linear-gradient(to right,#ed9292 50%,#fff 50%),linear-gradient(to right,#ed9292 50%,#fff 50%),linear-gradient(to top,#ed9292 50%,#fff 50%),linear-gradient(to top,#ed9292 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y}.signature__surface{display:flex;justify-content:center;align-items:center;width:100%;height:100%;cursor:pointer;background-color:#fff;transition:background-color .2s ease-in-out}.signature__surface:hover{background-color:#eee}.signature__surface--drawing{display:block;cursor:default;background-color:#fff;min-width:0;min-height:0}.signature__surface--drawing:hover{background-color:#fff}.signature__surface-measure{width:100%;height:100%;min-width:0;min-height:0}.signature__prompt{display:flex;flex-direction:column;align-items:center;gap:4px}.signature__prompt--invalid .signature__prompt-title{color:#df3c3c}.signature__prompt-title{font-weight:700;font-size:14px;line-height:18px;color:#424242;text-align:center;text-transform:uppercase}.signature__prompt-body{font-weight:600;font-size:11px;line-height:14px;color:#424242;text-align:center;text-transform:uppercase}.signature__canvas{display:block;width:100%;height:100%;min-width:0;min-height:0;touch-action:none;cursor:default}.signature__actions{display:flex;gap:12px;width:100%;flex-shrink:0}.signature__actions--overlay .signature__button{padding:11px 8px}.signature__actions-start,.signature__actions-end{display:flex;align-items:center;gap:6px}.signature__actions-start{flex-grow:1}.signature__actions-label{flex-grow:1;font-weight:600;font-size:11px;line-height:15px;color:#df3c3c;text-align:right}.signature__button{padding:4px 8px;border:0;border-radius:2px;min-width:80px;font-weight:700;font-size:11px;line-height:14px;text-transform:uppercase;transition:background-color .2s ease-in-out,color .2s ease-in-out}.signature__button--secondary-neutral{background-color:#eee;color:#6c6c6c}.signature__button--secondary-neutral:hover{background-color:#424242;color:#fff}.signature__button--secondary-positive{background-color:#eee;color:#3b73ed}.signature__button--secondary-positive:hover{background-color:#0b49d1;color:#fff}.signature__button--primary-positive{background-color:#3b73ed;color:#fff}.signature__button--primary-positive:hover{background-color:#0b49d1;color:#fff}.signature__button:disabled,.signature__button[disabled]{background-color:#f7f7f7;color:#ccc;pointer-events:none}.signature__overlay{position:fixed;inset:0;z-index:1000;background-color:#00000073}.signature__overlay-stage{position:absolute;top:50%;left:50%;box-sizing:border-box;transform:translate(-50%,-50%)}.signature__overlay-stage--rotated{transform:translate(-50%,-50%) rotate(90deg)}.signature__overlay-panel{box-sizing:border-box;display:flex;flex-direction:column;gap:12px;width:100%;height:100%;padding:12px;background-color:#fff;border-radius:2px}.signature__overlay-pad{box-sizing:border-box;padding:4px;background-image:linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to right,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%),linear-gradient(to top,#eee 50%,#fff 50%);background-size:16px 4px,16px 4px,4px 17px,4px 17px;background-position:left bottom,left top,left bottom,right bottom;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;border-radius:2px;min-width:0;min-height:0;flex:1 1 auto;width:100%}.signature__overlay-pad .signature__surface{width:100%;height:100%}\n"] }]
|
|
12629
|
+
}], ctorParameters: () => [], propDecorators: { canvasRef: [{ type: i0.ViewChild, args: ['canvas', { isSignal: true }] }], padSizeRef: [{ type: i0.ViewChild, args: ['padSize', { isSignal: true }] }], savedSignature: [{ type: i0.Input, args: [{ isSignal: true, alias: "savedSignature", required: false }] }], useSavedSignature: [{ type: i0.Input, args: [{ isSignal: true, alias: "useSavedSignature", required: false }] }], requiredInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "requiredInvalid", required: false }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: false }] }], mobileBreakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileBreakpoint", required: false }] }], signatureChange: [{ type: i0.Output, args: ["signatureChange"] }] } });
|
|
12592
12630
|
|
|
12593
12631
|
/*
|
|
12594
12632
|
* Public API Surface of carriera-intern
|