@caribeng/ui 22.1.1 → 22.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -8
- package/fesm2022/caribeng-ui-accordion.mjs +2 -2
- package/fesm2022/caribeng-ui-anchor.mjs +169 -0
- package/fesm2022/caribeng-ui-autocomplete.mjs +10 -8
- package/fesm2022/caribeng-ui-avatargroup.mjs +9 -3
- package/fesm2022/caribeng-ui-blockui.mjs +12 -4
- package/fesm2022/caribeng-ui-breadcrumb.mjs +5 -2
- package/fesm2022/caribeng-ui-button.mjs +22 -2
- package/fesm2022/caribeng-ui-caribe-alert.mjs +5 -2
- package/fesm2022/caribeng-ui-caribe-animation-lottie.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-button-group.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-calendar.mjs +11 -6
- package/fesm2022/caribeng-ui-caribe-card-content.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-card-move.mjs +29 -7
- package/fesm2022/caribeng-ui-caribe-card-select.mjs +56 -14
- package/fesm2022/caribeng-ui-caribe-circle-loading.mjs +10 -7
- package/fesm2022/caribeng-ui-caribe-coachmark.mjs +42 -19
- package/fesm2022/caribeng-ui-caribe-data-table.mjs +15 -9
- package/fesm2022/caribeng-ui-caribe-dots-indicator.mjs +38 -5
- package/fesm2022/caribeng-ui-caribe-expansion-panel.mjs +16 -5
- package/fesm2022/caribeng-ui-caribe-fab-menu.mjs +56 -7
- package/fesm2022/caribeng-ui-caribe-file-download.mjs +68 -27
- package/fesm2022/caribeng-ui-caribe-file-select.mjs +22 -17
- package/fesm2022/caribeng-ui-caribe-float-menu.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-footer.mjs +8 -4
- package/fesm2022/caribeng-ui-caribe-header.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-icon-button.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-illustration.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-inline-alert.mjs +5 -2
- package/fesm2022/caribeng-ui-caribe-input-search.mjs +14 -10
- package/fesm2022/caribeng-ui-caribe-input-select.mjs +12 -10
- package/fesm2022/caribeng-ui-caribe-input-token.mjs +61 -11
- package/fesm2022/caribeng-ui-caribe-link.mjs +7 -2
- package/fesm2022/caribeng-ui-caribe-loader.mjs +8 -5
- package/fesm2022/caribeng-ui-caribe-modal.mjs +32 -16
- package/fesm2022/caribeng-ui-caribe-off-canvas.mjs +26 -12
- package/fesm2022/caribeng-ui-caribe-onboarding.mjs +44 -19
- package/fesm2022/caribeng-ui-caribe-pictogram.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-pop-over.mjs +34 -10
- package/fesm2022/caribeng-ui-caribe-preloader.mjs +9 -6
- package/fesm2022/caribeng-ui-caribe-progress-bar.mjs +5 -2
- package/fesm2022/caribeng-ui-caribe-shortcut.mjs +8 -3
- package/fesm2022/caribeng-ui-caribe-step-indicator.mjs +12 -5
- package/fesm2022/caribeng-ui-caribe-stroke.mjs +6 -3
- package/fesm2022/caribeng-ui-caribe-switch.mjs +5 -3
- package/fesm2022/caribeng-ui-caribe-tag-button.mjs +1 -1
- package/fesm2022/caribeng-ui-caribe-tracker.mjs +5 -2
- package/fesm2022/caribeng-ui-caribe-transaction-status.mjs +1 -1
- package/fesm2022/caribeng-ui-caribe-voucher.mjs +11 -8
- package/fesm2022/caribeng-ui-carousel.mjs +49 -14
- package/fesm2022/caribeng-ui-cascadeselect.mjs +22 -8
- package/fesm2022/caribeng-ui-chart.mjs +2598 -303
- package/fesm2022/caribeng-ui-chip.mjs +9 -4
- package/fesm2022/caribeng-ui-chips.mjs +9 -5
- package/fesm2022/caribeng-ui-colorpicker.mjs +9 -7
- package/fesm2022/caribeng-ui-confirmdialog.mjs +74 -9
- package/fesm2022/caribeng-ui-confirmpopup.mjs +134 -9
- package/fesm2022/caribeng-ui-contextmenu.mjs +6 -3
- package/fesm2022/caribeng-ui-dataview.mjs +211 -6
- package/fesm2022/caribeng-ui-datepicker.mjs +1630 -393
- package/fesm2022/caribeng-ui-descriptions.mjs +124 -0
- package/fesm2022/caribeng-ui-dialog.mjs +10 -7
- package/fesm2022/caribeng-ui-dock.mjs +6 -3
- package/fesm2022/caribeng-ui-drawer.mjs +10 -7
- package/fesm2022/caribeng-ui-dynamicdialog.mjs +210 -6
- package/fesm2022/caribeng-ui-editor.mjs +4392 -243
- package/fesm2022/caribeng-ui-empty.mjs +80 -0
- package/fesm2022/caribeng-ui-file-card.mjs +2 -2
- package/fesm2022/caribeng-ui-fileupload.mjs +96 -19
- package/fesm2022/caribeng-ui-floatlabel.mjs +4 -2
- package/fesm2022/caribeng-ui-folder-card.mjs +10 -3
- package/fesm2022/caribeng-ui-galleria.mjs +76 -45
- package/fesm2022/caribeng-ui-image.mjs +52 -29
- package/fesm2022/caribeng-ui-inplace.mjs +22 -6
- package/fesm2022/caribeng-ui-input-number.mjs +9 -7
- package/fesm2022/caribeng-ui-inputgroup.mjs +2 -2
- package/fesm2022/caribeng-ui-inputmask.mjs +14 -11
- package/fesm2022/caribeng-ui-inputotp.mjs +12 -6
- package/fesm2022/caribeng-ui-keyfilter.mjs +72 -0
- package/fesm2022/caribeng-ui-listbox.mjs +13 -11
- package/fesm2022/caribeng-ui-megamenu.mjs +222 -30
- package/fesm2022/caribeng-ui-menu.mjs +11 -5
- package/fesm2022/caribeng-ui-menubar.mjs +10 -5
- package/fesm2022/caribeng-ui-message.mjs +7 -4
- package/fesm2022/caribeng-ui-metergroup.mjs +29 -11
- package/fesm2022/caribeng-ui-multiselect.mjs +399 -97
- package/fesm2022/caribeng-ui-orderlist.mjs +230 -11
- package/fesm2022/caribeng-ui-organizationchart.mjs +12 -7
- package/fesm2022/caribeng-ui-paginator.mjs +18 -15
- package/fesm2022/caribeng-ui-panel.mjs +5 -2
- package/fesm2022/caribeng-ui-panelmenu.mjs +6 -3
- package/fesm2022/caribeng-ui-password.mjs +8 -6
- package/fesm2022/caribeng-ui-pdfviewer.mjs +1553 -0
- package/fesm2022/caribeng-ui-picklist.mjs +251 -14
- package/fesm2022/caribeng-ui-pricing.mjs +17 -14
- package/fesm2022/caribeng-ui-rating.mjs +7 -3
- package/fesm2022/caribeng-ui-repeater.mjs +223 -0
- package/fesm2022/caribeng-ui-result.mjs +91 -0
- package/fesm2022/caribeng-ui-scrollpanel.mjs +6 -3
- package/fesm2022/caribeng-ui-scrolltop.mjs +6 -3
- package/fesm2022/caribeng-ui-select.mjs +379 -87
- package/fesm2022/caribeng-ui-selectbutton.mjs +2 -2
- package/fesm2022/caribeng-ui-slider.mjs +171 -75
- package/fesm2022/caribeng-ui-speeddial.mjs +7 -4
- package/fesm2022/caribeng-ui-spinner.mjs +5 -2
- package/fesm2022/caribeng-ui-splitbutton.mjs +163 -0
- package/fesm2022/caribeng-ui-splitter.mjs +5 -2
- package/fesm2022/caribeng-ui-statistic.mjs +183 -0
- package/fesm2022/caribeng-ui-stepper.mjs +8 -5
- package/fesm2022/caribeng-ui-steps.mjs +6 -3
- package/fesm2022/caribeng-ui-table.mjs +708 -82
- package/fesm2022/caribeng-ui-tabmenu.mjs +6 -3
- package/fesm2022/caribeng-ui-tag.mjs +2 -2
- package/fesm2022/caribeng-ui-terminal.mjs +45 -9
- package/fesm2022/caribeng-ui-themetoggle.mjs +82 -0
- package/fesm2022/caribeng-ui-tieredmenu.mjs +9 -6
- package/fesm2022/caribeng-ui-timeline.mjs +175 -6
- package/fesm2022/caribeng-ui-toast.mjs +7 -4
- package/fesm2022/caribeng-ui-togglebutton.mjs +8 -6
- package/fesm2022/caribeng-ui-toolbar.mjs +6 -3
- package/fesm2022/caribeng-ui-tree.mjs +302 -6
- package/fesm2022/caribeng-ui-treeselect.mjs +26 -10
- package/fesm2022/caribeng-ui-treetable.mjs +269 -6
- package/fesm2022/caribeng-ui-virtualscroller.mjs +123 -10
- package/fesm2022/caribeng-ui.mjs +829 -6
- package/package.json +53 -3
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/index.js +125 -0
- package/schematics/ng-add/schema.js +2 -0
- package/schematics/ng-add/schema.json +66 -0
- package/styles/caribeng.css +380 -0
- package/styles/scss/_mixins.scss +46 -0
- package/styles/scss/_overlay.scss +15 -0
- package/styles/scss/_tokens.scss +267 -0
- package/styles/scss/_utilities.scss +73 -0
- package/styles/scss/_variables.scss +33 -0
- package/styles/scss/index.scss +16 -0
- package/types/caribeng-ui-anchor.d.ts +50 -0
- package/types/caribeng-ui-autocomplete.d.ts +4 -2
- package/types/caribeng-ui-avatargroup.d.ts +3 -1
- package/types/caribeng-ui-blockui.d.ts +9 -4
- package/types/caribeng-ui-breadcrumb.d.ts +3 -0
- package/types/caribeng-ui-button.d.ts +9 -1
- package/types/caribeng-ui-caribe-alert.d.ts +3 -0
- package/types/caribeng-ui-caribe-animation-lottie.d.ts +4 -1
- package/types/caribeng-ui-caribe-button-group.d.ts +4 -1
- package/types/caribeng-ui-caribe-calendar.d.ts +5 -1
- package/types/caribeng-ui-caribe-card-content.d.ts +4 -1
- package/types/caribeng-ui-caribe-card-move.d.ts +13 -13
- package/types/caribeng-ui-caribe-card-select.d.ts +10 -1
- package/types/caribeng-ui-caribe-circle-loading.d.ts +4 -1
- package/types/caribeng-ui-caribe-coachmark.d.ts +6 -0
- package/types/caribeng-ui-caribe-data-table.d.ts +7 -2
- package/types/caribeng-ui-caribe-dots-indicator.d.ts +9 -0
- package/types/caribeng-ui-caribe-expansion-panel.d.ts +7 -10
- package/types/caribeng-ui-caribe-fab-menu.d.ts +10 -1
- package/types/caribeng-ui-caribe-file-download.d.ts +8 -10
- package/types/caribeng-ui-caribe-file-select.d.ts +7 -1
- package/types/caribeng-ui-caribe-float-menu.d.ts +4 -1
- package/types/caribeng-ui-caribe-header.d.ts +3 -0
- package/types/caribeng-ui-caribe-icon-button.d.ts +4 -1
- package/types/caribeng-ui-caribe-illustration.d.ts +4 -1
- package/types/caribeng-ui-caribe-inline-alert.d.ts +3 -0
- package/types/caribeng-ui-caribe-input-search.d.ts +4 -2
- package/types/caribeng-ui-caribe-input-select.d.ts +4 -2
- package/types/caribeng-ui-caribe-input-token.d.ts +16 -1
- package/types/caribeng-ui-caribe-link.d.ts +3 -0
- package/types/caribeng-ui-caribe-loader.d.ts +4 -1
- package/types/caribeng-ui-caribe-modal.d.ts +7 -10
- package/types/caribeng-ui-caribe-off-canvas.d.ts +6 -1
- package/types/caribeng-ui-caribe-onboarding.d.ts +6 -0
- package/types/caribeng-ui-caribe-pictogram.d.ts +4 -1
- package/types/caribeng-ui-caribe-pop-over.d.ts +7 -10
- package/types/caribeng-ui-caribe-preloader.d.ts +4 -1
- package/types/caribeng-ui-caribe-progress-bar.d.ts +3 -0
- package/types/caribeng-ui-caribe-shortcut.d.ts +3 -1
- package/types/caribeng-ui-caribe-step-indicator.d.ts +6 -0
- package/types/caribeng-ui-caribe-stroke.d.ts +4 -1
- package/types/caribeng-ui-caribe-switch.d.ts +3 -1
- package/types/caribeng-ui-caribe-tracker.d.ts +3 -0
- package/types/caribeng-ui-caribe-voucher.d.ts +5 -2
- package/types/caribeng-ui-carousel.d.ts +10 -1
- package/types/caribeng-ui-cascadeselect.d.ts +7 -2
- package/types/caribeng-ui-chart.d.ts +469 -44
- package/types/caribeng-ui-chip.d.ts +6 -0
- package/types/caribeng-ui-chips.d.ts +6 -2
- package/types/caribeng-ui-colorpicker.d.ts +3 -1
- package/types/caribeng-ui-confirmdialog.d.ts +25 -6
- package/types/caribeng-ui-confirmpopup.d.ts +37 -5
- package/types/caribeng-ui-contextmenu.d.ts +4 -1
- package/types/caribeng-ui-dataview.d.ts +63 -5
- package/types/caribeng-ui-datepicker.d.ts +186 -21
- package/types/caribeng-ui-descriptions.d.ts +63 -0
- package/types/caribeng-ui-dialog.d.ts +4 -1
- package/types/caribeng-ui-dock.d.ts +4 -1
- package/types/caribeng-ui-drawer.d.ts +4 -1
- package/types/caribeng-ui-dynamicdialog.d.ts +93 -3
- package/types/caribeng-ui-editor.d.ts +486 -13
- package/types/caribeng-ui-empty.d.ts +34 -0
- package/types/caribeng-ui-file-card.d.ts +1 -1
- package/types/caribeng-ui-fileupload.d.ts +27 -4
- package/types/caribeng-ui-folder-card.d.ts +4 -1
- package/types/caribeng-ui-galleria.d.ts +9 -0
- package/types/caribeng-ui-image.d.ts +10 -0
- package/types/caribeng-ui-inplace.d.ts +8 -0
- package/types/caribeng-ui-input-number.d.ts +3 -1
- package/types/caribeng-ui-inputmask.d.ts +5 -0
- package/types/caribeng-ui-inputotp.d.ts +7 -2
- package/types/caribeng-ui-keyfilter.d.ts +30 -0
- package/types/caribeng-ui-listbox.d.ts +5 -3
- package/types/caribeng-ui-megamenu.d.ts +26 -2
- package/types/caribeng-ui-menu.d.ts +7 -2
- package/types/caribeng-ui-menubar.d.ts +5 -1
- package/types/caribeng-ui-message.d.ts +3 -0
- package/types/caribeng-ui-metergroup.d.ts +9 -1
- package/types/caribeng-ui-multiselect.d.ts +71 -10
- package/types/caribeng-ui-orderlist.d.ts +58 -6
- package/types/caribeng-ui-organizationchart.d.ts +7 -1
- package/types/caribeng-ui-paginator.d.ts +3 -0
- package/types/caribeng-ui-panel.d.ts +3 -0
- package/types/caribeng-ui-panelmenu.d.ts +4 -1
- package/types/caribeng-ui-password.d.ts +4 -2
- package/types/caribeng-ui-pdfviewer.d.ts +258 -0
- package/types/caribeng-ui-picklist.d.ts +67 -7
- package/types/caribeng-ui-pricing.d.ts +8 -5
- package/types/caribeng-ui-rating.d.ts +6 -2
- package/types/caribeng-ui-repeater.d.ts +79 -0
- package/types/caribeng-ui-result.d.ts +35 -0
- package/types/caribeng-ui-scrollpanel.d.ts +4 -1
- package/types/caribeng-ui-scrolltop.d.ts +4 -1
- package/types/caribeng-ui-select.d.ts +73 -9
- package/types/caribeng-ui-slider.d.ts +63 -10
- package/types/caribeng-ui-speeddial.d.ts +5 -2
- package/types/caribeng-ui-spinner.d.ts +3 -0
- package/types/caribeng-ui-splitbutton.d.ts +49 -0
- package/types/caribeng-ui-splitter.d.ts +3 -0
- package/types/caribeng-ui-statistic.d.ts +65 -0
- package/types/caribeng-ui-stepper.d.ts +3 -0
- package/types/caribeng-ui-steps.d.ts +4 -1
- package/types/caribeng-ui-table.d.ts +184 -16
- package/types/caribeng-ui-tabmenu.d.ts +4 -1
- package/types/caribeng-ui-terminal.d.ts +10 -0
- package/types/caribeng-ui-themetoggle.d.ts +32 -0
- package/types/caribeng-ui-tieredmenu.d.ts +5 -2
- package/types/caribeng-ui-timeline.d.ts +63 -4
- package/types/caribeng-ui-toast.d.ts +3 -0
- package/types/caribeng-ui-togglebutton.d.ts +5 -3
- package/types/caribeng-ui-toolbar.d.ts +7 -4
- package/types/caribeng-ui-tree.d.ts +76 -4
- package/types/caribeng-ui-treeselect.d.ts +10 -2
- package/types/caribeng-ui-treetable.d.ts +68 -4
- package/types/caribeng-ui-virtualscroller.d.ts +45 -5
- package/types/caribeng-ui.d.ts +501 -12
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
## ✨ Características
|
|
17
17
|
|
|
18
|
-
- **
|
|
18
|
+
- **152 componentes y directivas** standalone, cada uno en su propio entry point (`@caribeng/ui/button`, `@caribeng/ui/table`…): solo empaquetas lo que importas.
|
|
19
19
|
- **Angular moderno:** `input()` / `model()` / `output()` con Signals, `ChangeDetectionStrategy.OnPush` y compatible con apps zoneless.
|
|
20
20
|
- **Formularios sin fricción:** `ControlValueAccessor` en todos los controles; el error y el indicador de obligatorio se sincronizan solos con Angular Forms.
|
|
21
21
|
- **Accesibles:** roles y atributos ARIA, soporte de teclado y gestión de foco (WCAG 2.2 AA).
|
|
@@ -42,7 +42,23 @@ Navegadores: los mismos que [soporta Angular](https://angular.dev/reference/vers
|
|
|
42
42
|
- `@angular/cdk` se instala automáticamente como dependencia (overlays y accesibilidad).
|
|
43
43
|
- npm, yarn o pnpm.
|
|
44
44
|
|
|
45
|
-
###
|
|
45
|
+
### Instalación rápida (recomendada)
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
ng add @caribeng/ui
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Pregunta el idioma, el tema y el color primario, y deja el proyecto listo:
|
|
52
|
+
|
|
53
|
+
- instala `@caribeng/ui` (y `@angular/cdk`),
|
|
54
|
+
- registra `provideCaribeNG({ locale, theme, preset })` en `app.config.ts` (o en `AppModule`),
|
|
55
|
+
- añade `@caribeng/ui/styles.css` a los estilos de `angular.json`.
|
|
56
|
+
|
|
57
|
+
Se puede ejecutar sin preguntas: `ng add @caribeng/ui --locale=en --theme=system --preset=ocean --skip-confirmation`. Volver a ejecutarlo no duplica nada.
|
|
58
|
+
|
|
59
|
+
Después, salta al paso [3. Verifica la instalación](#3-verifica-la-instalación).
|
|
60
|
+
|
|
61
|
+
### Instalación manual
|
|
46
62
|
|
|
47
63
|
```bash
|
|
48
64
|
# npm
|
|
@@ -57,6 +73,8 @@ pnpm add @caribeng/ui
|
|
|
57
73
|
|
|
58
74
|
## 🔨 Uso
|
|
59
75
|
|
|
76
|
+
> Con `ng add @caribeng/ui` los pasos 1 y 2 ya están hechos.
|
|
77
|
+
|
|
60
78
|
### 1. Proveedor
|
|
61
79
|
|
|
62
80
|
Añade `provideCaribeNG()` a los providers de tu `app.config.ts`. Todas las opciones son opcionales:
|
|
@@ -131,6 +149,28 @@ Todos los controles funcionan con Reactive Forms y con formularios por plantilla
|
|
|
131
149
|
<cb-input label="Correo" formControlName="email" error="Ingresa un correo válido" />
|
|
132
150
|
```
|
|
133
151
|
|
|
152
|
+
## 🌐 Idioma (i18n)
|
|
153
|
+
|
|
154
|
+
Los textos de interfaz de los componentes (etiquetas accesibles, botones, placeholders y mensajes) vienen en **español** (por defecto) e **inglés**:
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
provideCaribeNG({
|
|
158
|
+
locale: 'en', // 'es' | 'en' | objeto CbTranslation propio
|
|
159
|
+
translation: { noResults: 'Nothing here yet' }, // sobrescribe textos sueltos
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Cambio en caliente, sin recargar:
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
import { inject } from '@angular/core';
|
|
167
|
+
import { CbLocaleService } from '@caribeng/ui';
|
|
168
|
+
|
|
169
|
+
inject(CbLocaleService).use('en');
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Un texto pasado por input (por ejemplo `placeholder` o `emptyMessage`) siempre tiene prioridad sobre el idioma.
|
|
173
|
+
|
|
134
174
|
## 🎨 Tema claro/oscuro y presets
|
|
135
175
|
|
|
136
176
|
```ts
|
|
@@ -169,15 +209,15 @@ providers: [provideCbIcons({ 'heart-pulse': heartPulse, rocket })];
|
|
|
169
209
|
|
|
170
210
|
## 📚 Catálogo
|
|
171
211
|
|
|
172
|
-
- **Form:** `autocomplete`, `button`, `cascadeselect`, `checkbox`, `chips`, `colorpicker`, `datepicker`, `editor`, `fileupload`, `floatlabel`, `iconfield`, `input`, `input-number`, `inputgroup`, `inputmask`, `inputotp`, `knob`, `listbox`, `multiselect`, `password`, `radio`, `rating`, `select`, `selectbutton`, `slider`, `textarea`, `toggle`, `togglebutton`, `treeselect`.
|
|
173
|
-
- **Data:** `dataview`, `orderlist`, `organizationchart`, `paginator`, `picklist`, `table`, `timeline`, `tree`, `treetable`, `virtualscroller`.
|
|
212
|
+
- **Form:** `autocomplete`, `button`, `cascadeselect`, `checkbox`, `chips`, `colorpicker`, `datepicker`, `editor`, `fileupload`, `floatlabel`, `iconfield`, `input`, `input-number`, `inputgroup`, `inputmask`, `inputotp`, `keyfilter`, `knob`, `listbox`, `multiselect`, `password`, `radio`, `rating`, `repeater`, `select`, `selectbutton`, `slider`, `textarea`, `toggle`, `togglebutton`, `treeselect`.
|
|
213
|
+
- **Data:** `dataview`, `descriptions`, `orderlist`, `organizationchart`, `paginator`, `picklist`, `statistic`, `table`, `timeline`, `tree`, `treetable`, `virtualscroller`.
|
|
174
214
|
- **Overlay:** `confirmdialog`, `confirmpopup`, `dialog`, `drawer`, `dynamicdialog`, `popover`, `tooltip`.
|
|
175
|
-
- **Messages:** `badge`, `chip`, `inlinemessage`, `message`, `tag`, `toast`.
|
|
176
|
-
- **Menu:** `breadcrumb`, `contextmenu`, `dock`, `megamenu`, `menu`, `menubar`, `panelmenu`, `speeddial`, `steps`, `tabmenu`, `tieredmenu`.
|
|
215
|
+
- **Messages:** `badge`, `chip`, `empty`, `inlinemessage`, `message`, `result`, `tag`, `toast`.
|
|
216
|
+
- **Menu:** `anchor`, `breadcrumb`, `contextmenu`, `dock`, `megamenu`, `menu`, `menubar`, `panelmenu`, `speeddial`, `splitbutton`, `steps`, `tabmenu`, `tieredmenu`.
|
|
177
217
|
- **Panel:** `accordion`, `card`, `divider`, `fieldset`, `panel`, `scrollpanel`, `scrolltop`, `splitter`, `stepper`, `tabs`, `toolbar`.
|
|
178
|
-
- **Media:** `avatar`, `avatargroup`, `carousel`, `galleria`, `image`.
|
|
218
|
+
- **Media:** `avatar`, `avatargroup`, `carousel`, `galleria`, `image`, `pdfviewer`.
|
|
179
219
|
- **Archivos y precios:** `file-card`, `folder-card`, `pricing`.
|
|
180
|
-
- **Misc y directivas:** `animateonscroll`, `autofocus`, `blockui`, `chart`, `focustrap`, `icon`, `icons`, `inplace`, `metergroup`, `progressbar`, `ripple`, `skeleton`, `spinner`, `styleclass`, `terminal`.
|
|
220
|
+
- **Misc y directivas:** `animateonscroll`, `autofocus`, `blockui`, `chart`, `focustrap`, `icon`, `icons`, `inplace`, `metergroup`, `progressbar`, `ripple`, `skeleton`, `spinner`, `styleclass`, `terminal`, `themetoggle`.
|
|
181
221
|
- **Caribe Design (`@caribeng/ui/caribe/*`):** `alert`, `animation-lottie`, `button-group`, `calendar`, `card-content`, `card-move`, `card-primary`, `card-select`, `circle-loading`, `coachmark`, `data-table`, `dots-indicator`, `expansion-panel`, `fab-menu`, `file-download`, `file-select`, `float-menu`, `footer`, `header`, `icon-button`, `illustration`, `inline-alert`, `input-date`, `input-search`, `input-select`, `input-token`, `link`, `loader`, `logo`, `modal`, `off-canvas`, `onboarding`, `pictogram`, `pop-over`, `preloader`, `progress-bar`, `shortcut`, `status`, `step-indicator`, `stroke`, `switch`, `tag-button`, `tracker`, `transaction-status`, `voucher`.
|
|
182
222
|
|
|
183
223
|
## 🧭 Próximos pasos
|
|
@@ -85,7 +85,7 @@ class CbAccordionPanel {
|
|
|
85
85
|
<div class="cb-accordion__inner"><ng-content /></div>
|
|
86
86
|
</div>
|
|
87
87
|
}
|
|
88
|
-
`, isInline: true, styles: [":host{display:block;color:var(--cb-color-text);font-family:var(--cb-font-sans)}:host+:host{border-top:var(--cb-border-width) solid var(--cb-color-border)}.cb-accordion__heading{margin:0}.cb-accordion__header{display:flex;align-items:center;justify-content:space-between;gap:var(--cb-space-3);width:100%;padding:var(--cb-space-3) var(--cb-space-4);border:none;background:transparent;color:inherit;font:inherit;font-weight:var(--cb-font-weight-medium);text-align:left;cursor:pointer;transition:background var(--cb-duration-fast) var(--cb-ease)}.cb-accordion__header:hover{background-color:var(--cb-color-surface-
|
|
88
|
+
`, isInline: true, styles: [":host{display:block;color:var(--cb-color-text);font-family:var(--cb-font-sans)}:host+:host{border-top:var(--cb-border-width) solid var(--cb-color-border)}.cb-accordion__heading{margin:0}.cb-accordion__header{display:flex;align-items:center;justify-content:space-between;gap:var(--cb-space-3);width:100%;padding:var(--cb-space-3) var(--cb-space-4);border:none;background:transparent;color:inherit;font:inherit;font-weight:var(--cb-font-weight-medium);text-align:left;cursor:pointer;transition:background var(--cb-duration-fast) var(--cb-ease)}.cb-accordion__header:hover{background-color:var(--cb-color-surface-subtle)}.cb-accordion__header:focus-visible{outline:2px solid var(--cb-color-focus-ring);outline-offset:-2px}.cb-accordion__header:disabled{opacity:var(--cb-opacity-disabled, .55);cursor:default}:host(.cb-is-open) .cb-accordion__header{background-color:var(--cb-color-surface-subtle)}.cb-accordion__chevron{flex:none;color:var(--cb-color-text-muted);transition:transform var(--cb-duration-fast) var(--cb-ease)}.cb-accordion__chevron.cb-is-open{transform:rotate(180deg)}.cb-accordion__content{overflow:hidden}.cb-accordion__inner{padding:0 var(--cb-space-4) var(--cb-space-4);color:var(--cb-color-text-muted);font-size:var(--cb-text-sm);line-height:var(--cb-line-height-normal)}\n"], dependencies: [{ kind: "component", type: CbIcon, selector: "cb-icon", inputs: ["name", "size", "spin", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
89
89
|
}
|
|
90
90
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbAccordionPanel, decorators: [{
|
|
91
91
|
type: Component,
|
|
@@ -118,7 +118,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
118
118
|
<div class="cb-accordion__inner"><ng-content /></div>
|
|
119
119
|
</div>
|
|
120
120
|
}
|
|
121
|
-
`, styles: [":host{display:block;color:var(--cb-color-text);font-family:var(--cb-font-sans)}:host+:host{border-top:var(--cb-border-width) solid var(--cb-color-border)}.cb-accordion__heading{margin:0}.cb-accordion__header{display:flex;align-items:center;justify-content:space-between;gap:var(--cb-space-3);width:100%;padding:var(--cb-space-3) var(--cb-space-4);border:none;background:transparent;color:inherit;font:inherit;font-weight:var(--cb-font-weight-medium);text-align:left;cursor:pointer;transition:background var(--cb-duration-fast) var(--cb-ease)}.cb-accordion__header:hover{background-color:var(--cb-color-surface-
|
|
121
|
+
`, styles: [":host{display:block;color:var(--cb-color-text);font-family:var(--cb-font-sans)}:host+:host{border-top:var(--cb-border-width) solid var(--cb-color-border)}.cb-accordion__heading{margin:0}.cb-accordion__header{display:flex;align-items:center;justify-content:space-between;gap:var(--cb-space-3);width:100%;padding:var(--cb-space-3) var(--cb-space-4);border:none;background:transparent;color:inherit;font:inherit;font-weight:var(--cb-font-weight-medium);text-align:left;cursor:pointer;transition:background var(--cb-duration-fast) var(--cb-ease)}.cb-accordion__header:hover{background-color:var(--cb-color-surface-subtle)}.cb-accordion__header:focus-visible{outline:2px solid var(--cb-color-focus-ring);outline-offset:-2px}.cb-accordion__header:disabled{opacity:var(--cb-opacity-disabled, .55);cursor:default}:host(.cb-is-open) .cb-accordion__header{background-color:var(--cb-color-surface-subtle)}.cb-accordion__chevron{flex:none;color:var(--cb-color-text-muted);transition:transform var(--cb-duration-fast) var(--cb-ease)}.cb-accordion__chevron.cb-is-open{transform:rotate(180deg)}.cb-accordion__content{overflow:hidden}.cb-accordion__inner{padding:0 var(--cb-space-4) var(--cb-space-4);color:var(--cb-color-text-muted);font-size:var(--cb-text-sm);line-height:var(--cb-line-height-normal)}\n"] }]
|
|
122
122
|
}], propDecorators: { header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
|
|
123
123
|
function toBoolean(value) {
|
|
124
124
|
return value !== false && value != null && `${value}` !== 'false';
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { inject, input, output, signal, afterNextRender, DestroyRef, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
|
+
import { injectCbTranslation } from '@caribeng/ui';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Anchor de CaribeNG: índice de la página ("En esta página") que resalta la
|
|
8
|
+
* sección visible (`aria-current="location"`) y, al hacer clic, desplaza hasta
|
|
9
|
+
* ella teniendo en cuenta una cabecera fija (`offset`) y le pasa el foco.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```html
|
|
13
|
+
* <cb-anchor [offset]="64" [links]="[
|
|
14
|
+
* { label: 'Resumen', href: '#resumen' },
|
|
15
|
+
* { label: 'Movimientos', href: '#movimientos', children: [{ label: 'Pendientes', href: '#pendientes' }] },
|
|
16
|
+
* ]" />
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
class CbAnchor {
|
|
20
|
+
constructor() {
|
|
21
|
+
/** Textos de interfaz en el idioma activo (`provideCaribeNG({ locale })`). */
|
|
22
|
+
this.t = injectCbTranslation();
|
|
23
|
+
this.document = inject(DOCUMENT);
|
|
24
|
+
this.links = input([], /* @ts-ignore */
|
|
25
|
+
...(ngDevMode ? [{ debugName: "links" }] : /* istanbul ignore next */ []));
|
|
26
|
+
/** Alto (px) de la cabecera fija que tapa la parte superior de la página. */
|
|
27
|
+
this.offset = input(0, /* @ts-ignore */
|
|
28
|
+
...(ngDevMode ? [{ debugName: "offset" }] : /* istanbul ignore next */ []));
|
|
29
|
+
/** Nombre de la navegación. Por defecto, "En esta página" del idioma activo. */
|
|
30
|
+
this.ariaLabel = input(undefined, /* @ts-ignore */
|
|
31
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
32
|
+
/** Se emite al cambiar la sección visible (su `href`). */
|
|
33
|
+
this.activeChange = output();
|
|
34
|
+
this.active = signal(null, /* @ts-ignore */
|
|
35
|
+
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
36
|
+
this.frame = 0;
|
|
37
|
+
this.onScroll = () => {
|
|
38
|
+
const win = this.document.defaultView;
|
|
39
|
+
if (!win || this.frame)
|
|
40
|
+
return;
|
|
41
|
+
this.frame = win.requestAnimationFrame(() => {
|
|
42
|
+
this.frame = 0;
|
|
43
|
+
this.update();
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
const win = this.document.defaultView;
|
|
47
|
+
afterNextRender(() => {
|
|
48
|
+
this.update();
|
|
49
|
+
win?.addEventListener('scroll', this.onScroll, { passive: true });
|
|
50
|
+
win?.addEventListener('resize', this.onScroll, { passive: true });
|
|
51
|
+
});
|
|
52
|
+
inject(DestroyRef).onDestroy(() => {
|
|
53
|
+
win?.removeEventListener('scroll', this.onScroll);
|
|
54
|
+
win?.removeEventListener('resize', this.onScroll);
|
|
55
|
+
if (this.frame)
|
|
56
|
+
win?.cancelAnimationFrame(this.frame);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** Sección activa: la última cuyo inicio ya pasó la línea de la cabecera fija. */
|
|
60
|
+
update() {
|
|
61
|
+
const line = this.offset() + 8;
|
|
62
|
+
let current = null;
|
|
63
|
+
for (const href of this.flatHrefs()) {
|
|
64
|
+
const target = this.target(href);
|
|
65
|
+
if (target && target.getBoundingClientRect().top <= line)
|
|
66
|
+
current = href;
|
|
67
|
+
}
|
|
68
|
+
current ??= this.flatHrefs()[0] ?? null;
|
|
69
|
+
if (current !== this.active()) {
|
|
70
|
+
this.active.set(current);
|
|
71
|
+
this.activeChange.emit(current);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Desplaza hasta la sección, deja el foco en ella y actualiza la URL. */
|
|
75
|
+
go(event, link) {
|
|
76
|
+
const target = this.target(link.href);
|
|
77
|
+
const win = this.document.defaultView;
|
|
78
|
+
if (!target || !win)
|
|
79
|
+
return;
|
|
80
|
+
event.preventDefault();
|
|
81
|
+
const reduce = win.matchMedia?.('(prefers-reduced-motion: reduce)').matches;
|
|
82
|
+
const top = target.getBoundingClientRect().top + win.scrollY - this.offset();
|
|
83
|
+
win.scrollTo({ top, behavior: reduce ? 'auto' : 'smooth' });
|
|
84
|
+
if (!target.hasAttribute('tabindex'))
|
|
85
|
+
target.setAttribute('tabindex', '-1');
|
|
86
|
+
target.focus({ preventScroll: true });
|
|
87
|
+
win.history?.replaceState?.(null, '', link.href);
|
|
88
|
+
this.active.set(link.href);
|
|
89
|
+
this.activeChange.emit(link.href);
|
|
90
|
+
}
|
|
91
|
+
flatHrefs() {
|
|
92
|
+
const out = [];
|
|
93
|
+
const walk = (links) => links.forEach((l) => {
|
|
94
|
+
out.push(l.href);
|
|
95
|
+
if (l.children)
|
|
96
|
+
walk(l.children);
|
|
97
|
+
});
|
|
98
|
+
walk(this.links());
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
target(href) {
|
|
102
|
+
const id = href.startsWith('#') ? decodeURIComponent(href.slice(1)) : '';
|
|
103
|
+
return id ? this.document.getElementById(id) : null;
|
|
104
|
+
}
|
|
105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbAnchor, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CbAnchor, isStandalone: true, selector: "cb-anchor", inputs: { links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeChange: "activeChange" }, host: { classAttribute: "cb-anchor" }, ngImport: i0, template: `
|
|
107
|
+
<nav class="cb-anchor__nav" [attr.aria-label]="ariaLabel() ?? t().onThisPage">
|
|
108
|
+
<ng-template #list let-links let-level="level">
|
|
109
|
+
<ul class="cb-anchor__list" [class.cb-anchor__list--nested]="level > 0">
|
|
110
|
+
@for (link of links; track link.href) {
|
|
111
|
+
<li>
|
|
112
|
+
<a
|
|
113
|
+
class="cb-anchor__link"
|
|
114
|
+
[class.cb-is-active]="active() === link.href"
|
|
115
|
+
[href]="link.href"
|
|
116
|
+
[attr.aria-current]="active() === link.href ? 'location' : null"
|
|
117
|
+
(click)="go($event, link)"
|
|
118
|
+
>
|
|
119
|
+
{{ link.label }}
|
|
120
|
+
</a>
|
|
121
|
+
@if (link.children?.length) {
|
|
122
|
+
<ng-container *ngTemplateOutlet="list; context: { $implicit: link.children, level: level + 1 }" />
|
|
123
|
+
}
|
|
124
|
+
</li>
|
|
125
|
+
}
|
|
126
|
+
</ul>
|
|
127
|
+
</ng-template>
|
|
128
|
+
<ng-container *ngTemplateOutlet="list; context: { $implicit: links(), level: 0 }" />
|
|
129
|
+
</nav>
|
|
130
|
+
`, isInline: true, styles: [":host{display:block;font-family:var(--cb-font-sans, inherit)}.cb-anchor__list{margin:0;padding:0;list-style:none;border-left:2px solid var(--cb-color-border)}.cb-anchor__list--nested{border-left:0}.cb-anchor__link{display:block;margin-left:-2px;padding:.3rem .75rem;font-size:var(--cb-text-sm, .875rem);color:var(--cb-color-text-muted);text-decoration:none;border-left:2px solid transparent;transition:color var(--cb-duration-fast, .12s) ease,border-color var(--cb-duration-fast, .12s) ease}.cb-anchor__list--nested .cb-anchor__link{padding-left:1.5rem}.cb-anchor__link:hover{color:var(--cb-color-text)}.cb-anchor__link.cb-is-active{font-weight:var(--cb-font-weight-medium, 500);color:var(--cb-color-primary-600, #059669);border-left-color:var(--cb-color-primary-500)}.cb-anchor__link:focus-visible{outline:2px solid var(--cb-color-focus-ring);outline-offset:-2px;border-radius:var(--cb-radius-sm, .25rem)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
131
|
+
}
|
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbAnchor, decorators: [{
|
|
133
|
+
type: Component,
|
|
134
|
+
args: [{ selector: 'cb-anchor', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, imports: [NgTemplateOutlet], host: { class: 'cb-anchor' }, template: `
|
|
135
|
+
<nav class="cb-anchor__nav" [attr.aria-label]="ariaLabel() ?? t().onThisPage">
|
|
136
|
+
<ng-template #list let-links let-level="level">
|
|
137
|
+
<ul class="cb-anchor__list" [class.cb-anchor__list--nested]="level > 0">
|
|
138
|
+
@for (link of links; track link.href) {
|
|
139
|
+
<li>
|
|
140
|
+
<a
|
|
141
|
+
class="cb-anchor__link"
|
|
142
|
+
[class.cb-is-active]="active() === link.href"
|
|
143
|
+
[href]="link.href"
|
|
144
|
+
[attr.aria-current]="active() === link.href ? 'location' : null"
|
|
145
|
+
(click)="go($event, link)"
|
|
146
|
+
>
|
|
147
|
+
{{ link.label }}
|
|
148
|
+
</a>
|
|
149
|
+
@if (link.children?.length) {
|
|
150
|
+
<ng-container *ngTemplateOutlet="list; context: { $implicit: link.children, level: level + 1 }" />
|
|
151
|
+
}
|
|
152
|
+
</li>
|
|
153
|
+
}
|
|
154
|
+
</ul>
|
|
155
|
+
</ng-template>
|
|
156
|
+
<ng-container *ngTemplateOutlet="list; context: { $implicit: links(), level: 0 }" />
|
|
157
|
+
</nav>
|
|
158
|
+
`, styles: [":host{display:block;font-family:var(--cb-font-sans, inherit)}.cb-anchor__list{margin:0;padding:0;list-style:none;border-left:2px solid var(--cb-color-border)}.cb-anchor__list--nested{border-left:0}.cb-anchor__link{display:block;margin-left:-2px;padding:.3rem .75rem;font-size:var(--cb-text-sm, .875rem);color:var(--cb-color-text-muted);text-decoration:none;border-left:2px solid transparent;transition:color var(--cb-duration-fast, .12s) ease,border-color var(--cb-duration-fast, .12s) ease}.cb-anchor__list--nested .cb-anchor__link{padding-left:1.5rem}.cb-anchor__link:hover{color:var(--cb-color-text)}.cb-anchor__link.cb-is-active{font-weight:var(--cb-font-weight-medium, 500);color:var(--cb-color-primary-600, #059669);border-left-color:var(--cb-color-primary-500)}.cb-anchor__link:focus-visible{outline:2px solid var(--cb-color-focus-ring);outline-offset:-2px;border-radius:var(--cb-radius-sm, .25rem)}\n"] }]
|
|
159
|
+
}], ctorParameters: () => [], propDecorators: { links: [{ type: i0.Input, args: [{ isSignal: true, alias: "links", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], activeChange: [{ type: i0.Output, args: ["activeChange"] }] } });
|
|
160
|
+
|
|
161
|
+
/*
|
|
162
|
+
* Public API Surface de @caribeng/ui/anchor
|
|
163
|
+
*/
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Generated bundle index. Do not edit.
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
export { CbAnchor };
|
|
@@ -3,7 +3,7 @@ import { model, input, output, signal, viewChild, computed, forwardRef, ViewEnca
|
|
|
3
3
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
4
|
import * as i1 from '@angular/cdk/overlay';
|
|
5
5
|
import { OverlayModule } from '@angular/cdk/overlay';
|
|
6
|
-
import { cbFieldState } from '@caribeng/ui';
|
|
6
|
+
import { injectCbTranslation, cbFieldState } from '@caribeng/ui';
|
|
7
7
|
import { CbIcon } from '@caribeng/ui/icon';
|
|
8
8
|
|
|
9
9
|
let nextUid = 0;
|
|
@@ -24,6 +24,8 @@ let nextUid = 0;
|
|
|
24
24
|
*/
|
|
25
25
|
class CbAutocomplete {
|
|
26
26
|
constructor() {
|
|
27
|
+
/** Textos de interfaz en el idioma activo (`provideCaribeNG({ locale })`). */
|
|
28
|
+
this.t = injectCbTranslation();
|
|
27
29
|
/** Valor seleccionado (two-way opcional fuera de Angular Forms). */
|
|
28
30
|
this.value = model(null, /* @ts-ignore */
|
|
29
31
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
@@ -48,7 +50,7 @@ class CbAutocomplete {
|
|
|
48
50
|
this.forceSelection = input(true, { ...(ngDevMode ? { debugName: "forceSelection" } : /* istanbul ignore next */ {}), transform: toBoolean });
|
|
49
51
|
/** Muestra un botón para desplegar todas las sugerencias. */
|
|
50
52
|
this.dropdown = input(false, { ...(ngDevMode ? { debugName: "dropdown" } : /* istanbul ignore next */ {}), transform: toBoolean });
|
|
51
|
-
this.emptyMessage = input(
|
|
53
|
+
this.emptyMessage = input(undefined, /* @ts-ignore */
|
|
52
54
|
...(ngDevMode ? [{ debugName: "emptyMessage" }] : /* istanbul ignore next */ []));
|
|
53
55
|
this.label = input('', /* @ts-ignore */
|
|
54
56
|
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
@@ -330,7 +332,7 @@ class CbAutocomplete {
|
|
|
330
332
|
type="button"
|
|
331
333
|
class="cb-autocomplete__dropdown-btn"
|
|
332
334
|
tabindex="-1"
|
|
333
|
-
aria-label="
|
|
335
|
+
[attr.aria-label]="t().showSuggestions"
|
|
334
336
|
[disabled]="isDisabled()"
|
|
335
337
|
(click)="onDropdownClick()"
|
|
336
338
|
>
|
|
@@ -366,7 +368,7 @@ class CbAutocomplete {
|
|
|
366
368
|
</li>
|
|
367
369
|
} @empty {
|
|
368
370
|
<li class="cb-autocomplete__empty" role="option" aria-disabled="true">
|
|
369
|
-
{{ emptyMessage() }}
|
|
371
|
+
{{ (emptyMessage() ?? t().noResults) }}
|
|
370
372
|
</li>
|
|
371
373
|
}
|
|
372
374
|
</ul>
|
|
@@ -382,7 +384,7 @@ class CbAutocomplete {
|
|
|
382
384
|
{{ hint() }}
|
|
383
385
|
</p>
|
|
384
386
|
}
|
|
385
|
-
`, isInline: true, styles: [":host{display:block}.cb-autocomplete__label{display:block;margin-bottom:var(--cb-space-1);font-family:var(--cb-font-sans);font-size:var(--cb-text-sm);font-weight:var(--cb-font-weight-medium);color:var(--cb-color-text)}.cb-autocomplete__required{color:var(--cb-color-danger);margin-left:2px}.cb-autocomplete{position:relative;display:flex;align-items:stretch;box-sizing:border-box;width:100%;background-color:var(--cb-color-bg);border:var(--cb-border-width) solid var(--cb-color-border-strong);border-radius:var(--cb-radius-md);transition:border-color var(--cb-duration-fast) var(--cb-ease),box-shadow var(--cb-duration-fast) var(--cb-ease)}.cb-autocomplete:hover:not(.cb-is-disabled):not(:focus-within){border-color:var(--cb-color-text-muted)}.cb-autocomplete:focus-within,.cb-autocomplete.cb-is-open{border-color:var(--cb-color-primary-500);box-shadow:0 0 0 3px color-mix(in srgb,var(--cb-color-primary-500) 25%,transparent)}.cb-autocomplete.cb-is-invalid{border-color:var(--cb-color-danger)}.cb-autocomplete.cb-is-invalid:focus-within,.cb-autocomplete.cb-is-invalid.cb-is-open{box-shadow:0 0 0 3px color-mix(in srgb,var(--cb-color-danger) 25%,transparent)}.cb-autocomplete.cb-is-disabled{background-color:var(--cb-color-surface);opacity:.8}.cb-autocomplete__field{flex:1 1 auto;min-width:0;box-sizing:border-box;font-family:var(--cb-font-sans);color:var(--cb-color-text);background:transparent;border:none;border-radius:inherit}.cb-autocomplete__field::placeholder{color:var(--cb-color-text-muted)}.cb-autocomplete__field:focus{outline:none}.cb-autocomplete__field:disabled{color:var(--cb-color-text-muted);cursor:not-allowed}.cb-autocomplete--sm .cb-autocomplete__field{min-height:2rem;padding:var(--cb-space-1) var(--cb-space-2);font-size:var(--cb-text-sm)}.cb-autocomplete--md .cb-autocomplete__field{min-height:2.5rem;padding:var(--cb-space-2) var(--cb-space-3);font-size:var(--cb-text-base)}.cb-autocomplete--lg .cb-autocomplete__field{min-height:3rem;padding:var(--cb-space-3) var(--cb-space-4);font-size:var(--cb-text-lg)}.cb-autocomplete__dropdown-btn{display:flex;flex:none;align-items:center;justify-content:center;width:2.5rem;padding:0;color:var(--cb-color-text-muted);background:transparent;border:none;border-left:var(--cb-border-width) solid var(--cb-color-border);cursor:pointer}.cb-autocomplete__dropdown-btn:hover:not(:disabled){color:var(--cb-color-text)}.cb-autocomplete__dropdown-btn:disabled{cursor:not-allowed;opacity:.5}.cb-autocomplete__dropdown-btn cb-icon{color:currentColor}.cb-autocomplete__panel{box-sizing:border-box;width:100%;background-color:var(--cb-color-surface-raised);border:1px solid var(--cb-color-border);border-radius:var(--cb-radius-md);box-shadow:var(--cb-shadow-md);overflow:hidden;font-family:var(--cb-font-sans)}.cb-autocomplete__list{list-style:none;margin:0;padding:var(--cb-space-1);max-height:16rem;overflow-y:auto}.cb-autocomplete__option{display:flex;align-items:center;padding:var(--cb-space-2) var(--cb-space-3);border-radius:var(--cb-radius-sm);font-size:var(--cb-text-base);color:var(--cb-color-text);cursor:pointer}.cb-autocomplete__option.cb-is-active{background-color:var(--cb-color-surface-
|
|
387
|
+
`, isInline: true, styles: [":host{display:block}.cb-autocomplete__label{display:block;margin-bottom:var(--cb-space-1);font-family:var(--cb-font-sans);font-size:var(--cb-text-sm);font-weight:var(--cb-font-weight-medium);color:var(--cb-color-text)}.cb-autocomplete__required{color:var(--cb-color-danger);margin-left:2px}.cb-autocomplete{position:relative;display:flex;align-items:stretch;box-sizing:border-box;width:100%;background-color:var(--cb-color-bg);border:var(--cb-border-width) solid var(--cb-color-border-strong);border-radius:var(--cb-radius-md);transition:border-color var(--cb-duration-fast) var(--cb-ease),box-shadow var(--cb-duration-fast) var(--cb-ease)}.cb-autocomplete:hover:not(.cb-is-disabled):not(:focus-within){border-color:var(--cb-color-text-muted)}.cb-autocomplete:focus-within,.cb-autocomplete.cb-is-open{border-color:var(--cb-color-primary-500);box-shadow:0 0 0 3px color-mix(in srgb,var(--cb-color-primary-500) 25%,transparent)}.cb-autocomplete.cb-is-invalid{border-color:var(--cb-color-danger)}.cb-autocomplete.cb-is-invalid:focus-within,.cb-autocomplete.cb-is-invalid.cb-is-open{box-shadow:0 0 0 3px color-mix(in srgb,var(--cb-color-danger) 25%,transparent)}.cb-autocomplete.cb-is-disabled{background-color:var(--cb-color-surface);opacity:.8}.cb-autocomplete__field{flex:1 1 auto;min-width:0;box-sizing:border-box;font-family:var(--cb-font-sans);color:var(--cb-color-text);background:transparent;border:none;border-radius:inherit}.cb-autocomplete__field::placeholder{color:var(--cb-color-text-muted)}.cb-autocomplete__field:focus{outline:none}.cb-autocomplete__field:disabled{color:var(--cb-color-text-muted);cursor:not-allowed}.cb-autocomplete--sm .cb-autocomplete__field{min-height:2rem;padding:var(--cb-space-1) var(--cb-space-2);font-size:var(--cb-text-sm)}.cb-autocomplete--md .cb-autocomplete__field{min-height:2.5rem;padding:var(--cb-space-2) var(--cb-space-3);font-size:var(--cb-text-base)}.cb-autocomplete--lg .cb-autocomplete__field{min-height:3rem;padding:var(--cb-space-3) var(--cb-space-4);font-size:var(--cb-text-lg)}.cb-autocomplete__dropdown-btn{display:flex;flex:none;align-items:center;justify-content:center;width:2.5rem;padding:0;color:var(--cb-color-text-muted);background:transparent;border:none;border-left:var(--cb-border-width) solid var(--cb-color-border);cursor:pointer}.cb-autocomplete__dropdown-btn:hover:not(:disabled){color:var(--cb-color-text)}.cb-autocomplete__dropdown-btn:disabled{cursor:not-allowed;opacity:.5}.cb-autocomplete__dropdown-btn cb-icon{color:currentColor}.cb-autocomplete__panel{box-sizing:border-box;width:100%;background-color:var(--cb-color-surface-raised);border:1px solid var(--cb-color-border);border-radius:var(--cb-radius-md);box-shadow:var(--cb-shadow-md);overflow:hidden;font-family:var(--cb-font-sans)}.cb-autocomplete__list{list-style:none;margin:0;padding:var(--cb-space-1);max-height:16rem;overflow-y:auto}.cb-autocomplete__option{display:flex;align-items:center;padding:var(--cb-space-2) var(--cb-space-3);border-radius:var(--cb-radius-sm);font-size:var(--cb-text-base);color:var(--cb-color-text);cursor:pointer}.cb-autocomplete__option.cb-is-active{background-color:var(--cb-color-surface-hover)}.cb-autocomplete__empty{padding:var(--cb-space-3);color:var(--cb-color-text-muted);font-size:var(--cb-text-sm);text-align:center}.cb-autocomplete__message{margin:var(--cb-space-1) 0 0;font-size:var(--cb-text-sm);line-height:var(--cb-line-height-normal)}.cb-autocomplete__message--hint{color:var(--cb-color-text-muted)}.cb-autocomplete__message--error{color:var(--cb-color-danger)}.cb-autocomplete__required--required,.cb-autocomplete__required--optional{margin-left:.25rem;color:var(--cb-color-text-muted);font-size:.85em;font-weight:var(--cb-font-weight-normal, 400)}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: CbIcon, selector: "cb-icon", inputs: ["name", "size", "spin", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
386
388
|
}
|
|
387
389
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbAutocomplete, decorators: [{
|
|
388
390
|
type: Component,
|
|
@@ -441,7 +443,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
441
443
|
type="button"
|
|
442
444
|
class="cb-autocomplete__dropdown-btn"
|
|
443
445
|
tabindex="-1"
|
|
444
|
-
aria-label="
|
|
446
|
+
[attr.aria-label]="t().showSuggestions"
|
|
445
447
|
[disabled]="isDisabled()"
|
|
446
448
|
(click)="onDropdownClick()"
|
|
447
449
|
>
|
|
@@ -477,7 +479,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
477
479
|
</li>
|
|
478
480
|
} @empty {
|
|
479
481
|
<li class="cb-autocomplete__empty" role="option" aria-disabled="true">
|
|
480
|
-
{{ emptyMessage() }}
|
|
482
|
+
{{ (emptyMessage() ?? t().noResults) }}
|
|
481
483
|
</li>
|
|
482
484
|
}
|
|
483
485
|
</ul>
|
|
@@ -493,7 +495,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
493
495
|
{{ hint() }}
|
|
494
496
|
</p>
|
|
495
497
|
}
|
|
496
|
-
`, styles: [":host{display:block}.cb-autocomplete__label{display:block;margin-bottom:var(--cb-space-1);font-family:var(--cb-font-sans);font-size:var(--cb-text-sm);font-weight:var(--cb-font-weight-medium);color:var(--cb-color-text)}.cb-autocomplete__required{color:var(--cb-color-danger);margin-left:2px}.cb-autocomplete{position:relative;display:flex;align-items:stretch;box-sizing:border-box;width:100%;background-color:var(--cb-color-bg);border:var(--cb-border-width) solid var(--cb-color-border-strong);border-radius:var(--cb-radius-md);transition:border-color var(--cb-duration-fast) var(--cb-ease),box-shadow var(--cb-duration-fast) var(--cb-ease)}.cb-autocomplete:hover:not(.cb-is-disabled):not(:focus-within){border-color:var(--cb-color-text-muted)}.cb-autocomplete:focus-within,.cb-autocomplete.cb-is-open{border-color:var(--cb-color-primary-500);box-shadow:0 0 0 3px color-mix(in srgb,var(--cb-color-primary-500) 25%,transparent)}.cb-autocomplete.cb-is-invalid{border-color:var(--cb-color-danger)}.cb-autocomplete.cb-is-invalid:focus-within,.cb-autocomplete.cb-is-invalid.cb-is-open{box-shadow:0 0 0 3px color-mix(in srgb,var(--cb-color-danger) 25%,transparent)}.cb-autocomplete.cb-is-disabled{background-color:var(--cb-color-surface);opacity:.8}.cb-autocomplete__field{flex:1 1 auto;min-width:0;box-sizing:border-box;font-family:var(--cb-font-sans);color:var(--cb-color-text);background:transparent;border:none;border-radius:inherit}.cb-autocomplete__field::placeholder{color:var(--cb-color-text-muted)}.cb-autocomplete__field:focus{outline:none}.cb-autocomplete__field:disabled{color:var(--cb-color-text-muted);cursor:not-allowed}.cb-autocomplete--sm .cb-autocomplete__field{min-height:2rem;padding:var(--cb-space-1) var(--cb-space-2);font-size:var(--cb-text-sm)}.cb-autocomplete--md .cb-autocomplete__field{min-height:2.5rem;padding:var(--cb-space-2) var(--cb-space-3);font-size:var(--cb-text-base)}.cb-autocomplete--lg .cb-autocomplete__field{min-height:3rem;padding:var(--cb-space-3) var(--cb-space-4);font-size:var(--cb-text-lg)}.cb-autocomplete__dropdown-btn{display:flex;flex:none;align-items:center;justify-content:center;width:2.5rem;padding:0;color:var(--cb-color-text-muted);background:transparent;border:none;border-left:var(--cb-border-width) solid var(--cb-color-border);cursor:pointer}.cb-autocomplete__dropdown-btn:hover:not(:disabled){color:var(--cb-color-text)}.cb-autocomplete__dropdown-btn:disabled{cursor:not-allowed;opacity:.5}.cb-autocomplete__dropdown-btn cb-icon{color:currentColor}.cb-autocomplete__panel{box-sizing:border-box;width:100%;background-color:var(--cb-color-surface-raised);border:1px solid var(--cb-color-border);border-radius:var(--cb-radius-md);box-shadow:var(--cb-shadow-md);overflow:hidden;font-family:var(--cb-font-sans)}.cb-autocomplete__list{list-style:none;margin:0;padding:var(--cb-space-1);max-height:16rem;overflow-y:auto}.cb-autocomplete__option{display:flex;align-items:center;padding:var(--cb-space-2) var(--cb-space-3);border-radius:var(--cb-radius-sm);font-size:var(--cb-text-base);color:var(--cb-color-text);cursor:pointer}.cb-autocomplete__option.cb-is-active{background-color:var(--cb-color-surface-
|
|
498
|
+
`, styles: [":host{display:block}.cb-autocomplete__label{display:block;margin-bottom:var(--cb-space-1);font-family:var(--cb-font-sans);font-size:var(--cb-text-sm);font-weight:var(--cb-font-weight-medium);color:var(--cb-color-text)}.cb-autocomplete__required{color:var(--cb-color-danger);margin-left:2px}.cb-autocomplete{position:relative;display:flex;align-items:stretch;box-sizing:border-box;width:100%;background-color:var(--cb-color-bg);border:var(--cb-border-width) solid var(--cb-color-border-strong);border-radius:var(--cb-radius-md);transition:border-color var(--cb-duration-fast) var(--cb-ease),box-shadow var(--cb-duration-fast) var(--cb-ease)}.cb-autocomplete:hover:not(.cb-is-disabled):not(:focus-within){border-color:var(--cb-color-text-muted)}.cb-autocomplete:focus-within,.cb-autocomplete.cb-is-open{border-color:var(--cb-color-primary-500);box-shadow:0 0 0 3px color-mix(in srgb,var(--cb-color-primary-500) 25%,transparent)}.cb-autocomplete.cb-is-invalid{border-color:var(--cb-color-danger)}.cb-autocomplete.cb-is-invalid:focus-within,.cb-autocomplete.cb-is-invalid.cb-is-open{box-shadow:0 0 0 3px color-mix(in srgb,var(--cb-color-danger) 25%,transparent)}.cb-autocomplete.cb-is-disabled{background-color:var(--cb-color-surface);opacity:.8}.cb-autocomplete__field{flex:1 1 auto;min-width:0;box-sizing:border-box;font-family:var(--cb-font-sans);color:var(--cb-color-text);background:transparent;border:none;border-radius:inherit}.cb-autocomplete__field::placeholder{color:var(--cb-color-text-muted)}.cb-autocomplete__field:focus{outline:none}.cb-autocomplete__field:disabled{color:var(--cb-color-text-muted);cursor:not-allowed}.cb-autocomplete--sm .cb-autocomplete__field{min-height:2rem;padding:var(--cb-space-1) var(--cb-space-2);font-size:var(--cb-text-sm)}.cb-autocomplete--md .cb-autocomplete__field{min-height:2.5rem;padding:var(--cb-space-2) var(--cb-space-3);font-size:var(--cb-text-base)}.cb-autocomplete--lg .cb-autocomplete__field{min-height:3rem;padding:var(--cb-space-3) var(--cb-space-4);font-size:var(--cb-text-lg)}.cb-autocomplete__dropdown-btn{display:flex;flex:none;align-items:center;justify-content:center;width:2.5rem;padding:0;color:var(--cb-color-text-muted);background:transparent;border:none;border-left:var(--cb-border-width) solid var(--cb-color-border);cursor:pointer}.cb-autocomplete__dropdown-btn:hover:not(:disabled){color:var(--cb-color-text)}.cb-autocomplete__dropdown-btn:disabled{cursor:not-allowed;opacity:.5}.cb-autocomplete__dropdown-btn cb-icon{color:currentColor}.cb-autocomplete__panel{box-sizing:border-box;width:100%;background-color:var(--cb-color-surface-raised);border:1px solid var(--cb-color-border);border-radius:var(--cb-radius-md);box-shadow:var(--cb-shadow-md);overflow:hidden;font-family:var(--cb-font-sans)}.cb-autocomplete__list{list-style:none;margin:0;padding:var(--cb-space-1);max-height:16rem;overflow-y:auto}.cb-autocomplete__option{display:flex;align-items:center;padding:var(--cb-space-2) var(--cb-space-3);border-radius:var(--cb-radius-sm);font-size:var(--cb-text-base);color:var(--cb-color-text);cursor:pointer}.cb-autocomplete__option.cb-is-active{background-color:var(--cb-color-surface-hover)}.cb-autocomplete__empty{padding:var(--cb-space-3);color:var(--cb-color-text-muted);font-size:var(--cb-text-sm);text-align:center}.cb-autocomplete__message{margin:var(--cb-space-1) 0 0;font-size:var(--cb-text-sm);line-height:var(--cb-line-height-normal)}.cb-autocomplete__message--hint{color:var(--cb-color-text-muted)}.cb-autocomplete__message--error{color:var(--cb-color-danger)}.cb-autocomplete__required--required,.cb-autocomplete__required--optional{margin-left:.25rem;color:var(--cb-color-text-muted);font-size:.85em;font-weight:var(--cb-font-weight-normal, 400)}\n"] }]
|
|
497
499
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], suggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "suggestions", required: false }] }], optionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionLabel", required: false }] }], optionValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionValue", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], forceSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "forceSelection", required: false }] }], dropdown: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropdown", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], requiredIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "requiredIndicator", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], complete: [{ type: i0.Output, args: ["complete"] }], optionSelected: [{ type: i0.Output, args: ["optionSelected"] }], triggerRef: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }], fieldRef: [{ type: i0.ViewChild, args: ['field', { isSignal: true }] }] } });
|
|
498
500
|
function toBoolean(value) {
|
|
499
501
|
return value !== false && value != null && `${value}` !== 'false';
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { input, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* AvatarGroup de CaribeNG: agrupa varios `<cb-avatar>` con superposición visual.
|
|
6
6
|
*/
|
|
7
7
|
class CbAvatarGroup {
|
|
8
|
+
constructor() {
|
|
9
|
+
/** Nombre accesible del grupo (p. ej. "Participantes"). */
|
|
10
|
+
this.ariaLabel = input(undefined, /* @ts-ignore */
|
|
11
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
12
|
+
}
|
|
8
13
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbAvatarGroup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
14
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: CbAvatarGroup, isStandalone: true, selector: "cb-avatar-group", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "ariaLabel() || null" }, classAttribute: "cb-avatar-group" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [".cb-avatar-group{display:inline-flex;align-items:center}.cb-avatar-group>cb-avatar{border:2px solid var(--cb-color-surface);border-radius:999px}.cb-avatar-group>cb-avatar+cb-avatar{margin-left:-.65rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
10
15
|
}
|
|
11
16
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbAvatarGroup, decorators: [{
|
|
12
17
|
type: Component,
|
|
13
18
|
args: [{ selector: 'cb-avatar-group', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
14
19
|
class: 'cb-avatar-group',
|
|
15
20
|
role: 'group',
|
|
21
|
+
'[attr.aria-label]': 'ariaLabel() || null',
|
|
16
22
|
}, template: `<ng-content />`, styles: [".cb-avatar-group{display:inline-flex;align-items:center}.cb-avatar-group>cb-avatar{border:2px solid var(--cb-color-surface);border-radius:999px}.cb-avatar-group>cb-avatar+cb-avatar{margin-left:-.65rem}\n"] }]
|
|
17
|
-
}] });
|
|
23
|
+
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
|
|
18
24
|
|
|
19
25
|
/**
|
|
20
26
|
* Generated bundle index. Do not edit.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import { CbIcon } from '@caribeng/ui/icon';
|
|
4
|
+
import { injectCbTranslation } from '@caribeng/ui';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* BlockUI de CaribeNG: bloquea la interacción sobre el contenido proyectado
|
|
@@ -8,20 +9,26 @@ import { CbIcon } from '@caribeng/ui/icon';
|
|
|
8
9
|
*/
|
|
9
10
|
class CbBlockUi {
|
|
10
11
|
constructor() {
|
|
12
|
+
/** Textos de interfaz en el idioma activo (`provideCaribeNG({ locale })`). */
|
|
13
|
+
this.t = injectCbTranslation();
|
|
11
14
|
this.blocked = input(false, /* @ts-ignore */
|
|
12
15
|
...(ngDevMode ? [{ debugName: "blocked" }] : /* istanbul ignore next */ []));
|
|
16
|
+
/** Texto que anuncia el lector de pantalla al bloquear. Por defecto, "Cargando" del idioma activo. */
|
|
17
|
+
this.message = input(undefined, /* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
13
19
|
}
|
|
14
20
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbBlockUi, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CbBlockUi, isStandalone: true, selector: "cb-block-ui", inputs: { blocked: { classPropertyName: "blocked", publicName: "blocked", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.cb-is-blocked": "blocked()", "attr.aria-busy": "blocked()" }, classAttribute: "cb-block-ui" }, ngImport: i0, template: `
|
|
21
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CbBlockUi, isStandalone: true, selector: "cb-block-ui", inputs: { blocked: { classPropertyName: "blocked", publicName: "blocked", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.cb-is-blocked": "blocked()", "attr.aria-busy": "blocked()" }, classAttribute: "cb-block-ui" }, ngImport: i0, template: `
|
|
16
22
|
<div class="cb-block-ui__content" [attr.inert]="blocked() ? '' : null">
|
|
17
23
|
<ng-content />
|
|
18
24
|
</div>
|
|
19
25
|
@if (blocked()) {
|
|
20
26
|
<div class="cb-block-ui__mask" role="status" aria-live="polite">
|
|
21
27
|
<cb-icon name="loader" [size]="22" [spin]="true" aria-hidden="true" />
|
|
28
|
+
<span class="cb-block-ui__sr">{{ message() ?? t().loading }}</span>
|
|
22
29
|
</div>
|
|
23
30
|
}
|
|
24
|
-
`, isInline: true, styles: [":host{position:relative;display:block;width:100%;font-family:var(--cb-font-sans)}.cb-block-ui__mask{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;border-radius:var(--cb-radius-lg);background:#0f172a59;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);color:#fff}\n"], dependencies: [{ kind: "component", type: CbIcon, selector: "cb-icon", inputs: ["name", "size", "spin", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31
|
+
`, isInline: true, styles: [":host{position:relative;display:block;width:100%;font-family:var(--cb-font-sans)}.cb-block-ui__mask{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;border-radius:var(--cb-radius-lg);background:#0f172a59;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);color:#fff}.cb-block-ui__sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "component", type: CbIcon, selector: "cb-icon", inputs: ["name", "size", "spin", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25
32
|
}
|
|
26
33
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbBlockUi, decorators: [{
|
|
27
34
|
type: Component,
|
|
@@ -36,10 +43,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
36
43
|
@if (blocked()) {
|
|
37
44
|
<div class="cb-block-ui__mask" role="status" aria-live="polite">
|
|
38
45
|
<cb-icon name="loader" [size]="22" [spin]="true" aria-hidden="true" />
|
|
46
|
+
<span class="cb-block-ui__sr">{{ message() ?? t().loading }}</span>
|
|
39
47
|
</div>
|
|
40
48
|
}
|
|
41
|
-
`, styles: [":host{position:relative;display:block;width:100%;font-family:var(--cb-font-sans)}.cb-block-ui__mask{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;border-radius:var(--cb-radius-lg);background:#0f172a59;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);color:#fff}\n"] }]
|
|
42
|
-
}], propDecorators: { blocked: [{ type: i0.Input, args: [{ isSignal: true, alias: "blocked", required: false }] }] } });
|
|
49
|
+
`, styles: [":host{position:relative;display:block;width:100%;font-family:var(--cb-font-sans)}.cb-block-ui__mask{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;border-radius:var(--cb-radius-lg);background:#0f172a59;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);color:#fff}.cb-block-ui__sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}\n"] }]
|
|
50
|
+
}], propDecorators: { blocked: [{ type: i0.Input, args: [{ isSignal: true, alias: "blocked", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }] } });
|
|
43
51
|
|
|
44
52
|
/**
|
|
45
53
|
* Generated bundle index. Do not edit.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, output, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import { CbIcon } from '@caribeng/ui/icon';
|
|
4
|
+
import { injectCbTranslation } from '@caribeng/ui';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Breadcrumb de CaribeNG: rastro de navegación jerárquica.
|
|
@@ -16,6 +17,8 @@ import { CbIcon } from '@caribeng/ui/icon';
|
|
|
16
17
|
*/
|
|
17
18
|
class CbBreadcrumb {
|
|
18
19
|
constructor() {
|
|
20
|
+
/** Textos de interfaz en el idioma activo (`provideCaribeNG({ locale })`). */
|
|
21
|
+
this.t = injectCbTranslation();
|
|
19
22
|
this.items = input([], /* @ts-ignore */
|
|
20
23
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
21
24
|
/** Icono separador entre elementos. */
|
|
@@ -26,7 +29,7 @@ class CbBreadcrumb {
|
|
|
26
29
|
}
|
|
27
30
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbBreadcrumb, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28
31
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: CbBreadcrumb, isStandalone: true, selector: "cb-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { classAttribute: "cb-breadcrumb" }, ngImport: i0, template: `
|
|
29
|
-
<nav aria-label="
|
|
32
|
+
<nav [attr.aria-label]="t().breadcrumb">
|
|
30
33
|
<ol class="cb-breadcrumb__list">
|
|
31
34
|
@for (item of items(); track $index; let last = $last) {
|
|
32
35
|
<li class="cb-breadcrumb__item">
|
|
@@ -53,7 +56,7 @@ class CbBreadcrumb {
|
|
|
53
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CbBreadcrumb, decorators: [{
|
|
54
57
|
type: Component,
|
|
55
58
|
args: [{ selector: 'cb-breadcrumb', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, imports: [CbIcon], host: { class: 'cb-breadcrumb' }, template: `
|
|
56
|
-
<nav aria-label="
|
|
59
|
+
<nav [attr.aria-label]="t().breadcrumb">
|
|
57
60
|
<ol class="cb-breadcrumb__list">
|
|
58
61
|
@for (item of items(); track $index; let last = $last) {
|
|
59
62
|
<li class="cb-breadcrumb__item">
|