{"version":3,"file":"ng-doc-app-components-playground.mjs","sources":["../../../../libs/app/components/playground/playground-demo/playground-demo.component.ts","../../../../libs/app/components/playground/playground-demo/playground-demo.component.html","../../../../libs/app/components/playground/playground-property/playground-property.component.ts","../../../../libs/app/components/playground/playground-property/playground-property.component.html","../../../../libs/app/components/playground/playground-properties/playground-properties.component.ts","../../../../libs/app/components/playground/playground-properties/playground-properties.component.html","../../../../libs/app/components/playground/playground.component.ts","../../../../libs/app/components/playground/playground.component.html","../../../../libs/app/components/playground/base-playground.ts","../../../../libs/app/components/playground/ng-doc-app-components-playground.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  DestroyRef,\n  inject,\n  InjectionToken,\n  Injector,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  Type,\n  ViewChild,\n  ViewContainerRef,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroup } from '@angular/forms';\nimport { NgDocDemoDisplayerComponent } from '@ng-doc/app/components/demo-displayer';\nimport { formatHtml } from '@ng-doc/app/helpers';\nimport { getPlaygroundDemoToken } from '@ng-doc/app/providers/playground-demo';\nimport { NgDocFormPartialValue } from '@ng-doc/app/types';\nimport {\n  buildPlaygroundDemoPipeTemplate,\n  buildPlaygroundDemoTemplate,\n} from '@ng-doc/core/helpers/build-playground-demo-template';\nimport { objectKeys } from '@ng-doc/core/helpers/object-keys';\nimport { stringify } from '@ng-doc/core/helpers/stringify';\nimport { NgDocPlaygroundConfig, NgDocPlaygroundProperties } from '@ng-doc/core/interfaces';\nimport { Subject } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\n\nimport { NgDocBasePlayground } from '../base-playground';\nimport { NgDocPlaygroundForm } from '../playground-form';\n\n@Component({\n  selector: 'ng-doc-playground-demo',\n  templateUrl: './playground-demo.component.html',\n  styleUrls: ['./playground-demo.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgDocDemoDisplayerComponent],\n})\nexport class NgDocPlaygroundDemoComponent<\n    T extends NgDocPlaygroundProperties = NgDocPlaygroundProperties,\n  >\n  implements OnChanges, OnDestroy\n{\n  @Input()\n  id: string = '';\n\n  @Input()\n  pipeName: string = '';\n\n  @Input()\n  selector: string = '';\n\n  @Input()\n  configuration?: NgDocPlaygroundConfig;\n\n  @Input()\n  properties?: T;\n\n  @Input()\n  recreateDemo: boolean = false;\n\n  @Input()\n  form!: FormGroup<NgDocPlaygroundForm>;\n\n  @Input()\n  expanded: boolean = false;\n\n  @ViewChild('demoOutlet', { static: true, read: ViewContainerRef })\n  demoOutlet?: ViewContainerRef;\n\n  playgroundDemo?: typeof NgDocBasePlayground;\n\n  protected code = '';\n\n  protected readonly injector = inject(Injector);\n  protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n  protected readonly destroyRef = inject(DestroyRef);\n\n  private demoRef?: ComponentRef<NgDocBasePlayground>;\n  private readonly unsubscribe$: Subject<void> = new Subject<void>();\n\n  async ngOnChanges({ form, id }: SimpleChanges): Promise<void> {\n    if (form || id) {\n      this.unsubscribe$.next();\n\n      const demoInjector: InjectionToken<Array<typeof NgDocBasePlayground>> | undefined =\n        getPlaygroundDemoToken(this.id);\n\n      if (demoInjector) {\n        const demos: Array<typeof NgDocBasePlayground> = this.injector.get(demoInjector, []);\n\n        this.playgroundDemo = demos.find(\n          (demo: typeof NgDocBasePlayground) =>\n            demo.selector === this.selector || demo.selector === this.pipeName,\n        );\n      }\n\n      await this.updateDemo();\n\n      this.form?.valueChanges\n        .pipe(\n          takeUntil(this.unsubscribe$),\n          startWith(this.form?.value),\n          takeUntilDestroyed(this.destroyRef),\n        )\n        .subscribe((data: NgDocFormPartialValue<typeof this.form>) => this.updateDemo(data));\n    }\n  }\n\n  private async updateDemo(data?: NgDocFormPartialValue<typeof this.form>): Promise<void> {\n    if (this.recreateDemo || !this.demoRef) {\n      this.createDemo();\n    }\n\n    if (data) {\n      this.demoRef?.setInput('properties', data.properties ?? {});\n      this.demoRef?.setInput('content', data.content ?? {});\n      this.demoRef?.setInput('actionData', this.configuration?.data ?? {});\n\n      if (this.recreateDemo) {\n        this.demoRef?.instance.onReattached.subscribe(() => {\n          this.demoRef?.changeDetectorRef.detectChanges();\n        });\n      }\n    }\n\n    await this.updateCodeView();\n  }\n\n  private createDemo(): void {\n    if (this.playgroundDemo) {\n      this.demoRef?.destroy();\n      this.demoRef = this.demoOutlet?.createComponent(\n        this.playgroundDemo as unknown as Type<NgDocBasePlayground>,\n      );\n      this.demoRef?.changeDetectorRef.markForCheck();\n    }\n  }\n\n  private async updateCodeView(): Promise<void> {\n    const template: string = this.pipeName\n      ? buildPlaygroundDemoPipeTemplate(\n          this.configuration?.template ?? '',\n          this.pipeName,\n          this.getActiveContent(),\n          this.getPipeActiveInputs(),\n        )\n      : buildPlaygroundDemoTemplate(\n          this.configuration?.template ?? '',\n          this.selector,\n          this.getActiveContent(),\n          this.getActiveInputs(),\n        );\n\n    this.code = await formatHtml(template);\n    this.changeDetectorRef.markForCheck();\n  }\n\n  private getActiveContent(): Record<string, string> {\n    const formData: Record<string, boolean> =\n      (this.form?.controls.content.value as Record<string, boolean>) ?? {};\n\n    return objectKeys(formData).reduce((result: Record<string, string>, key: string) => {\n      result[key] = formData[key] ? this.configuration?.content?.[key].template ?? '' : '';\n\n      return result;\n    }, {});\n  }\n\n  private getActiveInputs(): Record<string, string> {\n    const formData: Record<string, unknown> =\n      (this.form?.controls.properties.value as Record<string, unknown>) ?? {};\n\n    return objectKeys(formData).reduce((result: Record<string, string>, key: string) => {\n      const inputName = this.properties?.[key]?.inputName ?? key;\n      const value: unknown = formData[key];\n      const property: unknown | undefined = this.demoRef?.instance?.defaultValues[key];\n\n      if (property !== value) {\n        result[inputName] = stringify(value).replace(/\"/g, `'`);\n      }\n\n      return result;\n    }, {});\n  }\n\n  private getPipeActiveInputs(): Record<string, string> {\n    const formData: Record<string, unknown> =\n      (this.form?.controls.properties.value as Record<string, unknown>) ?? {};\n    let changedInputIndex: number = -1;\n\n    return objectKeys(formData)\n      .map((key: string, i: number) => {\n        const value: unknown = formData[key];\n        const defaultValue: unknown | undefined = this.demoRef?.instance?.defaultValues[key];\n\n        if (defaultValue !== value) {\n          changedInputIndex = i;\n        }\n\n        return key;\n      })\n      .slice(0, changedInputIndex + 1)\n      .reduce((result: Record<string, string>, key: string) => {\n        result[key] = stringify(formData[key]).replace(/\"/g, `'`);\n\n        return result;\n      }, {});\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<ng-doc-demo-displayer [code]=\"code\" [border]=\"false\" [expanded]=\"expanded\" language=\"angular-html\">\n  <ng-container #demoOutlet></ng-container>\n</ng-doc-demo-displayer>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ComponentRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  SimpleChanges,\n  ViewChild,\n  ViewContainerRef,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { isPlaygroundProperty } from '@ng-doc/app/helpers';\nimport {\n  NgDocProvidedTypeControl,\n  NgDocTypeControl,\n  NgDocTypeControlProviderOptions,\n} from '@ng-doc/app/interfaces';\nimport { NgDocSanitizeHtmlPipe } from '@ng-doc/app/pipes';\nimport { NgDocPlaygroundContent, NgDocPlaygroundProperty } from '@ng-doc/core/interfaces';\nimport { NgDocLabelComponent, NgDocTooltipDirective } from '@ng-doc/ui-kit';\n\n@Component({\n  selector: 'ng-doc-playground-property',\n  templateUrl: './playground-property.component.html',\n  styleUrls: ['./playground-property.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgDocLabelComponent, NgDocTooltipDirective, NgDocSanitizeHtmlPipe],\n})\nexport class NgDocPlaygroundPropertyComponent implements OnChanges {\n  @Input()\n  name: string = '';\n\n  @Input()\n  property?: NgDocPlaygroundProperty | NgDocPlaygroundContent;\n\n  @Input()\n  typeControl?: NgDocProvidedTypeControl;\n\n  @Input()\n  control?: FormControl;\n\n  @Input()\n  defaultValue?: unknown;\n\n  @ViewChild('propertyOutlet', { read: ViewContainerRef, static: true })\n  propertyOutlet?: ViewContainerRef;\n\n  protected option?: NgDocTypeControlProviderOptions;\n  private propertyTypeControl?: ComponentRef<NgDocTypeControl>;\n\n  ngOnChanges({ property, control, typeControl, defaultValue }: SimpleChanges): void {\n    if ((property || control || typeControl || defaultValue) && this.property && this.typeControl) {\n      this.propertyTypeControl?.destroy();\n      this.propertyTypeControl = undefined;\n\n      if (this.typeControl && this.propertyOutlet) {\n        this.propertyTypeControl = this.propertyOutlet.createComponent(this.typeControl.control);\n        this.propertyTypeControl.instance.name = this.name;\n        this.propertyTypeControl.instance.description = this.tooltipContent;\n        this.propertyTypeControl.instance.options = isPlaygroundProperty(this.property)\n          ? this.property.options\n          : undefined;\n        this.propertyTypeControl.instance.default = this.defaultValue;\n        this.propertyTypeControl.instance.isManual = isPlaygroundProperty(this.property)\n          ? this.property.isManual\n          : undefined;\n        this.propertyTypeControl.instance.writeValue(this.control?.value);\n\n        this.option = this.typeControl.options;\n      }\n\n      if (this.control) {\n        this.control?.registerOnChange((value: string) =>\n          this.propertyTypeControl?.instance?.writeValue(value),\n        );\n        this.propertyTypeControl?.instance.registerOnChange((value: unknown) =>\n          this.control?.setValue(value),\n        );\n        this.propertyTypeControl?.instance.registerOnTouched(() => this.control?.markAsTouched());\n      }\n    }\n  }\n\n  @HostBinding('attr.data-has-property-control')\n  get hasPropertyControl(): boolean {\n    return !!this.propertyTypeControl;\n  }\n\n  get tooltipContent(): string {\n    return this.property && isPlaygroundProperty(this.property)\n      ? this.property.description ?? ''\n      : '';\n  }\n}\n","<label [ng-doc-label]=\"option?.hideLabel ? '' : labelContent\">\n\t<ng-template #labelContent>\n\t\t<span\n\t\t\t[ngDocTooltip]=\"tooltipTemplate\"\n\t\t\t[canOpen]=\"!!tooltipContent\"\n\t\t\t[positions]=\"['left-center', 'top-right', 'bottom-right']\"\n\t\t\t>{{ name }}</span\n\t\t>\n\t\t<ng-template #tooltipTemplate>\n\t\t\t<div [innerHTML]=\"tooltipContent | ngDocSanitizeHtml\"></div>\n\t\t</ng-template>\n\t</ng-template>\n\t<ng-container #propertyOutlet></ng-container>\n</label>\n","import { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\nimport { AsyncPipe, KeyValuePipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  inject,\n  InjectionToken,\n  Injector,\n  Input,\n  isDevMode,\n  OnChanges,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { FormControl, FormGroup, FormsModule } from '@angular/forms';\nimport { isPlaygroundProperty } from '@ng-doc/app/helpers';\nimport { NgDocProvidedTypeControl } from '@ng-doc/app/interfaces';\nimport { getTokenForType } from '@ng-doc/app/providers/type-control';\nimport { extractValueOrThrow } from '@ng-doc/core/helpers/extract-value';\nimport { isPresent } from '@ng-doc/core/helpers/is-present';\nimport { objectKeys } from '@ng-doc/core/helpers/object-keys';\nimport {\n  NgDocPlaygroundContent,\n  NgDocPlaygroundProperties,\n  NgDocPlaygroundProperty,\n} from '@ng-doc/core/interfaces';\nimport {\n  NgDocBindPipe,\n  NgDocButtonComponent,\n  NgDocCheckboxComponent,\n  NgDocExecutePipe,\n  NgDocIconComponent,\n  NgDocTextComponent,\n  NgDocTextRightDirective,\n  NgDocTooltipDirective,\n} from '@ng-doc/ui-kit';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { NgDocPlaygroundForm } from '../playground-form';\nimport { NgDocPlaygroundPropertyComponent } from '../playground-property/playground-property.component';\nimport { NgDocPlaygroundPropertyControl } from '../playground-property-control';\n\n@Component({\n  selector: 'ng-doc-playground-properties',\n  templateUrl: './playground-properties.component.html',\n  styleUrls: ['./playground-properties.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    NgDocTextComponent,\n    NgDocButtonComponent,\n    NgDocCheckboxComponent,\n    FormsModule,\n    NgDocTooltipDirective,\n    NgDocIconComponent,\n    NgDocTextRightDirective,\n    NgDocPlaygroundPropertyComponent,\n    AsyncPipe,\n    KeyValuePipe,\n    NgDocBindPipe,\n    NgDocExecutePipe,\n  ],\n})\nexport class NgDocPlaygroundPropertiesComponent<\n  P extends NgDocPlaygroundProperties,\n  C extends Record<string, NgDocPlaygroundContent>,\n> implements OnChanges\n{\n  protected readonly breakpointObserver = inject(BreakpointObserver);\n  private injector = inject(Injector);\n\n  @Input()\n  form!: FormGroup<NgDocPlaygroundForm>;\n\n  @Input()\n  properties?: P;\n\n  @Input()\n  ignoreInputs?: string[] = [];\n\n  @Input()\n  dynamicContent?: C;\n\n  @Input()\n  defaultValues?: Record<string, unknown>;\n\n  @Input()\n  hideSidePanel: boolean = false;\n\n  @Input()\n  recreateDemo: boolean = false;\n\n  @Input()\n  showResetButton: boolean = false;\n\n  @Output()\n  recreateDemoChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  @Output()\n  resetForm: EventEmitter<void> = new EventEmitter<void>();\n\n  readonly breakpoints: string[] = [Breakpoints.XSmall];\n  readonly observer: Observable<boolean>;\n\n  protected propertyControls: NgDocPlaygroundPropertyControl[] = [];\n  protected contentTypeControl?: NgDocProvidedTypeControl = this.getControlForType('boolean');\n\n  constructor() {\n    this.observer = this.breakpointObserver\n      .observe(this.breakpoints)\n      .pipe(map((state: BreakpointState) => state.matches));\n  }\n\n  ngOnChanges({ properties }: SimpleChanges): void {\n    if (properties && this.properties) {\n      this.propertyControls = objectKeys(this.properties)\n        .filter((key: keyof P) => this.ignoreInputs?.includes(String(key)) !== true)\n        .map((key: keyof P) => {\n          if (this.properties) {\n            const property: NgDocPlaygroundProperty = this.properties[key];\n            const typeControl: NgDocProvidedTypeControl | undefined = this.getTypeControl(property);\n\n            if (typeControl) {\n              return {\n                propertyName: String(key),\n                property,\n                typeControl,\n              };\n            }\n          }\n\n          return null;\n        })\n        .filter(isPresent)\n        .sort((a: NgDocPlaygroundPropertyControl, b: NgDocPlaygroundPropertyControl) => {\n          const aOrder: number | undefined = a.typeControl.options?.order;\n          const bOrder: number | undefined = b.typeControl.options?.order;\n\n          if (isPresent(aOrder) && isPresent(bOrder)) {\n            return aOrder - bOrder;\n          }\n          if (isPresent(aOrder)) {\n            return -1;\n          }\n          if (isPresent(bOrder)) {\n            return 1;\n          }\n          return a.property.inputName.localeCompare(b.property.inputName);\n        });\n    }\n  }\n\n  getFormControl(controlType: keyof typeof this.form.controls, key: string): FormControl {\n    return this.form.get(controlType)?.get(key) as FormControl;\n  }\n\n  private getTypeControl(property: NgDocPlaygroundProperty): NgDocProvidedTypeControl | undefined {\n    const type: string = property.type;\n    const typeControl: NgDocProvidedTypeControl | undefined =\n      this.getControlForType(type) ??\n      this.getControlForTypeAlias(\n        isPlaygroundProperty(property) ? property.options : undefined,\n        property.isManual,\n      );\n\n    if (!typeControl && isDevMode()) {\n      console.warn(\n        `NgDocPlayground didn't find the control for the @Input \"${property.inputName}\", the type \"${type}\" was not recognized'`,\n      );\n    }\n\n    return typeControl;\n  }\n\n  private getControlForType(type: string): NgDocProvidedTypeControl | undefined {\n    const token: InjectionToken<NgDocProvidedTypeControl> | undefined = getTokenForType(type);\n\n    return token ? this.injector.get(token) : undefined;\n  }\n\n  private getControlForTypeAlias(\n    options?: string[],\n    isManual?: boolean,\n  ): NgDocProvidedTypeControl | undefined {\n    if (options && options.length) {\n      let optionsIsValid: boolean = true;\n\n      if (!isManual) {\n        try {\n          // checking that all values are extractable\n          options.forEach((item: string) => extractValueOrThrow(item));\n        } catch {\n          optionsIsValid = false;\n        }\n      }\n\n      if (optionsIsValid) {\n        const token: InjectionToken<NgDocProvidedTypeControl> | undefined =\n          getTokenForType('NgDocTypeAlias');\n\n        return token ? this.injector.get(token) : undefined;\n      }\n    }\n\n    return undefined;\n  }\n}\n","@if (defaultValues) {\n  <div class=\"ng-doc-playground-properties-wrapper\" [class.vertical]=\"observer | async\">\n    <div class=\"ng-doc-playground-demos\">\n      <ng-content></ng-content>\n    </div>\n    @if (!hideSidePanel) {\n      <div class=\"ng-doc-playground-properties\">\n        <div class=\"ng-doc-playground-header\">\n          <h4 ng-doc-text>Playground</h4>\n          @if (showResetButton) {\n            <button ng-doc-button color=\"alert\" (click)=\"resetForm.emit()\">Reset</button>\n          }\n        </div>\n        <div class=\"ng-doc-playground-setting\">\n          <ng-doc-checkbox\n            [(ngModel)]=\"recreateDemo\"\n            (ngModelChange)=\"recreateDemoChange.emit($event)\">\n            <span\n              ng-doc-text\n              [ngDocTooltip]=\"'Recreates demo everytime\\none of the input has changed'\"\n              [positions]=\"['bottom-right', 'left-center']\">\n              Recreate\n              <ng-doc-icon icon=\"info\" ngDocTextRight></ng-doc-icon>\n            </span>\n          </ng-doc-checkbox>\n        </div>\n        <div class=\"ng-doc-playground-divider\"></div>\n        @if (propertyControls.length) {\n          <h5 class=\"ng-doc-title\" ng-doc-text>Settings</h5>\n          @for (propertyControl of propertyControls; track propertyControl) {\n            <ng-doc-playground-property\n              [name]=\"propertyControl.property.inputName\"\n              [property]=\"propertyControl.property\"\n              [typeControl]=\"propertyControl.typeControl\"\n              [defaultValue]=\"defaultValues[propertyControl.propertyName]\"\n              [control]=\"\n                getFormControl | bind: this | execute: 'properties' : propertyControl.propertyName\n              \">\n            </ng-doc-playground-property>\n          }\n        }\n        @if ((dynamicContent | keyvalue)?.length) {\n          <h5 class=\"ng-doc-title\" ng-doc-text>Content</h5>\n          @for (content of dynamicContent | keyvalue; track content) {\n            <ng-doc-playground-property\n              [name]=\"content.value.label\"\n              [property]=\"content.value\"\n              [typeControl]=\"contentTypeControl\"\n              [control]=\"getFormControl | bind: this | execute: 'content' : content.key\">\n            </ng-doc-playground-property>\n          }\n        }\n      </div>\n    }\n  </div>\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  Input,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { NgDocRootPage } from '@ng-doc/app/classes/root-page';\nimport { isSameObject } from '@ng-doc/core/helpers/is-same-object';\nimport { objectKeys } from '@ng-doc/core/helpers/object-keys';\nimport {\n  NgDocPlaygroundConfig,\n  NgDocPlaygroundOptions,\n  NgDocPlaygroundProperties,\n} from '@ng-doc/core/interfaces';\nimport { NgDocAsArrayPipe } from '@ng-doc/ui-kit';\n\nimport { NgDocPlaygroundDemoComponent } from './playground-demo/playground-demo.component';\nimport { NgDocPlaygroundForm } from './playground-form';\nimport { NgDocPlaygroundPropertiesComponent } from './playground-properties/playground-properties.component';\n\n@Component({\n  selector: 'ng-doc-playground',\n  templateUrl: './playground.component.html',\n  styleUrls: ['./playground.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgDocPlaygroundPropertiesComponent, NgDocPlaygroundDemoComponent, NgDocAsArrayPipe],\n})\nexport class NgDocPlaygroundComponent<\n    T extends NgDocPlaygroundProperties = NgDocPlaygroundProperties,\n  >\n  implements OnChanges, AfterViewInit\n{\n  private readonly rootPage = inject(NgDocRootPage);\n  private readonly formBuilder = inject(FormBuilder);\n\n  @Input({ required: true })\n  id: string = '';\n\n  @Input()\n  pipeName: string = '';\n\n  @Input()\n  selectors: string[] = [];\n\n  @Input()\n  properties?: T;\n\n  @Input()\n  options: NgDocPlaygroundOptions = {};\n\n  recreateDemo: boolean = false;\n  formGroup!: FormGroup<NgDocPlaygroundForm>;\n  defaultValues?: Record<string, unknown>;\n  configuration!: NgDocPlaygroundConfig;\n\n  private defaultProperties: Record<string, unknown> = {};\n  private defaultContent: Record<string, boolean> = {};\n\n  constructor() {}\n\n  ngOnChanges({ options }: SimpleChanges) {\n    if (options) {\n      // Join configuration with options\n      this.configuration = Object.assign(\n        {},\n        this.rootPage.page?.playgrounds?.[this.id],\n        this.options,\n      );\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.defaultProperties = this.getPropertiesFormValues();\n    this.defaultContent = this.getContentFormValues();\n\n    const propertiesForm: FormGroup = this.formBuilder.group(this.defaultProperties);\n    const contentForm: FormGroup = this.formBuilder.group(this.defaultContent);\n\n    this.formGroup = this.formBuilder.group({\n      properties: propertiesForm,\n      content: contentForm,\n    });\n    // `patchValue` is needed to set `undefined` values, otherwise they will be ignored by the Angular form\n    this.formGroup.patchValue({\n      properties: Object.assign({}, this.defaultProperties, this.configuration.inputs),\n      content: this.defaultContent,\n    });\n  }\n\n  protected isDefaultState(): boolean {\n    if (!this.formGroup) {\n      return false;\n    }\n\n    return (\n      isSameObject(this.formGroup.value.properties ?? {}, this.defaultValues ?? {}) &&\n      isSameObject(this.formGroup.value.content ?? {}, this.defaultContent ?? {})\n    );\n  }\n\n  private getPropertiesFormValues(): Record<string, unknown> {\n    const formValues: Record<string, unknown> = objectKeys(this.properties ?? {}).reduce(\n      (controls: Record<string, unknown>, key: string) => {\n        if (this.properties) {\n          controls[key] = this.defaultValues ? this.defaultValues[key] : undefined;\n        }\n\n        return controls;\n      },\n      {} as Record<string, unknown>,\n    );\n\n    return Object.assign({}, formValues, this.configuration.defaults);\n  }\n\n  private getContentFormValues(): Record<string, boolean> {\n    return objectKeys(this.configuration?.content ?? {}).reduce(\n      (controls: Record<string, boolean>, key: string) => {\n        if (this.configuration?.content) {\n          controls[key] = false;\n        }\n\n        return controls;\n      },\n      {} as Record<keyof T, boolean>,\n    );\n  }\n\n  resetForm(): void {\n    this.formGroup.reset({}, { emitEvent: false });\n    this.formGroup?.patchValue({\n      properties: this.defaultProperties,\n      content: this.defaultContent,\n    });\n  }\n}\n","@if (configuration) {\n  <ng-doc-playground-properties\n    [form]=\"formGroup\"\n    [properties]=\"properties\"\n    [ignoreInputs]=\"configuration.hiddenInputs\"\n    [dynamicContent]=\"configuration.content\"\n    [hideSidePanel]=\"configuration.hideSidePanel ?? false\"\n    [defaultValues]=\"defaultValues\"\n    [showResetButton]=\"!isDefaultState()\"\n    [(recreateDemo)]=\"recreateDemo\"\n    (resetForm)=\"resetForm()\">\n    @for (selector of configuration.selectors ?? selectors | asArray; track selector) {\n      <ng-doc-playground-demo\n        [id]=\"id\"\n        [selector]=\"selector\"\n        [properties]=\"properties\"\n        [configuration]=\"configuration\"\n        [recreateDemo]=\"recreateDemo\"\n        [form]=\"formGroup\"\n        [expanded]=\"configuration.expanded ?? false\">\n      </ng-doc-playground-demo>\n    }\n    @if (pipeName) {\n      <ng-doc-playground-demo\n        [id]=\"id\"\n        [pipeName]=\"pipeName\"\n        [properties]=\"properties\"\n        [configuration]=\"configuration\"\n        [recreateDemo]=\"recreateDemo\"\n        [form]=\"formGroup\">\n      </ng-doc-playground-demo>\n    }\n  </ng-doc-playground-properties>\n}\n","import {\n  ChangeDetectorRef,\n  Directive,\n  inject,\n  Input,\n  OnInit,\n  Type,\n  ViewContainerRef,\n} from '@angular/core';\nimport { extractFunctionDefaults } from '@ng-doc/core/helpers/extract-function-defaults';\nimport { NgDocPlaygroundConfig } from '@ng-doc/core/interfaces';\nimport { Constructor } from '@ng-doc/core/types';\nimport { Observable, Subject, take } from 'rxjs';\n\nimport { NgDocPlaygroundComponent } from './playground.component';\n\n/**\n * Base class for playgrounds components.\n */\n@Directive()\nexport abstract class NgDocBasePlayground implements Pick<NgDocPlaygroundConfig, 'data'>, OnInit {\n  static readonly selector: string = 'unknown';\n  abstract readonly playground?: Type<any>;\n  abstract readonly viewContainerRef?: ViewContainerRef;\n  abstract readonly configData: Record<string, unknown>;\n\n  @Input()\n  properties: Record<string, any> = {};\n\n  @Input()\n  actionData: Record<string, unknown> = {};\n\n  @Input()\n  content: any = {};\n\n  defaultValues: Record<string, unknown> = {};\n\n  private reattached: Subject<void> = new Subject<void>();\n\n  private playgroundContainer: NgDocPlaygroundComponent = inject(NgDocPlaygroundComponent);\n  protected changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  protected constructor(private playgroundInstance?: Constructor<unknown>) {\n    this.changeDetectorRef.detach();\n  }\n\n  get onReattached(): Observable<void> {\n    return this.reattached.pipe(take(1));\n  }\n\n  ngOnInit(): void {\n    /*\n     * Extract default values from playground properties. We do this in `ngOnInit` because in this case\n     * input values provided from the template are not initialized yet, and we can read default values instead.\n     */\n    if (this.playground) {\n      this.defaultValues = Object.keys(this.playground).reduce(\n        (values: Record<string, unknown>, key: string) => {\n          if (this.playground) {\n            try {\n              values[key] =\n                // @ts-expect-error we do not know the type of the playground\n                typeof this.playground[key] === 'function'\n                  ? // @ts-expect-error we do not know the type of the playground\n                    this.playground[key]()\n                  : // @ts-expect-error we do not know the type of the playground\n                    this.playground[key];\n            } catch (e) {\n              // we do catch here because some of the playground properties can be getters and throw an error\n            }\n          }\n\n          return values;\n        },\n        {},\n      );\n    } else if (this.playgroundInstance) {\n      const defaults = extractFunctionDefaults(this.playgroundInstance.prototype.transform);\n\n      this.defaultValues = Object.keys(this.playgroundContainer.properties ?? {}).reduce(\n        (def: Record<string, unknown>, key: string, i: number) => {\n          // we do +1 because the first argument is the `value` of the transform function\n          def[key] = defaults[i + 1];\n\n          return def;\n        },\n        {},\n      );\n    } else {\n      throw new Error('Playground is not defined or initialized');\n    }\n\n    if (!this.playgroundContainer.defaultValues) {\n      this.playgroundContainer.defaultValues = this.defaultValues;\n    }\n\n    /*\n             This is a hack just to wait for the playground container to be initialized and only then\n             attach the change detector to have correct inputs values.\n         */\n    Promise.resolve().then(() => {\n      this.changeDetectorRef.reattach();\n      this.reattached.next();\n    });\n  }\n\n  get data(): any {\n    return Object.assign({}, this.configData, this.actionData);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}