@kaufmann-lab/ui 0.1.18 → 0.1.19
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 +18 -1
- package/fesm2022/kaufmann-lab-ui-business.mjs +18 -3
- package/fesm2022/kaufmann-lab-ui-business.mjs.map +1 -1
- package/fesm2022/kaufmann-lab-ui-core.mjs +447 -15
- package/fesm2022/kaufmann-lab-ui-core.mjs.map +1 -1
- package/package.json +1 -1
- package/types/kaufmann-lab-ui-business.d.ts +16 -1
- package/types/kaufmann-lab-ui-core.d.ts +179 -8
- package/kaufmann-lab-ui-0.1.18.tgz +0 -0
package/package.json
CHANGED
|
@@ -247,6 +247,15 @@ declare class QuotePicker<T = unknown> {
|
|
|
247
247
|
* <kf-button actions icon="calendar">Reservar hora</kf-button>
|
|
248
248
|
* <kf-button actions variant="outline" icon="list">Ver agenda</kf-button>
|
|
249
249
|
* </kf-reserve-block>
|
|
250
|
+
*
|
|
251
|
+
* Para apps con router: escuchar `actionClick` y llamar
|
|
252
|
+
* `event.preventDefault()` antes de `router.navigateByUrl(...)`. El
|
|
253
|
+
* `actionHref` se mantiene igual para que click-medio, "abrir en pestaña
|
|
254
|
+
* nueva" y el hover de la barra de estado sigan funcionando.
|
|
255
|
+
*
|
|
256
|
+
* <kf-reserve-block title="¿Necesitas mantención?" actionLabel="Agenda tu reserva aquí"
|
|
257
|
+
* actionHref="/taller/agendar"
|
|
258
|
+
* (actionClick)="$event.preventDefault(); router.navigateByUrl('/taller/agendar')" />
|
|
250
259
|
*/
|
|
251
260
|
declare class ReserveBlock {
|
|
252
261
|
readonly emptyLabel: _angular_core.InputSignal<string>;
|
|
@@ -256,8 +265,14 @@ declare class ReserveBlock {
|
|
|
256
265
|
readonly actionHref: _angular_core.InputSignal<string | undefined>;
|
|
257
266
|
/** La invitación se estira para llenar la tarjeta (ej. junto a "Total de vehículos"). */
|
|
258
267
|
readonly grow: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
268
|
+
/**
|
|
269
|
+
* Click en el link de la invitación. Incluye el `MouseEvent` para que un
|
|
270
|
+
* consumidor con router pueda cortar la navegación nativa — mismo patrón
|
|
271
|
+
* que `itemClick` de `kf-breadcrumb`, sin depender de `@angular/router`.
|
|
272
|
+
*/
|
|
273
|
+
readonly actionClick: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
259
274
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ReserveBlock, never>;
|
|
260
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReserveBlock, "kf-reserve-block", never, { "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionHref": { "alias": "actionHref"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, {}, never, ["[actions]"], true, never>;
|
|
275
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReserveBlock, "kf-reserve-block", never, { "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionHref": { "alias": "actionHref"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; }, never, ["[actions]"], true, never>;
|
|
261
276
|
}
|
|
262
277
|
|
|
263
278
|
/**
|
|
@@ -383,6 +383,102 @@ declare class BucketProgress {
|
|
|
383
383
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BucketProgress, "kf-bucket-progress", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "summary": { "alias": "summary"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
384
384
|
}
|
|
385
385
|
|
|
386
|
+
/** Una celda ya resuelta de la grilla del mes. */
|
|
387
|
+
interface CalendarDay {
|
|
388
|
+
/** ISO date, `YYYY-MM-DD`. */
|
|
389
|
+
iso: string;
|
|
390
|
+
day: number;
|
|
391
|
+
inMonth: boolean;
|
|
392
|
+
selectable: boolean;
|
|
393
|
+
selected: boolean;
|
|
394
|
+
marked: boolean;
|
|
395
|
+
today: boolean;
|
|
396
|
+
ariaLabel: string;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Selector de fecha de un solo mes, con grilla semanal que parte en lunes.
|
|
400
|
+
*
|
|
401
|
+
* Las fechas viajan como strings ISO (`YYYY-MM-DD`, y `YYYY-MM` para el mes
|
|
402
|
+
* visible) y se calculan en UTC, así la zona horaria del navegador nunca
|
|
403
|
+
* corre una fecha un día.
|
|
404
|
+
*
|
|
405
|
+
* `availableDates` en `null` deja seleccionable toda fecha dentro de
|
|
406
|
+
* `min`/`max`; un arreglo deja seleccionables SOLO esas fechas (el resto se
|
|
407
|
+
* rinde deshabilitado). `markedDates` es independiente: agrega un punto
|
|
408
|
+
* marcador sin afectar si la fecha se puede elegir.
|
|
409
|
+
*
|
|
410
|
+
* Patrón WAI-ARIA `grid` con roving tabindex: las flechas mueven por
|
|
411
|
+
* día/semana, Home/End van al inicio/fin de la semana y PageUp/PageDown
|
|
412
|
+
* cambian de mes; el foco cruza los límites del mes.
|
|
413
|
+
*
|
|
414
|
+
* <kf-calendar
|
|
415
|
+
* [(value)]="date"
|
|
416
|
+
* [(month)]="month"
|
|
417
|
+
* [min]="today"
|
|
418
|
+
* [availableDates]="freeDates()"
|
|
419
|
+
* [markedDates]="eventDates()"
|
|
420
|
+
* [loading]="loadingAvailability()"
|
|
421
|
+
* >
|
|
422
|
+
* <p footer>Leyenda</p>
|
|
423
|
+
* </kf-calendar>
|
|
424
|
+
*/
|
|
425
|
+
declare class Calendar {
|
|
426
|
+
private static nextId;
|
|
427
|
+
/** Fecha seleccionada, ISO `YYYY-MM-DD`. */
|
|
428
|
+
readonly value: _angular_core.ModelSignal<string | null>;
|
|
429
|
+
/** Mes visible, `YYYY-MM`. En `null` se deriva de `value` y, si no hay, de hoy. */
|
|
430
|
+
readonly month: _angular_core.ModelSignal<string | null>;
|
|
431
|
+
/** Fecha mínima seleccionable (inclusive), ISO. */
|
|
432
|
+
readonly min: _angular_core.InputSignal<string | null>;
|
|
433
|
+
/** Fecha máxima seleccionable (inclusive), ISO. */
|
|
434
|
+
readonly max: _angular_core.InputSignal<string | null>;
|
|
435
|
+
/** `null`: toda fecha dentro de `min`/`max` es seleccionable. Arreglo: solo esas fechas. */
|
|
436
|
+
readonly availableDates: _angular_core.InputSignal<readonly string[] | null>;
|
|
437
|
+
/** Fechas con punto marcador, independiente de si son seleccionables. */
|
|
438
|
+
readonly markedDates: _angular_core.InputSignal<readonly string[]>;
|
|
439
|
+
/** Reemplaza el "hoy" local (tests/SSR), ISO. */
|
|
440
|
+
readonly today: _angular_core.InputSignal<string | null>;
|
|
441
|
+
/** Atenúa la grilla y bloquea la selección mientras carga la disponibilidad. */
|
|
442
|
+
readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
443
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
444
|
+
/** Los 12 nombres de mes, partiendo en enero. */
|
|
445
|
+
readonly monthNames: _angular_core.InputSignal<readonly string[]>;
|
|
446
|
+
/** Las 7 iniciales visibles de los días, partiendo en lunes. */
|
|
447
|
+
readonly weekdayLabels: _angular_core.InputSignal<readonly string[]>;
|
|
448
|
+
/** Los 7 nombres completos de los días, partiendo en lunes — se usan en los nombres accesibles. */
|
|
449
|
+
readonly weekdayNames: _angular_core.InputSignal<readonly string[]>;
|
|
450
|
+
/** Se agrega al nombre accesible de una fecha marcada. */
|
|
451
|
+
readonly markedLabel: _angular_core.InputSignal<string>;
|
|
452
|
+
readonly previousMonthLabel: _angular_core.InputSignal<string>;
|
|
453
|
+
readonly nextMonthLabel: _angular_core.InputSignal<string>;
|
|
454
|
+
private readonly host;
|
|
455
|
+
private readonly injector;
|
|
456
|
+
private readonly focusedDate;
|
|
457
|
+
protected readonly titleId: string;
|
|
458
|
+
protected readonly todayIso: _angular_core.Signal<string>;
|
|
459
|
+
protected readonly displayedMonth: _angular_core.Signal<string>;
|
|
460
|
+
protected readonly title: _angular_core.Signal<string>;
|
|
461
|
+
private readonly minMonth;
|
|
462
|
+
private readonly maxMonth;
|
|
463
|
+
protected readonly canGoPrevious: _angular_core.Signal<boolean>;
|
|
464
|
+
protected readonly canGoNext: _angular_core.Signal<boolean>;
|
|
465
|
+
private readonly availableSet;
|
|
466
|
+
private readonly markedSet;
|
|
467
|
+
protected readonly weeks: _angular_core.Signal<CalendarDay[][]>;
|
|
468
|
+
/** La única celda con `tabindex="0"` (roving tabindex). */
|
|
469
|
+
protected readonly activeDate: _angular_core.Signal<string>;
|
|
470
|
+
previousMonth(): void;
|
|
471
|
+
nextMonth(): void;
|
|
472
|
+
protected selectDay(day: CalendarDay): void;
|
|
473
|
+
protected onDayFocus(iso: string): void;
|
|
474
|
+
protected onDayKeydown(event: KeyboardEvent, iso: string): void;
|
|
475
|
+
private focusDay;
|
|
476
|
+
private isMonthNavigable;
|
|
477
|
+
private buildDay;
|
|
478
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Calendar, never>;
|
|
479
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Calendar, "kf-calendar", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "month": { "alias": "month"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "availableDates": { "alias": "availableDates"; "required": false; "isSignal": true; }; "markedDates": { "alias": "markedDates"; "required": false; "isSignal": true; }; "today": { "alias": "today"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "monthNames": { "alias": "monthNames"; "required": false; "isSignal": true; }; "weekdayLabels": { "alias": "weekdayLabels"; "required": false; "isSignal": true; }; "weekdayNames": { "alias": "weekdayNames"; "required": false; "isSignal": true; }; "markedLabel": { "alias": "markedLabel"; "required": false; "isSignal": true; }; "previousMonthLabel": { "alias": "previousMonthLabel"; "required": false; "isSignal": true; }; "nextMonthLabel": { "alias": "nextMonthLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "month": "monthChange"; }, never, ["[footer]"], true, never>;
|
|
480
|
+
}
|
|
481
|
+
|
|
386
482
|
/**
|
|
387
483
|
* Contenedor base con esquinas redondeadas y sombra sutil — la base visual
|
|
388
484
|
* de paneles, tarjetas de métrica, tablas y bloques de contenido de todo el
|
|
@@ -1670,6 +1766,9 @@ declare class Input implements ControlValueAccessor, AfterViewInit {
|
|
|
1670
1766
|
readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1671
1767
|
readonly type: _angular_core.InputSignal<string>;
|
|
1672
1768
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1769
|
+
/** Teclado virtual sugerido en mobile (ej. `"numeric"` para montos o
|
|
1770
|
+
* kilometraje) — sin valor, el navegador decide según `type`. */
|
|
1771
|
+
readonly inputmode: _angular_core.InputSignal<string | undefined>;
|
|
1673
1772
|
/** Agrega el botón de mostrar/ocultar — sin efecto si `type` no es `"password"`. */
|
|
1674
1773
|
readonly toggleable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1675
1774
|
protected readonly inputId: string;
|
|
@@ -1708,7 +1807,7 @@ declare class Input implements ControlValueAccessor, AfterViewInit {
|
|
|
1708
1807
|
*/
|
|
1709
1808
|
protected onTogglePasswordVisibility(): void;
|
|
1710
1809
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Input, never>;
|
|
1711
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Input, "kf-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "toggleable": { "alias": "toggleable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1810
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Input, "kf-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "inputmode": { "alias": "inputmode"; "required": false; "isSignal": true; }; "toggleable": { "alias": "toggleable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1712
1811
|
}
|
|
1713
1812
|
|
|
1714
1813
|
type JourneyStepStatus = 'done' | 'current' | 'delayed' | 'pending';
|
|
@@ -2087,6 +2186,16 @@ declare class Pagination {
|
|
|
2087
2186
|
* <kf-action-tile-row icon="download" title="Pagos" description="Revisa tu estado de cuenta y realiza pagos." />
|
|
2088
2187
|
* </kf-panel>
|
|
2089
2188
|
*
|
|
2189
|
+
* Para apps con router: escuchar `actionClick` y llamar
|
|
2190
|
+
* `event.preventDefault()` antes de `router.navigateByUrl(...)`. El
|
|
2191
|
+
* `actionHref` se mantiene igual para que click-medio, "abrir en pestaña
|
|
2192
|
+
* nueva" y el hover de la barra de estado sigan funcionando.
|
|
2193
|
+
*
|
|
2194
|
+
* <kf-panel title="Mis documentos por pagar" actionLabel="Ir a pagos" actionHref="/pagos"
|
|
2195
|
+
* (actionClick)="$event.preventDefault(); router.navigateByUrl('/pagos')">
|
|
2196
|
+
* …
|
|
2197
|
+
* </kf-panel>
|
|
2198
|
+
*
|
|
2090
2199
|
* El host y el `kf-card` interno son flex column con `flex:1` de punta a
|
|
2091
2200
|
* punta — si un grid/flex externo estira `kf-panel` a la altura de un
|
|
2092
2201
|
* hermano más alto, el contenido proyectado hereda esa altura en vez de
|
|
@@ -2098,8 +2207,14 @@ declare class Panel {
|
|
|
2098
2207
|
readonly title: _angular_core.InputSignal<string>;
|
|
2099
2208
|
readonly actionLabel: _angular_core.InputSignal<string | undefined>;
|
|
2100
2209
|
readonly actionHref: _angular_core.InputSignal<string | undefined>;
|
|
2210
|
+
/**
|
|
2211
|
+
* Click en el link de acción. Incluye el `MouseEvent` para que un
|
|
2212
|
+
* consumidor con router pueda cortar la navegación nativa — mismo patrón
|
|
2213
|
+
* que `itemClick` de `kf-breadcrumb`, sin depender de `@angular/router`.
|
|
2214
|
+
*/
|
|
2215
|
+
readonly actionClick: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
2101
2216
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Panel, never>;
|
|
2102
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Panel, "kf-panel", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionHref": { "alias": "actionHref"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2217
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Panel, "kf-panel", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionHref": { "alias": "actionHref"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; }, never, ["*"], true, never>;
|
|
2103
2218
|
}
|
|
2104
2219
|
|
|
2105
2220
|
/** Un ítem de navegación de la barra de marca. `icon` es opcional y solo se
|
|
@@ -2234,10 +2349,11 @@ declare class PortalHeader {
|
|
|
2234
2349
|
|
|
2235
2350
|
/** Mismo vocabulario que `Badge.tone`/`TextTone` (menos `info`/`service`,
|
|
2236
2351
|
* que no aplican a un valor de progreso): `neutral` es el color de marca
|
|
2237
|
-
* por defecto (sin implicar buen/mal estado), `
|
|
2238
|
-
*
|
|
2352
|
+
* por defecto (sin implicar buen/mal estado), `primary` es el color
|
|
2353
|
+
* primario para un avance de proceso (ej. una carga), y `ok`/`warn`/`error`
|
|
2354
|
+
* sí comunican severidad. La librería no conoce el dominio que produce ese
|
|
2239
2355
|
* valor (SLA, storage, lo que sea) — el consumidor decide qué tone usar. */
|
|
2240
|
-
type ProgressTone = 'neutral' | 'ok' | 'warn' | 'error';
|
|
2356
|
+
type ProgressTone = 'neutral' | 'primary' | 'ok' | 'warn' | 'error';
|
|
2241
2357
|
/**
|
|
2242
2358
|
* Barra de progreso de un solo valor (0-100%) con color por severidad —
|
|
2243
2359
|
* para un porcentaje simple, a diferencia de `kf-bucket-progress`, que
|
|
@@ -2860,12 +2976,18 @@ declare class StatTile {
|
|
|
2860
2976
|
readonly description: _angular_core.InputSignal<string | undefined>;
|
|
2861
2977
|
readonly actionLabel: _angular_core.InputSignal<string | undefined>;
|
|
2862
2978
|
readonly actionHref: _angular_core.InputSignal<string | undefined>;
|
|
2979
|
+
/**
|
|
2980
|
+
* Click en el link de la variante CTA. Incluye el `MouseEvent` para que un
|
|
2981
|
+
* consumidor con router pueda cortar la navegación nativa — mismo patrón
|
|
2982
|
+
* que `actionClick` de `kf-panel`, sin depender de `@angular/router`.
|
|
2983
|
+
*/
|
|
2984
|
+
readonly actionClick: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
2863
2985
|
/** Texto real de la nota. `null` significa "no reservar la línea": pasa
|
|
2864
2986
|
* solo cuando el consumidor no declaró ni nota ni placeholder. */
|
|
2865
2987
|
protected readonly noteText: _angular_core.Signal<string | null>;
|
|
2866
2988
|
protected readonly noteIsPlaceholder: _angular_core.Signal<boolean>;
|
|
2867
2989
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatTile, never>;
|
|
2868
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatTile, "kf-stat-tile", never, { "cta": { "alias": "cta"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "note": { "alias": "note"; "required": false; "isSignal": true; }; "notePlaceholder": { "alias": "notePlaceholder"; "required": false; "isSignal": true; }; "valueMissing": { "alias": "valueMissing"; "required": false; "isSignal": true; }; "hasProjectedValue": { "alias": "hasProjectedValue"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionHref": { "alias": "actionHref"; "required": false; "isSignal": true; }; }, {}, never, ["[valueContent]"], true, never>;
|
|
2990
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatTile, "kf-stat-tile", never, { "cta": { "alias": "cta"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "note": { "alias": "note"; "required": false; "isSignal": true; }; "notePlaceholder": { "alias": "notePlaceholder"; "required": false; "isSignal": true; }; "valueMissing": { "alias": "valueMissing"; "required": false; "isSignal": true; }; "hasProjectedValue": { "alias": "hasProjectedValue"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionHref": { "alias": "actionHref"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; }, never, ["[valueContent]"], true, never>;
|
|
2869
2991
|
}
|
|
2870
2992
|
|
|
2871
2993
|
/**
|
|
@@ -3073,6 +3195,55 @@ declare class TileGrid {
|
|
|
3073
3195
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TileGrid, "kf-tile-grid", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
3074
3196
|
}
|
|
3075
3197
|
|
|
3198
|
+
interface TimeSlot {
|
|
3199
|
+
value: string;
|
|
3200
|
+
/** Texto visible; por defecto, `value`. */
|
|
3201
|
+
label?: string;
|
|
3202
|
+
disabled?: boolean;
|
|
3203
|
+
/** Los horarios con el mismo `group` se rinden juntos bajo esa etiqueta, en orden de aparición. */
|
|
3204
|
+
group?: string;
|
|
3205
|
+
}
|
|
3206
|
+
/**
|
|
3207
|
+
* Grilla de horarios seleccionables con semántica de radiogroup: un solo tab
|
|
3208
|
+
* stop, las flechas mueven y seleccionan (saltando los deshabilitados) y
|
|
3209
|
+
* Home/End van al primer/último horario habilitado.
|
|
3210
|
+
*
|
|
3211
|
+
* Si algún horario declara `group`, se rinde un subgrupo con etiqueta por
|
|
3212
|
+
* cada grupo distinto; si no, una sola grilla plana.
|
|
3213
|
+
*
|
|
3214
|
+
* <kf-time-slot-picker
|
|
3215
|
+
* ariaLabel="Horario"
|
|
3216
|
+
* [slots]="[{ value: '09:00', group: 'Mañana' }, { value: '15:30', group: 'Tarde', disabled: true }]"
|
|
3217
|
+
* [(value)]="time"
|
|
3218
|
+
* [loading]="loadingSlots()"
|
|
3219
|
+
* />
|
|
3220
|
+
*/
|
|
3221
|
+
declare class TimeSlotPicker {
|
|
3222
|
+
private static nextId;
|
|
3223
|
+
readonly slots: _angular_core.InputSignal<readonly TimeSlot[]>;
|
|
3224
|
+
readonly value: _angular_core.ModelSignal<string | null>;
|
|
3225
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
3226
|
+
/** Muestra chips de carga en lugar de los horarios. */
|
|
3227
|
+
readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3228
|
+
readonly emptyLabel: _angular_core.InputSignal<string>;
|
|
3229
|
+
private readonly host;
|
|
3230
|
+
private readonly idPrefix;
|
|
3231
|
+
protected readonly skeletons: number[];
|
|
3232
|
+
protected readonly groups: _angular_core.Signal<{
|
|
3233
|
+
id: string;
|
|
3234
|
+
label: string | null;
|
|
3235
|
+
slots: readonly TimeSlot[];
|
|
3236
|
+
}[]>;
|
|
3237
|
+
/** Valores habilitados en orden visual — la secuencia de navegación por teclado. */
|
|
3238
|
+
private readonly enabledValues;
|
|
3239
|
+
/** El único chip con `tabindex="0"` (roving tabindex). */
|
|
3240
|
+
protected readonly tabStop: _angular_core.Signal<string>;
|
|
3241
|
+
protected select(slot: TimeSlot): void;
|
|
3242
|
+
protected onKeydown(event: KeyboardEvent, current: string): void;
|
|
3243
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimeSlotPicker, never>;
|
|
3244
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimeSlotPicker, "kf-time-slot-picker", never, { "slots": { "alias": "slots"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
3245
|
+
}
|
|
3246
|
+
|
|
3076
3247
|
/**
|
|
3077
3248
|
* Visual tone of a toast. Maps to the state tokens in
|
|
3078
3249
|
* projects/ui/src/tokens/base.css. `loading` has no auto-dismiss and shows an
|
|
@@ -3284,5 +3455,5 @@ declare class ViewToggle {
|
|
|
3284
3455
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViewToggle, "kf-view-toggle", never, { "view": { "alias": "view"; "required": true; "isSignal": true; }; }, { "viewChange": "viewChange"; }, never, never, true, never>;
|
|
3285
3456
|
}
|
|
3286
3457
|
|
|
3287
|
-
export { ActionTile, AdminBadge, Alert, AlertRow, Avatar, Badge, Breadcrumb, BucketProgress, Button, Card, Carousel, CarouselSlide, Checkbox, Chip, Collapsible, ContactPopover, ContentSlot, ContentState, ContentViewer, DEFAULT_PAGE_SIZE_OPTIONS, DataTable, Divider, DocumentRow, Drawer, Dropdown, DropdownItem, DropdownPanel, EmptyState, EventTimeline, FeatureCard, Field, FieldLabel, Filter, FilterChips, FolderTabs, FolderTabsPanel, Footer, FormatInputDirective, Icon, Input, JourneyStepper, Link, MetricCard, Modal, MultiSelect, NoteBlock, PageHeader, Pagination, Panel, PortalHeader, Progress, PulseDot, RowActions, SectionHeader, SectionNav, SectionNavItem, SectionNavSubsection, Segmented, Select, SelectableCardGroup, SidebarShell, Skeleton, Spinner, StatCard, StatTile, StatusPill, Tabs, Text, Textarea, TileGrid, ToastHost, ToastService, TooltipDirective, ViewToggle, dataTableViewSignal };
|
|
3288
|
-
export type { AlertRowTone, AlertTone, BreadcrumbItem, BucketProgressItem, ContentStateKind, ContentStateLoad, ContentViewerType, DataTableCardRole, DataTableColumn, DataTableDensity, DataTableSort, DataTableView, DividerOrientation, DocumentRowTone, DrawerSide, DropdownItemTone, DropdownPanelVariant, EventTimelineItem, EventTimelineTone, FilterFieldChange, FilterFieldConfig, FilterFieldType, FilterValue, FolderTabOption, FooterLink, IconName, IconRotation, IconSize, JourneyStep, JourneyStepStatus, JourneyStepperColorScheme, JourneyStepperSurface, LinkVariant, MultiSelectOption, NoteBlockTone, PageHeaderTitleSize, PaginationItem, PortalHeaderAdminAction, PortalHeaderNavItem, ProgressTone, RowAction, RowActionKind, RowActionsMode, SectionNavSubsectionData, SegmentedOption, SelectableCardOption, SidebarNavItemData, SkeletonVariant, SpinnerSize, StatCardTone, StatTileTone, StatTileVariant, TabOption, TextAs, TextTone, TextVariant, ToastAction, ToastOptions, ToastPromiseMessages, ToastState, ToastTone, TooltipPosition, ViewToggleOption };
|
|
3458
|
+
export { ActionTile, AdminBadge, Alert, AlertRow, Avatar, Badge, Breadcrumb, BucketProgress, Button, Calendar, Card, Carousel, CarouselSlide, Checkbox, Chip, Collapsible, ContactPopover, ContentSlot, ContentState, ContentViewer, DEFAULT_PAGE_SIZE_OPTIONS, DataTable, Divider, DocumentRow, Drawer, Dropdown, DropdownItem, DropdownPanel, EmptyState, EventTimeline, FeatureCard, Field, FieldLabel, Filter, FilterChips, FolderTabs, FolderTabsPanel, Footer, FormatInputDirective, Icon, Input, JourneyStepper, Link, MetricCard, Modal, MultiSelect, NoteBlock, PageHeader, Pagination, Panel, PortalHeader, Progress, PulseDot, RowActions, SectionHeader, SectionNav, SectionNavItem, SectionNavSubsection, Segmented, Select, SelectableCardGroup, SidebarShell, Skeleton, Spinner, StatCard, StatTile, StatusPill, Tabs, Text, Textarea, TileGrid, TimeSlotPicker, ToastHost, ToastService, TooltipDirective, ViewToggle, dataTableViewSignal };
|
|
3459
|
+
export type { AlertRowTone, AlertTone, BreadcrumbItem, BucketProgressItem, CalendarDay, ContentStateKind, ContentStateLoad, ContentViewerType, DataTableCardRole, DataTableColumn, DataTableDensity, DataTableSort, DataTableView, DividerOrientation, DocumentRowTone, DrawerSide, DropdownItemTone, DropdownPanelVariant, EventTimelineItem, EventTimelineTone, FilterFieldChange, FilterFieldConfig, FilterFieldType, FilterValue, FolderTabOption, FooterLink, IconName, IconRotation, IconSize, JourneyStep, JourneyStepStatus, JourneyStepperColorScheme, JourneyStepperSurface, LinkVariant, MultiSelectOption, NoteBlockTone, PageHeaderTitleSize, PaginationItem, PortalHeaderAdminAction, PortalHeaderNavItem, ProgressTone, RowAction, RowActionKind, RowActionsMode, SectionNavSubsectionData, SegmentedOption, SelectableCardOption, SidebarNavItemData, SkeletonVariant, SpinnerSize, StatCardTone, StatTileTone, StatTileVariant, TabOption, TextAs, TextTone, TextVariant, TimeSlot, ToastAction, ToastOptions, ToastPromiseMessages, ToastState, ToastTone, TooltipPosition, ViewToggleOption };
|
|
Binary file
|