{"version":3,"file":"tableau-ui-angular-drawer.mjs","sources":["../../../projects/component-library/drawer/src/drawer.component.ts","../../../projects/component-library/drawer/src/drawer-container.component.ts","../../../projects/component-library/drawer/src/drawer-container.component.html","../../../projects/component-library/drawer/src/tableau-ui-drawer-module.ts","../../../projects/component-library/drawer/src/tableau-ui-angular-drawer.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, model, TemplateRef, viewChild } from '@angular/core';\n\n@Component({\n  selector: 'tab-drawer',\n  standalone: false,\n  template: ` <ng-template><ng-content /></ng-template> `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DrawerComponent {\n  readonly $template = viewChild.required<TemplateRef<unknown>>(TemplateRef);\n\n  /**\n   * The drawer position.\n   * When changed after the drawer is opened, it will only be applied next open.\n   * @default 'left'\n   */\n  readonly $position = input<'left' | 'right'>('left', {\n    alias: 'position',\n  });\n\n  /**\n   * The border to show between the drawer and the content.\n   * @default 'solid 1px var(--twc-color-border-light)'\n   */\n  readonly $border = input('solid 1px var(--twc-color-border-light)', {\n    alias: 'border',\n  });\n  /**\n   * The gap to apply to between the drawer and the content.\n   * This is useful to avoid content being too close to the edges.\n   * Any CSS value is accepted, like '10px', '1rem', '2em', etc.\n   * @default '0.5rem'\n   */\n  readonly $padding = input('0.5rem', {\n    alias: 'padding',\n  });\n  /**\n   * The drawer mode.\n   * When changed after the drawer is opened, it will only be applied next open\n   */\n  // readonly $mode = input.required<'over' | 'side'>({\n  //   alias: 'mode'\n  // });\n\n  /**\n   * The drawer width.\n   * This can be a CSS value like '300px', '50%', or '30rem'.\n   */\n  readonly $width = input.required<string>({\n    alias: 'width',\n  });\n\n  /**\n   * The drawer status.\n   * @default 'false'\n   */\n  readonly $isOpen = model(false, {\n    alias: 'isOpen',\n  });\n}\n","import { ChangeDetectionStrategy, Component, computed, contentChildren, effect } from '@angular/core';\nimport { DrawerComponent } from './drawer.component';\n\n@Component({\n  selector: 'tab-drawer-container',\n  standalone: false,\n  templateUrl: './drawer-container.component.html',\n  styleUrl: './drawer-container.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DrawerContainerComponent {\n  private readonly $drawers = contentChildren(DrawerComponent);\n\n  private readonly drawersChanged = effect(() => {\n    const drawers = this.$drawers();\n    const leftDrawers = drawers.filter(e => e.$position() === 'left');\n    const rightDrawers = drawers.filter(e => e.$position() === 'right');\n    if (leftDrawers.length > 1) {\n      throw new Error('There can only be one left drawer.');\n    }\n    if (rightDrawers.length > 1) {\n      throw new Error('There can only be one right drawer.');\n    }\n  });\n  readonly $leftDrawer = computed(() => this.$drawers().find(e => e.$position() === 'left'));\n  readonly $rightDrawer = computed(() => this.$drawers().find(e => e.$position() === 'right'));\n\n  readonly $rightDrawerPositionExpression = computed(() => {\n    const rightDrawer = this.$rightDrawer();\n    if (!rightDrawer) {\n      return '0px';\n    }\n    const width = rightDrawer.$width();\n    let padding = rightDrawer.$padding();\n    // if padding is just a number, add px\n    if (/^\\d+$/.test(padding)) {\n      padding += 'px';\n    }\n    const borderWidth = this.getBorderWidth(rightDrawer.$border()) ?? '0px';\n    const ret = `${width} + (${padding} * 2) + ${borderWidth}`;\n    return ret;\n  });\n  readonly $leftDrawerPositionExpression = computed(() => {\n    const leftDrawer = this.$leftDrawer();\n    if (!leftDrawer) {\n      return '0px';\n    }\n    const width = leftDrawer.$width();\n    let padding = leftDrawer.$padding();\n    // if padding is just a number, add px\n    if (/^\\d+$/.test(padding)) {\n      padding += 'px';\n    }\n    const borderWidth = this.getBorderWidth(leftDrawer.$border()) ?? '0px';\n    const ret = `${width} + (${padding} * 2) + ${borderWidth}`;\n    return ret;\n  });\n\n  private getBorderWidth(border: string): string | null {\n    const parts = border.trim().split(/\\s+/);\n    const widthRegex = /^(\\d+(\\.\\d+)?)(px|em|rem|%)$/;\n    for (const part of parts) {\n      if (widthRegex.test(part)) {\n        return part;\n      }\n    }\n    return null;\n  }\n}\n","@let leftDrawer = $leftDrawer();\n@let rightDrawer = $rightDrawer();\n@if (leftDrawer) {\n  <div\n    #leftDrawerWrapper\n    class=\"drawer left\"\n    [style.left]=\"leftDrawer.$isOpen() ? '0' : `calc(-1 * (${$leftDrawerPositionExpression()}))`\"\n    [style.width]=\"leftDrawer.$width()\"\n    [style.borderRight]=\"leftDrawer.$border()\"\n  >\n    <ng-container [ngTemplateOutlet]=\"leftDrawer.$template()\" />\n  </div>\n}\n<div\n  class=\"drawer-content\"\n  [style.right]=\"rightDrawer?.$isOpen() ? `calc(${$rightDrawerPositionExpression()})` : '0'\"\n  [style.left]=\"leftDrawer?.$isOpen() ? `calc(${$leftDrawerPositionExpression()})` : '0'\"\n>\n  <ng-content />\n</div>\n\n@if (rightDrawer) {\n  <div\n    class=\"drawer right\"\n    [style.right]=\" rightDrawer.$isOpen() ? '0' :`calc(-1 * (${$rightDrawerPositionExpression()}))`\"\n    [style.width]=\"rightDrawer.$width()\"\n    [style.borderLeft]=\"rightDrawer.$border()\"\n  >\n    <ng-container [ngTemplateOutlet]=\"rightDrawer.$template()\" />\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DrawerContainerComponent } from './drawer-container.component';\nimport { DrawerComponent } from './drawer.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [DrawerContainerComponent, DrawerComponent],\n  exports: [DrawerContainerComponent, DrawerComponent],\n})\nexport class TableauUiDrawerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}