@masterkeymaterial/ui 0.0.2 → 0.0.4

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 (140) hide show
  1. package/fesm2022/masterkeymaterial-ui.mjs +6457 -0
  2. package/fesm2022/masterkeymaterial-ui.mjs.map +1 -0
  3. package/package.json +14 -5
  4. package/types/masterkeymaterial-ui.d.ts +928 -0
  5. package/ng-package.json +0 -10
  6. package/src/elements/ui-button/ui-button.css +0 -229
  7. package/src/elements/ui-button/ui-button.html +0 -12
  8. package/src/elements/ui-button/ui-button.ts +0 -133
  9. package/src/elements/ui-check-box/ui-check-box.css +0 -66
  10. package/src/elements/ui-check-box/ui-check-box.html +0 -5
  11. package/src/elements/ui-check-box/ui-check-box.ts +0 -65
  12. package/src/elements/ui-chip/ui-chip.css +0 -24
  13. package/src/elements/ui-chip/ui-chip.html +0 -3
  14. package/src/elements/ui-chip/ui-chip.ts +0 -25
  15. package/src/elements/ui-drop-zone/ui-drop-zone.css +0 -91
  16. package/src/elements/ui-drop-zone/ui-drop-zone.html +0 -8
  17. package/src/elements/ui-drop-zone/ui-drop-zone.ts +0 -153
  18. package/src/elements/ui-file-list/ui-file-list.css +0 -43
  19. package/src/elements/ui-file-list/ui-file-list.html +0 -17
  20. package/src/elements/ui-file-list/ui-file-list.ts +0 -22
  21. package/src/elements/ui-list-errors/ui-list-errors.css +0 -30
  22. package/src/elements/ui-list-errors/ui-list-errors.html +0 -10
  23. package/src/elements/ui-list-errors/ui-list-errors.ts +0 -14
  24. package/src/elements/ui-loading/ui-loading.css +0 -13
  25. package/src/elements/ui-loading/ui-loading.html +0 -1
  26. package/src/elements/ui-loading/ui-loading.ts +0 -10
  27. package/src/elements/ui-menu/ui-menu.css +0 -69
  28. package/src/elements/ui-menu/ui-menu.html +0 -20
  29. package/src/elements/ui-menu/ui-menu.ts +0 -267
  30. package/src/elements/ui-procurar/ui-procurar.css +0 -48
  31. package/src/elements/ui-procurar/ui-procurar.html +0 -14
  32. package/src/elements/ui-procurar/ui-procurar.ts +0 -82
  33. package/src/elements/ui-progress/ui-progress.css +0 -0
  34. package/src/elements/ui-progress/ui-progress.html +0 -1
  35. package/src/elements/ui-progress/ui-progress.ts +0 -15
  36. package/src/elements/ui-select/ui-select.css +0 -211
  37. package/src/elements/ui-select/ui-select.html +0 -46
  38. package/src/elements/ui-select/ui-select.ts +0 -482
  39. package/src/elements/ui-slide/ui-slide.css +0 -75
  40. package/src/elements/ui-slide/ui-slide.html +0 -7
  41. package/src/elements/ui-slide/ui-slide.ts +0 -61
  42. package/src/fields/Base/BaseFieldsForm/BaseFieldsForm.component.ts +0 -113
  43. package/src/fields/Base/BaseFieldsValues/BaseFieldsValues.ts +0 -112
  44. package/src/fields/Formulario/Formulario.ts +0 -1056
  45. package/src/fields/Formulario/form-action/form-action.css +0 -98
  46. package/src/fields/Formulario/form-action/form-action.html +0 -75
  47. package/src/fields/Formulario/form-action/form-action.ts +0 -187
  48. package/src/fields/Formulario/form-controls/form-controls.css +0 -108
  49. package/src/fields/Formulario/form-controls/form-controls.html +0 -105
  50. package/src/fields/Formulario/form-controls/form-controls.ts +0 -122
  51. package/src/fields/Formulario/form-fase/form-fase.css +0 -84
  52. package/src/fields/Formulario/form-fase/form-fase.html +0 -24
  53. package/src/fields/Formulario/form-fase/form-fase.ts +0 -157
  54. package/src/fields/Formulario/form-filter/form-filter.css +0 -50
  55. package/src/fields/Formulario/form-filter/form-filter.html +0 -25
  56. package/src/fields/Formulario/form-filter/form-filter.ts +0 -53
  57. package/src/fields/Formulario/form-no-action/form-no-action.css +0 -32
  58. package/src/fields/Formulario/form-no-action/form-no-action.html +0 -12
  59. package/src/fields/Formulario/form-no-action/form-no-action.ts +0 -21
  60. package/src/fields/Formulario/formated-values/formated-values.css +0 -104
  61. package/src/fields/Formulario/formated-values/formated-values.html +0 -15
  62. package/src/fields/Formulario/formated-values/formated-values.ts +0 -186
  63. package/src/fields/Formulario/single-values/single-values.css +0 -88
  64. package/src/fields/Formulario/single-values/single-values.html +0 -11
  65. package/src/fields/Formulario/single-values/single-values.ts +0 -65
  66. package/src/fields/autocomplete/autocomplete.css +0 -94
  67. package/src/fields/autocomplete/autocomplete.html +0 -38
  68. package/src/fields/autocomplete/autocomplete.ts +0 -294
  69. package/src/fields/button/button.css +0 -7
  70. package/src/fields/button/button.html +0 -19
  71. package/src/fields/button/button.ts +0 -38
  72. package/src/fields/checkbox/checkbox.css +0 -27
  73. package/src/fields/checkbox/checkbox.html +0 -20
  74. package/src/fields/checkbox/checkbox.ts +0 -44
  75. package/src/fields/color/CirculoColorido/circulocolorido.css +0 -50
  76. package/src/fields/color/CirculoColorido/circulocolorido.html +0 -8
  77. package/src/fields/color/CirculoColorido/circulocolorido.ts +0 -24
  78. package/src/fields/color/color.css +0 -15
  79. package/src/fields/color/color.html +0 -24
  80. package/src/fields/color/color.ts +0 -47
  81. package/src/fields/date/date.html +0 -19
  82. package/src/fields/date/date.ts +0 -29
  83. package/src/fields/datetime/datetime.html +0 -19
  84. package/src/fields/datetime/datetime.ts +0 -29
  85. package/src/fields/display/display.css +0 -7
  86. package/src/fields/display/display.html +0 -20
  87. package/src/fields/display/display.ts +0 -43
  88. package/src/fields/editor/editor.css +0 -51
  89. package/src/fields/editor/editor.html +0 -37
  90. package/src/fields/editor/editor.ts +0 -218
  91. package/src/fields/email/email.html +0 -19
  92. package/src/fields/email/email.ts +0 -29
  93. package/src/fields/fields.css +0 -180
  94. package/src/fields/generic/generic.html +0 -3
  95. package/src/fields/generic/generic.ts +0 -91
  96. package/src/fields/hidden/hidden.html +0 -3
  97. package/src/fields/hidden/hidden.ts +0 -20
  98. package/src/fields/icon/icon.css +0 -19
  99. package/src/fields/icon/icon.html +0 -27
  100. package/src/fields/icon/icon.ts +0 -31
  101. package/src/fields/multifactor/multifactor.css +0 -21
  102. package/src/fields/multifactor/multifactor.html +0 -39
  103. package/src/fields/multifactor/multifactor.ts +0 -106
  104. package/src/fields/multikv/multikv.css +0 -43
  105. package/src/fields/multikv/multikv.html +0 -47
  106. package/src/fields/multikv/multikv.ts +0 -88
  107. package/src/fields/multitext/multitext.css +0 -36
  108. package/src/fields/multitext/multitext.html +0 -38
  109. package/src/fields/multitext/multitext.ts +0 -75
  110. package/src/fields/number/number.html +0 -20
  111. package/src/fields/number/number.ts +0 -35
  112. package/src/fields/password/password.html +0 -23
  113. package/src/fields/password/password.ts +0 -37
  114. package/src/fields/search/search.css +0 -0
  115. package/src/fields/search/search.html +0 -19
  116. package/src/fields/search/search.ts +0 -54
  117. package/src/fields/select/select.css +0 -15
  118. package/src/fields/select/select.html +0 -18
  119. package/src/fields/select/select.ts +0 -52
  120. package/src/fields/slide/slide.css +0 -27
  121. package/src/fields/slide/slide.html +0 -20
  122. package/src/fields/slide/slide.ts +0 -45
  123. package/src/fields/text/text.html +0 -19
  124. package/src/fields/text/text.ts +0 -30
  125. package/src/fields/textarea/textarea.css +0 -4
  126. package/src/fields/textarea/textarea.html +0 -20
  127. package/src/fields/textarea/textarea.ts +0 -31
  128. package/src/fields/time/time.html +0 -19
  129. package/src/fields/time/time.ts +0 -29
  130. package/src/fields/upload/upload.css +0 -24
  131. package/src/fields/upload/upload.html +0 -41
  132. package/src/fields/upload/upload.ts +0 -137
  133. package/src/interfaces/interfaces.ts +0 -61
  134. package/src/public-api.ts +0 -38
  135. package/src/util/ClassOf.pipe.ts +0 -11
  136. package/src/util/JsonColorido.pipe.ts +0 -11
  137. package/src/util/util.ts +0 -2151
  138. package/tsconfig.lib.json +0 -16
  139. package/tsconfig.lib.prod.json +0 -9
  140. package/tsconfig.spec.json +0 -13
@@ -1,186 +0,0 @@
1
- import { Component, computed, input, model } from '@angular/core';
2
- import { LibUtil, LOG } from '../../../util/util';
3
- import { IField, IFieldComponent } from '../Formulario';
4
-
5
- export type IModeShowEntidade = "centro" | "cantos" | "esquerda" | "grid" | "wrap";
6
-
7
- @Component({
8
- selector: 'ui-formated-values',
9
- templateUrl: './formated-values.html',
10
- styleUrls: ['./formated-values.css'],
11
- imports: [],
12
- })
13
- export class FormatedValues {
14
-
15
- campos = input<IFieldComponent<any>[] | undefined>();
16
- dados = input<any>();
17
- modo = model<IModeShowEntidade>("centro");
18
- especialKeys = input<string[] | undefined>();
19
- ignoreKeys = input<string[] | undefined>([]);
20
-
21
- camposFormatados = computed(() => {
22
- let campos = this.campos();
23
- let especialKeys = (this.especialKeys() ?? []).map(k => k.toLowerCase());
24
-
25
- let listaDados = campos?.map(campo => {
26
- let inputs: any = {};
27
- // let isInner: boolean = this.getIsInner(campo, inputs);
28
- let titulo = campo.titulo ?? campo.prop ?? "";
29
- return {
30
- ...campo,
31
- label: titulo + ':',
32
- value: this.getFormattedValue(campo) ?? "",
33
- // isInner,
34
- inputs,
35
- isEspecial: especialKeys.includes(campo.prop?.toLowerCase()),
36
- };
37
- }).filter(campo => !this.ignoreKeys()?.includes(campo.prop));
38
-
39
- // Ordena a lista colocando os isEspecial no final
40
- listaDados = listaDados?.sort((a, b) => {
41
- if (a.isEspecial && !b.isEspecial) return 1;
42
- if (!a.isEspecial && b.isEspecial) return -1;
43
- return 0;
44
- });
45
-
46
- // Retorna
47
- return listaDados;
48
- });
49
-
50
- // changeModoTo(modo: IModeShowEntidade) {
51
- // this.modo.set(modo);
52
- // }
53
-
54
- // getIsInner(campo: IFieldComponent<any>, inputs: any): boolean {
55
- // switch (campo.tipo) {
56
-
57
- // case IField.Upload:
58
- // inputs["file"] = this.dados()?.[campo.prop];
59
- // inputs["tipo"] = IMGTYPE.Generic;
60
- // inputs["h"] = 45;
61
- // return false;
62
-
63
- // default:
64
- // return true;
65
-
66
- // }
67
- // }
68
-
69
- getFormattedValue(campo: IFieldComponent<any>) {
70
- let value = this.dados()?.[campo.prop];
71
- if (value == null || value == undefined) return "";
72
-
73
- switch (campo.tipo) {
74
-
75
- case IField.AutoComplete:
76
- // A implementar...
77
- break;
78
-
79
-
80
- case IField.Button:
81
- // A implementar...
82
- break;
83
-
84
- case IField.Checkbox:
85
- value = value === true ? "Sim" : "Não";
86
- break;
87
-
88
- case IField.Color:
89
- // A implementar...
90
- break;
91
-
92
- case IField.Custom:
93
- LOG(1, "ShowEntidade: A exibição do custom não deve ser alterada por aqui. (Remover o aviso quando for implementar o custom)");
94
- break;
95
-
96
- case IField.Date:
97
- value = LibUtil.stringToDataBR(value)?.split(" ")[0];
98
- break;
99
-
100
- case IField.DateTime:
101
- value = LibUtil.stringToDataBR(value);
102
- break;
103
-
104
- case IField.Display:
105
- // A implementar...
106
- break;
107
-
108
- case IField.Editor:
109
- // A implementar...
110
- break;
111
-
112
- case IField.Email:
113
- // A implementar...
114
- break;
115
-
116
- case IField.Hidden:
117
- // A implementar...
118
- break;
119
-
120
- case IField.Icon:
121
- value = `<i class="${value}"></i>&nbsp; ${value}`;
122
- break;
123
-
124
- case IField.MultiFactor:
125
- // A implementar...
126
- break;
127
-
128
- case IField.MultiText:
129
- // A implementar...
130
- break;
131
-
132
- case IField.Number:
133
- // A implementar...
134
- break;
135
-
136
- case IField.Password:
137
- value = "••••••••";
138
- break;
139
-
140
- case IField.Referencia:
141
- if (campo.getDisplay) value = campo.getDisplay(value);
142
- break;
143
-
144
- case IField.Search:
145
- // A implementar...
146
- break;
147
-
148
- case IField.Select:
149
- let options = campo.options?.();
150
- let optionValue = options?.find(o => o.k == value)?.v
151
- optionValue ? value = `${optionValue}` : value = `${value}`;
152
- break;
153
-
154
- case IField.Slide:
155
- value = value == true ? "Sim" : "Não";
156
- break;
157
-
158
- case IField.Text:
159
- // A implementar...
160
- break;
161
-
162
- case IField.Upload:
163
- // A implementar...
164
- break;
165
-
166
- }
167
-
168
- // Estes abaixo só se aplicariam se o ShowEntidade fosse mais genérico.
169
- // switch (Util.classof(value)) {
170
- // case "boolean":
171
- // if (value === true) value = "Sim";
172
- // if (value === false) value = "Não";
173
- // break;
174
- // case "array":
175
- // if (value.length && value.length > 0) {
176
- // if (Util.classof(value[0]) == "object") {
177
- // value = `Lista com ${value.length} registros`
178
- // } else {
179
- // value = value.join(", ");
180
- // }
181
- // }
182
- // break;
183
- // }
184
- return value;
185
- }
186
- }
@@ -1,88 +0,0 @@
1
- .showEntidade {
2
- margin-top: 5px;
3
- }
4
-
5
- .linhaDado {
6
- border: 1px solid transparent;
7
- border-bottom: 1px dotted var(--sys-primary-15);
8
- }
9
-
10
- .titulo {
11
- font-weight: 600;
12
- }
13
-
14
- .linhaDado.isEspecial .titulo {
15
- color: var(--sys-secondary);
16
- }
17
-
18
- .conteudo {
19
- color: color-mix(in srgb, var(--sys-secondary) 50%, var(--sys-on-background) 50%);
20
- }
21
-
22
- .linhaDado:hover {
23
- border-bottom: 1px solid var(--sys-secondary);
24
- }
25
-
26
- .showEntidade.cantos .linhaDado {
27
- display: flex;
28
- flex-direction: row;
29
- justify-content: space-between;
30
- align-items: center;
31
- flex-wrap: wrap;
32
- gap: calc(var(--MasterGap) / 2);
33
- }
34
-
35
- .showEntidade.centro .linhaDado {
36
- display: grid;
37
- grid-template-columns: 1fr 1fr;
38
- gap: calc(var(--MasterGap) / 2);
39
- }
40
-
41
- .showEntidade.centro .titulo {
42
- text-align: end;
43
- }
44
-
45
- .showEntidade.esquerda .linhaDado {
46
- display: grid;
47
- grid-template-columns: auto 1fr;
48
- gap: calc(var(--MasterGap) / 2);
49
- }
50
-
51
-
52
- .showEntidade.grid {
53
- display: grid;
54
- grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
55
- gap: calc(var(--MasterGap) / 4);
56
- }
57
-
58
- .showEntidade.grid .linhaDado {
59
- display: flex;
60
- flex-direction: column;
61
- flex-wrap: wrap;
62
- border: 1px solid var(--sys-primary-15);
63
- border-radius: var(--MasterRadius);
64
- padding: calc(var(--MasterGap) / 2);
65
- }
66
-
67
- .showEntidade.grid .linhaDado:hover {
68
- border: 1px solid var(--sys-secondary);
69
- }
70
-
71
- .showEntidade.wrap {
72
- display: flex;
73
- flex-wrap: wrap;
74
- gap: calc(var(--MasterGap) / 2);
75
- }
76
-
77
- .showEntidade.wrap .linhaDado {
78
- display: flex;
79
- flex-direction: column;
80
- flex-wrap: wrap;
81
- border: 1px solid var(--sys-primary-15);
82
- border-radius: var(--MasterRadius);
83
- padding: calc(var(--MasterGap) / 2);
84
- }
85
-
86
- .showEntidade.wrap .linhaDado:hover {
87
- border: 1px solid var(--sys-secondary);
88
- }
@@ -1,11 +0,0 @@
1
- <div [class]="modo()" [class.showEntidade]="true">
2
-
3
-
4
- @for (dado of dadosAExibir(); track $index) {
5
- <div class="linhaDado" [class.isEspecial]="dado.isEspecial">
6
- <div class="titulo" [innerHTML]="dado.label"></div>
7
- <div class="conteudo" [innerHTML]="dado.value"></div>
8
- </div>
9
- }
10
-
11
- </div>
@@ -1,65 +0,0 @@
1
- import { Component, computed, input, model } from '@angular/core';
2
- import { LibUtil } from '../../../util/util';
3
- import { IModeShowEntidade } from '../formated-values/formated-values';
4
-
5
- @Component({
6
- selector: 'ui-single-values',
7
- templateUrl: './single-values.html',
8
- styleUrls: ['./single-values.css'],
9
- imports: [],
10
- })
11
- export class SingleValues {
12
-
13
- dados = input<any>();
14
- modo = model<IModeShowEntidade>("centro");
15
- especialKeys = input<string[] | undefined>();
16
-
17
- dadosAExibir = computed(() => {
18
- let dados = this.dados();
19
- let keys = Object.keys(dados ?? {}).sort();
20
- let especialKeys = (this.especialKeys() ?? []).map(k => k.toLowerCase());
21
-
22
- let listaDados = keys?.map(chave => {
23
- return {
24
- label: LibUtil.pascalCase(chave) + ':',
25
- value: this.getNormalizedValue(dados[chave]) ?? "",
26
- isEspecial: especialKeys.includes(chave.toLowerCase()),
27
- };
28
- });
29
-
30
- // Ordena a lista colocando os isEspecial no final
31
- listaDados = listaDados?.sort((a, b) => {
32
- if (a.isEspecial && !b.isEspecial) return 1;
33
- if (!a.isEspecial && b.isEspecial) return -1;
34
- return 0;
35
- });
36
-
37
- // Retorna
38
- return listaDados;
39
- });
40
-
41
- getNormalizedValue(value: any) {
42
- if (value == null || value == undefined) return "";
43
-
44
- let classofValue = LibUtil.classof(value);
45
-
46
- switch (classofValue) {
47
-
48
- case "object":
49
- value = `{ ... Objeto com ${Object.keys(value).length} itens }`
50
- break;
51
-
52
- case "array":
53
- if (value.length && value.length > 0) {
54
- if (LibUtil.classof(value[0]) == "object") {
55
- value = `[ ... Lista com ${value.length} registros ]`
56
- } else {
57
- value = value.join(", ");
58
- }
59
- }
60
- break;
61
-
62
- }
63
- return value;
64
- }
65
- }
@@ -1,94 +0,0 @@
1
- .FieldAutoComplete {
2
- position: relative;
3
- display: flex;
4
- }
5
-
6
- .FieldAutoComplete>div:first-child {
7
- flex: 1;
8
- display: flex;
9
- align-items: center;
10
- justify-content: space-between;
11
- }
12
-
13
- .FieldAutoComplete>div:first-child:focus {
14
- outline: 2px solid var(--campoCor);
15
- }
16
-
17
- .menuTrigger {
18
- width: 100%;
19
- height: 0px;
20
- }
21
-
22
- .select-options-container {
23
- width: max-content;
24
- position: fixed;
25
- z-index: 1000;
26
- display: flex;
27
- flex-direction: column;
28
- border-radius: 10px;
29
- overflow: hidden;
30
- }
31
-
32
- .select-options-container.open {
33
- color: var(--sys-on-background);
34
- background: var(--sys-background);
35
- outline: 1px solid var(--sys-outline);
36
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
37
- }
38
-
39
- .options-list {
40
- padding: 0;
41
- max-height: 300px;
42
- overflow-y: auto;
43
- }
44
-
45
- .option-item {
46
- display: flex;
47
- align-items: center;
48
- justify-content: space-between;
49
- padding: 15px 5px;
50
- margin-top: 3px;
51
- cursor: pointer;
52
- transition: background-color 0.2s;
53
- }
54
-
55
- .option-item.selected {
56
- background: color-mix(in srgb, var(--sys-primary) 50%, var(--sys-background) 50%);
57
- color: var(--sys-on-background);
58
- font-weight: 500;
59
- }
60
-
61
- .option-item.choosing {
62
- outline: none;
63
- background: color-mix(in srgb, var(--sys-primary) 20%, var(--sys-background) 80%);
64
- color: var(--sys-on-background);
65
- }
66
-
67
- .option-item:hover {
68
- background: color-mix(in srgb, var(--sys-primary) 20%, var(--sys-background) 80%);
69
- color: var(--sys-on-background);
70
- }
71
-
72
- .option-item-text {
73
- flex: 1;
74
- overflow: hidden;
75
- text-overflow: ellipsis;
76
- white-space: nowrap;
77
- user-select: none;
78
- }
79
-
80
- .option-item-check {
81
- width: 16px;
82
- height: 16px;
83
- margin: auto 2px;
84
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
85
- background-size: contain;
86
- background-repeat: no-repeat;
87
- background-position: center;
88
- flex-shrink: 0;
89
- visibility: hidden;
90
- }
91
-
92
- .option-item.selected .option-item-check {
93
- visibility: visible;
94
- }
@@ -1,38 +0,0 @@
1
- <div class="fieldContainer" [class.isTouched]="campo()?.touched" [class.showTouched]="form().showTouched()"
2
- [class.isInvalid]="campo()?.invalid" [class.isDisabled]="campo()?.disabled" [class.isReadonly]="campo()?.readonly"
3
- [class.isNeed]="campo()?.need" [class.isPending]="campo()?.pending" [class.isEmpty]="campo()?.empty">
4
- <div class="fieldLabel" (click)="onClickLabel()" [class.hideLabel]="campo()?.hideLabel">
5
- @if(campo()?.icone){ <div class="fieldIcon"><i [class]="campo()?.icone"></i></div> }
6
- {{ campo()?.titulo }}
7
- </div>
8
- <div class="fieldControl doCampo">
9
- <div class="fieldEffect">
10
- <div #triggerElement class="fieldField FieldAutoComplete">
11
- <div [class]="campo()?.classe" [style]="campo()?.style">
12
- <input type="text" [value]="value()" (input)="onInput($event.target.value)" (change)="onChangeEmit()"
13
- [name]="campo()?.prop" [disabled]="campo()?.disabled" [placeholder]="campo()?.placeholder ?? ''"
14
- [attr.maxLength]="campo()?.maxl" [attr.minLength]="campo()?.minl" [class]="campo()?.classe"
15
- [style]="campo()?.style" (keyup)="markKey($event)" (keydown.tab)="closeOverlay()" [class.outlined]="true"
16
- [class.input]="true" />
17
- </div>
18
- </div>
19
- </div>
20
- </div>
21
- <ui-list-errors [errors]="campo()?.errors" [dica]="campo()?.dica" [show]="campo()?.touched"></ui-list-errors>
22
- </div>
23
-
24
- <div #optionsContainer class="select-options-container" [class.open]="isOpenedOptions()"
25
- [style.left]="menuPosition().left" [style.top]="menuPosition().top">
26
- @if(isOpenedOptions()) {
27
- <div class="options-list">
28
- @for(option of optionsFiltered(); track option.k) {
29
- <div class="option-item" [class.selected]="option.selected" [style.width.px]="offsetWidth()" [title]="option.v"
30
- (click)="onSelectOption(option)" (keyup.Enter)="onSelectOption(option)" tabindex="-1"
31
- [class.choosing]="option.choosing">
32
- <div class="option-item-check"></div>
33
- <div class="option-item-text" [innerHTML]="option.html"></div>
34
- </div>
35
- }
36
- </div>
37
- }
38
- </div>