{"version":3,"file":"obliczeniowo-elementary-json-def-table.mjs","sources":["../../../../projects/components/json-def-table/directives/safe-pipe/safe-pipe.directive.ts","../../../../projects/components/json-def-table/components/json-def-table/json-def-table.component.ts","../../../../projects/components/json-def-table/components/json-def-table/json-def-table.component.html","../../../../projects/components/json-def-table/json-def-table.module.ts","../../../../projects/components/json-def-table/obliczeniowo-elementary-json-def-table.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeResourceUrl, SafeScript, SafeStyle, SafeUrl } from '@angular/platform-browser';\n\n@Pipe({\n    name: 'safe',\n    standalone: false\n})\nexport class SafePipeDirective implements PipeTransform {\n  constructor(protected sanitizer: DomSanitizer) { }\n\n  public transform(value: any, type: 'html' | 'style' | 'script' | 'url' | 'resourceUrl'): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\n    switch (type) {\n      case 'html':\n        return this.sanitizer.bypassSecurityTrustHtml(value);\n      case 'style':\n        return this.sanitizer.bypassSecurityTrustStyle(value);\n      case 'script':\n        return this.sanitizer.bypassSecurityTrustScript(value);\n      case 'url':\n        return this.sanitizer.bypassSecurityTrustUrl(value);\n      case 'resourceUrl':\n        return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n    }\n  }\n}\n","import { OblFileService } from '@obliczeniowo/elementary/files';\nimport { TableHeaderCell } from './../../interfaces/table-data';\nimport { Component, input, model, SimpleChanges } from '@angular/core';\n\nimport { TableData } from '../../interfaces/table-data';\n\n@Component({\n    selector: 'obl-json-def-table',\n    templateUrl: './json-def-table.component.html',\n    styleUrls: ['./json-def-table.component.scss'],\n    standalone: false\n})\nexport class JsonDefTableComponent {\n  /** Data in form of JSON string or TableData interface */\n  data = model<TableData>();\n  /** Table json file url */\n  fileUrl = input<string>();\n\n  protected currentSortIndex: number = -1;\n\n  protected cellSort(cell: TableHeaderCell) {\n    if (cell.sort) {\n      this.sort(cell);\n    }\n  }\n\n  protected sort(cell: TableHeaderCell) {\n    if (!this.data) {\n      return;\n    }\n\n    const data = { ...(this.data()) };\n\n    if (data.body && data.header) {\n      this.currentSortIndex = data.header[0].cells.findIndex(searchElement => searchElement.value === cell.value);\n\n      cell.sort.direction = (cell.sort.direction === 'ASC' && 'DESC') || 'ASC';\n      if (cell.sort.type === 'number') {\n        data.body = data.body.sort((a, b) => (a.cells[this.currentSortIndex].value || '').localeCompare(b.cells[this.currentSortIndex].value || ''));\n      } else {\n        data.body = data.body.sort((a, b) => (a.cells[this.currentSortIndex].value || '').localeCompare(b.cells[this.currentSortIndex].value || ''));\n      }\n      if (cell.sort.direction === 'DESC') {\n        data.body = data.body.reverse();\n      }\n\n      this.data.set(data);\n    }\n  }\n\n  protected headerClass(cell: TableHeaderCell) {\n    return { ...(cell.class && { [cell.class]: true } || {}), sort: !!cell.sort }\n  }\n\n  constructor(private readonly file: OblFileService) {\n  }\n\n  async ngOnChanges(changes: SimpleChanges) {\n    if (changes.fileUrl && this.fileUrl()) {\n      const data = await this.file.loadJsonFile(this.fileUrl() as string);\n      if (data) {\n        this.data.set(data);\n      }\n    }\n  }\n}\n","<table cellspacing=\"0\">\n  @if (data()?.caption) {\n    <caption>\n      @if (data()?.caption?.name) {\n        <ng-content [select]=\"data()?.caption?.name\"></ng-content>\n      } @else {\n        {{ data()?.caption?.value }}\n      }\n    </caption>\n  }\n\n  @if (data()?.header) {\n    <thead>\n      @for (row of data()?.header; track $index) {\n        <tr>\n          @for (cell of row.cells; track $index) {\n            <th\n              [style.width]=\"cell.width\"\n              [colSpan]=\"cell.mergeX || 1\"\n              [rowSpan]=\"cell.mergeY || 1\"\n              [class.sort]=\"cell?.sort\"\n              (click)=\"cellSort(cell)\"\n            >\n              <div>\n                <ng-container\n                  *ngTemplateOutlet=\"\n                    (cell?.name && cellContent) || cellValue;\n                    context: { $implicit: cell, className: headerClass(cell) }\n                  \"\n                ></ng-container>\n                @if (cell?.sort && $index === currentSortIndex) {\n                  <span class=\"sort\">\n                    {{ (cell.sort.direction === 'ASC' && '↑') || '↓' }}\n                  </span>\n                }\n              </div>\n            </th>\n          }\n        </tr>\n      }\n    </thead>\n  }\n\n  @if (data()?.body) {\n    <tbody>\n      @for (row of data()?.body; track $index) {\n        <tr>\n          @for (cell of row.cells; track $index) {\n            <td\n              [class]=\"cell?.class\"\n              [colSpan]=\"cell.mergeX || 1\"\n              [rowSpan]=\"cell.mergeY || 1\"\n            >\n              <ng-container\n                *ngTemplateOutlet=\"\n                  (cell?.name && cellContent) || cellValue;\n                  context: { $implicit: cell }\n                \"\n              ></ng-container>\n            </td>\n          }\n        </tr>\n      }\n    </tbody>\n  }\n\n  @if (data()?.foot) {\n    <tfoot>\n      @for (row of data()?.foot; track $index) {\n        <tr>\n          @for (cell of row.cells; track $index) {\n            <td\n              [class]=\"cell?.class\"\n              [colSpan]=\"cell.mergeX || 1\"\n              [rowSpan]=\"cell.mergeY || 1\"\n            >\n              <ng-container\n                *ngTemplateOutlet=\"\n                  (cell?.name && cellContent) || cellValue;\n                  context: { $implicit: cell }\n                \"\n              ></ng-container>\n            </td>\n          }\n        </tr>\n      }\n    </tfoot>\n  }\n</table>\n\n<ng-template let-cell let-className=\"className\" #cellValue>\n  <div [innerHTML]=\"cell.value | safe : 'html'\" [class]=\"className\"></div>\n</ng-template>\n\n<ng-template let-cell #cellContent>\n  @if (cell?.name) {\n    <ng-content [select]=\"cell.name\"></ng-content>\n  }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { JsonDefTableComponent } from './components/json-def-table/json-def-table.component';\nimport { SafePipeDirective } from './directives/safe-pipe/safe-pipe.directive';\n\n@NgModule({\n  declarations: [\n    JsonDefTableComponent,\n    SafePipeDirective\n  ],\n  imports: [\n    CommonModule\n  ],\n  exports: [\n    JsonDefTableComponent,\n    SafePipeDirective\n  ]\n})\nexport class JsonDefTableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3.SafePipeDirective"],"mappings":";;;;;;;MAOa,iBAAiB,CAAA;AACN,IAAA,SAAA;AAAtB,IAAA,WAAA,CAAsB,SAAuB,EAAA;QAAvB,IAAS,CAAA,SAAA,GAAT,SAAS;;IAExB,SAAS,CAAC,KAAU,EAAE,IAAyD,EAAA;QACpF,QAAQ,IAAI;AACV,YAAA,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACtD,YAAA,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACvD,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACxD,YAAA,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACrD,YAAA,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,KAAK,CAAC;;;uGAdtD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCMY,qBAAqB,CAAA;AA0CH,IAAA,IAAA;;IAxC7B,IAAI,GAAG,KAAK,EAAa;;IAEzB,OAAO,GAAG,KAAK,EAAU;IAEf,gBAAgB,GAAW,CAAC,CAAC;AAE7B,IAAA,QAAQ,CAAC,IAAqB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAIT,IAAA,IAAI,CAAC,IAAqB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd;;QAGF,MAAM,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;QAEjC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,IAAI,aAAa,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;AAE3G,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK;YACxE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;;iBACvI;gBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;;YAE9I,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;gBAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;AAGjC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;;AAIb,IAAA,WAAW,CAAC,IAAqB,EAAA;AACzC,QAAA,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;;AAG/E,IAAA,WAAA,CAA6B,IAAoB,EAAA;QAApB,IAAI,CAAA,IAAA,GAAJ,IAAI;;IAGjC,MAAM,WAAW,CAAC,OAAsB,EAAA;QACtC,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAY,CAAC;YACnE,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;;;uGAjDd,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,oYCZlC,iyFAmGA,EAAA,MAAA,EAAA,CAAA,qzBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;2FDvFa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,iyFAAA,EAAA,MAAA,EAAA,CAAA,qzBAAA,CAAA,EAAA;;;MEQR,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,iBAX3B,qBAAqB;YACrB,iBAAiB,CAAA,EAAA,OAAA,EAAA,CAGjB,YAAY,CAAA,EAAA,OAAA,EAAA,CAGZ,qBAAqB;YACrB,iBAAiB,CAAA,EAAA,CAAA;AAGR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAP3B,YAAY,CAAA,EAAA,CAAA;;2FAOH,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAb9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,qBAAqB;wBACrB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,qBAAqB;wBACrB;AACD;AACF,iBAAA;;;ACjBD;;AAEG;;;;"}