@cdevhub/ngx-tw 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +108 -0
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-alert.mjs +240 -0
- package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +287 -0
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +332 -0
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +452 -0
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-button.mjs +227 -0
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +417 -0
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs +232 -0
- package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +4482 -0
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-card.mjs +157 -0
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +1454 -0
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +593 -0
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +228 -0
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +510 -0
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +1721 -0
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +721 -0
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-core.mjs +861 -0
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +1558 -0
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +1833 -0
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +693 -0
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +331 -0
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +289 -0
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +572 -0
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +36 -0
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +278 -0
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-input.mjs +355 -0
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-item.mjs +241 -0
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +433 -0
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +691 -0
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +678 -0
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +335 -0
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +708 -0
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +319 -0
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-select.mjs +1722 -0
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-separator.mjs +115 -0
- package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +768 -0
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +149 -0
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +1147 -0
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +346 -0
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs +186 -0
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-split.mjs +1082 -0
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +579 -0
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +443 -0
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +391 -0
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +315 -0
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-table.mjs +994 -0
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +508 -0
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +147 -0
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +178 -0
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +1344 -0
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +1136 -0
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +1311 -0
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +533 -0
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw.mjs +61 -0
- package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -0
- package/package.json +265 -0
- package/theme/_base.css +394 -0
- package/theme/_dark.css +510 -0
- package/theme/_high-contrast.css +290 -0
- package/theme/_semantic.css +317 -0
- package/theme/_typography.css +9 -0
- package/theme/index.css +54 -0
- package/types/cdevhub-ngx-tw-accordion.d.ts +48 -0
- package/types/cdevhub-ngx-tw-alert.d.ts +67 -0
- package/types/cdevhub-ngx-tw-avatar.d.ts +79 -0
- package/types/cdevhub-ngx-tw-badge.d.ts +94 -0
- package/types/cdevhub-ngx-tw-breadcrumbs.d.ts +227 -0
- package/types/cdevhub-ngx-tw-button.d.ts +74 -0
- package/types/cdevhub-ngx-tw-calendar-luxon.d.ts +200 -0
- package/types/cdevhub-ngx-tw-calendar-testing.d.ts +113 -0
- package/types/cdevhub-ngx-tw-calendar.d.ts +1704 -0
- package/types/cdevhub-ngx-tw-card.d.ts +48 -0
- package/types/cdevhub-ngx-tw-carousel.d.ts +406 -0
- package/types/cdevhub-ngx-tw-checkbox.d.ts +136 -0
- package/types/cdevhub-ngx-tw-code-block.d.ts +93 -0
- package/types/cdevhub-ngx-tw-collapsible.d.ts +151 -0
- package/types/cdevhub-ngx-tw-combobox.d.ts +389 -0
- package/types/cdevhub-ngx-tw-command-palette.d.ts +215 -0
- package/types/cdevhub-ngx-tw-core.d.ts +719 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +317 -0
- package/types/cdevhub-ngx-tw-date-range-picker.d.ts +313 -0
- package/types/cdevhub-ngx-tw-dialog.d.ts +303 -0
- package/types/cdevhub-ngx-tw-empty-state.d.ts +104 -0
- package/types/cdevhub-ngx-tw-flip-card.d.ts +95 -0
- package/types/cdevhub-ngx-tw-form-field.d.ts +210 -0
- package/types/cdevhub-ngx-tw-icon-lucide.d.ts +29 -0
- package/types/cdevhub-ngx-tw-icon.d.ts +134 -0
- package/types/cdevhub-ngx-tw-input.d.ts +110 -0
- package/types/cdevhub-ngx-tw-item.d.ts +70 -0
- package/types/cdevhub-ngx-tw-menu.d.ts +99 -0
- package/types/cdevhub-ngx-tw-paginator.d.ts +305 -0
- package/types/cdevhub-ngx-tw-popover.d.ts +157 -0
- package/types/cdevhub-ngx-tw-progress-bar.d.ts +100 -0
- package/types/cdevhub-ngx-tw-radio.d.ts +174 -0
- package/types/cdevhub-ngx-tw-segmented-control.d.ts +66 -0
- package/types/cdevhub-ngx-tw-select.d.ts +384 -0
- package/types/cdevhub-ngx-tw-separator.d.ts +28 -0
- package/types/cdevhub-ngx-tw-sheet.d.ts +335 -0
- package/types/cdevhub-ngx-tw-skeleton.d.ts +52 -0
- package/types/cdevhub-ngx-tw-slider.d.ts +258 -0
- package/types/cdevhub-ngx-tw-sort.d.ts +136 -0
- package/types/cdevhub-ngx-tw-spinner.d.ts +50 -0
- package/types/cdevhub-ngx-tw-split.d.ts +265 -0
- package/types/cdevhub-ngx-tw-stat.d.ts +140 -0
- package/types/cdevhub-ngx-tw-stepper.d.ts +127 -0
- package/types/cdevhub-ngx-tw-switch.d.ts +88 -0
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +107 -0
- package/types/cdevhub-ngx-tw-table.d.ts +479 -0
- package/types/cdevhub-ngx-tw-tabs.d.ts +121 -0
- package/types/cdevhub-ngx-tw-textarea.d.ts +62 -0
- package/types/cdevhub-ngx-tw-theme.d.ts +106 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +303 -0
- package/types/cdevhub-ngx-tw-timeline.d.ts +278 -0
- package/types/cdevhub-ngx-tw-toast.d.ts +388 -0
- package/types/cdevhub-ngx-tw-tooltip.d.ts +95 -0
- package/types/cdevhub-ngx-tw.d.ts +49 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Signal } from '@angular/core';
|
|
3
|
+
import { TwSize } from '@cdevhub/ngx-tw/core';
|
|
4
|
+
import { InputDirective } from '@cdevhub/ngx-tw/input';
|
|
5
|
+
import * as i1 from '@angular/cdk/text-field';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* How the user-resize handle behaves on the textarea. `'vertical'` (the
|
|
9
|
+
* default) lets users drag the bottom edge to grow the textarea; `'none'`
|
|
10
|
+
* locks the size; `'both'` allows free resizing on both axes (rarely useful
|
|
11
|
+
* inside a form-field — the textarea can overflow the wrapper). Horizontal
|
|
12
|
+
* is intentionally omitted — it breaks form-field layout in practice.
|
|
13
|
+
*/
|
|
14
|
+
type TwTextareaResize = 'none' | 'vertical' | 'both';
|
|
15
|
+
/**
|
|
16
|
+
* Adapts a native `<textarea>` into an ngx-tw form-field-compatible multi-line
|
|
17
|
+
* control. Extends {@link InputDirective} — inherits its form-field
|
|
18
|
+
* integration, error-state machinery, autofill / focus tracking, ARIA wiring,
|
|
19
|
+
* and standalone styling. Adds textarea-specific behavior: autosize composition
|
|
20
|
+
* via CDK's `CdkTextareaAutosize`, a `resize` axis for the user-resize handle,
|
|
21
|
+
* `rows` / `minRows` / `maxRows`, and `maxLength` with a `valueLength` signal
|
|
22
|
+
* for character counters.
|
|
23
|
+
*
|
|
24
|
+
* Like `InputDirective`, this directive deliberately does NOT implement
|
|
25
|
+
* `ControlValueAccessor`. Angular's built-in `DefaultValueAccessor` attaches to
|
|
26
|
+
* the native `<textarea>` and handles value I/O for template-driven
|
|
27
|
+
* (`ngModel`), reactive (`FormControl` / `formControlName`), and signal-forms
|
|
28
|
+
* (`formField`) bindings — no library glue required.
|
|
29
|
+
*
|
|
30
|
+
* Form-control input-cap exception applies (codified in CLAUDE.md): ARIA +
|
|
31
|
+
* forms baseline plus textarea-specific surface exceeds the 5–6 cap;
|
|
32
|
+
* `checkbox` is the canonical 12+ exemplar.
|
|
33
|
+
*/
|
|
34
|
+
declare class TextareaDirective extends InputDirective {
|
|
35
|
+
private readonly cdkAutosize;
|
|
36
|
+
/** Density of a standalone textarea. Maps to the inline-padding + font scale (`xs` … `xl`). Ignored inside a `<tw-form-field>` — the wrapper's `size` carries density. Defaults to `'md'`. */
|
|
37
|
+
readonly size: _angular_core.InputSignal<TwSize>;
|
|
38
|
+
/** Grows the textarea with its content (composed from CDK's `CdkTextareaAutosize`). When `true` the user-resize handle is forced off — autosize owns the height. Defaults to `false`. */
|
|
39
|
+
readonly autosize: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
40
|
+
/** Minimum number of rows the textarea collapses to when `autosize` is `true`. Ignored when autosize is off. Defaults to `1`. */
|
|
41
|
+
readonly minRows: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
42
|
+
/** Maximum number of rows the textarea expands to before scrolling, when `autosize` is `true`. `undefined` removes the cap. Ignored when autosize is off. Defaults to `undefined`. */
|
|
43
|
+
readonly maxRows: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
|
|
44
|
+
/** Number of rows for the initial render height (native `rows` attribute). Browsers honor this even when `autosize` is `true`, so first paint uses this value. Defaults to `3`. */
|
|
45
|
+
readonly rows: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
46
|
+
/** Controls the user-resize handle: `'none'` locks the size, `'vertical'` (default) allows vertical drag, `'both'` allows both axes. Forced to `'none'` when `autosize` is `true`. Horizontal-only is intentionally not supported. */
|
|
47
|
+
readonly resize: _angular_core.InputSignal<TwTextareaResize>;
|
|
48
|
+
/** Maximum character count. Mirrors to the native `maxlength` attribute when defined and is exposed via the `valueLength` signal so consumers can render a "X / N" hint. Defaults to `undefined`. */
|
|
49
|
+
readonly maxLength: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
|
|
50
|
+
/** Current value length, updates on every `input` event. Wire `<span twHint align="end">{{ ta.valueLength() }} / {{ ta.maxLength() }}</span>` for a character counter. */
|
|
51
|
+
readonly valueLength: Signal<number>;
|
|
52
|
+
/** @internal Textarea-specific Tailwind classes (resize axis). Combined with the inherited `classes()` in the host `[class]` binding. */
|
|
53
|
+
readonly textareaClasses: Signal<string>;
|
|
54
|
+
constructor();
|
|
55
|
+
/** Triggers a CDK autosize recalculation. Useful after programmatic value changes that bypass the native `(input)` event (e.g., clipboard write APIs). No-op when `autosize` is `false`. */
|
|
56
|
+
resizeToFitContent(force?: boolean): void;
|
|
57
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaDirective, never>;
|
|
58
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TextareaDirective, "textarea[twTextarea]", ["twTextarea"], { "size": { "alias": "size"; "required": false; "isSignal": true; }; "autosize": { "alias": "autosize"; "required": false; "isSignal": true; }; "minRows": { "alias": "minRows"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.CdkTextareaAutosize; inputs: { "cdkAutosizeMinRows": "minRows"; "cdkAutosizeMaxRows": "maxRows"; }; outputs: {}; }]>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export { TextareaDirective };
|
|
62
|
+
export type { TwTextareaResize };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { OnDestroy, InjectionToken, EnvironmentProviders } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/** The user-selectable theme. `'system'` defers to the OS `prefers-color-scheme` setting. */
|
|
5
|
+
type TwTheme = 'light' | 'dark' | 'high-contrast' | 'system';
|
|
6
|
+
/** The theme actually applied to the DOM after resolving `'system'` against the OS preference. */
|
|
7
|
+
type TwResolvedTheme = 'light' | 'dark' | 'high-contrast';
|
|
8
|
+
/** Ordered list of every {@link TwTheme} value, used by `cycleTheme()` and for UI iteration. */
|
|
9
|
+
declare const TW_THEMES: readonly ["light", "dark", "high-contrast", "system"];
|
|
10
|
+
/** Ordered list of every {@link TwResolvedTheme} value (i.e. {@link TW_THEMES} minus `'system'`). */
|
|
11
|
+
declare const TW_RESOLVED_THEMES: readonly ["light", "dark", "high-contrast"];
|
|
12
|
+
/** Runtime configuration for {@link provideTheme}; controls storage, attribute name, target element, and default. */
|
|
13
|
+
interface TwThemeConfig {
|
|
14
|
+
/** The default theme when no preference is stored. Defaults to `'system'`. */
|
|
15
|
+
defaultTheme: TwTheme;
|
|
16
|
+
/** localStorage key for persisting theme preference. Defaults to `'ngx-tw-theme'`. */
|
|
17
|
+
storageKey: string;
|
|
18
|
+
/** The HTML attribute written to the target element. Defaults to `'data-theme'`. */
|
|
19
|
+
attribute: string;
|
|
20
|
+
/** Which element receives the theme attribute. Defaults to `'documentElement'`. */
|
|
21
|
+
target: 'documentElement' | 'body';
|
|
22
|
+
}
|
|
23
|
+
/** Composite snapshot of `ThemeService` state — selected, resolved, system, and boolean flags. */
|
|
24
|
+
interface TwThemeState {
|
|
25
|
+
/** The user-selected theme — may be `'system'`. */
|
|
26
|
+
readonly theme: TwTheme;
|
|
27
|
+
/** The theme actually applied to the DOM — never `'system'`. */
|
|
28
|
+
readonly resolvedTheme: TwResolvedTheme;
|
|
29
|
+
/** The OS color-scheme preference detected via `prefers-color-scheme`. */
|
|
30
|
+
readonly systemTheme: TwResolvedTheme;
|
|
31
|
+
/** True when {@link resolvedTheme} is `'dark'`. */
|
|
32
|
+
readonly isDark: boolean;
|
|
33
|
+
/** True when {@link resolvedTheme} is `'light'`. */
|
|
34
|
+
readonly isLight: boolean;
|
|
35
|
+
/** True when {@link resolvedTheme} is `'high-contrast'`. */
|
|
36
|
+
readonly isHighContrast: boolean;
|
|
37
|
+
}
|
|
38
|
+
/** Built-in defaults merged under any user-provided {@link TwThemeConfig} by `provideTheme()`. */
|
|
39
|
+
declare const DEFAULT_TW_THEME_CONFIG: TwThemeConfig;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Stateful runtime service that owns the active theme, reacts to OS
|
|
43
|
+
* `prefers-color-scheme` changes, persists the user selection to
|
|
44
|
+
* `localStorage`, and writes the resolved theme onto the configured DOM
|
|
45
|
+
* target as a `data-theme` attribute.
|
|
46
|
+
*
|
|
47
|
+
* The selected {@link theme} may be `'system'` (defer to the OS); the
|
|
48
|
+
* {@link resolvedTheme} computed from it is always one of `'light'`,
|
|
49
|
+
* `'dark'`, or `'high-contrast'` — never `'system'`. Register via
|
|
50
|
+
* {@link provideTheme} in the app's environment providers.
|
|
51
|
+
*/
|
|
52
|
+
declare class ThemeService implements OnDestroy {
|
|
53
|
+
private readonly config;
|
|
54
|
+
private readonly document;
|
|
55
|
+
private readonly isBrowser;
|
|
56
|
+
private readonly ngZone;
|
|
57
|
+
private mediaQuery;
|
|
58
|
+
private readonly mediaListener;
|
|
59
|
+
/** The user-selected theme (may be `'system'`). */
|
|
60
|
+
readonly theme: _angular_core.WritableSignal<TwTheme>;
|
|
61
|
+
/** The OS color scheme preference. */
|
|
62
|
+
readonly systemTheme: _angular_core.WritableSignal<TwResolvedTheme>;
|
|
63
|
+
/** The resolved theme actually applied to the DOM (never `'system'`). */
|
|
64
|
+
readonly resolvedTheme: _angular_core.Signal<TwResolvedTheme>;
|
|
65
|
+
/** True when the resolved theme is `'dark'`. */
|
|
66
|
+
readonly isDark: _angular_core.Signal<boolean>;
|
|
67
|
+
/** True when the resolved theme is `'light'`. */
|
|
68
|
+
readonly isLight: _angular_core.Signal<boolean>;
|
|
69
|
+
/** True when the resolved theme is `'high-contrast'`. */
|
|
70
|
+
readonly isHighContrast: _angular_core.Signal<boolean>;
|
|
71
|
+
/** Snapshot of the full theme state — selected, resolved, system, and boolean flags. */
|
|
72
|
+
readonly state: _angular_core.Signal<TwThemeState>;
|
|
73
|
+
constructor();
|
|
74
|
+
/** Sets the selected theme. Pass `'system'` to follow the OS preference. */
|
|
75
|
+
setTheme(theme: TwTheme): void;
|
|
76
|
+
/** Advances the selected theme to the next entry in {@link TW_THEMES}, wrapping around. */
|
|
77
|
+
cycleTheme(): void;
|
|
78
|
+
/** Writes the configured theme attribute onto an arbitrary element — used to scope themes to a subtree. */
|
|
79
|
+
applyToElement(element: HTMLElement, theme: TwResolvedTheme): void;
|
|
80
|
+
ngOnDestroy(): void;
|
|
81
|
+
private loadInitialTheme;
|
|
82
|
+
private detectSystemTheme;
|
|
83
|
+
private applyToDocument;
|
|
84
|
+
private persistTheme;
|
|
85
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
|
|
86
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
declare class ThemeDirective {
|
|
90
|
+
/** Scopes a subtree to a specific resolved theme by writing `data-theme` on the host. Required. */
|
|
91
|
+
readonly twTheme: _angular_core.InputSignal<TwResolvedTheme>;
|
|
92
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeDirective, never>;
|
|
93
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ThemeDirective, "[twTheme]", never, { "twTheme": { "alias": "twTheme"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Injection token carrying the resolved {@link TwThemeConfig} (storage key, attribute, target element, default theme). */
|
|
97
|
+
declare const THEME_CONFIG: InjectionToken<TwThemeConfig>;
|
|
98
|
+
/**
|
|
99
|
+
* Registers {@link ThemeService} and a {@link THEME_CONFIG} value built by
|
|
100
|
+
* merging `config` over {@link DEFAULT_TW_THEME_CONFIG}. Call once in the
|
|
101
|
+
* app's environment providers.
|
|
102
|
+
*/
|
|
103
|
+
declare function provideTheme(config?: Partial<TwThemeConfig>): EnvironmentProviders;
|
|
104
|
+
|
|
105
|
+
export { DEFAULT_TW_THEME_CONFIG, THEME_CONFIG, TW_RESOLVED_THEMES, TW_THEMES, ThemeDirective, ThemeService, provideTheme };
|
|
106
|
+
export type { TwResolvedTheme, TwTheme, TwThemeConfig, TwThemeState };
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Provider, OnInit, Signal } from '@angular/core';
|
|
3
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
4
|
+
import { TwSize, TwColor, TimePickerFormat, ErrorStateMatcher, TimePickerMeridiem } from '@cdevhub/ngx-tw/core';
|
|
5
|
+
export { TimePickerFormat, TimePickerMeridiem } from '@cdevhub/ngx-tw/core';
|
|
6
|
+
import { FormFieldControl } from '@cdevhub/ngx-tw/form-field';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Localized strings + ARIA announcements consumed by the time-picker.
|
|
10
|
+
*
|
|
11
|
+
* Override per-field via Angular DI — provide a custom instance, or supply a
|
|
12
|
+
* `Partial<TimePickerIntl>` through `provideTimePickerIntl`. Unset fields
|
|
13
|
+
* fall through to the English defaults shipped here.
|
|
14
|
+
*
|
|
15
|
+
* All members take primitives so consumers can write straight string
|
|
16
|
+
* literals or template helpers without depending on internal types.
|
|
17
|
+
*/
|
|
18
|
+
declare class TimePickerIntl {
|
|
19
|
+
/** Accessible name for the fields group (the wrapper around hours/minutes/seconds). */
|
|
20
|
+
groupLabel: string;
|
|
21
|
+
/** Accessible name for the hours field. */
|
|
22
|
+
hoursLabel: string;
|
|
23
|
+
/** Accessible name for the minutes field. */
|
|
24
|
+
minutesLabel: string;
|
|
25
|
+
/** Accessible name for the seconds field. */
|
|
26
|
+
secondsLabel: string;
|
|
27
|
+
/** Accessible name for the meridiem (AM/PM) radio group. */
|
|
28
|
+
meridiemGroupLabel: string;
|
|
29
|
+
/** Display + accessible name for the AM option. */
|
|
30
|
+
amLabel: string;
|
|
31
|
+
/** Display + accessible name for the PM option. */
|
|
32
|
+
pmLabel: string;
|
|
33
|
+
/** Aria label template for the up stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */
|
|
34
|
+
increaseLabel(field: string): string;
|
|
35
|
+
/** Aria label template for the down stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */
|
|
36
|
+
decreaseLabel(field: string): string;
|
|
37
|
+
/** Aria label for the clear button. */
|
|
38
|
+
clearLabel: string;
|
|
39
|
+
/** Live-region message announced after the value is cleared. */
|
|
40
|
+
clearedAnnouncement: string;
|
|
41
|
+
/** Live-region message after a commit. Receives the pre-formatted time string (e.g. `'02:30 PM'`). */
|
|
42
|
+
selectedAnnouncement(formattedTime: string): string;
|
|
43
|
+
/** Spoken text for an empty hour/minute/second field — used as `aria-valuetext` when the field is blank. */
|
|
44
|
+
emptyValueText: string;
|
|
45
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimePickerIntl, never>;
|
|
46
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TimePickerIntl>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Provides a custom `TimePickerIntl` instance. Place at any injector level —
|
|
50
|
+
* the time-picker resolves the closest one.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts
|
|
54
|
+
* providers: [
|
|
55
|
+
* provideTimePickerIntl({
|
|
56
|
+
* hoursLabel: 'Heures',
|
|
57
|
+
* minutesLabel: 'Minutes',
|
|
58
|
+
* meridiemGroupLabel: 'AM ou PM',
|
|
59
|
+
* }),
|
|
60
|
+
* ]
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
declare function provideTimePickerIntl(custom: Partial<TimePickerIntl>): Provider;
|
|
64
|
+
|
|
65
|
+
/** Visual style of the time-picker chrome. */
|
|
66
|
+
type TimePickerVariant = 'default' | 'naked';
|
|
67
|
+
/** Logical field inside the time-picker. */
|
|
68
|
+
type TimePickerField = 'hour' | 'minute' | 'second' | 'meridiem';
|
|
69
|
+
/** Origin of a value change — useful when consumers need to distinguish user input from programmatic writes. */
|
|
70
|
+
type TimePickerChangeSource = 'input' | 'stepper' | 'meridiem' | 'clear' | 'programmatic';
|
|
71
|
+
/** Emitted by `timeChange` after a committed value update. */
|
|
72
|
+
interface TimePickerChangeEvent<D> {
|
|
73
|
+
/** The committed value (`null` when cleared). */
|
|
74
|
+
readonly value: D | null;
|
|
75
|
+
/** The value before this change. */
|
|
76
|
+
readonly previousValue: D | null;
|
|
77
|
+
/** What triggered the change. */
|
|
78
|
+
readonly source: TimePickerChangeSource;
|
|
79
|
+
}
|
|
80
|
+
/** Emitted by `timeInput` before a commit, on every keystroke or stepper press. */
|
|
81
|
+
interface TimePickerInputEvent<D> {
|
|
82
|
+
/** Which field was edited. */
|
|
83
|
+
readonly field: TimePickerField;
|
|
84
|
+
/** The raw text currently in that field (pre-commit). */
|
|
85
|
+
readonly rawText: string;
|
|
86
|
+
/** The parsed value if fields form a valid time, else `null`. */
|
|
87
|
+
readonly parsed: D | null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Segmented time editor. Renders `HH : MM` (with an optional `: SS` and/or
|
|
92
|
+
* `AM/PM` toggle) and integrates with all three Angular form strategies via
|
|
93
|
+
* `ControlValueAccessor`. Also participates in `<tw-form-field>` through
|
|
94
|
+
* `FormFieldControl` — wrapping is optional.
|
|
95
|
+
*
|
|
96
|
+
* Value type is `D | null`. Every time operation flows through the injected
|
|
97
|
+
* `DateAdapter<D>`, so the component works with the default native adapter
|
|
98
|
+
* (`provideNativeDateAdapter()`) or any custom adapter a consumer ships.
|
|
99
|
+
*/
|
|
100
|
+
declare class TimePickerComponent<D = Date> extends FormFieldControl<D> implements ControlValueAccessor, OnInit {
|
|
101
|
+
/** Id on the time-picker's host element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */
|
|
102
|
+
readonly idInput: _angular_core.InputSignal<string | undefined>;
|
|
103
|
+
/** When true, the whole component is disabled and every field sets `aria-disabled="true"`. Defaults to `false`. */
|
|
104
|
+
readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
105
|
+
/** When true, exposes `aria-required="true"`. Validators.required on a bound NgControl is also honoured. Defaults to `false`. */
|
|
106
|
+
readonly requiredInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
107
|
+
/** When true, blocks typing, stepping, and the AM/PM toggle — the value is still read-only visible. Defaults to `false`. */
|
|
108
|
+
readonly readonlyInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
109
|
+
/** Controls field height, font size, and stepper density. Defaults to `'md'`. */
|
|
110
|
+
readonly size: _angular_core.InputSignal<TwSize>;
|
|
111
|
+
/** Semantic color used for the focused border and focus ring. Defaults to `'primary'`. */
|
|
112
|
+
readonly color: _angular_core.InputSignal<TwColor>;
|
|
113
|
+
/** Visual style of the chrome. `'default'` draws its own border; `'naked'` strips chrome. Auto-resolves to `'naked'` inside `<tw-form-field>`. */
|
|
114
|
+
readonly variant: _angular_core.InputSignal<TimePickerVariant | undefined>;
|
|
115
|
+
/** `'12h'` renders 1–12 hours with an AM/PM toggle; `'24h'` renders 00–23. Defaults to `'24h'`. */
|
|
116
|
+
readonly format: _angular_core.InputSignal<TimePickerFormat>;
|
|
117
|
+
/** When true, renders a seconds field after minutes. Defaults to `false`. */
|
|
118
|
+
readonly showSeconds: _angular_core.InputSignal<boolean>;
|
|
119
|
+
/** Amount to add/subtract when stepping hours. Defaults to `1`. */
|
|
120
|
+
readonly hourStep: _angular_core.InputSignal<number>;
|
|
121
|
+
/** Amount to add/subtract when stepping minutes. Defaults to `1`. */
|
|
122
|
+
readonly minuteStep: _angular_core.InputSignal<number>;
|
|
123
|
+
/** Amount to add/subtract when stepping seconds. Defaults to `1`. */
|
|
124
|
+
readonly secondStep: _angular_core.InputSignal<number>;
|
|
125
|
+
/** Earliest accepted time-of-day. Values earlier than this set `errorState`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `minTime` with zeroed seconds to match the 2-field display. */
|
|
126
|
+
readonly minTime: _angular_core.InputSignal<D | null>;
|
|
127
|
+
/** Latest accepted time-of-day. Values later than this set `errorState`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `maxTime` with zeroed seconds to match the 2-field display. */
|
|
128
|
+
readonly maxTime: _angular_core.InputSignal<D | null>;
|
|
129
|
+
/** Date portion used when the user types a time while `value` is `null`. Defaults to today. */
|
|
130
|
+
readonly referenceDate: _angular_core.InputSignal<D | null>;
|
|
131
|
+
/** Placeholder shown in each field when empty. Defaults to `'--'`. */
|
|
132
|
+
readonly placeholder: _angular_core.InputSignal<string | undefined>;
|
|
133
|
+
/** Whether to render the up/down stepper column. Defaults to `true`. */
|
|
134
|
+
readonly showSteppers: _angular_core.InputSignal<boolean>;
|
|
135
|
+
/** Whether to render the clear affordance when a value is set. Defaults to `true`. */
|
|
136
|
+
readonly showClear: _angular_core.InputSignal<boolean>;
|
|
137
|
+
/** Accessible label for the clear button. Defaults to `'Clear time'`. */
|
|
138
|
+
readonly clearLabel: _angular_core.InputSignal<string>;
|
|
139
|
+
/** Per-instance override of the `ErrorStateMatcher`. */
|
|
140
|
+
readonly errorStateMatcher: _angular_core.InputSignal<ErrorStateMatcher | undefined>;
|
|
141
|
+
/** Accessible name for the fields group. Required when no visible label is supplied. Alias: `aria-label`. */
|
|
142
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
143
|
+
/** ID of an external element that labels the group. Alias: `aria-labelledby`. */
|
|
144
|
+
readonly ariaLabelledby: _angular_core.InputSignal<string | undefined>;
|
|
145
|
+
/** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. */
|
|
146
|
+
readonly userAriaDescribedByInput: _angular_core.InputSignal<string | undefined>;
|
|
147
|
+
/** Two-way bound current time. `null` when empty. Setting programmatically updates the fields without firing `onChange`. */
|
|
148
|
+
readonly value: _angular_core.ModelSignal<D | null>;
|
|
149
|
+
/** Fires on every keystroke, stepper press, or AM/PM toggle — before the new value is committed. */
|
|
150
|
+
readonly timeInput: _angular_core.OutputEmitterRef<TimePickerInputEvent<D>>;
|
|
151
|
+
/** Fires after a committed change — digit + auto-advance, stepper, meridiem toggle, clear, or programmatic write. */
|
|
152
|
+
readonly timeChange: _angular_core.OutputEmitterRef<TimePickerChangeEvent<D>>;
|
|
153
|
+
private readonly adapter;
|
|
154
|
+
private readonly focusMonitor;
|
|
155
|
+
private readonly liveAnnouncer;
|
|
156
|
+
private readonly elementRef;
|
|
157
|
+
private readonly destroyRef;
|
|
158
|
+
private readonly formField;
|
|
159
|
+
private readonly ngControl;
|
|
160
|
+
private readonly parentForm;
|
|
161
|
+
private readonly parentFormGroup;
|
|
162
|
+
private readonly defaultMatcher;
|
|
163
|
+
/** @internal — exposed for the template; consumers configure via `provideTimePickerIntl()`. */
|
|
164
|
+
protected readonly intl: TimePickerIntl;
|
|
165
|
+
private readonly hourInputRef;
|
|
166
|
+
private readonly minuteInputRef;
|
|
167
|
+
private readonly secondInputRef;
|
|
168
|
+
private readonly uid;
|
|
169
|
+
/** @internal */
|
|
170
|
+
readonly hostId: string;
|
|
171
|
+
/** @internal raw display text per field — always the numerals the user sees. */
|
|
172
|
+
readonly hourText: _angular_core.WritableSignal<string>;
|
|
173
|
+
/** @internal */
|
|
174
|
+
readonly minuteText: _angular_core.WritableSignal<string>;
|
|
175
|
+
/** @internal */
|
|
176
|
+
readonly secondText: _angular_core.WritableSignal<string>;
|
|
177
|
+
/** @internal */
|
|
178
|
+
readonly meridiem: _angular_core.WritableSignal<TimePickerMeridiem>;
|
|
179
|
+
/** @internal */
|
|
180
|
+
readonly focusedField: _angular_core.WritableSignal<TimePickerField | null>;
|
|
181
|
+
/** @internal */
|
|
182
|
+
readonly internalValue: _angular_core.WritableSignal<D | null>;
|
|
183
|
+
private readonly cvaDisabled;
|
|
184
|
+
private readonly describedByIdsSignal;
|
|
185
|
+
private readonly focusedSignal;
|
|
186
|
+
private readonly _ngControlRev;
|
|
187
|
+
private readonly _formSubmitRev;
|
|
188
|
+
/** When true, an effect should not rewrite field text from the external value. */
|
|
189
|
+
private editing;
|
|
190
|
+
private onChange;
|
|
191
|
+
private onTouched;
|
|
192
|
+
/** @internal */
|
|
193
|
+
readonly isDisabled: Signal<boolean>;
|
|
194
|
+
/** @internal */
|
|
195
|
+
readonly isEmpty: Signal<boolean>;
|
|
196
|
+
/** @internal Effective variant — auto-naked when wrapped in tw-form-field. */
|
|
197
|
+
readonly resolvedVariant: Signal<TimePickerVariant>;
|
|
198
|
+
/** @internal */
|
|
199
|
+
readonly hourMin: Signal<number>;
|
|
200
|
+
/** @internal */
|
|
201
|
+
readonly hourMax: Signal<number>;
|
|
202
|
+
/** @internal */
|
|
203
|
+
readonly hourDisplay: Signal<string>;
|
|
204
|
+
/** @internal */
|
|
205
|
+
readonly hourValueNow: Signal<number | null>;
|
|
206
|
+
/** @internal */
|
|
207
|
+
readonly hourValueText: Signal<string>;
|
|
208
|
+
/** @internal */
|
|
209
|
+
readonly minuteValueNow: Signal<number | null>;
|
|
210
|
+
/** @internal */
|
|
211
|
+
readonly minuteValueText: Signal<string>;
|
|
212
|
+
/** @internal */
|
|
213
|
+
readonly secondValueNow: Signal<number | null>;
|
|
214
|
+
/** @internal */
|
|
215
|
+
readonly secondValueText: Signal<string>;
|
|
216
|
+
/** @internal */
|
|
217
|
+
readonly groupAriaLabel: Signal<string>;
|
|
218
|
+
/** @internal Label of the currently focused field, used by stepper aria-labels. */
|
|
219
|
+
readonly focusedFieldLabel: Signal<string>;
|
|
220
|
+
/** @internal */
|
|
221
|
+
readonly describedBy: Signal<string>;
|
|
222
|
+
private readonly rangeError;
|
|
223
|
+
private readonly variantResult;
|
|
224
|
+
/** @internal */ readonly rootClasses: Signal<string>;
|
|
225
|
+
/** @internal */ readonly fieldGroupClasses: Signal<string>;
|
|
226
|
+
/** @internal */ readonly fieldClasses: Signal<string>;
|
|
227
|
+
/** @internal */ readonly separatorClasses: Signal<string>;
|
|
228
|
+
/** @internal */ readonly stepperGroupClasses: Signal<string>;
|
|
229
|
+
/** @internal */ readonly stepperClasses: Signal<string>;
|
|
230
|
+
/** @internal */ readonly stepperIconClasses: Signal<string>;
|
|
231
|
+
/** @internal */ readonly meridiemClasses: Signal<string>;
|
|
232
|
+
/** @internal */ readonly clearButtonClasses: Signal<string>;
|
|
233
|
+
/** @internal */
|
|
234
|
+
meridiemButtonClasses(which: TimePickerMeridiem): string;
|
|
235
|
+
/** @internal */ readonly id: Signal<string>;
|
|
236
|
+
/** @internal */ readonly focused: Signal<boolean>;
|
|
237
|
+
/** @internal */ readonly empty: Signal<boolean>;
|
|
238
|
+
/** @internal */ readonly disabled: Signal<boolean>;
|
|
239
|
+
/** @internal */ readonly required: Signal<boolean>;
|
|
240
|
+
/** @internal */
|
|
241
|
+
readonly errorState: Signal<boolean>;
|
|
242
|
+
/** @internal */ readonly controlType = "time-picker";
|
|
243
|
+
/** @internal */
|
|
244
|
+
readonly userAriaDescribedBy: Signal<string | undefined>;
|
|
245
|
+
constructor();
|
|
246
|
+
ngOnInit(): void;
|
|
247
|
+
/** Moves focus to the hours field. */
|
|
248
|
+
focus(): void;
|
|
249
|
+
/** Clears the value and emits `timeChange` with `source: 'clear'`. */
|
|
250
|
+
clear(): void;
|
|
251
|
+
/** @internal */
|
|
252
|
+
onFieldFocus(field: TimePickerField): void;
|
|
253
|
+
/** @internal */
|
|
254
|
+
onFieldBlur(_field: TimePickerField): void;
|
|
255
|
+
/** @internal */
|
|
256
|
+
onBeforeInput(event: Event, field: TimePickerField): void;
|
|
257
|
+
/** @internal Handle native delete events (Backspace/Delete). */
|
|
258
|
+
onInputEvent(event: Event, field: TimePickerField): void;
|
|
259
|
+
/** @internal */
|
|
260
|
+
onFieldKeydown(event: KeyboardEvent, field: TimePickerField): void;
|
|
261
|
+
/** @internal */
|
|
262
|
+
setMeridiem(m: TimePickerMeridiem): void;
|
|
263
|
+
/** @internal */
|
|
264
|
+
onMeridiemKeydown(event: KeyboardEvent, m: TimePickerMeridiem): void;
|
|
265
|
+
/** @internal */
|
|
266
|
+
onStepperMouseDown(event: MouseEvent): void;
|
|
267
|
+
/** @internal */
|
|
268
|
+
onStepperClick(direction: 1 | -1): void;
|
|
269
|
+
/** @internal */
|
|
270
|
+
onClearClick(event: MouseEvent): void;
|
|
271
|
+
private typeDigit;
|
|
272
|
+
private stepField;
|
|
273
|
+
private commitFromFields;
|
|
274
|
+
private buildValueIfComplete;
|
|
275
|
+
private toCanonicalHour;
|
|
276
|
+
private resolveBaseDate;
|
|
277
|
+
private commit;
|
|
278
|
+
private formatAnnouncement;
|
|
279
|
+
private isInRange;
|
|
280
|
+
private normalizeEmptyFields;
|
|
281
|
+
private moveFocus;
|
|
282
|
+
private isFieldCaretAtStart;
|
|
283
|
+
private isFieldCaretAtEnd;
|
|
284
|
+
private getFieldEl;
|
|
285
|
+
private getFieldText;
|
|
286
|
+
private setFieldText;
|
|
287
|
+
private stepFor;
|
|
288
|
+
private fieldMinFor;
|
|
289
|
+
private fieldMaxFor;
|
|
290
|
+
writeValue(value: unknown): void;
|
|
291
|
+
registerOnChange(fn: (value: D | null) => void): void;
|
|
292
|
+
registerOnTouched(fn: () => void): void;
|
|
293
|
+
setDisabledState(isDisabled: boolean): void;
|
|
294
|
+
/** @internal */
|
|
295
|
+
setDescribedByIds(ids: string[]): void;
|
|
296
|
+
/** @internal */
|
|
297
|
+
onContainerClick(event: MouseEvent): void;
|
|
298
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimePickerComponent<any>, never>;
|
|
299
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimePickerComponent<any>, "tw-time-picker", never, { "idInput": { "alias": "id"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "requiredInput": { "alias": "required"; "required": false; "isSignal": true; }; "readonlyInput": { "alias": "readonly"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "hourStep": { "alias": "hourStep"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "secondStep": { "alias": "secondStep"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; "referenceDate": { "alias": "referenceDate"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "showSteppers": { "alias": "showSteppers"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; "userAriaDescribedByInput": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "timeInput": "timeInput"; "timeChange": "timeChange"; }, never, ["[slot=stepper-up]", "[slot=stepper-down]"], true, never>;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export { TimePickerComponent, TimePickerIntl, provideTimePickerIntl };
|
|
303
|
+
export type { TimePickerChangeEvent, TimePickerChangeSource, TimePickerField, TimePickerInputEvent, TimePickerVariant };
|