@softpak/components 0.0.0-beta.16 → 0.0.0-beta.160

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 (89) hide show
  1. package/esm2022/spx-alert/spx-alert.component.mjs +5 -2
  2. package/esm2022/spx-button/spx-button.component.mjs +12 -3
  3. package/esm2022/spx-change-details/public-api.mjs +2 -0
  4. package/esm2022/spx-change-details/softpak-components-spx-change-details.mjs +5 -0
  5. package/esm2022/spx-change-details/spx-change-details-value.interface.mjs +2 -0
  6. package/esm2022/spx-change-details/spx-change-details.component.mjs +126 -0
  7. package/esm2022/spx-channel-selection/src/spx-channel-selection.component.mjs +1 -1
  8. package/esm2022/spx-channel-selection/src/spx-company-selection.component.mjs +2 -2
  9. package/esm2022/spx-check-digit/spx-check-digit.component.mjs +12 -4
  10. package/esm2022/spx-form-section/spx-form-section.component.mjs +9 -9
  11. package/esm2022/spx-form-view/public-api.mjs +4 -0
  12. package/esm2022/spx-form-view/softpak-components-spx-form-view.mjs +5 -0
  13. package/esm2022/spx-form-view/spx-autocomplete-search.component.mjs +99 -0
  14. package/esm2022/spx-form-view/spx-form-field.interface.mjs +2 -0
  15. package/esm2022/spx-form-view/spx-form-section.interface.mjs +2 -0
  16. package/esm2022/spx-form-view/spx-form-view.component.mjs +196 -0
  17. package/esm2022/spx-inputs/spx-dropdown.component.mjs +94 -0
  18. package/esm2022/spx-inputs/spx-input-box.component.mjs +74 -47
  19. package/esm2022/spx-inputs/spx-input-date.component.mjs +1 -1
  20. package/esm2022/spx-inputs/spx-input-float.component.mjs +10 -5
  21. package/esm2022/spx-inputs/spx-input-number.component.mjs +10 -5
  22. package/esm2022/spx-inputs/spx-input-radio.component.mjs +93 -27
  23. package/esm2022/spx-inputs/spx-input-text.component.mjs +21 -32
  24. package/esm2022/spx-inputs/spx-input-type.enum.mjs +2 -1
  25. package/esm2022/spx-inputs/spx-input.component.mjs +48 -13
  26. package/esm2022/spx-navigation/spx-home-tile.component.mjs +29 -10
  27. package/esm2022/spx-navigation/spx-navigation-item.interface.mjs +1 -1
  28. package/esm2022/spx-navigation/spx-navigation.component.mjs +11 -5
  29. package/esm2022/spx-number-check/public-api.mjs +2 -0
  30. package/esm2022/spx-number-check/softpak-components-spx-number-check.mjs +5 -0
  31. package/esm2022/spx-number-check/spx-number-check.component.mjs +259 -0
  32. package/esm2022/spx-spinner/spx-spinner.component.mjs +5 -5
  33. package/esm2022/spx-suggestion/spx-suggestion.component.mjs +28 -10
  34. package/esm2022/spx-update/src/spx-update-info.component.mjs +1 -1
  35. package/fesm2022/softpak-components-spx-alert.mjs +4 -1
  36. package/fesm2022/softpak-components-spx-alert.mjs.map +1 -1
  37. package/fesm2022/softpak-components-spx-button.mjs +11 -2
  38. package/fesm2022/softpak-components-spx-button.mjs.map +1 -1
  39. package/fesm2022/softpak-components-spx-change-details.mjs +133 -0
  40. package/fesm2022/softpak-components-spx-change-details.mjs.map +1 -0
  41. package/fesm2022/softpak-components-spx-channel-selection.mjs +2 -2
  42. package/fesm2022/softpak-components-spx-channel-selection.mjs.map +1 -1
  43. package/fesm2022/softpak-components-spx-check-digit.mjs +11 -3
  44. package/fesm2022/softpak-components-spx-check-digit.mjs.map +1 -1
  45. package/fesm2022/softpak-components-spx-form-section.mjs +8 -8
  46. package/fesm2022/softpak-components-spx-form-section.mjs.map +1 -1
  47. package/fesm2022/softpak-components-spx-form-view.mjs +295 -0
  48. package/fesm2022/softpak-components-spx-form-view.mjs.map +1 -0
  49. package/fesm2022/softpak-components-spx-inputs.mjs +335 -119
  50. package/fesm2022/softpak-components-spx-inputs.mjs.map +1 -1
  51. package/fesm2022/softpak-components-spx-navigation.mjs +37 -12
  52. package/fesm2022/softpak-components-spx-navigation.mjs.map +1 -1
  53. package/fesm2022/softpak-components-spx-number-check.mjs +266 -0
  54. package/fesm2022/softpak-components-spx-number-check.mjs.map +1 -0
  55. package/fesm2022/softpak-components-spx-spinner.mjs +4 -4
  56. package/fesm2022/softpak-components-spx-spinner.mjs.map +1 -1
  57. package/fesm2022/softpak-components-spx-suggestion.mjs +27 -9
  58. package/fesm2022/softpak-components-spx-suggestion.mjs.map +1 -1
  59. package/fesm2022/softpak-components-spx-update.mjs +1 -1
  60. package/fesm2022/softpak-components-spx-update.mjs.map +1 -1
  61. package/package.json +34 -16
  62. package/spx-button/spx-button.component.d.ts +3 -1
  63. package/spx-change-details/index.d.ts +5 -0
  64. package/spx-change-details/public-api.d.ts +1 -0
  65. package/spx-change-details/spx-change-details-value.interface.d.ts +7 -0
  66. package/spx-change-details/spx-change-details.component.d.ts +42 -0
  67. package/spx-check-digit/spx-check-digit.component.d.ts +3 -1
  68. package/spx-form-view/index.d.ts +5 -0
  69. package/spx-form-view/public-api.d.ts +3 -0
  70. package/spx-form-view/spx-autocomplete-search.component.d.ts +36 -0
  71. package/spx-form-view/spx-form-field.interface.d.ts +16 -0
  72. package/spx-form-view/spx-form-section.interface.d.ts +9 -0
  73. package/spx-form-view/spx-form-view.component.d.ts +32 -0
  74. package/spx-inputs/spx-dropdown.component.d.ts +18 -0
  75. package/spx-inputs/spx-input-box.component.d.ts +14 -7
  76. package/spx-inputs/spx-input-float.component.d.ts +3 -2
  77. package/spx-inputs/spx-input-number.component.d.ts +3 -2
  78. package/spx-inputs/spx-input-radio.component.d.ts +13 -5
  79. package/spx-inputs/spx-input-text.component.d.ts +3 -2
  80. package/spx-inputs/spx-input-type.enum.d.ts +2 -1
  81. package/spx-inputs/spx-input.component.d.ts +11 -3
  82. package/spx-navigation/spx-home-tile.component.d.ts +5 -1
  83. package/spx-navigation/spx-navigation-item.interface.d.ts +1 -0
  84. package/spx-navigation/spx-navigation.component.d.ts +4 -1
  85. package/spx-number-check/index.d.ts +5 -0
  86. package/spx-number-check/public-api.d.ts +1 -0
  87. package/spx-number-check/spx-number-check.component.d.ts +48 -0
  88. package/spx-suggestion/spx-suggestion.component.d.ts +3 -1
  89. package/tailwind.css +1 -1
@@ -0,0 +1,99 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
3
+ import { SpxValidationModule } from '@softpak/components/spx-validation';
4
+ import { CommonModule } from '@angular/common';
5
+ import { SpxInputComponent, SpxInputTypeEnum } from '@softpak/components/spx-inputs';
6
+ import { SpxButtonComponent } from '@softpak/components/spx-button';
7
+ import { SpxSeverityEnum } from '@softpak/components/spx-helpers';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ export const sectionAutocompleteSearch = 'autocompleteSearch';
11
+ export const ctrlQuery = 'query';
12
+ export const ctrlOptions = 'options';
13
+ export class SpxAutocompleteSearchComponent {
14
+ get ctrlQuery() { return this.formGroup.get(ctrlQuery); }
15
+ get ctrlOptions() { return this.formGroup.get(ctrlOptions); }
16
+ constructor(formBuilder) {
17
+ this.formBuilder = formBuilder;
18
+ this.spxSuggestions = [];
19
+ this.spxSearch = new EventEmitter();
20
+ this.spxSubmit = new EventEmitter();
21
+ this.inputTypeAutocomplete = SpxInputTypeEnum.autocomplete;
22
+ this.inputTypeRadio = SpxInputTypeEnum.radio;
23
+ this.inputTypeText = SpxInputTypeEnum.text;
24
+ this.severitySuccess = SpxSeverityEnum.success;
25
+ this.sections = [
26
+ {
27
+ key: sectionAutocompleteSearch,
28
+ showTitle: () => false,
29
+ fields: [
30
+ {
31
+ key: ctrlQuery,
32
+ type: () => SpxInputTypeEnum.text,
33
+ label: () => this.txtQuery,
34
+ capitalize: () => true,
35
+ afterValueChange: (valuePair) => {
36
+ this.spxSearch.emit(valuePair);
37
+ },
38
+ },
39
+ {
40
+ key: ctrlOptions,
41
+ type: () => SpxInputTypeEnum.radio,
42
+ label: () => this.txtOptions,
43
+ },
44
+ ]
45
+ }
46
+ ];
47
+ this.createForm();
48
+ }
49
+ createForm() {
50
+ return this.formBuilder.group({
51
+ [ctrlQuery]: [null],
52
+ [ctrlOptions]: [null],
53
+ });
54
+ }
55
+ ngOnDestroy() {
56
+ if (this.inputChanges) {
57
+ this.inputChanges.unsubscribe();
58
+ }
59
+ }
60
+ getRawValidators(formControl) {
61
+ return formControl._rawValidators;
62
+ }
63
+ onSubmit() {
64
+ // this.submit.emit({
65
+ // category: this.ctrlCategory.value,
66
+ // containerType: this.ctrlContainerType.value,
67
+ // licensePlate: this.ctrlLicensePlate.value,
68
+ // tonsTested: this.ctrlTonsTested.value,
69
+ // })
70
+ }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SpxAutocompleteSearchComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
72
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SpxAutocompleteSearchComponent, isStandalone: true, selector: "spx-autocomplete-search", inputs: { spxSuggestions: "spxSuggestions", spxField: "spxField", txtOptions: "txtOptions", txtQuery: "txtQuery", txtSubmit: "txtSubmit" }, outputs: { spxSearch: "spxSearch", spxSubmit: "spxSubmit" }, ngImport: i0, template: "<div class=\"bg-black-100 fixed top-0 left-0 right-0 bottom-0\"></div>\n<form [formGroup]=\"formGroup\" class=\"max-w-lg mx-auto flex flex-col gap-3\" (ngSubmit)=\"onSubmit()\">\n <!-- <spx-form-view\n [spxFormGroup]=\"formGroup\"\n [spxSections]=\"sections\"\n [spxSuggestions]=\"spxSuggestions\">\n </spx-form-view> -->\n <spx-button\n [spxFullWidth]=\"true\"\n [spxSeverity]=\"severitySuccess\">\n Save\n </spx-button>\n</form>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: SpxButtonComponent, selector: "spx-button", inputs: ["spxDisabled", "spxClass", "spxClassObject", "spxForm", "spxFullHeight", "spxFullWidth", "spxSeverity", "spxSize", "spxTabIndex", "spxType"], outputs: ["spxClick"] }, { kind: "ngmodule", type: SpxValidationModule }] }); }
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SpxAutocompleteSearchComponent, decorators: [{
75
+ type: Component,
76
+ args: [{ selector: 'spx-autocomplete-search', standalone: true, imports: [
77
+ CommonModule,
78
+ FormsModule,
79
+ ReactiveFormsModule,
80
+ SpxButtonComponent,
81
+ SpxInputComponent,
82
+ SpxValidationModule,
83
+ ], template: "<div class=\"bg-black-100 fixed top-0 left-0 right-0 bottom-0\"></div>\n<form [formGroup]=\"formGroup\" class=\"max-w-lg mx-auto flex flex-col gap-3\" (ngSubmit)=\"onSubmit()\">\n <!-- <spx-form-view\n [spxFormGroup]=\"formGroup\"\n [spxSections]=\"sections\"\n [spxSuggestions]=\"spxSuggestions\">\n </spx-form-view> -->\n <spx-button\n [spxFullWidth]=\"true\"\n [spxSeverity]=\"severitySuccess\">\n Save\n </spx-button>\n</form>" }]
84
+ }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { spxSuggestions: [{
85
+ type: Input
86
+ }], spxField: [{
87
+ type: Input
88
+ }], txtOptions: [{
89
+ type: Input
90
+ }], txtQuery: [{
91
+ type: Input
92
+ }], txtSubmit: [{
93
+ type: Input
94
+ }], spxSearch: [{
95
+ type: Output
96
+ }], spxSubmit: [{
97
+ type: Output
98
+ }] } });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWF1dG9jb21wbGV0ZS1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc29mdHBhay9jb21wb25lbnRzL3NweC1mb3JtLXZpZXcvc3B4LWF1dG9jb21wbGV0ZS1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc29mdHBhay9jb21wb25lbnRzL3NweC1mb3JtLXZpZXcvc3B4LWF1dG9jb21wbGV0ZS1zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQXVDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQWdCLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFJbEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsb0JBQW9CLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUNqQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBZXJDLE1BQU0sT0FBTyw4QkFBOEI7SUFzQ3pDLElBQUksU0FBUyxLQUFrQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBZ0IsQ0FBQyxDQUFDLENBQUM7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aW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3B4VmFsaWRhdGlvbk1vZHVsZSB9IGZyb20gJ0Bzb2Z0cGFrL2NvbXBvbmVudHMvc3B4LXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNweElucHV0Q29tcG9uZW50LCBTcHhJbnB1dFR5cGVFbnVtLCBTcHhWYWx1ZVBhaXIgfSBmcm9tICdAc29mdHBhay9jb21wb25lbnRzL3NweC1pbnB1dHMnO1xuaW1wb3J0IHsgU3B4QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtYnV0dG9uJztcbmltcG9ydCB7IFNweFNldmVyaXR5RW51bSB9IGZyb20gJ0Bzb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWhlbHBlcnMnO1xuaW1wb3J0IHsgU3B4Rm9ybUZpZWxkSSB9IGZyb20gJy4vc3B4LWZvcm0tZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNweEZvcm1TZWN0aW9uSSB9IGZyb20gJy4vc3B4LWZvcm0tc2VjdGlvbi5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3Qgc2VjdGlvbkF1dG9jb21wbGV0ZVNlYXJjaCA9ICdhdXRvY29tcGxldGVTZWFyY2gnO1xuZXhwb3J0IGNvbnN0IGN0cmxRdWVyeSA9ICdxdWVyeSc7XG5leHBvcnQgY29uc3QgY3RybE9wdGlvbnMgPSAnb3B0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NweC1hdXRvY29tcGxldGUtc2VhcmNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NweC1hdXRvY29tcGxldGUtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNweEJ1dHRvbkNvbXBvbmVudCxcbiAgICBTcHhJbnB1dENvbXBvbmVudCxcbiAgICBTcHhWYWxpZGF0aW9uTW9kdWxlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNweEF1dG9jb21wbGV0ZVNlYXJjaENvbXBvbmVudCB7XG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgc3B4U3VnZ2VzdGlvbnM6IFNweFZhbHVlUGFpcjxhbnk+W10gPSBbXTtcbiAgQElucHV0KCkgc3B4RmllbGQhOiBTcHhGb3JtRmllbGRJO1xuICBASW5wdXQoKSB0eHRPcHRpb25zITogc3RyaW5nO1xuICBASW5wdXQoKSB0eHRRdWVyeSE6IHN0cmluZztcbiAgQElucHV0KCkgdHh0U3VibWl0ITogc3RyaW5nO1xuICBAT3V0cHV0KCkgc3B4U2VhcmNoOiBFdmVudEVtaXR0ZXI8U3B4VmFsdWVQYWlyPGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxTcHhWYWx1ZVBhaXI8YW55Pj4oKTsgXG4gIEBPdXRwdXQoKSBzcHhTdWJtaXQ6IEV2ZW50RW1pdHRlcjxTcHhWYWx1ZVBhaXI8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPFNweFZhbHVlUGFpcjxhbnk+PigpO1xuXG4gIGlucHV0VHlwZUF1dG9jb21wbGV0ZSA9IFNweElucHV0VHlwZUVudW0uYXV0b2NvbXBsZXRlO1xuICBpbnB1dFR5cGVSYWRpbyA9IFNweElucHV0VHlwZUVudW0ucmFkaW87XG4gIGlucHV0VHlwZVRleHQgPSBTcHhJbnB1dFR5cGVFbnVtLnRleHQ7XG4gIHNldmVyaXR5U3VjY2VzcyA9IFNweFNldmVyaXR5RW51bS5zdWNjZXNzO1xuICBcbiAgc2VjdGlvbnM6IFNweEZvcm1TZWN0aW9uSVtdID0gW1xuICAgIHtcbiAgICAgIGtleTogc2VjdGlvbkF1dG9jb21wbGV0ZVNlYXJjaCxcbiAgICAgIHNob3dUaXRsZTogKCkgPT4gZmFsc2UsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogY3RybFF1ZXJ5LFxuICAgICAgICAgIHR5cGU6ICgpID0+IFNweElucHV0VHlwZUVudW0udGV4dCxcbiAgICAgICAgICBsYWJlbDogKCkgPT4gdGhpcy50eHRRdWVyeSxcbiAgICAgICAgICBjYXBpdGFsaXplOiAoKSA9PiB0cnVlLFxuICAgICAgICAgIGFmdGVyVmFsdWVDaGFuZ2U6ICh2YWx1ZVBhaXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3B4U2VhcmNoLmVtaXQodmFsdWVQYWlyKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBjdHJsT3B0aW9ucyxcbiAgICAgICAgICB0eXBlOiAoKSA9PiBTcHhJbnB1dFR5cGVFbnVtLnJhZGlvLFxuICAgICAgICAgIGxhYmVsOiAoKSA9PiB0aGlzLnR4dE9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuICBdO1xuXG4gIGdldCBjdHJsUXVlcnkoKTogRm9ybUNvbnRyb2wgeyByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KGN0cmxRdWVyeSkgYXMgRm9ybUNvbnRyb2w7IH1cbiAgZ2V0IGN0cmxPcHRpb25zKCk6IEZvcm1Db250cm9sIHsgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldChjdHJsT3B0aW9ucykgYXMgRm9ybUNvbnRyb2w7IH1cblxuICBwcml2YXRlIGlucHV0Q2hhbmdlcz86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIFtjdHJsUXVlcnldOiBbbnVsbF0sXG4gICAgICBbY3RybE9wdGlvbnNdOiBbbnVsbF0sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENoYW5nZXMpIHtcbiAgICAgIHRoaXMuaW5wdXRDaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmF3VmFsaWRhdG9ycyhmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpIHtcbiAgICByZXR1cm4gKGZvcm1Db250cm9sIGFzIGFueSkuX3Jhd1ZhbGlkYXRvcnM7XG4gIH1cblxuICBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAvLyAgIGNhdGVnb3J5OiB0aGlzLmN0cmxDYXRlZ29yeS52YWx1ZSxcbiAgICAvLyAgIGNvbnRhaW5lclR5cGU6IHRoaXMuY3RybENvbnRhaW5lclR5cGUudmFsdWUsXG4gICAgLy8gICBsaWNlbnNlUGxhdGU6IHRoaXMuY3RybExpY2Vuc2VQbGF0ZS52YWx1ZSxcbiAgICAvLyAgIHRvbnNUZXN0ZWQ6IHRoaXMuY3RybFRvbnNUZXN0ZWQudmFsdWUsXG4gICAgLy8gfSlcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImJnLWJsYWNrLTEwMCBmaXhlZCB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBib3R0b20tMFwiPjwvZGl2PlxuPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cIm1heC13LWxnIG14LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtM1wiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCI+XG4gIDwhLS0gPHNweC1mb3JtLXZpZXdcbiAgICBbc3B4Rm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgW3NweFNlY3Rpb25zXT1cInNlY3Rpb25zXCJcbiAgICBbc3B4U3VnZ2VzdGlvbnNdPVwic3B4U3VnZ2VzdGlvbnNcIj5cbiAgPC9zcHgtZm9ybS12aWV3PiAtLT5cbiAgPHNweC1idXR0b25cbiAgICBbc3B4RnVsbFdpZHRoXT1cInRydWVcIlxuICAgIFtzcHhTZXZlcml0eV09XCJzZXZlcml0eVN1Y2Nlc3NcIj5cbiAgICBTYXZlXG4gIDwvc3B4LWJ1dHRvbj5cbjwvZm9ybT4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWZvcm0tZmllbGQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc29mdHBhay9jb21wb25lbnRzL3NweC1mb3JtLXZpZXcvc3B4LWZvcm0tZmllbGQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTcHhJbnB1dFR5cGVFbnVtLCBTcHhWYWx1ZVBhaXIgfSBmcm9tIFwiQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtaW5wdXRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3B4Rm9ybUZpZWxkSSB7XG4gICAgYWZ0ZXJWYWx1ZUNoYW5nZT86ICh2YWx1ZTogU3B4VmFsdWVQYWlyPHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBhbnk+KSA9PiB2b2lkO1xuICAgIGF1dG9mb2N1cz86ICgpID0+IGJvb2xlYW47XG4gICAgY2FwaXRhbGl6ZT86ICgpID0+IGJvb2xlYW47XG4gICAgZGVmYXVsdFZhbHVlPzogKCkgPT4gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IGFueTtcbiAgICBrZXk6IHN0cmluZztcbiAgICBsYWJlbD86ICgpID0+IHN0cmluZztcbiAgICByZWFkb25seT86ICgpID0+IGJvb2xlYW47XG4gICAgc2hvdz86ICgpID0+IGJvb2xlYW47XG4gICAgc3RlcD86ICgpID0+IG51bWJlcjtcbiAgICBzdWdnZXN0aW9ucz86ICgpID0+IGJvb2xlYW47XG4gICAgc3VnZ2VzdGlvbnNGaXhlZD86ICgpID0+IFNweFZhbHVlUGFpcjxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgYW55PltdXG4gICAgdHlwZTogKCkgPT4gU3B4SW5wdXRUeXBlRW51bTtcbiAgICB2YWxpZGF0b3JzPzogKCkgPT4gYW55W107XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWZvcm0tc2VjdGlvbi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWZvcm0tdmlldy9zcHgtZm9ybS1zZWN0aW9uLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3B4Rm9ybUZpZWxkSSB9IGZyb20gXCIuL3NweC1mb3JtLWZpZWxkLmludGVyZmFjZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNweEZvcm1TZWN0aW9uSSB7XG4gICAgZmllbGRzOiBTcHhGb3JtRmllbGRJW107XG4gICAgaW5kZXg/OiAoKSA9PiBudW1iZXI7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgc2hvdz86ICgpID0+IGJvb2xlYW47XG4gICAgc2hvd1RpdGxlPzogKCkgPT4gYm9vbGVhbjtcbiAgICB0aXRsZT86ICgpID0+IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,196 @@
1
+ import { JsonPipe, NgFor, NgIf } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { SpxFormSectionComponent } from '@softpak/components/spx-form-section';
4
+ import { SpxInputComponent, SpxInputTypeEnum } from '@softpak/components/spx-inputs';
5
+ import { SpxCapitalizePipe } from '@softpak/components/spx-capitalize';
6
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
7
+ import { SpxAutocompleteSearchComponent } from './spx-autocomplete-search.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ export class SpxFormViewComponent {
11
+ onBlur(field) {
12
+ return;
13
+ }
14
+ onAutocompleteSave(valuePair) {
15
+ this.autocompleteField = undefined;
16
+ }
17
+ onSearch(field) {
18
+ this.autocompleteField = field;
19
+ }
20
+ getRawValidators(formControl) {
21
+ // eslint-disable-next-line no-underscore-dangle
22
+ return formControl._rawValidators;
23
+ }
24
+ hasRequiredField(abstractControl) {
25
+ if (abstractControl.validator) {
26
+ const validator = abstractControl.validator({});
27
+ if (validator && validator['required']) {
28
+ return true;
29
+ }
30
+ }
31
+ if (abstractControl['controls']) {
32
+ for (const controlName in abstractControl['controls']) {
33
+ if (abstractControl['controls'][controlName]) {
34
+ if (this.hasRequiredField(abstractControl['controls'][controlName])) {
35
+ return true;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ return false;
41
+ }
42
+ static initialFormValue(sections) {
43
+ const formObject = {};
44
+ sections.forEach(section => {
45
+ section.fields.forEach(field => {
46
+ formObject[field.key] = [field.defaultValue ? field.defaultValue() : null, field.validators ? [...field.validators()] : []];
47
+ });
48
+ });
49
+ return formObject;
50
+ }
51
+ static createForm(formBuilder, sections) {
52
+ return formBuilder.group(this.initialFormValue(sections));
53
+ }
54
+ constructor(formBuilder) {
55
+ this.formBuilder = formBuilder;
56
+ this.spxSearch = new EventEmitter();
57
+ this.typeAutocomplete = SpxInputTypeEnum.autocomplete;
58
+ this.typeFloat = SpxInputTypeEnum.float;
59
+ this.typeNumber = SpxInputTypeEnum.number;
60
+ this.typeRadio = SpxInputTypeEnum.radio;
61
+ this.typeText = SpxInputTypeEnum.text;
62
+ this.typeNumericKeyboard = SpxInputTypeEnum.textNumericKeyboard;
63
+ this.typeOverlay = SpxInputTypeEnum.overlay;
64
+ this.typeOverlayNumber = SpxInputTypeEnum.overlayNumber;
65
+ }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SpxFormViewComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SpxFormViewComponent, isStandalone: true, selector: "spx-form-view", inputs: { spxFormGroup: "spxFormGroup", spxSections: "spxSections", spxSuggestions: "spxSuggestions" }, outputs: { spxSearch: "spxSearch" }, ngImport: i0, template: `<spx-autocomplete-search
68
+ *ngIf="autocompleteField"
69
+ [spxField]="autocompleteField"
70
+ [spxSuggestions]="spxSuggestions"
71
+ [txtOptions]="'Options'"
72
+ [txtQuery]="'Query'"
73
+ [txtSubmit]="'Save'"
74
+ (spxSubmit)="onAutocompleteSave($event)">
75
+ </spx-autocomplete-search>
76
+ <spx-form-section
77
+ *ngFor="let spxSection of spxSections; let spxSectionIndex = index;"
78
+ [spxShowTitle]="!spxSection.showTitle || spxSection.showTitle()"
79
+ [spxIndex]="spxSectionIndex + 1"
80
+ [spxTitle]="spxSection.title ? spxSection.title() : undefined">
81
+ <ng-container *ngFor="let spxField of spxSection.fields; let spxFieldIndex = index;">
82
+ <ng-container *ngIf="spxField.show === undefined || spxField.show()">
83
+ <spx-input
84
+ *ngIf="spxField.type() === typeOverlay || spxField.type() === typeOverlayNumber || spxField.type() === typeFloat || spxField.type() === typeNumber || spxField.type() === typeText || spxField.type() === typeAutocomplete || spxField.type() === typeNumericKeyboard"
85
+ [formControl]="$any(this.spxFormGroup.get(spxField.key))"
86
+ [spxAutofocus]="spxField.autofocus ? spxField.autofocus() : false"
87
+ [spxCapitalize]="spxField.capitalize ? spxField.capitalize() : false"
88
+ [spxLabel]="(spxField.label ? spxField.label() : spxField.key) | capitalize"
89
+ [spxPattern]="spxField.type() === typeNumericKeyboard ? '\\d*' : undefined"
90
+ [spxReadonly]="spxField.readonly ? spxField.readonly() : false"
91
+ [spxRequired]="hasRequiredField(this.spxFormGroup.get(spxField.key)!)"
92
+ [spxShowSearch]="spxField.type() === typeAutocomplete"
93
+ [spxShowHelp]="false"
94
+ [spxShowValidationMessages]="this.spxFormGroup.get(spxField.key)! && this.spxFormGroup.get(spxField.key)!.errors && this.spxFormGroup.get(spxField.key)!.touched"
95
+ [spxStep]="spxField.step ? spxField.step() : undefined"
96
+ [spxType]="spxField.type()"
97
+ [spxValidators]="getRawValidators(this.spxFormGroup.get(spxField.key)!)"
98
+ [spxSuggestions]="spxField.suggestionsFixed ? spxField.suggestionsFixed() : this.spxSuggestions[spxField.key]"
99
+ (spxBlur)="onBlur(spxField)"
100
+ (spxSearch)="onSearch(spxField)">
101
+ </spx-input>
102
+
103
+ <spx-input
104
+ *ngIf="spxField.type() === typeRadio"
105
+ [formControl]="$any(this.spxFormGroup.get(spxField.key))"
106
+ [spxLabel]="(spxField.label ? spxField.label() : spxField.key) | capitalize"
107
+ [spxReadonly]="spxField.readonly ? spxField.readonly() : false"
108
+ [spxRequired]="hasRequiredField(this.spxFormGroup.get(spxField.key)!)"
109
+ [spxShowHelp]="false"
110
+ [spxShowValidationMessages]="this.spxFormGroup.get(spxField.key)! && this.spxFormGroup.get(spxField.key)!.errors && this.spxFormGroup.get(spxField.key)!.touched"
111
+ [spxSuggestions]="spxField.suggestionsFixed ? spxField.suggestionsFixed() : this.spxSuggestions[spxField.key]"
112
+ [spxType]="typeRadio"
113
+ [spxValidators]="getRawValidators(this.spxFormGroup.get(spxField.key)!)">
114
+ </spx-input>
115
+ </ng-container>
116
+ </ng-container>
117
+ </spx-form-section>`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: SpxAutocompleteSearchComponent, selector: "spx-autocomplete-search", inputs: ["spxSuggestions", "spxField", "txtOptions", "txtQuery", "txtSubmit"], outputs: ["spxSearch", "spxSubmit"] }, { kind: "pipe", type: SpxCapitalizePipe, name: "capitalize" }, { kind: "component", type: SpxFormSectionComponent, selector: "spx-form-section", inputs: ["spxIndex", "spxIndexSecondary", "spxTitle", "spxShowTitle"] }, { kind: "component", type: SpxInputComponent, selector: "spx-input", inputs: ["spxLabel", "spxMax", "spxMin", "spxName", "spxReadonly", "spxAutofocus", "spxInputMode", "spxPattern", "spxRequired", "spxSelectMonth", "spxSelectDay", "spxShowEdit", "spxShowHelp", "spxShowLabel", "spxCompact", "spxShowClear", "spxShowSearch", "spxShowValidationMessages", "spxStep", "spxSuggestions", "spxType", "spxValidators", "value", "spxCapitalize", "spxFocused"], outputs: ["spxBlur", "spxClear", "spxChange", "spxFocus", "spxEdit", "spxHelp", "spxSearch"] }] }); }
118
+ }
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SpxFormViewComponent, decorators: [{
120
+ type: Component,
121
+ args: [{
122
+ selector: 'spx-form-view',
123
+ standalone: true,
124
+ imports: [
125
+ FormsModule,
126
+ ReactiveFormsModule,
127
+ JsonPipe,
128
+ NgIf,
129
+ NgFor,
130
+ SpxAutocompleteSearchComponent,
131
+ SpxCapitalizePipe,
132
+ SpxFormSectionComponent,
133
+ SpxInputComponent,
134
+ ],
135
+ template: `<spx-autocomplete-search
136
+ *ngIf="autocompleteField"
137
+ [spxField]="autocompleteField"
138
+ [spxSuggestions]="spxSuggestions"
139
+ [txtOptions]="'Options'"
140
+ [txtQuery]="'Query'"
141
+ [txtSubmit]="'Save'"
142
+ (spxSubmit)="onAutocompleteSave($event)">
143
+ </spx-autocomplete-search>
144
+ <spx-form-section
145
+ *ngFor="let spxSection of spxSections; let spxSectionIndex = index;"
146
+ [spxShowTitle]="!spxSection.showTitle || spxSection.showTitle()"
147
+ [spxIndex]="spxSectionIndex + 1"
148
+ [spxTitle]="spxSection.title ? spxSection.title() : undefined">
149
+ <ng-container *ngFor="let spxField of spxSection.fields; let spxFieldIndex = index;">
150
+ <ng-container *ngIf="spxField.show === undefined || spxField.show()">
151
+ <spx-input
152
+ *ngIf="spxField.type() === typeOverlay || spxField.type() === typeOverlayNumber || spxField.type() === typeFloat || spxField.type() === typeNumber || spxField.type() === typeText || spxField.type() === typeAutocomplete || spxField.type() === typeNumericKeyboard"
153
+ [formControl]="$any(this.spxFormGroup.get(spxField.key))"
154
+ [spxAutofocus]="spxField.autofocus ? spxField.autofocus() : false"
155
+ [spxCapitalize]="spxField.capitalize ? spxField.capitalize() : false"
156
+ [spxLabel]="(spxField.label ? spxField.label() : spxField.key) | capitalize"
157
+ [spxPattern]="spxField.type() === typeNumericKeyboard ? '\\d*' : undefined"
158
+ [spxReadonly]="spxField.readonly ? spxField.readonly() : false"
159
+ [spxRequired]="hasRequiredField(this.spxFormGroup.get(spxField.key)!)"
160
+ [spxShowSearch]="spxField.type() === typeAutocomplete"
161
+ [spxShowHelp]="false"
162
+ [spxShowValidationMessages]="this.spxFormGroup.get(spxField.key)! && this.spxFormGroup.get(spxField.key)!.errors && this.spxFormGroup.get(spxField.key)!.touched"
163
+ [spxStep]="spxField.step ? spxField.step() : undefined"
164
+ [spxType]="spxField.type()"
165
+ [spxValidators]="getRawValidators(this.spxFormGroup.get(spxField.key)!)"
166
+ [spxSuggestions]="spxField.suggestionsFixed ? spxField.suggestionsFixed() : this.spxSuggestions[spxField.key]"
167
+ (spxBlur)="onBlur(spxField)"
168
+ (spxSearch)="onSearch(spxField)">
169
+ </spx-input>
170
+
171
+ <spx-input
172
+ *ngIf="spxField.type() === typeRadio"
173
+ [formControl]="$any(this.spxFormGroup.get(spxField.key))"
174
+ [spxLabel]="(spxField.label ? spxField.label() : spxField.key) | capitalize"
175
+ [spxReadonly]="spxField.readonly ? spxField.readonly() : false"
176
+ [spxRequired]="hasRequiredField(this.spxFormGroup.get(spxField.key)!)"
177
+ [spxShowHelp]="false"
178
+ [spxShowValidationMessages]="this.spxFormGroup.get(spxField.key)! && this.spxFormGroup.get(spxField.key)!.errors && this.spxFormGroup.get(spxField.key)!.touched"
179
+ [spxSuggestions]="spxField.suggestionsFixed ? spxField.suggestionsFixed() : this.spxSuggestions[spxField.key]"
180
+ [spxType]="typeRadio"
181
+ [spxValidators]="getRawValidators(this.spxFormGroup.get(spxField.key)!)">
182
+ </spx-input>
183
+ </ng-container>
184
+ </ng-container>
185
+ </spx-form-section>`,
186
+ }]
187
+ }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { spxFormGroup: [{
188
+ type: Input
189
+ }], spxSections: [{
190
+ type: Input
191
+ }], spxSuggestions: [{
192
+ type: Input
193
+ }], spxSearch: [{
194
+ type: Output
195
+ }] } });
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWZvcm0tdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWZvcm0tdmlldy9zcHgtZm9ybS12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQTJDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFvRXJGLE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CLE1BQU0sQ0FBQyxLQUFvQjtRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQTRCO1FBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFvQjtRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxXQUE0QjtRQUMzQyxnREFBZ0Q7UUFDaEQsT0FBUSxXQUFtQixDQUFDLGNBQWMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsZUFBZ0M7UUFDL0MsSUFBSSxlQUFlLENB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bkIsUUFBUTt3QkFDUixJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsOEJBQThCO3dCQUM5QixpQkFBaUI7d0JBQ2pCLHVCQUF1Qjt3QkFDdkIsaUJBQWlCO3FCQUNsQjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NCQWtEVTtpQkFDckI7Z0ZBRVUsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpzb25QaXBlLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3B4Rm9ybVNlY3Rpb25JIH0gZnJvbSAnLi9zcHgtZm9ybS1zZWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTcHhGb3JtU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJ0Bzb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWZvcm0tc2VjdGlvbic7XG5pbXBvcnQgeyBTcHhJbnB1dENvbXBvbmVudCwgU3B4SW5wdXRUeXBlRW51bSwgU3B4VmFsdWVQYWlyIH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtaW5wdXRzJztcbmltcG9ydCB7IFNweENhcGl0YWxpemVQaXBlIH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3B4Rm9ybUZpZWxkSSB9IGZyb20gJy4vc3B4LWZvcm0tZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNweEF1dG9jb21wbGV0ZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4vc3B4LWF1dG9jb21wbGV0ZS1zZWFyY2guY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3B4LWZvcm0tdmlldycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEpzb25QaXBlLFxuICAgIE5nSWYsXG4gICAgTmdGb3IsXG4gICAgU3B4QXV0b2NvbXBsZXRlU2VhcmNoQ29tcG9uZW50LFxuICAgIFNweENhcGl0YWxpemVQaXBlLFxuICAgIFNweEZvcm1TZWN0aW9uQ29tcG9uZW50LFxuICAgIFNweElucHV0Q29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYDxzcHgtYXV0b2NvbXBsZXRlLXNlYXJjaFxuICAgICpuZ0lmPVwiYXV0b2NvbXBsZXRlRmllbGRcIlxuICAgIFtzcHhGaWVsZF09XCJhdXRvY29tcGxldGVGaWVsZFwiXG4gICAgW3NweFN1Z2dlc3Rpb25zXT1cInNweFN1Z2dlc3Rpb25zXCJcbiAgICBbdHh0T3B0aW9uc109XCInT3B0aW9ucydcIlxuICAgIFt0eHRRdWVyeV09XCInUXVlcnknXCJcbiAgICBbdHh0U3VibWl0XT1cIidTYXZlJ1wiXG4gICAgKHNweFN1Ym1pdCk9XCJvbkF1dG9jb21wbGV0ZVNhdmUoJGV2ZW50KVwiPlxuICA8L3NweC1hdXRvY29tcGxldGUtc2VhcmNoPlxuICAgIDxzcHgtZm9ybS1zZWN0aW9uXG4gICAgKm5nRm9yPVwibGV0IHNweFNlY3Rpb24gb2Ygc3B4U2VjdGlvbnM7IGxldCBzcHhTZWN0aW9uSW5kZXggPSBpbmRleDtcIlxuICAgIFtzcHhTaG93VGl0bGVdPVwiIXNweFNlY3Rpb24uc2hvd1RpdGxlIHx8IHNweFNlY3Rpb24uc2hvd1RpdGxlKClcIlxuICAgIFtzcHhJbmRleF09XCJzcHhTZWN0aW9uSW5kZXggKyAxXCJcbiAgICBbc3B4VGl0bGVdPVwic3B4U2VjdGlvbi50aXRsZSA/IHNweFNlY3Rpb24udGl0bGUoKSA6IHVuZGVmaW5lZFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNweEZpZWxkIG9mIHNweFNlY3Rpb24uZmllbGRzOyBsZXQgc3B4RmllbGRJbmRleCA9IGluZGV4O1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNweEZpZWxkLnNob3cgPT09IHVuZGVmaW5lZCB8fCBzcHhGaWVsZC5zaG93KClcIj5cbiAgICAgICAgPHNweC1pbnB1dFxuICAgICAgICAgICpuZ0lmPVwic3B4RmllbGQudHlwZSgpID09PSB0eXBlT3ZlcmxheSB8fCBzcHhGaWVsZC50eXBlKCkgPT09IHR5cGVPdmVybGF5TnVtYmVyIHx8IHNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZUZsb2F0IHx8IHNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZU51bWJlciB8fCBzcHhGaWVsZC50eXBlKCkgPT09IHR5cGVUZXh0IHx8IHNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZUF1dG9jb21wbGV0ZSB8fCBzcHhGaWVsZC50eXBlKCkgPT09IHR5cGVOdW1lcmljS2V5Ym9hcmRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCIkYW55KHRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpKVwiXG4gICAgICAgICAgW3NweEF1dG9mb2N1c109XCJzcHhGaWVsZC5hdXRvZm9jdXMgPyBzcHhGaWVsZC5hdXRvZm9jdXMoKSA6IGZhbHNlXCJcbiAgICAgICAgICBbc3B4Q2FwaXRhbGl6ZV09XCJzcHhGaWVsZC5jYXBpdGFsaXplID8gc3B4RmllbGQuY2FwaXRhbGl6ZSgpIDogZmFsc2VcIlxuICAgICAgICAgIFtzcHhMYWJlbF09XCIoc3B4RmllbGQubGFiZWwgPyBzcHhGaWVsZC5sYWJlbCgpIDogc3B4RmllbGQua2V5KSB8IGNhcGl0YWxpemVcIlxuICAgICAgICAgIFtzcHhQYXR0ZXJuXT1cInNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZU51bWVyaWNLZXlib2FyZCA/ICdcXFxcZConIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICBbc3B4UmVhZG9ubHldPVwic3B4RmllbGQucmVhZG9ubHkgPyBzcHhGaWVsZC5yZWFkb25seSgpIDogZmFsc2VcIlxuICAgICAgICAgIFtzcHhSZXF1aXJlZF09XCJoYXNSZXF1aXJlZEZpZWxkKHRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpISlcIlxuICAgICAgICAgIFtzcHhTaG93U2VhcmNoXT1cInNweEZpZWxkLnR5cGUoKSA9PT0gdHlwZUF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgW3NweFNob3dIZWxwXT1cImZhbHNlXCJcbiAgICAgICAgICBbc3B4U2hvd1ZhbGlkYXRpb25NZXNzYWdlc109XCJ0aGlzLnNweEZvcm1Hcm91cC5nZXQoc3B4RmllbGQua2V5KSEgJiYgdGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkhLmVycm9ycyAmJiB0aGlzLnNweEZvcm1Hcm91cC5nZXQoc3B4RmllbGQua2V5KSEudG91Y2hlZFwiXG4gICAgICAgICAgW3NweFN0ZXBdPVwic3B4RmllbGQuc3RlcCA/IHNweEZpZWxkLnN0ZXAoKSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgW3NweFR5cGVdPVwic3B4RmllbGQudHlwZSgpXCJcbiAgICAgICAgICBbc3B4VmFsaWRhdG9yc109XCJnZXRSYXdWYWxpZGF0b3JzKHRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpISlcIlxuICAgICAgICAgIFtzcHhTdWdnZXN0aW9uc109XCJzcHhGaWVsZC5zdWdnZXN0aW9uc0ZpeGVkID8gc3B4RmllbGQuc3VnZ2VzdGlvbnNGaXhlZCgpIDogdGhpcy5zcHhTdWdnZXN0aW9uc1tzcHhGaWVsZC5rZXldXCJcbiAgICAgICAgICAoc3B4Qmx1cik9XCJvbkJsdXIoc3B4RmllbGQpXCJcbiAgICAgICAgICAoc3B4U2VhcmNoKT1cIm9uU2VhcmNoKHNweEZpZWxkKVwiPlxuICAgICAgICA8L3NweC1pbnB1dD5cblxuICAgICAgICA8c3B4LWlucHV0XG4gICAgICAgICAgKm5nSWY9XCJzcHhGaWVsZC50eXBlKCkgPT09IHR5cGVSYWRpb1wiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cIiRhbnkodGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkpXCJcbiAgICAgICAgICBbc3B4TGFiZWxdPVwiKHNweEZpZWxkLmxhYmVsID8gc3B4RmllbGQubGFiZWwoKSA6IHNweEZpZWxkLmtleSkgfCBjYXBpdGFsaXplXCJcbiAgICAgICAgICBbc3B4UmVhZG9ubHldPVwic3B4RmllbGQucmVhZG9ubHkgPyBzcHhGaWVsZC5yZWFkb25seSgpIDogZmFsc2VcIlxuICAgICAgICAgIFtzcHhSZXF1aXJlZF09XCJoYXNSZXF1aXJlZEZpZWxkKHRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpISlcIlxuICAgICAgICAgIFtzcHhTaG93SGVscF09XCJmYWxzZVwiXG4gICAgICAgICAgW3NweFNob3dWYWxpZGF0aW9uTWVzc2FnZXNdPVwidGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkhICYmIHRoaXMuc3B4Rm9ybUdyb3VwLmdldChzcHhGaWVsZC5rZXkpIS5lcnJvcnMgJiYgdGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkhLnRvdWNoZWRcIlxuICAgICAgICAgIFtzcHhTdWdnZXN0aW9uc109XCJzcHhGaWVsZC5zdWdnZXN0aW9uc0ZpeGVkID8gc3B4RmllbGQuc3VnZ2VzdGlvbnNGaXhlZCgpIDogdGhpcy5zcHhTdWdnZXN0aW9uc1tzcHhGaWVsZC5rZXldXCJcbiAgICAgICAgICBbc3B4VHlwZV09XCJ0eXBlUmFkaW9cIlxuICAgICAgICAgIFtzcHhWYWxpZGF0b3JzXT1cImdldFJhd1ZhbGlkYXRvcnModGhpcy5zcHhGb3JtR3JvdXAuZ2V0KHNweEZpZWxkLmtleSkhKVwiPlxuICAgICAgICA8L3NweC1pbnB1dD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NweC1mb3JtLXNlY3Rpb24+YCxcbn0pXG5leHBvcnQgY2xhc3MgU3B4Rm9ybVZpZXdDb21wb25lbnQge1xuICBASW5wdXQoKSBzcHhGb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHNweFNlY3Rpb25zITogU3B4Rm9ybVNlY3Rpb25JW107XG4gIEBJbnB1dCgpIHNweFN1Z2dlc3Rpb25zITogYW55O1xuICBAT3V0cHV0KCkgc3B4U2VhcmNoOiBFdmVudEVtaXR0ZXI8U3B4Rm9ybUZpZWxkST4gPSBuZXcgRXZlbnRFbWl0dGVyPFNweEZvcm1GaWVsZEk+KCk7XG4gIGF1dG9jb21wbGV0ZUZpZWxkPzogU3B4Rm9ybUZpZWxkSTtcblxuICB0eXBlQXV0b2NvbXBsZXRlID0gU3B4SW5wdXRUeXBlRW51bS5hdXRvY29tcGxldGU7XG4gIHR5cGVGbG9hdCA9IFNweElucHV0VHlwZUVudW0uZmxvYXQ7XG4gIHR5cGVOdW1iZXIgPSBTcHhJbnB1dFR5cGVFbnVtLm51bWJlcjtcbiAgdHlwZVJhZGlvID0gU3B4SW5wdXRUeXBlRW51bS5yYWRpbztcbiAgdHlwZVRleHQgPSBTcHhJbnB1dFR5cGVFbnVtLnRleHQ7XG4gIHR5cGVOdW1lcmljS2V5Ym9hcmQgPSBTcHhJbnB1dFR5cGVFbnVtLnRleHROdW1lcmljS2V5Ym9hcmQ7XG4gIHR5cGVPdmVybGF5ID0gU3B4SW5wdXRUeXBlRW51bS5vdmVybGF5O1xuICB0eXBlT3ZlcmxheU51bWJlciA9IFNweElucHV0VHlwZUVudW0ub3ZlcmxheU51bWJlcjtcblxuICBvbkJsdXIoZmllbGQ6IFNweEZvcm1GaWVsZEkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvbkF1dG9jb21wbGV0ZVNhdmUodmFsdWVQYWlyOiBTcHhWYWx1ZVBhaXI8YW55Pikge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBvblNlYXJjaChmaWVsZDogU3B4Rm9ybUZpZWxkSSkge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQgPSBmaWVsZDtcbiAgfVxuXG4gIGdldFJhd1ZhbGlkYXRvcnMoZm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIHJldHVybiAoZm9ybUNvbnRyb2wgYXMgYW55KS5fcmF3VmFsaWRhdG9ycztcbiAgfVxuXG4gIGhhc1JlcXVpcmVkRmllbGQoYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBpZiAoYWJzdHJhY3RDb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gYWJzdHJhY3RDb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgaWYgKHZhbGlkYXRvciAmJiB2YWxpZGF0b3JbJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgoYWJzdHJhY3RDb250cm9sIGFzIGFueSlbJ2NvbnRyb2xzJ10pIHtcbiAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgaW4gKGFic3RyYWN0Q29udHJvbCBhcyBhbnkpWydjb250cm9scyddKSB7XG4gICAgICAgIGlmICgoYWJzdHJhY3RDb250cm9sIGFzIGFueSlbJ2NvbnRyb2xzJ11bY29udHJvbE5hbWVdKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzUmVxdWlyZWRGaWVsZCgoYWJzdHJhY3RDb250cm9sIGFzIGFueSlbJ2NvbnRyb2xzJ11bY29udHJvbE5hbWVdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWFsRm9ybVZhbHVlKHNlY3Rpb25zOiBTcHhGb3JtU2VjdGlvbklbXSkge1xuICAgIGNvbnN0IGZvcm1PYmplY3Q6IGFueSA9IHt9O1xuICAgIHNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgZm9ybU9iamVjdFtmaWVsZC5rZXldID0gW2ZpZWxkLmRlZmF1bHRWYWx1ZSA/IGZpZWxkLmRlZmF1bHRWYWx1ZSgpIDogbnVsbCwgZmllbGQudmFsaWRhdG9ycyA/IFsuLi5maWVsZC52YWxpZGF0b3JzKCldIDogW11dO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1PYmplY3Q7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRm9ybShmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHNlY3Rpb25zOiBTcHhGb3JtU2VjdGlvbklbXSk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIGZvcm1CdWlsZGVyLmdyb3VwKHRoaXMuaW5pdGlhbEZvcm1WYWx1ZShzZWN0aW9ucykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,94 @@
1
+ import { NgFor, NgIf } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { SpxButtonComponent } from '@softpak/components/spx-button';
4
+ import { fromEvent } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ export class SpxDropdownComponent {
7
+ constructor() {
8
+ this.focusPosition = 0;
9
+ this.spxSuggestions = [];
10
+ this.spxSelect = new EventEmitter();
11
+ }
12
+ ngOnInit() {
13
+ this.listenToKeyUp();
14
+ }
15
+ ngOnChanges(changes) {
16
+ this.focusPosition = 0;
17
+ }
18
+ ngOnDestroy() {
19
+ this.subscriptionKeyUp?.unsubscribe();
20
+ }
21
+ handleSuggestionClick(valuePair) {
22
+ this.select(valuePair);
23
+ }
24
+ listenToKeyUp() {
25
+ this.subscriptionKeyUp = fromEvent(window, 'keyup').subscribe((event) => {
26
+ if (event.key === 'ArrowUp' && this.focusPosition > 0) {
27
+ this.focusPosition = this.focusPosition - 1;
28
+ event.preventDefault();
29
+ }
30
+ if (event.key === 'ArrowDown' && this.focusPosition < this.spxSuggestions.length - 1) {
31
+ this.focusPosition = this.focusPosition + 1;
32
+ event.preventDefault();
33
+ }
34
+ if (event.key === 'Enter' && this.spxSuggestions.length > 0) {
35
+ this.select(this.spxSuggestions.at(this.focusPosition));
36
+ event.preventDefault();
37
+ }
38
+ });
39
+ }
40
+ select(valuePair) {
41
+ this.focusPosition = 0;
42
+ this.spxSelect.emit(valuePair);
43
+ }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SpxDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SpxDropdownComponent, isStandalone: true, selector: "spx-dropdown", inputs: { spxSuggestions: "spxSuggestions" }, outputs: { spxSelect: "spxSelect" }, usesOnChanges: true, ngImport: i0, template: `<div class="relative text-black">
46
+ <div
47
+ class="absolute bg-gray-100 left-0 right-0 z-20">
48
+ <button
49
+ *ngFor="let valuePair of this.spxSuggestions; let i = index"
50
+ class="text-black block w-full p-2 border border-gray-200 rounded-lg shadow hover:bg-gray-200 flex items-center text-left"
51
+ [class.bg-gray-100]="i === this.focusPosition"
52
+ [class.bg-white]="i !== this.focusPosition"
53
+ (click)="this.handleSuggestionClick(valuePair)"
54
+ [attr.tabindex]="-1"
55
+ [attr.type]="'button'">
56
+ <div class="flex-1 p-1 font-bold text-lg">{{valuePair?.description}}</div>
57
+ <spx-button (spxClick)="this.handleSuggestionClick(valuePair)" [spxType]="'button'" [spxTabIndex]="-1">Select</spx-button>
58
+ </button>
59
+ </div>
60
+ </div>`, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: SpxButtonComponent, selector: "spx-button", inputs: ["spxDisabled", "spxClass", "spxClassObject", "spxForm", "spxFullHeight", "spxFullWidth", "spxSeverity", "spxSize", "spxTabIndex", "spxType"], outputs: ["spxClick"] }] }); }
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SpxDropdownComponent, decorators: [{
63
+ type: Component,
64
+ args: [{
65
+ selector: 'spx-dropdown',
66
+ standalone: true,
67
+ imports: [
68
+ NgIf,
69
+ NgFor,
70
+ SpxButtonComponent,
71
+ ],
72
+ template: `<div class="relative text-black">
73
+ <div
74
+ class="absolute bg-gray-100 left-0 right-0 z-20">
75
+ <button
76
+ *ngFor="let valuePair of this.spxSuggestions; let i = index"
77
+ class="text-black block w-full p-2 border border-gray-200 rounded-lg shadow hover:bg-gray-200 flex items-center text-left"
78
+ [class.bg-gray-100]="i === this.focusPosition"
79
+ [class.bg-white]="i !== this.focusPosition"
80
+ (click)="this.handleSuggestionClick(valuePair)"
81
+ [attr.tabindex]="-1"
82
+ [attr.type]="'button'">
83
+ <div class="flex-1 p-1 font-bold text-lg">{{valuePair?.description}}</div>
84
+ <spx-button (spxClick)="this.handleSuggestionClick(valuePair)" [spxType]="'button'" [spxTabIndex]="-1">Select</spx-button>
85
+ </button>
86
+ </div>
87
+ </div>`,
88
+ }]
89
+ }], propDecorators: { spxSuggestions: [{
90
+ type: Input
91
+ }], spxSelect: [{
92
+ type: Output
93
+ }] } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NvZnRwYWsvY29tcG9uZW50cy9zcHgtaW5wdXRzL3NweC1kcm9wZG93bi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBMkIvQyxNQUFNLE9BQU8sb0JBQW9CO0lBekJqQztRQTBCWSxrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNuQixtQkFBYyxHQUE4QyxFQUFFLENBQUM7UUFDOUQsY0FBUyxHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQztLQXdDOUY7SUFyQ0MsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUFrRDtRQUN0RSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3RFLElBQUssS0FBdUIsQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixDQUFDO1lBQ0QsSUFBSyxLQUF1QixDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDNUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFLLEtBQXVCLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFFLENBQUMsQ0FBQztnQkFDekQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBa0Q7UUFDL0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsQ0FBQzs4R0ExQ1Usb0JBQW9CO2tHQUFwQixvQkFBb0IsZ0xBakJyQjs7Ozs7Ozs7Ozs7Ozs7O09BZUwsNERBbEJILEtBQUssbUhBQ0wsa0JBQWtCOzsyRkFtQlQsb0JBQW9CO2tCQXpCaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRTt3QkFDUCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsa0JBQWtCO3FCQUNuQjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztPQWVMO2lCQUNOOzhCQUdVLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcHhWYWx1ZVBhaXIgfSBmcm9tICcuL3NweC12YWx1ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3B4QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtYnV0dG9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NweC1kcm9wZG93bicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5nRm9yLFxuICAgIFNweEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdGV4dC1ibGFja1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJhYnNvbHV0ZSBiZy1ncmF5LTEwMCBsZWZ0LTAgcmlnaHQtMCB6LTIwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZVBhaXIgb2YgdGhpcy5zcHhTdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1ibGFjayBibG9jayB3LWZ1bGwgcC0yIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3cgaG92ZXI6YmctZ3JheS0yMDAgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1sZWZ0XCJcbiAgICAgICAgW2NsYXNzLmJnLWdyYXktMTAwXT1cImkgPT09IHRoaXMuZm9jdXNQb3NpdGlvblwiXG4gICAgICAgIFtjbGFzcy5iZy13aGl0ZV09XCJpICE9PSB0aGlzLmZvY3VzUG9zaXRpb25cIlxuICAgICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2sodmFsdWVQYWlyKVwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgW2F0dHIudHlwZV09XCInYnV0dG9uJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIHAtMSBmb250LWJvbGQgdGV4dC1sZ1wiPnt7dmFsdWVQYWlyPy5kZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgICA8c3B4LWJ1dHRvbiAoc3B4Q2xpY2spPVwidGhpcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2sodmFsdWVQYWlyKVwiIFtzcHhUeXBlXT1cIididXR0b24nXCIgW3NweFRhYkluZGV4XT1cIi0xXCI+U2VsZWN0PC9zcHgtYnV0dG9uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIFNweERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBmb2N1c1Bvc2l0aW9uID0gMDtcbiAgQElucHV0KCkgc3B4U3VnZ2VzdGlvbnM6IFNweFZhbHVlUGFpcjxib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nPltdID0gW107XG4gIEBPdXRwdXQoKSBzcHhTZWxlY3Q6IEV2ZW50RW1pdHRlcjxTcHhWYWx1ZVBhaXI8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPFNweFZhbHVlUGFpcjxhbnk+PigpO1xuICBzdWJzY3JpcHRpb25LZXlVcD86IFN1YnNjcmlwdGlvbjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlblRvS2V5VXAoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzUG9zaXRpb24gPSAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25LZXlVcD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljayh2YWx1ZVBhaXI6IFNweFZhbHVlUGFpcjxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPikge1xuICAgIHRoaXMuc2VsZWN0KHZhbHVlUGFpcik7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRvS2V5VXAoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25LZXlVcCA9IGZyb21FdmVudCh3aW5kb3csICdrZXl1cCcpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmICgoZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCkua2V5ID09PSAnQXJyb3dVcCcgJiYgdGhpcy5mb2N1c1Bvc2l0aW9uID4gMCkge1xuICAgICAgICB0aGlzLmZvY3VzUG9zaXRpb24gPSB0aGlzLmZvY3VzUG9zaXRpb24gLSAxO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgaWYgKChldmVudCBhcyBLZXlib2FyZEV2ZW50KS5rZXkgPT09ICdBcnJvd0Rvd24nICYmIHRoaXMuZm9jdXNQb3NpdGlvbiA8IHRoaXMuc3B4U3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmZvY3VzUG9zaXRpb24gPSB0aGlzLmZvY3VzUG9zaXRpb24gKyAxO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgaWYgKChldmVudCBhcyBLZXlib2FyZEV2ZW50KS5rZXkgPT09ICdFbnRlcicgJiYgdGhpcy5zcHhTdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc3B4U3VnZ2VzdGlvbnMuYXQodGhpcy5mb2N1c1Bvc2l0aW9uKSEpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3QodmFsdWVQYWlyOiBTcHhWYWx1ZVBhaXI8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4pOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzUG9zaXRpb24gPSAwO1xuICAgIHRoaXMuc3B4U2VsZWN0LmVtaXQodmFsdWVQYWlyKTtcbiAgfVxufVxuIl19