ng-hub-ui-forms 22.28.0 → 22.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +102 -24
- package/fesm2022/ng-hub-ui-forms.mjs +57 -11
- package/fesm2022/ng-hub-ui-forms.mjs.map +1 -1
- package/package.json +2 -2
- package/styles/_field.scss +69 -0
- package/styles/_tokens.scss +20 -0
- package/types/ng-hub-ui-forms.d.ts +44 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng-hub-ui-forms",
|
|
3
|
-
"version": "22.
|
|
3
|
+
"version": "22.30.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Accessible, signal-based form fields for Angular (input, textarea, slider, segmented, select, datepicker, file input with drag & drop and upload progress) with automatic error display for controls, FormGroups and FormArrays. Reactive Forms today, Signal Forms ready. Part of the ng-hub-ui family.",
|
|
6
6
|
"author": "Carlos Morcillo <carlos.morcillo@me.com> (https://www.carlosmorcillo.com)",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "git+https://github.com/carlos-morcillo/ng-hub-ui-forms.git"
|
|
10
10
|
},
|
|
11
|
-
"homepage": "https://hubui.dev/",
|
|
11
|
+
"homepage": "https://hubui.dev/en/forms/overview/",
|
|
12
12
|
"keywords": [
|
|
13
13
|
"angular",
|
|
14
14
|
"forms",
|
package/styles/_field.scss
CHANGED
|
@@ -236,3 +236,72 @@ hub-timepicker {
|
|
|
236
236
|
border-color: var(--hub-form-invalid-border-color);
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Plain-text fields: the value with no field around it.
|
|
242
|
+
*
|
|
243
|
+
* The other half of read-only, and the difference is who the field is for.
|
|
244
|
+
* `--readonly` still belongs to somebody filling a form in — it keeps the box so the
|
|
245
|
+
* field holds its place in the row and looks like the editable ones beside it, only
|
|
246
|
+
* shut. `--plaintext` is for the value that is simply being *shown*: a record open for
|
|
247
|
+
* consultation, a figure the server settled, a field a plan has locked. There the box
|
|
248
|
+
* is noise, and a screen full of them reads as a form that refuses to work.
|
|
249
|
+
*
|
|
250
|
+
* Modelled on Bootstrap's `.form-control-plaintext`, deliberately: it is the shape
|
|
251
|
+
* every reader already knows, and it solves the hard part — the control stays a real
|
|
252
|
+
* `<input>`/`<textarea>`, so the `<label for>` still points at something labelable and
|
|
253
|
+
* the text stays selectable. A `<span>` would have broken both.
|
|
254
|
+
*
|
|
255
|
+
* The horizontal padding goes and the border turns transparent **without losing its
|
|
256
|
+
* width**. That is the whole trick: the text lands on the same baseline as an editable
|
|
257
|
+
* neighbour in the same grid, so a form mixing the two does not stagger.
|
|
258
|
+
*/
|
|
259
|
+
.hub-field--plaintext {
|
|
260
|
+
.hub-field__control,
|
|
261
|
+
.hub-input__control,
|
|
262
|
+
.hub-textarea__control,
|
|
263
|
+
.hub-select__control {
|
|
264
|
+
padding-inline: 0;
|
|
265
|
+
padding-block: var(--hub-input-plaintext-padding-block);
|
|
266
|
+
font-weight: var(--hub-input-plaintext-font-weight);
|
|
267
|
+
color: var(--hub-input-plaintext-color);
|
|
268
|
+
background-color: transparent;
|
|
269
|
+
border-color: transparent;
|
|
270
|
+
border-width: var(--hub-input-border-width) 0;
|
|
271
|
+
box-shadow: none;
|
|
272
|
+
cursor: text;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Nothing here answers to being focused, but the control still takes focus — it is
|
|
276
|
+
// still an input, and taking it away would strand keyboard users mid-form.
|
|
277
|
+
.hub-field__control:focus,
|
|
278
|
+
.hub-field__control:focus-visible,
|
|
279
|
+
.hub-input__control:focus,
|
|
280
|
+
.hub-textarea__control:focus,
|
|
281
|
+
.hub-select__control.ng-select-focused {
|
|
282
|
+
border-color: transparent;
|
|
283
|
+
box-shadow: none;
|
|
284
|
+
outline: none;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// A textarea shown as plain text is a paragraph, not a box you can drag open.
|
|
288
|
+
.hub-textarea__control {
|
|
289
|
+
resize: none;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// Every affordance promises a choice that is not on offer here.
|
|
293
|
+
.hub-select__control {
|
|
294
|
+
.ng-arrow-wrapper,
|
|
295
|
+
.ng-clear-wrapper {
|
|
296
|
+
display: none;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.hub-datepicker__icon {
|
|
301
|
+
display: none;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Unlike read-only, no exception for the invalid border: a field with no box is not
|
|
305
|
+
// being filled in, so there is no input to reject. If the value is wrong, that is
|
|
306
|
+
// the record's problem and not this screen's.
|
|
307
|
+
}
|
package/styles/_tokens.scss
CHANGED
|
@@ -106,6 +106,26 @@
|
|
|
106
106
|
--hub-input-readonly-border-color: transparent;
|
|
107
107
|
--hub-input-readonly-color: var(--hub-input-color);
|
|
108
108
|
--hub-input-readonly-cursor: default;
|
|
109
|
+
|
|
110
|
+
// Plain-text fields. The label is left exactly as every other field's - same tokens, same
|
|
111
|
+
// weight - because a form's labels have to keep one rhythm whatever state each field is
|
|
112
|
+
// in. It is the value that steps back a shade: measured, label and value came out the
|
|
113
|
+
// same colour, and inside a box that is fine because the box separates them. With no box
|
|
114
|
+
// the value carries the signal on its own, and a touch lighter says "this is not being
|
|
115
|
+
// edited" without breaking the column.
|
|
116
|
+
--hub-input-plaintext-color: var(--hub-ref-color-gray-700, #495057);
|
|
117
|
+
|
|
118
|
+
// The block padding a plain-text control keeps: none above, the field's whole vertical
|
|
119
|
+
// padding below. Two things at once, and neither is negotiable on its own. Nothing above
|
|
120
|
+
// puts the value right under its label, because a label and its value are one thing and
|
|
121
|
+
// should read as a pair. Twice the padding below keeps the total height exactly an
|
|
122
|
+
// editable field's, so a grid mixing the two still lines up - by construction rather than
|
|
123
|
+
// by a number that would drift the moment `--hub-input-padding-y` moved.
|
|
124
|
+
--hub-input-plaintext-padding-block: 0 calc(var(--hub-input-padding-y) * 2);
|
|
125
|
+
|
|
126
|
+
// A shade lighter than an editable value, and a step lighter in weight. A value nobody is
|
|
127
|
+
// typing is being read, not filled, and it should not shout over its own label.
|
|
128
|
+
--hub-input-plaintext-font-weight: 300;
|
|
109
129
|
--hub-input-transition: var(--hub-form-transition);
|
|
110
130
|
--hub-input-wrapper-gap: var(--hub-ref-space-2, 0.5rem);
|
|
111
131
|
|
|
@@ -796,6 +796,19 @@ declare class HubInputComponent extends HubFieldControl {
|
|
|
796
796
|
readonly step: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
797
797
|
/** Whether the input is read-only. */
|
|
798
798
|
readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
799
|
+
/**
|
|
800
|
+
* Render the value as plain text, with no field styling around it.
|
|
801
|
+
*
|
|
802
|
+
* For the value that belongs in a form but is not the reader's to change: a figure
|
|
803
|
+
* the server settled, a field a plan has locked, the whole of a record shown for
|
|
804
|
+
* consultation. It stays a real `<input>` — so the label keeps pointing at a control
|
|
805
|
+
* and the text stays selectable — and only loses the box, which on something that
|
|
806
|
+
* refuses input was a promise it could not keep.
|
|
807
|
+
*
|
|
808
|
+
* Implies `readonly`: a field with no box that still accepted typing would be an
|
|
809
|
+
* invisible input.
|
|
810
|
+
*/
|
|
811
|
+
readonly plaintext: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
799
812
|
/** Helper text shown below the control. */
|
|
800
813
|
readonly formText: _angular_core.InputSignal<string>;
|
|
801
814
|
/** Helper text placement. Only `bottom` is supported. */
|
|
@@ -834,6 +847,13 @@ declare class HubInputComponent extends HubFieldControl {
|
|
|
834
847
|
readonly indeterminate: _angular_core.ModelSignal<boolean>;
|
|
835
848
|
/** Mixed state as the native checkbox should actually receive it. */
|
|
836
849
|
protected readonly isIndeterminate: _angular_core.Signal<boolean>;
|
|
850
|
+
/**
|
|
851
|
+
* Read-only as the control actually behaves, which is what the template binds to.
|
|
852
|
+
*
|
|
853
|
+
* `plaintext` implies it, so the two never have to be passed together and cannot be
|
|
854
|
+
* passed in disagreement.
|
|
855
|
+
*/
|
|
856
|
+
protected readonly _isReadonly: _angular_core.Signal<boolean>;
|
|
837
857
|
/** Whether the internal clear button should be shown right now. */
|
|
838
858
|
protected readonly showClear: _angular_core.Signal<boolean>;
|
|
839
859
|
/** Whether an inline-start affix (projected prefix) is present. */
|
|
@@ -943,7 +963,7 @@ declare class HubInputComponent extends HubFieldControl {
|
|
|
943
963
|
/** Clears the selected file(s). */
|
|
944
964
|
protected clearFile(): void;
|
|
945
965
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HubInputComponent, never>;
|
|
946
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HubInputComponent, "hub-input", never, { "passwordRevealed": { "alias": "passwordRevealed"; "required": false; "isSignal": true; }; "passwordToggle": { "alias": "passwordToggle"; "required": false; "isSignal": true; }; "hideOnBlur": { "alias": "hideOnBlur"; "required": false; "isSignal": true; }; "capsLockWarning": { "alias": "capsLockWarning"; "required": false; "isSignal": true; }; "passwordStrength": { "alias": "passwordStrength"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "formText": { "alias": "formText"; "required": false; "isSignal": true; }; "formTextType": { "alias": "formTextType"; "required": false; "isSignal": true; }; "prepend": { "alias": "prepend"; "required": false; "isSignal": true; }; "append": { "alias": "append"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "classlist": { "alias": "classlist"; "required": false; "isSignal": true; }; "mask": { "alias": "mask"; "required": false; "isSignal": true; }; "unmaskValue": { "alias": "unmaskValue"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; "isSignal": true; }; }, { "passwordRevealed": "passwordRevealedChange"; "labelType": "labelTypeChange"; "placeholder": "placeholderChange"; "min": "minChange"; "max": "maxChange"; "indeterminate": "indeterminateChange"; "valueChange": "valueChange"; "enter": "enter"; "search": "search"; }, ["prefixDir", "suffixDir", "_prependTpl", "_appendTpl"], ["[hubInputPrefix]", "[hubInputSuffix]"], true, never>;
|
|
966
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HubInputComponent, "hub-input", never, { "passwordRevealed": { "alias": "passwordRevealed"; "required": false; "isSignal": true; }; "passwordToggle": { "alias": "passwordToggle"; "required": false; "isSignal": true; }; "hideOnBlur": { "alias": "hideOnBlur"; "required": false; "isSignal": true; }; "capsLockWarning": { "alias": "capsLockWarning"; "required": false; "isSignal": true; }; "passwordStrength": { "alias": "passwordStrength"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "plaintext": { "alias": "plaintext"; "required": false; "isSignal": true; }; "formText": { "alias": "formText"; "required": false; "isSignal": true; }; "formTextType": { "alias": "formTextType"; "required": false; "isSignal": true; }; "prepend": { "alias": "prepend"; "required": false; "isSignal": true; }; "append": { "alias": "append"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "classlist": { "alias": "classlist"; "required": false; "isSignal": true; }; "mask": { "alias": "mask"; "required": false; "isSignal": true; }; "unmaskValue": { "alias": "unmaskValue"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; "isSignal": true; }; }, { "passwordRevealed": "passwordRevealedChange"; "labelType": "labelTypeChange"; "placeholder": "placeholderChange"; "min": "minChange"; "max": "maxChange"; "indeterminate": "indeterminateChange"; "valueChange": "valueChange"; "enter": "enter"; "search": "search"; }, ["prefixDir", "suffixDir", "_prependTpl", "_appendTpl"], ["[hubInputPrefix]", "[hubInputSuffix]"], true, never>;
|
|
947
967
|
}
|
|
948
968
|
|
|
949
969
|
/** Character set accepted by the OTP field. */
|
|
@@ -1061,6 +1081,15 @@ declare class HubTextareaComponent extends HubFieldControl {
|
|
|
1061
1081
|
readonly counter: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1062
1082
|
/** Whether the textarea is read-only. */
|
|
1063
1083
|
readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1084
|
+
/**
|
|
1085
|
+
* Render the value as plain text, with no field styling around it.
|
|
1086
|
+
*
|
|
1087
|
+
* The multi-line half of the same idea `HubInputComponent.plaintext` carries: a value
|
|
1088
|
+
* that belongs in the form but is not the reader's to change. It stays a real
|
|
1089
|
+
* `<textarea>`, so the label keeps pointing at a control and the text stays
|
|
1090
|
+
* selectable, and it only loses the box. Implies `readonly`.
|
|
1091
|
+
*/
|
|
1092
|
+
readonly plaintext: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1064
1093
|
/** Helper text shown below the control. */
|
|
1065
1094
|
readonly formText: _angular_core.InputSignal<string>;
|
|
1066
1095
|
/** Helper text placement. Only `bottom` is supported in the MVP. */
|
|
@@ -1079,7 +1108,7 @@ declare class HubTextareaComponent extends HubFieldControl {
|
|
|
1079
1108
|
*/
|
|
1080
1109
|
setValue(value: string): void;
|
|
1081
1110
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HubTextareaComponent, never>;
|
|
1082
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HubTextareaComponent, "hub-textarea", never, { "prepend": { "alias": "prepend"; "required": false; "isSignal": true; }; "append": { "alias": "append"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "cols": { "alias": "cols"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "autoresize": { "alias": "autoresize"; "required": false; "isSignal": true; }; "counter": { "alias": "counter"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "formText": { "alias": "formText"; "required": false; "isSignal": true; }; "formTextType": { "alias": "formTextType"; "required": false; "isSignal": true; }; "classlist": { "alias": "classlist"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, ["_prependTpl", "_appendTpl"], never, true, never>;
|
|
1111
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HubTextareaComponent, "hub-textarea", never, { "prepend": { "alias": "prepend"; "required": false; "isSignal": true; }; "append": { "alias": "append"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "cols": { "alias": "cols"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "autoresize": { "alias": "autoresize"; "required": false; "isSignal": true; }; "counter": { "alias": "counter"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "plaintext": { "alias": "plaintext"; "required": false; "isSignal": true; }; "formText": { "alias": "formText"; "required": false; "isSignal": true; }; "formTextType": { "alias": "formTextType"; "required": false; "isSignal": true; }; "classlist": { "alias": "classlist"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, ["_prependTpl", "_appendTpl"], never, true, never>;
|
|
1083
1112
|
}
|
|
1084
1113
|
|
|
1085
1114
|
/** Value of `<hub-slider>`: a number in single mode, a `[lower, upper]` tuple in range mode. */
|
|
@@ -1845,6 +1874,18 @@ declare class HubDatepickerComponent extends HubFieldControl {
|
|
|
1845
1874
|
readonly firstDayOfWeek: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
|
|
1846
1875
|
/** Weekday header width. Falls back to the global config. */
|
|
1847
1876
|
readonly weekdayFormat: _angular_core.InputSignal<"short" | "narrow" | "long" | undefined>;
|
|
1877
|
+
/**
|
|
1878
|
+
* How the month is written in the panel's header.
|
|
1879
|
+
*
|
|
1880
|
+
* `short` by default, and that default is what keeps the panel still: the panel is as
|
|
1881
|
+
* wide as its widest child, and with the month spelled out that child was the header —
|
|
1882
|
+
* so the calendar grew and shrank as you paged through the year while the day grid it
|
|
1883
|
+
* frames never moved. Measured in Spanish at 1rem: «Septiembre de 2026» needs 152px
|
|
1884
|
+
* against the 104px the header has left over once the two nav groups have taken theirs,
|
|
1885
|
+
* so nothing but an abbreviation fits. Ask for `long` where the panel has room and the
|
|
1886
|
+
* spelled-out month is worth the movement.
|
|
1887
|
+
*/
|
|
1888
|
+
readonly monthFormat: _angular_core.InputSignal<"short" | "long">;
|
|
1848
1889
|
/**
|
|
1849
1890
|
* How the selected value is displayed in the input. Accepts `Intl` options (the original
|
|
1850
1891
|
* contract), an Angular date pattern such as `'dd/MM/yyyy HH:mm'`, or a formatting function.
|
|
@@ -2054,7 +2095,7 @@ declare class HubDatepickerComponent extends HubFieldControl {
|
|
|
2054
2095
|
/** Moves the period grid's focus without selecting. */
|
|
2055
2096
|
protected onPeriodFocusMove(date: Date): void;
|
|
2056
2097
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HubDatepickerComponent, never>;
|
|
2057
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HubDatepickerComponent, "hub-datepicker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "weekdayFormat": { "alias": "weekdayFormat"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "timeDisplayFormat": { "alias": "timeDisplayFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "secondStep": { "alias": "secondStep"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabledDates": { "alias": "disabledDates"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "showToday": { "alias": "showToday"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "formText": { "alias": "formText"; "required": false; "isSignal": true; }; "formTextType": { "alias": "formTextType"; "required": false; "isSignal": true; }; "classlist": { "alias": "classlist"; "required": false; "isSignal": true; }; "prepend": { "alias": "prepend"; "required": false; "isSignal": true; }; "append": { "alias": "append"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "opened": "opened"; "closed": "closed"; "viewChange": "viewChange"; "cleared": "cleared"; }, ["_prependTpl", "_appendTpl"], never, true, never>;
|
|
2098
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HubDatepickerComponent, "hub-datepicker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "weekdayFormat": { "alias": "weekdayFormat"; "required": false; "isSignal": true; }; "monthFormat": { "alias": "monthFormat"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "timeDisplayFormat": { "alias": "timeDisplayFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "secondStep": { "alias": "secondStep"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabledDates": { "alias": "disabledDates"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "showToday": { "alias": "showToday"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "formText": { "alias": "formText"; "required": false; "isSignal": true; }; "formTextType": { "alias": "formTextType"; "required": false; "isSignal": true; }; "classlist": { "alias": "classlist"; "required": false; "isSignal": true; }; "prepend": { "alias": "prepend"; "required": false; "isSignal": true; }; "append": { "alias": "append"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "opened": "opened"; "closed": "closed"; "viewChange": "viewChange"; "cleared": "cleared"; }, ["_prependTpl", "_appendTpl"], never, true, never>;
|
|
2058
2099
|
}
|
|
2059
2100
|
|
|
2060
2101
|
/**
|