@forgeroute/ui 0.4.11 → 0.4.12

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeroute/ui",
3
- "version": "0.4.11",
3
+ "version": "0.4.12",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
@@ -2279,7 +2279,7 @@ export declare class AudioPlayerComponent {
2279
2279
  /** Accessible name of the player. */
2280
2280
  readonly ariaLabel: import("@angular/core").InputSignal<string>;
2281
2281
  /** How much to load before play: 'metadata' (default), 'auto' or 'none'. */
2282
- readonly preload: import("@angular/core").InputSignal<"metadata" | "none" | "auto">;
2282
+ readonly preload: import("@angular/core").InputSignal<"none" | "auto" | "metadata">;
2283
2283
  /** Fires when the browser can't load or decode the source. */
2284
2284
  readonly playbackError: import("@angular/core").OutputEmitterRef<void>;
2285
2285
  protected readonly failed: import("@angular/core").WritableSignal<boolean>;
@@ -3506,7 +3506,7 @@ export declare class ButtonComponent {
3506
3506
  * `ghost-start`: a ghost button for list / section toggles - a full-width row with its content aligned to the start, transparent
3507
3507
  * background, hover tint and the normal focus ring. Pair it with `ariaExpanded` / `ariaPressed`; the label may contain a heading element.
3508
3508
  */
3509
- readonly variant: import("@angular/core").InputSignal<"link" | "primary" | "secondary" | "danger" | "warning" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
3509
+ readonly variant: import("@angular/core").InputSignal<"primary" | "secondary" | "danger" | "warning" | "link" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
3510
3510
  /** Renders an anchor to this route instead of a button (use with `variant="link"` for an inline text link). `['/settings']` or `'/settings'`. While `disabled` or `loading` it renders a non-clickable `<span role="link" aria-disabled>` with no href (like `href`). */
3511
3511
  readonly routerLink: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
3512
3512
  /** Query params of the `routerLink` (e.g. `{ section: 'deal-defaults' }`). */
@@ -3552,7 +3552,7 @@ export declare class ButtonComponent {
3552
3552
  readonly color: import("@angular/core").InputSignal<string | undefined>;
3553
3553
  readonly active: import("@angular/core").InputSignal<boolean>;
3554
3554
  readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xs">;
3555
- readonly type: import("@angular/core").InputSignal<"button" | "reset" | "submit">;
3555
+ readonly type: import("@angular/core").InputSignal<"reset" | "submit" | "button">;
3556
3556
  readonly disabled: import("@angular/core").InputSignal<boolean>;
3557
3557
  readonly loading: import("@angular/core").InputSignal<boolean>;
3558
3558
  readonly fullWidth: import("@angular/core").InputSignal<boolean>;
@@ -4105,7 +4105,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
4105
4105
  * `search`, `text`, `none`). Empty (default) = the browser's default for the field, except `type="tel"`, which keeps `tel`.
4106
4106
  * It only picks the keyboard; it does not restrict what can be typed or pasted.
4107
4107
  */
4108
- readonly inputmode: import("@angular/core").InputSignal<"" | "search" | "text" | "none" | "email" | "tel" | "url" | "decimal" | "numeric">;
4108
+ readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "text" | "search" | "email" | "tel" | "url" | "decimal" | "numeric">;
4109
4109
  readonly readonly: import("@angular/core").InputSignal<boolean>;
4110
4110
  readonly hint: import("@angular/core").InputSignal<string>;
4111
4111
  readonly error: import("@angular/core").InputSignal<string>;
@@ -5486,7 +5486,7 @@ export declare class DropdownComponent {
5486
5486
  readonly loader: import("@angular/core").InputSignal<(() => Promise<DropdownItem[]>) | null>;
5487
5487
  readonly active: import("@angular/core").InputSignal<boolean>;
5488
5488
  readonly activeValue: import("@angular/core").InputSignal<string>;
5489
- readonly variant: import("@angular/core").InputSignal<"button" | "badge">;
5489
+ readonly variant: import("@angular/core").InputSignal<"badge" | "button">;
5490
5490
  readonly menuWidth: import("@angular/core").InputSignal<string>;
5491
5491
  /**
5492
5492
  * Accessible name. Set it when the trigger has no meaningful visible text. Applied as `aria-label` on the
@@ -5684,7 +5684,7 @@ export declare class FormRowComponent {
5684
5684
  * child simply takes the full width. Keep a numeric span within the row's `cols` (use `all` for the whole row).
5685
5685
  */
5686
5686
  export declare class FormColSpanDirective {
5687
- readonly uiColSpan: import("@angular/core").InputSignal<"" | 2 | 3 | "2" | "3" | "all">;
5687
+ readonly uiColSpan: import("@angular/core").InputSignal<"" | "2" | "3" | 2 | 3 | "all">;
5688
5688
  protected readonly _class: import("@angular/core").Signal<string>;
5689
5689
  static ɵfac: i0.ɵɵFactoryDeclaration<FormColSpanDirective, never>;
5690
5690
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormColSpanDirective, "[uiColSpan]", never, {
@@ -9141,6 +9141,8 @@ declare const WEEK_DAY_LABELS: string[];
9141
9141
  declare function toDateStr(d: Date): string;
9142
9142
  /** `YYYY-MM-DD` → local Date at midnight (ISO local form, parsed the same way in every browser). */
9143
9143
  declare function fromDateStr(dateStr: string): Date;
9144
+ /** True for a real calendar day written as `YYYY-MM-DD` (rejects `2026-02-30`, `2026-1-5`, non-ISO text). */
9145
+ declare function isValidDateStr(dateStr: string): boolean;
9144
9146
  /** The 42 cells (6 weeks, Sunday first) of the month grid containing `anchor`. */
9145
9147
  declare function buildMonthCells(anchor: Date, todayStr: string): CalendarDay[];
9146
9148
  /** The 7 days (Sunday first) of the week containing `anchor`. */
@@ -9214,6 +9216,8 @@ export interface CalendarItem {
9214
9216
  strike?: boolean;
9215
9217
  /** Screen-reader name of the item's button; defaults to "<time> <title>". */
9216
9218
  ariaLabel?: string;
9219
+ /** Hover text (native `title`) of the item's button. Month chips default to the title; week / agenda items show none unless set. */
9220
+ tooltip?: string;
9217
9221
  }
9218
9222
  export interface CalendarFilter {
9219
9223
  value: string;
@@ -9250,7 +9254,8 @@ export interface CalendarSlotClick {
9250
9254
  * `ToastService` messages.
9251
9255
  *
9252
9256
  * Keyboard: the month grid is a real ARIA grid whose DAY CELLS have one tab stop (roving tabindex): arrows move by day/week, Home/End jump
9253
- * to the start/end of the week, Enter/Space on a day creates (when `canCreate`); the item buttons inside the cells stay in the Tab order.
9257
+ * to the start/end of the week, PageUp/PageDown move by one month (Shift+PageUp/PageDown by one year; the day of the month is kept, clamped to
9258
+ * the target month), Enter/Space on a day creates (when `canCreate`); the item buttons inside the cells stay in the Tab order.
9254
9259
  * In the week view each all-day cell and each day column has a visually hidden "+ Add" button that appears when focused; Enter/Space on it
9255
9260
  * creates (all-day, or the first visible hour). The initial `view` must be one of `views`.
9256
9261
  *
@@ -9279,6 +9284,9 @@ export declare class CalendarComponent {
9279
9284
  readonly canCreate: import("@angular/core").InputSignal<boolean>;
9280
9285
  /** Days before today cannot start a new item. */
9281
9286
  readonly disablePast: import("@angular/core").InputSignal<boolean>;
9287
+ /** Overrides "today" (`YYYY-MM-DD`): the highlighted day, `disablePast`, the agenda "Today" badge and what the Today button jumps to.
9288
+ * Use it when the server's date, not the browser's, decides what today is. Null / invalid = the browser clock. */
9289
+ readonly today: import("@angular/core").InputSignal<string | null>;
9282
9290
  /** Items shown per month cell before "+N more". */
9283
9291
  readonly maxVisible: import("@angular/core").InputSignal<number>;
9284
9292
  /** `inline`: time and title on one line. `stacked`: time on the first line, title below it (title hidden on phones). */
@@ -9305,11 +9313,14 @@ export declare class CalendarComponent {
9305
9313
  protected readonly weekDayNames: string[];
9306
9314
  protected readonly skeletonCells: number[];
9307
9315
  protected readonly formatHour: typeof formatHour;
9308
- /** Today as `YYYY-MM-DD`; refreshed at local midnight, when the tab becomes visible again and when the user presses Today. */
9309
- protected readonly todayStr: import("@angular/core").WritableSignal<string>;
9316
+ /** The browser clock's today as `YYYY-MM-DD`; refreshed at local midnight, when the tab becomes visible again and when the user presses Today. */
9317
+ private readonly clockToday;
9318
+ /** Today as `YYYY-MM-DD`: the `today` input when it is a valid date, else the browser clock. */
9319
+ protected readonly todayStr: import("@angular/core").Signal<string>;
9310
9320
  /** The month-grid day that holds the roving tab stop. */
9311
9321
  protected readonly focusedDate: import("@angular/core").WritableSignal<string | null>;
9312
9322
  private lastRangeKey;
9323
+ private readonly injector;
9313
9324
  protected readonly hours: import("@angular/core").Signal<number[]>;
9314
9325
  protected readonly monthCells: import("@angular/core").Signal<CalendarDay[]>;
9315
9326
  protected readonly weekDays: import("@angular/core").Signal<CalendarDay[]>;
@@ -9369,6 +9380,8 @@ export declare class CalendarComponent {
9369
9380
  protected onDateClick(dateStr: string): void;
9370
9381
  /** Grid keys on a day cell: arrows / Home / End move the tab stop, Enter / Space create. Keys on the chips inside never reach here. */
9371
9382
  protected onCellKey(event: KeyboardEvent, dateStr: string): void;
9383
+ /** PageUp / PageDown: the same day `months` away (clamped to the target month's length) becomes the anchor, the tab stop and the focus. */
9384
+ private jumpMonths;
9372
9385
  /** The hidden "+ Add" button of an all-day cell (keyboard / screen-reader path to the same action as clicking the cell). */
9373
9386
  protected onAddAllDay(dateStr: string, event: Event): void;
9374
9387
  /** The hidden "+ Add" button of a day column: creates at the first visible hour. */
@@ -9438,6 +9451,11 @@ export declare class CalendarComponent {
9438
9451
  "required": false;
9439
9452
  "isSignal": true;
9440
9453
  };
9454
+ "today": {
9455
+ "alias": "today";
9456
+ "required": false;
9457
+ "isSignal": true;
9458
+ };
9441
9459
  "maxVisible": {
9442
9460
  "alias": "maxVisible";
9443
9461
  "required": false;