{"version":3,"file":"obliczeniowo-elementary-categories.mjs","sources":["../../../../projects/components/categories/classes/abstract-combine-adapter.ts","../../../../projects/components/categories/classes/combine-name-and-index-adapter.ts","../../../../projects/components/categories/classes/combine-name-adapter.ts","../../../../projects/components/categories/components/single-combination/single-combination.component.ts","../../../../projects/components/categories/components/single-combination/single-combination.component.html","../../../../projects/components/categories/components/combine-categories/combine-categories.component.ts","../../../../projects/components/categories/components/combine-categories/combine-categories.component.html","../../../../projects/components/categories/components/half-matrix-combine-categories/half-matrix-combine-categories.component.ts","../../../../projects/components/categories/components/half-matrix-combine-categories/half-matrix-combine-categories.component.html","../../../../projects/components/categories/categories.module.ts","../../../../projects/components/categories/classes/combine-id-adapter.ts","../../../../projects/components/categories/obliczeniowo-elementary-categories.ts"],"sourcesContent":["import { AdapterConnector } from './../interfaces/adapter-connector';\n\nexport abstract class AbstractCombineAdapter<T> {\n  protected adapterConnector!: AdapterConnector;\n\n  constructor(adapterConnector?: AdapterConnector) {\n    if (adapterConnector) {\n      this.adapterConnector = adapterConnector;\n    }\n  }\n\n  setAdapterConnector(adapterConnector: AdapterConnector): void {\n    this.adapterConnector = adapterConnector;\n  }\n\n  toTag(index1: number, index2: number, reversed?: boolean): string {\n    if (index1 === -1 || index2 === -1) {\n      throw new Error('index incorrect');\n    }\n    return reversed ? `${Math.max(index1, index2)}-${Math.min(index1, index2)}` : `${Math.min(index1, index2)}-${Math.max(index1, index2)}`;\n  }\n\n  abstract findIndex(data: T): number;\n  abstract fromIndex(index: number): T;\n\n  abstract convert(): T[][];\n  abstract transform(data: T[][], reversed?: boolean): string[];\n}\n","import { CategoryWithId } from '../interfaces/category';\nimport { AbstractCombineAdapter } from './abstract-combine-adapter';\n\nexport class CombineNameAndIndexAdapter extends AbstractCombineAdapter<CategoryWithId> {\n  findIndex(data: CategoryWithId): number {\n    return this.adapterConnector.categories.findIndex(c => c.name === data.name);\n  }\n\n  fromIndex(index: number): CategoryWithId {\n    if (index === -1) {\n      throw new Error('index incorrect');\n    }\n    return { ...this.adapterConnector.categories[index], id: index + 1 };\n  }\n\n  convert(): CategoryWithId[][] {\n    return this.adapterConnector.selected.map(tag => {\n      const splitted = tag.split('-');\n\n      return [\n        this.fromIndex(+splitted[0] - 1),\n        this.fromIndex(+splitted[1] - 1)\n      ];\n    });\n  }\n\n  transform(data: CategoryWithId[][], reversed?: boolean): string[] {\n    return data.map(categories => (this.toTag(\n      (categories[0].id ?? this.findIndex(categories[0]) + 1),\n      (categories[1].id ?? this.findIndex(categories[1]) + 1), reversed)\n    ));\n  }\n}\n","import { Category } from '../interfaces/category';\nimport { AbstractCombineAdapter } from './abstract-combine-adapter';\n\nexport class CombineNameAdapter extends AbstractCombineAdapter<Category> {\n  findIndex(data: Category): number {\n    return this.adapterConnector.categories.findIndex(c => c.name === data.name);\n  }\n\n  fromIndex(index: number): Category {\n    if (index === -1) {\n      throw new Error('index incorrect');\n    }\n    return this.adapterConnector.categories[index];\n  }\n\n  convert(): Category[][] {\n    return this.adapterConnector.selected.map(tag => {\n      const splitted = tag.split('-');\n      return [\n        this.fromIndex(+splitted[0] - 1),\n        this.fromIndex(+splitted[1] - 1)\n      ];\n    });\n  }\n\n  transform(data: Category[][], reversed?: boolean): string[] {\n    return data.map(categories => (this.toTag(\n      this.findIndex(categories[0]) + 1,\n      this.findIndex(categories[1]) + 1,\n      reversed)\n    ));\n  }\n}\n","import { Category } from './../../interfaces/category';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n    selector: 'obl-single-combination',\n    templateUrl: './single-combination.component.html',\n    styleUrls: ['./single-combination.component.scss'],\n    standalone: false\n})\nexport class SingleCombinationComponent {\n  @Input()\n  categories!: [Category, Category];\n}\n","<div>\n  <div [class]=\"'left ' + categories[0].class\">\n    {{ categories[0].name }}\n  </div>\n  <div [class]=\"'right ' + categories[1].class\">\n    {{ categories[1].name }}\n  </div>\n</div>\n","import { CategoryWithId } from './../../interfaces/category';\nimport { CombineNameAndIndexAdapter } from './../../classes/combine-name-and-index-adapter';\nimport { AdapterConnector } from './../../interfaces/adapter-connector';\nimport { Component, Input, Output, EventEmitter, HostBinding, SimpleChanges, OnChanges, input } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\nimport { Category } from '../../interfaces/category';\n\nimport { CombineNameAdapter } from '../../classes/combine-name-adapter';\nimport { AbstractCombineAdapter } from '../../classes/abstract-combine-adapter';\n\ninterface Coords {\n  x1: number;\n  y1: number;\n  x2: number;\n  y2: number;\n  transform: string;\n}\n\n@Component({\n    selector: 'obl-combine-categories',\n    templateUrl: './combine-categories.component.html',\n    styleUrls: ['./combine-categories.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: CombineCategoriesComponent\n        },\n        {\n            provide: NG_VALIDATORS,\n            multi: true,\n            useExisting: CombineCategoriesComponent\n        }\n    ],\n    standalone: false\n})\nexport class CombineCategoriesComponent implements OnChanges, ControlValueAccessor, AdapterConnector {\n  /**\n   * Selected list in format of string containing id's combination: ['1-2', '1-3'] values should not repeat\n   *\n   * Used to modify selection by adapter field object\n   *\n   * Rather not modify from outside but you can do that too\n   */\n  selected: string[] = [];\n  /**\n   * If set display the obl-single-category components, depends on the displaySingle input field\n   */\n  single: [CategoryWithId, CategoryWithId][] = [];\n\n  protected suffix = `-obl-${Math.floor(Math.random() * 1000000)}`;\n  protected touched = false;\n  protected disableParts: string[] = [];\n\n  /**\n   * Adapt model input/output to your needs.\n   *\n   * Default: CombineNameAdapter is used\n   *\n   * There exists another ones:\n   *\n   * CombineIdAdapter - accept input/output format: [[1, 2], [1, 3]] <- select / emit categories by\n   * pair of id's. Id's are number from 1 - 6 (step 1 of course)\n   */\n  adapter = input<AbstractCombineAdapter<any>>(new CombineNameAdapter(this));\n\n  /**\n   * Set selected categories\n   */\n  @Input() value: (Category | number)[][] = [];\n\n  /**\n   * Disable whole things\n   */\n  @Input()\n  @HostBinding('class.disabled') disabled: any = false;\n\n  /**\n   * Disable specific combination of categories (format depends on type of adapter used inside)\n   *\n   * When the adapter field is instance of CombineNameAdapter then to disable \"Category 1\" i \"Category 2\":\n   *\n   * @example\n   *\n   * <obl-combine-categories [value]=\"selected\" (valueChanged)=\"changed($event)\"\n   *       [disable]=\"[[{ name: 'Category 1' }, { name: 'Category 2' }]]\"></obl-combine-categories>\n   */\n  @Input() disable: (Category | number)[][] = [];\n\n  /**\n   * Let you display a obl-single-category components that represents single combination with names of\n   * categories displayed inside.\n   */\n  displaySingle = input<boolean>(false);\n\n  /**\n   * Emit when value changed\n   */\n  @Output() valueChange = new EventEmitter<any[][]>();\n\n  protected headers = [\n    {\n      transform: 'translate(0.92604457,-0.92629337)',\n      href: '#text-path-' + this.suffix\n    },\n    {\n      transform: 'rotate(60,53.230425,244.80418)',\n      href: '#text-path-' + this.suffix\n    },\n    {\n      transform: 'rotate(120,53.230425,244.80418)',\n      href: '#text-path-' + this.suffix\n    },\n    {\n      transform: 'rotate(180,53.230425,244.80418)',\n      href: '#text-path-' + this.suffix\n    },\n    {\n      transform: 'rotate(-60,52.160837,243.7349)',\n      href: '#text-path-top-' + this.suffix\n    },\n    {\n      transform: 'translate(0.92604457,-0.92629337)',\n      href: '#text-path-top-' + this.suffix\n    }\n  ];\n\n  protected combine: [number, number, Coords][] = [\n    [1, 2, {\n      x1: 88.953682,\n      y1: 167.21274,\n      x2: 106.51595,\n      y2: 131.14131,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [1, 3, {\n      x1: 72.372162,\n      y1: 177.26645,\n      x2: 231.58354,\n      y2: 78.695023,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [1, 4, {\n      x1: 18.104263,\n      y1: 246.04858,\n      x2: 86.896088,\n      y2: 246.04858,\n      transform: 'translate(0.92604457,-0.92629337)'\n    }],\n    [1, 5, {\n      x1: 231.58354,\n      y1: 78.695023,\n      x2: 72.372162,\n      y2: 177.26645,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [1, 6, {\n      x1: 106.51595,\n      y1: 131.14131,\n      x2: 88.953682,\n      y2: 167.21274,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [2, 3, {\n      x1: 88.953682,\n      y1: 167.21274,\n      x2: 106.51595,\n      y2: 131.14131,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [2, 4, {\n      x1: 72.372162,\n      y1: 177.26645,\n      x2: 231.58354,\n      y2: 78.695023,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [2, 5, {\n      x1: 18.104263,\n      y1: 246.04858,\n      x2: 86.896088,\n      y2: 246.04858,\n      transform: 'translate(0.92604457,-0.92629337)'\n    }],\n    [2, 6, {\n      x1: 231.58354,\n      y1: 78.695023,\n      x2: 72.372162,\n      y2: 177.26645,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [3, 4, {\n      x1: 88.953682,\n      y1: 167.21274,\n      x2: 106.51595,\n      y2: 131.14131,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [3, 5, {\n      x1: 72.372162,\n      y1: 177.26645,\n      x2: 231.58354,\n      y2: 78.695023,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [3, 6, {\n      x1: 18.104263,\n      y1: 246.04858,\n      x2: 86.896088,\n      y2: 246.04858,\n      transform: 'translate(0.92604457,-0.92629337)'\n    }],\n    [4, 5, {\n      x1: 88.953682,\n      y1: 167.21274,\n      x2: 106.51595,\n      y2: 131.14131,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [4, 6, {\n      x1: 166.3591,\n      y1: 328.33005,\n      x2: 323.24637,\n      y2: 236.90147,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n    [5, 6, {\n      x1: 88.953682,\n      y1: 167.21274,\n      x2: 106.51595,\n      y2: 131.14131,\n      transform: 'matrix(0.26458333,0,0,0.26458333,0.92604457,190.24036)'\n    }],\n  ];\n\n  @Input() categories: Category[] = [\n    { name: 'Category 1' },\n    { name: 'Category 2' },\n    { name: 'Category 3' },\n    { name: 'Category 4' },\n    { name: 'Category 5' },\n    { name: 'Category 6' }\n  ];\n\n  onChange = (value: (Category | number)[][]) => { };\n\n  onTouched = () => { };\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.value && changes.value.currentValue?.length !== changes.value.previousValue?.length) {\n      this.adapter().setAdapterConnector(this);\n      this.selected = this.adapter().transform(changes.value.currentValue);\n      this.set();\n    }\n\n    if (changes.disable && changes.disable.currentValue instanceof Array) {\n      this.adapter().setAdapterConnector(this);\n      this.disableParts = this.adapter().transform(changes.disable.currentValue);\n    }\n  }\n\n  validate(control: AbstractControl): ValidationErrors | null {\n    return null;\n  }\n\n  writeValue(categories: Category[][]): void {\n    this.adapter().setAdapterConnector(this);\n    this.selected = this.adapter().transform(categories);\n    this.toSingleCombination();\n  }\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  markAsTouched(): void {\n    if (this.disabled) {\n      return;\n    }\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  click(category: number[]): void {\n    if (this.disabled) {\n      return;\n    }\n\n    const tag = this.adapter().toTag(category[0], category[1]);\n\n    if (this.disableParts.includes(tag)) {\n      return;\n    }\n\n    if (this.selected.includes(tag)) {\n      this.selected = this.selected.filter(v => v !== tag);\n    } else {\n      this.selected.push(tag);\n    }\n\n    this.set();\n  }\n\n  toggleAll(category: number): void {\n    if (this.disabled) {\n      return;\n    }\n\n    const cat = `${category}`;\n\n    if (this.selected.filter(v => v.includes(cat)).concat(\n      this.disableParts.filter(i => i.includes(cat) && !this.selected.includes(i)))?.length >= 5) {\n      this.selected = this.selected.filter(v => !v.includes(cat) || this.disableParts.includes(v));\n    } else {\n      for (let i = 1; i < 7; i++) {\n        if (i !== category && !this.disableParts.includes(this.adapter().toTag(i, category))) {\n          const id = this.adapter().toTag(category, i);\n          if (!this.selected.find(v => id === v)) {\n            this.selected.push(id);\n          }\n        }\n      }\n    }\n\n    this.set();\n  }\n\n  connectionFill(category: number[]): string | undefined {\n    if (this.disabled) {\n      return 'gray';\n    }\n    return 'url(#lg-category-' + category[0] + '-' + category[1] + this.suffix + ')';\n  }\n\n  protected toSingleCombination(): void {\n    const adapter = new CombineNameAndIndexAdapter(this);\n\n    this.single = adapter.convert().map(v => [\n      { ...v[0], class: 'category-' + v[0].id },\n      { ...v[1], class: 'category-' + v[1].id }\n    ]);\n  }\n\n  protected set(withEmit: boolean = true): void {\n    this.adapter().setAdapterConnector(this);\n    const categories: any[] = this.adapter().convert();\n\n    this.markAsTouched();\n    this.onChange(categories);\n\n    if (withEmit) {\n      this.valueChange.emit(categories);\n    }\n\n    this.toSingleCombination();\n  }\n}\n","<svg width=\"100%\" viewBox=\"0 0 97.102081 97.102089\">\n  @for(c of combine; track $index) {\n    <linearGradient\n      [id]=\"'lg-category-' + c[0] + '-' + c[1] + suffix\"\n      [attr.x1]=\"c[2].x1\"\n      [attr.x2]=\"c[2].x2\"\n      [attr.y1]=\"c[2].y1\"\n      [attr.y2]=\"c[2].y2\"\n      gradientUnits=\"userSpaceOnUse\"\n      [attr.gradientTransform]=\"c[2].transform\"\n    >\n      <stop style=\"stop-opacity: 1\" offset=\"0\" [class]=\"'category-' + c[0]\" />\n      <stop style=\"stop-opacity: 1\" offset=\"1\" [class]=\"'category-' + c[1]\" />\n    </linearGradient>\n  }\n\n  <g transform=\"translate(-4.7743858,-195.52248)\" style=\"display: inline\">\n    <g transform=\"translate(53.5, 244) scale(1.1) translate(-53.5, -244)\">\n      @for (category of [\n        [1, 2],\n        [2, 3],\n        [3, 4],\n        [4, 5],\n        [5, 6],\n        [1, 6]\n      ]; track $index) {\n        <path\n          [class]=\"'connector category-' + category[0] + '-' + category[1]\"\n          [attr.fill]=\"connectionFill(category)\"\n          style=\"fill-opacity: 1\"\n          d=\"m 26.436632,222.81253 a 34.395836,34.395836 0 0 0 -5.754687,10.78022 c 11.994195,2.22393 17.151276,0.50052 5.754687,-10.78022 z\"\n          [attr.transform]=\"\n            'rotate(' + 60 * $index + ', 53.5, 244) translate(0.2, -0.5)'\n          \"\n          [class.disabled]=\"\n            this.disableParts.includes(category[0] + '-' + category[1])\n          \"\n          [class.selected]=\"selected.includes(category[0] + '-' + category[1])\"\n          (click)=\"click(category)\"\n        />\n      }\n\n      @for (category of [\n        [1, 3],\n        [2, 4],\n        [3, 5],\n        [4, 6],\n        [1, 5],\n        [2, 6]\n      ]; track $index) {\n        <path\n          style=\"fill-opacity: 1\"\n          [attr.fill]=\"connectionFill(category)\"\n          d=\"m 59.834592,210.2996 c -7.94e-4,0.004 -0.0019,0.009 -0.0026,0.0129 -0.04899,0.24617 -0.100481,0.49002 -0.152445,0.73277 -0.01169,0.0546 -0.02278,0.10988 -0.03462,0.16433 -0.05511,0.2534 -0.112152,0.50432 -0.170532,0.75396 -0.0066,0.0284 -0.01294,0.0574 -0.01963,0.0858 -0.0013,0.006 -0.0028,0.0114 -0.0041,0.0171 -0.06045,0.25597 -0.12316,0.50919 -0.187068,0.76119 -0.0062,0.0246 -0.0118,0.0498 -0.0181,0.0744 -0.0016,0.007 -0.0035,0.0135 -0.0052,0.0202 -0.05959,0.23295 -0.121401,0.46345 -0.183967,0.69298 -0.01519,0.0557 -0.03011,0.1119 -0.04548,0.16743 -0.05412,0.19558 -0.110088,0.38932 -0.166396,0.58239 -0.02689,0.0922 -0.05323,0.18485 -0.08062,0.27647 -0.05437,0.1819 -0.110575,0.36193 -0.166915,0.54157 -0.02719,0.0867 -0.054,0.17377 -0.08165,0.25993 -2.580137,8.36713 -8.206653,15.06324 -16.512172,18.09761 -0.240858,0.0863 -0.484521,0.16982 -0.730186,0.25063 -7.94e-4,2.6e-4 -0.0016,7.9e-4 -0.0026,0.001 -1.56e-4,5e-5 -2.65e-4,-5e-5 -5.29e-4,0 -0.245248,0.0806 -0.493057,0.15845 -0.743107,0.23357 -0.0013,2.7e-4 -0.0024,8e-4 -0.0036,10e-4 -2.65e-4,1.1e-4 -7.94e-4,5.3e-4 -0.0011,5.3e-4 -0.251145,0.0754 -0.504677,0.14773 -0.760677,0.21756 -0.256413,0.0699 -0.515398,0.13721 -0.776697,0.20154 -5.400712,1.31054 -11.036022,1.30905 -16.51062,0.70021 -0.01648,-0.002 -0.03312,-0.004 -0.04961,-0.006 -0.691545,-0.0776 -1.392815,-0.16668 -2.104264,-0.26716 -0.45672,1.63712 -0.791467,3.30585 -1.001489,4.99246 0.0014,1.6e-4 0.0027,2.6e-4 0.0041,5.3e-4 0.37656,0.0443 0.751182,0.0856 1.123446,0.12402 0.373636,0.0385 0.744834,0.0739 1.114144,0.10646 0.361867,0.0319 0.721805,0.0612 1.07952,0.0873 6.491773,0.4673 13.118141,0.0715 19.308899,-1.97714 0.03736,-0.0124 0.07434,-0.0252 0.111622,-0.0377 0.245798,-0.0823 0.490318,-0.16625 0.732772,-0.25321 0.0034,-0.001 0.0069,-0.002 0.01035,-0.004 0.01236,-0.004 0.02434,-0.01 0.03669,-0.0139 11.011844,-4.56436 17.14609,-11.46337 21.298958,-22.07927 0.01601,-0.041 0.0316,-0.0824 0.04754,-0.12351 0.100695,-0.25951 0.20042,-0.52087 0.298175,-0.78444 0.02739,-0.0739 0.05397,-0.14855 0.08113,-0.22273 0.09396,-0.25659 0.186822,-0.51422 0.278019,-0.77463 0.01275,-0.0364 0.02556,-0.0731 0.03824,-0.10955 0.102087,-0.29335 0.202676,-0.5886 0.301273,-0.88677 0.0013,-0.004 0.0024,-0.007 0.0036,-0.0109 0.0034,-0.0102 0.0064,-0.0208 0.0098,-0.031 0.104598,-0.31707 0.207849,-0.6366 0.308509,-0.95912 2.65e-4,-0.001 5.3e-4,-0.002 0.0011,-0.004 -1.840982,-0.69934 -3.738623,-1.23927 -5.672005,-1.61386 z\"\n          [class]=\"'connector category-' + category[0] + '-' + category[1]\"\n          [attr.transform]=\"\n            'rotate(' + 60 * $index + ', 53.5, 244)  translate(0.1, -0.6)'\n          \"\n          [class.disabled]=\"\n            this.disableParts.includes(category[0] + '-' + category[1])\n          \"\n          [class.selected]=\"selected.includes(category[0] + '-' + category[1])\"\n          (click)=\"click(category)\"\n        />\n      }\n\n      @for (category of [\n        [1, 4],\n        [2, 5],\n        [3, 6]\n      ]; track $index) {\n        <path\n          [class]=\"'connector category-' + category[0] + '-' + category[1]\"\n          style=\"fill-opacity: 1\"\n          [attr.fill]=\"connectionFill(category)\"\n          d=\"m 87.609643,240.60059 c -22.649095,3.2223 -45.753999,3.24643 -68.408745,0.0625 -0.305296,2.96791 -0.195822,5.97594 0.288355,8.9178 22.469383,-3.12806 45.374171,-3.10914 67.837719,0.0631 0.492718,-2.98301 0.674092,-6.03459 0.282671,-9.04338 z\"\n          [attr.transform]=\"\n            'rotate(' + (60 * $index - 1) + ', 53.5, 244) translate(0, -1)'\n          \"\n          [class.disabled]=\"\n            this.disableParts.includes(category[0] + '-' + category[1])\n          \"\n          [class.selected]=\"selected.includes(category[0] + '-' + category[1])\"\n          (click)=\"click(category)\"\n        />\n      }\n    </g>\n\n    <path\n      d=\"m 17.858991,265.00001 a 40,40 0 0 1 0,-39.99999\"\n      [id]=\"'text-path-' + suffix\"\n      style=\"fill: none; stroke: none\"\n    />\n\n    <path\n      d=\"m 14.695555,266.75001 a 43.5,43.5 0 0 0 37.672109,21.75\"\n      [id]=\"'text-path-top-' + suffix\"\n      style=\"fill: none; stroke: none\"\n    />\n\n    @for (category of [1, 2, 3, 4, 5, 6]; track $index) {\n      <g\n        [class]=\"'header category-' + category\"\n        (click)=\"toggleAll(category)\"\n      >\n        <path\n          d=\"m 12.145515,220.26747 a 47.624999,47.624999 0 0 0 -6.4450846,23.80629 47.624999,47.624999 0 0 0 6.4032266,23.76755 l 9.986471,-5.76554 a 36.096725,36.096725 0 0 1 -4.861719,-18.00201 36.096725,36.096725 0 0 1 4.878255,-18.05522 z\"\n          [attr.transform]=\"'rotate(' + 60 * (category - 1) + ', 53.5, 244)'\"\n        />\n\n        <text\n          style=\"text-anchor: middle\"\n          [attr.transform]=\"headers[category - 1].transform\"\n        >\n          <textPath\n            startOffset=\"50%\"\n            [attr.xlink:href]=\"headers[category - 1].href\"\n          >\n            {{ categories[category - 1].name | oblTextFormat: 'ellipsis':14 }}\n          </textPath>\n        </text>\n      </g>\n    }\n  </g>\n</svg>\n\n@if (displaySingle() && single.length) {\n  <div>\n    @for (combination of single; track combination) {\n      <obl-single-combination\n        [categories]=\"combination\"\n      ></obl-single-combination>\n    }\n  </div>\n}\n","import { CombineNameAdapter } from './../../classes/combine-name-adapter';\nimport { AbstractCombineAdapter } from './../../classes/abstract-combine-adapter';\nimport { AdapterConnector } from './../../interfaces/adapter-connector';\nimport { Component, Input, ElementRef, HostBinding, SimpleChanges, OnChanges, Output, EventEmitter, input } from '@angular/core';\nimport { Category, CategoryWithId } from '../../interfaces/category';\nimport { CombineNameAndIndexAdapter } from '../../public-api';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\n\n@Component({\n    selector: 'obl-half-matrix-combine-categories',\n    templateUrl: './half-matrix-combine-categories.component.html',\n    styleUrls: ['./half-matrix-combine-categories.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: HalfMatrixCombineCategoriesComponent\n        },\n        {\n            provide: NG_VALIDATORS,\n            multi: true,\n            useExisting: HalfMatrixCombineCategoriesComponent\n        }\n    ],\n    standalone: false\n})\nexport class HalfMatrixCombineCategoriesComponent implements OnChanges, ControlValueAccessor, AdapterConnector {\n  protected touched = false;\n  protected disableParts: string[] = [];\n\n  selected: string[] = [];\n  single: [CategoryWithId, CategoryWithId][] = [];\n\n  /**\n   * Categories list used to create combination, minimum 2 maximum 7 however there is no limits\n   */\n  @Input()\n  categories: Category[] = [\n    { name: 'Monday' },\n    { name: 'Tuesday' },\n    { name: 'Wednesday' },\n    { name: 'Thursday' },\n    { name: 'Friday' },\n    { name: 'Saturday' },\n    { name: 'Sunday' },\n  ];\n\n  @Input() value: (Category | number)[][] = [];\n\n  @Input() adapter: AbstractCombineAdapter<any> = new CombineNameAdapter(this);\n\n  /**\n   * Disable whole things\n   */\n  @Input()\n  @HostBinding('class.disabled') disabled: any = false;\n\n  /**\n   * Disable speciffic combination of categories (format depends on type of adapter used inside)\n   *\n   * When the adapter field is instance of CombineNameAdapter then to disable \"Category 1\" i \"Category 2\":\n   *\n   * @example\n   *\n   * <obl-combine-categories [value]=\"selected\" (valueChaned)=\"changed($event)\"\n   *       [disable]=\"[[{ name: 'Category 1' }, { name: 'Category 2' }]]\"></obl-combine-categories>\n   */\n  @Input() disable: (Category | number)[][] = [];\n\n  /**\n   * Let you display a obl-single-category components that represents single combination with names of\n   * categories displayed inside.\n   */\n  displaySingle = input<boolean>(true);\n\n  /**\n   * Emit when value changed\n   */\n  @Output() valueChanged = new EventEmitter<any[][]>();\n\n  onChange = (value: (Category | number)[][]) => { };\n\n  onTouched = () => { };\n\n  constructor(private readonly elementRef: ElementRef<HTMLElement>) { }\n\n  table(length: number): Array<any> {\n    return new Array(length);\n  }\n\n  select(row: number, col: number): void {\n    if (this.disabled) {\n      return;\n    }\n\n    const tag = this.adapter.toTag(row, col, true);\n\n    if (this.disableParts.includes(tag)) {\n      return;\n    }\n\n    if (this.selected.includes(tag)) {\n      this.selected = this.selected.filter(t => t !== tag);\n      this.selected = this.selected.filter(v => !v.includes(tag));\n    } else {\n      this.selected.push(tag);\n    }\n    this.toSingleCombination();\n\n    this.set();\n  }\n\n  toggle(row: number, col: number): void {\n    this.elementRef.nativeElement.classList.toggle(`highlight-left-${row}`);\n    this.elementRef.nativeElement.classList.toggle(`highlight-right-${col}`);\n  }\n\n  toggleAll(categoryId: number): void {\n    if (this.disabled) {\n      return;\n    }\n\n    const combinations = this.categories.length - 1;\n    const cat = categoryId.toString();\n\n    if (this.selected.filter(v => v.includes(cat)).concat(\n      this.disableParts.filter(i => i.includes(cat) && !this.selected.includes(i)))?.length >= combinations) {\n      this.selected = this.selected.filter(v => !v.includes(cat) || this.disableParts.includes(v));\n    } else {\n      for (let i = 0; i < combinations + 1; i++) {\n        if ((i + 1) !== categoryId && !this.disableParts.includes(this.adapter.toTag(i + 1, categoryId, true))) {\n          const id = this.adapter.toTag(i + 1, categoryId, true);\n          if (!this.selected.find(v => id === v)) {\n            this.selected.push(id);\n          }\n        }\n      }\n    }\n\n    this.set();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.value && changes.value.currentValue?.length !== changes.value.previousValue?.length) {\n      this.adapter.setAdapterConnector(this);\n      this.selected = this.adapter.transform(changes.value.currentValue, true);\n      this.set();\n    }\n\n    if (changes.disable && changes.disable.currentValue instanceof Array) {\n      this.adapter.setAdapterConnector(this);\n      this.disableParts = this.adapter.transform(changes.disable.currentValue, true);\n    }\n  }\n\n  validate(control: AbstractControl): ValidationErrors | null {\n    return null;\n  }\n\n  writeValue(categories: Category[][]): void {\n    this.adapter.setAdapterConnector(this);\n    this.selected = this.adapter.transform(categories, true);\n    this.toSingleCombination();\n  }\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  markAsTouched(): void {\n    if (this.disabled) {\n      return;\n    }\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  protected toSingleCombination(): void {\n    const adapter = new CombineNameAndIndexAdapter(this);\n\n    this.single = adapter.convert().map(v => [\n      { ...v[0], class: 'category-' + v[0].id },\n      { ...v[1], class: 'category-' + v[1].id }\n    ]);\n  }\n\n  protected set(withEmit: boolean = true): void {\n    this.adapter.setAdapterConnector(this);\n    const categories: any[] = this.adapter.convert();\n\n    this.markAsTouched();\n    this.onChange(categories);\n\n    if (withEmit) {\n      this.valueChanged.emit(categories);\n    }\n\n    this.toSingleCombination();\n  }\n}\n","<div class=\"parent\">\n  <div>\n    @for (category of categories; track category.name; let row = $index){\n      @if (row < categories.length - 1) {\n        <div>\n          @if(row !== 6) {\n            <div\n              [class]=\"'header left clickable category-' + (row + 2)\"\n              (click)=\"toggleAll(row + 2)\"\n            >\n              <p>{{ categories[row + 1].name }}</p>\n            </div>\n            @for (j of table(row + 1); track j; let col = $index) {\n              <div\n                [class]=\"\n                  'clickable combination category-' +\n                  adapter.toTag(row + 2, col + 1, true)\n                \"\n                [class.selected]=\"\n                  selected.includes(adapter.toTag(row + 2, col + 1, true))\n                \"\n                [class.disabled]=\"\n                  this.disableParts.includes(adapter.toTag(row + 2, col + 1, true))\n                \"\n                (click)=\"select(row + 2, col + 1)\"\n                (mouseover)=\"toggle(row + 2, col + 1)\"\n                (mouseout)=\"toggle(row + 2, col + 1)\"\n              ></div>\n            }\n          }\n        </div>\n      }\n    }\n    <div class=\"header-right\">\n      @for (j of table(categories.length - 1); track $index; let row = $index) {\n        <div\n          [class]=\"'header right clickable category-' + (row + 1)\"\n          (click)=\"toggleAll(row + 1)\"\n        >\n          <p>{{ categories[row].name }}</p>\n        </div>\n      }\n    </div>\n  </div>\n</div>\n\n@if (displaySingle() && single.length) {\n  <div class=\"single\">\n    @for (combination of single; track $index) {\n      <obl-single-combination\n        [categories]=\"combination\"\n      ></obl-single-combination>\n    }\n  </div>\n}\n","import { TextPipesModule } from '@obliczeniowo/elementary/text-pipes';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CombineCategoriesComponent } from './components/combine-categories/combine-categories.component';\nimport { SingleCombinationComponent } from './components/single-combination/single-combination.component';\nimport { HalfMatrixCombineCategoriesComponent } from './components/half-matrix-combine-categories/half-matrix-combine-categories.component';\n\n@NgModule({\n  declarations: [\n    CombineCategoriesComponent,\n    SingleCombinationComponent,\n    HalfMatrixCombineCategoriesComponent\n  ],\n  imports: [\n    CommonModule,\n    TextPipesModule\n  ],\n  exports: [\n    CombineCategoriesComponent,\n    SingleCombinationComponent,\n    HalfMatrixCombineCategoriesComponent\n  ]\n})\nexport class CategoriesModule { }\n","import { AbstractCombineAdapter } from './abstract-combine-adapter';\n\nexport class CombineIdAdapter extends AbstractCombineAdapter<number> {\n  findIndex(data: number): number {\n    return data;\n  }\n\n  fromIndex(index: number): number {\n    return index;\n  }\n\n  convert(): number[][] {\n    return this.adapterConnector.selected.map(tag => {\n      const splitted = tag.split('-');\n\n      return [\n        this.fromIndex(+splitted[0]),\n        this.fromIndex(+splitted[1])\n      ];\n    });\n  }\n\n  transform(data: number[][], reversed?: boolean): string[] {\n    if (!data) {\n      return [];\n    }\n    return data.map(categories => (this.toTag(\n      categories[0],\n      categories[1],\n      reversed)\n    ));\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SingleCombinationComponent"],"mappings":"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S;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,SAAS,EAAE;aACZ,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,EAAE;AACL,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,SAAS,EAAE;aACZ,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,EAAE;AACL,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,SAAS,EAAE;aACZ,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,EAAE;AACL,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,SAAS,EAAE;aACZ,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,EAAE;AACL,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,SAAS,EAAE;aACZ,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,EAAE;AACL,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,SAAS,EAAE;aACZ,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,EAAE;AACL,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,SAAS,EAAE;aACZ,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,EAAE;AACL,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,E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"}