@bootkit/ng0 0.0.0-alpha.31 → 0.0.0-alpha.32

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 (60) hide show
  1. package/components/list/index.d.ts +1 -0
  2. package/components/select/index.d.ts +7 -6
  3. package/components/sidenav/index.d.ts +95 -34
  4. package/fesm2022/bootkit-ng0-common.mjs +4 -4
  5. package/fesm2022/bootkit-ng0-components-accordion.mjs +12 -12
  6. package/fesm2022/bootkit-ng0-components-accordion.mjs.map +1 -1
  7. package/fesm2022/bootkit-ng0-components-backdrop.mjs +7 -7
  8. package/fesm2022/bootkit-ng0-components-backdrop.mjs.map +1 -1
  9. package/fesm2022/bootkit-ng0-components-button.mjs +8 -8
  10. package/fesm2022/bootkit-ng0-components-card.mjs +11 -11
  11. package/fesm2022/bootkit-ng0-components-code.mjs +7 -7
  12. package/fesm2022/bootkit-ng0-components-collapse.mjs +12 -12
  13. package/fesm2022/bootkit-ng0-components-collapse.mjs.map +1 -1
  14. package/fesm2022/bootkit-ng0-components-confirmation.mjs +13 -13
  15. package/fesm2022/bootkit-ng0-components-confirmation.mjs.map +1 -1
  16. package/fesm2022/bootkit-ng0-components-dropdown.mjs +25 -25
  17. package/fesm2022/bootkit-ng0-components-dropdown.mjs.map +1 -1
  18. package/fesm2022/bootkit-ng0-components-form-field.mjs +8 -8
  19. package/fesm2022/bootkit-ng0-components-form-field.mjs.map +1 -1
  20. package/fesm2022/bootkit-ng0-components-list.mjs +19 -18
  21. package/fesm2022/bootkit-ng0-components-list.mjs.map +1 -1
  22. package/fesm2022/bootkit-ng0-components-modal.mjs +8 -8
  23. package/fesm2022/bootkit-ng0-components-modal.mjs.map +1 -1
  24. package/fesm2022/bootkit-ng0-components-nav.mjs +23 -23
  25. package/fesm2022/bootkit-ng0-components-nav.mjs.map +1 -1
  26. package/fesm2022/bootkit-ng0-components-offcanvas.mjs +8 -8
  27. package/fesm2022/bootkit-ng0-components-offcanvas.mjs.map +1 -1
  28. package/fesm2022/bootkit-ng0-components-pagination.mjs +8 -8
  29. package/fesm2022/bootkit-ng0-components-pagination.mjs.map +1 -1
  30. package/fesm2022/bootkit-ng0-components-popover.mjs +7 -7
  31. package/fesm2022/bootkit-ng0-components-popover.mjs.map +1 -1
  32. package/fesm2022/bootkit-ng0-components-select.mjs +12 -11
  33. package/fesm2022/bootkit-ng0-components-select.mjs.map +1 -1
  34. package/fesm2022/bootkit-ng0-components-sidenav.mjs +192 -64
  35. package/fesm2022/bootkit-ng0-components-sidenav.mjs.map +1 -1
  36. package/fesm2022/bootkit-ng0-components-stepper.mjs +12 -12
  37. package/fesm2022/bootkit-ng0-components-stepper.mjs.map +1 -1
  38. package/fesm2022/bootkit-ng0-components-table.mjs +15 -15
  39. package/fesm2022/bootkit-ng0-components-table.mjs.map +1 -1
  40. package/fesm2022/bootkit-ng0-components-toast.mjs +6 -6
  41. package/fesm2022/bootkit-ng0-components-toast.mjs.map +1 -1
  42. package/fesm2022/bootkit-ng0-components-tooltip.mjs +7 -7
  43. package/fesm2022/bootkit-ng0-components-tooltip.mjs.map +1 -1
  44. package/fesm2022/bootkit-ng0-components-vertical-menu.mjs +22 -22
  45. package/fesm2022/bootkit-ng0-components-vertical-menu.mjs.map +1 -1
  46. package/fesm2022/bootkit-ng0-form.mjs +29 -29
  47. package/fesm2022/bootkit-ng0-form.mjs.map +1 -1
  48. package/fesm2022/bootkit-ng0-http.mjs +3 -3
  49. package/fesm2022/bootkit-ng0-layouts-layout1.mjs +13 -38
  50. package/fesm2022/bootkit-ng0-layouts-layout1.mjs.map +1 -1
  51. package/fesm2022/bootkit-ng0-localization.mjs +153 -73
  52. package/fesm2022/bootkit-ng0-localization.mjs.map +1 -1
  53. package/fesm2022/bootkit-ng0-platform-browser.mjs +7 -7
  54. package/fesm2022/bootkit-ng0-platform-browser.mjs.map +1 -1
  55. package/fesm2022/bootkit-ng0-routing.mjs +3 -3
  56. package/fesm2022/bootkit-ng0-script.mjs +3 -3
  57. package/fesm2022/bootkit-ng0-security.mjs +14 -14
  58. package/layouts/layout1/index.d.ts +16 -27
  59. package/localization/index.d.ts +63 -8
  60. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-components-form-field.mjs","sources":["../../../projects/ng0/components/form-field/form-field.component.ts","../../../projects/ng0/components/form-field/form-field.component.html","../../../projects/ng0/components/form-field/form-field.module.ts","../../../projects/ng0/components/form-field/bootkit-ng0-components-form-field.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { booleanAttribute, ChangeDetectionStrategy, DestroyRef, ElementRef, HostListener, inject, input, Renderer2, signal, ViewEncapsulation } from '@angular/core';\r\nimport { Component, ContentChild, AfterContentInit } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, NgControl } from '@angular/forms';\r\nimport { LocalizationService } from '@bootkit/ng0/localization';\r\n\r\n@Component({\r\n selector: 'ng0-form-field, ng0-field',\r\n exportAs: 'ng0FormField',\r\n templateUrl: './form-field.component.html',\r\n styleUrls: ['./form-field.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule],\r\n host: {\r\n '[class.ng0-form-field-required]': '_hasRequiredControl()',\r\n }\r\n})\r\nexport class FormFieldComponent implements AfterContentInit {\r\n @ContentChild(NgControl, { static: true, read: ElementRef }) private _ngControlElement?: ElementRef;\r\n private _destroyRef = inject(DestroyRef);\r\n private _renderer = inject(Renderer2);\r\n private _localizationService = inject(LocalizationService);\r\n // private _form = inject(NgForm, { optional: true });\r\n @ContentChild(NgControl) protected _ngControl?: NgControl;\r\n protected _status = signal<string | null>('');\r\n protected _hasRequiredControl = signal(false);\r\n protected _errorText = signal<string | undefined>(undefined);\r\n\r\n /**\r\n * The label text for the form field.\r\n */\r\n public readonly label = input<string>();\r\n\r\n /**\r\n * The hint text to display below the form field.\r\n */\r\n public readonly hint = input<string>();\r\n\r\n /**\r\n * If true, the form-field will show validation errors.\r\n */\r\n public readonly showErrors = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * If undefined, the indicator will be shown based on the control's required state.\r\n * If true, the form-field will show a required indicator (*) next to the label (regardless of the control's required state).\r\n * If false, the required indicator will not be shown (regardless of the control's required state).\r\n */\r\n public readonly showRequired = input<boolean | undefined>(undefined);\r\n\r\n /**\r\n * If true, the form-field will show subscripts (e.g. hints, errors) for the field label.\r\n */\r\n public readonly showSubscripts = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * If true, the form-field will be rendered inside a \".input-group\" element.\r\n */\r\n public readonly inputGroup = input(true, { transform: booleanAttribute });\r\n\r\n ngAfterContentInit(): void {\r\n this._hasRequiredControl.set(this._isControlRequired());\r\n\r\n if (this._ngControl) {\r\n this._status.set(this._ngControl.status);\r\n\r\n this._ngControl.statusChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {\r\n this._status.set(change);\r\n this._checkValidation();\r\n });\r\n\r\n this._ngControl.valueChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(value => {\r\n if (this._status() === 'INVALID' && this._ngControl!.errors) {\r\n this._checkValidation(); // Recheck validation errors\r\n }\r\n });\r\n }\r\n }\r\n\r\n private _checkValidation() {\r\n if (!this._ngControl || !this._ngControl.touched) {\r\n return;\r\n }\r\n\r\n let elm = this._ngControlElement!.nativeElement;\r\n let invalid = this._status() === 'INVALID';\r\n let errorText = invalid ?\r\n this._localizationService.get()?.translateFirstError(this._ngControl!.errors, 'Invalid')?.text :\r\n undefined;\r\n\r\n this._errorText.set(errorText);\r\n this._renderer.addClass(elm, invalid ? 'is-invalid' : 'is-valid');\r\n this._renderer.removeClass(elm, invalid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private _isControlRequired(): boolean {\r\n const validator = this._ngControl?.validator || this._ngControl?.control?.validator;\r\n const errors = validator && validator(new FormControl(null));\r\n return errors != null && errors['required'] === true;\r\n }\r\n\r\n @HostListener('focusout')\r\n private _onFocusOut() {\r\n this._checkValidation();\r\n }\r\n}\r\n","@let errorText = _errorText();\r\n@let showRequiredIndicator = showRequired();\r\n\r\n@if(label()) {\r\n<label class=\"ng0-form-field-label\">\r\n {{label()}}\r\n @if((showRequiredIndicator === true || (showRequiredIndicator == undefined && _hasRequiredControl()))) {\r\n <span class=\"ng0-form-field-required-indicator\">*</span>\r\n }\r\n</label>\r\n}\r\n\r\n@if(inputGroup()) {\r\n<div class=\"input-group\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n}@else {\r\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n}\r\n\r\n<ng-template #contentTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if(showSubscripts()) {\r\n<div class=\"ng0-form-field-subscript\">\r\n @if(showErrors() && errorText && _ngControl?.touched) {\r\n <small class=\"ng0-form-field-error text-danger\" animate.enter=\"ng0-form-field-fadein\">\r\n {{errorText}}\r\n </small>\r\n }@else if(hint()) {\r\n <small class=\"ng0-form-field-hint\">\r\n {{hint()}}\r\n </small>\r\n }\r\n</div>\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldComponent } from './form-field.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormFieldComponent,\r\n ],\r\n exports: [\r\n FormFieldComponent,\r\n ]\r\n})\r\nexport class FormFieldModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAoBa,kBAAkB,CAAA;AACwC,IAAA,iBAAiB;AAC9E,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAEvB,IAAA,UAAU;AACnC,IAAA,OAAO,GAAG,MAAM,CAAgB,EAAE,mDAAC;AACnC,IAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK,+DAAC;AACnC,IAAA,UAAU,GAAG,MAAM,CAAqB,SAAS,sDAAC;AAE5D;;AAEG;IACa,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAEvC;;AAEG;IACa,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAEtC;;AAEG;AACa,IAAA,UAAU,GAAG,KAAK,CAAC,IAAI,8CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAEzE;;;;AAIG;AACa,IAAA,YAAY,GAAG,KAAK,CAAsB,SAAS,wDAAC;AAEpE;;AAEG;AACa,IAAA,cAAc,GAAG,KAAK,CAAC,IAAI,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAE7E;;AAEG;AACa,IAAA,UAAU,GAAG,KAAK,CAAC,IAAI,8CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;IAEzE,kBAAkB,GAAA;QAChB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAExC,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC3F,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBACxB,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AACzF,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,UAAW,CAAC,MAAM,EAAE;AAC3D,oBAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B;AACF,YAAA,CAAC,CAAC;QACJ;IACF;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YAChD;QACF;AAEA,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,iBAAkB,CAAC,aAAa;QAC/C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS;AAC1C,QAAA,IAAI,SAAS,GAAG,OAAO;AACrB,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,UAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI;AAC9F,YAAA,SAAS;AAEX,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,UAAU,CAAC;AACjE,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;IACtE;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS;AACnF,QAAA,MAAM,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI;IACtD;IAGQ,WAAW,GAAA;QACjB,IAAI,CAAC,gBAAgB,EAAE;IACzB;uGAvFW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,eAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACf,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAwB,UAAU,wEAK3C,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BzB,wiCAoCC,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrBW,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAb9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,YAC3B,cAAc,EAAA,aAAA,EAGT,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,IAAA,EACjB;AACJ,wBAAA,iCAAiC,EAAE,uBAAuB;AAC3D,qBAAA,EAAA,QAAA,EAAA,wiCAAA,EAAA,MAAA,EAAA,CAAA,ubAAA,CAAA,EAAA;8BAGoE,iBAAiB,EAAA,CAAA;sBAArF,YAAY;uBAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;gBAKxB,UAAU,EAAA,CAAA;sBAA5C,YAAY;uBAAC,SAAS;gBA+Ef,WAAW,EAAA,CAAA;sBADlB,YAAY;uBAAC,UAAU;;;ME3Fb,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAPxB,YAAY;AACZ,YAAA,kBAAkB,aAGlB,kBAAkB,CAAA,EAAA,CAAA;AAGT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAPxB,YAAY;YACZ,kBAAkB,CAAA,EAAA,CAAA;;2FAMT,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,kBAAkB;AACnB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,kBAAkB;AACnB;AACF,iBAAA;;;ACZD;;AAEG;;;;"}
1
+ {"version":3,"file":"bootkit-ng0-components-form-field.mjs","sources":["../../../projects/ng0/components/form-field/form-field.component.ts","../../../projects/ng0/components/form-field/form-field.component.html","../../../projects/ng0/components/form-field/form-field.module.ts","../../../projects/ng0/components/form-field/bootkit-ng0-components-form-field.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { booleanAttribute, ChangeDetectionStrategy, DestroyRef, ElementRef, HostListener, inject, input, Renderer2, signal, ViewEncapsulation } from '@angular/core';\r\nimport { Component, ContentChild, AfterContentInit } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, NgControl } from '@angular/forms';\r\nimport { LocalizationService } from '@bootkit/ng0/localization';\r\n\r\n@Component({\r\n selector: 'ng0-form-field, ng0-field',\r\n exportAs: 'ng0FormField',\r\n templateUrl: './form-field.component.html',\r\n styleUrls: ['./form-field.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule],\r\n host: {\r\n '[class.ng0-form-field-required]': '_hasRequiredControl()',\r\n }\r\n})\r\nexport class FormFieldComponent implements AfterContentInit {\r\n @ContentChild(NgControl, { static: true, read: ElementRef }) private _ngControlElement?: ElementRef;\r\n private _destroyRef = inject(DestroyRef);\r\n private _renderer = inject(Renderer2);\r\n private _localizationService = inject(LocalizationService);\r\n // private _form = inject(NgForm, { optional: true });\r\n @ContentChild(NgControl) protected _ngControl?: NgControl;\r\n protected _status = signal<string | null>('');\r\n protected _hasRequiredControl = signal(false);\r\n protected _errorText = signal<string | undefined>(undefined);\r\n\r\n /**\r\n * The label text for the form field.\r\n */\r\n public readonly label = input<string>();\r\n\r\n /**\r\n * The hint text to display below the form field.\r\n */\r\n public readonly hint = input<string>();\r\n\r\n /**\r\n * If true, the form-field will show validation errors.\r\n */\r\n public readonly showErrors = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * If undefined, the indicator will be shown based on the control's required state.\r\n * If true, the form-field will show a required indicator (*) next to the label (regardless of the control's required state).\r\n * If false, the required indicator will not be shown (regardless of the control's required state).\r\n */\r\n public readonly showRequired = input<boolean | undefined>(undefined);\r\n\r\n /**\r\n * If true, the form-field will show subscripts (e.g. hints, errors) for the field label.\r\n */\r\n public readonly showSubscripts = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * If true, the form-field will be rendered inside a \".input-group\" element.\r\n */\r\n public readonly inputGroup = input(true, { transform: booleanAttribute });\r\n\r\n ngAfterContentInit(): void {\r\n this._hasRequiredControl.set(this._isControlRequired());\r\n\r\n if (this._ngControl) {\r\n this._status.set(this._ngControl.status);\r\n\r\n this._ngControl.statusChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {\r\n this._status.set(change);\r\n this._checkValidation();\r\n });\r\n\r\n this._ngControl.valueChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(value => {\r\n if (this._status() === 'INVALID' && this._ngControl!.errors) {\r\n this._checkValidation(); // Recheck validation errors\r\n }\r\n });\r\n }\r\n }\r\n\r\n private _checkValidation() {\r\n if (!this._ngControl || !this._ngControl.touched) {\r\n return;\r\n }\r\n\r\n let elm = this._ngControlElement!.nativeElement;\r\n let invalid = this._status() === 'INVALID';\r\n let errorText = invalid ?\r\n this._localizationService.get()?.translateFirstError(this._ngControl!.errors, 'Invalid')?.text :\r\n undefined;\r\n\r\n this._errorText.set(errorText);\r\n this._renderer.addClass(elm, invalid ? 'is-invalid' : 'is-valid');\r\n this._renderer.removeClass(elm, invalid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private _isControlRequired(): boolean {\r\n const validator = this._ngControl?.validator || this._ngControl?.control?.validator;\r\n const errors = validator && validator(new FormControl(null));\r\n return errors != null && errors['required'] === true;\r\n }\r\n\r\n @HostListener('focusout')\r\n private _onFocusOut() {\r\n this._checkValidation();\r\n }\r\n}\r\n","@let errorText = _errorText();\r\n@let showRequiredIndicator = showRequired();\r\n\r\n@if(label()) {\r\n<label class=\"ng0-form-field-label\">\r\n {{label()}}\r\n @if((showRequiredIndicator === true || (showRequiredIndicator == undefined && _hasRequiredControl()))) {\r\n <span class=\"ng0-form-field-required-indicator\">*</span>\r\n }\r\n</label>\r\n}\r\n\r\n@if(inputGroup()) {\r\n<div class=\"input-group\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n}@else {\r\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n}\r\n\r\n<ng-template #contentTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if(showSubscripts()) {\r\n<div class=\"ng0-form-field-subscript\">\r\n @if(showErrors() && errorText && _ngControl?.touched) {\r\n <small class=\"ng0-form-field-error text-danger\" animate.enter=\"ng0-form-field-fadein\">\r\n {{errorText}}\r\n </small>\r\n }@else if(hint()) {\r\n <small class=\"ng0-form-field-hint\">\r\n {{hint()}}\r\n </small>\r\n }\r\n</div>\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldComponent } from './form-field.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormFieldComponent,\r\n ],\r\n exports: [\r\n FormFieldComponent,\r\n ]\r\n})\r\nexport class FormFieldModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, inject, ElementRef, Directive, ChangeDetectorRef, signal, Renderer2, booleanAttribute, EventEmitter, effect, untracked, computed, TemplateRef, forwardRef, HostListener, Output, ViewChildren, ContentChild, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
2
+ import { input, inject, ElementRef, Directive, ChangeDetectorRef, EnvironmentInjector, signal, Renderer2, booleanAttribute, EventEmitter, effect, untracked, computed, TemplateRef, forwardRef, HostListener, Output, ViewChildren, ContentChild, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { dataSourceAttribute, DataRequest } from '@bootkit/ng0/data';
@@ -95,10 +95,10 @@ class ListItem {
95
95
  return this.isActive() ? 0 : -1;
96
96
  }
97
97
  }
98
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ListItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
99
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.1", type: ListItem, isStandalone: true, selector: "ng0-list-item", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.tabIndex": "_getTabIndex()" } }, exportAs: ["ng0ListItem"], ngImport: i0 });
98
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ListItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
99
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: ListItem, isStandalone: true, selector: "ng0-list-item", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.tabIndex": "_getTabIndex()" } }, exportAs: ["ng0ListItem"], ngImport: i0 });
100
100
  }
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ListItem, decorators: [{
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ListItem, decorators: [{
102
102
  type: Directive,
103
103
  args: [{
104
104
  selector: 'ng0-list-item',
@@ -109,7 +109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
109
109
  '[attr.tabIndex]': '_getTabIndex()'
110
110
  }
111
111
  }]
112
- }] });
112
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
113
113
 
114
114
  /**
115
115
  * ListComponent is a versatile component that displays a list of items with support for single or multiple selection,
@@ -118,6 +118,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
118
118
  class ListComponent {
119
119
  _localizationService = inject(LocalizationService);
120
120
  _changeDetector = inject(ChangeDetectorRef);
121
+ _injector = inject(EnvironmentInjector);
121
122
  _changeCallback;
122
123
  _touchCallback;
123
124
  _selectedItems = new Set();
@@ -167,8 +168,8 @@ class ListComponent {
167
168
  * A fromatter to convert each item to a string for display.
168
169
  * Default converts the item to a string using its toString method.
169
170
  */
170
- formatBy = input(defaultFormatter, ...(ngDevMode ? [{ debugName: "formatBy", transform: objectFormatterAttribute(this._localizationService.get()) }] : [{
171
- transform: objectFormatterAttribute(this._localizationService.get())
171
+ formatBy = input(defaultFormatter, ...(ngDevMode ? [{ debugName: "formatBy", transform: objectFormatterAttribute(this._injector) }] : [{
172
+ transform: objectFormatterAttribute(this._injector)
172
173
  }]));
173
174
  /**
174
175
  * Custom value writer to extract the value of any object while writing values.
@@ -496,14 +497,14 @@ class ListComponent {
496
497
  this._activeItem()?.focus();
497
498
  }
498
499
  }
499
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
500
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: ListComponent, isStandalone: true, selector: "ng0-list, ng0-select-list", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, showSelectionIndicator: { classPropertyName: "showSelectionIndicator", publicName: "showSelectionIndicator", isSignal: true, isRequired: false, transformFunction: null }, compareBy: { classPropertyName: "compareBy", publicName: "compareBy", isSignal: true, isRequired: false, transformFunction: null }, formatBy: { classPropertyName: "formatBy", publicName: "formatBy", isSignal: true, isRequired: false, transformFunction: null }, writeBy: { classPropertyName: "writeBy", publicName: "writeBy", isSignal: true, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null }, itemClass: { classPropertyName: "itemClass", publicName: "itemClass", isSignal: true, isRequired: false, transformFunction: null }, focusMode: { classPropertyName: "focusMode", publicName: "focusMode", isSignal: true, isRequired: false, transformFunction: null }, idGenerator: { classPropertyName: "idGenerator", publicName: "idGenerator", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect" }, host: { listeners: { "blur": "_onHostBlur()", "keydown": "_onKeydown($event)" }, properties: { "class.ng0-list-loading": "source().isLoading()", "attr.aria-activedescendant": "_hostAriaActiveDescendant()", "attr.disabled": "_isDisabled() ? \"\" : undefined", "attr.aria-disabled": "_isDisabled() ? \"\" : undefined", "attr.tabindex": "_hostTabIndex()" } }, providers: [{
500
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
501
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: ListComponent, isStandalone: true, selector: "ng0-list, ng0-select-list", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, showSelectionIndicator: { classPropertyName: "showSelectionIndicator", publicName: "showSelectionIndicator", isSignal: true, isRequired: false, transformFunction: null }, compareBy: { classPropertyName: "compareBy", publicName: "compareBy", isSignal: true, isRequired: false, transformFunction: null }, formatBy: { classPropertyName: "formatBy", publicName: "formatBy", isSignal: true, isRequired: false, transformFunction: null }, writeBy: { classPropertyName: "writeBy", publicName: "writeBy", isSignal: true, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null }, itemClass: { classPropertyName: "itemClass", publicName: "itemClass", isSignal: true, isRequired: false, transformFunction: null }, focusMode: { classPropertyName: "focusMode", publicName: "focusMode", isSignal: true, isRequired: false, transformFunction: null }, idGenerator: { classPropertyName: "idGenerator", publicName: "idGenerator", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect" }, host: { listeners: { "blur": "_onHostBlur()", "keydown": "_onKeydown($event)" }, properties: { "class.ng0-list-loading": "source().isLoading()", "attr.aria-activedescendant": "_hostAriaActiveDescendant()", "attr.disabled": "_isDisabled() ? \"\" : undefined", "attr.aria-disabled": "_isDisabled() ? \"\" : undefined", "attr.tabindex": "_hostTabIndex()" } }, providers: [{
501
502
  provide: NG_VALUE_ACCESSOR,
502
503
  useExisting: forwardRef(() => ListComponent),
503
504
  multi: true
504
- }], queries: [{ propertyName: "_itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "listItems", predicate: ListItem, descendants: true }], exportAs: ["ng0List"], ngImport: i0, template: "@let filter = filterBy();\r\n@let formatter = formatBy();\r\n\r\n@for (item of _sourceItems(); track trackBy()($index, item)) {\r\n\r\n<ng0-list-item #listItem=\"ng0ListItem\"\r\n *ng0If=\"!filter || filter(item)\"\r\n [value]=\"item\"\r\n [id]=\"idGenerator()?.(item)\"\r\n [class.active]=\"isActive(listItem)\"\r\n [class.selected]=\"isSelected(item)\"\r\n [ngClass]=\"itemClass()?.(item)\"\r\n (click)=\"_handleUserSelection(listItem, $index);\">\r\n\r\n @if(itemTemplate() || _itemTemplate) {\r\n @let template = itemTemplate() || _itemTemplate;\r\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: {item: listItem, value: item}}\" />\r\n } @else {\r\n @if(showSelectionIndicator()) {\r\n <input class=\"form-check-input ng0-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"isSelected(item)\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\">\r\n }\r\n\r\n {{formatter(item)}}\r\n }\r\n</ng0-list-item>\r\n}\r\n\r\n@if(_showLoadingSppiner()) {\r\n@if(_sourceItems().length == 0) {\r\n<div style=\"text-align: center; padding: 0.5rem 0;\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}@else {\r\n<div class=\"ng0-list-loading-cover\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}\r\n}\r\n\r\n<ng-template #spinner>\r\n <div class=\"spinner-border spinner-sm text-primary ng0-list-loading-indicator\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n</ng-template>", styles: ["ng0-list:not(.ng0-list-unstyled){display:block;position:relative;-webkit-user-select:none;user-select:none;border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}ng0-list:not(.ng0-list-unstyled):focus,ng0-list:not(.ng0-list-unstyled):focus-visible{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}ng0-list:not(.ng0-list-unstyled)[disabled],ng0-list:not(.ng0-list-unstyled).disabled{opacity:.5;pointer-events:none}ng0-list:not(.ng0-list-unstyled) .ng0-list-loading-cover{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffffb3;display:flex;align-items:center;justify-content:center}ng0-list:not(.ng0-list-unstyled) ng0-list-item{display:flex;padding:.5rem}ng0-list:not(.ng0-list-unstyled) ng0-list-item .ng0-selection-indicator{margin-inline-end:.5rem}ng0-list:not(.ng0-list-unstyled) ng0-list-item:focus,ng0-list:not(.ng0-list-unstyled) ng0-list-item:focus-visible{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}ng0-list:not(.ng0-list-unstyled) ng0-list-item.selected{background-color:var(--bs-primary);color:var(--bs-light)}ng0-list:not(.ng0-list-unstyled) ng0-list-item.active:not(.selected){background-color:color-mix(in srgb,var(--bs-primary),white 85%)}ng0-list:not(.ng0-list-unstyled) ng0-list-item:hover:not(.selected):not(.disabled):not(.active){background-color:color-mix(in srgb,var(--bs-primary),white 95%)}ng0-list:not(.ng0-list-unstyled) ng0-list-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}ng0-list:not(.ng0-list-unstyled) ng0-list-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IfDirective, selector: "[ng0If]", inputs: ["ng0If"], exportAs: ["ng0If"] }, { kind: "directive", type: ListItem, selector: "ng0-list-item", inputs: ["value", "id"], exportAs: ["ng0ListItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
505
+ }], queries: [{ propertyName: "_itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "listItems", predicate: ListItem, descendants: true }], exportAs: ["ng0List"], ngImport: i0, template: "@let filter = filterBy();\r\n@let formatter = formatBy();\r\n\r\n@for (item of _sourceItems(); track trackBy()($index, item)) {\r\n\r\n<ng0-list-item #listItem=\"ng0ListItem\"\r\n *ng0If=\"!filter || filter(item)\"\r\n [value]=\"item\"\r\n [id]=\"idGenerator()?.(item)\"\r\n [class.active]=\"isActive(listItem)\"\r\n [class.selected]=\"isSelected(item)\"\r\n [ngClass]=\"itemClass()?.(item)\"\r\n (click)=\"_handleUserSelection(listItem, $index);\">\r\n\r\n @if(itemTemplate() || _itemTemplate) {\r\n @let template = itemTemplate() || _itemTemplate;\r\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: {item: listItem, value: item}}\" />\r\n } @else {\r\n @if(showSelectionIndicator()) {\r\n <input class=\"form-check-input ng0-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"isSelected(item)\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\">\r\n }\r\n\r\n {{formatter(item)}}\r\n }\r\n</ng0-list-item>\r\n}\r\n\r\n@if(_showLoadingSppiner()) {\r\n@if(_sourceItems().length == 0) {\r\n<div style=\"text-align: center; padding: 0.5rem 0;\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}@else {\r\n<div class=\"ng0-list-loading-cover\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}\r\n}\r\n\r\n<ng-template #spinner>\r\n <div class=\"spinner-border spinner-sm text-primary ng0-list-loading-indicator\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n</ng-template>", styles: ["ng0-list:not(.ng0-list-unstyled){display:block;position:relative;-webkit-user-select:none;user-select:none;border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}ng0-list:not(.ng0-list-unstyled):focus,ng0-list:not(.ng0-list-unstyled):focus-visible{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}ng0-list:not(.ng0-list-unstyled)[disabled],ng0-list:not(.ng0-list-unstyled).disabled{opacity:.5;pointer-events:none}ng0-list:not(.ng0-list-unstyled) .ng0-list-loading-cover{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffffb3;display:flex;align-items:center;justify-content:center}ng0-list:not(.ng0-list-unstyled) ng0-list-item{display:flex}ng0-list:not(.ng0-list-unstyled) ng0-list-item .ng0-selection-indicator{margin-inline-end:.5rem}ng0-list:not(.ng0-list-unstyled) ng0-list-item:focus,ng0-list:not(.ng0-list-unstyled) ng0-list-item:focus-visible{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}ng0-list:not(.ng0-list-unstyled) ng0-list-item{padding:.5rem}ng0-list:not(.ng0-list-unstyled) ng0-list-item.selected{background-color:var(--bs-primary);color:var(--bs-light)}ng0-list:not(.ng0-list-unstyled) ng0-list-item.active:not(.selected){background-color:color-mix(in srgb,var(--bs-primary),white 85%)}ng0-list:not(.ng0-list-unstyled) ng0-list-item:hover:not(.selected):not(.disabled):not(.active){background-color:color-mix(in srgb,var(--bs-primary),white 95%)}ng0-list:not(.ng0-list-unstyled) ng0-list-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}ng0-list:not(.ng0-list-unstyled) ng0-list-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IfDirective, selector: "[ng0If]", inputs: ["ng0If"], exportAs: ["ng0If"] }, { kind: "directive", type: ListItem, selector: "ng0-list-item", inputs: ["value", "id"], exportAs: ["ng0ListItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
505
506
  }
506
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ListComponent, decorators: [{
507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ListComponent, decorators: [{
507
508
  type: Component,
508
509
  args: [{ selector: 'ng0-list, ng0-select-list', exportAs: 'ng0List', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
509
510
  CommonModule,
@@ -519,16 +520,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
519
520
  '[attr.disabled]': '_isDisabled() ? "" : undefined',
520
521
  '[attr.aria-disabled]': '_isDisabled() ? "" : undefined',
521
522
  '[attr.tabindex]': '_hostTabIndex()',
522
- }, template: "@let filter = filterBy();\r\n@let formatter = formatBy();\r\n\r\n@for (item of _sourceItems(); track trackBy()($index, item)) {\r\n\r\n<ng0-list-item #listItem=\"ng0ListItem\"\r\n *ng0If=\"!filter || filter(item)\"\r\n [value]=\"item\"\r\n [id]=\"idGenerator()?.(item)\"\r\n [class.active]=\"isActive(listItem)\"\r\n [class.selected]=\"isSelected(item)\"\r\n [ngClass]=\"itemClass()?.(item)\"\r\n (click)=\"_handleUserSelection(listItem, $index);\">\r\n\r\n @if(itemTemplate() || _itemTemplate) {\r\n @let template = itemTemplate() || _itemTemplate;\r\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: {item: listItem, value: item}}\" />\r\n } @else {\r\n @if(showSelectionIndicator()) {\r\n <input class=\"form-check-input ng0-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"isSelected(item)\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\">\r\n }\r\n\r\n {{formatter(item)}}\r\n }\r\n</ng0-list-item>\r\n}\r\n\r\n@if(_showLoadingSppiner()) {\r\n@if(_sourceItems().length == 0) {\r\n<div style=\"text-align: center; padding: 0.5rem 0;\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}@else {\r\n<div class=\"ng0-list-loading-cover\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}\r\n}\r\n\r\n<ng-template #spinner>\r\n <div class=\"spinner-border spinner-sm text-primary ng0-list-loading-indicator\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n</ng-template>", styles: ["ng0-list:not(.ng0-list-unstyled){display:block;position:relative;-webkit-user-select:none;user-select:none;border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}ng0-list:not(.ng0-list-unstyled):focus,ng0-list:not(.ng0-list-unstyled):focus-visible{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}ng0-list:not(.ng0-list-unstyled)[disabled],ng0-list:not(.ng0-list-unstyled).disabled{opacity:.5;pointer-events:none}ng0-list:not(.ng0-list-unstyled) .ng0-list-loading-cover{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffffb3;display:flex;align-items:center;justify-content:center}ng0-list:not(.ng0-list-unstyled) ng0-list-item{display:flex;padding:.5rem}ng0-list:not(.ng0-list-unstyled) ng0-list-item .ng0-selection-indicator{margin-inline-end:.5rem}ng0-list:not(.ng0-list-unstyled) ng0-list-item:focus,ng0-list:not(.ng0-list-unstyled) ng0-list-item:focus-visible{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}ng0-list:not(.ng0-list-unstyled) ng0-list-item.selected{background-color:var(--bs-primary);color:var(--bs-light)}ng0-list:not(.ng0-list-unstyled) ng0-list-item.active:not(.selected){background-color:color-mix(in srgb,var(--bs-primary),white 85%)}ng0-list:not(.ng0-list-unstyled) ng0-list-item:hover:not(.selected):not(.disabled):not(.active){background-color:color-mix(in srgb,var(--bs-primary),white 95%)}ng0-list:not(.ng0-list-unstyled) ng0-list-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}ng0-list:not(.ng0-list-unstyled) ng0-list-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}\n"] }]
523
+ }, template: "@let filter = filterBy();\r\n@let formatter = formatBy();\r\n\r\n@for (item of _sourceItems(); track trackBy()($index, item)) {\r\n\r\n<ng0-list-item #listItem=\"ng0ListItem\"\r\n *ng0If=\"!filter || filter(item)\"\r\n [value]=\"item\"\r\n [id]=\"idGenerator()?.(item)\"\r\n [class.active]=\"isActive(listItem)\"\r\n [class.selected]=\"isSelected(item)\"\r\n [ngClass]=\"itemClass()?.(item)\"\r\n (click)=\"_handleUserSelection(listItem, $index);\">\r\n\r\n @if(itemTemplate() || _itemTemplate) {\r\n @let template = itemTemplate() || _itemTemplate;\r\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: {item: listItem, value: item}}\" />\r\n } @else {\r\n @if(showSelectionIndicator()) {\r\n <input class=\"form-check-input ng0-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"isSelected(item)\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\">\r\n }\r\n\r\n {{formatter(item)}}\r\n }\r\n</ng0-list-item>\r\n}\r\n\r\n@if(_showLoadingSppiner()) {\r\n@if(_sourceItems().length == 0) {\r\n<div style=\"text-align: center; padding: 0.5rem 0;\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}@else {\r\n<div class=\"ng0-list-loading-cover\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}\r\n}\r\n\r\n<ng-template #spinner>\r\n <div class=\"spinner-border spinner-sm text-primary ng0-list-loading-indicator\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n</ng-template>", styles: ["ng0-list:not(.ng0-list-unstyled){display:block;position:relative;-webkit-user-select:none;user-select:none;border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}ng0-list:not(.ng0-list-unstyled):focus,ng0-list:not(.ng0-list-unstyled):focus-visible{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}ng0-list:not(.ng0-list-unstyled)[disabled],ng0-list:not(.ng0-list-unstyled).disabled{opacity:.5;pointer-events:none}ng0-list:not(.ng0-list-unstyled) .ng0-list-loading-cover{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffffb3;display:flex;align-items:center;justify-content:center}ng0-list:not(.ng0-list-unstyled) ng0-list-item{display:flex}ng0-list:not(.ng0-list-unstyled) ng0-list-item .ng0-selection-indicator{margin-inline-end:.5rem}ng0-list:not(.ng0-list-unstyled) ng0-list-item:focus,ng0-list:not(.ng0-list-unstyled) ng0-list-item:focus-visible{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}ng0-list:not(.ng0-list-unstyled) ng0-list-item{padding:.5rem}ng0-list:not(.ng0-list-unstyled) ng0-list-item.selected{background-color:var(--bs-primary);color:var(--bs-light)}ng0-list:not(.ng0-list-unstyled) ng0-list-item.active:not(.selected){background-color:color-mix(in srgb,var(--bs-primary),white 85%)}ng0-list:not(.ng0-list-unstyled) ng0-list-item:hover:not(.selected):not(.disabled):not(.active){background-color:color-mix(in srgb,var(--bs-primary),white 95%)}ng0-list:not(.ng0-list-unstyled) ng0-list-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}ng0-list:not(.ng0-list-unstyled) ng0-list-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}\n"] }]
523
524
  }], ctorParameters: () => [], propDecorators: { _itemTemplate: [{
524
525
  type: ContentChild,
525
526
  args: [TemplateRef]
526
527
  }], listItems: [{
527
528
  type: ViewChildren,
528
529
  args: [ListItem]
529
- }], itemSelect: [{
530
+ }], source: [{ type: i0.Input, args: [{ isSignal: true, alias: "source", required: true }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], showSelectionIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSelectionIndicator", required: false }] }], compareBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareBy", required: false }] }], formatBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatBy", required: false }] }], writeBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "writeBy", required: false }] }], filterBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterBy", required: false }] }], trackBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackBy", required: false }] }], itemClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemClass", required: false }] }], focusMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusMode", required: false }] }], idGenerator: [{ type: i0.Input, args: [{ isSignal: true, alias: "idGenerator", required: false }] }], itemSelect: [{
530
531
  type: Output
531
- }], _onHostBlur: [{
532
+ }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], _onHostBlur: [{
532
533
  type: HostListener,
533
534
  args: ['blur']
534
535
  }], _onKeydown: [{
@@ -541,11 +542,11 @@ const Items = [ListComponent];
541
542
  * List module.
542
543
  */
543
544
  class ListModule {
544
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
545
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.1", ngImport: i0, type: ListModule, imports: [ListComponent], exports: [ListComponent] });
546
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ListModule, imports: [Items] });
545
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
546
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: ListModule, imports: [ListComponent], exports: [ListComponent] });
547
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ListModule, imports: [Items] });
547
548
  }
548
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ListModule, decorators: [{
549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ListModule, decorators: [{
549
550
  type: NgModule,
550
551
  args: [{
551
552
  imports: Items,
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-components-list.mjs","sources":["../../../projects/ng0/components/list/list-item.ts","../../../projects/ng0/components/list/list.component.ts","../../../projects/ng0/components/list/list.component.html","../../../projects/ng0/components/list/list.module.ts","../../../projects/ng0/components/list/public-api.ts","../../../projects/ng0/components/list/bootkit-ng0-components-list.ts"],"sourcesContent":["import { inject, input, ElementRef, Directive } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\n/**\r\n * ListItem represents an individual item within a ListComponent.\r\n */\r\n@Directive({\r\n selector: 'ng0-list-item',\r\n exportAs: 'ng0ListItem',\r\n standalone: true,\r\n host: {\r\n '[attr.id]': 'id()',\r\n '[attr.tabIndex]': '_getTabIndex()'\r\n }\r\n})\r\nexport class ListItem {\r\n /**\r\n * The value associated with the item. This can be of any type.\r\n */\r\n public readonly value = input<any>();\r\n\r\n /**\r\n * The id of the item.\r\n */\r\n public readonly id = input<any>();\r\n\r\n /**\r\n * Reference to the parent list component\r\n */\r\n public readonly list = inject(ListComponent);\r\n\r\n /**\r\n * Reference to the host element\r\n */\r\n public readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Indicates whether the item is active.\r\n * @returns True if the item is active, false otherwise.\r\n */\r\n public isActive() {\r\n return this.list.isActive(this);\r\n }\r\n\r\n /**\r\n * Indicates whether the item is selected.\r\n * @returns True if the item is selected, false otherwise.\r\n */\r\n public isSelected() {\r\n return this.list.isSelected(this.value());\r\n }\r\n\r\n /**\r\n * Selects the item.\r\n * @returns \r\n */\r\n public select() {\r\n return this.list.select(this.value());\r\n }\r\n\r\n /**\r\n * Deselects the item.\r\n * @returns \r\n */\r\n public deselect() {\r\n this.list.deselect(this);\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the item.\r\n * @returns void\r\n */\r\n public toggle() {\r\n this.list.toggle(this.value());\r\n }\r\n\r\n // /**\r\n // * Indicates whether the item is disabled. Default is false.\r\n // */\r\n // public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Scrolls the item into view within its parent container.\r\n * @param position The vertical alignment of the item after scrolling.\r\n * Can be 'start', 'center', 'end', or 'nearest'.\r\n * Default is 'nearest'.\r\n * @param behavior The scrolling behavior.\r\n */\r\n public scrollIntoView(position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {\r\n this.elementRef.nativeElement.scrollIntoView({ block: position, behavior: behavior });\r\n }\r\n\r\n /**\r\n * Sets focus on the item.\r\n */\r\n public focus() {\r\n this.elementRef.nativeElement.focus();\r\n }\r\n\r\n private _getTabIndex() {\r\n let focus = this.list.focusMode();\r\n // if (this.list.isDisabled()) {\r\n // return undefined;\r\n // }\r\n\r\n if (focus == 'none' || focus == 'activeDescendant') {\r\n return undefined;\r\n } else {\r\n // focus: roving\r\n return this.isActive() ? 0 : -1\r\n }\r\n }\r\n}\r\n","import { Component, ElementRef, input, signal, HostListener, inject, forwardRef, TemplateRef, ContentChild, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect, EventEmitter, Output, computed, ViewChildren, QueryList, ViewEncapsulation, ViewContainerRef, HostBinding, OnInit, AfterViewInit, untracked, model, Renderer2 } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataRequest, DataSource, DataSourceLike } from '@bootkit/ng0/data';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { objectFormatterAttribute, defaultFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListItem } from \"./list-item\";\r\nimport {\r\n CssClassAttribute, defaultEqualityComparer, equalityComparerAttribute, valueWriterAttribute,\r\n defaultValueWriter, filterPredicateAttribute, noopFilter, IdGeneratorAttribute, TrackByAttribute, trackByIndex, IfDirective\r\n} from '@bootkit/ng0/common';\r\n\r\n/** \r\n * ListComponent is a versatile component that displays a list of items with support for single or multiple selection,\r\n * custom item templates, filtering, and keyboard navigation.\r\n */\r\n@Component({\r\n selector: 'ng0-list, ng0-select-list',\r\n exportAs: 'ng0List',\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n CommonModule,\r\n IfDirective,\r\n ListItem\r\n ],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ListComponent),\r\n multi: true\r\n }],\r\n host: {\r\n '[class.ng0-list-loading]': 'source().isLoading()',\r\n '[attr.aria-activedescendant]': '_hostAriaActiveDescendant()',\r\n '[attr.disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.aria-disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.tabindex]': '_hostTabIndex()',\r\n }\r\n})\r\nexport class ListComponent implements ControlValueAccessor {\r\n private _localizationService = inject(LocalizationService);\r\n private _changeDetector = inject(ChangeDetectorRef);\r\n private _changeCallback?: (value: any) => void;\r\n private _touchCallback?: () => void;\r\n private readonly _selectedItems = new Set<any>();\r\n\r\n protected readonly _sourceItems = signal<any[]>([]);\r\n @ContentChild(TemplateRef) protected _itemTemplate?: TemplateRef<any>;\r\n protected readonly _activeItem = signal<ListItem | undefined>(undefined);\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n private readonly _value = signal<any>(undefined);\r\n private _renderer = inject(Renderer2);\r\n\r\n /**\r\n * A list of all visible list items.\r\n */\r\n @ViewChildren(ListItem) public readonly listItems?: QueryList<ListItem>;\r\n\r\n /**\r\n * Reference to the host element\r\n */\r\n public elementRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n\r\n /**\r\n * The data source for the select component.\r\n * This can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({\r\n transform: v => dataSourceAttribute(v)\r\n });\r\n\r\n /** \r\n * Indicates whether multi selection is enabled or not.\r\n */\r\n public readonly multiple = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether to show selection indicator (checkbox/radio) next to each item.\r\n * Default is false.\r\n */\r\n public readonly showSelectionIndicator = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * A comparer to compare items for selection.\r\n * Default uses strict equality (===).\r\n */\r\n public readonly compareBy = input(defaultEqualityComparer, {\r\n transform: equalityComparerAttribute\r\n });\r\n\r\n /**\r\n * A fromatter to convert each item to a string for display.\r\n * Default converts the item to a string using its toString method.\r\n */\r\n public readonly formatBy = input(defaultFormatter, {\r\n transform: objectFormatterAttribute(this._localizationService.get())\r\n });\r\n\r\n /**\r\n * Custom value writer to extract the value of any object while writing values.\r\n */\r\n public readonly writeBy = input(defaultValueWriter, {\r\n transform: valueWriterAttribute\r\n });\r\n\r\n /**\r\n * Custom filter function to filter items.\r\n * Default is a noop filter that does not filter any items.\r\n */\r\n public readonly filterBy = input(noopFilter, {\r\n transform: filterPredicateAttribute\r\n });\r\n\r\n /**\r\n * A function that uniquely identifies each item in the list.\r\n * If set to a function, it will be called with the index and item as arguments to generate the unique id.\r\n * If set to a string, it will be used as the property name to extract the unique id from each item.\r\n * Two predifined trackBy options are available:\r\n * - '@index': uses the index of the item as its unique id.\r\n * - '@item': uses the item itself as its unique id.\r\n * @example\r\n * trackBy=\"@index\"\r\n * trackBy=\"@item\"\r\n * trackBy=\"objectFieldName\"\r\n * [trackBy]=\"customTrackByFunction\"\r\n * @default trackByIndex\r\n */\r\n public readonly trackBy = input(trackByIndex, {\r\n transform: TrackByAttribute\r\n });\r\n\r\n /**\r\n * CSS class or classes to apply to the list container.\r\n * Default is undefined.\r\n */\r\n public readonly itemClass = input(undefined, {\r\n transform: CssClassAttribute\r\n });\r\n\r\n /**\r\n * Defines the focus behavior of the list component.\r\n * - 'none': No keyboard interaction is possible. The list cannot be focused.\r\n * - 'roving': Roving tabindex is enabled. The list can be focused and the active item is tabbable.\r\n * - 'activeDescendant': The list can be focused, but no item is tabbable. The active item is indicated using aria-activedescendant.\r\n * @default 'activeDescendant'.\r\n */\r\n public readonly focusMode = input<'none' | 'roving' | 'activeDescendant'>('activeDescendant');\r\n\r\n /**\r\n * A function that generates unique ids for each item in the list.\r\n * If set to a function, it will be called with the item as an argument to generate the id.\r\n * If set to undefined, no ids will be generated for the items.\r\n * @default undefined\r\n */\r\n public readonly idGenerator = input(undefined, {\r\n transform: IdGeneratorAttribute\r\n });\r\n\r\n /**\r\n * Event emitted when the selection state of an item changes by user interaction.\r\n */\r\n @Output() public readonly itemSelect = new EventEmitter<ListItemSelectEvent>();\r\n\r\n /**\r\n * The template to use for each item in the list.\r\n */\r\n public readonly itemTemplate = input<TemplateRef<any> | undefined>(undefined);\r\n\r\n constructor() {\r\n effect(() => {\r\n this.source().load(new DataRequest()).subscribe(res => {\r\n untracked(() => {\r\n this._activeItem.set(undefined);\r\n this._sourceItems.set(res.data);\r\n this._updateSelectedItems();\r\n this._activateFirstSelectedItem();\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Indicates whether an item is active.\r\n * @param item \r\n * @returns \r\n */\r\n public isActive(item: ListItem): boolean {\r\n return item === this._activeItem();\r\n }\r\n\r\n /**\r\n * Indicates whether the given value is selected.\r\n * @param item \r\n * @returns \r\n */\r\n public isSelected(value: any): boolean {\r\n return this._selectedItems.has(value);\r\n }\r\n\r\n /**\r\n * Selects the given value.\r\n * @param item \r\n */\r\n public select(value: any): void {\r\n if (this.multiple()) {\r\n if (!this._selectedItems.has(value)) {\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value())\r\n }\r\n } else {\r\n this._selectedItems.clear();\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value())\r\n }\r\n }\r\n\r\n /**\r\n * Deselects the given value.\r\n * @param item \r\n */\r\n public deselect(value: any): void {\r\n this._selectedItems.delete(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the given value.\r\n * @param item\r\n */\r\n public toggle(value: any): void {\r\n if (this.isSelected(value)) {\r\n this.deselect(value);\r\n } else {\r\n this.select(value);\r\n }\r\n }\r\n\r\n /**\r\n * Deselects all items in the list.\r\n */\r\n public deselectAll(): void {\r\n this._selectedItems.clear();\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Selects all items in the list. Only applicable in multiple selection mode.\r\n */\r\n public selectAll(): void {\r\n if (this.multiple()) {\r\n this._selectedItems.clear();\r\n this._sourceItems().forEach(i => this._selectedItems.add(i));\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n } else {\r\n throw new Error('selectAll is only available in multiple selection mode.');\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value(s) of the list.\r\n */\r\n public get value(): ReadonlyArray<any | any[]> {\r\n return this._value();\r\n }\r\n\r\n /**\r\n * Gets the current items in the list.\r\n */\r\n public get items(): ReadonlyArray<any[]> {\r\n return this._sourceItems();\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.multiple()) {\r\n if (value === null || value === undefined) {\r\n value = [];\r\n } else if (!Array.isArray(value)) {\r\n throw Error('invalid value. Expected an array in multiple selection mode.');\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n this._updateSelectedItems();\r\n this._activateFirstSelectedItem();\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._changeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._touchCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n protected _handleUserSelection(item: ListItem, index: number) {\r\n let value = item.value();\r\n\r\n if (this.multiple()) {\r\n this.toggle(value);\r\n } else {\r\n this.select(value);\r\n }\r\n\r\n this._activeItem.set(item);\r\n this.itemSelect.emit({ value: item.value(), item: item, list: this });\r\n this._changeDetector.detectChanges();\r\n }\r\n\r\n protected _showLoadingSppiner = computed(() => {\r\n let source = this.source();\r\n return source.isLoading() && source.type == 'remote';\r\n });\r\n\r\n private _updateSelectedItems(): void {\r\n let value = this._value();\r\n let compareBy = this.compareBy();\r\n let findAndSelect = (v: any) => {\r\n let index = this._sourceItems().findIndex(i => compareBy(i, v));\r\n if (index > -1) {\r\n let item = this._sourceItems().at(index)!;\r\n this._selectedItems.add(item);\r\n }\r\n\r\n return index;\r\n };\r\n\r\n this._selectedItems.clear();\r\n if (this.multiple()) {\r\n if (Array.isArray(value)) {\r\n (value as any[]).forEach(v => findAndSelect(v));\r\n }\r\n } else {\r\n findAndSelect(value);\r\n }\r\n }\r\n\r\n private _activateFirstSelectedItem(): void {\r\n if (this._selectedItems.size > 0) {\r\n let value = this._selectedItems.values().next().value;\r\n let item = this.listItems?.find(i => i.value() === value);\r\n if (item) {\r\n this._activeItem.set(item);\r\n }\r\n }\r\n }\r\n\r\n private _updateValue(): void {\r\n let value: any;\r\n\r\n if (this.multiple()) {\r\n let values: any[] = [];\r\n this._selectedItems.forEach(v => {\r\n values.push(this.writeBy()(v));\r\n });\r\n value = values;\r\n } else {\r\n if (this._selectedItems.size > 0) {\r\n let first = this._selectedItems.values().next().value;\r\n value = this.writeBy()(first);\r\n } else {\r\n value = undefined;\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n }\r\n\r\n private _hostAriaActiveDescendant = computed(() => {\r\n if (this._activeItem() && !this._isDisabled() && this.focusMode() == 'activeDescendant') {\r\n return this._activeItem()!.id();\r\n }\r\n\r\n return undefined;\r\n });\r\n\r\n private _hostTabIndex = computed(() => {\r\n let isDisabled = this._isDisabled(); // track the value\r\n let activeItem = this._activeItem(); // track the value\r\n\r\n if (isDisabled) {\r\n return undefined;\r\n }\r\n\r\n switch (this.focusMode()) {\r\n case 'none':\r\n return undefined;\r\n case 'activeDescendant':\r\n return 0;\r\n case 'roving':\r\n\r\n return activeItem ? undefined : 0;\r\n }\r\n });\r\n\r\n @HostListener('blur')\r\n private _onHostBlur() {\r\n this._touchCallback?.();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n private _onKeydown(e: KeyboardEvent) {\r\n if (this._isDisabled())\r\n return;\r\n\r\n let listLength = this.listItems!.length;\r\n if (listLength == 0) {\r\n return;\r\n }\r\n\r\n let activeItem = this._activeItem();\r\n let activeItemindex = activeItem ? this.listItems!.toArray().findIndex(i => i === activeItem) : -1;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (activeItemindex < listLength - 1) {\r\n const next = this.listItems!.get(activeItemindex + 1);\r\n this._activeItem.set(next);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n if (activeItemindex == -1) {\r\n const last = this.listItems!.get(listLength - 1);\r\n this._activeItem.set(last);\r\n } else if (activeItemindex > 0) {\r\n const previous = this.listItems!.get(activeItemindex - 1);\r\n this._activeItem.set(previous);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'Enter':\r\n if (activeItem) {\r\n this._handleUserSelection(activeItem, activeItemindex);\r\n }\r\n break;\r\n case 'Home':\r\n const first = this.listItems!.get(0);\r\n this._activeItem.set(first);\r\n e.preventDefault();\r\n break;\r\n case 'End':\r\n const last = this.listItems!.get(listLength - 1);\r\n this._activeItem.set(last);\r\n e.preventDefault();\r\n break;\r\n }\r\n\r\n this._activeItem()?.scrollIntoView('nearest', listLength > 100 ? 'instant' : 'smooth');\r\n if (this.focusMode() === 'roving') {\r\n this._activeItem()?.focus();\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Event emitted when the selection state of the list changes by user interaction.\r\n */\r\nexport interface ListItemSelectEvent {\r\n /**\r\n * The value of the item that was selected or deselected.\r\n */\r\n value: any;\r\n\r\n /**\r\n * The item that was selected or deselected.\r\n */\r\n readonly item: ListItem;\r\n\r\n /**\r\n * The list component that emitted the event.\r\n */\r\n readonly list: ListComponent\r\n}\r\n","@let filter = filterBy();\r\n@let formatter = formatBy();\r\n\r\n@for (item of _sourceItems(); track trackBy()($index, item)) {\r\n\r\n<ng0-list-item #listItem=\"ng0ListItem\"\r\n *ng0If=\"!filter || filter(item)\"\r\n [value]=\"item\"\r\n [id]=\"idGenerator()?.(item)\"\r\n [class.active]=\"isActive(listItem)\"\r\n [class.selected]=\"isSelected(item)\"\r\n [ngClass]=\"itemClass()?.(item)\"\r\n (click)=\"_handleUserSelection(listItem, $index);\">\r\n\r\n @if(itemTemplate() || _itemTemplate) {\r\n @let template = itemTemplate() || _itemTemplate;\r\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: {item: listItem, value: item}}\" />\r\n } @else {\r\n @if(showSelectionIndicator()) {\r\n <input class=\"form-check-input ng0-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"isSelected(item)\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\">\r\n }\r\n\r\n {{formatter(item)}}\r\n }\r\n</ng0-list-item>\r\n}\r\n\r\n@if(_showLoadingSppiner()) {\r\n@if(_sourceItems().length == 0) {\r\n<div style=\"text-align: center; padding: 0.5rem 0;\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}@else {\r\n<div class=\"ng0-list-loading-cover\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}\r\n}\r\n\r\n<ng-template #spinner>\r\n <div class=\"spinner-border spinner-sm text-primary ng0-list-loading-indicator\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\nconst Items = [ListComponent]\r\n\r\n/**\r\n * List module.\r\n */\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class ListModule { }\r\n","// export * from './types';\r\nexport * from './list.component';\r\nexport * from './list.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootkit-ng0-components-list.mjs","sources":["../../../projects/ng0/components/list/list-item.ts","../../../projects/ng0/components/list/list.component.ts","../../../projects/ng0/components/list/list.component.html","../../../projects/ng0/components/list/list.module.ts","../../../projects/ng0/components/list/public-api.ts","../../../projects/ng0/components/list/bootkit-ng0-components-list.ts"],"sourcesContent":["import { inject, input, ElementRef, Directive } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\n/**\r\n * ListItem represents an individual item within a ListComponent.\r\n */\r\n@Directive({\r\n selector: 'ng0-list-item',\r\n exportAs: 'ng0ListItem',\r\n standalone: true,\r\n host: {\r\n '[attr.id]': 'id()',\r\n '[attr.tabIndex]': '_getTabIndex()'\r\n }\r\n})\r\nexport class ListItem {\r\n /**\r\n * The value associated with the item. This can be of any type.\r\n */\r\n public readonly value = input<any>();\r\n\r\n /**\r\n * The id of the item.\r\n */\r\n public readonly id = input<any>();\r\n\r\n /**\r\n * Reference to the parent list component\r\n */\r\n public readonly list = inject(ListComponent);\r\n\r\n /**\r\n * Reference to the host element\r\n */\r\n public readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Indicates whether the item is active.\r\n * @returns True if the item is active, false otherwise.\r\n */\r\n public isActive() {\r\n return this.list.isActive(this);\r\n }\r\n\r\n /**\r\n * Indicates whether the item is selected.\r\n * @returns True if the item is selected, false otherwise.\r\n */\r\n public isSelected() {\r\n return this.list.isSelected(this.value());\r\n }\r\n\r\n /**\r\n * Selects the item.\r\n * @returns \r\n */\r\n public select() {\r\n return this.list.select(this.value());\r\n }\r\n\r\n /**\r\n * Deselects the item.\r\n * @returns \r\n */\r\n public deselect() {\r\n this.list.deselect(this);\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the item.\r\n * @returns void\r\n */\r\n public toggle() {\r\n this.list.toggle(this.value());\r\n }\r\n\r\n // /**\r\n // * Indicates whether the item is disabled. Default is false.\r\n // */\r\n // public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Scrolls the item into view within its parent container.\r\n * @param position The vertical alignment of the item after scrolling.\r\n * Can be 'start', 'center', 'end', or 'nearest'.\r\n * Default is 'nearest'.\r\n * @param behavior The scrolling behavior.\r\n */\r\n public scrollIntoView(position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {\r\n this.elementRef.nativeElement.scrollIntoView({ block: position, behavior: behavior });\r\n }\r\n\r\n /**\r\n * Sets focus on the item.\r\n */\r\n public focus() {\r\n this.elementRef.nativeElement.focus();\r\n }\r\n\r\n private _getTabIndex() {\r\n let focus = this.list.focusMode();\r\n // if (this.list.isDisabled()) {\r\n // return undefined;\r\n // }\r\n\r\n if (focus == 'none' || focus == 'activeDescendant') {\r\n return undefined;\r\n } else {\r\n // focus: roving\r\n return this.isActive() ? 0 : -1\r\n }\r\n }\r\n}\r\n","import { Component, ElementRef, input, signal, HostListener, inject, forwardRef, TemplateRef, ContentChild, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect, EventEmitter, Output, computed, ViewChildren, QueryList, ViewEncapsulation, ViewContainerRef, HostBinding, OnInit, AfterViewInit, untracked, model, Renderer2, EnvironmentInjector, runInInjectionContext } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataRequest, DataSource, DataSourceLike } from '@bootkit/ng0/data';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { objectFormatterAttribute, defaultFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListItem } from \"./list-item\";\r\nimport {\r\n CssClassAttribute, defaultEqualityComparer, equalityComparerAttribute, valueWriterAttribute,\r\n defaultValueWriter, filterPredicateAttribute, noopFilter, IdGeneratorAttribute, TrackByAttribute, trackByIndex, IfDirective\r\n} from '@bootkit/ng0/common';\r\n\r\n/** \r\n * ListComponent is a versatile component that displays a list of items with support for single or multiple selection,\r\n * custom item templates, filtering, and keyboard navigation.\r\n */\r\n@Component({\r\n selector: 'ng0-list, ng0-select-list',\r\n exportAs: 'ng0List',\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n CommonModule,\r\n IfDirective,\r\n ListItem\r\n ],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ListComponent),\r\n multi: true\r\n }],\r\n host: {\r\n '[class.ng0-list-loading]': 'source().isLoading()',\r\n '[attr.aria-activedescendant]': '_hostAriaActiveDescendant()',\r\n '[attr.disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.aria-disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.tabindex]': '_hostTabIndex()',\r\n }\r\n})\r\nexport class ListComponent implements ControlValueAccessor {\r\n private _localizationService = inject(LocalizationService);\r\n private _changeDetector = inject(ChangeDetectorRef);\r\n private _injector = inject(EnvironmentInjector);\r\n private _changeCallback?: (value: any) => void;\r\n private _touchCallback?: () => void;\r\n private readonly _selectedItems = new Set<any>();\r\n\r\n protected readonly _sourceItems = signal<any[]>([]);\r\n @ContentChild(TemplateRef) protected _itemTemplate?: TemplateRef<any>;\r\n protected readonly _activeItem = signal<ListItem | undefined>(undefined);\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n private readonly _value = signal<any>(undefined);\r\n private _renderer = inject(Renderer2);\r\n\r\n /**\r\n * A list of all visible list items.\r\n */\r\n @ViewChildren(ListItem) public readonly listItems?: QueryList<ListItem>;\r\n\r\n /**\r\n * Reference to the host element\r\n */\r\n public elementRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n\r\n /**\r\n * The data source for the select component.\r\n * This can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({\r\n transform: v => dataSourceAttribute(v)\r\n });\r\n\r\n /** \r\n * Indicates whether multi selection is enabled or not.\r\n */\r\n public readonly multiple = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether to show selection indicator (checkbox/radio) next to each item.\r\n * Default is false.\r\n */\r\n public readonly showSelectionIndicator = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * A comparer to compare items for selection.\r\n * Default uses strict equality (===).\r\n */\r\n public readonly compareBy = input(defaultEqualityComparer, {\r\n transform: equalityComparerAttribute\r\n });\r\n\r\n /**\r\n * A fromatter to convert each item to a string for display.\r\n * Default converts the item to a string using its toString method.\r\n */\r\n public readonly formatBy = input(defaultFormatter, {\r\n transform: objectFormatterAttribute(this._injector)\r\n });\r\n\r\n /**\r\n * Custom value writer to extract the value of any object while writing values.\r\n */\r\n public readonly writeBy = input(defaultValueWriter, {\r\n transform: valueWriterAttribute\r\n });\r\n\r\n /**\r\n * Custom filter function to filter items.\r\n * Default is a noop filter that does not filter any items.\r\n */\r\n public readonly filterBy = input(noopFilter, {\r\n transform: filterPredicateAttribute\r\n });\r\n\r\n /**\r\n * A function that uniquely identifies each item in the list.\r\n * If set to a function, it will be called with the index and item as arguments to generate the unique id.\r\n * If set to a string, it will be used as the property name to extract the unique id from each item.\r\n * Two predifined trackBy options are available:\r\n * - '@index': uses the index of the item as its unique id.\r\n * - '@item': uses the item itself as its unique id.\r\n * @example\r\n * trackBy=\"@index\"\r\n * trackBy=\"@item\"\r\n * trackBy=\"objectFieldName\"\r\n * [trackBy]=\"customTrackByFunction\"\r\n * @default trackByIndex\r\n */\r\n public readonly trackBy = input(trackByIndex, {\r\n transform: TrackByAttribute\r\n });\r\n\r\n /**\r\n * CSS class or classes to apply to the list container.\r\n * Default is undefined.\r\n */\r\n public readonly itemClass = input(undefined, {\r\n transform: CssClassAttribute\r\n });\r\n\r\n /**\r\n * Defines the focus behavior of the list component.\r\n * - 'none': No keyboard interaction is possible. The list cannot be focused.\r\n * - 'roving': Roving tabindex is enabled. The list can be focused and the active item is tabbable.\r\n * - 'activeDescendant': The list can be focused, but no item is tabbable. The active item is indicated using aria-activedescendant.\r\n * @default 'activeDescendant'.\r\n */\r\n public readonly focusMode = input<'none' | 'roving' | 'activeDescendant'>('activeDescendant');\r\n\r\n /**\r\n * A function that generates unique ids for each item in the list.\r\n * If set to a function, it will be called with the item as an argument to generate the id.\r\n * If set to undefined, no ids will be generated for the items.\r\n * @default undefined\r\n */\r\n public readonly idGenerator = input(undefined, {\r\n transform: IdGeneratorAttribute\r\n });\r\n\r\n /**\r\n * Event emitted when the selection state of an item changes by user interaction.\r\n */\r\n @Output() public readonly itemSelect = new EventEmitter<ListItemSelectEvent>();\r\n\r\n /**\r\n * The template to use for each item in the list.\r\n */\r\n public readonly itemTemplate = input<TemplateRef<any> | undefined>(undefined);\r\n\r\n constructor() {\r\n effect(() => {\r\n this.source().load(new DataRequest()).subscribe(res => {\r\n untracked(() => {\r\n this._activeItem.set(undefined);\r\n this._sourceItems.set(res.data);\r\n this._updateSelectedItems();\r\n this._activateFirstSelectedItem();\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Indicates whether an item is active.\r\n * @param item \r\n * @returns \r\n */\r\n public isActive(item: ListItem): boolean {\r\n return item === this._activeItem();\r\n }\r\n\r\n /**\r\n * Indicates whether the given value is selected.\r\n * @param item \r\n * @returns \r\n */\r\n public isSelected(value: any): boolean {\r\n return this._selectedItems.has(value);\r\n }\r\n\r\n /**\r\n * Selects the given value.\r\n * @param item \r\n */\r\n public select(value: any): void {\r\n if (this.multiple()) {\r\n if (!this._selectedItems.has(value)) {\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value())\r\n }\r\n } else {\r\n this._selectedItems.clear();\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value())\r\n }\r\n }\r\n\r\n /**\r\n * Deselects the given value.\r\n * @param item \r\n */\r\n public deselect(value: any): void {\r\n this._selectedItems.delete(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the given value.\r\n * @param item\r\n */\r\n public toggle(value: any): void {\r\n if (this.isSelected(value)) {\r\n this.deselect(value);\r\n } else {\r\n this.select(value);\r\n }\r\n }\r\n\r\n /**\r\n * Deselects all items in the list.\r\n */\r\n public deselectAll(): void {\r\n this._selectedItems.clear();\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Selects all items in the list. Only applicable in multiple selection mode.\r\n */\r\n public selectAll(): void {\r\n if (this.multiple()) {\r\n this._selectedItems.clear();\r\n this._sourceItems().forEach(i => this._selectedItems.add(i));\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n } else {\r\n throw new Error('selectAll is only available in multiple selection mode.');\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value(s) of the list.\r\n */\r\n public get value(): ReadonlyArray<any | any[]> {\r\n return this._value();\r\n }\r\n\r\n /**\r\n * Gets the current items in the list.\r\n */\r\n public get items(): ReadonlyArray<any[]> {\r\n return this._sourceItems();\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.multiple()) {\r\n if (value === null || value === undefined) {\r\n value = [];\r\n } else if (!Array.isArray(value)) {\r\n throw Error('invalid value. Expected an array in multiple selection mode.');\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n this._updateSelectedItems();\r\n this._activateFirstSelectedItem();\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._changeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._touchCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n protected _handleUserSelection(item: ListItem, index: number) {\r\n let value = item.value();\r\n\r\n if (this.multiple()) {\r\n this.toggle(value);\r\n } else {\r\n this.select(value);\r\n }\r\n\r\n this._activeItem.set(item);\r\n this.itemSelect.emit({ value: item.value(), item: item, list: this });\r\n this._changeDetector.detectChanges();\r\n }\r\n\r\n protected _showLoadingSppiner = computed(() => {\r\n let source = this.source();\r\n return source.isLoading() && source.type == 'remote';\r\n });\r\n\r\n private _updateSelectedItems(): void {\r\n let value = this._value();\r\n let compareBy = this.compareBy();\r\n let findAndSelect = (v: any) => {\r\n let index = this._sourceItems().findIndex(i => compareBy(i, v));\r\n if (index > -1) {\r\n let item = this._sourceItems().at(index)!;\r\n this._selectedItems.add(item);\r\n }\r\n\r\n return index;\r\n };\r\n\r\n this._selectedItems.clear();\r\n if (this.multiple()) {\r\n if (Array.isArray(value)) {\r\n (value as any[]).forEach(v => findAndSelect(v));\r\n }\r\n } else {\r\n findAndSelect(value);\r\n }\r\n }\r\n\r\n private _activateFirstSelectedItem(): void {\r\n if (this._selectedItems.size > 0) {\r\n let value = this._selectedItems.values().next().value;\r\n let item = this.listItems?.find(i => i.value() === value);\r\n if (item) {\r\n this._activeItem.set(item);\r\n }\r\n }\r\n }\r\n\r\n private _updateValue(): void {\r\n let value: any;\r\n\r\n if (this.multiple()) {\r\n let values: any[] = [];\r\n this._selectedItems.forEach(v => {\r\n values.push(this.writeBy()(v));\r\n });\r\n value = values;\r\n } else {\r\n if (this._selectedItems.size > 0) {\r\n let first = this._selectedItems.values().next().value;\r\n value = this.writeBy()(first);\r\n } else {\r\n value = undefined;\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n }\r\n\r\n private _hostAriaActiveDescendant = computed(() => {\r\n if (this._activeItem() && !this._isDisabled() && this.focusMode() == 'activeDescendant') {\r\n return this._activeItem()!.id();\r\n }\r\n\r\n return undefined;\r\n });\r\n\r\n private _hostTabIndex = computed(() => {\r\n let isDisabled = this._isDisabled(); // track the value\r\n let activeItem = this._activeItem(); // track the value\r\n\r\n if (isDisabled) {\r\n return undefined;\r\n }\r\n\r\n switch (this.focusMode()) {\r\n case 'none':\r\n return undefined;\r\n case 'activeDescendant':\r\n return 0;\r\n case 'roving':\r\n\r\n return activeItem ? undefined : 0;\r\n }\r\n });\r\n\r\n @HostListener('blur')\r\n private _onHostBlur() {\r\n this._touchCallback?.();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n private _onKeydown(e: KeyboardEvent) {\r\n if (this._isDisabled())\r\n return;\r\n\r\n let listLength = this.listItems!.length;\r\n if (listLength == 0) {\r\n return;\r\n }\r\n\r\n let activeItem = this._activeItem();\r\n let activeItemindex = activeItem ? this.listItems!.toArray().findIndex(i => i === activeItem) : -1;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (activeItemindex < listLength - 1) {\r\n const next = this.listItems!.get(activeItemindex + 1);\r\n this._activeItem.set(next);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n if (activeItemindex == -1) {\r\n const last = this.listItems!.get(listLength - 1);\r\n this._activeItem.set(last);\r\n } else if (activeItemindex > 0) {\r\n const previous = this.listItems!.get(activeItemindex - 1);\r\n this._activeItem.set(previous);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'Enter':\r\n if (activeItem) {\r\n this._handleUserSelection(activeItem, activeItemindex);\r\n }\r\n break;\r\n case 'Home':\r\n const first = this.listItems!.get(0);\r\n this._activeItem.set(first);\r\n e.preventDefault();\r\n break;\r\n case 'End':\r\n const last = this.listItems!.get(listLength - 1);\r\n this._activeItem.set(last);\r\n e.preventDefault();\r\n break;\r\n }\r\n\r\n this._activeItem()?.scrollIntoView('nearest', listLength > 100 ? 'instant' : 'smooth');\r\n if (this.focusMode() === 'roving') {\r\n this._activeItem()?.focus();\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Event emitted when the selection state of the list changes by user interaction.\r\n */\r\nexport interface ListItemSelectEvent {\r\n /**\r\n * The value of the item that was selected or deselected.\r\n */\r\n value: any;\r\n\r\n /**\r\n * The item that was selected or deselected.\r\n */\r\n readonly item: ListItem;\r\n\r\n /**\r\n * The list component that emitted the event.\r\n */\r\n readonly list: ListComponent\r\n}\r\n","@let filter = filterBy();\r\n@let formatter = formatBy();\r\n\r\n@for (item of _sourceItems(); track trackBy()($index, item)) {\r\n\r\n<ng0-list-item #listItem=\"ng0ListItem\"\r\n *ng0If=\"!filter || filter(item)\"\r\n [value]=\"item\"\r\n [id]=\"idGenerator()?.(item)\"\r\n [class.active]=\"isActive(listItem)\"\r\n [class.selected]=\"isSelected(item)\"\r\n [ngClass]=\"itemClass()?.(item)\"\r\n (click)=\"_handleUserSelection(listItem, $index);\">\r\n\r\n @if(itemTemplate() || _itemTemplate) {\r\n @let template = itemTemplate() || _itemTemplate;\r\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: {item: listItem, value: item}}\" />\r\n } @else {\r\n @if(showSelectionIndicator()) {\r\n <input class=\"form-check-input ng0-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"isSelected(item)\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\">\r\n }\r\n\r\n {{formatter(item)}}\r\n }\r\n</ng0-list-item>\r\n}\r\n\r\n@if(_showLoadingSppiner()) {\r\n@if(_sourceItems().length == 0) {\r\n<div style=\"text-align: center; padding: 0.5rem 0;\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}@else {\r\n<div class=\"ng0-list-loading-cover\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}\r\n}\r\n\r\n<ng-template #spinner>\r\n <div class=\"spinner-border spinner-sm text-primary ng0-list-loading-indicator\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\nconst Items = [ListComponent]\r\n\r\n/**\r\n * List module.\r\n */\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class ListModule { }\r\n","// export * from './types';\r\nexport * from './list.component';\r\nexport * from './list.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;AAGA;;AAEG;MAUU,QAAQ,CAAA;AACjB;;AAEG;IACa,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;AAEpC;;AAEG;IACa,EAAE,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;AAEjC;;AAEG;AACa,IAAA,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;AAE5C;;AAEG;AACa,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AAExE;;;AAGG;IACI,QAAQ,GAAA;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC;AAEA;;;AAGG;IACI,UAAU,GAAA;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7C;AAEA;;;AAGG;IACI,MAAM,GAAA;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACzC;AAEA;;;AAGG;IACI,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B;AAEA;;;AAGG;IACI,MAAM,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAClC;;;;;AAOA;;;;;;AAMG;IACI,cAAc,CAAC,QAAgC,EAAE,QAAyB,EAAA;AAC7E,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACzF;AAEA;;AAEG;IACI,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;IACzC;IAEQ,YAAY,GAAA;QAChB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;;;QAKjC,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,kBAAkB,EAAE;AAChD,YAAA,OAAO,SAAS;QACpB;aAAO;;AAEH,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC;IACJ;uGAhGS,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBATpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACF,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,iBAAiB,EAAE;AACtB;AACJ,iBAAA;;;ACHD;;;AAGG;MA2BU,aAAa,CAAA;AACd,IAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAClD,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,IAAA,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACvC,IAAA,eAAe;AACf,IAAA,cAAc;AACL,IAAA,cAAc,GAAG,IAAI,GAAG,EAAO;AAE7B,IAAA,YAAY,GAAG,MAAM,CAAQ,EAAE,wDAAC;AACd,IAAA,aAAa;AAC/B,IAAA,WAAW,GAAG,MAAM,CAAuB,SAAS,uDAAC;AACrD,IAAA,WAAW,GAAG,MAAM,CAAU,KAAK,uDAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAM,SAAS,kDAAC;AACxC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAErC;;AAEG;AACqC,IAAA,SAAS;AAEjD;;AAEG;AACI,IAAA,UAAU,GAAG,MAAM,EAA0B,UAAuB,EAAC;AAE5E;;;;AAIG;AACa,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,yCACnC,SAAS,EAAE,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAA,CAAA,GAAA,CADoC;YAC1E,SAAS,EAAE,CAAC,IAAI,mBAAmB,CAAC,CAAC;AACxC,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;IACa,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAClC,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADS;AACpC,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;IACa,sBAAsB,GAAG,KAAK,CAAC,KAAK,0DAChD,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADuB;AAClD,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;AAGE;IACc,SAAS,GAAG,KAAK,CAAC,uBAAuB,6CACrD,SAAS,EAAE,yBAAyB,EAAA,CAAA,GAAA,CADmB;AACvD,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,gBAAgB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAC7C,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAA,CAAA,GAAA,CADJ;AAC/C,YAAA,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,SAAS;AACrD,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;IACa,OAAO,GAAG,KAAK,CAAC,kBAAkB,2CAC9C,SAAS,EAAE,oBAAoB,EAAA,CAAA,GAAA,CADiB;AAChD,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;IACa,QAAQ,GAAG,KAAK,CAAC,UAAU,4CACvC,SAAS,EAAE,wBAAwB,EAAA,CAAA,GAAA,CADM;AACzC,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;;;;;;;;;;;AAaG;IACa,OAAO,GAAG,KAAK,CAAC,YAAY,2CACxC,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADe;AAC1C,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;IACa,SAAS,GAAG,KAAK,CAAC,SAAS,6CACvC,SAAS,EAAE,iBAAiB,EAAA,CAAA,GAAA,CADa;AACzC,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;;;;AAMG;AACa,IAAA,SAAS,GAAG,KAAK,CAAyC,kBAAkB,qDAAC;AAE7F;;;;;AAKG;IACa,WAAW,GAAG,KAAK,CAAC,SAAS,+CACzC,SAAS,EAAE,oBAAoB,EAAA,CAAA,GAAA,CADY;AAC3C,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;AACuB,IAAA,UAAU,GAAG,IAAI,YAAY,EAAuB;AAE9E;;AAEG;AACa,IAAA,YAAY,GAAG,KAAK,CAA+B,SAAS,wDAAC;AAE7E,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAG;gBAClD,SAAS,CAAC,MAAK;AACX,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;oBAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC/B,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,IAAI,CAAC,0BAA0B,EAAE;AACrC,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACI,IAAA,QAAQ,CAAC,IAAc,EAAA;AAC1B,QAAA,OAAO,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;IACtC;AAEA;;;;AAIG;AACI,IAAA,UAAU,CAAC,KAAU,EAAA;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IACzC;AAEA;;;AAGG;AACI,IAAA,MAAM,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACzC;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzC;IACJ;AAEA;;;AAGG;AACI,IAAA,QAAQ,CAAC,KAAU,EAAA;AACtB,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC;AAEA;;;AAGG;AACI,IAAA,MAAM,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxB;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACtB;IACJ;AAEA;;AAEG;IACI,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC3B,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC;AAEA;;AAEG;IACI,SAAS,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzC;aAAO;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;QAC9E;IACJ;AAEA;;AAEG;AACH,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACxB;AAEA;;AAEG;AACH,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvC,KAAK,GAAG,EAAE;YACd;iBAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC9B,gBAAA,MAAM,KAAK,CAAC,8DAA8D,CAAC;YAC/E;QACJ;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,0BAA0B,EAAE;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACvC;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC7B;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;IAEU,oBAAoB,CAAC,IAAc,EAAE,KAAa,EAAA;AACxD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAExB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACtB;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACtB;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;IACxC;AAEU,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC1B,OAAO,MAAM,CAAC,SAAS,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ;AACxD,IAAA,CAAC,+DAAC;IAEM,oBAAoB,GAAA;AACxB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAChC,QAAA,IAAI,aAAa,GAAG,CAAC,CAAM,KAAI;YAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACZ,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,KAAK,CAAE;AACzC,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YACjC;AAEA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,KAAe,CAAC,OAAO,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;YACnD;QACJ;aAAO;YACH,aAAa,CAAC,KAAK,CAAC;QACxB;IACJ;IAEQ,0BAA0B,GAAA;QAC9B,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;AAC9B,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;AACrD,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC;YACzD,IAAI,IAAI,EAAE;AACN,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9B;QACJ;IACJ;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,KAAU;AAEd,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,IAAI,MAAM,GAAU,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;gBAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAClC,YAAA,CAAC,CAAC;YACF,KAAK,GAAG,MAAM;QAClB;aAAO;YACH,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;AAC9B,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;gBACrD,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;YACjC;iBAAO;gBACH,KAAK,GAAG,SAAS;YACrB;QACJ;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;AAEQ,IAAA,yBAAyB,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,kBAAkB,EAAE;AACrF,YAAA,OAAO,IAAI,CAAC,WAAW,EAAG,CAAC,EAAE,EAAE;QACnC;AAEA,QAAA,OAAO,SAAS;AACpB,IAAA,CAAC,qEAAC;AAEM,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QAClC,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,IAAI,UAAU,EAAE;AACZ,YAAA,OAAO,SAAS;QACpB;AAEA,QAAA,QAAQ,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,SAAS;AACpB,YAAA,KAAK,kBAAkB;AACnB,gBAAA,OAAO,CAAC;AACZ,YAAA,KAAK,QAAQ;gBAET,OAAO,UAAU,GAAG,SAAS,GAAG,CAAC;;AAE7C,IAAA,CAAC,yDAAC;IAGM,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,cAAc,IAAI;IAC3B;AAGQ,IAAA,UAAU,CAAC,CAAgB,EAAA;QAC/B,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB;AAEJ,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,SAAU,CAAC,MAAM;AACvC,QAAA,IAAI,UAAU,IAAI,CAAC,EAAE;YACjB;QACJ;AAEA,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;AACnC,QAAA,IAAI,eAAe,GAAG,UAAU,GAAG,IAAI,CAAC,SAAU,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;AAElG,QAAA,QAAQ,CAAC,CAAC,GAAG;AACT,YAAA,KAAK,WAAW;AACZ,gBAAA,IAAI,eAAe,GAAG,UAAU,GAAG,CAAC,EAAE;AAClC,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC;AACrD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC9B;gBACA,CAAC,CAAC,cAAc,EAAE;gBAClB;AACJ,YAAA,KAAK,SAAS;AACV,gBAAA,IAAI,eAAe,IAAI,CAAC,CAAC,EAAE;AACvB,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;AAChD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC9B;AAAO,qBAAA,IAAI,eAAe,GAAG,CAAC,EAAE;AAC5B,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC;AACzD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClC;gBACA,CAAC,CAAC,cAAc,EAAE;gBAClB;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,UAAU,EAAE;AACZ,oBAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,eAAe,CAAC;gBAC1D;gBACA;AACJ,YAAA,KAAK,MAAM;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3B,CAAC,CAAC,cAAc,EAAE;gBAClB;AACJ,YAAA,KAAK,KAAK;AACN,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC1B,CAAC,CAAC,cAAc,EAAE;gBAClB;;QAGR,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,GAAG,GAAG,SAAS,GAAG,QAAQ,CAAC;AACtF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE;QAC/B;IACJ;uGA5aS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,uiEAbX,CAAC;AACR,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE;aACV,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkBY,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EASX,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3D1B,ksDA8Cc,EAAA,MAAA,EAAA,CAAA,01DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtBN,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,WAAW,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,QAAQ,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAeH,aAAa,EAAA,UAAA,EAAA,CAAA;kBA1BzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,QAAA,EAC3B,SAAS,EAAA,UAAA,EAGP,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACL,YAAY;wBACZ,WAAW;wBACX;AACH,qBAAA,EAAA,SAAA,EACU,CAAC;AACR,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE;AACV,yBAAA,CAAC,EAAA,IAAA,EACI;AACF,wBAAA,0BAA0B,EAAE,sBAAsB;AAClD,wBAAA,8BAA8B,EAAE,6BAA6B;AAC7D,wBAAA,iBAAiB,EAAE,gCAAgC;AACnD,wBAAA,sBAAsB,EAAE,gCAAgC;AACxD,wBAAA,iBAAiB,EAAE,iBAAiB;AACvC,qBAAA,EAAA,QAAA,EAAA,ksDAAA,EAAA,MAAA,EAAA,CAAA,01DAAA,CAAA,EAAA;;sBAWA,YAAY;uBAAC,WAAW;;sBASxB,YAAY;uBAAC,QAAQ;;sBA8GrB;;sBAmPA,YAAY;uBAAC,MAAM;;sBAKnB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AE9ZvC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC;AAE7B;;AAEG;MAKU,UAAU,CAAA;uGAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAV,UAAU,EAAA,OAAA,EAAA,CATR,aAAa,CAAA,EAAA,OAAA,EAAA,CAAb,aAAa,CAAA,EAAA,CAAA;AASf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,YAHV,KAAK,CAAA,EAAA,CAAA;;2FAGL,UAAU,EAAA,UAAA,EAAA,CAAA;kBAJtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE;AACZ,iBAAA;;;ACXD;;ACAA;;AAEG;;;;"}
@@ -43,15 +43,15 @@ class ModalComponent {
43
43
  this._modalStatic.set(true);
44
44
  setTimeout(() => this._modalStatic.set(false), 100);
45
45
  }
46
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
47
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.1", type: ModalComponent, isStandalone: true, selector: "ng0-modal", inputs: { scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, centered: { classPropertyName: "centered", publicName: "centered", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fullscreen: { classPropertyName: "fullscreen", publicName: "fullscreen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeRequest: "closeRequest", backdropClick: "backdropClick" }, host: { listeners: { "document:keydown": "_onDocumentKeyDown($event)" } }, exportAs: ["ng0Modal"], ngImport: i0, template: "@let fullscreenValue=fullscreen();\r\n@let sizeValue=size();\r\n\r\n<div class=\"modal d-block\"\r\n (click)=\"$event.target == $event.currentTarget ? _onBackdropClick($event): ''\"\r\n [class.modal-static]=\"_modalStatic()\">\r\n\r\n <div class=\"modal-dialog\"\r\n [class]=\"{\r\n 'modal-dialog-scrollable': scrollable(),\r\n 'modal-dialog-centered': centered(),\r\n 'modal-fullscreen': fullscreenValue == 'always',\r\n 'modal-fullscreen-sm-down': fullscreenValue == 'sm',\r\n 'modal-fullscreen-md-down': fullscreenValue == 'md',\r\n 'modal-fullscreen-lg-down': fullscreenValue == 'lg',\r\n 'modal-fullscreen-xl-down': fullscreenValue == 'xl',\r\n 'modal-fullscreen-xxl-down': fullscreenValue == 'xxl',\r\n 'modal-sm': sizeValue == 'sm',\r\n 'modal-lg': sizeValue == 'lg',\r\n 'modal-xl': sizeValue == 'xl',\r\n }\">\r\n <div class=\"modal-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal-backdrop fade show\"></div>", dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
46
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
47
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.9", type: ModalComponent, isStandalone: true, selector: "ng0-modal", inputs: { scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, centered: { classPropertyName: "centered", publicName: "centered", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fullscreen: { classPropertyName: "fullscreen", publicName: "fullscreen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeRequest: "closeRequest", backdropClick: "backdropClick" }, host: { listeners: { "document:keydown": "_onDocumentKeyDown($event)" } }, exportAs: ["ng0Modal"], ngImport: i0, template: "@let fullscreenValue=fullscreen();\r\n@let sizeValue=size();\r\n\r\n<div class=\"modal d-block\"\r\n (click)=\"$event.target == $event.currentTarget ? _onBackdropClick($event): ''\"\r\n [class.modal-static]=\"_modalStatic()\">\r\n\r\n <div class=\"modal-dialog\"\r\n [class]=\"{\r\n 'modal-dialog-scrollable': scrollable(),\r\n 'modal-dialog-centered': centered(),\r\n 'modal-fullscreen': fullscreenValue == 'always',\r\n 'modal-fullscreen-sm-down': fullscreenValue == 'sm',\r\n 'modal-fullscreen-md-down': fullscreenValue == 'md',\r\n 'modal-fullscreen-lg-down': fullscreenValue == 'lg',\r\n 'modal-fullscreen-xl-down': fullscreenValue == 'xl',\r\n 'modal-fullscreen-xxl-down': fullscreenValue == 'xxl',\r\n 'modal-sm': sizeValue == 'sm',\r\n 'modal-lg': sizeValue == 'lg',\r\n 'modal-xl': sizeValue == 'xl',\r\n }\">\r\n <div class=\"modal-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal-backdrop fade show\"></div>", dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
48
48
  }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ModalComponent, decorators: [{
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ModalComponent, decorators: [{
50
50
  type: Component,
51
51
  args: [{ selector: 'ng0-modal', exportAs: 'ng0Modal', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
52
52
  CommonModule,
53
53
  ], template: "@let fullscreenValue=fullscreen();\r\n@let sizeValue=size();\r\n\r\n<div class=\"modal d-block\"\r\n (click)=\"$event.target == $event.currentTarget ? _onBackdropClick($event): ''\"\r\n [class.modal-static]=\"_modalStatic()\">\r\n\r\n <div class=\"modal-dialog\"\r\n [class]=\"{\r\n 'modal-dialog-scrollable': scrollable(),\r\n 'modal-dialog-centered': centered(),\r\n 'modal-fullscreen': fullscreenValue == 'always',\r\n 'modal-fullscreen-sm-down': fullscreenValue == 'sm',\r\n 'modal-fullscreen-md-down': fullscreenValue == 'md',\r\n 'modal-fullscreen-lg-down': fullscreenValue == 'lg',\r\n 'modal-fullscreen-xl-down': fullscreenValue == 'xl',\r\n 'modal-fullscreen-xxl-down': fullscreenValue == 'xxl',\r\n 'modal-sm': sizeValue == 'sm',\r\n 'modal-lg': sizeValue == 'lg',\r\n 'modal-xl': sizeValue == 'xl',\r\n }\">\r\n <div class=\"modal-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal-backdrop fade show\"></div>" }]
54
- }], ctorParameters: () => [], propDecorators: { closeRequest: [{
54
+ }], ctorParameters: () => [], propDecorators: { scrollable: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollable", required: false }] }], centered: [{ type: i0.Input, args: [{ isSignal: true, alias: "centered", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullscreen: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullscreen", required: false }] }], closeRequest: [{
55
55
  type: Output
56
56
  }], backdropClick: [{
57
57
  type: Output
@@ -61,11 +61,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
61
61
  }] } });
62
62
 
63
63
  class ModalModule {
64
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
65
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.1", ngImport: i0, type: ModalModule, imports: [ModalComponent], exports: [ModalComponent] });
66
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ModalModule, imports: [ModalComponent] });
64
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
65
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: ModalModule, imports: [ModalComponent], exports: [ModalComponent] });
66
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ModalModule, imports: [ModalComponent] });
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ModalModule, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ModalModule, decorators: [{
69
69
  type: NgModule,
70
70
  args: [{
71
71
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-components-modal.mjs","sources":["../../../projects/ng0/components/modal/modal.component.ts","../../../projects/ng0/components/modal/modal.component.html","../../../projects/ng0/components/modal/modal.module.ts","../../../projects/ng0/components/modal/bootkit-ng0-components-modal.ts"],"sourcesContent":["import { Component, Output, EventEmitter, ChangeDetectionStrategy, input, signal, HostListener } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModalCloseRequest } from './types';\r\n\r\n@Component({\r\n selector: 'ng0-modal',\r\n exportAs: 'ng0Modal',\r\n templateUrl: 'modal.component.html',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n ]\r\n})\r\nexport class ModalComponent {\r\n /**\r\n * Is modal scrollable?\r\n */\r\n public scrollable = input<boolean>(false);\r\n\r\n /** Is modal vertically centered? */\r\n public centered = input<boolean>(false);\r\n\r\n /**\r\n * Size of the modal.\r\n */\r\n public size = input<'sm' | 'default' | 'lg' | 'xl'>('default');\r\n\r\n /**\r\n * Is modal fullscreen?\r\n */\r\n public fullscreen = input<'always' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'>();\r\n\r\n /**\r\n * Emitted when user clicks the backdrop or presses the escape key.\r\n */\r\n @Output() public closeRequest = new EventEmitter<ModalCloseRequest>();\r\n\r\n /**\r\n * Emitted when the backdrop is clicked.\r\n */\r\n @Output() public backdropClick = new EventEmitter<Event>();\r\n\r\n protected _modalStatic = signal(false);\r\n\r\n constructor() {\r\n }\r\n\r\n protected _onBackdropClick(event: MouseEvent) {\r\n this.closeRequest.emit({ reason: 'backdrop', event });\r\n this.backdropClick.emit(event);\r\n this._shakeModal(); // if user closes the modal, shake will not occure.\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n private _onDocumentKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.closeRequest.emit({ reason: 'escape', event });\r\n this._shakeModal();\r\n }\r\n }\r\n\r\n private _shakeModal() {\r\n this._modalStatic.set(true);\r\n setTimeout(() => this._modalStatic.set(false), 100);\r\n }\r\n}\r\n","@let fullscreenValue=fullscreen();\r\n@let sizeValue=size();\r\n\r\n<div class=\"modal d-block\"\r\n (click)=\"$event.target == $event.currentTarget ? _onBackdropClick($event): ''\"\r\n [class.modal-static]=\"_modalStatic()\">\r\n\r\n <div class=\"modal-dialog\"\r\n [class]=\"{\r\n 'modal-dialog-scrollable': scrollable(),\r\n 'modal-dialog-centered': centered(),\r\n 'modal-fullscreen': fullscreenValue == 'always',\r\n 'modal-fullscreen-sm-down': fullscreenValue == 'sm',\r\n 'modal-fullscreen-md-down': fullscreenValue == 'md',\r\n 'modal-fullscreen-lg-down': fullscreenValue == 'lg',\r\n 'modal-fullscreen-xl-down': fullscreenValue == 'xl',\r\n 'modal-fullscreen-xxl-down': fullscreenValue == 'xxl',\r\n 'modal-sm': sizeValue == 'sm',\r\n 'modal-lg': sizeValue == 'lg',\r\n 'modal-xl': sizeValue == 'xl',\r\n }\">\r\n <div class=\"modal-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal-backdrop fade show\"></div>","import { NgModule } from '@angular/core';\r\nimport { ModalComponent } from './modal.component';\r\n\r\n@NgModule({\r\n imports: [\r\n ModalComponent,\r\n ],\r\n exports: [\r\n ModalComponent,\r\n ]\r\n})\r\nexport class ModalModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootkit-ng0-components-modal.mjs","sources":["../../../projects/ng0/components/modal/modal.component.ts","../../../projects/ng0/components/modal/modal.component.html","../../../projects/ng0/components/modal/modal.module.ts","../../../projects/ng0/components/modal/bootkit-ng0-components-modal.ts"],"sourcesContent":["import { Component, Output, EventEmitter, ChangeDetectionStrategy, input, signal, HostListener } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModalCloseRequest } from './types';\r\n\r\n@Component({\r\n selector: 'ng0-modal',\r\n exportAs: 'ng0Modal',\r\n templateUrl: 'modal.component.html',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n ]\r\n})\r\nexport class ModalComponent {\r\n /**\r\n * Is modal scrollable?\r\n */\r\n public scrollable = input<boolean>(false);\r\n\r\n /** Is modal vertically centered? */\r\n public centered = input<boolean>(false);\r\n\r\n /**\r\n * Size of the modal.\r\n */\r\n public size = input<'sm' | 'default' | 'lg' | 'xl'>('default');\r\n\r\n /**\r\n * Is modal fullscreen?\r\n */\r\n public fullscreen = input<'always' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'>();\r\n\r\n /**\r\n * Emitted when user clicks the backdrop or presses the escape key.\r\n */\r\n @Output() public closeRequest = new EventEmitter<ModalCloseRequest>();\r\n\r\n /**\r\n * Emitted when the backdrop is clicked.\r\n */\r\n @Output() public backdropClick = new EventEmitter<Event>();\r\n\r\n protected _modalStatic = signal(false);\r\n\r\n constructor() {\r\n }\r\n\r\n protected _onBackdropClick(event: MouseEvent) {\r\n this.closeRequest.emit({ reason: 'backdrop', event });\r\n this.backdropClick.emit(event);\r\n this._shakeModal(); // if user closes the modal, shake will not occure.\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n private _onDocumentKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.closeRequest.emit({ reason: 'escape', event });\r\n this._shakeModal();\r\n }\r\n }\r\n\r\n private _shakeModal() {\r\n this._modalStatic.set(true);\r\n setTimeout(() => this._modalStatic.set(false), 100);\r\n }\r\n}\r\n","@let fullscreenValue=fullscreen();\r\n@let sizeValue=size();\r\n\r\n<div class=\"modal d-block\"\r\n (click)=\"$event.target == $event.currentTarget ? _onBackdropClick($event): ''\"\r\n [class.modal-static]=\"_modalStatic()\">\r\n\r\n <div class=\"modal-dialog\"\r\n [class]=\"{\r\n 'modal-dialog-scrollable': scrollable(),\r\n 'modal-dialog-centered': centered(),\r\n 'modal-fullscreen': fullscreenValue == 'always',\r\n 'modal-fullscreen-sm-down': fullscreenValue == 'sm',\r\n 'modal-fullscreen-md-down': fullscreenValue == 'md',\r\n 'modal-fullscreen-lg-down': fullscreenValue == 'lg',\r\n 'modal-fullscreen-xl-down': fullscreenValue == 'xl',\r\n 'modal-fullscreen-xxl-down': fullscreenValue == 'xxl',\r\n 'modal-sm': sizeValue == 'sm',\r\n 'modal-lg': sizeValue == 'lg',\r\n 'modal-xl': sizeValue == 'xl',\r\n }\">\r\n <div class=\"modal-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal-backdrop fade show\"></div>","import { NgModule } from '@angular/core';\r\nimport { ModalComponent } from './modal.component';\r\n\r\n@NgModule({\r\n imports: [\r\n ModalComponent,\r\n ],\r\n exports: [\r\n ModalComponent,\r\n ]\r\n})\r\nexport class ModalModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAca,cAAc,CAAA;AACvB;;AAEG;AACI,IAAA,UAAU,GAAG,KAAK,CAAU,KAAK,sDAAC;;AAGlC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAEvC;;AAEG;AACI,IAAA,IAAI,GAAG,KAAK,CAAiC,SAAS,gDAAC;AAE9D;;AAEG;IACI,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgD;AAEzE;;AAEG;AACc,IAAA,YAAY,GAAG,IAAI,YAAY,EAAqB;AAErE;;AAEG;AACc,IAAA,aAAa,GAAG,IAAI,YAAY,EAAS;AAEhD,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AAEtC,IAAA,WAAA,GAAA;IACA;AAEU,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB;AAGQ,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AAC3C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACnD,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;IAEQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IACvD;uGAnDS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd3B,mmCA0B4C,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDfpC,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;+BACI,WAAW,EAAA,QAAA,EACX,UAAU,EAAA,UAAA,EAER,IAAI,mBACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,YAAY;AACf,qBAAA,EAAA,QAAA,EAAA,mmCAAA,EAAA;;sBAwBA;;sBAKA;;sBAaA,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;ME3CnC,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAX,WAAW,EAAA,OAAA,EAAA,CANhB,cAAc,CAAA,EAAA,OAAA,EAAA,CAGd,cAAc,CAAA,EAAA,CAAA;AAGT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YANhB,cAAc,CAAA,EAAA,CAAA;;2FAMT,WAAW,EAAA,UAAA,EAAA,CAAA;kBARvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,cAAc;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,cAAc;AACjB;AACJ,iBAAA;;;ACVD;;AAEG;;;;"}