{"version":3,"file":"angular-twitter-timeline.mjs","sources":["../../../projects/angular-twitter-timeline/src/lib/angular-twitter-timeline.service.ts","../../../projects/angular-twitter-timeline/src/lib/angular-twitter-timeline.component.ts","../../../projects/angular-twitter-timeline/src/lib/angular-twitter-timeline-data.interface.ts","../../../projects/angular-twitter-timeline/src/lib/angular-twitter-timeline-options.interface.ts","../../../projects/angular-twitter-timeline/src/public-api.ts","../../../projects/angular-twitter-timeline/src/angular-twitter-timeline.ts"],"sourcesContent":["import { Injectable, inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Observable, of } from \"rxjs\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AngularTwitterTimelineService {\n  private readonly TWITTER_SCRIPT_ID = 'twitter-wjs';\n  private readonly TWITTER_WIDGET_URL = 'https://platform.twitter.com/widgets.js';\n  private platformId = inject(PLATFORM_ID);\n\n  loadScript(): Observable<any> {\n    if (!isPlatformBrowser(this.platformId)) {\n      return of(null);\n    }\n\n    return new Observable((observer) => {\n      this.startScriptLoad();\n\n      if ((<any>window)['twttr'] && (<any>window)['twttr'].ready) {\n        (<any>window)['twttr'].ready((twttr: any) => {\n          observer.next(twttr);\n          observer.complete();\n        });\n      } else {\n        // Fallback if ready is not available immediately\n        const checkInterval = setInterval(() => {\n           if ((<any>window)['twttr'] && (<any>window)['twttr'].ready) {\n             clearInterval(checkInterval);\n             (<any>window)['twttr'].ready((twttr: any) => {\n               observer.next(twttr);\n               observer.complete();\n             });\n           }\n        }, 100);\n      }\n    });\n  }\n\n  private startScriptLoad(): void {\n    if (document.getElementById(this.TWITTER_SCRIPT_ID)) {\n      return;\n    }\n\n    (<any>window)['twttr'] = (function (d, s, id, url) {\n      let script: any;\n      let firstScriptEl: any = d.getElementsByTagName(s)[0];\n      let twitterScript: any = (<any>window)['twttr'] || {};\n\n      if (d.getElementById(id)) {\n        return twitterScript;\n      }\n\n      script = d.createElement(s);\n      script.id = id;\n      script.src = url;\n      firstScriptEl.parentNode.insertBefore(script, firstScriptEl);\n\n      twitterScript._e = [];\n\n      twitterScript.ready = function (f: any) {\n        twitterScript._e.push(f);\n      };\n\n      return twitterScript;\n    }(document, 'script', this.TWITTER_SCRIPT_ID, this.TWITTER_WIDGET_URL));\n  }\n}\n","import { Component, ElementRef, input, effect, inject, ChangeDetectionStrategy, PLATFORM_ID, computed, signal, DestroyRef } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { AngularTwitterTimelineService } from \"./angular-twitter-timeline.service\";\nimport { AngularTwitterTimelineOptionsInterface } from \"./angular-twitter-timeline-options.interface\";\nimport { AngularTwitterTimelineDataInterface } from \"./angular-twitter-timeline-data.interface\";\n\n@Component({\n  selector: 'angular-twitter-timeline',\n  standalone: true,\n  host: {\n    '[class.loading]': 'loading()'\n  },\n  template: `\n    @if (loading()) {\n      <div class=\"loading-placeholder\" [style.height]=\"height()\" role=\"status\" aria-live=\"polite\">\n        <div class=\"spinner\" aria-hidden=\"true\"></div>\n        <span>Loading Tweets...</span>\n      </div>\n    }\n    <a class=\"twitter-timeline\"\n       [href]=\"fallbackUrl()\"\n       [attr.aria-label]=\"'Tweets by ' + displayName()\">\n      Tweets by {{ displayName() }}\n    </a>\n    <noscript>\n      <a class=\"twitter-timeline-noscript\"\n         [href]=\"fallbackUrl()\"\n         [attr.aria-label]=\"'Tweets by ' + displayName()\">\n        Tweets by {{ displayName() }}\n      </a>\n    </noscript>\n  `,\n  styles: [`\n    :host {\n      display: block;\n      width: 100%;\n      min-height: 100px;\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    }\n    :host(.loading) .twitter-timeline {\n      display: none;\n    }\n    .loading-placeholder {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      padding: 2rem;\n      color: #657786;\n      font-size: 0.9rem;\n      gap: 0.75rem;\n    }\n    .spinner {\n      width: 28px;\n      height: 28px;\n      border: 3px solid #e1e8ed;\n      border-top-color: #1da1f2;\n      border-radius: 50%;\n      animation: spin 0.8s linear infinite;\n    }\n    @keyframes spin {\n      to {\n        transform: rotate(360deg);\n      }\n    }\n    .twitter-timeline, .twitter-timeline-noscript {\n      color: #1da1f2;\n      text-decoration: none;\n      font-weight: 500;\n    }\n    .twitter-timeline:hover, .twitter-timeline-noscript:hover {\n      text-decoration: underline;\n    }\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AngularTwitterTimelineComponent {\n  // Modern Angular signals\n  data = input.required<AngularTwitterTimelineDataInterface>();\n\n  /**\n   * A hash of additional options to configure the widget\n   */\n  opts = input<AngularTwitterTimelineOptionsInterface>();\n\n  loading = signal(true);\n\n  fallbackUrl = computed(() => {\n    const currentData = this.data();\n    if (!currentData) return 'https://twitter.com';\n    if (currentData.sourceType === 'url') {\n      return currentData.url || 'https://twitter.com';\n    }\n    return `https://twitter.com/${currentData.screenName || ''}`;\n  });\n\n  displayName = computed(() => {\n    const currentData = this.data();\n    if (!currentData) return 'Twitter';\n    if (currentData.sourceType === 'url') {\n      return currentData.url ? currentData.url.split('/').pop() : 'Twitter';\n    }\n    return currentData.screenName || 'Twitter';\n  });\n\n  height = computed(() => {\n    const options = this.opts();\n    if (options && options.height) {\n      return typeof options.height === 'number' ? `${options.height}px` : options.height;\n    }\n    return `${this.defaultOpts.height}px`;\n  });\n\n  private element = inject(ElementRef);\n  private twitterTimelineService = inject(AngularTwitterTimelineService);\n  private platformId = inject(PLATFORM_ID);\n  private destroyRef = inject(DestroyRef);\n  private scriptSubscription?: Subscription;\n\n  defaultOpts: AngularTwitterTimelineOptionsInterface = {\n    theme: 'light',\n    height: 600\n  };\n\n  defaultData: AngularTwitterTimelineDataInterface = {\n    sourceType: 'url',\n    url: 'https://twitter.com/mustafaer_dev',\n    screenName: 'Mustafa ER'\n  };\n\n  constructor() {\n    this.destroyRef.onDestroy(() => {\n      this.scriptSubscription?.unsubscribe();\n    });\n\n    // Use effect to respond to input changes\n    effect(() => {\n      const currentData = this.data();\n      if (currentData && currentData.sourceType) {\n        this.loadTwitterWidget();\n      }\n    });\n  }\n\n  loadTwitterWidget() {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n\n    this.loading.set(true);\n    this.scriptSubscription?.unsubscribe();\n\n    this.scriptSubscription = this.twitterTimelineService\n      .loadScript()\n      .subscribe({\n        next: () => {\n          let nativeElement = this.element.nativeElement;\n          \n          if (!(<any>window)['twttr'] || !(<any>window)['twttr'].widgets) {\n            console.error('Twitter widgets script loaded but twttr or twttr.widgets is not defined.');\n            this.loading.set(false);\n            return;\n          }\n\n          // Clear loading placeholder and fallback link from DOM right before widget creation\n          nativeElement.innerHTML = \"\";\n\n          const combinedData = { ...this.defaultData, ...this.data() };\n          if (combinedData.sourceType === 'url') {\n            delete combinedData.screenName;\n          } else if (combinedData.sourceType === 'profile') {\n            delete combinedData.url;\n          }\n\n          (<any>window)['twttr']\n            .widgets\n            .createTimeline(\n              combinedData,\n              nativeElement,\n              {...this.defaultOpts, ...this.opts()}\n            )\n            .then(() => {\n              this.loading.set(false);\n            })\n            .catch((error: any) => {\n              console.error(error);\n              this.loading.set(false);\n            });\n        },\n        error: (error: any) => {\n          console.error(error);\n          this.loading.set(false);\n        },\n      });\n  }\n\n}\n","/**\n * Interface for X (Twitter) Embedded Timeline data configuration\n * Updated for X platform changes (November 2024)\n */\nexport class AngularTwitterTimelineDataInterface {\n  /**\n   * Type of timeline to embed\n   * 'profile' - User profile timeline\n   * 'url' - Timeline from a specific URL (profile, likes, list, or collection)\n   */\n  sourceType: 'profile' | 'url' = 'profile';\n\n  /**\n   * Valid X (Twitter) username (without @ symbol)\n   * Used when sourceType is 'profile'\n   * Example: 'mustafaer_dev'\n   */\n  screenName?: string;\n\n  /**\n   * Absolute URL of an X (Twitter) profile, likes, list, or collection\n   * Used when sourceType is 'url'\n   * Example: 'https://twitter.com/angular' or 'https://x.com/angular'\n   */\n  url?: string;\n}\n","/**\n * Updated interface for X (Twitter) Embedded Timeline options\n * Based on the latest X platform changes (November 2024)\n * Reference: https://twittercommunity.com/t/embedded-timelines-update-parameters-support/177112\n *\n * DEPRECATED PARAMETERS (no longer supported):\n * - tweetLimit (removed)\n * - chrome (removed)\n * - ariaPolite (removed)\n * - borderColor (removed)\n */\nexport class AngularTwitterTimelineOptionsInterface {\n  /**\n   * Set a fixed height of the embedded widget\n   * Positive integer (in pixels)\n   * Recommended range: 200-2000\n   */\n  height?: number;\n\n  /**\n   * Set a fixed width of the embedded widget\n   * Positive integer (in pixels)\n   * Note: Timeline will be responsive if not specified\n   */\n  width?: number;\n\n  /**\n   * Sets the theme of the widget. Default = 'light'.\n   * Supported values: 'light' or 'dark'\n   */\n  theme?: 'light' | 'dark';\n\n  /**\n   * Language code for the rendered timeline\n   * BCP 47 language code (e.g., 'en', 'es', 'fr', 'de', 'ja')\n   * Default: User's browser language\n   */\n  lang?: string;\n\n  /**\n   * @deprecated This parameter is no longer supported by X (Twitter)\n   * Previously used to limit the number of tweets displayed\n   */\n  tweetLimit?: number;\n\n  /**\n   * @deprecated This parameter is no longer supported by X (Twitter)\n   * Previously used to adjust border colors\n   */\n  borderColor?: string;\n\n  /**\n   * @deprecated This parameter is no longer supported by X (Twitter)\n   * Previously used to toggle display elements (noheader, nofooter, etc.)\n   */\n  chrome?: string[];\n\n  /**\n   * @deprecated This parameter is no longer supported by X (Twitter)\n   * Previously used for aria-polite behavior\n   */\n  ariaPolite?: string[];\n}\n","/*\n * Public API Surface of angular-twitter-timeline\n */\n\nexport * from './lib/angular-twitter-timeline.service';\nexport * from './lib/angular-twitter-timeline.component';\nexport * from './lib/angular-twitter-timeline-data.interface';\nexport * from './lib/angular-twitter-timeline-options.interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}