@joster-dev/chaos-control 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +86 -86
  2. package/fesm2022/joster-dev-chaos-control.mjs +380 -742
  3. package/fesm2022/joster-dev-chaos-control.mjs.map +1 -1
  4. package/{lib/LICENSE → lib} +9 -9
  5. package/package.json +6 -7
  6. package/src/lib/scss/all.scss +7 -0
  7. package/src/lib/scss/card.scss +78 -0
  8. package/src/lib/scss/control.scss +49 -0
  9. package/src/lib/scss/reboot.scss +13 -0
  10. package/src/lib/scss/utility.scss +179 -0
  11. package/src/lib/scss/variables.scss +7 -0
  12. package/src/lib/styles.scss +28 -28
  13. package/types/joster-dev-chaos-control.d.ts +243 -0
  14. package/esm2022/joster-dev-chaos-control.mjs +0 -5
  15. package/esm2022/lib/chaos-control.module.mjs +0 -77
  16. package/esm2022/lib/chaos-control.service.mjs +0 -14
  17. package/esm2022/lib/components/busy/busy.component.mjs +0 -11
  18. package/esm2022/lib/components/choice/choice.component.mjs +0 -53
  19. package/esm2022/lib/components/color/color.component.mjs +0 -78
  20. package/esm2022/lib/components/file/file.component.mjs +0 -135
  21. package/esm2022/lib/components/icon/icon.component.mjs +0 -117
  22. package/esm2022/lib/components/icon-stack/icon-stack.component.mjs +0 -29
  23. package/esm2022/lib/components/index.mjs +0 -11
  24. package/esm2022/lib/components/number/number.component.mjs +0 -135
  25. package/esm2022/lib/components/readonly/readonly.component.mjs +0 -14
  26. package/esm2022/lib/components/select/select.component.mjs +0 -99
  27. package/esm2022/lib/components/text/text.component.mjs +0 -162
  28. package/esm2022/lib/directives/border-radius.directive.mjs +0 -41
  29. package/esm2022/lib/directives/busy.directive.mjs +0 -71
  30. package/esm2022/lib/directives/control.directive.mjs +0 -46
  31. package/esm2022/lib/directives/index.mjs +0 -6
  32. package/esm2022/lib/directives/item.directive.mjs +0 -117
  33. package/esm2022/lib/directives/size.directive.mjs +0 -38
  34. package/esm2022/lib/models/icon-types.const.mjs +0 -33
  35. package/esm2022/lib/models/icon.type.mjs +0 -2
  36. package/esm2022/lib/models/index.mjs +0 -9
  37. package/esm2022/lib/models/is-item.function.mjs +0 -8
  38. package/esm2022/lib/models/is-items.function.mjs +0 -5
  39. package/esm2022/lib/models/is-number.function.mjs +0 -5
  40. package/esm2022/lib/models/is-primitive.function.mjs +0 -7
  41. package/esm2022/lib/models/item.interface.mjs +0 -2
  42. package/esm2022/lib/models/primitive.type.mjs +0 -2
  43. package/esm2022/public-api.mjs +0 -7
  44. package/index.d.ts +0 -5
  45. package/lib/chaos-control.module.d.ts +0 -23
  46. package/lib/chaos-control.service.d.ts +0 -6
  47. package/lib/components/busy/busy.component.d.ts +0 -5
  48. package/lib/components/choice/choice.component.d.ts +0 -15
  49. package/lib/components/color/color.component.d.ts +0 -22
  50. package/lib/components/file/file.component.d.ts +0 -32
  51. package/lib/components/icon/icon.component.d.ts +0 -31
  52. package/lib/components/icon-stack/icon-stack.component.d.ts +0 -9
  53. package/lib/components/index.d.ts +0 -10
  54. package/lib/components/number/number.component.d.ts +0 -33
  55. package/lib/components/readonly/readonly.component.d.ts +0 -8
  56. package/lib/components/select/select.component.d.ts +0 -28
  57. package/lib/components/text/text.component.d.ts +0 -41
  58. package/lib/directives/border-radius.directive.d.ts +0 -12
  59. package/lib/directives/busy.directive.d.ts +0 -20
  60. package/lib/directives/control.directive.d.ts +0 -18
  61. package/lib/directives/index.d.ts +0 -5
  62. package/lib/directives/item.directive.d.ts +0 -36
  63. package/lib/directives/size.directive.d.ts +0 -12
  64. package/lib/models/icon-types.const.d.ts +0 -1
  65. package/lib/models/icon.type.d.ts +0 -2
  66. package/lib/models/index.d.ts +0 -8
  67. package/lib/models/is-item.function.d.ts +0 -2
  68. package/lib/models/is-items.function.d.ts +0 -2
  69. package/lib/models/is-number.function.d.ts +0 -1
  70. package/lib/models/is-primitive.function.d.ts +0 -2
  71. package/lib/models/item.interface.d.ts +0 -6
  72. package/lib/models/primitive.type.d.ts +0 -1
  73. package/public-api.d.ts +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"joster-dev-chaos-control.mjs","sources":["../../../projects/chaos-control/src/lib/components/busy/busy.component.ts","../../../projects/chaos-control/src/lib/components/busy/busy.component.html","../../../projects/chaos-control/src/lib/directives/border-radius.directive.ts","../../../projects/chaos-control/src/lib/directives/busy.directive.ts","../../../projects/chaos-control/src/lib/directives/control.directive.ts","../../../projects/chaos-control/src/lib/models/icon-types.const.ts","../../../projects/chaos-control/src/lib/models/is-number.function.ts","../../../projects/chaos-control/src/lib/models/is-primitive.function.ts","../../../projects/chaos-control/src/lib/models/is-item.function.ts","../../../projects/chaos-control/src/lib/models/is-items.function.ts","../../../projects/chaos-control/src/lib/directives/item.directive.ts","../../../projects/chaos-control/src/lib/directives/size.directive.ts","../../../projects/chaos-control/src/lib/components/icon/icon.component.ts","../../../projects/chaos-control/src/lib/components/icon/icon.component.html","../../../projects/chaos-control/src/lib/components/choice/choice.component.ts","../../../projects/chaos-control/src/lib/components/choice/choice.component.html","../../../projects/chaos-control/src/lib/components/color/color.component.ts","../../../projects/chaos-control/src/lib/components/color/color.component.html","../../../projects/chaos-control/src/lib/components/file/file.component.ts","../../../projects/chaos-control/src/lib/components/file/file.component.html","../../../projects/chaos-control/src/lib/components/icon-stack/icon-stack.component.ts","../../../projects/chaos-control/src/lib/components/number/number.component.ts","../../../projects/chaos-control/src/lib/components/number/number.component.html","../../../projects/chaos-control/src/lib/components/readonly/readonly.component.ts","../../../projects/chaos-control/src/lib/components/readonly/readonly.component.html","../../../projects/chaos-control/src/lib/components/select/select.component.ts","../../../projects/chaos-control/src/lib/components/select/select.component.html","../../../projects/chaos-control/src/lib/components/text/text.component.ts","../../../projects/chaos-control/src/lib/components/text/text.component.html","../../../projects/chaos-control/src/lib/chaos-control.module.ts","../../../projects/chaos-control/src/lib/chaos-control.service.ts","../../../projects/chaos-control/src/public-api.ts","../../../projects/chaos-control/src/joster-dev-chaos-control.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'jo-busy',\r\n templateUrl: './busy.component.html',\r\n styleUrls: [\r\n './busy.component.scss',\r\n '../../styles.scss',\r\n ]\r\n})\r\nexport class BusyComponent {\r\n\r\n}\r\n","<!-- <div class=\"spinner spinner-1\"></div> -->\r\n<div class=\"spinner big\"></div>\r\n<div class=\"spinner small\"></div>\r\n","import { Directive, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[joBorderRadius]'\r\n})\r\nexport class BorderRadiusDirective {\r\n\r\n @Input()\r\n get borderRadiusRight() {\r\n return this._borderRadiusRight;\r\n }\r\n set borderRadiusRight(value: boolean | '') {\r\n if (value === '')\r\n value = true;\r\n if (value == null)\r\n value = false;\r\n this._borderRadiusRight = value;\r\n }\r\n _borderRadiusRight = true;\r\n\r\n @Input()\r\n get borderRadiusLeft() {\r\n return this._borderRadiusLeft;\r\n }\r\n set borderRadiusLeft(value: boolean | '') {\r\n if (value === '')\r\n value = true;\r\n if (value == null)\r\n value = false;\r\n this._borderRadiusLeft = value;\r\n }\r\n _borderRadiusLeft = true;\r\n\r\n constructor() { }\r\n\r\n}\r\n","import { ComponentFactoryResolver, Directive, ElementRef, Input, Renderer2, SimpleChanges, ViewContainerRef } from '@angular/core';\r\nimport { filter, from, interval, map, Subject, Subscription, take, takeUntil } from 'rxjs';\r\nimport { BusyComponent } from '../components';\r\n\r\n@Directive({\r\n selector: '[joBusy]'\r\n})\r\nexport class BusyDirective {\r\n @Input('joBusy') asyncEvents?: Subscription | Subscription[] | Promise<any> | Promise<any>[];\r\n\r\n host: HTMLElement = this.element.nativeElement;\r\n insertedNode?: Node;\r\n endSubscription$ = new Subject<void>();\r\n busySubscription?: Subscription;\r\n\r\n constructor(\r\n private element: ElementRef,\r\n private viewContainerRef: ViewContainerRef,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['asyncEvents'].currentValue) {\r\n const valueArray = Array.isArray(changes['asyncEvents'].currentValue)\r\n ? changes['asyncEvents'].currentValue\r\n : [changes['asyncEvents'].currentValue];\r\n\r\n const subscriptionValueArray = valueArray\r\n .filter(item => Boolean(item))\r\n .map(item => {\r\n if (item instanceof Promise) {\r\n return from(item).subscribe();\r\n }\r\n return item;\r\n });\r\n\r\n if (subscriptionValueArray.length > 0) {\r\n if (this.busySubscription && !this.busySubscription.closed) {\r\n this.endSubscription$.next();\r\n }\r\n this.addSpinner(subscriptionValueArray);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.endSubscription$.complete();\r\n }\r\n\r\n private addSpinner(asyncEvents: Subscription[]): void {\r\n const componentRef = this.viewContainerRef.createComponent(BusyComponent);\r\n this.insertedNode = this.host.insertBefore(componentRef.location.nativeElement, this.host.firstChild);\r\n this.renderer.addClass(this.host, 'position-relative');\r\n this.renderer.addClass(this.host, 'overflow-hidden');\r\n this.busySubscription = interval()\r\n .pipe(\r\n map(() => asyncEvents.every(item => item.closed)),\r\n filter(everySubscriptionClosed => Boolean(everySubscriptionClosed)),\r\n take(1),\r\n takeUntil(this.endSubscription$),\r\n )\r\n .subscribe(({\r\n complete: () => {\r\n this.removeSpinner();\r\n },\r\n error: () => {\r\n this.removeSpinner();\r\n },\r\n }));\r\n }\r\n\r\n private removeSpinner(): void {\r\n if (this.insertedNode)\r\n this.host.removeChild(this.insertedNode);\r\n this.renderer.removeClass(this.host, 'position-relative');\r\n this.renderer.removeClass(this.host, 'overflow-hidden');\r\n }\r\n}\r\n","import { Directive, Input, OnDestroy } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { BorderRadiusDirective } from './border-radius.directive';\r\n\r\n@Directive({\r\n selector: '[joControl]'\r\n})\r\nexport class ControlDirective extends BorderRadiusDirective implements OnDestroy {\r\n @Input()\r\n get required() {\r\n return this._required;\r\n }\r\n set required(value: boolean | '') {\r\n if (value === '')\r\n value = true;\r\n if (value == null)\r\n value = false;\r\n if (typeof value !== 'boolean')\r\n throw new Error('required input must be: boolean');\r\n this._required = value;\r\n this.validation.next();\r\n }\r\n _required = false;\r\n\r\n isDisabled = false;\r\n validation = new Subject<void>();\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.validation.complete();\r\n }\r\n\r\n onTouched() { }\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n}\r\n","export const iconTypes = [\r\n 'circle',\r\n 'dot',\r\n 'ring',\r\n 'square',\r\n 'squircle',\r\n 'check',\r\n 'times',\r\n 'plus',\r\n 'minus',\r\n 'row',\r\n 'column',\r\n 'bomb',\r\n 'flag',\r\n 'gear',\r\n 'star',\r\n 'user',\r\n 'refresh',\r\n 'ascend',\r\n 'descend',\r\n 'search',\r\n 'crown',\r\n 'ogre',\r\n 'folder',\r\n 'chevron',\r\n 'ankh',\r\n 'sun',\r\n 'moon',\r\n 'clear',\r\n 'amphora',\r\n 'speech'\r\n] as const;\r\n","export function isNumber(value: unknown): value is number {\r\n return typeof value === 'number'\r\n && !isNaN(value);\r\n}\r\n","import { isNumber } from './is-number.function';\r\nimport { primitive } from './primitive.type';\r\n\r\nexport function isPrimitive(value: unknown): value is primitive {\r\n return typeof value === 'boolean'\r\n || isNumber(value)\r\n || typeof value === 'string';\r\n}\r\n","import { isPrimitive } from './is-primitive.function';\r\nimport { Item } from './item.interface';\r\n\r\nexport function isItem(item: Item): item is Item {\r\n return typeof (item) === 'object'\r\n && item !== null\r\n && isPrimitive(item.key)\r\n && typeof item.value === 'string';\r\n}\r\n","import { isItem } from './is-item.function';\r\nimport { Item } from './item.interface';\r\n\r\nexport function isItems(value: Item[]): value is Item[] {\r\n return Array.isArray(value) && value.every(item => isItem(item));\r\n}\r\n","import { Directive, Input, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { isItems, isNumber, isPrimitive, Item, primitive } from '../models';\r\n\r\nimport { ControlDirective } from './control.directive';\r\n\r\n@Directive({\r\n selector: '[joItem]'\r\n})\r\nexport class ItemDirective extends ControlDirective implements ControlValueAccessor {\r\n @Input()\r\n get items() {\r\n return this._items;\r\n }\r\n set items(value: { key: boolean | number | string, value: string, [key: string]: unknown }[]) {\r\n if (!isItems(value))\r\n throw new Error('[items] expects: { key: boolean | number | string, value: string }[]');\r\n this._items = value;\r\n this.filteredItems = value;\r\n this.validation.next();\r\n }\r\n _items: Item[] = [];\r\n filteredItems: Item[] = [];\r\n\r\n @Input()\r\n get limit() {\r\n return this._limit;\r\n }\r\n set limit(value: number) {\r\n if (value == null)\r\n value = 0;\r\n\r\n if (!isNumber(value) || value < 0 || !Number.isInteger(value))\r\n throw new Error('limit expects: positive integer');\r\n\r\n this._limit = value;\r\n this.validation.next();\r\n }\r\n _limit = 0;\r\n\r\n @Input()\r\n get isMultiple() {\r\n return this._isMultiple;\r\n }\r\n set isMultiple(value: boolean | '') {\r\n if (value === '')\r\n value = true;\r\n if (value == null)\r\n value = false;\r\n if (typeof value !== 'boolean')\r\n throw new Error('multiple expects: boolean')\r\n this._isMultiple = value;\r\n }\r\n _isMultiple = false;\r\n\r\n set model(value: primitive[]) {\r\n this._model = value;\r\n this.onChange(\r\n value.length === 0\r\n ? null\r\n : this.isMultiple\r\n ? this._model\r\n : this._model[0]\r\n );\r\n }\r\n _model: primitive[] = [];\r\n\r\n constructor(\r\n @Self() public ngControl: NgControl\r\n ) {\r\n super();\r\n this.validation\r\n .pipe(debounceTime(100))\r\n .subscribe(() => this.validate());\r\n ngControl.valueAccessor = this;\r\n }\r\n\r\n onChange(_value: primitive[] | primitive | null) { }\r\n registerOnChange(fn: () => void) {\r\n this.onChange = fn;\r\n }\r\n\r\n writeValue(value: primitive[] | primitive | null) {\r\n if (value == null)\r\n value = [];\r\n\r\n if (!Array.isArray(value))\r\n value = [value];\r\n\r\n if (value.every(item => isPrimitive(item)))\r\n this._model = value;\r\n }\r\n\r\n private invalidValidator(items: Item[], isMultiple: boolean): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null =>\r\n (\r\n isMultiple\r\n ? Array.isArray(control.value) && control.value.every((key: any) => !items.map(item => item.key).includes(key))\r\n : ![undefined, null].includes(control.value) && !items.map(item => item.key).includes(control.value)\r\n )\r\n ? { invalid: control.value }\r\n : null;\r\n }\r\n\r\n private limitValidator(limit: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null =>\r\n control.value !== null && limit !== 0 && control.value.length > limit\r\n ? { limit: { value: control.value } }\r\n : null;\r\n }\r\n\r\n private validate() {\r\n const validators: ValidatorFn[] = [\r\n this.invalidValidator(this._items, this._isMultiple),\r\n ];\r\n\r\n if (this._isMultiple)\r\n validators.push(this.limitValidator(this._limit));\r\n\r\n if (this.required === true)\r\n validators.push(Validators.required);\r\n\r\n if (this.ngControl.control === null)\r\n throw new Error('expected control to be defined');\r\n\r\n this.ngControl.control.setValidators(validators);\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n}\r\n","import { Directive, Input, OnDestroy } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[size]'\r\n})\r\nexport class SizeDirective implements OnDestroy {\r\n @Input()\r\n get size() {\r\n return this._size;\r\n }\r\n set size(value: any) {\r\n if (value === null || value === undefined)\r\n value = '100%';\r\n if (typeof value === 'number' && value >= 0 && value <= 100)\r\n value = `${value}%`;\r\n if (typeof value !== 'string')\r\n throw new Error('size input must be: string');\r\n // todo: write regex\r\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/height\r\n this._size = value;\r\n this.sizeChangesSubject.next();\r\n }\r\n _size = '100%';\r\n sizeChangesSubject = new Subject<void>();\r\n\r\n ngOnDestroy(): void {\r\n this.sizeChangesSubject.complete();\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { SizeDirective } from '../../directives/size.directive';\r\nimport { icon, iconTypes } from '../../models';\r\n\r\n@Component({\r\n selector: 'icon[type]',\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss'],\r\n})\r\nexport class IconComponent extends SizeDirective {\r\n @Input()\r\n get type() {\r\n return this._type;\r\n }\r\n set type(value: icon) {\r\n if (typeof value === 'string')\r\n value = value.toLowerCase().trim() as icon;\r\n if (!iconTypes.includes(value))\r\n throw new Error(`expected [type] to be: ${iconTypes.join(' | ')}`);\r\n this._type = value;\r\n }\r\n _type!: icon;\r\n\r\n @Input()\r\n get fill() {\r\n return this._fill;\r\n }\r\n set fill(value: string | null | (string | null)[]) {\r\n if (typeof value === 'string')\r\n value = [value];\r\n if (value === null || value === undefined)\r\n value = [null];\r\n if (!Array.isArray(value) || !value.every(item => item === null || typeof item === 'string'))\r\n throw new Error('expected [fill] to be: string | null | (string | null)[]');\r\n this._fill = value;\r\n }\r\n _fill: (string | null)[] = [null];\r\n\r\n @Input()\r\n get fillRotate() {\r\n return this._fillRotate;\r\n }\r\n set fillRotate(value: string | number) {\r\n if (typeof value === 'string')\r\n value = Number(value);\r\n if (typeof value !== 'number')\r\n throw new Error('expected [fillRotate] to be: string | number');\r\n this._fillRotate = value;\r\n }\r\n _fillRotate = 0;\r\n\r\n @Input()\r\n get fillOpacity() {\r\n return this._fillOpacity;\r\n }\r\n set fillOpacity(value: number) {\r\n if (typeof value !== 'number' || value < 0)\r\n throw new Error('expected [fillOpacity] to be: number >= 0');\r\n this._fillOpacity = value;\r\n }\r\n _fillOpacity = 1;\r\n\r\n @Input()\r\n get stroke() {\r\n return this._stroke;\r\n }\r\n set stroke(value: string | null | (string | null)[]) {\r\n if (typeof value === 'string')\r\n value = [value];\r\n if (value === null || value === undefined)\r\n value = [null];\r\n if (!Array.isArray(value) || !value.every(item => item === null || typeof item === 'string'))\r\n throw new Error('expected [stroke] to be: string | null | (string | null)[]');\r\n this._stroke = value;\r\n }\r\n _stroke: (string | null)[] = ['current'];\r\n\r\n @Input()\r\n get strokeRotate() {\r\n return this._strokeRotate;\r\n }\r\n set strokeRotate(value: string | number) {\r\n if (typeof value === 'string')\r\n value = Number(value);\r\n if (typeof value !== 'number')\r\n throw new Error('expected [strokeRotate] to be: string | number');\r\n this._strokeRotate = value;\r\n }\r\n _strokeRotate = 0;\r\n\r\n @Input()\r\n spin: 'x' | 'y' | 'z' | null = null;\r\n\r\n id = `${Math.random().toString(36).substring(2, 13)}`;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n linearGradientStopColor(item: string | null) {\r\n if (item === 'current')\r\n return 'currentColor';\r\n\r\n return item === null\r\n ? ''\r\n : `#${item}`;\r\n }\r\n\r\n linearGradientStopOpacity(item: string | null) {\r\n return item === null\r\n ? 0\r\n : 1;\r\n }\r\n\r\n linearGradientStopOffset(index: number, items: unknown[]) {\r\n if (items.length === 1)\r\n return '0%';\r\n return `${100 - (((items.length - 1 - index) / (items.length - 1)) * 100)}%`;\r\n }\r\n}\r\n","<svg\r\n attr.height=\"{{size}}\"\r\n attr.width=\"{{size}}\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 100 100\"\r\n [class.spin-x]=\"spin === 'x'\"\r\n [class.spin-y]=\"spin === 'y'\"\r\n [class.spin-z]=\"spin === 'z'\"\r\n>\r\n <linearGradient\r\n id=\"fill-gradient-{{id}}\"\r\n attr.gradientTransform=\"rotate({{_fillRotate}}) translate({{(_fillRotate / 180) % 0.5}})\"\r\n >\r\n <stop\r\n *ngFor=\"let item of _fill; let idx = index\"\r\n [attr.offset]=\"linearGradientStopOffset(idx, _fill)\"\r\n [attr.stop-color]=\"linearGradientStopColor(item)\"\r\n [attr.stop-opacity]=\"linearGradientStopOpacity(item)\"\r\n />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"stroke-gradient-{{id}}\"\r\n attr.gradientTransform=\"rotate({{_strokeRotate}}) translate({{(_strokeRotate / 180) % 0.5}})\"\r\n >\r\n <stop\r\n *ngFor=\"let item of _stroke; let idx = index\"\r\n [attr.offset]=\"linearGradientStopOffset(idx, _stroke)\"\r\n [attr.stop-color]=\"linearGradientStopColor(item)\"\r\n />\r\n </linearGradient>\r\n <circle\r\n *ngIf=\"type === 'circle'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"47.5\"\r\n />\r\n <circle\r\n *ngIf=\"type === 'dot'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"30\"\r\n />\r\n <path\r\n *ngIf=\"type === 'ring'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n d=\"M50,2.5C23.767,2.5,2.5,23.767,2.5,50S23.767,97.5,50,97.5S97.5,76.233,97.5,50S76.233,2.5,50,2.5z M50,80c-16.568,0-30-13.432-30-30c0-16.568,13.432-30,30-30s30,13.432,30,30C80,66.568,66.568,80,50,80z\"\r\n />\r\n <rect\r\n *ngIf=\"type === 'square'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n x=\"2.5\"\r\n y=\"2.5\"\r\n width=\"95\"\r\n height=\"95\"\r\n />\r\n <rect\r\n *ngIf=\"type === 'squircle'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n x=\"2.5\"\r\n y=\"2.5\"\r\n width=\"95\"\r\n height=\"95\"\r\n rx=\"15\"\r\n />\r\n <rect\r\n *ngIf=\"type === 'minus'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n x=\"2.5\"\r\n y=\"37.5\"\r\n width=\"95\"\r\n height=\"25\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'check'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"96.465,27.488 82.322,13.347,37.257,58.367 17.675,38.785 3.535,52.928 37.259,86.652\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'times'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"64.143,50 96.465,17.678 82.323,3.535,50,35.857 17.678,3.535 3.535,17.676 35.858,50 3.535,82.323 17.678,96.465 50.001,64.142 82.323,96.465 96.465,82.322\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'plus'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"97.5,37.5 62.5,37.5 62.5,2.5 37.5,2.5 37.5,37.5 2.5,37.5 2.5,62.5 37.5,62.5 37.5,97.5 62.5,97.5 62.5,62.5 97.5,62.5\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'row'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"96,50 66.5,20 66.5,37.5 33.5,37.5 33.5,20 4,50 33.5,80 33.5,62.5 66.5,62.5 66.5,80\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'column'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"62.5,33.535 80,33.535 50,3.535 20,33.535 37.5,33.535 37.5,66.465 20,66.465 50,96.465 80,66.465 62.5,66.465\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'flag'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"93,33.86 22.5,7.368 22.5,2.5 2.5,2.5 2.5,97.5 22.5,97.5 22.5,59.915\"\r\n />\r\n <path\r\n *ngIf=\"type === 'gear'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n d=\"M96.35,39.625C95.178,34.369,93.14,29.44,90.385,25H80l-5-5V9.618C70.554,6.859,65.617,4.82,60.353,3.65L56.61,7.761L50,15.022l-6.61-7.261L39.647,3.65C34.382,4.82,29.447,6.859,25,9.618V20l-5,5H9.615C6.86,29.44,4.822,34.369,3.65,39.625l4.165,3.764L15.132,50l-7.316,6.61L3.65,60.375C4.822,65.631,6.86,70.56,9.615,75H20l5,5v10.382c4.441,2.755,9.371,4.793,14.628,5.964l3.761-4.162L50,84.867l6.61,7.316l3.761,4.162c5.258-1.171,10.188-3.209,14.629-5.964V80l5-5h10.385c2.755-4.44,4.793-9.369,5.965-14.625l-4.165-3.765L84.869,50l7.315-6.611L96.35,39.625z M50,72.5c-12.427,0-22.5-10.073-22.5-22.5c0-12.426,10.073-22.5,22.5-22.5S72.5,37.574,72.5,50C72.5,62.427,62.427,72.5,50,72.5z\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'star'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"50,9.91 62.022,38.363 92.798,41.005\r\n69.453,61.23 76.45,91.316 50,75.364 23.55,91.315 30.547,61.23 7.203,41.005 37.978,38.363 \"\r\n />\r\n <!-- start user -->\r\n <circle\r\n *ngIf=\"type === 'user'\"\r\n fill=\"#FFFFFF\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n cx=\"50\"\r\n cy=\"27.5\"\r\n r=\"25\"\r\n />\r\n <path\r\n *ngIf=\"type === 'user'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n d=\"M86.6,52.5H71.646 C67.324,59.971,59.252,65,50,65s-17.324-5.029-21.646-12.5H14.4c-6.297,0-11.9,5.373-11.9,12v33h95v-33 C97.5,57.873,92.896,52.5,86.6,52.5z\"\r\n />\r\n <!-- end user -->\r\n <path\r\n *ngIf=\"type === 'bomb'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n d=\"M93.634,34.651c4.687-4.686,5.182-11.789,1.107-15.863L81.213,5.261c-4.074-4.076-11.178-3.58-15.863,1.105l-1.252,1.252C59.294,5.929,54.132,5,48.75,5C23.207,5,2.5,25.707,2.5,51.25S23.207,97.5,48.75,97.5S95,76.793,95,51.25c0-5.381-0.929-10.543-2.618-15.347L93.634,34.651z M70.4,64.681l-12.009-1.009l-1.091,12.001l-8.551-8.492l-8.55,8.492l-1.091-12.001L27.1,64.681l6.878-9.896L24.13,47.84l11.63-3.159l-3.08-11.65l10.939,5.056l5.13-10.905l5.131,10.905L64.82,33.03l-3.08,11.65l11.63,3.159l-9.849,6.945L70.4,64.681z\"\r\n />\r\n <!-- start refresh -->\r\n <path\r\n *ngIf=\"type === 'refresh'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M50,80c-9.186,0-17.391-4.141-22.893-10.643L37.5,58.965h-35v35l12.204-12.204C23.395,91.42,35.982,97.5,50,97.5c26.232,0,47.5-21.268,47.5-47.5H80C80,66.568,66.568,80,50,80z\"\r\n />\r\n <path\r\n *ngIf=\"type === 'refresh'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M85.296,18.24C76.605,8.58,64.018,2.5,50,2.5C23.768,2.5,2.5,23.768,2.5,50H20c0-16.568,13.432-30,30-30c9.186,0,17.393,4.141,22.893,10.643L62.5,41.036h35v-35L85.296,18.24z\"\r\n />\r\n <!-- end refresh -->\r\n <polygon\r\n *ngIf=\"type === 'ascend'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"50,3.841 20,38.842 80,38.842\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'descend'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n points=\"50,96.158 20,61.158 80,61.158\"\r\n />\r\n <path\r\n *ngIf=\"type === 'search'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M96.465,87.627L70.56,61.721C74.924,55.591,77.5,48.099,77.5,40C77.5,19.29,60.711,2.5,40,2.5C19.29,2.5,2.5,19.29,2.5,40c0,20.711,16.79,37.5,37.5,37.5c8.098,0,15.591-2.575,21.72-6.94l25.906,25.905L96.465,87.627z M40,65c-13.807,0-25-11.192-25-25c0-13.807,11.193-25,25-25c13.808,0,25,11.193,25,25C65,53.808,53.808,65,40,65z\"\r\n />\r\n <path\r\n *ngIf=\"type === 'crown'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M95,22.5c0-4.143-3.357-7.5-7.5-7.5\r\n\tS80,18.357,80,22.5c0,2.145,0.904,4.073,2.347,5.44L67.673,66.273l-13.37-50.136C56.234,14.781,57.5,12.54,57.5,10\r\n\tc0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5c0,2.54,1.266,4.78,3.197,6.137l-13.37,50.136L17.654,27.939\r\n\tC19.096,26.573,20,24.644,20,22.5c0-4.143-3.357-7.5-7.5-7.5S5,18.357,5,22.5c0,3.673,2.642,6.724,6.128,7.369L14.857,72.5H12.5v15\r\n\tH10v10h80v-10h-2.5v-15h-2.356l3.729-42.631C92.358,29.223,95,26.173,95,22.5z\"\r\n />\r\n <path\r\n *ngIf=\"type === 'ogre'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M82.5,5.721c0,0,5,5,5,15s-10,10-10,10h-3.519\r\n\tC72.018,28.728,69.393,27.5,66.5,27.5h-33c-2.894,0-5.518,1.228-7.481,3.221H22.5c0,0-10,0-10-10s5-15,5-15s-15,5-15,20\r\n\tc0,13.263,7.821,22.61,20,24.6V60.5c0,6.583,4.861,11.923,10.881,11.993C33.869,79.732,35,87.834,35,90c0,4.143,3.357,7.5,7.5,7.5\r\n\th15c4.143,0,7.5-3.357,7.5-7.5c0-2.166,1.131-10.268,1.62-17.507c6.019-0.07,10.88-5.41,10.88-11.993V50.32\r\n\tc12.179-1.989,20-11.337,20-24.6C97.5,10.721,82.5,5.721,82.5,5.721z M37.5,65c-4.143,0-7.5-3.357-7.5-7.5s3.357-7.5,7.5-7.5\r\n\ts7.5,3.357,7.5,7.5S41.643,65,37.5,65z M62.5,65c-4.143,0-7.5-3.357-7.5-7.5s3.357-7.5,7.5-7.5s7.5,3.357,7.5,7.5S66.643,65,62.5,65\r\n\tz\"\r\n />\r\n <path\r\n *ngIf=\"type === 'folder'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M42.503,10.5c-9.836,0-28.103,0-28.103,0\r\n\tc-6.296,0-11.9,5.373-11.9,12v56c0,6.627,5.604,12,11.9,12h72.2c6.296,0,10.9-5.373,10.9-12c0,0,0-37.406,0-44\r\n\ts-4.467-11.989-10.9-12s-33.807,0-33.807,0S52.339,10.5,42.503,10.5z\"\r\n />\r\n <path\r\n *ngIf=\"type === 'chevron'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M 81.371204,80.734189 96.459378,65.734039 50.000001,19.268573 3.5406224,65.734039 18.628797,80.734189 50.000001,49.268874 Z\"\r\n />\r\n <path\r\n *ngIf=\"type === 'ankh'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M85,60l-5-15H60.938\r\n\tC65.605,36.781,70,27.677,70,22.5c0-11.046-8.955-20-20-20c-11.046,0-20,8.954-20,20c0,5.177,4.394,14.281,9.062,22.5H19.999L15,60\r\n\tl28.965-4.138L40,97.5h20l-3.967-41.638L85,60z M49.999,12.551c5.524,0,10.001,4.478,10.001,10c0,5.523-10.001,20-10.001,20\r\n\ts-10-14.477-10-20C40,17.028,44.477,12.551,49.999,12.551z\"\r\n />\r\n <polygon\r\n *ngIf=\"type === 'sun'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n points=\"50.001,5.864 57.541,21.864\r\n\t72.068,11.778 70.6,29.403 88.224,27.933 78.14,42.461 94.137,50 78.14,57.541 88.224,72.07 70.6,70.6 72.068,88.225 57.541,78.141\r\n\t50.001,94.137 42.461,78.141 27.933,88.225 29.403,70.6 11.777,72.07 21.863,57.541 5.864,50 21.863,42.461 11.777,27.933\r\n\t29.403,29.403 27.933,11.778 42.461,21.864 \"\r\n />\r\n <path\r\n *ngIf=\"type === 'moon'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M90.029,62.626\r\n\tc-14.54,14.54-38.115,14.539-52.654,0c-14.54-14.54-14.54-38.114,0-52.654c2.739-2.74,5.802-4.963,9.061-6.67\r\n\tC35.463,4.049,24.701,8.604,16.313,16.991c-18.417,18.418-18.417,48.278,0,66.696c18.417,18.416,48.278,18.416,66.694,0\r\n\tc8.389-8.389,12.942-19.149,13.69-30.123C94.989,56.825,92.768,59.886,90.029,62.626z\"\r\n />\r\n <rect\r\n *ngIf=\"type === 'clear'\"\r\n x=\"2.5\"\r\n y=\"2.5\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n width=\"75\"\r\n height=\"75\"\r\n />\r\n <rect\r\n *ngIf=\"type === 'clear'\"\r\n x=\"22.5\"\r\n y=\"22.5\"\r\n fill=\"none\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n stroke-dasharray=\"13.25 5.5\"\r\n width=\"75\"\r\n height=\"75\"\r\n />\r\n <path\r\n *ngIf=\"type === 'amphora'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M92.5,28c0-11.046-7.835-20-17.5-20\r\n\tc-3.586,0-6.917,1.237-9.691,3.352c0.025-0.749,0.084-1.409,0.191-1.852c0.471-1.918,3.5-7,3.5-7H31c0,0,3.03,5.082,3.5,7\r\n\tc0.108,0.442,0.166,1.103,0.192,1.852C31.917,9.237,28.586,8,25,8C15.335,8,7.5,16.954,7.5,28c0,7.019,3.17,13.182,7.956,16.751\r\n\tC15.165,46.438,15,48.187,15,50c0,13.744,18.5,40.5,18.5,40.5l-2.5,7h38l-2.5-7c0,0,18.5-26.756,18.5-40.5\r\n\tc0-1.813-0.164-3.563-0.456-5.249C89.33,41.182,92.5,35.019,92.5,28z M15,28c0-6.903,4.478-12.5,10-12.5\r\n\tc2.789,0,5.309,1.43,7.122,3.732c-3.582,2.808-10.347,8.93-14.215,17.577C16.111,34.549,15,31.437,15,28z M82.093,36.809\r\n\tc-3.866-8.647-10.634-14.769-14.215-17.577C69.691,16.93,72.211,15.5,75,15.5c5.521,0,10,5.597,10,12.5\r\n\tC85,31.437,83.889,34.549,82.093,36.809z\"\r\n />\r\n <path\r\n *ngIf=\"type === 'speech'\"\r\n attr.fill=\"url(#fill-gradient-{{id}})\"\r\n [attr.fill-opacity]=\"fillOpacity\"\r\n attr.stroke=\"url(#stroke-gradient-{{id}})\"\r\n stroke-width=\"5\"\r\n stroke-miterlimit=\"10\"\r\n d=\"M50,2.5C26.702,2.5,2.5,22.339,2.5,45\r\n\tc0,8.368,3.307,16.347,8.641,23.084L3.979,94.813l23.196-13.393c7.078,3.83,15,6.076,22.825,6.076c23.299,0,47.5-19.838,47.5-42.5\r\n\tC97.5,22.336,73.299,2.5,50,2.5z M75,60.001H25c-2.762,0-5-2.238-5-5s2.238-5,5-5h50c2.762,0,5,2.239,5,5\r\n\tC80,57.763,77.762,60.001,75,60.001z M75,40H25c-2.762,0-5-2.239-5-5s2.238-5,5-5h50c2.762,0,5,2.239,5,5C80,37.763,77.762,40,75,40\r\n\tz\"\r\n />\r\n</svg>\r\n","import { Component, Input, Self } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { ItemDirective } from '../../directives';\r\nimport { Item } from '../../models';\r\n\r\n@Component({\r\n selector: 'jo-choice',\r\n templateUrl: './choice.component.html',\r\n styleUrls: [\r\n './choice.component.scss',\r\n '../../styles.scss',\r\n ]\r\n})\r\nexport class ChoiceComponent extends ItemDirective implements ControlValueAccessor {\r\n constructor(\r\n @Self() public override ngControl: NgControl,\r\n ) {\r\n super(ngControl);\r\n }\r\n\r\n @Input()\r\n get isColumn() {\r\n return this._isColumn;\r\n }\r\n set isColumn(value: boolean | '') {\r\n if (value === '')\r\n value = true;\r\n if (value == null)\r\n value = false;\r\n if (typeof value !== 'boolean')\r\n throw new Error('isColumn expects: boolean')\r\n this._isColumn = value;\r\n }\r\n _isColumn = false;\r\n\r\n id = `${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n onClick(item: Item) {\r\n this._model = this._model\r\n .filter(key => this._items.map(item => item.key).includes(key))\r\n\r\n if (this._model.includes(item.key)) {\r\n if (this.required === true && this._model.length === 1)\r\n return;\r\n\r\n this.model = this._model.filter(key => key !== item.key);\r\n return;\r\n }\r\n\r\n if (!this.isMultiple && this._model.length === 1) {\r\n this.model = [item.key];\r\n return;\r\n }\r\n\r\n this.model = [...this._model, item.key];\r\n }\r\n}\r\n","<div class=\"d-flex justify-content-between\">\r\n <label\r\n id=\"choice_{{id}}\"\r\n [class.required]=\"required\"\r\n >\r\n <ng-content></ng-content>\r\n </label>\r\n <div>\r\n <ng-content select=\"[rightAligned]\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div\r\n class=\"d-flex flex-wrap align-items-start\"\r\n role=\"group\"\r\n attr.aria-labelledby=\"choice_{{id}}\"\r\n [class.flex-column]=\"isColumn\"\r\n>\r\n <button\r\n *ngFor=\"let item of items; let idx = index\"\r\n type=\"button\"\r\n class=\"d-flex align-items-center gap-2 text-start\"\r\n role=\"menuitemcheckbox\"\r\n [class.br-end]=\"borderRadiusRight\"\r\n [class.br-start]=\"borderRadiusLeft\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"onClick(item)\"\r\n (blur)=\"onTouched()\"\r\n >\r\n <div\r\n class=\"jo-button {{isMultiple ? 'br-20' : 'br-50'}}\"\r\n [class.active]=\"_model.includes(item.key)\"\r\n [class.disabled]=\"isDisabled\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n >\r\n <icon\r\n *ngIf=\"_model.includes(item.key)\"\r\n size=\"1rem\"\r\n [type]=\"isMultiple ? 'check' : 'dot'\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </div>\r\n <span>{{item.value}}</span>\r\n </button>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->","import { Component, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { ControlDirective } from '../../directives';\r\n\r\n@Component({\r\n selector: 'jo-color',\r\n templateUrl: './color.component.html',\r\n styleUrls: [\r\n './color.component.scss',\r\n '../../styles.scss',\r\n ]\r\n})\r\nexport class ColorComponent extends ControlDirective implements ControlValueAccessor {\r\n private partialHex = /^[0-9A-Fa-f]{1,6}$/;\r\n fullHex = /^[0-9A-Fa-f]{6}$/;\r\n\r\n get model() {\r\n return this._model;\r\n }\r\n set model(value: string | null) {\r\n this._model = value;\r\n this.onChange(\r\n this._model !== null && this.fullHex.test(this._model)\r\n ? this._model\r\n : null\r\n );\r\n }\r\n _model: string | null = null;\r\n\r\n id = `_${Math.random().toString(36).substring(2, 11)}`;\r\n\r\n constructor(\r\n @Self() public ngControl: NgControl,\r\n ) {\r\n super();\r\n this.validation\r\n .pipe(debounceTime(100))\r\n .subscribe(() => this.validate());\r\n ngControl.valueAccessor = this;\r\n }\r\n\r\n onChangeColor(event: Event) {\r\n const ele = event.target as HTMLInputElement;\r\n this.model = ele.value.substring(1).toUpperCase();\r\n }\r\n\r\n onChange(_model: string | null) { }\r\n registerOnChange(fn: () => void) {\r\n this.onChange = fn;\r\n }\r\n\r\n onBeforeinput(e: Event): void {\r\n const event = e as InputEvent;\r\n if (event.data === null)\r\n return;\r\n const ele = event.target as HTMLInputElement;\r\n const tooLong = event.data.length + (ele.selectionStart || 0) > 6;\r\n const valid = this.partialHex.test(event.data);\r\n if (tooLong || !valid)\r\n event.preventDefault();\r\n }\r\n\r\n writeValue(value: string | null): void {\r\n if (value === undefined || typeof value !== 'string' || !this.partialHex.test(value))\r\n value = null;\r\n\r\n if (value === null || this.partialHex.test(value))\r\n this._model = value;\r\n }\r\n\r\n private invalidValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null =>\r\n control.value !== null && (typeof control.value !== 'string' || !this.fullHex.test(control.value))\r\n ? { invalid: control.value }\r\n : null;\r\n }\r\n\r\n private validate() {\r\n const validators: ValidatorFn[] = [\r\n this.invalidValidator()\r\n ];\r\n\r\n if (this.required === true)\r\n validators.push(Validators.required);\r\n\r\n this.ngControl.control?.setValidators(validators);\r\n this.ngControl.control?.updateValueAndValidity();\r\n }\r\n}\r\n","<label\r\n [for]=\"id\"\r\n [class.required]=\"required\"\r\n>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex align-items-stretch\">\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Color\"\r\n [class.br-start]=\"borderRadiusLeft\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"colorInput.click()\"\r\n >\r\n <icon\r\n size=\"1rem\"\r\n type=\"square\"\r\n [fill]=\"fullHex.test(_model || '') ? _model : [null, 'current']\"\r\n fillRotate=\"90\"\r\n [stroke]=\"fullHex.test(_model || '') ? _model : ['current']\"\r\n ></icon>\r\n </button>\r\n <input\r\n [(ngModel)]=\"model\"\r\n spellcheck=\"false\"\r\n size=\"5\"\r\n type=\"text\"\r\n [class.active]=\"ngControl.control?.value !== null\"\r\n [class.br-end]=\"borderRadiusRight\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n (beforeinput)=\"onBeforeinput($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->\r\n\r\n<input\r\n #colorInput\r\n type=\"color\"\r\n (change)=\"onChangeColor($event)\"\r\n/>","import { Component, Input, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { ControlDirective } from '../../directives';\r\nimport { isNumber } from '../../models';\r\n\r\n@Component({\r\n selector: 'jo-file',\r\n templateUrl: './file.component.html',\r\n styleUrls: [\r\n './file.component.scss',\r\n '../../styles.scss',\r\n ]\r\n})\r\nexport class FileComponent extends ControlDirective implements ControlValueAccessor {\r\n @Input() get acceptedTypes() {\r\n return this._acceptedTypes;\r\n }\r\n set acceptedTypes(value: string[]) {\r\n if (!Array.isArray(value) || !value.every(item => typeof item === 'string'))\r\n throw new Error(`acceptedTypes expects: string[]`);\r\n this._acceptedTypes = value;\r\n this.validation.next();\r\n }\r\n _acceptedTypes: string[] = [];\r\n\r\n @Input() get sizeLimitMb() {\r\n return this._sizeLimitMb;\r\n }\r\n set sizeLimitMb(value: number) {\r\n if (!isNumber(value) || value < 0)\r\n throw new Error('sizeLimitMb expects: positive number');\r\n this._sizeLimitMb = value;\r\n this.validation.next();\r\n }\r\n _sizeLimitMb = 0;\r\n\r\n @Input() get multiple() {\r\n return this._multiple;\r\n }\r\n set multiple(value: boolean) {\r\n this._multiple = value === true;\r\n this.validation.next();\r\n }\r\n _multiple = false;\r\n\r\n @Input() showSize = false;\r\n\r\n model: '' | null = null;\r\n id = `${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n constructor(\r\n @Self() public ngControl: NgControl,\r\n ) {\r\n super();\r\n this.validation\r\n .pipe(debounceTime(100))\r\n .subscribe(() => this.validate());\r\n ngControl.valueAccessor = this;\r\n }\r\n\r\n get fileNames(): string {\r\n if (this.ngControl.value instanceof FileList)\r\n return Object.values(this.ngControl.value).map(file => file.name).join(', ');\r\n\r\n if (this.ngControl.value instanceof File)\r\n return this.ngControl.value.name;\r\n\r\n return '';\r\n }\r\n\r\n get sizeLimit(): string {\r\n return this.sizeLimitMb < 1\r\n ? `${this.sizeLimitMb * 1000} KB`\r\n : `${this.sizeLimitMb} MB`;\r\n }\r\n\r\n onFileChange(event: Event): void {\r\n const target = event.target as HTMLInputElement;\r\n this.onChange(\r\n target.files?.length\r\n ? target.files\r\n : null\r\n );\r\n }\r\n\r\n onFileCancel(): void {\r\n this.onChange(null);\r\n }\r\n\r\n onChange(_model: FileList | null) { }\r\n registerOnChange(fn: () => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n if (value === undefined)\r\n value = null;\r\n\r\n if (value !== null && !(value instanceof FileList))\r\n throw new Error('control value must be: File or null');\r\n // todo\r\n // this.model = value;\r\n }\r\n\r\n private acceptedTypesValidator(acceptedTypes: string[]): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => control.value !== null\r\n && control.value instanceof FileList\r\n && !Object.values(control.value).map(item => item.type.toLowerCase())\r\n .every(type => acceptedTypes.includes(type.toLowerCase()))\r\n ? { acceptedTypes: { value: control.value } }\r\n : null;\r\n }\r\n\r\n private invalidValidator(multiple: boolean): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => control.value !== null\r\n && (!(control.value instanceof FileList) || (control.value.length > 1 && !multiple))\r\n ? { invalid: { value: control.value } }\r\n : null;\r\n }\r\n\r\n private sizeLimitMbValidator(sizeLimitMb: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => control.value instanceof FileList\r\n && Object.values(control.value).map(item => item.size / 1024 / 1024)\r\n .reduce((acc, cur) => acc + cur, 0) > sizeLimitMb\r\n ? { sizeLimitMb: { value: control.value } }\r\n : null;\r\n }\r\n\r\n private validate() {\r\n const validators: ValidatorFn[] = [\r\n this.invalidValidator(this.multiple)\r\n ];\r\n\r\n if (this.acceptedTypes.length > 0)\r\n validators.push(this.acceptedTypesValidator(this.acceptedTypes));\r\n\r\n if (this.sizeLimitMb > 0)\r\n validators.push(this.sizeLimitMbValidator(this.sizeLimitMb));\r\n\r\n if (this.required === true)\r\n validators.push(Validators.required);\r\n\r\n this.ngControl.control?.setValidators(validators);\r\n this.ngControl.control?.updateValueAndValidity();\r\n }\r\n}\r\n","<div class=\"d-flex justify-content-between\">\r\n <label [class.required]=\"required\">\r\n <ng-content></ng-content>\r\n </label>\r\n <div>\r\n <ng-content select=\"[rightAligned]\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div class=\"d-flex align-items-stretch\">\r\n <button\r\n class=\"d-flex align-items-center gap-2\"\r\n [class.br-start]=\"borderRadiusLeft\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"fileInput.click()\"\r\n >\r\n <icon\r\n type=\"folder\"\r\n size=\"1rem\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n Browse...\r\n </button>\r\n <button\r\n class=\"d-flex align-items-center\"\r\n [class.br-end]=\"borderRadiusRight\"\r\n [class.active]=\"ngControl.value !== null\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"fileInput.click()\"\r\n >\r\n <ng-container *ngIf=\"!ngControl.value\">\r\n No {{multiple ? 'files' : 'file'}} selected\r\n </ng-container>\r\n <ng-container *ngIf=\"ngControl.value\">\r\n {{fileNames}}\r\n </ng-container>\r\n </button>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['acceptedTypes']\">\r\n valid types are {{acceptedTypes.join(', ')}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['sizeLimitMb']\">\r\n max file size is {{sizeLimit}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\r\n invalid model\r\n </li>\r\n</ul> -->\r\n\r\n<input\r\n [(ngModel)]=\"model\"\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedTypes.join()\"\r\n [multiple]=\"multiple\"\r\n [id]=\"id\"\r\n (change)=\"onFileChange($event)\"\r\n (cancel)=\"onFileCancel()\"\r\n/>\r\n","import { Component, HostBinding } from '@angular/core';\r\nimport { SizeDirective } from '../../directives';\r\n\r\n@Component({\r\n selector: 'icon-stack',\r\n template: `<ng-content></ng-content>`,\r\n styleUrls: ['./icon-stack.component.scss']\r\n})\r\nexport class IconStackComponent extends SizeDirective {\r\n @HostBinding('style.width') width = this.size;\r\n @HostBinding('style.height') height = this.size;\r\n\r\n constructor() {\r\n super();\r\n this.sizeChangesSubject.subscribe({\r\n next: () => {\r\n this.width = this.size;\r\n this.height = this.size;\r\n }\r\n });\r\n }\r\n}\r\n","import { Component, Input, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, Validator, ValidatorFn, Validators } from '@angular/forms';\r\nimport { ControlDirective } from '../../directives';\r\nimport { isNumber } from '../../models';\r\n\r\n@Component({\r\n selector: 'jo-number',\r\n templateUrl: './number.component.html',\r\n styleUrls: [\r\n './number.component.scss',\r\n '../../styles.scss',\r\n ]\r\n})\r\nexport class NumberComponent extends ControlDirective implements ControlValueAccessor {\r\n @Input()\r\n get min() {\r\n return this._min;\r\n }\r\n set min(value: number) {\r\n if (!isNumber(value))\r\n throw new Error('[min] expects: number');\r\n this._min = value;\r\n this.validation.next();\r\n }\r\n _min = 0;\r\n\r\n @Input()\r\n get max() {\r\n return this._max;\r\n }\r\n set max(value: number) {\r\n if (!isNumber(value))\r\n throw new Error('[max] expects: number');\r\n this._max = value;\r\n this.validation.next();\r\n }\r\n _max = 9;\r\n\r\n @Input()\r\n get step() {\r\n return this._step;\r\n }\r\n set step(value: number) {\r\n if (!isNumber(value))\r\n throw new Error('[step] expects: number');\r\n this._step = value;\r\n this.mustBeInteger = Number.isInteger(this._step);\r\n }\r\n _step = 1;\r\n\r\n mustBeInteger = true;\r\n readonly sizePadding = 5;\r\n\r\n constructor(\r\n @Self() public ngControl: NgControl,\r\n ) {\r\n super();\r\n this.validation.subscribe(() => this.validate());\r\n this.validation.next();\r\n ngControl.valueAccessor = this;\r\n }\r\n\r\n _model: number | null = null;\r\n get model() {\r\n return this._model;\r\n }\r\n set model(value: number | null) {\r\n this._model = value;\r\n this.onChange(this._model);\r\n }\r\n\r\n get isDisabledAdd() {\r\n return this.isDisabled === true\r\n || this.model !== null\r\n && this.model + this.step > this.max;\r\n }\r\n\r\n get isDisabledSubtract() {\r\n return this.isDisabled === true\r\n || this._model !== null\r\n && this._model - this.step < this.min;\r\n }\r\n\r\n get maxDigitSize() {\r\n return Math.max(\r\n this._step.toString().length,\r\n this._max.toString().length,\r\n this._min.toString().length\r\n );\r\n }\r\n\r\n onBeforeinput(e: Event) {\r\n const event = e as InputEvent;\r\n if (event.data === null)\r\n return;\r\n const isDigit = /\\d/.test(event.data);\r\n const isMinus = event.data === '-';\r\n const isMinusAllowed = this.min < 0;\r\n const isBlockedNonDigit = !isDigit && !(isMinus && isMinusAllowed)\r\n const isPastMax = Number((this._model || '') + event.data) > this.max;\r\n if (isBlockedNonDigit || isPastMax)\r\n event.preventDefault();\r\n }\r\n\r\n add(e: HTMLInputElement) {\r\n if (this.model === null) {\r\n this.model = this.max;\r\n return;\r\n }\r\n\r\n e.stepUp();\r\n this.model = e.valueAsNumber;\r\n }\r\n\r\n subtract(e: HTMLInputElement) {\r\n if (this.model === null) {\r\n this.model = this.min;\r\n return;\r\n }\r\n\r\n e.stepDown();\r\n this.model = e.valueAsNumber;\r\n }\r\n\r\n onChange(_model: number | null) { }\r\n registerOnChange(fn: () => void) {\r\n this.onChange = fn;\r\n }\r\n\r\n writeValue(value: number | null) {\r\n if (value === undefined)\r\n value = null;\r\n\r\n if (typeof value === 'string')\r\n value = parseFloat(value);\r\n\r\n if (value === null || isNumber(value))\r\n this._model = value;\r\n }\r\n\r\n private validate() {\r\n const validators: ValidatorFn[] = [\r\n Validators.min(this.min),\r\n Validators.max(this.max)\r\n ];\r\n\r\n if (this.required === true)\r\n validators.push(Validators.required);\r\n\r\n this.ngControl.control?.setValidators(validators);\r\n this.ngControl.control?.updateValueAndValidity();\r\n }\r\n}\r\n","<label [class.required]=\"required\">\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex align-items-stretch\">\r\n <input\r\n [(ngModel)]=\"model\"\r\n #numberInput\r\n class=\"d-flex align-items-center\"\r\n type=\"number\"\r\n [size]=\"maxDigitSize + sizePadding\"\r\n [class.active]=\"_model !== null\"\r\n [class.br-start]=\"borderRadiusLeft\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (beforeinput)=\"onBeforeinput($event)\"\r\n />\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Subtract\"\r\n type=\"button\"\r\n [disabled]=\"isDisabledSubtract\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n (blur)=\"onTouched()\"\r\n (click)=\"subtract(numberInput)\"\r\n >\r\n <icon\r\n type=\"minus\"\r\n size=\"1rem\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </button>\r\n <button\r\n class=\"d-flex align-items-center\"\r\n title=\"Add\"\r\n type=\"button\"\r\n [class.br-end]=\"borderRadiusRight\"\r\n [disabled]=\"isDisabledAdd\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n (blur)=\"onTouched()\"\r\n (click)=\"add(numberInput)\"\r\n >\r\n <icon\r\n type=\"plus\"\r\n size=\"1rem\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </button>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['min']\">\r\n minimum number is {{min}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['max']\">\r\n maximum number is {{max}}\r\n </li>\r\n</ul> -->","import { Component, Input } from '@angular/core';\r\nimport { primitive } from '../../models';\r\n\r\n@Component({\r\n selector: 'jo-readonly',\r\n templateUrl: './readonly.component.html',\r\n styleUrls: [\r\n './readonly.component.scss',\r\n '../../styles.scss',\r\n ]\r\n})\r\nexport class ReadonlyComponent {\r\n @Input() model?: primitive;\r\n\r\n constructor() { }\r\n}\r\n","<label>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"readonly p-2\">\r\n {{model}}\r\n</div>","import { Component, ElementRef, HostBinding, HostListener, Input, Self, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { ItemDirective } from '../../directives';\r\nimport { Item } from '../../models';\r\n\r\n@Component({\r\n selector: 'jo-select',\r\n templateUrl: './select.component.html',\r\n styleUrls: [\r\n './select.component.scss',\r\n '../../styles.scss',\r\n ]\r\n})\r\nexport class SelectComponent extends ItemDirective implements ControlValueAccessor {\r\n @ViewChild('dropGroup') dropGroup!: ElementRef<HTMLDivElement>;\r\n @ViewChild('dropup') dropup!: ElementRef<HTMLDialogElement>;\r\n @ViewChild('dropdown') dropdown!: ElementRef<HTMLDialogElement>;\r\n\r\n @Input()\r\n @HostBinding('style.--dropHeightPx')\r\n dropHeightPx = 200;\r\n\r\n get searchTerm(): string {\r\n return this._searchTerm;\r\n }\r\n set searchTerm(value: string) {\r\n this._searchTerm = value;\r\n this.filteredItems = value\r\n ? this._items.filter(item => item.value.toLowerCase().includes(value.toLowerCase()))\r\n : this._items;\r\n }\r\n _searchTerm = '';\r\n\r\n isDropdownCloseToBottom = false;\r\n id = `${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n constructor(\r\n @Self() public override ngControl: NgControl,\r\n private hostElement: ElementRef,\r\n ) {\r\n super(ngControl);\r\n }\r\n\r\n get activeItemValues(): string {\r\n return this._items\r\n .filter(item => this._model.includes(item.key))\r\n .map(item => item.value)\r\n .join(', ');\r\n }\r\n\r\n get isSelectedAll(): boolean {\r\n return this._items.every(item => this._model.includes(item.key));\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n onGlobalClick(event: MouseEvent) {\r\n if (!this.hostElement.nativeElement.contains(event.target))\r\n this.closeDropdown();\r\n }\r\n\r\n onClickGroup() {\r\n this.closeDropdown();\r\n if (this.dropGroup.nativeElement.getBoundingClientRect().bottom + this.dropHeightPx > window.innerHeight) {\r\n this.dropup.nativeElement.show();\r\n } else {\r\n this.dropdown.nativeElement.show();\r\n }\r\n }\r\n\r\n onClick(item: Item) {\r\n this._model = this._model.filter(key => this._items.map(item => item.key).includes(key))\r\n\r\n if (this._model.includes(item.key)) {\r\n if (this.required === true && this._model.length === 1)\r\n return;\r\n\r\n this.model = this._model.filter(key => key !== item.key);\r\n return;\r\n }\r\n\r\n if (!this.isMultiple && this._model.length === 1) {\r\n this.model = [item.key];\r\n return;\r\n }\r\n\r\n this.model = [...this._model, item.key];\r\n }\r\n\r\n onClickSelectAll() {\r\n this.model = this.isSelectedAll\r\n ? []\r\n : this._items.map(item => item.key);\r\n }\r\n\r\n closeDropdown() {\r\n this.searchTerm = '';\r\n this.dropdown.nativeElement.close();\r\n this.dropup.nativeElement.close();\r\n }\r\n}\r\n","<div class=\"d-flex justify-content-between\">\r\n <label\r\n id=\"select_{{id}}\"\r\n [class.required]=\"required\"\r\n >\r\n <ng-content></ng-content>\r\n </label>\r\n <div>\r\n <ng-content select=\"[rightAligned]\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<div class=\"position-relative\">\r\n <dialog #dropup>\r\n <ng-template [ngTemplateOutlet]=\"dropContent\"></ng-template>\r\n </dialog>\r\n</div>\r\n\r\n<div\r\n #dropGroup\r\n class=\"d-flex align-items-stretch\"\r\n role=\"group\"\r\n attr.aria-labelledby=\"select_{{id}}\"\r\n>\r\n <button\r\n class=\"flex-1 br-start text-start\"\r\n type=\"button\"\r\n [class.active]=\"_model.length > 0\"\r\n [class.invalid]=\"!ngControl.control?.invalid\"\r\n (click)=\"onClickGroup()\"\r\n (blur)=\"onTouched()\"\r\n >\r\n {{activeItemValues}}\r\n </button>\r\n <button\r\n class=\"d-flex br-end d-flex align-items-center justify-content-center\"\r\n [class.invalid]=\"!ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"onClickGroup()\"\r\n (blur)=\"onTouched()\"\r\n >\r\n <icon\r\n size=\"1rem\"\r\n type=\"chevron\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n [stroke]=\"['current']\"\r\n [class.up]=\"dropup.open\"\r\n [class.down]=\"dropdown.open\"\r\n ></icon>\r\n </button>\r\n</div>\r\n\r\n<dialog #dropdown>\r\n <ng-template [ngTemplateOutlet]=\"dropContent\"></ng-template>\r\n</dialog>\r\n\r\n<ng-template #dropContent>\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"d-flex gap-2 align-items-stretch\">\r\n <input\r\n [(ngModel)]=\"searchTerm\"\r\n class=\"flex-1 br-start br-end\"\r\n />\r\n <button\r\n *ngIf=\"_isMultiple\"\r\n type=\"button\"\r\n class=\"br-start br-end\"\r\n (click)=\"onClickSelectAll()\"\r\n >\r\n {{isSelectedAll ? 'Deselect' : 'Select'}} All\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column\">\r\n <button\r\n *ngFor=\"let item of filteredItems\"\r\n class=\"d-flex flex-1 align-items-center text-start gap-2\"\r\n [disabled]=\"isDisabled\"\r\n [class.active]=\"_model.includes(item.key)\"\r\n (click)=\"onClick(item)\"\r\n >\r\n <div\r\n class=\"jo-button {{isMultiple ? 'br-20' : 'br-50'}}\"\r\n [class.active]=\"_model.includes(item.key)\"\r\n [class.disabled]=\"isDisabled\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n >\r\n <icon\r\n *ngIf=\"_model.includes(item.key)\"\r\n size=\"1rem\"\r\n [type]=\"isMultiple ? 'check' : 'dot'\"\r\n [fill]=\"[null, 'current']\"\r\n fillRotate=\"90\"\r\n ></icon>\r\n </div>\r\n {{item.value}}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>","import { Component, ElementRef, HostListener, Input, OnDestroy, Output, Renderer2, Self, ViewChild, EventEmitter } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl, ValidatorFn, Validators } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { ControlDirective } from '../../directives';\r\nimport { isNumber } from '../../models';\r\n\r\n@Component({\r\n selector: 'jo-text',\r\n templateUrl: './text.component.html',\r\n styleUrls: [\r\n './text.component.scss',\r\n '../../styles.scss',\r\n ]\r\n})\r\nexport class TextComponent extends ControlDirective implements OnDestroy, ControlValueAccessor {\r\n @Input()\r\n get placeholder() {\r\n return this._placeholder;\r\n }\r\n set placeholder(v: string) {\r\n const value = v as unknown;\r\n if (typeof value !== 'string')\r\n throw new Error('[placeholder] expects: string');\r\n this._placeholder = value;\r\n }\r\n _placeholder = '';\r\n\r\n @Input()\r\n get minLength() {\r\n return this._minLength;\r\n }\r\n set minLength(value: string | number | null | undefined) {\r\n if (typeof value === 'string')\r\n value = parseInt(value, 10);\r\n if (value === undefined)\r\n value = null;\r\n if (!isNumber(value) || value < 0 || !Number.isInteger(value) || value === null)\r\n throw new Error('[minLength] expects: positive integer');\r\n this._minLength = value;\r\n this.validation.next();\r\n }\r\n _minLength: number | null = null;\r\n\r\n @Input()\r\n get maxLength() {\r\n return this._maxLength;\r\n }\r\n set maxLength(value: string | number | null | undefined) {\r\n if (typeof value === 'string')\r\n value = parseInt(value, 10);\r\n if (value === undefined)\r\n value = null;\r\n if (!isNumber(value) || value < 0 || !Number.isInteger(value) || value === null)\r\n throw new Error('[maxLength] expects: positive integer');\r\n this._maxLength = value;\r\n this.validation.next();\r\n }\r\n _maxLength: number | null = null;\r\n\r\n @Input()\r\n isSpellCheck = false;\r\n\r\n @Input()\r\n set isGrow(value: boolean | '') {\r\n if (value === '')\r\n value = true;\r\n if (value == null)\r\n value = false;\r\n if (typeof value !== 'boolean')\r\n throw new Error('[isGrow] expects: boolean');\r\n this._isGrow = value;\r\n }\r\n _isGrow = false;\r\n\r\n @Input() rows = 3;\r\n\r\n @Output() onBlur = new EventEmitter<FocusEvent>();\r\n @Output() onFocus = new EventEmitter<FocusEvent>();\r\n\r\n @ViewChild('textarea') textareaElement?: ElementRef;\r\n @ViewChild('textareaHidden') textareaHiddenElement?: ElementRef;\r\n\r\n get model() {\r\n return this._model;\r\n }\r\n set model(value: string | null) {\r\n if (value === '')\r\n value = null;\r\n\r\n this._model = value;\r\n\r\n this.onChange(this._model);\r\n setTimeout(() => this.setTextareaHeight());\r\n }\r\n _model: string | null = null;\r\n\r\n id = `_${Math.random().toString(36).substring(2, 11)}`;\r\n resizeSubject = new Subject<void>();\r\n\r\n constructor(\r\n @Self() public ngControl: NgControl,\r\n private renderer: Renderer2,\r\n ) {\r\n super();\r\n this.validation.subscribe(() => this.validate());\r\n ngControl.valueAccessor = this;\r\n this.resizeSubject\r\n .pipe(debounceTime(300))\r\n .subscribe(() => this._isGrow && this.setTextareaHeight());\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.resizeSubject.complete();\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n this.resizeSubject.next();\r\n }\r\n\r\n setTextareaHeight() {\r\n if (!this.textareaElement || !this.textareaHiddenElement)\r\n return;\r\n const textarea = this.textareaElement.nativeElement as HTMLElement;\r\n const textareaHidden = this.textareaHiddenElement.nativeElement as HTMLElement;\r\n this.renderer.setStyle(textareaHidden, 'width', `calc(${textarea.scrollWidth}px - 1em)`);\r\n this.renderer.setStyle(textareaHidden, 'height', 'auto');\r\n this.renderer.setStyle(textarea, 'height', `${textareaHidden.scrollHeight}px`);\r\n }\r\n\r\n onChange(_model: string | null) { }\r\n registerOnChange(fn: () => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n writeValue(v: string | null): void {\r\n let value = v as unknown;\r\n if (value === '' || value === undefined)\r\n value = null;\r\n if (isNumber(value))\r\n value = value.toString();\r\n if (value === null || typeof value === 'string') {\r\n this._model = value;\r\n setTimeout(() => this.setTextareaHeight());\r\n }\r\n }\r\n\r\n private validate() {\r\n const validators: ValidatorFn[] = [];\r\n\r\n if (this._minLength != null)\r\n validators.push(Validators.minLength(this._minLength));\r\n\r\n if (this._maxLength != null)\r\n validators.push(Validators.maxLength(this._maxLength));\r\n\r\n if (this.required === true)\r\n validators.push(Validators.required);\r\n\r\n this.ngControl.control?.setValidators(validators);\r\n this.ngControl.control?.updateValueAndValidity();\r\n }\r\n}\r\n","<label\r\n [for]=\"id\"\r\n [class.required]=\"required\"\r\n>\r\n <ng-content></ng-content>\r\n</label>\r\n\r\n<div class=\"d-flex\">\r\n <input\r\n *ngIf=\"!_isGrow\"\r\n type=\"text\"\r\n [(ngModel)]=\"model\"\r\n [class.br-end]=\"borderRadiusRight\"\r\n [class.br-start]=\"borderRadiusLeft\"\r\n class=\"flex-1\"\r\n [minlength]=\"_minLength\"\r\n [maxlength]=\"_maxLength\"\r\n [class.active]=\"_model !== null\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n [spellcheck]=\"isSpellCheck\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouched(); onBlur.emit($event)\"\r\n (focus)=\"onFocus.emit($event)\"\r\n />\r\n <textarea\r\n *ngIf=\"_isGrow\"\r\n #textarea\r\n [(ngModel)]=\"model\"\r\n [class.br-end]=\"borderRadiusRight\"\r\n [class.br-start]=\"borderRadiusLeft\"\r\n class=\"flex-1\"\r\n [rows]=\"rows\"\r\n [minlength]=\"_minLength\"\r\n [maxlength]=\"_maxLength\"\r\n [class.active]=\"_model !== null\"\r\n [class.invalid]=\"ngControl.control?.invalid\"\r\n [disabled]=\"isDisabled\"\r\n [id]=\"id\"\r\n [spellcheck]=\"isSpellCheck\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouched(); onBlur.emit($event)\"\r\n (focus)=\"onFocus.emit($event)\"\r\n ></textarea>\r\n</div>\r\n\r\n<div\r\n *ngIf=\"_isGrow\"\r\n class=\"d-flex\"\r\n>\r\n <textarea\r\n #textareaHidden\r\n [ngModel]=\"model\"\r\n class=\"hidden flex-1\"\r\n [rows]=\"rows\"\r\n ></textarea>\r\n</div>\r\n\r\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\r\n <li *ngIf=\"ngControl.control?.errors?.['minlength']\">\r\n minimum length is {{minLength}}\r\n </li>\r\n <li *ngIf=\"ngControl.control?.errors?.['maxLength']\">\r\n maximum length is {{maxLength}}\r\n </li>\r\n</ul> -->","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport {\r\n ChoiceComponent,\r\n ColorComponent,\r\n FileComponent,\r\n IconComponent,\r\n IconStackComponent,\r\n NumberComponent,\r\n ReadonlyComponent,\r\n SelectComponent,\r\n TextComponent,\r\n} from './components';\r\nimport {\r\n BorderRadiusDirective,\r\n BusyDirective,\r\n ControlDirective,\r\n ItemDirective,\r\n SizeDirective,\r\n} from './directives';\r\n\r\n@NgModule({\r\n declarations: [\r\n ReadonlyComponent,\r\n ChoiceComponent,\r\n ColorComponent,\r\n FileComponent,\r\n NumberComponent,\r\n TextComponent,\r\n ControlDirective,\r\n ItemDirective,\r\n SelectComponent,\r\n BorderRadiusDirective,\r\n BusyDirective,\r\n IconComponent,\r\n IconStackComponent,\r\n SizeDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n RouterModule,\r\n ],\r\n exports: [\r\n ReadonlyComponent,\r\n ChoiceComponent,\r\n ColorComponent,\r\n FileComponent,\r\n NumberComponent,\r\n TextComponent,\r\n SelectComponent,\r\n BusyDirective,\r\n IconComponent,\r\n IconStackComponent,\r\n ]\r\n})\r\nexport class ChaosControlModule { }\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ChaosControlService {\r\n\r\n constructor() { }\r\n}\r\n","// Public API Surface of chaos-control\r\n\r\nexport * from './lib/chaos-control.module';\r\nexport * from './lib/components';\r\nexport * from './lib/directives';\r\nexport * from './lib/models';\r\nexport * from './lib/chaos-control.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3.IconComponent","i4.SizeDirective","i2.IconComponent","i3.SizeDirective"],"mappings":"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"}
1
+ {"version":3,"file":"joster-dev-chaos-control.mjs","sources":["../../../projects/chaos-control/src/lib/components/busy/busy.component.ts","../../../projects/chaos-control/src/lib/components/busy/busy.component.html","../../../projects/chaos-control/src/lib/directives/border-radius.directive.ts","../../../projects/chaos-control/src/lib/directives/busy.directive.ts","../../../projects/chaos-control/src/lib/directives/control.directive.ts","../../../projects/chaos-control/src/lib/models/is-number.function.ts","../../../projects/chaos-control/src/lib/models/is-primitive.function.ts","../../../projects/chaos-control/src/lib/models/is-item.function.ts","../../../projects/chaos-control/src/lib/models/is-items.function.ts","../../../projects/chaos-control/src/lib/directives/item.directive.ts","../../../projects/chaos-control/src/lib/directives/size.directive.ts","../../../projects/chaos-control/src/lib/components/choice/choice.component.ts","../../../projects/chaos-control/src/lib/components/choice/choice.component.html","../../../projects/chaos-control/src/lib/components/color/color.component.ts","../../../projects/chaos-control/src/lib/components/color/color.component.html","../../../projects/chaos-control/src/lib/components/file/file.component.ts","../../../projects/chaos-control/src/lib/components/file/file.component.html","../../../projects/chaos-control/src/lib/components/number/number.component.ts","../../../projects/chaos-control/src/lib/components/number/number.component.html","../../../projects/chaos-control/src/lib/components/readonly/readonly.component.ts","../../../projects/chaos-control/src/lib/components/readonly/readonly.component.html","../../../projects/chaos-control/src/lib/components/select/select.component.ts","../../../projects/chaos-control/src/lib/components/select/select.component.html","../../../projects/chaos-control/src/lib/components/text/text.component.ts","../../../projects/chaos-control/src/lib/components/text/text.component.html","../../../projects/chaos-control/src/lib/chaos-control.module.ts","../../../projects/chaos-control/src/lib/chaos-control.service.ts","../../../projects/chaos-control/src/public-api.ts","../../../projects/chaos-control/src/joster-dev-chaos-control.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'jo-busy',\n templateUrl: './busy.component.html',\n styleUrls: [\n './busy.component.scss',\n '../../styles.scss',\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class BusyComponent {\n\n}\n","<!-- <div class=\"spinner spinner-1\"></div> -->\n<div class=\"spinner big\"></div>\n<div class=\"spinner small\"></div>\n","import { booleanAttribute, Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[joBorderRadius]'\n})\nexport class BorderRadiusDirective {\n borderRadiusRight = input(true, { transform: booleanAttribute });\n borderRadiusLeft = input(true, { transform: booleanAttribute });\n}\n","import { Directive, ElementRef, inject, Input, Renderer2, SimpleChanges, ViewContainerRef } from '@angular/core';\nimport { filter, from, interval, map, Subject, Subscription, take, takeUntil } from 'rxjs';\nimport { BusyComponent } from '../components';\n\n@Directive({\n selector: '[joBusy]'\n})\nexport class BusyDirective {\n private element = inject<ElementRef>(ElementRef);\n private viewContainerRef = inject(ViewContainerRef);\n private renderer = inject(Renderer2);\n\n @Input('joBusy') asyncEvents?: Subscription | Subscription[] | Promise<any> | Promise<any>[];\n\n host: HTMLElement = this.element.nativeElement;\n insertedNode?: Node;\n endSubscription$ = new Subject<void>();\n busySubscription?: Subscription;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['asyncEvents'].currentValue) {\n const valueArray = Array.isArray(changes['asyncEvents'].currentValue)\n ? changes['asyncEvents'].currentValue\n : [changes['asyncEvents'].currentValue];\n\n const subscriptionValueArray = valueArray\n .filter(item => Boolean(item))\n .map(item => {\n if (item instanceof Promise) {\n return from(item).subscribe();\n }\n return item;\n });\n\n if (subscriptionValueArray.length > 0) {\n if (this.busySubscription && !this.busySubscription.closed) {\n this.endSubscription$.next();\n }\n this.addSpinner(subscriptionValueArray);\n }\n }\n }\n\n ngOnDestroy(): void {\n this.endSubscription$.complete();\n }\n\n private addSpinner(asyncEvents: Subscription[]): void {\n const componentRef = this.viewContainerRef.createComponent(BusyComponent);\n this.insertedNode = this.host.insertBefore(componentRef.location.nativeElement, this.host.firstChild);\n this.renderer.addClass(this.host, 'position-relative');\n this.renderer.addClass(this.host, 'overflow-hidden');\n this.busySubscription = interval()\n .pipe(\n map(() => asyncEvents.every(item => item.closed)),\n filter(everySubscriptionClosed => Boolean(everySubscriptionClosed)),\n take(1),\n takeUntil(this.endSubscription$),\n )\n .subscribe(({\n complete: () => {\n this.removeSpinner();\n },\n error: () => {\n this.removeSpinner();\n },\n }));\n }\n\n private removeSpinner(): void {\n if (this.insertedNode)\n this.host.removeChild(this.insertedNode);\n this.renderer.removeClass(this.host, 'position-relative');\n this.renderer.removeClass(this.host, 'overflow-hidden');\n }\n}\n","import { booleanAttribute, Directive, input, signal } from '@angular/core';\nimport { BorderRadiusDirective } from './border-radius.directive';\n\n@Directive({\n selector: '[joControl]'\n})\nexport class ControlDirective extends BorderRadiusDirective {\n required = input(false, { transform: booleanAttribute });\n\n isDisabled = signal(false);\n\n onTouched() { }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","export function isNumber(value: unknown): value is number {\n return typeof value === 'number'\n && !isNaN(value);\n}\n","import { isNumber } from './is-number.function';\nimport { primitive } from './primitive.type';\n\nexport function isPrimitive(value: unknown): value is primitive {\n return typeof value === 'boolean'\n || isNumber(value)\n || typeof value === 'string';\n}\n","import { isPrimitive } from './is-primitive.function';\nimport { Item } from './item.interface';\n\nexport function isItem(item: Item): item is Item {\n return typeof (item) === 'object'\n && item !== null\n && isPrimitive(item.key)\n && typeof item.value === 'string';\n}\n","import { isItem } from './is-item.function';\nimport { Item } from './item.interface';\n\nexport function isItems(value: Item[]): value is Item[] {\n return Array.isArray(value) && value.every(item => isItem(item));\n}\n","import { booleanAttribute, Directive, effect, inject, input, signal } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { isItems, isNumber, isPrimitive, Item, primitive } from '../models';\n\nimport { ControlDirective } from './control.directive';\n\nfunction toItems(value: { key: boolean | number | string, value: string, [key: string]: unknown }[]): Item[] {\n if (!isItems(value))\n throw new Error('[items] expects: { key: boolean | number | string, value: string }[]');\n return value;\n}\n\nfunction toLimit(value: number): number {\n if (value == null)\n value = 0;\n if (!isNumber(value) || value < 0 || !Number.isInteger(value))\n throw new Error('limit expects: positive integer');\n return value;\n}\n\n@Directive({\n selector: '[joItem]'\n})\nexport class ItemDirective extends ControlDirective implements ControlValueAccessor {\n ngControl = inject(NgControl, { self: true });\n\n items = input([] as Item[], { transform: toItems });\n limit = input(0, { transform: toLimit });\n isMultiple = input(false, { transform: booleanAttribute });\n\n model = signal<primitive[]>([]);\n\n constructor() {\n super();\n this.ngControl.valueAccessor = this;\n\n // Re-run validation synchronously whenever an input that feeds the\n // validators changes. No debounce means validity repaints under zoneless.\n effect(() => {\n this.items();\n this.limit();\n this.isMultiple();\n this.required();\n this.validate();\n });\n }\n\n protected setModel(value: primitive[]) {\n this.model.set(value);\n this.onChange(\n value.length === 0\n ? null\n : this.isMultiple()\n ? value\n : value[0]\n );\n }\n\n onChange(_value: primitive[] | primitive | null) { }\n registerOnChange(fn: () => void) {\n this.onChange = fn;\n }\n\n writeValue(value: primitive[] | primitive | null) {\n if (value == null)\n value = [];\n\n if (!Array.isArray(value))\n value = [value];\n\n if (value.every(item => isPrimitive(item)))\n this.model.set(value);\n }\n\n private invalidValidator(items: Item[], isMultiple: boolean): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null =>\n (\n isMultiple\n ? Array.isArray(control.value) && control.value.every((key: any) => !items.map(item => item.key).includes(key))\n : ![undefined, null].includes(control.value) && !items.map(item => item.key).includes(control.value)\n )\n ? { invalid: control.value }\n : null;\n }\n\n private limitValidator(limit: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null =>\n control.value !== null && limit !== 0 && control.value.length > limit\n ? { limit: { value: control.value } }\n : null;\n }\n\n private validate() {\n const validators: ValidatorFn[] = [\n this.invalidValidator(this.items(), this.isMultiple()),\n ];\n\n if (this.isMultiple())\n validators.push(this.limitValidator(this.limit()));\n\n if (this.required() === true)\n validators.push(Validators.required);\n\n this.ngControl.control?.setValidators(validators);\n this.ngControl.control?.updateValueAndValidity();\n }\n}\n","import { Directive, Input, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Directive({\n selector: '[size]'\n})\nexport class SizeDirective implements OnDestroy {\n @Input()\n get size() {\n return this._size;\n }\n set size(value: any) {\n if (value === null || value === undefined)\n value = '100%';\n if (typeof value === 'number' && value >= 0 && value <= 100)\n value = `${value}%`;\n if (typeof value !== 'string')\n throw new Error('size input must be: string');\n // todo: write regex\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/height\n this._size = value;\n this.sizeChangesSubject.next();\n }\n _size = '100%';\n sizeChangesSubject = new Subject<void>();\n\n ngOnDestroy(): void {\n this.sizeChangesSubject.complete();\n }\n}\n","import { booleanAttribute, Component, input, ChangeDetectionStrategy } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { IconComponent } from '@joster-dev/icon';\n\nimport { ItemDirective } from '../../directives';\nimport { Item } from '../../models';\n\n@Component({\n selector: 'jo-choice',\n templateUrl: './choice.component.html',\n styleUrls: [\n './choice.component.scss',\n '../../styles.scss',\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [IconComponent]\n})\nexport class ChoiceComponent extends ItemDirective implements ControlValueAccessor {\n isColumn = input(false, { transform: booleanAttribute });\n\n id = `${Math.random().toString(36).substr(2, 9)}`;\n\n onClick(item: Item) {\n const keys = this.items().map(item => item.key);\n const model = this.model().filter(key => keys.includes(key));\n\n if (model.includes(item.key)) {\n if (this.required() === true && model.length === 1)\n return;\n\n this.setModel(model.filter(key => key !== item.key));\n return;\n }\n\n if (!this.isMultiple() && model.length === 1) {\n this.setModel([item.key]);\n return;\n }\n\n this.setModel([...model, item.key]);\n }\n}\n","<div class=\"d-flex justify-content-between\">\n <label\n id=\"choice_{{id}}\"\n [class.required]=\"required()\"\n >\n <ng-content></ng-content>\n </label>\n <div>\n <ng-content select=\"[rightAligned]\"></ng-content>\n </div>\n</div>\n\n<div\n class=\"d-flex flex-wrap align-items-start\"\n role=\"group\"\n attr.aria-labelledby=\"choice_{{id}}\"\n [class.flex-column]=\"isColumn()\"\n >\n @for (item of items(); track item; let idx = $index) {\n <button\n type=\"button\"\n class=\"d-flex align-items-center gap-2 text-start\"\n role=\"menuitemcheckbox\"\n [class.br-end]=\"borderRadiusRight()\"\n [class.br-start]=\"borderRadiusLeft()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onClick(item)\"\n (blur)=\"onTouched()\"\n >\n <div\n class=\"jo-button {{isMultiple() ? 'br-20' : 'br-50'}}\"\n [class.active]=\"model().includes(item.key)\"\n [class.disabled]=\"isDisabled()\"\n [class.invalid]=\"ngControl.control?.invalid\"\n >\n @if (model().includes(item.key)) {\n <icon\n size=\"1rem\"\n [type]=\"isMultiple() ? 'check' : 'dot'\"\n [fill]=\"[null, 'current']\"\n fillRotate=\"90\"\n ></icon>\n }\n </div>\n <span>{{item.value}}</span>\n </button>\n }\n</div>\n\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\n<li *ngIf=\"ngControl.control?.errors?.['invalid']\">\n invalid model\n</li>\n</ul> -->\n","import { Component, effect, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NgControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { IconComponent } from '@joster-dev/icon';\n\nimport { ControlDirective } from '../../directives';\n\n@Component({\n selector: 'jo-color',\n templateUrl: './color.component.html',\n styleUrls: [\n './color.component.scss',\n '../../styles.scss',\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [FormsModule, IconComponent]\n})\nexport class ColorComponent extends ControlDirective implements ControlValueAccessor {\n ngControl = inject(NgControl, { self: true });\n\n private partialHex = /^[0-9A-Fa-f]{1,6}$/;\n fullHex = /^[0-9A-Fa-f]{6}$/;\n\n model = signal<string | null>(null);\n\n id = `_${Math.random().toString(36).substring(2, 11)}`;\n\n constructor() {\n super();\n this.ngControl.valueAccessor = this;\n\n effect(() => {\n this.required();\n this.validate();\n });\n }\n\n onModelChange(value: string | null) {\n this.setModel(value);\n }\n\n onChangeColor(event: Event) {\n const ele = event.target as HTMLInputElement;\n this.setModel(ele.value.substring(1).toUpperCase());\n }\n\n private setModel(value: string | null) {\n this.model.set(value);\n this.onChange(\n value !== null && this.fullHex.test(value)\n ? value\n : null\n );\n }\n\n onChange(_model: string | null) { }\n registerOnChange(fn: () => void) {\n this.onChange = fn;\n }\n\n onBeforeinput(e: Event): void {\n const event = e as InputEvent;\n if (event.data === null)\n return;\n const ele = event.target as HTMLInputElement;\n const tooLong = event.data.length + (ele.selectionStart || 0) > 6;\n const valid = this.partialHex.test(event.data);\n if (tooLong || !valid)\n event.preventDefault();\n }\n\n writeValue(value: string | null): void {\n if (value === undefined || typeof value !== 'string' || !this.partialHex.test(value))\n value = null;\n\n if (value === null || this.partialHex.test(value))\n this.model.set(value);\n }\n\n private invalidValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null =>\n control.value !== null && (typeof control.value !== 'string' || !this.fullHex.test(control.value))\n ? { invalid: control.value }\n : null;\n }\n\n private validate() {\n const validators: ValidatorFn[] = [\n this.invalidValidator()\n ];\n\n if (this.required() === true)\n validators.push(Validators.required);\n\n this.ngControl.control?.setValidators(validators);\n this.ngControl.control?.updateValueAndValidity();\n }\n}\n","<label\n [for]=\"id\"\n [class.required]=\"required()\"\n>\n <ng-content></ng-content>\n</label>\n\n<div class=\"d-flex align-items-stretch\">\n <button\n class=\"d-flex align-items-center\"\n title=\"Color\"\n [class.br-start]=\"borderRadiusLeft()\"\n [disabled]=\"isDisabled()\"\n (click)=\"colorInput.click()\"\n >\n <icon\n size=\"1rem\"\n type=\"square\"\n [fill]=\"fullHex.test(model() || '') ? model() : [null, 'current']\"\n fillRotate=\"90\"\n [stroke]=\"fullHex.test(model() || '') ? model() : ['current']\"\n ></icon>\n </button>\n <input\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n spellcheck=\"false\"\n size=\"5\"\n type=\"text\"\n [class.active]=\"ngControl.control?.value !== null\"\n [class.br-end]=\"borderRadiusRight()\"\n [class.invalid]=\"ngControl.control?.invalid\"\n [disabled]=\"isDisabled()\"\n [id]=\"id\"\n (beforeinput)=\"onBeforeinput($event)\"\n (blur)=\"onTouched()\"\n />\n</div>\n\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\n <li *ngIf=\"ngControl.control?.errors?.['invalid']\">\n invalid model\n </li>\n</ul> -->\n\n<input\n #colorInput\n type=\"color\"\n (change)=\"onChangeColor($event)\"\n/>\n","import { booleanAttribute, Component, effect, inject, input, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NgControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { IconComponent } from '@joster-dev/icon';\nimport { ControlDirective } from '../../directives';\nimport { isNumber } from '../../models';\n\nfunction toAcceptedTypes(value: string[]): string[] {\n if (!Array.isArray(value) || !value.every(item => typeof item === 'string'))\n throw new Error(`acceptedTypes expects: string[]`);\n return value;\n}\n\nfunction toSizeLimitMb(value: number): number {\n if (!isNumber(value) || value < 0)\n throw new Error('sizeLimitMb expects: positive number');\n return value;\n}\n\n@Component({\n selector: 'jo-file',\n templateUrl: './file.component.html',\n styleUrls: [\n './file.component.scss',\n '../../styles.scss',\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [FormsModule, IconComponent]\n})\nexport class FileComponent extends ControlDirective implements ControlValueAccessor {\n ngControl = inject(NgControl, { self: true });\n\n acceptedTypes = input([] as string[], { transform: toAcceptedTypes });\n sizeLimitMb = input(0, { transform: toSizeLimitMb });\n multiple = input(false, { transform: booleanAttribute });\n showSize = input(false, { transform: booleanAttribute });\n\n model = signal<'' | null>(null);\n id = `${Math.random().toString(36).substr(2, 9)}`;\n\n constructor() {\n super();\n this.ngControl.valueAccessor = this;\n\n effect(() => {\n this.acceptedTypes();\n this.sizeLimitMb();\n this.multiple();\n this.required();\n this.validate();\n });\n }\n\n get fileNames(): string {\n if (this.ngControl.value instanceof FileList)\n return Object.values(this.ngControl.value).map(file => file.name).join(', ');\n\n if (this.ngControl.value instanceof File)\n return this.ngControl.value.name;\n\n return '';\n }\n\n get sizeLimit(): string {\n return this.sizeLimitMb() < 1\n ? `${this.sizeLimitMb() * 1000} KB`\n : `${this.sizeLimitMb()} MB`;\n }\n\n onFileChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.onChange(\n target.files?.length\n ? target.files\n : null\n );\n }\n\n onFileCancel(): void {\n this.onChange(null);\n }\n\n onChange(_model: FileList | null) { }\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n writeValue(value: unknown): void {\n if (value === undefined)\n value = null;\n\n if (value !== null && !(value instanceof FileList))\n throw new Error('control value must be: File or null');\n // todo\n // this.model.set(value);\n }\n\n private acceptedTypesValidator(acceptedTypes: string[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => control.value !== null\n && control.value instanceof FileList\n && !Object.values(control.value).map(item => item.type.toLowerCase())\n .every(type => acceptedTypes.includes(type.toLowerCase()))\n ? { acceptedTypes: { value: control.value } }\n : null;\n }\n\n private invalidValidator(multiple: boolean): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => control.value !== null\n && (!(control.value instanceof FileList) || (control.value.length > 1 && !multiple))\n ? { invalid: { value: control.value } }\n : null;\n }\n\n private sizeLimitMbValidator(sizeLimitMb: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => control.value instanceof FileList\n && Object.values(control.value).map(item => item.size / 1024 / 1024)\n .reduce((acc, cur) => acc + cur, 0) > sizeLimitMb\n ? { sizeLimitMb: { value: control.value } }\n : null;\n }\n\n private validate() {\n const validators: ValidatorFn[] = [\n this.invalidValidator(this.multiple())\n ];\n\n if (this.acceptedTypes().length > 0)\n validators.push(this.acceptedTypesValidator(this.acceptedTypes()));\n\n if (this.sizeLimitMb() > 0)\n validators.push(this.sizeLimitMbValidator(this.sizeLimitMb()));\n\n if (this.required() === true)\n validators.push(Validators.required);\n\n this.ngControl.control?.setValidators(validators);\n this.ngControl.control?.updateValueAndValidity();\n }\n}\n","<div class=\"d-flex justify-content-between\">\n <label [class.required]=\"required()\">\n <ng-content></ng-content>\n </label>\n <div>\n <ng-content select=\"[rightAligned]\"></ng-content>\n </div>\n</div>\n\n<div class=\"d-flex align-items-stretch\">\n <button\n class=\"d-flex align-items-center gap-2\"\n [class.br-start]=\"borderRadiusLeft()\"\n [disabled]=\"isDisabled()\"\n (click)=\"fileInput.click()\"\n >\n <icon\n type=\"folder\"\n size=\"1rem\"\n [fill]=\"[null, 'current']\"\n fillRotate=\"90\"\n ></icon>\n Browse...\n </button>\n <button\n class=\"d-flex align-items-center\"\n [class.br-end]=\"borderRadiusRight()\"\n [class.active]=\"ngControl.value !== null\"\n [disabled]=\"isDisabled()\"\n (click)=\"fileInput.click()\"\n >\n @if (!ngControl.value) {\n No {{multiple() ? 'files' : 'file'}} selected\n }\n @if (ngControl.value) {\n {{fileNames}}\n }\n </button>\n</div>\n\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\n<li *ngIf=\"ngControl.control?.errors?.['acceptedTypes']\">\n valid types are {{acceptedTypes().join(', ')}}\n</li>\n<li *ngIf=\"ngControl.control?.errors?.['sizeLimitMb']\">\n max file size is {{sizeLimit}}\n</li>\n<li *ngIf=\"ngControl.control?.errors?.['invalid']\">\n invalid model\n</li>\n</ul> -->\n\n<input\n [ngModel]=\"model()\"\n #fileInput\n type=\"file\"\n [accept]=\"acceptedTypes().join()\"\n [multiple]=\"multiple()\"\n [id]=\"id\"\n (change)=\"onFileChange($event)\"\n (cancel)=\"onFileCancel()\"\n />\n","import { Component, computed, effect, inject, input, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl, ValidatorFn, Validators } from '@angular/forms';\nimport { IconComponent } from '@joster-dev/icon';\nimport { ControlDirective } from '../../directives';\nimport { isNumber } from '../../models';\n\nfunction toNumber(label: string) {\n return (value: number | string): number => {\n const result = typeof value === 'string' ? parseFloat(value) : value;\n if (!isNumber(result))\n throw new Error(`[${label}] expects: number`);\n return result;\n };\n}\n\n@Component({\n selector: 'jo-number',\n templateUrl: './number.component.html',\n styleUrls: [\n './number.component.scss',\n '../../styles.scss',\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [FormsModule, IconComponent]\n})\nexport class NumberComponent extends ControlDirective implements ControlValueAccessor {\n ngControl = inject(NgControl, { self: true });\n\n min = input(0, { transform: toNumber('min') });\n max = input(9, { transform: toNumber('max') });\n step = input(1, { transform: toNumber('step') });\n\n readonly sizePadding = 5;\n\n model = signal<number | null>(null);\n\n mustBeInteger = computed(() => Number.isInteger(this.step()));\n\n maxDigitSize = computed(() => Math.max(\n this.step().toString().length,\n this.max().toString().length,\n this.min().toString().length\n ));\n\n isDisabledAdd = computed(() =>\n this.isDisabled() === true\n || this.model() !== null\n && this.model()! + this.step() > this.max()\n );\n\n isDisabledSubtract = computed(() =>\n this.isDisabled() === true\n || this.model() !== null\n && this.model()! - this.step() < this.min()\n );\n\n constructor() {\n super();\n this.ngControl.valueAccessor = this;\n\n // Re-run validation synchronously whenever an input that feeds the\n // validators changes. No debounce means validity repaints under zoneless.\n effect(() => {\n this.min();\n this.max();\n this.required();\n this.validate();\n });\n }\n\n onBeforeinput(e: Event) {\n const event = e as InputEvent;\n if (event.data === null)\n return;\n const isDigit = /\\d/.test(event.data);\n const isMinus = event.data === '-';\n const isMinusAllowed = this.min() < 0;\n const isBlockedNonDigit = !isDigit && !(isMinus && isMinusAllowed)\n const isPastMax = Number((this.model() || '') + event.data) > this.max();\n if (isBlockedNonDigit || isPastMax)\n event.preventDefault();\n }\n\n add(e: HTMLInputElement) {\n if (this.model() === null) {\n this.setModel(this.max());\n return;\n }\n\n e.stepUp();\n this.setModel(e.valueAsNumber);\n }\n\n subtract(e: HTMLInputElement) {\n if (this.model() === null) {\n this.setModel(this.min());\n return;\n }\n\n e.stepDown();\n this.setModel(e.valueAsNumber);\n }\n\n onModelChange(value: number | null) {\n this.setModel(value);\n }\n\n private setModel(value: number | null) {\n this.model.set(value);\n this.onChange(value);\n }\n\n onChange(_model: number | null) { }\n registerOnChange(fn: () => void) {\n this.onChange = fn;\n }\n\n writeValue(value: number | null) {\n if (value === undefined)\n value = null;\n\n if (typeof value === 'string')\n value = parseFloat(value);\n\n if (value === null || isNumber(value))\n this.model.set(value);\n }\n\n private validate() {\n const validators: ValidatorFn[] = [\n Validators.min(this.min()),\n Validators.max(this.max())\n ];\n\n if (this.required() === true)\n validators.push(Validators.required);\n\n this.ngControl.control?.setValidators(validators);\n this.ngControl.control?.updateValueAndValidity();\n }\n}\n","<label [class.required]=\"required()\">\n <ng-content></ng-content>\n</label>\n\n<div class=\"d-flex align-items-stretch\">\n <input\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n #numberInput\n class=\"d-flex align-items-center\"\n type=\"number\"\n [size]=\"maxDigitSize() + sizePadding\"\n [class.active]=\"model() !== null\"\n [class.br-start]=\"borderRadiusLeft()\"\n [class.invalid]=\"ngControl.control?.invalid\"\n [disabled]=\"isDisabled()\"\n [min]=\"min()\"\n [max]=\"max()\"\n (beforeinput)=\"onBeforeinput($event)\"\n />\n <button\n class=\"d-flex align-items-center\"\n title=\"Subtract\"\n type=\"button\"\n [disabled]=\"isDisabledSubtract()\"\n [class.invalid]=\"ngControl.control?.invalid\"\n (blur)=\"onTouched()\"\n (click)=\"subtract(numberInput)\"\n >\n <icon\n type=\"minus\"\n size=\"1rem\"\n [fill]=\"[null, 'current']\"\n fillRotate=\"90\"\n ></icon>\n </button>\n <button\n class=\"d-flex align-items-center\"\n title=\"Add\"\n type=\"button\"\n [class.br-end]=\"borderRadiusRight()\"\n [disabled]=\"isDisabledAdd()\"\n [class.invalid]=\"ngControl.control?.invalid\"\n (blur)=\"onTouched()\"\n (click)=\"add(numberInput)\"\n >\n <icon\n type=\"plus\"\n size=\"1rem\"\n [fill]=\"[null, 'current']\"\n fillRotate=\"90\"\n ></icon>\n </button>\n</div>\n\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\n <li *ngIf=\"ngControl.control?.errors?.['min']\">\n minimum number is {{min}}\n </li>\n <li *ngIf=\"ngControl.control?.errors?.['max']\">\n maximum number is {{max}}\n </li>\n</ul> -->","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\nimport { primitive } from '../../models';\n\n@Component({\n selector: 'jo-readonly',\n templateUrl: './readonly.component.html',\n styleUrls: [\n './readonly.component.scss',\n '../../styles.scss',\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class ReadonlyComponent {\n model = input<primitive>();\n}\n","<label>\n <ng-content></ng-content>\n</label>\n\n<div class=\"readonly p-2\">\n {{model()}}\n</div>","import { Component, computed, ElementRef, HostListener, inject, input, numberAttribute, signal, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ControlValueAccessor, FormsModule } from '@angular/forms';\nimport { IconComponent } from '@joster-dev/icon';\nimport { ItemDirective } from '../../directives';\nimport { Item } from '../../models';\n\n@Component({\n selector: 'jo-select',\n templateUrl: './select.component.html',\n styleUrls: [\n './select.component.scss',\n '../../styles.scss',\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[style.--dropHeightPx]': 'dropHeightPx()',\n },\n imports: [FormsModule, NgTemplateOutlet, IconComponent]\n})\nexport class SelectComponent extends ItemDirective implements ControlValueAccessor {\n private hostElement = inject(ElementRef);\n\n dropGroup = viewChild.required<ElementRef<HTMLDivElement>>('dropGroup');\n dropup = viewChild.required<ElementRef<HTMLDialogElement>>('dropup');\n dropdown = viewChild.required<ElementRef<HTMLDialogElement>>('dropdown');\n\n dropHeightPx = input(200, { transform: numberAttribute });\n\n searchTerm = signal('');\n\n filteredItems = computed(() => {\n const term = this.searchTerm().toLowerCase();\n return term\n ? this.items().filter(item => item.value.toLowerCase().includes(term))\n : this.items();\n });\n\n isDropdownCloseToBottom = false;\n id = `${Math.random().toString(36).substr(2, 9)}`;\n\n activeItemValues = computed(() => this.items()\n .filter(item => this.model().includes(item.key))\n .map(item => item.value)\n .join(', '));\n\n isSelectedAll = computed(() => this.items().every(item => this.model().includes(item.key)));\n\n @HostListener('document:mousedown', ['$event'])\n onGlobalClick(event: MouseEvent) {\n if (!this.hostElement.nativeElement.contains(event.target))\n this.closeDropdown();\n }\n\n onSearchChange(value: string) {\n this.searchTerm.set(value);\n }\n\n onClickGroup() {\n this.closeDropdown();\n if (this.dropGroup().nativeElement.getBoundingClientRect().bottom + this.dropHeightPx() > window.innerHeight) {\n this.dropup().nativeElement.show();\n } else {\n this.dropdown().nativeElement.show();\n }\n }\n\n onClick(item: Item) {\n const keys = this.items().map(item => item.key);\n const model = this.model().filter(key => keys.includes(key));\n\n if (model.includes(item.key)) {\n if (this.required() === true && model.length === 1)\n return;\n\n this.setModel(model.filter(key => key !== item.key));\n return;\n }\n\n if (!this.isMultiple() && model.length === 1) {\n this.setModel([item.key]);\n return;\n }\n\n this.setModel([...model, item.key]);\n }\n\n onClickSelectAll() {\n this.setModel(this.isSelectedAll()\n ? []\n : this.items().map(item => item.key));\n }\n\n closeDropdown() {\n this.searchTerm.set('');\n this.dropdown().nativeElement.close();\n this.dropup().nativeElement.close();\n }\n}\n","<div class=\"d-flex justify-content-between\">\n <label\n id=\"select_{{id}}\"\n [class.required]=\"required()\"\n >\n <ng-content></ng-content>\n </label>\n <div>\n <ng-content select=\"[rightAligned]\"></ng-content>\n </div>\n</div>\n\n<div class=\"position-relative\">\n <dialog #dropup>\n <ng-template [ngTemplateOutlet]=\"dropContent\"></ng-template>\n </dialog>\n</div>\n\n<div\n #dropGroup\n class=\"d-flex align-items-stretch\"\n role=\"group\"\n attr.aria-labelledby=\"select_{{id}}\"\n >\n <button\n class=\"flex-1 br-start text-start\"\n type=\"button\"\n [class.active]=\"model().length > 0\"\n [class.invalid]=\"!ngControl.control?.invalid\"\n (click)=\"onClickGroup()\"\n (blur)=\"onTouched()\"\n >\n {{activeItemValues()}}\n </button>\n <button\n class=\"d-flex br-end d-flex align-items-center justify-content-center\"\n [class.invalid]=\"!ngControl.control?.invalid\"\n [disabled]=\"isDisabled()\"\n (click)=\"onClickGroup()\"\n (blur)=\"onTouched()\"\n >\n <icon\n size=\"1rem\"\n type=\"chevron\"\n [fill]=\"[null, 'current']\"\n fillRotate=\"90\"\n [stroke]=\"['current']\"\n [class.up]=\"dropup.open\"\n [class.down]=\"dropdown.open\"\n ></icon>\n </button>\n</div>\n\n<dialog #dropdown>\n <ng-template [ngTemplateOutlet]=\"dropContent\"></ng-template>\n</dialog>\n\n<ng-template #dropContent>\n <div class=\"card\">\n <div class=\"card-body\">\n <div class=\"d-flex gap-2 align-items-stretch\">\n <input\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n class=\"flex-1 br-start br-end\"\n />\n @if (isMultiple()) {\n <button\n type=\"button\"\n class=\"br-start br-end\"\n (click)=\"onClickSelectAll()\"\n >\n {{isSelectedAll() ? 'Deselect' : 'Select'}} All\n </button>\n }\n </div>\n </div>\n <div class=\"d-flex flex-column\">\n @for (item of filteredItems(); track item) {\n <button\n class=\"d-flex flex-1 align-items-center text-start gap-2\"\n [disabled]=\"isDisabled()\"\n [class.active]=\"model().includes(item.key)\"\n (click)=\"onClick(item)\"\n >\n <div\n class=\"jo-button {{isMultiple() ? 'br-20' : 'br-50'}}\"\n [class.active]=\"model().includes(item.key)\"\n [class.disabled]=\"isDisabled()\"\n [class.invalid]=\"ngControl.control?.invalid\"\n >\n @if (model().includes(item.key)) {\n <icon\n size=\"1rem\"\n [type]=\"isMultiple() ? 'check' : 'dot'\"\n [fill]=\"[null, 'current']\"\n fillRotate=\"90\"\n ></icon>\n }\n </div>\n {{item.value}}\n </button>\n }\n </div>\n </div>\n</ng-template>\n","import { booleanAttribute, Component, effect, ElementRef, HostListener, inject, input, OnDestroy, output, Renderer2, signal, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl, ValidatorFn, Validators } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { ControlDirective } from '../../directives';\nimport { isNumber } from '../../models';\n\nfunction toPlaceholder(value: string): string {\n if (typeof (value as unknown) !== 'string')\n throw new Error('[placeholder] expects: string');\n return value;\n}\n\nfunction toLength(label: string) {\n return (value: string | number | null | undefined): number | null => {\n if (typeof value === 'string')\n value = parseInt(value, 10);\n if (value === undefined)\n value = null;\n if (!isNumber(value) || value < 0 || !Number.isInteger(value) || value === null)\n throw new Error(`[${label}] expects: positive integer`);\n return value;\n };\n}\n\n@Component({\n selector: 'jo-text',\n templateUrl: './text.component.html',\n styleUrls: [\n './text.component.scss',\n '../../styles.scss',\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [FormsModule]\n})\nexport class TextComponent extends ControlDirective implements OnDestroy, ControlValueAccessor {\n ngControl = inject(NgControl, { self: true });\n private renderer = inject(Renderer2);\n\n placeholder = input('', { transform: toPlaceholder });\n minLength = input<number | null, string | number | null | undefined>(null, { transform: toLength('minLength') });\n maxLength = input<number | null, string | number | null | undefined>(null, { transform: toLength('maxLength') });\n isSpellCheck = input(false, { transform: booleanAttribute });\n isGrow = input(false, { transform: booleanAttribute });\n rows = input(3);\n\n onBlur = output<FocusEvent>();\n onFocus = output<FocusEvent>();\n\n textareaElement = viewChild<ElementRef>('textarea');\n textareaHiddenElement = viewChild<ElementRef>('textareaHidden');\n\n model = signal<string | null>(null);\n id = `_${Math.random().toString(36).substring(2, 11)}`;\n resizeSubject = new Subject<void>();\n\n constructor() {\n super();\n this.ngControl.valueAccessor = this;\n this.resizeSubject\n .pipe(debounceTime(300))\n .subscribe(() => this.isGrow() && this.setTextareaHeight());\n\n effect(() => {\n this.minLength();\n this.maxLength();\n this.required();\n this.validate();\n });\n }\n\n ngOnDestroy(): void {\n this.resizeSubject.complete();\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n this.resizeSubject.next();\n }\n\n setTextareaHeight() {\n const textareaRef = this.textareaElement();\n const textareaHiddenRef = this.textareaHiddenElement();\n if (!textareaRef || !textareaHiddenRef)\n return;\n const textarea = textareaRef.nativeElement as HTMLElement;\n const textareaHidden = textareaHiddenRef.nativeElement as HTMLElement;\n this.renderer.setStyle(textareaHidden, 'width', `calc(${textarea.scrollWidth}px - 1em)`);\n this.renderer.setStyle(textareaHidden, 'height', 'auto');\n this.renderer.setStyle(textarea, 'height', `${textareaHidden.scrollHeight}px`);\n }\n\n onModelChange(value: string | null) {\n this.setModel(value);\n }\n\n private setModel(value: string | null) {\n if (value === '')\n value = null;\n\n this.model.set(value);\n this.onChange(value);\n setTimeout(() => this.setTextareaHeight());\n }\n\n onChange(_model: string | null) { }\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n writeValue(v: string | null): void {\n let value = v as unknown;\n if (value === '' || value === undefined)\n value = null;\n if (isNumber(value))\n value = value.toString();\n if (value === null || typeof value === 'string') {\n this.model.set(value);\n setTimeout(() => this.setTextareaHeight());\n }\n }\n\n private validate() {\n const validators: ValidatorFn[] = [];\n\n const minLength = this.minLength();\n if (minLength != null)\n validators.push(Validators.minLength(minLength));\n\n const maxLength = this.maxLength();\n if (maxLength != null)\n validators.push(Validators.maxLength(maxLength));\n\n if (this.required() === true)\n validators.push(Validators.required);\n\n this.ngControl.control?.setValidators(validators);\n this.ngControl.control?.updateValueAndValidity();\n }\n}\n","<label\n [for]=\"id\"\n [class.required]=\"required()\"\n >\n <ng-content></ng-content>\n</label>\n\n<div class=\"d-flex\">\n @if (!isGrow()) {\n <input\n type=\"text\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n [class.br-end]=\"borderRadiusRight()\"\n [class.br-start]=\"borderRadiusLeft()\"\n class=\"flex-1\"\n [minlength]=\"minLength()\"\n [maxlength]=\"maxLength()\"\n [class.active]=\"model() !== null\"\n [class.invalid]=\"ngControl.control?.invalid\"\n [disabled]=\"isDisabled()\"\n [id]=\"id\"\n [spellcheck]=\"isSpellCheck()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched(); onBlur.emit($event)\"\n (focus)=\"onFocus.emit($event)\"\n />\n }\n @if (isGrow()) {\n <textarea\n #textarea\n [ngModel]=\"model()\"\n (ngModelChange)=\"onModelChange($event)\"\n [class.br-end]=\"borderRadiusRight()\"\n [class.br-start]=\"borderRadiusLeft()\"\n class=\"flex-1\"\n [rows]=\"rows()\"\n [minlength]=\"minLength()\"\n [maxlength]=\"maxLength()\"\n [class.active]=\"model() !== null\"\n [class.invalid]=\"ngControl.control?.invalid\"\n [disabled]=\"isDisabled()\"\n [id]=\"id\"\n [spellcheck]=\"isSpellCheck()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched(); onBlur.emit($event)\"\n (focus)=\"onFocus.emit($event)\"\n ></textarea>\n }\n</div>\n\n@if (isGrow()) {\n <div\n class=\"d-flex\"\n >\n <textarea\n #textareaHidden\n [ngModel]=\"model()\"\n class=\"hidden flex-1\"\n [rows]=\"rows()\"\n ></textarea>\n </div>\n}\n\n<!-- <ul *ngIf=\"ngControl.control?.errors\">\n<li *ngIf=\"ngControl.control?.errors?.['minlength']\">\n minimum length is {{minLength()}}\n</li>\n<li *ngIf=\"ngControl.control?.errors?.['maxLength']\">\n maximum length is {{maxLength()}}\n</li>\n</ul> -->\n","import { NgModule } from '@angular/core';\nimport { IconComponent, IconStackComponent } from '@joster-dev/icon';\n\nimport {\n ChoiceComponent,\n ColorComponent,\n FileComponent,\n NumberComponent,\n ReadonlyComponent,\n SelectComponent,\n TextComponent,\n} from './components';\nimport { BusyDirective } from './directives';\n\n// The components and directives are standalone; this module is kept purely as a\n// convenience aggregator so existing consumers can keep importing\n// `ChaosControlModule`. New consumers can import the standalone pieces directly.\nconst PUBLIC_DECLARABLES = [\n ReadonlyComponent,\n ChoiceComponent,\n ColorComponent,\n FileComponent,\n NumberComponent,\n TextComponent,\n SelectComponent,\n BusyDirective,\n IconComponent,\n IconStackComponent,\n];\n\n@NgModule({\n imports: PUBLIC_DECLARABLES,\n exports: PUBLIC_DECLARABLES,\n})\nexport class ChaosControlModule { }\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ChaosControlService {\n\n constructor() { }\n}\n","// Public API Surface of chaos-control\n\nexport { IconComponent, IconStackComponent, iconTypes } from '@joster-dev/icon';\nexport type { icon } from '@joster-dev/icon';\n\nexport * from './lib/chaos-control.module';\nexport * from './lib/components';\nexport * from './lib/directives';\nexport * from './lib/models';\nexport * from './lib/chaos-control.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- MIT License
2
-
3
- Copyright (c) 2022 Jacob Osterhout
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
-
7
- The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
8
-
9
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jacob Osterhout
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joster-dev/chaos-control",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -35,23 +35,22 @@
35
35
  "peerDependencies": {
36
36
  "@angular/common": "^18.0.0",
37
37
  "@angular/core": "^18.0.0",
38
- "@joster-dev/style": "^0.1.4"
38
+ "@joster-dev/icon": "^0.3.0"
39
39
  },
40
40
  "dependencies": {
41
41
  "tslib": "^2.3.0"
42
42
  },
43
43
  "sideEffects": false,
44
44
  "module": "fesm2022/joster-dev-chaos-control.mjs",
45
- "typings": "index.d.ts",
45
+ "typings": "types/joster-dev-chaos-control.d.ts",
46
46
  "exports": {
47
47
  "./package.json": {
48
48
  "default": "./package.json"
49
49
  },
50
50
  ".": {
51
- "types": "./index.d.ts",
52
- "esm2022": "./esm2022/joster-dev-chaos-control.mjs",
53
- "esm": "./esm2022/joster-dev-chaos-control.mjs",
51
+ "types": "./types/joster-dev-chaos-control.d.ts",
54
52
  "default": "./fesm2022/joster-dev-chaos-control.mjs"
55
53
  }
56
- }
54
+ },
55
+ "type": "module"
57
56
  }
@@ -0,0 +1,7 @@
1
+ @use "sass:map";
2
+
3
+ @use "reboot";
4
+ @use "variables";
5
+ @use "control";
6
+ @use "card";
7
+ @use "utility";