{"version":3,"file":"index.mjs","sources":["../../src/lib/provider-button/provider-button.component.ts","../../src/lib/provider-button/provider-button.component.html","../../src/lib/pyas-connect/pyas-connect.component.ts","../../src/lib/pyas-connect/pyas-connect.component.html","../../src/lib/pyas-connect/pyas-connect.module.ts","../../src/index.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport {\n    GoogleIconSvg,\n    OutlookIconSvg,\n    ZoomIconSvg,\n    ICloudIconSvg\n} from '@pyas/connect';\n\nexport const ICONS: Record<string,string> = {\n    google:    GoogleIconSvg,\n    microsoft: OutlookIconSvg,\n    zoom:      ZoomIconSvg,\n    icloud:    ICloudIconSvg\n};\n\n@Component({\n    standalone: true,\n    imports: [CommonModule],\n    selector: 'connect-provider-button',\n    templateUrl: './provider-button.component.html',\n    styleUrls: ['./provider-button.component.css'],\n    changeDetection: ChangeDetectionStrategy.Default\n})\nexport class ProviderButtonComponent {\n    /** one of 'google' | 'microsoft' | 'zoom' | 'icloud' */\n    @Input() provider!: keyof typeof ICONS;\n    @Input() label!: string;\n    @Input() showLabel = true;\n\n    /** emits provider key when clicked */\n    @Output() select = new EventEmitter<typeof this.provider>();\n\n    safeIconSvg!: SafeHtml;\n\n    constructor(private sanitizer: DomSanitizer) {}\n\n    ngOnChanges() {\n      // whenever provider changes, re-sanitize\n      this.safeIconSvg = this.sanitizer.bypassSecurityTrustHtml(ICONS[this.provider] || '');\n    }\n\n    onClick() {\n      this.select.emit(this.provider);\n    }\n}\n","<button class=\"pyas-provider-button\" (click)=\"onClick()\">\n  <span class=\"icon\" [innerHTML]=\"safeIconSvg\"></span>\n\n  <span *ngIf=\"showLabel\" class=\"label\">{{ label }}</span>\n\n  <span class=\"arrow\">\n        <span class=\"arrow\">\n            <svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                fill=\"none\"\n                viewBox=\"0 0 24 24\"\n                stroke-width=\"1.5\"\n                stroke=\"currentColor\"\n                class=\"arrow-icon\"\n            >\n            <path\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n                d=\"m8.25 4.5 7.5 7.5-7.5 7.5\"\n            />\n            </svg>\n        </span>\n    </span>\n</button>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation, SimpleChanges } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n    getOauthUrl,\n    openOAuthPopup\n} from '@pyas/connect';\nimport { ProviderButtonComponent } from '../provider-button/provider-button.component';\nimport { ICONS } from '../provider-button/provider-button.component';\n\n@Component({\n    standalone: true,\n    selector: 'pyas-connect',\n    encapsulation: ViewEncapsulation.None,\n    imports: [ CommonModule, FormsModule, ProviderButtonComponent],\n\n    templateUrl: './pyas-connect.component.html',\n    styleUrls: [\n      './pyas-connect.component.scss'\n    ],\n    changeDetection: ChangeDetectionStrategy.Default\n})\nexport class PyasConnect {\n    // readonly ICONS = ICONS;\n    // Inputs\n    @Input() clientId!: string;\n    @Input() tokenName!: string;\n    @Input() theme: 'light'|'dark' = 'light';\n    @Input() productName = 'This app';\n    @Input() userName = '';\n    @Input() userEmail = '';\n    @Input() showLabels = true;\n    @Input() showGoogle = true;\n    @Input() showOutlook = true;\n    @Input() showZoom = true;\n    @Input() showIcloud = false;\n    @Input() showDisclaimer = true;\n    @Input() state = '';\n    @Input() modalTitle = 'Connect an Account';\n    @Input() modalDescription = '';\n    @Input() formTitle = 'Enter Your Details';\n    @Input() formDescription = '';\n\n    // Outputs\n    @Output() accountConnected = new EventEmitter<any>();\n    @Output() connectError     = new EventEmitter<any>();\n\n    // Internal UI state\n    open = false;\n    step: 1|2 = 1;\n    name = this.userName;\n    email = this.userEmail;\n    loading = false;\n\n    safeIconSvg!: SafeHtml;\n\n    selectedProvider = '';\n\n    constructor(private sanitizer: DomSanitizer) {}\n\n    ngOnChanges(changes: SimpleChanges) {\n      // this.safeIconSvg = this.sanitizer.bypassSecurityTrustHtml(ICONS[this.selectedProvider] || '');\n      if (changes['userName']) {\n        this.name = changes['userName'].currentValue;\n      }\n      if (changes['userEmail']) {\n        this.email = changes['userEmail'].currentValue;\n      }\n    }\n\n\n\n  // show step-2 form\n  handleNext(provider: string) {\n      this.step = 2;\n      this.selectedProvider = provider;\n  }\n\n\n  getSelectedProviderLabel() {\n      switch (this.selectedProvider) {\n        case 'google':    return 'Google';\n        case 'microsoft': return 'Microsoft';\n        case 'zoom':      return 'Zoom';\n        case 'icloud':    return 'iCloud';\n        default:          return '';\n      }\n  }\n\n  getSafeIconSvg(): SafeHtml {\n      return this.sanitizer.bypassSecurityTrustHtml(ICONS[this.selectedProvider] || '');\n  }\n\n  // go back\n  goBack() {\n      this.step = 1;\n  }\n\n  async submit() {\n      this.loading = true;\n      const payload = {\n          provider:  this.selectedProvider,\n          clientId:  this.clientId,\n          tokenName: this.tokenName,\n          state:     this.state,\n          email:     this.email,\n          name:      this.name,\n      };\n\n    let res = await getOauthUrl(payload);\n    this.loading = false;\n\n    if (!res.success) {\n        return this.connectError.emit(res.error);\n    }\n\n    let popup = await openOAuthPopup({ ...payload, url: res.url! });\n    this.loading = false;\n    if (popup.success)  this.accountConnected.emit(popup.account);\n    else                this.connectError.emit(popup.error);\n  }\n\n  // open / close modal\n  openModal() {\n    this.open = true;\n  }\n  closeModal() {\n    this.open = false;\n    this.step = 1;\n    this.loading = false;\n    this.name = this.userName;\n    this.email = this.userEmail;\n    this.selectedProvider = '';\n  }\n}\n","<div class=\"pyas-connect\" [attr.data-theme]=\"theme\">\n  <button class=\"pyas-button\" (click)=\"openModal()\">\n    <ng-content>Connect a Provider</ng-content>\n  </button>\n\n  <div *ngIf=\"open\" class=\"pyas-modal\">\n    <div class=\"pyas-modal-content\">\n      <div class=\"pyas-modal-header\" [ngSwitch]=\"step\">\n        <!-- Step 1 -->\n        <div\n          *ngSwitchCase=\"1\"\n          class=\"modal-header-row\"\n        >\n          <div>\n            <h3>{{ modalTitle }}</h3>\n            <p>{{ modalDescription }}</p>\n          </div>\n          <div class=\"close-modal-wrapper\" (click)=\"closeModal()\">\n\n            <svg class=\"pyas-modal-close\" xmlns=\"http://www.w3.org/2000/svg\"\n                fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n              <path stroke-linecap=\"round\" stroke-linejoin=\"round\"\n                    d=\"M6 18L18 6M6 6l12 12\" />\n            </svg>\n          </div>\n        </div>\n\n        <!-- Step 2 -->\n        <ng-container *ngSwitchCase=\"2\">\n          <div class=\"modal-header-row\">\n            <span class=\"form-icon\">\n              <span class=\"icon\" [innerHTML]=\"getSafeIconSvg()\"></span>\n              <span class=\"provider-label\">{{ getSelectedProviderLabel() }}</span>\n            </span>\n            <div class=\"close-modal-wrapper\" (click)=\"closeModal()\">\n\n              <svg class=\"pyas-modal-close\" xmlns=\"http://www.w3.org/2000/svg\"\n                  fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\"\n                      d=\"M6 18L18 6M6 6l12 12\" />\n              </svg>\n            </div>\n          </div>\n\n          <div class=\"form-header-divider\"></div>\n\n          <div class=\"modal-subheader\">\n            <h3>{{ formTitle }}</h3>\n            <p>{{ formDescription }}</p>\n          </div>\n        </ng-container>\n\n        <!-- Optional fallback for any other step -->\n        <div *ngSwitchDefault>\n          <!-- nothing or some default -->\n        </div>\n\n      </div>\n\n      <!-- Step 1 -->\n      <div *ngIf=\"step===1\" class=\"pyas-modal-body\">\n        <div class=\"pyas-provider-buttons\">\n            <connect-provider-button\n                *ngIf=\"showGoogle\"\n                provider=\"google\"\n                label=\"Google Calendar\"\n                [showLabel]=\"showLabels\"\n                (select)=\"handleNext($event)\"\n            ></connect-provider-button>\n\n            <connect-provider-button\n                *ngIf=\"showOutlook\"\n                provider=\"microsoft\"\n                label=\"Microsoft Outlook\"\n                [showLabel]=\"showLabels\"\n                (select)=\"handleNext($event)\"\n            ></connect-provider-button>\n\n            <connect-provider-button\n                *ngIf=\"showZoom\"\n                provider=\"zoom\"\n                label=\"Zoom\"\n                [showLabel]=\"showLabels\"\n                (select)=\"handleNext($event)\"\n            ></connect-provider-button>\n\n            <connect-provider-button\n                *ngIf=\"showIcloud\"\n                provider=\"icloud\"\n                label=\"iCloud\"\n                [showLabel]=\"showLabels\"\n                (select)=\"handleNext($event)\"\n            ></connect-provider-button>\n          </div>\n      </div>\n\n      <!-- Step 2 -->\n      <div *ngIf=\"step===2\" class=\"step-form\">\n        <div class=\"step-form-content form-group\">\n          <label class=\"form-label\">\n            <span>Name</span>\n            <input [(ngModel)]=\"name\" class=\"form-input\" [disabled]=\"loading\" />\n          </label>\n          <label class=\"form-label\">\n            <span>Email</span>\n            <input [(ngModel)]=\"email\" class=\"form-input\" [disabled]=\"loading\" />\n          </label>\n        </div>\n        <div class=\"form-actions\">\n          <button class=\"form-back\" (click)=\"goBack()\" [disabled]=\"loading\">Back</button>\n          <button class=\"form-submit\" (click)=\"submit()\" [disabled]=\"loading\">\n            <span *ngIf=\"loading\" class=\"spinner\"></span>\n            <span *ngIf=\"!loading\">Continue</span>\n          </button>\n        </div>\n      </div>\n\n      <!-- Disclaimer -->\n      <div *ngIf=\"showDisclaimer\" class=\"pyas-disclaimer\">\n        <div class=\"divider\"><hr/></div>\n        <span>{{ productName }} uses</span>\n        <img class=\"pyas-logo\" src=\"data:image/svg+xml,%3c?xml%20version=%271.0%27%20encoding=%27UTF-8%27?%3e%3csvg%20id=%27Layer_1%27%20xmlns=%27http://www.w3.org/2000/svg%27%20viewBox=%270%200%20183%20100%27%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23290066;}.cls-2{fill:%23ff9b19;}.cls-3{fill:%23b70053;}.cls-4{fill:%233d0099;}.cls-5{fill:%230f0b3a;}.cls-6{fill:%23ffd701;}.cls-7{fill:%23fb0062;}%3c/style%3e%3c/defs%3e%3cg%3e%3cpath%20class=%27cls-5%27%20d=%27M96.12,39.39c0,6.17-4.85,10.84-11.17,10.84h-5.18v10.84h-6.5V28.55h11.69c6.32,0,11.17,4.67,11.17,10.84Zm-6.69,0c0-2.69-1.98-4.71-4.62-4.71h-5.04v9.43h5.04c2.64,0,4.62-2.03,4.62-4.71Z%27/%3e%3cpath%20class=%27cls-5%27%20d=%27M124.16,37.03l-13.71,32.99h-6.6l3.86-9.19-9.85-23.8h6.97l6.22,16.35,6.22-16.35h6.88Z%27/%3e%3cpath%20class=%27cls-5%27%20d=%27M150.27,37.03v24.04h-6.13v-3.16c-1.89,2.31-4.57,3.72-7.82,3.72-6.69,0-11.73-5.42-11.73-12.58s5.04-12.58,11.73-12.58c3.25,0,5.94,1.41,7.82,3.72v-3.16h6.13Zm-6.13,12.02c0-3.77-2.83-6.65-6.64-6.65s-6.6,2.87-6.6,6.65,2.83,6.64,6.6,6.64,6.64-2.87,6.64-6.64Z%27/%3e%3cpath%20class=%27cls-5%27%20d=%27M154.6,53.86h6.17c0,1.51,1.27,2.73,2.87,2.73,1.51,0,2.69-.94,2.69-2.17,0-1.65-1.84-2.45-4.01-3.02-3.58-.85-7.4-2.69-7.4-7.54s4.01-7.4,8.62-7.4c4.95,0,8.67,3.3,8.67,7.4h-6.17c0-1.27-1.08-2.36-2.54-2.36-1.32,0-2.4,.9-2.4,1.98,0,1.51,1.7,2.4,4.19,3.02,3.72,.94,7.26,2.78,7.26,7.4,0,4.9-4.05,7.73-8.95,7.73-5.18,0-9-3.49-9-7.78Z%27/%3e%3c/g%3e%3cg%3e%3cpath%20class=%27cls-6%27%20d=%27M54.12,30.12H16.82c-.31-.48-.49-1.04-.49-1.65V8.39c0-1,.81-1.81,1.82-1.81,.37,0,.72,.11,1.01,.3,0,0,.01,0,.02,.01l31.39,20.38,1.13,.74h0c.87,.63,1.68,1.33,2.42,2.11Z%27/%3e%3cpath%20class=%27cls-4%27%20d=%27M23.35,39.35s-.09-.06-.14-.09l-12.37-8.03s-.05-.03-.07-.05c-.28-.18-.61-.28-.97-.28-1,0-1.81,.81-1.81,1.82v57.47c0,1,.81,1.82,1.81,1.82,.42,0,.8-.14,1.11-.38,.02-.01,.03-.03,.05-.04l12.48-9.75s.08-.06,.11-.09c.34-.28,.62-.64,.82-1.05,.19-.39,.29-.83,.29-1.3V41.85c0-1.04-.52-1.96-1.32-2.5Z%27/%3e%3cpath%20class=%27cls-2%27%20d=%27M58.31,38.19H28.28c-.22-.33-.49-.62-.82-.85-.02-.02-.04-.03-.07-.05l-9.68-6.29s-.04-.03-.06-.04c-.33-.23-.62-.52-.83-.86H54.12c2.09,2.2,3.57,4.98,4.19,8.08Z%27/%3e%3cpath%20class=%27cls-7%27%20d=%27M58.63,41.44c0,4.98-2.21,9.44-5.7,12.45-.03,.03-.06,.05-.1,.08,0,0-14.65,11.44-21.09,16.48-.01,0-.02,.02-.04,.03-.31,.25-.71,.39-1.13,.39-1,0-1.81-.81-1.81-1.82v-29.22c0-.61-.18-1.17-.49-1.65h30.03c.21,1.05,.32,2.13,.32,3.24Z%27/%3e%3cpath%20class=%27cls-3%27%20d=%27M28.76,43.28v-3.44c0-.61-.18-1.17-.49-1.65h30.03l-29.54,5.09Z%27/%3e%3cpath%20class=%27cls-1%27%20d=%27M24.38,80.69c-.19,.41-.47,.76-.82,1.05-.04,.03-.08,.06-.11,.09l-12.48,9.75s-.03,.03-.05,.04c-.31,.24-.69,.38-1.11,.38-1,0-1.81-.81-1.81-1.82V32.72c0,27.4,7.06,37.35,16.39,47.98Z%27/%3e%3c/g%3e%3c/svg%3e\" alt=\"Pyas Logo\" />\n        <span>to securely connect your account</span>\n      </div>\n\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { PyasConnect } from './pyas-connect.component';\nimport { ProviderButtonComponent } from '../provider-button/provider-button.component';\n\n@NgModule({\n  imports: [\n    PyasConnect,\n    ProviderButtonComponent\n  ],\n  exports: [\n    PyasConnect\n  ]\n})\nexport class PyasConnectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}