{"version":3,"file":"common.df455e68f4c17ee9.js","mappings":"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","names":["i0","ctx_r0","eventTitleTranslationPath","subscriptionBy","_r2","editSubscription","subscriptionIsMine","_r3","EventDetailComponent","_EventDetailComponent","this","currentUserId","subscriptionLevel","SubscriptionLevel","Wedding","constructor","billingService","subscriptionisActive","canEdit","isPopover","subscriptionId","openEditSubscription","i1","selectors","inputs","eventDate","standalone","features","decls","vars","consts","template","rf","ctx","EventDetailComponent_div_1_Template","EventDetailComponent_span_10_Template","EventDetailComponent_dt_13_Template","EventDetailComponent_dd_14_Template","EventDetailComponent_ion_col_26_Template","EventDetailComponent_ion_row_27_Template","NgIf","TranslatePipe","IonButton","IonIcon","IonGrid","IonRow","IonCol","styles","PosterUploadDirective","_PosterUploadDirective","BaseFileUpload","filestackService","translate","platform","sentryService","super","projectId","customPickerOptions","maxSize","MAX_IMG_UPLOAD_SIZE_MB","accept","storeTo","path","filestackConfig","poster","container","region","imageDim","transformations","crop","force","aspectRatio","rotate","onClick","event","openFilePicker","i2","i3","i4","hostBindings","$event","HOME_TAGS","ALL_TAGS","item_r1","title","subtitle","description","SplitLayoutComponent_div_7_h1_1_Template","SplitLayoutComponent_div_7_h2_2_Template","SplitLayoutComponent_div_7_p_3_Template","SplitLayoutComponent","_SplitLayoutComponent","background","backgroundUrl","backgroundPosition","sideBlocks","showSignupBtn","ENABLE_SIGNUP","showLoginBtn","returnUrl","ngContentSelectors","_c0","SplitLayoutComponent_div_7_Template","TopNavbarComponent","NgFor","AvatarUploadDirective","_AvatarUploadDirective","userId","avatar","fromSources","makeFileUploadName","file","apiTriggerSuffix","Utils","mimeToExtension","mimetype","avatarUrlStyle","onFileUploadFinished","onFileUploadFailed","EditableAvatarComponent","_EditableAvatarComponent","avatarUrl","store","DEFAULT_USER_AVATAR","canEditAvatar","isLoading","res","USER_AVATAR_UPLOAD_CDN","USER_AVATAR_UPLOAD_PATH","USER_AVATAR_UPLOAD_CDN_FILETYPE","tempAvatar","Date","now","clearTimeout","_timeout","setTimeout","dispatch","userActions","console","log","captureError","error","EditableAvatarComponent_div_0_Template","EditableAvatarComponent_div_1_Template","EditableAvatarComponent_ion_button_2_Template","IonSpinner"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/billing/shared/components/event-detail/event-detail.component.html","./src/app/billing/shared/components/event-detail/event-detail.component.ts","./src/app/core/filestack/directives/poster-upload.directive.ts","./src/app/modules/tagger-input/tags.ts","./src/app/shared/components/layouts/split-layout/split-layout.component.html","./src/app/shared/components/layouts/split-layout/split-layout.component.ts","./src/app/core/filestack/directives/avatar-upload.directive.ts","./src/app/studio/shared/components/editable-avatar/editable-avatar.component.html","./src/app/studio/shared/components/editable-avatar/editable-avatar.component.ts"],"sourcesContent":["<div class=\"event-detail ion-text-capitalize\">\n  <div *ngIf=\"isPopover\" class=\"popover-close\">\n    <ion-button size=\"small\" fill=\"clear\">\n      <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n    </ion-button>\n  </div>\n  <ion-grid class=\"ion-no-padding\">\n    <ion-row>\n      <ion-col size=\"10\">\n        <ion-grid>\n          <ion-row>\n            <ion-col size=\"12\" [attr.size-md]=\"isPopover ? 12 : 4\">\n              <h3>\n                {{ subscriptionLevel }}&nbsp;<span *ngIf=\"eventTitleTranslationPath\">{{ eventTitleTranslationPath | translate }}</span>\n                <!-- {{ 'AUTH.PLANS.SUBSCRIPTION_LEVEL' | translate }} -->\n              </h3>\n            </ion-col>\n            <ion-col size=\"12\" [attr.size-md]=\"isPopover ? 12 : 8\">\n              <dl>\n                <dt *ngIf=\"subscriptionBy\">{{ 'COMMON.OWNER' | translate }}:</dt>\n                <dd *ngIf=\"subscriptionBy\">{{ subscriptionBy }}</dd>\n                <dt>{{ 'AUTH.STATUS' | translate }}:</dt>\n                <dd>{{ (subscriptionisActive ? 'COMMON.ACTIVE' : 'COMMON.INACTIVE') | translate }}</dd>\n                <!-- TODO:\n                    COMMON.EXPIRES \n                    COMMON.RENEWS -->\n                <!-- <div *ngIf=\"project?.expires\">\n                  {{ 'COMMON.EXPIRES_OR_RENEWS' | translate }}: \n                  {{ 'GET DATE' }}\n                </div> -->\n                <dt>{{ 'COMMON.EVENT_DATE' | translate }}:</dt>\n                <dd>{{ eventDate }}</dd>\n              </dl>\n            </ion-col>\n          </ion-row>\n        </ion-grid>\n      </ion-col>\n      <ion-col *ngIf=\"!isPopover\" size=\"2\" class=\"col-right\">       \n        <ion-button \n          [disabled]=\"!subscriptionIsMine\"\n          fill=\"outline\"\n          (click)=\"editSubscription()\">\n          {{ 'COMMON.EDIT' | translate }}\n          <ion-icon slot=\"end\" name=\"create-outline\"></ion-icon>\n        </ion-button>\n      </ion-col>\n    </ion-row>\n    <ion-row *ngIf=\"isPopover\" class=\"popover-actions\">\n      <ion-col>\n        <ion-button \n          [disabled]=\"!subscriptionIsMine\"\n          fill=\"outline\"\n          (click)=\"editSubscription()\">\n          {{ 'COMMON.EDIT' | translate }}\n          <ion-icon slot=\"end\" name=\"create-outline\"></ion-icon>\n        </ion-button>\n      </ion-col>\n    </ion-row>\n  </ion-grid>\n</div>","/** @format */\n\nimport { Component, Input } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IonButton, IonIcon, IonGrid, IonRow, IonCol } from '@ionic/angular/standalone';\nimport { SubscriptionLevel } from '@app/billing/shared/billing.model';\nimport { BillingService } from '@app/billing/shared/services/billing.service';\n\n@Component({\n  selector: 'fs-event-detail',\n  templateUrl: './event-detail.component.html',\n  styleUrls: ['./event-detail.component.scss'],\n  standalone: true,\n  imports: [NgIf, TranslatePipe, IonButton, IonIcon, IonGrid, IonRow, IonCol],\n})\nexport class EventDetailComponent {\n  @Input() currentUserId: string;\n  @Input() subscriptionId;\n  @Input() subscriptionLevel;\n  @Input() subscriptionBy;\n  @Input() subscriptionisActive = false;\n  @Input() eventDate;\n  @Input() canEdit = false;\n  @Input() isPopover = false;\n\n  get subscriptionIsMine() {\n    return this.subscriptionBy && this.currentUserId === this.subscriptionBy;\n  }\n\n  get eventTitleTranslationPath() {\n    return this.subscriptionLevel === SubscriptionLevel.Wedding ? 'PROJECT.EVENT' : '';\n  }\n\n  constructor(\n    // private translate: TranslateService,\n    // private store: Store<State>,\n    private billingService: BillingService\n  ) {}\n\n  /**\n   * Do the check and call service\n   */\n  editSubscription() {\n    // this.isLoadingEvents = true;\n    if (this.canEdit && this.subscriptionId) {\n      this.billingService.openEditSubscription(this.subscriptionId);\n    }\n  }\n}\n","/** @format */\n\nimport { Directive, HostListener, Input } from '@angular/core';\nimport { Platform } from '@ionic/angular/standalone';\nimport { TranslateService } from '@ngx-translate/core';\nimport { filestackConfig } from 'src/environments/environment';\nimport { MAX_IMG_UPLOAD_SIZE_MB } from '@app/app.config';\nimport { SentryService } from '@app/core/services/sentry.service';\nimport { FilestackService } from '@app/core/filestack/filestack.service';\nimport { BaseFileUpload } from './base-file-upload';\n\n@Directive({\n    selector: '[posterUpload]',\n    standalone: true,\n})\nexport class PosterUploadDirective extends BaseFileUpload {\n  @Input() projectId: string = '';\n  @Input() userId: string;\n\n  protected customPickerOptions = {\n    maxSize: MAX_IMG_UPLOAD_SIZE_MB * 1024 * 1024,\n    accept: 'image/*',\n    storeTo: {\n      path: filestackConfig.storeTo.poster.path, // + this.projectId + '/', // note that projectId is not ready yet\n      container: filestackConfig.storeTo.poster.container,\n      region: filestackConfig.storeTo.poster.region,\n    },\n    /**\n     * Only for JPEG, PNG, and BMP files. Local and cropped images will be resized (upscaled or downscaled)\n     * to the specified dimensions before uploading. The original height to width ratio is maintained.\n     * To resize all images based on the width, set [width, null],\n     * https://filestack.github.io/filestack-js/interfaces/pickeroptions.html#imagedim\n     */\n    imageDim: [1200, null],\n    transformations: {\n      crop: {\n        force: true,\n        aspectRatio: 1.78,\n      },\n      force: true,\n      rotate: true,\n    },\n  };\n\n  constructor(\n    filestackService: FilestackService, \n    translate: TranslateService, \n    platform: Platform, \n    sentryService: SentryService\n  ) {\n    super(filestackService, translate, platform, sentryService);\n  }\n\n  @HostListener('click', ['$event'])\n  onClick(event: Event) {\n    // we need to get the projectId Input which is not available at construct...\n    if (this.projectId) {\n      const path = this.customPickerOptions.storeTo.path;\n      this.customPickerOptions.storeTo.path = path + this.projectId + '/';\n    }\n    this.openFilePicker(event);\n  }\n}\n","/** Tags for Home Page Filters */\nexport const HOME_TAGS: string[] = [\n  'arts',\n  'conservation',\n  'cooking',\n  'education',\n  'filmmaking',\n  'fire',\n  'oceans',\n  'sailing',\n  'science',\n  'technology',\n  'travel',\n  'water',\n  'weddings',\n  'wildlife',\n];\n\n/** Tags for autocomplete inputs */\nexport const ALL_TAGS: string[] = [\n  ...HOME_TAGS,\n  // common\n  'accessibility',\n  'adventure',\n  'amazing',\n  'astronomy',\n  'beach',\n  'challenge',\n  'civilization',\n  'decisions',\n  'ecosystems',\n  'environment',\n  'equality',\n  'evolution',\n  'explanation',\n  'fun',\n  'future',\n  'internet',\n  'kids',\n  'learning',\n  'life',\n  'macro',\n  'micro',\n  'media',\n  'meditation',\n  'memories',\n  'mindfulness',\n  'pets',\n  'programming',\n  'revolution',\n  'society',\n  'solutions',\n  'space',\n  'yoga',\n  // make people better\n  'genetics',\n  'CRISPR',\n  'Samira Kiani',\n  'George Church',\n  'Antonio Regalado',\n  'biosecurity',\n  'lab'\n];\n","<div class=\"split-layout\">\n  <div class=\"navbar\">\n    <app-top-navbar \n      class=\"light\"\n      theme=\"light\"\n      [backButtonReturnUrl]=\"returnUrl\"\n      [showSignupBtn]=\"showSignupBtn\"\n      [showLoginBtn]=\"showLoginBtn\"\n      [showSearch]=\"false\"></app-top-navbar>\n  </div>\n\n  <div class=\"row\">\n    <div\n      class=\"col-md-6 d-none d-md-block screen-item left\"\n      [style.background-image]=\"background\"\n      [style.background-position]=\"backgroundPosition\"\n    >\n      <div class=\"left__overlay\"></div>\n      <div class=\"left__content\">\n        <div *ngFor=\"let item of sideBlocks\" class=\"col-md-9 col-lg-6 blocks\">\n          <h1 *ngIf=\"item.title\">{{ item.title }}</h1>\n          <h2 *ngIf=\"item.subtitle\">{{ item.subtitle }}</h2>\n          <p *ngIf=\"item.description\">{{ item.description }}</p>\n        </div>\n      </div>\n    </div>\n    <div class=\"col-md-6 screen-item right light\">\n      <div class=\"right__content row\">\n        <div class=\"col-sm-9 col-md-12 col-lg-9 col-xl-8\" style=\"flex-basis: auto\">\n          <ng-content></ng-content>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","/** @format */\n\nimport { Component, Input } from '@angular/core';\nimport { NgFor, NgIf } from '@angular/common';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ENABLE_SIGNUP } from '@app/app.config';\nimport { TopNavbarComponent } from '@app/shared/components/top-navbar/top-navbar.component';\n/*\nTODO: implement service that gives us a stackID(s) and render as <featured-block>\nSideBlock[] = [{\n  title: 'Saving Turtles in our Seas',\n  description: 'The award-winning true story of a fisherman who breaks with tradition by going vegan and transitioning to plant-based diet.',\n  route: '/stack/watch/stackId',\n}];\n*/\n\nexport interface SideBlock {\n  title: string;\n  subtitle?: string;\n  description: string;\n}\n\n@Component({\n  selector: 'app-split-layout',\n  templateUrl: './split-layout.component.html',\n  styleUrls: ['./split-layout.component.scss'],\n  standalone: true,\n  imports: [TopNavbarComponent, NgFor, NgIf],\n})\nexport class SplitLayoutComponent {\n  @Input() backgroundUrl = 'https://projects.filmstacker.com/rhumbline-media/sea-turtle-900px.jpg';\n  @Input() backgroundPosition = 'center';\n  @Input() sideBlocks: SideBlock[] = [];\n  @Input() showSignupBtn = ENABLE_SIGNUP;\n  @Input() showLoginBtn = true;\n  @Input() returnUrl = '';\n\n  get background() {\n    return `url(${this.backgroundUrl})`;\n  }\n\n  constructor(private translate: TranslateService) {}\n\n  // /** @todo this is currently in SignupPage, move here?\n\n  //  * take the translateDepth and add if they exist\n  //  * @param root root prop(s)\n  //  * @param path inner path (free, pro, event...\n  //  * @param max the most you want, if they exist\n  //  * @returns SideBlock[]\n  //  *\n  //  *\n  //  */\n  //  buildSideBlocks(root = 'AUTH', path = 'SIGNUP', max = 3): SideBlock[] {\n  //   const rootPath = `${root}${ path ? '.' + path : '' }`;\n  //   const ret: SideBlock[] = [];\n\n  //   for (let index = 0; index < max; index++) {\n  //     // root index items do not have _#\n  //     const level = (index > 0) ? `_${ index +1}` : ``;\n  //     // path = free, pro, event\n  //     const title = this.translate.instant(`${rootPath}.SIDE_TITLE${level}`),\n  //           subtitle = this.translate.instant(`${rootPath}.SIDE_SUBTITLE${level}`),\n  //           description = this.translate.instant(`${rootPath}.SIDE_DESCRIPTION${level}`);\n  //     const block = {\n  //       ...(title && { title }),\n  //       ...(subtitle && { subtitle }),\n  //       ...(description && { description })\n  //     }\n  //     console.log(`buildSideBlocks:`, block)\n\n  //     if (block) {\n  //       ret.push(block)\n  //     }\n  //   }\n  //   return ret;\n  // }\n}\n","/** @format */\n\nimport { Directive, HostListener, Input } from '@angular/core';\nimport { Platform } from '@ionic/angular/standalone';\nimport { TranslateService } from '@ngx-translate/core';\nimport { filestackConfig } from 'src/environments/environment';\nimport { MAX_IMG_UPLOAD_SIZE_MB } from '@app/app.config';\nimport { SentryService } from '@app/core/services/sentry.service';\nimport { Utils } from '@app/shared/utils';\nimport { FilestackService, PickerFileMetadata } from '@app/core/filestack/filestack.service';\nimport { BaseFileUpload } from './base-file-upload';\n\n@Directive({\n  selector: '[avatarUpload]',\n  standalone: true,\n})\nexport class AvatarUploadDirective extends BaseFileUpload {\n  @Input() userId: string = 'anon';\n\n  protected customPickerOptions = {\n    maxSize: MAX_IMG_UPLOAD_SIZE_MB * 1024 * 1024,\n    accept: 'image/*',\n    storeTo: {\n      path: filestackConfig.storeTo.avatar.path,\n      container: filestackConfig.storeTo.avatar.container,\n      region: filestackConfig.storeTo.avatar.region,\n      // workflow appears to work, except that you have to rename the file to store it, but no dynamic options?\n      // workflows: ['b6a16479-80b9-4de1-94d7-5c9408adb7a5']\n    },\n    transformations: {\n      crop: {\n        force: true,\n        aspectRatio: 1,\n      },\n      force: true,\n      rotate: true,\n    },\n    fromSources: ['webcam', 'local_file_system', 'googledrive', 'onedrive', 'facebook', 'box', 'url'],\n  };\n\n  constructor(\n    filestackService: FilestackService,\n    translate: TranslateService,\n    platform: Platform,\n    sentryService: SentryService\n  ) {\n    super(filestackService, translate, platform, sentryService);\n  }\n\n  @HostListener('click', ['$event'])\n  onClick(event: Event) {\n    this.openFilePicker(event);\n  }\n\n  makeFileUploadName(file: PickerFileMetadata, userId = this.userId) {\n    // the apiTriggerSuffix is the key that the backend will use to trigger resize\n    return `${userId}${filestackConfig.storeTo.avatar.apiTriggerSuffix}.${Utils.mimeToExtension(file.mimetype)}`;\n  }\n}\n","<div *ngIf=\"isLoading\" class=\"avatar-loading\">\n  <ion-spinner color=\"secondary\"></ion-spinner>\n</div>\n<div *ngIf=\"avatarUrl\" class=\"avatar\" [style.background-image]=\"avatarUrlStyle\"></div>\n\n<ion-button avatarUpload *ngIf=\"canEditAvatar\" fill=\"solid\" color=\"primary\" class=\"profile-avatar__upload round\"\n  [userId]=\"userId\"\n  (fileUploadFinished)=\"onFileUploadFinished($event)\"\n  (fileUploadFailed)=\"onFileUploadFailed($event)\"\n>\n  <ion-icon slot=\"icon-only\" name=\"images-outline\"></ion-icon>\n</ion-button>\n","/** @format */\n\nimport { Component, Input } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { IonSpinner, IonButton, IonIcon } from '@ionic/angular/standalone';\nimport { Store } from '@ngrx/store';\nimport { State } from '@store/reducers';\nimport * as userActions from '@store/actions/user.actions';\nimport { SentryService } from '@app/core/services/sentry.service';\nimport { PickerFileError, PickerFileMetadata } from '@app/core/filestack/filestack.service';\nimport { AvatarUploadDirective } from '@app/core/filestack/directives/avatar-upload.directive';\nimport {\n  DEFAULT_USER_AVATAR,\n  USER_AVATAR_UPLOAD_CDN,\n  USER_AVATAR_UPLOAD_CDN_FILETYPE,\n  USER_AVATAR_UPLOAD_PATH,\n} from '@app/shared/models/user.model';\n\n/** How long does it take to upload, resize and clear CDN cache? */\nconst AVATAR_TIMEOUT = 3600;\n\n@Component({\n  selector: 'app-editable-avatar',\n  templateUrl: './editable-avatar.component.html',\n  styleUrls: ['./editable-avatar.component.scss'],\n  standalone: true,\n  imports: [NgIf, IonSpinner, IonButton, AvatarUploadDirective, IonIcon],\n})\nexport class EditableAvatarComponent {\n  @Input() userId: string;\n  @Input() avatarUrl = DEFAULT_USER_AVATAR;\n  @Input() canEditAvatar: boolean = false;\n\n  get avatarUrlStyle() {\n    return `url('${this.avatarUrl}')`;\n  }\n\n  isLoading = false;\n  private _timeout;\n\n  constructor(private store: Store<State>, private sentryService: SentryService) {}\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  onFileUploadFinished(res: PickerFileMetadata) {\n    /**\n     * @note res.url = filestack cdn link, but we really don't want that..\n     * rather, we know it'll be in our CDN, but we should wait a moment to request again\n     */\n    const avatar = `${USER_AVATAR_UPLOAD_CDN}${USER_AVATAR_UPLOAD_PATH}${this.userId}.${USER_AVATAR_UPLOAD_CDN_FILETYPE}`;\n    // we need the UI to change while the backend processes & invalidates cache (api will use the avatar, we will temp use this)\n    const tempAvatar = `${avatar}?v=${Date.now()}`;\n\n    this.isLoading = true;\n    clearTimeout(this._timeout);\n    this._timeout = setTimeout(() => {\n      this.store.dispatch(\n        userActions.setAvatar({\n          avatar,\n          tempAvatar,\n          // avatar: res.url\n        })\n      );\n      this.isLoading = false;\n    }, AVATAR_TIMEOUT);\n  }\n\n  onFileUploadFailed(res: PickerFileError) {\n    console.log('### fileUploadFailed', res);\n    this.sentryService.captureError(res.error);\n  }\n}\n"],"x_google_ignoreList":[]}