@truenas/ui-components 0.4.4 → 0.4.5

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.
@@ -2,7 +2,7 @@ import * as _truenas_ui_components from '@truenas/ui-components';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { Signal, InjectionToken, Renderer2, OnDestroy, ElementRef, AfterViewInit, OnInit, TemplateRef, AfterContentInit, Provider, ChangeDetectorRef, TrackByFunction, OnChanges, DoCheck, SimpleChanges, PipeTransform, ViewContainerRef, AfterViewChecked, ComponentRef } from '@angular/core';
4
4
  import { ControlValueAccessor, NgControl, AbstractControl } from '@angular/forms';
5
- import { ComponentHarness, BaseHarnessFilters, HarnessPredicate, TestKey, HarnessLoader } from '@angular/cdk/testing';
5
+ import { ComponentHarness, BaseHarnessFilters, HarnessPredicate, TestKey, HarnessLoader, ModifierKeys as ModifierKeys$1 } from '@angular/cdk/testing';
6
6
  import { SafeHtml, SafeResourceUrl, DomSanitizer } from '@angular/platform-browser';
7
7
  import { ComponentFixture } from '@angular/core/testing';
8
8
  import { SelectionModel, DataSource, CollectionViewer } from '@angular/cdk/collections';
@@ -7601,9 +7601,7 @@ declare class TnDateRangeInputComponent implements ControlValueAccessor, OnInit,
7601
7601
  endDayRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
7602
7602
  endYearRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
7603
7603
  calendarTemplate: _angular_core.Signal<TemplateRef<unknown>>;
7604
- calendar: _angular_core.Signal<TnCalendarComponent>;
7605
7604
  wrapperEl: _angular_core.Signal<ElementRef<HTMLDivElement>>;
7606
- private destroy$;
7607
7605
  private overlayRef?;
7608
7606
  private portal?;
7609
7607
  isOpen: _angular_core.WritableSignal<boolean>;
@@ -7617,9 +7615,9 @@ declare class TnDateRangeInputComponent implements ControlValueAccessor, OnInit,
7617
7615
  endDay: _angular_core.WritableSignal<string>;
7618
7616
  endYear: _angular_core.WritableSignal<string>;
7619
7617
  private currentFocus;
7620
- initialRange: _angular_core.Signal<DateRange>;
7621
7618
  private overlay;
7622
7619
  private viewContainerRef;
7620
+ private injector;
7623
7621
  ngOnInit(): void;
7624
7622
  ngOnDestroy(): void;
7625
7623
  writeValue(value: DateRange): void;
@@ -7649,60 +7647,473 @@ declare class TnCalendarComponent implements OnInit {
7649
7647
  minDate: _angular_core.InputSignal<Date | undefined>;
7650
7648
  maxDate: _angular_core.InputSignal<Date | undefined>;
7651
7649
  dateFilter: _angular_core.InputSignal<((date: Date) => boolean) | undefined>;
7650
+ /**
7651
+ * Dates to flag as noteworthy — days a task runs, days with events, and the like.
7652
+ * Order and time-of-day are ignored; only the calendar day is compared. The
7653
+ * calendar owns how a marked day looks, so callers pass dates rather than styles.
7654
+ * Marking is independent of `selected`/`selectedRange`, which stay authoritative
7655
+ * where they overlap.
7656
+ */
7657
+ markedDates: _angular_core.InputSignal<Date[] | undefined>;
7658
+ /**
7659
+ * Which month — or which page of years, in the year view — is on screen.
7660
+ *
7661
+ * Optional. Left unbound, the calendar opens on the month the bound value lives in and
7662
+ * drives navigation itself. Bind it, alongside `activeDateChange`, to drive the view
7663
+ * from outside: useful for a calendar that stays mounted while its value jumps to
7664
+ * another month, which the open-on-init behaviour alone won't follow.
7665
+ *
7666
+ * Unlike `selected`, this isn't strictly controlled — the calendar still navigates on
7667
+ * its own when the user pages or arrows around, so binding a constant here won't
7668
+ * freeze the view. Changing what you bind always wins.
7669
+ */
7670
+ activeDate: _angular_core.InputSignal<Date | undefined>;
7671
+ /**
7672
+ * Locale for dates, month and weekday names, and which day the week starts on.
7673
+ *
7674
+ * Defaults to the app's `LOCALE_ID`, which is where an Angular app already declares
7675
+ * its locale — so a `ng build --localize` app is right without touching this. Bind it
7676
+ * only when one calendar needs a different locale from the rest of the app.
7677
+ *
7678
+ * Nothing here reads the browser's language on its own: doing so would quietly
7679
+ * disagree with `DatePipe` and every other locale-aware part of the app. An app that
7680
+ * wants that behaviour opts into it once, at bootstrap:
7681
+ * `{ provide: LOCALE_ID, useValue: navigator.language }`.
7682
+ *
7683
+ * Wording that isn't a date — "(marked)", the header button labels — comes from
7684
+ * `TN_CALENDAR_INTL` instead.
7685
+ */
7686
+ locale: _angular_core.InputSignal<string | undefined>;
7687
+ private appLocale;
7688
+ private host;
7689
+ private injector;
7690
+ /** The locale actually in force: the input when bound, the app's otherwise. */
7691
+ protected resolvedLocale: _angular_core.Signal<string>;
7652
7692
  rangeMode: _angular_core.InputSignal<boolean>;
7653
7693
  selectedRange: _angular_core.InputSignal<DateRange | undefined>;
7654
7694
  selectedChange: _angular_core.OutputEmitterRef<Date>;
7695
+ /**
7696
+ * The date the calendar is now sitting on — the month it shows, and the day holding
7697
+ * the grid's roving tabindex.
7698
+ *
7699
+ * This is navigation, not selection: it fires on paging, on arrow keys, and on
7700
+ * clicking a day (a click moves the active cell as well as choosing the date, so the
7701
+ * two never drift apart). Treat it as "the view moved", not "the user picked a date" —
7702
+ * `selectedChange` is the one that means a choice was made.
7703
+ */
7655
7704
  activeDateChange: _angular_core.OutputEmitterRef<Date>;
7656
7705
  viewChanged: _angular_core.OutputEmitterRef<"month" | "year">;
7657
7706
  selectedRangeChange: _angular_core.OutputEmitterRef<DateRange>;
7707
+ /**
7708
+ * Which month/year grid is on screen. Navigation state, not selection state.
7709
+ *
7710
+ * Follows the `activeDate` input whenever the caller changes it, but stays writable so
7711
+ * paging and arrow keys keep working with no echo back from the caller.
7712
+ */
7658
7713
  currentDate: _angular_core.WritableSignal<Date>;
7659
7714
  currentView: _angular_core.WritableSignal<"month" | "year">;
7660
- rangeState: _angular_core.WritableSignal<{
7661
- start: Date | null;
7662
- end: Date | null;
7663
- selecting: "start" | "end";
7664
- }>;
7665
- private userHasInteracted;
7666
- constructor();
7667
7715
  ngOnInit(): void;
7668
- private initializeRangeState;
7669
- onMonthSelected(month: number): void;
7670
- onYearSelected(year: number): void;
7671
7716
  onViewChanged(view: 'month' | 'year'): void;
7672
7717
  onPreviousClicked(): void;
7673
7718
  onNextClicked(): void;
7719
+ /**
7720
+ * Steps the view one page in `direction`: a month in the day view, a page of years in
7721
+ * the year view — the same spans `PageUp`/`PageDown` move, and the same the header
7722
+ * labels.
7723
+ *
7724
+ * Carries the day across, clamped, rather than dropping to the 1st. The keyboard has
7725
+ * always done this, so resetting here left the roving tabindex somewhere different
7726
+ * depending on whether the user clicked the arrow or pressed the key.
7727
+ */
7728
+ private page;
7674
7729
  onSelectedChange(date: Date): void;
7730
+ /**
7731
+ * Works out the next range from the one the caller currently owns and emits it. The
7732
+ * calendar keeps no copy — what it renders next is whatever the caller binds back.
7733
+ */
7675
7734
  private handleRangeSelection;
7676
7735
  onActiveDateChange(date: Date): void;
7677
- onYearSelectedFromView(date: Date): void;
7678
7736
  /**
7679
- * Reset the calendar to accept external range values - called when calendar reopens
7737
+ * A year picked in the year grid moves the view to that year and returns to the day
7738
+ * grid. It is navigation, not selection — no `selectedChange` — so the user lands on
7739
+ * the month they asked for and picks a day from there.
7680
7740
  */
7681
- resetInteractionState(): void;
7741
+ onYearSelectedFromView(date: Date): void;
7682
7742
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnCalendarComponent, never>;
7683
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCalendarComponent, "tn-calendar", never, { "startView": { "alias": "startView"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "rangeMode": { "alias": "rangeMode"; "required": false; "isSignal": true; }; "selectedRange": { "alias": "selectedRange"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; "viewChanged": "viewChanged"; "selectedRangeChange": "selectedRangeChange"; }, never, never, true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
7743
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCalendarComponent, "tn-calendar", never, { "startView": { "alias": "startView"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "markedDates": { "alias": "markedDates"; "required": false; "isSignal": true; }; "activeDate": { "alias": "activeDate"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "rangeMode": { "alias": "rangeMode"; "required": false; "isSignal": true; }; "selectedRange": { "alias": "selectedRange"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; "viewChanged": "viewChanged"; "selectedRangeChange": "selectedRangeChange"; }, never, never, true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
7684
7744
  }
7685
7745
 
7746
+ /** The views `tn-calendar` can show. */
7747
+ type TnCalendarView = 'month' | 'year';
7748
+ /** A set of criteria that can be used to filter a list of calendar instances. */
7749
+ type CalendarHarnessFilters = BaseHarnessFilters;
7750
+ /** A set of criteria that can be used to filter a list of calendar cell instances. */
7751
+ interface CalendarCellHarnessFilters extends BaseHarnessFilters {
7752
+ /**
7753
+ * Filters based on the text of the cell — as rendered, so formatted for the app's
7754
+ * locale right down to the numerals. `'14'` finds nothing in a calendar showing
7755
+ * `١٤`. Prefer `date` (or `year`) unless the rendered text is what you mean to assert.
7756
+ */
7757
+ text?: string | RegExp;
7758
+ /**
7759
+ * Filters day cells by the calendar day they represent, whatever the locale renders.
7760
+ * Time of day is ignored.
7761
+ */
7762
+ date?: Date;
7763
+ /** Filters year cells by the year they represent, whatever the locale renders. */
7764
+ year?: number;
7765
+ /** Filters based on whether the cell is selected. */
7766
+ selected?: boolean;
7767
+ /** Filters based on whether the cell is activated using keyboard navigation. */
7768
+ active?: boolean;
7769
+ /** Filters based on whether the cell is disabled. */
7770
+ disabled?: boolean;
7771
+ /** Filters based on whether the cell represents today's date. */
7772
+ today?: boolean;
7773
+ /** Filters based on whether the cell is inside of the selected range. */
7774
+ inRange?: boolean;
7775
+ /** Filters based on whether the cell was flagged through `markedDates`. */
7776
+ marked?: boolean;
7777
+ }
7778
+ /**
7779
+ * Harness for interacting with a single day (or year) cell inside `tn-calendar`.
7780
+ *
7781
+ * Modelled on Angular Material's `MatCalendarCellHarness` so specs can move across
7782
+ * with the method names intact. Three differences worth knowing:
7783
+ *
7784
+ * - `isMarked()` is new — it reports the `markedDates` state, which Material has no
7785
+ * equivalent for.
7786
+ * - `getDate()` and the `date` filter are new, and are the reliable way to name a cell:
7787
+ * the text is formatted for the app's locale, so `'14'` misses a calendar rendering
7788
+ * `١٤`.
7789
+ * - There are no comparison-range or preview-range methods (`isComparisonRangeStart()`
7790
+ * and friends); `tn-calendar` has no comparison range to report.
7791
+ *
7792
+ * @example
7793
+ * ```typescript
7794
+ * const calendar = await loader.getHarness(TnCalendarHarness);
7795
+ * const [first] = await calendar.getCells({ date: new Date(2031, 4, 14) });
7796
+ * await first.select();
7797
+ * expect(await first.isSelected()).toBe(true);
7798
+ * ```
7799
+ */
7800
+ declare class TnCalendarCellHarness extends ComponentHarness {
7801
+ /** The selector for a calendar cell. Padding cells render no button, so only real days match. */
7802
+ static hostSelector: string;
7803
+ private _content;
7804
+ /**
7805
+ * Gets a `HarnessPredicate` that can be used to search for a cell with specific attributes.
7806
+ *
7807
+ * @param options Options for filtering which cell instances are considered a match.
7808
+ * @returns A `HarnessPredicate` configured with the given options.
7809
+ *
7810
+ * @example
7811
+ * ```typescript
7812
+ * // Every day the schedule runs on
7813
+ * const runDays = await calendar.getCells({ marked: true });
7814
+ *
7815
+ * // The disabled days before minDate
7816
+ * const blocked = await calendar.getCells({ disabled: true });
7817
+ * ```
7818
+ */
7819
+ static with(options?: CalendarCellHarnessFilters): HarnessPredicate<TnCalendarCellHarness>;
7820
+ /** Gets the text of the calendar cell. */
7821
+ getText(): Promise<string>;
7822
+ /** Gets the aria-label of the calendar cell. */
7823
+ getAriaLabel(): Promise<string>;
7824
+ /**
7825
+ * Gets the calendar day this cell represents, independent of how it is rendered —
7826
+ * `getText()` is formatted for the locale, so it reads `١٤` in Arabic while this still
7827
+ * answers the 14th. Midnight local time. `null` on a year cell, which has no day.
7828
+ */
7829
+ getDate(): Promise<Date | null>;
7830
+ /**
7831
+ * Gets the year this cell represents, independent of how it is rendered. Works on year
7832
+ * cells; `null` on a day cell.
7833
+ */
7834
+ getYear(): Promise<number | null>;
7835
+ /** The raw `YYYY-MM-DD` stamp, for comparing without rebuilding a `Date`. */
7836
+ protected getDateStamp(): Promise<string | null>;
7837
+ /** Whether the cell is selected. */
7838
+ isSelected(): Promise<boolean>;
7839
+ /** Whether the cell is disabled. */
7840
+ isDisabled(): Promise<boolean>;
7841
+ /**
7842
+ * Whether the cell holds the grid's roving tabindex — the one cell reachable with Tab,
7843
+ * which the arrow keys move. Independent of selection: arrowing around changes which
7844
+ * cell is active without selecting anything.
7845
+ */
7846
+ isActive(): Promise<boolean>;
7847
+ /** Whether the cell represents today's date. */
7848
+ isToday(): Promise<boolean>;
7849
+ /** Whether the cell was flagged through the calendar's `markedDates` input. */
7850
+ isMarked(): Promise<boolean>;
7851
+ /** Whether the cell is the start of the selected range. */
7852
+ isRangeStart(): Promise<boolean>;
7853
+ /** Whether the cell is the end of the selected range. */
7854
+ isRangeEnd(): Promise<boolean>;
7855
+ /**
7856
+ * Whether the cell is part of the selected range, ends included — matching Material's
7857
+ * `isInRange()`. Use `isRangeStart()`/`isRangeEnd()` to single out the ends.
7858
+ */
7859
+ isInRange(): Promise<boolean>;
7860
+ /** Selects the calendar cell. Won't do anything if the cell is disabled. */
7861
+ select(): Promise<void>;
7862
+ /**
7863
+ * Presses a key on the cell. The grid handles its keys on the cells themselves, so
7864
+ * this is how the roving tabindex is driven — arrows, Home/End and PageUp/PageDown
7865
+ * move the active cell, while Enter and Space select.
7866
+ *
7867
+ * @param key The key to press, e.g. `TestKey.RIGHT_ARROW`.
7868
+ * @param modifiers Modifier keys held while pressing, e.g. `{ shift: true }`.
7869
+ *
7870
+ * @example
7871
+ * ```typescript
7872
+ * const [cell] = await calendar.getCells({ active: true });
7873
+ * await cell.press(TestKey.PAGE_DOWN, { shift: true }); // a year on
7874
+ * ```
7875
+ */
7876
+ press(key: TestKey | string, modifiers?: ModifierKeys$1): Promise<void>;
7877
+ /** Hovers over the calendar cell. */
7878
+ hover(): Promise<void>;
7879
+ /** Moves the mouse away from the calendar cell. */
7880
+ mouseAway(): Promise<void>;
7881
+ /** Focuses the calendar cell. */
7882
+ focus(): Promise<void>;
7883
+ /** Removes focus from the calendar cell. */
7884
+ blur(): Promise<void>;
7885
+ }
7886
+ /**
7887
+ * Harness for interacting with `tn-calendar` in tests.
7888
+ *
7889
+ * The method names mirror Angular Material's `MatCalendarHarness`, so a spec written
7890
+ * against the Material calendar moves over unchanged. Differences to know:
7891
+ *
7892
+ * - `getCurrentView()` resolves to `'month' | 'year'`. `tn-calendar` has no separate
7893
+ * multi-year view — its year view *is* the multi-year grid.
7894
+ * - Cell filters gain `marked` for the `markedDates` state and `date`/`year` for naming
7895
+ * a cell without going through its rendered text, and drop Material's
7896
+ * `inComparisonRange`, which has no equivalent here.
7897
+ *
7898
+ * @example
7899
+ * ```typescript
7900
+ * const calendar = await loader.getHarness(TnCalendarHarness);
7901
+ *
7902
+ * // Which days does the schedule run on this month?
7903
+ * const marked = await calendar.getCells({ marked: true });
7904
+ * expect(await parallel(() => marked.map((cell) => cell.getText()))).toEqual(['24', '25']);
7905
+ *
7906
+ * // Page forward a month
7907
+ * await calendar.next();
7908
+ * expect(await calendar.getCurrentViewLabel()).toBe('MAR 2022');
7909
+ *
7910
+ * // Pick a day
7911
+ * await calendar.selectCell({ date: new Date(2022, 2, 14) });
7912
+ * ```
7913
+ */
7914
+ declare class TnCalendarHarness extends ComponentHarness {
7915
+ /** The selector for the host element of a `TnCalendarComponent` instance. */
7916
+ static hostSelector: string;
7917
+ private _periodButton;
7918
+ private _previousButton;
7919
+ private _nextButton;
7920
+ private _monthView;
7921
+ /**
7922
+ * Gets a `HarnessPredicate` that can be used to search for a calendar with specific
7923
+ * attributes.
7924
+ *
7925
+ * @param options Options for filtering which calendar instances are considered a match.
7926
+ * @returns A `HarnessPredicate` configured with the given options.
7927
+ */
7928
+ static with(options?: CalendarHarnessFilters): HarnessPredicate<TnCalendarHarness>;
7929
+ /**
7930
+ * Gets a list of cells inside the calendar. Padding cells for days outside the month
7931
+ * are not included.
7932
+ *
7933
+ * @param filter Optionally filters which cells are included.
7934
+ */
7935
+ getCells(filter?: CalendarCellHarnessFilters): Promise<TnCalendarCellHarness[]>;
7936
+ /** Gets the current view that is being shown inside the calendar. */
7937
+ getCurrentView(): Promise<TnCalendarView>;
7938
+ /** Gets the label of the current calendar view, e.g. `'MAR 2022'`. */
7939
+ getCurrentViewLabel(): Promise<string>;
7940
+ /** Changes the calendar view by clicking on the view toggle button. */
7941
+ changeView(): Promise<void>;
7942
+ /** Goes to the next page of the current view (e.g. next month when inside the month view). */
7943
+ next(): Promise<void>;
7944
+ /** Goes to the previous page of the current view (e.g. previous month in the month view). */
7945
+ previous(): Promise<void>;
7946
+ /**
7947
+ * Selects a cell in the current calendar view.
7948
+ *
7949
+ * @param filter An optional filter to apply to the cells. The first cell matching the
7950
+ * filter will be selected.
7951
+ */
7952
+ selectCell(filter?: CalendarCellHarnessFilters): Promise<void>;
7953
+ /**
7954
+ * Gets the cell holding the grid's roving tabindex — the one cell Tab reaches, and the
7955
+ * one the arrow keys move.
7956
+ *
7957
+ * `null` only when every cell in the view is disabled, where there is nothing to focus.
7958
+ */
7959
+ getActiveCell(): Promise<TnCalendarCellHarness | null>;
7960
+ /**
7961
+ * Moves the grid's roving tabindex with the keyboard, without going through the DOM.
7962
+ *
7963
+ * Arrows move by a day or a week (a year or a row of years); Home and End reach the
7964
+ * ends of the month or year page; PageUp and PageDown page, shifted by a year. Moving
7965
+ * never changes the selection — use `selectCell()` or `TnCalendarCellHarness.select()`
7966
+ * for that.
7967
+ *
7968
+ * @param key The key to press, e.g. `TestKey.RIGHT_ARROW`.
7969
+ * @param modifiers Modifier keys held while pressing, e.g. `{ shift: true }`.
7970
+ *
7971
+ * @example
7972
+ * ```typescript
7973
+ * await calendar.moveActiveCell(TestKey.DOWN_ARROW);
7974
+ * expect(await (await calendar.getActiveCell())!.getText()).toBe('17');
7975
+ * ```
7976
+ */
7977
+ moveActiveCell(key: TestKey | string, modifiers?: ModifierKeys$1): Promise<void>;
7978
+ }
7979
+
7980
+ /**
7981
+ * The calendar's user-facing wording.
7982
+ *
7983
+ * Dates, month and weekday names and the first day of the week all come from the
7984
+ * locale, so they need no translation here — `Intl` already knows them. What is left is
7985
+ * prose: the state suffixes screen readers read out, and the names of the header
7986
+ * buttons. Those are the strings this carries.
7987
+ */
7988
+ interface TnCalendarIntl {
7989
+ /** Appended to a day flagged through `markedDates`. */
7990
+ marked: string;
7991
+ /** Appended to the first day of the selected range. */
7992
+ rangeStart: string;
7993
+ /** Appended to the last day of the selected range. */
7994
+ rangeEnd: string;
7995
+ /** Appended to the days between the ends of the selected range. */
7996
+ inRange: string;
7997
+ /** Appended to the year cell for the current year. */
7998
+ currentYear: string;
7999
+ /** Accessible name for the day grid, given the month and year already formatted. */
8000
+ monthGridLabel: (period: string) => string;
8001
+ /** Accessible name for the year grid, given the span of years it shows. */
8002
+ yearGridLabel: (startYear: number, endYear: number) => string;
8003
+ /** Accessible name for the button that switches between the day and year grids. */
8004
+ chooseMonthAndYear: string;
8005
+ /** Accessible name for the back button in the day grid. */
8006
+ previousMonth: string;
8007
+ /** Accessible name for the forward button in the day grid. */
8008
+ nextMonth: string;
8009
+ /** Accessible name for the back button in the year grid. */
8010
+ previousYears: string;
8011
+ /** Accessible name for the forward button in the year grid. */
8012
+ nextYears: string;
8013
+ }
8014
+ /** The wording used when an app provides none of its own. */
8015
+ declare const TN_CALENDAR_INTL_DEFAULTS: TnCalendarIntl;
8016
+ /**
8017
+ * What an app may provide for {@link TN_CALENDAR_INTL}: the wording itself, or a signal
8018
+ * carrying it. Provide the signal form when the language can change while the app is
8019
+ * running — a plain object is read once and never again, so every open calendar would
8020
+ * keep the wording it was built with.
8021
+ */
8022
+ type TnCalendarIntlInput = Partial<TnCalendarIntl> | Signal<Partial<TnCalendarIntl>>;
8023
+ /**
8024
+ * Injection token for the calendar's wording.
8025
+ *
8026
+ * Because the library ships no localized strings, this is the recommended hook for
8027
+ * wiring a translation service so every `tn-calendar` reads the same way. Anything left
8028
+ * out falls back to {@link TN_CALENDAR_INTL_DEFAULTS}, so an app can translate one
8029
+ * string without restating the rest.
8030
+ *
8031
+ * Dates themselves are not here — they follow `LOCALE_ID`, or the calendar's `locale`
8032
+ * input. See `TnCalendarComponent.locale`.
8033
+ *
8034
+ * @example
8035
+ * ```ts
8036
+ * // Fixed for the lifetime of the app — the language is chosen at build or bootstrap.
8037
+ * providers: [
8038
+ * {
8039
+ * provide: TN_CALENDAR_INTL,
8040
+ * useFactory: (translate: TranslateService): TnCalendarIntlInput => ({
8041
+ * marked: translate.instant('calendar.marked'),
8042
+ * previousMonth: translate.instant('calendar.previousMonth'),
8043
+ * yearGridLabel: (from, to) => translate.instant('calendar.years', { from, to }),
8044
+ * }),
8045
+ * deps: [TranslateService],
8046
+ * },
8047
+ * ];
8048
+ * ```
8049
+ *
8050
+ * @example
8051
+ * ```ts
8052
+ * // Switchable at runtime: a signal, so calendars already on screen follow along.
8053
+ * providers: [
8054
+ * {
8055
+ * provide: TN_CALENDAR_INTL,
8056
+ * useFactory: (): TnCalendarIntlInput => {
8057
+ * const translate = inject(TranslateService);
8058
+ * const lang = toSignal(translate.onLangChange, { initialValue: null });
8059
+ * return computed(() => {
8060
+ * lang(); // Re-read every string when the language changes.
8061
+ * return { marked: translate.instant('calendar.marked') };
8062
+ * });
8063
+ * },
8064
+ * },
8065
+ * ];
8066
+ * ```
8067
+ */
8068
+ declare const TN_CALENDAR_INTL: InjectionToken<TnCalendarIntlInput>;
8069
+ /**
8070
+ * Resolves the wording for a calendar component: whatever the app provided, laid over
8071
+ * the built-in defaults.
8072
+ *
8073
+ * Returns a signal rather than a plain object so a language switch reaches calendars that
8074
+ * are already on screen. Read it inside a `computed` — as every caller here does — and
8075
+ * the labels recompute on their own.
8076
+ */
8077
+ declare function injectTnCalendarIntl(): Signal<TnCalendarIntl>;
8078
+
7686
8079
  declare class TnCalendarHeaderComponent {
7687
8080
  currentDate: _angular_core.InputSignal<Date>;
7688
8081
  currentView: _angular_core.InputSignal<"month" | "year">;
7689
- monthSelected: _angular_core.OutputEmitterRef<number>;
7690
- yearSelected: _angular_core.OutputEmitterRef<number>;
8082
+ /**
8083
+ * Locale for the month abbreviation. Falls back to the app's `LOCALE_ID`;
8084
+ * `tn-calendar` binds it from its own `locale` input.
8085
+ */
8086
+ locale: _angular_core.InputSignal<string | undefined>;
7691
8087
  viewChanged: _angular_core.OutputEmitterRef<"month" | "year">;
7692
8088
  previousClicked: _angular_core.OutputEmitterRef<void>;
7693
8089
  nextClicked: _angular_core.OutputEmitterRef<void>;
7694
- private months;
8090
+ private appLocale;
8091
+ private intl;
8092
+ private resolvedLocale;
8093
+ /**
8094
+ * Ties the period button to its live region through `aria-describedby`. Counted rather
8095
+ * than drawn at random: two calendars on one page — a start and an end picker, say —
8096
+ * had a real chance of minting the same id out of only 10,000, and a duplicate id
8097
+ * silently unhooks the association with nothing to show for it.
8098
+ */
7695
8099
  periodLabelId: string;
7696
8100
  periodLabel: _angular_core.Signal<string>;
7697
- previousLabel: _angular_core.Signal<"Previous month" | "Previous 24 years">;
7698
- nextLabel: _angular_core.Signal<"Next month" | "Next 24 years">;
8101
+ previousLabel: _angular_core.Signal<string>;
8102
+ nextLabel: _angular_core.Signal<string>;
8103
+ periodButtonLabel: _angular_core.Signal<string>;
7699
8104
  toggleView(): void;
7700
8105
  onPreviousClick(): void;
7701
8106
  onNextClick(): void;
7702
8107
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnCalendarHeaderComponent, never>;
7703
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCalendarHeaderComponent, "tn-calendar-header", never, { "currentDate": { "alias": "currentDate"; "required": false; "isSignal": true; }; "currentView": { "alias": "currentView"; "required": false; "isSignal": true; }; }, { "monthSelected": "monthSelected"; "yearSelected": "yearSelected"; "viewChanged": "viewChanged"; "previousClicked": "previousClicked"; "nextClicked": "nextClicked"; }, never, never, true, never>;
8108
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCalendarHeaderComponent, "tn-calendar-header", never, { "currentDate": { "alias": "currentDate"; "required": false; "isSignal": true; }; "currentView": { "alias": "currentView"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, { "viewChanged": "viewChanged"; "previousClicked": "previousClicked"; "nextClicked": "nextClicked"; }, never, never, true, never>;
7704
8109
  }
7705
8110
 
8111
+ /**
8112
+ * Which background the day indicator paints. Resolved to a single value per cell so
8113
+ * the precedence is stated once, in one place, rather than emerging from the relative
8114
+ * specificity of a handful of CSS rules.
8115
+ */
8116
+ type CalendarCellFill = 'primary' | 'marked' | 'none';
7706
8117
  interface CalendarCell {
7707
8118
  value: number;
7708
8119
  date: Date;
@@ -7711,8 +8122,26 @@ interface CalendarCell {
7711
8122
  enabled: boolean;
7712
8123
  selected: boolean;
7713
8124
  today: boolean;
7714
- compareStart?: boolean;
7715
- compareEnd?: boolean;
8125
+ /**
8126
+ * `YYYY-MM-DD` for this day, rendered as `data-tn-date`. A handle that survives
8127
+ * translation, for tests that would otherwise match on locale-formatted cell text.
8128
+ */
8129
+ isoDate: string;
8130
+ /** Whether the date was listed in `markedDates`. */
8131
+ marked: boolean;
8132
+ /**
8133
+ * Whether the day is part of what the caller has chosen — the selected date in
8134
+ * single-date mode, or anywhere from the start to the end of the range in range mode.
8135
+ * Drives `aria-pressed`, which otherwise had nothing to report in range mode.
8136
+ */
8137
+ inSelection: boolean;
8138
+ /** Background for the day indicator: selection and range caps outrank marking. */
8139
+ fill: CalendarCellFill;
8140
+ /**
8141
+ * Whether the indicator draws the today outline. Suppressed under a primary fill,
8142
+ * where a primary border and primary text would disappear into the fill.
8143
+ */
8144
+ todayOutline: boolean;
7716
8145
  rangeStart?: boolean;
7717
8146
  rangeEnd?: boolean;
7718
8147
  inRange?: boolean;
@@ -7723,33 +8152,114 @@ declare class TnMonthViewComponent {
7723
8152
  minDate: _angular_core.InputSignal<Date | undefined>;
7724
8153
  maxDate: _angular_core.InputSignal<Date | undefined>;
7725
8154
  dateFilter: _angular_core.InputSignal<((date: Date) => boolean) | undefined>;
8155
+ /**
8156
+ * Dates to flag as noteworthy — days a task runs, days with events, and the like.
8157
+ * Order and time-of-day are ignored; only the calendar day is compared. The
8158
+ * calendar owns how a marked day looks, so callers pass dates rather than styles.
8159
+ */
8160
+ markedDates: _angular_core.InputSignal<Date[] | undefined>;
7726
8161
  rangeMode: _angular_core.InputSignal<boolean>;
7727
- selectedRange: _angular_core.InputSignal<{
7728
- start: Date | null;
7729
- end: Date | null;
7730
- selecting: "start" | "end";
7731
- } | undefined>;
8162
+ selectedRange: _angular_core.InputSignal<DateRange | undefined>;
7732
8163
  selectedChange: _angular_core.OutputEmitterRef<Date>;
7733
8164
  activeDateChange: _angular_core.OutputEmitterRef<Date>;
7734
- readonly weekdays: {
8165
+ /**
8166
+ * Locale for dates, weekday names and the first day of the week. Falls back to the
8167
+ * app's `LOCALE_ID`; `tn-calendar` binds it from its own `locale` input.
8168
+ */
8169
+ locale: _angular_core.InputSignal<string | undefined>;
8170
+ private host;
8171
+ private injector;
8172
+ private appLocale;
8173
+ private intl;
8174
+ private resolvedLocale;
8175
+ /**
8176
+ * Which day the week starts on in this locale, as a `Date.getDay()` index. Everything
8177
+ * about the grid's shape hangs off it: the order of the headings and how many blank
8178
+ * cells precede the 1st.
8179
+ */
8180
+ private weekStart;
8181
+ /** Day numbers in the locale's own numerals, without a thousands separator. */
8182
+ private dayFormat;
8183
+ /**
8184
+ * Column headings, named and ordered by the locale — Sunday first in the US, Monday
8185
+ * across most of Europe. The dates are an arbitrary week, used only to name the days.
8186
+ */
8187
+ readonly weekdays: _angular_core.Signal<{
7735
8188
  long: string;
7736
8189
  short: string;
7737
- }[];
8190
+ }[]>;
8191
+ private markedDateKeys;
8192
+ /**
8193
+ * Names the grid after the month it shows. Without it a screen-reader user arrowing
8194
+ * around hears each day but never which month they are in — the period only appears in
8195
+ * the header, outside the grid.
8196
+ */
8197
+ gridLabel: _angular_core.Signal<string>;
8198
+ /**
8199
+ * The day of the month that carries `tabindex="0"` — the grid's single keyboard entry
8200
+ * point, per the roving tabindex pattern.
8201
+ *
8202
+ * It follows `activeDate`, but falls back to the nearest enabled day when that day
8203
+ * can't take focus. Without the fallback a month whose active day is disabled (say,
8204
+ * anything before `minDate`) would have no tabbable cell at all, leaving the grid
8205
+ * unreachable by keyboard. `null` only when the whole month is disabled, where there
8206
+ * is nothing worth focusing anyway.
8207
+ *
8208
+ * Derived from the month rather than from `calendarRows()`, which would be circular.
8209
+ */
8210
+ activeDay: _angular_core.Signal<number | null>;
8211
+ private activeCellDate;
7738
8212
  calendarRows: _angular_core.Signal<CalendarCell[][]>;
7739
8213
  private createCell;
7740
8214
  private createEmptyCell;
7741
8215
  private isDateEnabled;
7742
- private isSameDate;
8216
+ /**
8217
+ * Spells out the state a day is in, but only the parts no ARIA attribute already
8218
+ * carries. Selection lives on the button's `aria-pressed` and today on `aria-current`,
8219
+ * so repeating them here had screen readers announce each one twice. Marking and the
8220
+ * range positions have no attribute equivalent, and would otherwise be conveyed by
8221
+ * background colour alone.
8222
+ */
7743
8223
  private formatAriaLabel;
7744
8224
  trackByDate(index: number, cell: CalendarCell): string;
7745
8225
  trackByRow(index: number): number;
7746
8226
  onCellClicked(cell: CalendarCell): void;
8227
+ /**
8228
+ * Moves the roving tabindex. Selection stays on click/Enter/Space, which the cells
8229
+ * are already buttons for, so this only ever changes which day is active.
8230
+ *
8231
+ * Moves that leave the displayed month emit an `activeDateChange` like any other
8232
+ * navigation; the grid re-renders on the new month with the target day active.
8233
+ */
8234
+ onKeydown(event: KeyboardEvent): void;
8235
+ /**
8236
+ * The day a key aims at, and which way to look from there when that day is disabled.
8237
+ *
8238
+ * The search direction belongs to the key, not to where the target happens to fall
8239
+ * relative to the current day. Home and End mean "the ends of *this* month", so they
8240
+ * search inward: looking outward would step straight into the neighbouring month over
8241
+ * a single filtered-out boundary day and page the view, which is not what either key
8242
+ * promises. The arrows and the paging keys keep travelling the way they were already
8243
+ * headed, and crossing into the next month is the point of those.
8244
+ */
8245
+ private targetForKey;
8246
+ /**
8247
+ * Steps past days the caller has disabled, so a gap in `dateFilter` or the far side of
8248
+ * `minDate`/`maxDate` doesn't park focus somewhere unusable.
8249
+ *
8250
+ * Searches the way the key asked for (see `targetForKey`), then doubles back if that
8251
+ * finds nothing. The fallback is for the ends of the allowed range: arrowing right at
8252
+ * `maxDate` finds nothing ahead, doubles back onto the day we started from, and the
8253
+ * caller reads that as "don't move".
8254
+ */
8255
+ private nearestEnabled;
8256
+ /** Bounded, so an everything-disabled filter stops the move instead of spinning. */
8257
+ private scanForEnabled;
7747
8258
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnMonthViewComponent, never>;
7748
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnMonthViewComponent, "tn-month-view", never, { "activeDate": { "alias": "activeDate"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "rangeMode": { "alias": "rangeMode"; "required": false; "isSignal": true; }; "selectedRange": { "alias": "selectedRange"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; }, never, never, true, never>;
8259
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnMonthViewComponent, "tn-month-view", never, { "activeDate": { "alias": "activeDate"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "markedDates": { "alias": "markedDates"; "required": false; "isSignal": true; }; "rangeMode": { "alias": "rangeMode"; "required": false; "isSignal": true; }; "selectedRange": { "alias": "selectedRange"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; }, never, never, true, never>;
7749
8260
  }
7750
8261
 
7751
8262
  interface YearCell {
7752
- value: number;
7753
8263
  year: number;
7754
8264
  label: string;
7755
8265
  ariaLabel: string;
@@ -7763,25 +8273,86 @@ declare class TnMultiYearViewComponent {
7763
8273
  minDate: _angular_core.InputSignal<Date | undefined>;
7764
8274
  maxDate: _angular_core.InputSignal<Date | undefined>;
7765
8275
  dateFilter: _angular_core.InputSignal<((date: Date) => boolean) | undefined>;
8276
+ /**
8277
+ * Locale for the year numerals — Arabic-Indic digits in `ar`, Western in `en`. Falls
8278
+ * back to the app's `LOCALE_ID`; `tn-calendar` binds it from its own `locale` input.
8279
+ */
8280
+ locale: _angular_core.InputSignal<string | undefined>;
7766
8281
  selectedChange: _angular_core.OutputEmitterRef<Date>;
7767
8282
  activeDateChange: _angular_core.OutputEmitterRef<Date>;
7768
- readonly cellWidth = 25;
7769
- readonly cellAspectRatio = 7.14286;
8283
+ private host;
8284
+ private injector;
8285
+ private appLocale;
8286
+ private intl;
8287
+ /** Years read out in the locale's own numerals, without a thousands separator. */
8288
+ private yearFormat;
7770
8289
  readonly yearsPerRow = 4;
7771
- readonly yearRowCount = 6;
8290
+ readonly yearRowCount: number;
8291
+ /**
8292
+ * The page of years on screen. Pages are fixed blocks, so the active year sits
8293
+ * wherever it falls within one rather than in the middle — see `yearPageStart`.
8294
+ */
7772
8295
  yearRange: _angular_core.Signal<{
7773
8296
  start: number;
7774
8297
  end: number;
7775
8298
  }>;
8299
+ /**
8300
+ * Names the grid after the span of years it shows, so a screen-reader user arrowing
8301
+ * around knows which page they are on rather than just hearing bare years.
8302
+ */
8303
+ gridLabel: _angular_core.Signal<string>;
7776
8304
  yearRows: _angular_core.Signal<YearCell[][]>;
8305
+ /**
8306
+ * The year that carries `tabindex="0"` — the grid's single keyboard entry point, per
8307
+ * the roving tabindex pattern. Follows `activeDate`, falling back to the nearest
8308
+ * enabled year in the page so a range whose active year is disabled still has a
8309
+ * tabbable cell. `null` only when every year on the page is disabled.
8310
+ */
8311
+ activeYear: _angular_core.Signal<number | null>;
7777
8312
  private createYearCell;
7778
8313
  private isYearEnabled;
8314
+ /**
8315
+ * Selection is carried by the button's `aria-pressed`, so it is deliberately not
8316
+ * repeated here. "Current year" stays: `aria-current="date"` on a year cell is vague
8317
+ * enough that spelling it out earns its place.
8318
+ */
7779
8319
  private formatYearAriaLabel;
7780
8320
  trackByYear(index: number, cell: YearCell): number;
7781
8321
  trackByRow(index: number, row: YearCell[]): string;
7782
8322
  onYearClicked(cell: YearCell): void;
8323
+ /**
8324
+ * Moves the roving tabindex across the year grid. Picking a year stays on
8325
+ * click/Enter/Space, which the cells are already buttons for.
8326
+ *
8327
+ * Moves past either end of the 24-year page emit an `activeDateChange` like the
8328
+ * header's paging buttons do, and the grid re-renders on the neighbouring page.
8329
+ */
8330
+ onKeydown(event: KeyboardEvent): void;
8331
+ /**
8332
+ * The year a key aims at, and which way to look from there when that year is disabled.
8333
+ *
8334
+ * The search direction belongs to the key, not to where the target happens to fall
8335
+ * relative to the current year. Home and End mean "the ends of *this* page", so they
8336
+ * search inward: looking outward would step onto the neighbouring 24-year page over a
8337
+ * single ruled-out boundary year and turn the page, which is not what either key
8338
+ * promises. The arrows and the paging keys keep travelling the way they were already
8339
+ * headed, and moving onto the next page is the point of those.
8340
+ */
8341
+ private targetForKey;
8342
+ /**
8343
+ * Steps past years the caller has disabled, so `minDate`/`maxDate` don't park focus
8344
+ * somewhere unusable.
8345
+ *
8346
+ * Searches the way the key asked for (see `targetForKey`), then doubles back if that
8347
+ * finds nothing. The fallback is for the ends of the allowed range: arrowing right at
8348
+ * `maxDate` finds nothing ahead, doubles back onto the year we started from, and the
8349
+ * caller reads that as "don't move".
8350
+ */
8351
+ private nearestEnabledYear;
8352
+ /** Bounded, so an everything-disabled range stops the move instead of spinning. */
8353
+ private scanForEnabledYear;
7783
8354
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnMultiYearViewComponent, never>;
7784
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnMultiYearViewComponent, "tn-multi-year-view", never, { "activeDate": { "alias": "activeDate"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; }, never, never, true, never>;
8355
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnMultiYearViewComponent, "tn-multi-year-view", never, { "activeDate": { "alias": "activeDate"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; }, never, never, true, never>;
7785
8356
  }
7786
8357
 
7787
8358
  declare class TnDateInputComponent implements ControlValueAccessor, OnInit, OnDestroy {
@@ -7803,9 +8374,7 @@ declare class TnDateInputComponent implements ControlValueAccessor, OnInit, OnDe
7803
8374
  dayRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
7804
8375
  yearRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
7805
8376
  calendarTemplate: _angular_core.Signal<TemplateRef<unknown>>;
7806
- calendar: _angular_core.Signal<TnCalendarComponent>;
7807
8377
  wrapperEl: _angular_core.Signal<ElementRef<HTMLDivElement>>;
7808
- private destroy$;
7809
8378
  private overlayRef?;
7810
8379
  private portal?;
7811
8380
  isOpen: _angular_core.WritableSignal<boolean>;
@@ -10289,5 +10858,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
10289
10858
  */
10290
10859
  declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
10291
10860
 
10292
- export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LabelMarkupPipe, LabelTextPipe, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, THEME_MAP, THEME_STORAGE_KEY, TN_FORM_FIELD_CONTEXT, TN_FORM_FIELD_ERRORS, TN_TABLE_PAGER_DEFAULT_LABELS, TN_TABLE_PAGER_LABELS, TN_TEST_ATTR, TN_THEME_DEFINITIONS, TnAutocompleteComponent, TnAutocompleteHarness, TnBannerActionDirective, TnBannerComponent, TnBannerHarness, TnBrandedSpinnerComponent, TnButtonComponent, TnButtonHarness, TnButtonToggleComponent, TnButtonToggleGroupComponent, TnButtonToggleGroupHarness, TnButtonToggleHarness, TnCalendarComponent, TnCalendarHeaderComponent, TnCardComponent, TnCardFooterActionsDirective, TnCardHeaderActionsDirective, TnCardHeaderDirective, TnCellDefDirective, TnCheckboxComponent, TnCheckboxHarness, TnCheckboxLabelDirective, TnChipComponent, TnChipHarness, TnChipInputComponent, TnChipInputHarness, TnConfirmDialogComponent, TnDateInputComponent, TnDateInputHarness, TnDateRangeInputComponent, TnDateRangeInputHarness, TnDetailRowDefDirective, TnDialog, TnDialogHarness, TnDialogShellComponent, TnDialogTesting, TnDividerComponent, TnDividerDirective, TnDrawerComponent, TnDrawerContainerComponent, TnDrawerContainerHarness, TnDrawerContentComponent, TnDrawerHarness, TnEmptyComponent, TnEmptyHarness, TnExpansionPanelComponent, TnExpansionPanelHarness, TnFileInputComponent, TnFileInputHarness, TnFilePickerComponent, TnFilePickerHarness, TnFilePickerPopupComponent, TnFormFieldComponent, TnFormFieldHarness, TnFormSectionComponent, TnFormSectionHarness, TnHeaderCellDefDirective, TnIconButtonComponent, TnIconButtonHarness, TnIconComponent, TnIconHarness, TnIconRegistryService, TnIconTesting, TnInputComponent, TnInputDirective, TnInputHarness, TnKeyboardShortcutComponent, TnKeyboardShortcutService, TnListAvatarDirective, TnListComponent, TnListIconDirective, TnListItemComponent, TnListItemLineDirective, TnListItemPrimaryDirective, TnListItemSecondaryDirective, TnListItemTitleDirective, TnListItemTrailingDirective, TnListOptionComponent, TnListSubheaderComponent, TnMenuActivateHoverDirective, TnMenuComponent, TnMenuHarness, TnMenuItemComponent, TnMenuTesting, TnMenuTriggerDirective, TnMonthViewComponent, TnMultiYearViewComponent, TnNestedTreeDataSource, TnNestedTreeNodeComponent, TnParticleProgressBarComponent, TnProgressBarComponent, TnRadioComponent, TnRadioHarness, TnSelectComponent, TnSelectHarness, TnSelectionListComponent, TnSidePanelActionDirective, TnSidePanelComponent, TnSidePanelHarness, TnSidePanelHeaderActionDirective, TnSlideToggleComponent, TnSlideToggleHarness, TnSliderComponent, TnSliderThumbDirective, TnSliderWithLabelDirective, TnSpinnerComponent, TnSpriteLoaderService, TnStepComponent, TnStepperComponent, TnStepperHarness, TnStepperNextDirective, TnStepperPreviousDirective, TnTabComponent, TnTabHarness, TnTabPanelComponent, TnTabPanelHarness, TnTableColumnDirective, TnTableComponent, TnTableHarness, TnTablePagerComponent, TnTablePagerHarness, TnTabsComponent, TnTabsHarness, TnTestIdDirective, TnTheme, TnThemeService, TnTimeInputComponent, TnToastComponent, TnToastMock, TnToastPosition, TnToastRef, TnToastService, TnToastTesting, TnToastType, TnTooltipComponent, TnTooltipDirective, TnTreeComponent, TnTreeFlatDataSource, TnTreeFlattener, TnTreeHarness, TnTreeNodeComponent, TnTreeNodeHarness, TnTreeNodeOutletDirective, TnTreeVirtualScrollNodeOutletDirective, TnTreeVirtualScrollViewComponent, TnTreeVirtualScrollViewHarness, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, allowsCurrentDirectorySelection, composeTestId, controlTestId, createFlatTreeControl, createLucideLibrary, createNestedTreeControl, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, defaultTreeItemSize, formatSize, getSelectableTypes, injectTnFormFieldAria, isPathWithinRoot, kebabTestSegment, labelMarkupToHtml, labelMarkupToText, libIconMarker, normalizeRootPath, optionTestId, parseLabelMarkup, parseSize, registerLucideIcons, scopeTestId, setupLucideIntegration, tnIconMarker, writeTestId };
10293
- export type { AutocompleteHarnessFilters, BannerHarnessFilters, ButtonHarnessFilters, ButtonToggleHarnessFilters, CalendarCell, CheckboxHarnessFilters, ChipColor, ChipHarnessFilters, DateInputHarnessFilters, DateRange, DateRangeInputHarnessFilters, DialogHarnessFilters, EmptyHarnessFilters, ExpansionPanelHarnessFilters, FileInputHarnessFilters, FilePickerCallbacks, FilePickerCreateAction, FilePickerCreateActionEvent, FilePickerError, FilePickerHarnessFilters, FilePickerMode, FileSystemItem, FileSystemItemType, FlatTreeControlOptions, FormFieldHarnessFilters, FormSectionHarnessFilters, IconButtonHarnessFilters, IconHarnessFilters, IconLibrary, IconLibraryType, IconResult, IconSize, IconSource, IconTestingMockOverrides, InputHarnessFilters, KeyCombination, LabelMarkupSegment, LabelMarkupSegmentType, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, NestedTreeControlOptions, PathSegment, PlatformType, ProgressBarMode, RadioHarnessFilters, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SizeStandard, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, StepperHarnessFilters, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnAutocompleteOption, TnBannerType, TnButtonToggleType, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnChipInputHarnessFilters, TnChipInputOption, TnConfirmDialogData, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFlatTreeNode, TnFormFieldAriaBindings, TnFormFieldContext, TnFormFieldErrorMessage, TnFormFieldErrorMessages, TnFormFieldErrorResolver, TnMenuItem, TnOptionTestIdSource, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnTestIdValue, TnThemeDefinition, TnToastCall, TnToastConfig, TnTreeExpansion, TnTreeHarnessFilters, TnTreeNodeHarnessFilters, TnTreeVirtualNodeData, TnTreeVirtualScrollViewHarnessFilters, TooltipPosition, YearCell };
10861
+ export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LabelMarkupPipe, LabelTextPipe, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, THEME_MAP, THEME_STORAGE_KEY, TN_CALENDAR_INTL, TN_CALENDAR_INTL_DEFAULTS, TN_FORM_FIELD_CONTEXT, TN_FORM_FIELD_ERRORS, TN_TABLE_PAGER_DEFAULT_LABELS, TN_TABLE_PAGER_LABELS, TN_TEST_ATTR, TN_THEME_DEFINITIONS, TnAutocompleteComponent, TnAutocompleteHarness, TnBannerActionDirective, TnBannerComponent, TnBannerHarness, TnBrandedSpinnerComponent, TnButtonComponent, TnButtonHarness, TnButtonToggleComponent, TnButtonToggleGroupComponent, TnButtonToggleGroupHarness, TnButtonToggleHarness, TnCalendarCellHarness, TnCalendarComponent, TnCalendarHarness, TnCalendarHeaderComponent, TnCardComponent, TnCardFooterActionsDirective, TnCardHeaderActionsDirective, TnCardHeaderDirective, TnCellDefDirective, TnCheckboxComponent, TnCheckboxHarness, TnCheckboxLabelDirective, TnChipComponent, TnChipHarness, TnChipInputComponent, TnChipInputHarness, TnConfirmDialogComponent, TnDateInputComponent, TnDateInputHarness, TnDateRangeInputComponent, TnDateRangeInputHarness, TnDetailRowDefDirective, TnDialog, TnDialogHarness, TnDialogShellComponent, TnDialogTesting, TnDividerComponent, TnDividerDirective, TnDrawerComponent, TnDrawerContainerComponent, TnDrawerContainerHarness, TnDrawerContentComponent, TnDrawerHarness, TnEmptyComponent, TnEmptyHarness, TnExpansionPanelComponent, TnExpansionPanelHarness, TnFileInputComponent, TnFileInputHarness, TnFilePickerComponent, TnFilePickerHarness, TnFilePickerPopupComponent, TnFormFieldComponent, TnFormFieldHarness, TnFormSectionComponent, TnFormSectionHarness, TnHeaderCellDefDirective, TnIconButtonComponent, TnIconButtonHarness, TnIconComponent, TnIconHarness, TnIconRegistryService, TnIconTesting, TnInputComponent, TnInputDirective, TnInputHarness, TnKeyboardShortcutComponent, TnKeyboardShortcutService, TnListAvatarDirective, TnListComponent, TnListIconDirective, TnListItemComponent, TnListItemLineDirective, TnListItemPrimaryDirective, TnListItemSecondaryDirective, TnListItemTitleDirective, TnListItemTrailingDirective, TnListOptionComponent, TnListSubheaderComponent, TnMenuActivateHoverDirective, TnMenuComponent, TnMenuHarness, TnMenuItemComponent, TnMenuTesting, TnMenuTriggerDirective, TnMonthViewComponent, TnMultiYearViewComponent, TnNestedTreeDataSource, TnNestedTreeNodeComponent, TnParticleProgressBarComponent, TnProgressBarComponent, TnRadioComponent, TnRadioHarness, TnSelectComponent, TnSelectHarness, TnSelectionListComponent, TnSidePanelActionDirective, TnSidePanelComponent, TnSidePanelHarness, TnSidePanelHeaderActionDirective, TnSlideToggleComponent, TnSlideToggleHarness, TnSliderComponent, TnSliderThumbDirective, TnSliderWithLabelDirective, TnSpinnerComponent, TnSpriteLoaderService, TnStepComponent, TnStepperComponent, TnStepperHarness, TnStepperNextDirective, TnStepperPreviousDirective, TnTabComponent, TnTabHarness, TnTabPanelComponent, TnTabPanelHarness, TnTableColumnDirective, TnTableComponent, TnTableHarness, TnTablePagerComponent, TnTablePagerHarness, TnTabsComponent, TnTabsHarness, TnTestIdDirective, TnTheme, TnThemeService, TnTimeInputComponent, TnToastComponent, TnToastMock, TnToastPosition, TnToastRef, TnToastService, TnToastTesting, TnToastType, TnTooltipComponent, TnTooltipDirective, TnTreeComponent, TnTreeFlatDataSource, TnTreeFlattener, TnTreeHarness, TnTreeNodeComponent, TnTreeNodeHarness, TnTreeNodeOutletDirective, TnTreeVirtualScrollNodeOutletDirective, TnTreeVirtualScrollViewComponent, TnTreeVirtualScrollViewHarness, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, allowsCurrentDirectorySelection, composeTestId, controlTestId, createFlatTreeControl, createLucideLibrary, createNestedTreeControl, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, defaultTreeItemSize, formatSize, getSelectableTypes, injectTnCalendarIntl, injectTnFormFieldAria, isPathWithinRoot, kebabTestSegment, labelMarkupToHtml, labelMarkupToText, libIconMarker, normalizeRootPath, optionTestId, parseLabelMarkup, parseSize, registerLucideIcons, scopeTestId, setupLucideIntegration, tnIconMarker, writeTestId };
10862
+ export type { AutocompleteHarnessFilters, BannerHarnessFilters, ButtonHarnessFilters, ButtonToggleHarnessFilters, CalendarCell, CalendarCellFill, CalendarCellHarnessFilters, CalendarHarnessFilters, CheckboxHarnessFilters, ChipColor, ChipHarnessFilters, DateInputHarnessFilters, DateRange, DateRangeInputHarnessFilters, DialogHarnessFilters, EmptyHarnessFilters, ExpansionPanelHarnessFilters, FileInputHarnessFilters, FilePickerCallbacks, FilePickerCreateAction, FilePickerCreateActionEvent, FilePickerError, FilePickerHarnessFilters, FilePickerMode, FileSystemItem, FileSystemItemType, FlatTreeControlOptions, FormFieldHarnessFilters, FormSectionHarnessFilters, IconButtonHarnessFilters, IconHarnessFilters, IconLibrary, IconLibraryType, IconResult, IconSize, IconSource, IconTestingMockOverrides, InputHarnessFilters, KeyCombination, LabelMarkupSegment, LabelMarkupSegmentType, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, NestedTreeControlOptions, PathSegment, PlatformType, ProgressBarMode, RadioHarnessFilters, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SizeStandard, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, StepperHarnessFilters, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnAutocompleteOption, TnBannerType, TnButtonToggleType, TnCalendarIntl, TnCalendarIntlInput, TnCalendarView, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnChipInputHarnessFilters, TnChipInputOption, TnConfirmDialogData, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFlatTreeNode, TnFormFieldAriaBindings, TnFormFieldContext, TnFormFieldErrorMessage, TnFormFieldErrorMessages, TnFormFieldErrorResolver, TnMenuItem, TnOptionTestIdSource, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnTestIdValue, TnThemeDefinition, TnToastCall, TnToastConfig, TnTreeExpansion, TnTreeHarnessFilters, TnTreeNodeHarnessFilters, TnTreeVirtualNodeData, TnTreeVirtualScrollViewHarnessFilters, TooltipPosition, YearCell };