@obliczeniowo/elementary
Version:
Library made in Angular version 20
1 lines • 53.3 kB
Source Map (JSON)
{"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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