{"version":3,"file":"ngx-foldable.mjs","sources":["../../../projects/lib/src/core/media-queries.ts","../../../projects/lib/src/core/screen-spanning.ts","../../../projects/lib/src/core/screen-context.ts","../../../projects/lib/src/core/split-layout.directive.ts","../../../projects/lib/src/core/window.directive.ts","../../../projects/lib/src/core/if-span.directive.ts","../../../projects/lib/src/core/foldable.module.ts","../../../projects/lib/src/public-api.ts","../../../projects/lib/src/ngx-foldable.ts"],"sourcesContent":["/** Media query used to detect dual vertical viewports screen mode. */\nexport const dualVerticalViewport = '(vertical-viewport-segments: 2)';\n/** Media query used to detect dual horizontal viewports screen mode. */\nexport const dualHorizontalViewport = '(horizontal-viewport-segments: 2)';\n","/** Represents the screen spanning mode. */\nexport type ScreenSpanning = 'dual-horizontal' | 'dual-vertical' | 'none';\n/** Enumeration of screen spanning mode values. */\nexport const ScreenSpanning = {\n  /** Screen spanning mode is dual horizontal viewports. */\n  DualHorizontal: 'dual-horizontal' as ScreenSpanning,\n  /** Screen spanning mode is dual vertical viewports. */\n  DualVertical: 'dual-vertical' as ScreenSpanning,\n  /** No screen spanning (single screen mode). */\n  None: 'none' as ScreenSpanning,\n};\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { fromEvent, merge, Observable, ReplaySubject } from 'rxjs';\nimport { map, filter, shareReplay, startWith, takeUntil } from 'rxjs/operators';\nimport { dualVerticalViewport, dualHorizontalViewport } from './media-queries';\nimport { ScreenSpanning } from './screen-spanning';\n\ndeclare global {\n  interface Window {\n    getWindowSegments: () => DOMRect[];\n  }\n}\n\n/**\n * Holds information about the device screen context.\n */\nexport interface ScreenContextData {\n  /** The list of available window segments. */\n  readonly windowSegments: DOMRect[];\n  /** The current screen spanning mode. */\n  readonly screenSpanning: ScreenSpanning;\n  /** True is current device have multiple screens available. */\n  readonly isMultiScreen: boolean;\n}\n\n/**\n * This service allows to query and receive updates about current device's\n * screen context.\n *\n * See {@link ScreenContextData}\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ScreenContext implements ScreenContextData, OnDestroy {\n  private currentContext: ScreenContextData;\n  private screenContext$: Observable<ScreenContextData>;\n  private destroyed$: ReplaySubject<void> = new ReplaySubject(1);\n\n  constructor() {\n    this.currentContext = this.getScreenContext();\n    this.screenContext$ = merge(\n      fromEvent(matchMedia(dualVerticalViewport), 'change'),\n      fromEvent(matchMedia(dualHorizontalViewport), 'change')\n    ).pipe(\n      filter(\n        () => this.getScreenSpanning() !== this.currentContext.screenSpanning\n      ),\n      startWith(1),\n      map(() => {\n        this.currentContext = this.getScreenContext();\n        return this.currentContext;\n      }),\n      shareReplay(1),\n      takeUntil(this.destroyed$)\n    );\n    this.screenContext$.subscribe();\n  }\n\n  /** @ignored */\n  ngOnDestroy() {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n\n  /**\n   * The list of available window segments.\n   */\n  get windowSegments(): DOMRect[] {\n    return this.currentContext.windowSegments;\n  }\n\n  /**\n   * The current screen spanning mode.\n   */\n  get screenSpanning(): ScreenSpanning {\n    return this.currentContext.screenSpanning;\n  }\n\n  /**\n   * True is current device have multiple screens available.\n   */\n  get isMultiScreen(): boolean {\n    return this.currentContext.isMultiScreen;\n  }\n\n  /**\n   * Gets an observable emitting when the screen context changes.\n   */\n  asObservable(): Observable<ScreenContextData> {\n    return this.screenContext$;\n  }\n\n  /**\n   * Gets the current screen context.\n   */\n  asObject(): ScreenContextData {\n    return this.currentContext;\n  }\n\n  private getScreenContext(): ScreenContextData {\n    const windowSegments = this.getWindowSegments();\n    const screenSpanning = this.getScreenSpanning();\n    return {\n      windowSegments,\n      screenSpanning,\n      isMultiScreen: screenSpanning !== ScreenSpanning.None,\n    };\n  }\n\n  private getScreenSpanning(): ScreenSpanning {\n    if (matchMedia(dualVerticalViewport).matches) {\n      return ScreenSpanning.DualVertical;\n    } else if (matchMedia(dualHorizontalViewport).matches) {\n      return ScreenSpanning.DualHorizontal;\n    }\n    return ScreenSpanning.None;\n  }\n\n  private getWindowSegments(): DOMRect[] {\n    if ('getWindowSegments' in window) {\n      console.warn('getWindowSegments() is not supported anymore, please update your browser to use the new visualViewport API');\n    }\n    if ('visualViewport' in window) {\n      return (window.visualViewport as any).segments;\n    }\n    return [\n      new DOMRect(\n        window.pageXOffset,\n        window.pageYOffset,\n        window.innerWidth,\n        window.innerHeight\n      ),\n    ];\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  HostBinding,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport { SafeStyle } from '@angular/platform-browser';\nimport { Subscription } from 'rxjs';\nimport { ScreenContext } from './screen-context';\nimport { ScreenSpanning } from './screen-spanning';\n\n/**\n * Defines how the split layout container should be rendered when multi screen\n * is detected.\n * See {@link SplitLayoutDirective}\n */\nexport type SplitLayoutMode = 'flex' | 'grid' | 'absolute';\n/**\n * Enumeration of split layout modes values for use with\n * {@link SplitLayoutDirective}.\n */\nexport const SplitLayoutMode = {\n  Flex: 'flex' as SplitLayoutMode,\n  Grid: 'grid' as SplitLayoutMode,\n  Absolute: 'absolute' as SplitLayoutMode,\n\n  /**\n   * Checks if the given string value is a valid {@link SplitLayoutMode}.\n   *\n   * @param value The value to check.\n   * @return true if the value is a valid {@link SplitLayoutMode}.\n   */\n  isValid: (value: string): boolean => {\n    switch (value) {\n      case SplitLayoutMode.Flex:\n      case SplitLayoutMode.Grid:\n      case SplitLayoutMode.Absolute:\n        return true;\n    }\n    return false;\n  },\n};\n\n/**\n * Defines how the split layout container should order the window segments\n * when in horizontal spanning mode vs vertical spanning mode.\n * See {@link SplitLayoutDirective}\n */\nexport type WindowOrder = 'normal' | 'reverse';\n/**\n * Enumeration of window order values for use with\n * {@link SplitLayoutDirective}.\n */\nexport const WindowOrder = {\n  Normal: 'normal' as WindowOrder,\n  Reverse: 'reverse' as WindowOrder,\n\n  /**\n   * Checks if the given string value is a valid {@link WindowOrder}.\n   *\n   * @param value The value to check.\n   * @return true if the value is a valid {@link WindowOrder}.\n   */\n  isValid: (value: string): boolean => {\n    switch (value) {\n      case WindowOrder.Normal:\n      case WindowOrder.Reverse:\n        return true;\n    }\n    return false;\n  },\n};\n\n/**\n * Defines the text reading direction for the host element.\n */\nexport type ReadingDirection = 'ltr' | 'rtl';\n/**\n * Enumeration of the text reading direction values.\n */\nexport const ReadingDirection = {\n  LeftToRight: 'ltr' as ReadingDirection,\n  RightToLeft: 'rtl' as ReadingDirection,\n};\n\n/**\n * Look 'ma, CSS-in-JS with Angular! ಠ_ಠ\n *\n * @ignore\n */\nconst layoutStyles = {\n  [SplitLayoutMode.Flex]: {\n    common: {\n      display: 'flex',\n      justifyContent: 'space-between',\n      height: 'env(viewport-segment-bottom 0 1)',\n    },\n    [ScreenSpanning.DualHorizontal]: {\n      flexDirection: 'row',\n    },\n    [ScreenSpanning.DualVertical]: {\n      flexDirection: 'column',\n    },\n    [WindowOrder.Reverse]: {\n      flexDirection: 'column-reverse',\n    },\n  },\n  [SplitLayoutMode.Grid]: {\n    common: {\n      display: 'grid',\n      height: 'env(viewport-segment-bottom 0 1)',\n    },\n    [ScreenSpanning.DualHorizontal]: {\n      gridTemplateColumns: '1fr 1fr',\n      gridTemplateAreas: '\"segment0 segment1\"',\n      gridAutoFlow: 'row',\n      columnGap: 'calc(env(viewport-segment-left 1 0) - env(viewport-segment-right 0 0))',\n    },\n    [ScreenSpanning.DualVertical]: {\n      gridTemplateRows: '1fr 1fr',\n      gridTemplateAreas: '\"segment0\" \"segment1\"',\n      gridAutoFlow: 'row',\n      rowGap: 'calc(env(viewport-segment-top 0 1) - env(viewport-segment-bottom 0 0))',\n    },\n    [WindowOrder.Reverse]: {\n      gridTemplateRows: '1fr 1fr',\n      gridTemplateAreas: '\"segment0\" \"segment1\"',\n      gridAutoFlow: 'row',\n      rowGap: 'calc(env(viewport-segment-top 0 1) - env(viewport-segment-bottom 0 0))',\n    },\n  },\n  [SplitLayoutMode.Absolute]: {\n    common: {\n      position: 'relative',\n      height: 'env(viewport-segment-bottom 0 1)',\n    },\n    [ScreenSpanning.DualHorizontal]: {},\n    [ScreenSpanning.DualVertical]: {},\n    [WindowOrder.Reverse]: {},\n  },\n};\n\n/**\n * Defines a parent layout container for creating a split layout on multi\n * screen devices.\n *\n * When used on a single screen device, no layout change (CSS) is added.\n * You can choose between different {@link SplitLayoutMode} to suit your\n * design.\n *\n * This directive should be used along with {@link WindowDirective}.\n *\n * @example\n * <div fdSplitLayout=\"grid\">\n *              <section fdWindow=\"0\">Will be displayed on first screen</section>\n *              <section fdWindow=\"1\">Will be displayed on second screen (if available)</section>\n * </div>\n *\n * In addition, you can also choose keep the same window segments order or\n * reverse it when the spanning mode change from vertical to horizontal using\n * a second optional parameter on the directive:\n *\n * @example\n * <div fdSplitLayout=\"flex reverse\">\n *              <section fdWindow=\"0\">\n *                Will be displayed on first screen in vertical spanning mode\n *                and on the second screen in horizontal spanning mode.\n *              </section>\n *              <section fdWindow=\"1\">\n *                Will be displayed on second screen in vertical spanning mode\n *                and on the first screen in horizontal spanning mode.\n *              </section>\n * </div>\n */\n@Directive({\n  selector: '[fdSplitLayout]',\n})\nexport class SplitLayoutDirective implements OnDestroy {\n  private mode: SplitLayoutMode = SplitLayoutMode.Flex;\n  private order: WindowOrder = WindowOrder.Normal;\n  private layoutStyle: SafeStyle = {};\n  private screenContextSubscription: Subscription | null = null;\n  private direction: ReadingDirection = 'ltr';\n\n  /**\n   * Sets the current split layout options to use when multi screen is\n   * detected.\n   *\n   * @param options The split layout options to use.\n   * Format: `[mode] [order]`\n   * - The {@link SplitLayoutMode} to use (default is {@link SplitLayoutMode.Flex}).\n   * - The {@link WindowOrder} to use (default is {@link WindowOrder.Normal}).\n   */\n  @Input()\n  set fdSplitLayout(options: string | undefined) {\n    this.parseOptions(options || '');\n    this.updateStyle();\n  }\n\n  /** @ignore */\n  @HostBinding('style')\n  get style(): SafeStyle {\n    return this.layoutStyle;\n  }\n\n  constructor(\n    private element: ElementRef,\n    private screenContext: ScreenContext\n  ) {\n    this.updateStyle();\n    this.screenContextSubscription = this.screenContext\n      .asObservable()\n      .subscribe(() => this.updateStyle());\n  }\n\n  /**\n   * The current split layout mode to use when multi screen is detected.\n   *\n   * @return The current split layout mode.\n   */\n  get layoutMode(): SplitLayoutMode {\n    return this.mode;\n  }\n\n  /**\n   * The window segments order to use when in horizontal spanning mode.\n   *\n   * @return The current window order.\n   */\n  get windowOrder(): WindowOrder {\n    return this.order;\n  }\n\n  /**\n   * The text reading direction for the host element.\n   *\n   * @return The text reading direction.\n   */\n  get readingDirection(): ReadingDirection {\n    return this.direction;\n  }\n\n  /** @ignore */\n  ngOnDestroy() {\n    if (this.screenContextSubscription !== null) {\n      this.screenContextSubscription.unsubscribe();\n    }\n  }\n\n  private parseOptions(options: string) {\n    let [mode, order] = options.trim().split(' ');\n    mode = SplitLayoutMode.isValid(mode) ? mode : SplitLayoutMode.Flex;\n    order = WindowOrder.isValid(order) ? order : WindowOrder.Normal;\n    this.mode = mode as SplitLayoutMode;\n    this.order = order as WindowOrder;\n  }\n\n  private updateStyle() {\n    const isMultiScreen = this.screenContext.isMultiScreen;\n    const spanning = this.screenContext.screenSpanning;\n    const reverse =\n      spanning === ScreenSpanning.DualVertical &&\n      this.order === WindowOrder.Reverse;\n\n    this.direction =\n      (getComputedStyle(this.element.nativeElement)\n        ?.direction as ReadingDirection) || ReadingDirection.LeftToRight;\n\n    if (isMultiScreen && spanning !== ScreenSpanning.None) {\n      this.layoutStyle = {\n        ...layoutStyles[this.mode].common,\n        ...layoutStyles[this.mode][reverse ? WindowOrder.Reverse : spanning],\n      };\n    } else {\n      this.layoutStyle = {};\n    }\n  }\n}\n","import { Directive, Host, HostBinding, Input, OnDestroy } from '@angular/core';\nimport { SafeStyle } from '@angular/platform-browser';\nimport { Subscription } from 'rxjs';\nimport { ScreenContext } from './screen-context';\nimport { ScreenSpanning } from './screen-spanning';\nimport {\n  ReadingDirection,\n  SplitLayoutDirective,\n  SplitLayoutMode,\n  WindowOrder,\n} from './split-layout.directive';\n\n/**\n * Look 'ma, CSS-in-JS with Angular! ಠ_ಠ\n *\n * @ignore\n */\nconst layoutStyles = {\n  [SplitLayoutMode.Flex]: {\n    [ScreenSpanning.DualHorizontal]: [\n      { flex: '0 0 env(viewport-segment-width 0 0)' },\n      { flex: '0 0 env(viewport-segment-width 1 0)' },\n    ],\n    [ScreenSpanning.DualVertical]: [\n      { flex: '0 0 env(viewport-segment-height 0 0)' },\n      { flex: '0 0 env(viewport-segment-height 0 1)' },\n    ],\n  },\n  [SplitLayoutMode.Grid]: {\n    [ScreenSpanning.DualHorizontal]: [\n      { gridArea: 'segment0' },\n      { gridArea: 'segment1' },\n    ],\n    [ScreenSpanning.DualVertical]: [\n      {\n        gridArea: 'segment0',\n        height: 'env(viewport-segment-height 0 0)'\n      },\n      {\n        gridArea: 'segment1',\n        height: 'env(viewport-segment-height 0 1)'\n      },\n    ],\n  },\n  [SplitLayoutMode.Absolute]: {\n    [ScreenSpanning.DualHorizontal]: [\n      {\n        position: 'absolute',\n        left: 0,\n        width: 'env(viewport-segment-right 0 0)',\n      },\n      {\n        position: 'absolute',\n        left: 'env(viewport-segment-left 1 0)',\n        right: 0,\n      },\n    ],\n    [ScreenSpanning.DualVertical]: [\n      {\n        position: 'absolute',\n        top: 0,\n        width: '100%',\n        maxHeight: 'env(viewport-segment-height 0 0)',\n      },\n      {\n        position: 'absolute',\n        top: 'env(viewport-segment-top 0 1)',\n        width: '100%',\n        maxHeight: 'env(viewport-segment-height 0 1)',\n      },\n    ],\n  },\n};\n\n/**\n * This directive is used to set specify on which window segment the container\n * should be placed on multi screen devices.\n *\n * When used on a single screen device, no layout change (CSS) is added.\n * Only devices with up to two screen are currently supported, meaning that the\n * window segment value must be either 0 or 1.\n *\n * This directive can only be used within a {@link SplitLayoutDirective}.\n * If {@link SplitLayoutMode} is set to `absolute`, you can assign multiple\n * container element to the same window segment.\n *\n * Note that if you have set the read direction to Right-To-Left mode (`rtl`)\n * in CSS, the first segment will be the rightmost one.\n *\n * If the {@link WindowOrder} option is set to {@link WindowOrder.Reverse},\n * the window segments order will be reversed in horizontal spanning mode.\n *\n * @example\n * <div fdSplitLayout=\"grid\">\n *              <section fdWindow=\"0\">Will be displayed on first screen</section>\n *              <section fdWindow=\"1\">Will be displayed on second screen (if available)</section>\n * </div>\n */\n@Directive({\n  selector: '[fdWindow]',\n})\nexport class WindowDirective implements OnDestroy {\n  private segment = -1;\n  private layoutStyle: SafeStyle = {};\n  private screenContextSubscription: Subscription | null = null;\n\n  /** @ignore */\n  @HostBinding('style')\n  get style(): SafeStyle {\n    return this.layoutStyle;\n  }\n\n  /**\n   * Sets the target window segment to display this container on when multi\n   * screen is detected.\n   *\n   * @param segment The target window segment, must be 0 or 1.\n   */\n  @Input()\n  set fdWindow(segment: number | string) {\n    segment = typeof segment === 'string' ? parseInt(segment, 10) : segment;\n    if (segment !== this.segment) {\n      this.segment = segment;\n      this.updateStyle();\n    }\n  }\n\n  constructor(\n    private screenContext: ScreenContext,\n    @Host() private splitLayout: SplitLayoutDirective\n  ) {\n    this.screenContextSubscription = this.screenContext\n      .asObservable()\n      .subscribe(() => this.updateStyle());\n  }\n\n  /** @ignore */\n  ngOnDestroy() {\n    if (this.screenContextSubscription !== null) {\n      this.screenContextSubscription.unsubscribe();\n    }\n  }\n\n  private updateStyle() {\n    if (this.segment === -1) {\n      return;\n    }\n\n    const isMultiScreen = this.screenContext.isMultiScreen;\n    const spanning = this.screenContext.screenSpanning;\n\n    if (isMultiScreen && spanning !== ScreenSpanning.None) {\n      if (this.segment < 0 || this.segment > 1) {\n        throw new Error('Segment index must be 0 or 1');\n      }\n\n      const mode = this.splitLayout.layoutMode;\n      const order = this.splitLayout.windowOrder;\n      const direction = this.splitLayout.readingDirection;\n      // Swap segments for vertical span and RTL mode or\n      // horizontal span and reverse window order\n      const swap =\n        (spanning === ScreenSpanning.DualHorizontal &&\n          mode !== SplitLayoutMode.Grid &&\n          direction === ReadingDirection.RightToLeft) ||\n        (spanning === ScreenSpanning.DualVertical &&\n          order === WindowOrder.Reverse);\n\n      const segment = swap ? 1 - this.segment : this.segment;\n      this.layoutStyle = layoutStyles[mode][spanning][segment];\n    } else {\n      this.layoutStyle = {};\n    }\n  }\n}\n","import {\n  Directive,\n  EmbeddedViewRef,\n  Input,\n  OnDestroy,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ScreenContext } from './screen-context';\nimport { ScreenSpanning } from './screen-spanning';\n\n/** Spanning mode conditions for use with {@link IfSpanDirective}. */\nexport type SpanCondition =\n  | 'dual-horizontal'\n  | 'dual-vertical'\n  | 'none'\n  | 'multi';\n/**\n * Enumeration of spanning mode conditions values for use with\n * {@link IfSpanDirective}.\n */\nexport const SpanCondition = {\n  /** Screen spanning mode is dual horizontal viewports. */\n  Vertical: 'dual-horizontal' as SpanCondition,\n  /** Screen spanning mode is dual vertical viewports. */\n  Horizontal: 'dual-vertical' as SpanCondition,\n  /** No screen spanning (single screen mode). */\n  None: 'none' as SpanCondition,\n  /** Any screen spanning mode is active (multi screen mode). */\n  Multi: 'multi' as SpanCondition,\n};\n\n/**\n * Shows template only if the current screen spanning mode matches\n * specified {@link SpanCondition}.\n *\n * Behaves like `ngIf`, except that it accepts a {@link SpanCondition} instead of\n * a boolean expression.\n *\n * @example\n * <p *fdIdSpan=\"'multi'\">This text will only be visible on multi screen devices.</p>\n * @example\n * <p *fdIdSpan=\"'none'; else alt\">This text will only be visible on single screen devices.</p>\n * <ng-template #alt\">This text will only be visible on multi screen devices.</ng-template>\n */\n@Directive({\n  selector: '[fdIfSpan]',\n})\nexport class IfSpanDirective<T> implements OnDestroy {\n  private screenContextSubscription: Subscription | null = null;\n  private condition: SpanCondition | null = null;\n  private thenTemplateRef: TemplateRef<T> | null = null;\n  private elseTemplateRef: TemplateRef<T> | null = null;\n  private thenViewRef: EmbeddedViewRef<T> | null = null;\n  private elseViewRef: EmbeddedViewRef<T> | null = null;\n\n  /**\n   * The spanning mode condition that defines if the template should be shown.\n   *\n   * @param condition The spanning mode condition for showing the template.\n   */\n  @Input()\n  set fdIfSpan(condition: SpanCondition) {\n    if (condition !== this.condition) {\n      this.condition = condition;\n      this.updateView();\n    }\n  }\n\n  /** A template to show if the span condition evaluates to true. */\n  @Input()\n  set fdIfSpanThen(templateRef: TemplateRef<T> | null) {\n    this.thenTemplateRef = templateRef;\n    this.thenViewRef = null;\n    this.updateView();\n  }\n\n  /** A template to show if the span condition evaluates to false. */\n  @Input()\n  set fdIfSpanElse(templateRef: TemplateRef<T> | null) {\n    this.elseTemplateRef = templateRef;\n    this.thenViewRef = null;\n    this.updateView();\n  }\n\n  constructor(\n    private screenContext: ScreenContext,\n    private viewContainer: ViewContainerRef,\n    templateRef: TemplateRef<T>\n  ) {\n    this.thenTemplateRef = templateRef;\n    this.screenContextSubscription = this.screenContext\n      .asObservable()\n      .subscribe(() => this.updateView());\n  }\n\n  /** ignore */\n  ngOnDestroy() {\n    if (this.screenContextSubscription !== null) {\n      this.screenContextSubscription.unsubscribe();\n    }\n  }\n\n  private matchCondition(): boolean {\n    switch (this.condition) {\n      case SpanCondition.Multi:\n        return this.screenContext.isMultiScreen;\n      case SpanCondition.Horizontal:\n        return this.screenContext.screenSpanning === ScreenSpanning.DualVertical;\n      case SpanCondition.Vertical:\n        return this.screenContext.screenSpanning === ScreenSpanning.DualHorizontal;\n      default:\n        return this.screenContext.screenSpanning === ScreenSpanning.None;\n    }\n  }\n\n  private updateView() {\n    const match = this.matchCondition();\n\n    if (match) {\n      if (!this.thenViewRef) {\n        this.viewContainer.clear();\n        this.elseViewRef = null;\n        if (this.thenTemplateRef) {\n          this.thenViewRef = this.viewContainer.createEmbeddedView(\n            this.thenTemplateRef\n          );\n        }\n      }\n    } else {\n      if (!this.elseViewRef) {\n        this.viewContainer.clear();\n        this.thenViewRef = null;\n        if (this.elseTemplateRef) {\n          this.elseViewRef = this.viewContainer.createEmbeddedView(\n            this.elseTemplateRef\n          );\n        }\n      }\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { IfSpanDirective } from './if-span.directive';\nimport { WindowDirective } from './window.directive';\nimport { SplitLayoutDirective } from './split-layout.directive';\n\n/**\n * This module contains utilities to help you build your app layout for multi\n * screen devices.\n *\n * See {@link SplitLayoutDirective},\n * {@link WindowDirective},\n * {@link IfSpanDirective},\n * {@link ScreenContext}\n */\n@NgModule({\n  declarations: [IfSpanDirective, WindowDirective, SplitLayoutDirective],\n  exports: [IfSpanDirective, WindowDirective, SplitLayoutDirective],\n})\nexport class FoldableModule {}\n","/*\n * Public API Surface of ngx-foldable\n */\n\nexport * from './core/screen-context';\nexport * from './core/screen-spanning';\nexport * from './core/media-queries';\nexport * from './core/split-layout.directive';\nexport * from './core/window.directive';\nexport * from './core/if-span.directive';\nexport * from './core/foldable.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["layoutStyles","i1.ScreenContext","i2.SplitLayoutDirective"],"mappings":"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"}