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.
@@ -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 PHONE_VIEWPORT_QUERY = '(max-width: 767px), (max-height: 500px)';
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 <= 500 || window.matchMedia(PHONE_VIEWPORT_QUERY).matches;
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(savedSignature) {
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(() => !!(savedSignature() || previewSrc()), ...(ngDevMode ? [{ debugName: "hasExistingSignature" }] : []));
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.savedSignature);
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.savedSignature() || this.viewModel.previewSrc();
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