@tedi-design-system/angular 8.2.0-rc.7 → 9.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tedi-design-system/angular",
3
- "version": "8.2.0-rc.7",
3
+ "version": "9.0.0-rc.2",
4
4
  "type": "module",
5
5
  "main": "community.mjs",
6
6
  "module": "fesm2022/tedi-design-system-angular.mjs",
package/tedi/index.d.ts CHANGED
@@ -6363,6 +6363,23 @@ interface FormFieldControl<T = unknown> {
6363
6363
  * `aria-describedby`; nothing is pushed when the control stands alone.
6364
6364
  */
6365
6365
  setDescribedBy?(ids: string[]): void;
6366
+ /**
6367
+ * Set by controls that render their own clear button — date and time put one in
6368
+ * their action row beside the picker button, which cannot leave the control
6369
+ * because the overlay anchors to it. The field then skips its generic clear
6370
+ * button so a single `clearable` never yields two.
6371
+ */
6372
+ readonly ownsClearButton?: boolean;
6373
+ /**
6374
+ * Whether the control is read-only. The field hides its clear button while it
6375
+ * is, since the user cannot edit the value; a programmatic `reset()` still works.
6376
+ */
6377
+ readOnly?: Signal<boolean>;
6378
+ /**
6379
+ * Set to `false` by controls that never take a clear button — a textarea, per
6380
+ * the design. The field then skips its button whatever `clearable` says.
6381
+ */
6382
+ readonly clearButton?: false;
6366
6383
  }
6367
6384
  /**
6368
6385
  * Injection token used by `tedi-form-field` to obtain
@@ -6382,6 +6399,8 @@ interface FieldContext {
6382
6399
  valid: Signal<boolean>;
6383
6400
  /** From an input group that disables everything inside it. */
6384
6401
  disabled: Signal<boolean>;
6402
+ /** Whether the field shows a clear button — controls read it instead of declaring their own. */
6403
+ clearable: Signal<boolean>;
6385
6404
  }
6386
6405
  declare const TEDI_FIELD_CONTEXT: InjectionToken<FieldContext>;
6387
6406
 
@@ -6467,6 +6486,12 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6467
6486
  * set here.
6468
6487
  */
6469
6488
  readonly size: _angular_core.InputSignal<DateFieldSize | undefined>;
6489
+ /**
6490
+ * Whether the clear button shows once the field has a value. Falls back to the
6491
+ * wrapping `tedi-form-field`'s `clearable` when not set here — set it on the
6492
+ * wrapper, and use this only for a standalone field.
6493
+ */
6494
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
6470
6495
  /**
6471
6496
  * Forces the error state on, or off, regardless of the reactive-forms state.
6472
6497
  * Leave unset to let the control derive it.
@@ -6628,6 +6653,10 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6628
6653
  readonly valid: _angular_core.Signal<boolean>;
6629
6654
  readonly childContext: FieldContext;
6630
6655
  ngOnInit(): void;
6656
+ /** The clear button sits in the date input's action row, beside the calendar. */
6657
+ readonly ownsClearButton = true;
6658
+ /** Own `clearable` wins, then the wrapping `tedi-form-field`'s. */
6659
+ readonly clearableResolved: _angular_core.Signal<boolean>;
6631
6660
  readonly resolvedDisabledMatchers: _angular_core.Signal<Matcher[]>;
6632
6661
  readonly useNativePickerResolved: _angular_core.Signal<boolean>;
6633
6662
  readonly useNativePickerEffective: _angular_core.Signal<boolean>;
@@ -6702,7 +6731,7 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6702
6731
  private toIsoDate;
6703
6732
  private queryNativeInput;
6704
6733
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateFieldComponent, never>;
6705
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateFieldComponent, "tedi-date-field", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabledMatchers": { "alias": "disabledMatchers"; "required": false; "isSignal": true; }; "inputDisabled": { "alias": "inputDisabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalidInput": { "alias": "invalid"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "disablePast": { "alias": "disablePast"; "required": false; "isSignal": true; }; "disableFuture": { "alias": "disableFuture"; "required": false; "isSignal": true; }; "shouldDisableMonth": { "alias": "shouldDisableMonth"; "required": false; "isSignal": true; }; "shouldDisableYear": { "alias": "shouldDisableYear"; "required": false; "isSignal": true; }; "minYear": { "alias": "minYear"; "required": false; "isSignal": true; }; "maxYear": { "alias": "maxYear"; "required": false; "isSignal": true; }; "availableDays": { "alias": "availableDays"; "required": false; "isSignal": true; }; "unavailableDays": { "alias": "unavailableDays"; "required": false; "isSignal": true; }; "selectionLevel": { "alias": "selectionLevel"; "required": false; "isSignal": true; }; "monthYearSelectType": { "alias": "monthYearSelectType"; "required": false; "isSignal": true; }; "initialMonth": { "alias": "initialMonth"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "showOutsideDays": { "alias": "showOutsideDays"; "required": false; "isSignal": true; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; "isSignal": true; }; "numberOfMonths": { "alias": "numberOfMonths"; "required": false; "isSignal": true; }; "enableCalendar": { "alias": "enableCalendar"; "required": false; "isSignal": true; }; "calendarTrigger": { "alias": "calendarTrigger"; "required": false; "isSignal": true; }; "useNativePicker": { "alias": "useNativePicker"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "fullscreen": { "alias": "fullscreen"; "required": false; "isSignal": true; }; "formatDate": { "alias": "formatDate"; "required": false; "isSignal": true; }; "parseDate": { "alias": "parseDate"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "openChange": "openChange"; }, never, ["[tediCalendarFooter]"], true, never>;
6734
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateFieldComponent, "tedi-date-field", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabledMatchers": { "alias": "disabledMatchers"; "required": false; "isSignal": true; }; "inputDisabled": { "alias": "inputDisabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "invalidInput": { "alias": "invalid"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "disablePast": { "alias": "disablePast"; "required": false; "isSignal": true; }; "disableFuture": { "alias": "disableFuture"; "required": false; "isSignal": true; }; "shouldDisableMonth": { "alias": "shouldDisableMonth"; "required": false; "isSignal": true; }; "shouldDisableYear": { "alias": "shouldDisableYear"; "required": false; "isSignal": true; }; "minYear": { "alias": "minYear"; "required": false; "isSignal": true; }; "maxYear": { "alias": "maxYear"; "required": false; "isSignal": true; }; "availableDays": { "alias": "availableDays"; "required": false; "isSignal": true; }; "unavailableDays": { "alias": "unavailableDays"; "required": false; "isSignal": true; }; "selectionLevel": { "alias": "selectionLevel"; "required": false; "isSignal": true; }; "monthYearSelectType": { "alias": "monthYearSelectType"; "required": false; "isSignal": true; }; "initialMonth": { "alias": "initialMonth"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "showOutsideDays": { "alias": "showOutsideDays"; "required": false; "isSignal": true; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; "isSignal": true; }; "numberOfMonths": { "alias": "numberOfMonths"; "required": false; "isSignal": true; }; "enableCalendar": { "alias": "enableCalendar"; "required": false; "isSignal": true; }; "calendarTrigger": { "alias": "calendarTrigger"; "required": false; "isSignal": true; }; "useNativePicker": { "alias": "useNativePicker"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "fullscreen": { "alias": "fullscreen"; "required": false; "isSignal": true; }; "formatDate": { "alias": "formatDate"; "required": false; "isSignal": true; }; "parseDate": { "alias": "parseDate"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "openChange": "openChange"; }, never, ["[tediCalendarFooter]"], true, never>;
6706
6735
  }
6707
6736
 
6708
6737
  declare class DatePickerCalendarGridComponent {
@@ -7041,10 +7070,12 @@ declare class FormFieldComponent implements FieldContext {
7041
7070
  */
7042
7071
  icon: _angular_core.InputSignal<string | FormFieldIcon | undefined>;
7043
7072
  /**
7044
- * Whether the field shows a clear button once the control holds a value.
7045
- * @default false
7073
+ * Whether the field shows a clear button once the control holds a value. The
7074
+ * single source of truth for every control inside it — date and time fields
7075
+ * read it too instead of declaring their own input. A textarea never gets one.
7076
+ * @default true
7046
7077
  */
7047
- clearable: _angular_core.InputSignal<boolean>;
7078
+ clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
7048
7079
  /**
7049
7080
  * Show the clear button only while the filled field is hovered or focused.
7050
7081
  * Requires `clearable`.
@@ -7074,6 +7105,12 @@ declare class FormFieldComponent implements FieldContext {
7074
7105
  * itself and no box is rendered at all.
7075
7106
  */
7076
7107
  readonly hasBox: _angular_core.Signal<boolean>;
7108
+ /**
7109
+ * Whether the field renders its own clear button. Controls that render one
7110
+ * themselves opt out, so `clearable` drives them without producing two, and
7111
+ * a control that cannot be reset, or never takes one, gets none.
7112
+ */
7113
+ readonly renderClearButton: _angular_core.Signal<boolean>;
7077
7114
  readonly ownsSurface: _angular_core.Signal<boolean>;
7078
7115
  readonly disabled: _angular_core.Signal<boolean>;
7079
7116
  readonly invalid: _angular_core.Signal<boolean>;
@@ -7656,9 +7693,9 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7656
7693
  size: _angular_core.InputSignal<SelectInputSize>;
7657
7694
  /**
7658
7695
  * Whether to show a clear button when a value is selected.
7659
- * @default false
7696
+ * @default true
7660
7697
  */
7661
- clearable: _angular_core.InputSignal<boolean>;
7698
+ clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
7662
7699
  /**
7663
7700
  * Show the clear button only while the filled select is hovered or focused.
7664
7701
  * Requires `clearable`.
@@ -7701,6 +7738,10 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7701
7738
  * Selected value, for use without a form directive. An array in multi-select
7702
7739
  * mode, the bare value otherwise. Unlike `[ngModel]` it applies on the first
7703
7740
  * render rather than a frame later. Do not combine with a form directive.
7741
+ *
7742
+ * `null`, `undefined` and `''` all mean nothing is selected, so
7743
+ * `new FormControl('')` and `new FormControl(null)` both start the select empty,
7744
+ * showing its placeholder.
7704
7745
  */
7705
7746
  value: _angular_core.InputSignal<unknown>;
7706
7747
  /**
@@ -7995,6 +8036,7 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7995
8036
  private syncActiveToOptionValue;
7996
8037
  onVirtualSelectAllClick(): void;
7997
8038
  private toggleOptionValue;
8039
+ /** Selects `value` in single-select mode, notifies the form and closes the dropdown. */
7998
8040
  private selectSingleValue;
7999
8041
  private measureVirtualRowHeight;
8000
8042
  private openDropdown;
@@ -8002,6 +8044,10 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
8002
8044
  private closeDropdown;
8003
8045
  private setupScrollListener;
8004
8046
  private cleanupScrollListener;
8047
+ /**
8048
+ * Handles a selection change from the listbox: the select-all and group rows, or
8049
+ * the new selection, which is emitted and written to the form.
8050
+ */
8005
8051
  handleValueChange(event: {
8006
8052
  value: readonly unknown[];
8007
8053
  }): void;
@@ -8028,6 +8074,13 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
8028
8074
  private toggleGroupSelection;
8029
8075
  onChange: (value: unknown) => void;
8030
8076
  onTouched: () => void;
8077
+ /** Options that can take part in select-all and group selection: enabled, not `''`. */
8078
+ private bulkSelectable;
8079
+ /**
8080
+ * `null`, `undefined` and `''` all mean nothing is selected, since `''` is a common
8081
+ * form default for "no value" (`new FormControl('')`). Picking an option whose
8082
+ * value is `''` therefore leaves nothing selected too.
8083
+ */
8031
8084
  private toSelection;
8032
8085
  writeValue(value: unknown): void;
8033
8086
  registerOnChange(fn: (value: unknown) => void): void;
@@ -8370,6 +8423,9 @@ declare class TextFieldComponent implements OnInit, ControlValueAccessor, FormFi
8370
8423
  * Combined with the reactive-forms disabled state and any input-group state.
8371
8424
  */
8372
8425
  readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
8426
+ readonly readOnlyAttribute: _angular_core.InputSignalWithTransform<boolean, unknown>;
8427
+ readonly readOnlyProperty: _angular_core.InputSignalWithTransform<boolean, unknown>;
8428
+ readonly readOnly: _angular_core.Signal<boolean>;
8373
8429
  readonly disabled: _angular_core.Signal<boolean>;
8374
8430
  private readonly derived;
8375
8431
  readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
@@ -8395,7 +8451,7 @@ declare class TextFieldComponent implements OnInit, ControlValueAccessor, FormFi
8395
8451
  focus(): void;
8396
8452
  reset(): void;
8397
8453
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextFieldComponent, never>;
8398
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextFieldComponent, "input[tedi-text-field]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalidInput": { "alias": "invalid"; "required": false; "isSignal": true; }; "arrowsHidden": { "alias": "arrowsHidden"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "clear": "clear"; }, never, never, true, never>;
8454
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextFieldComponent, "input[tedi-text-field]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalidInput": { "alias": "invalid"; "required": false; "isSignal": true; }; "arrowsHidden": { "alias": "arrowsHidden"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnlyAttribute": { "alias": "readonly"; "required": false; "isSignal": true; }; "readOnlyProperty": { "alias": "readOnly"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "clear": "clear"; }, never, never, true, never>;
8399
8455
  }
8400
8456
 
8401
8457
  type TextareaSize = Exclude<InputSize, "large">;
@@ -8478,6 +8534,11 @@ declare class TextareaComponent implements OnInit, ControlValueAccessor, FormFie
8478
8534
  */
8479
8535
  readonly minHeightStyle: _angular_core.Signal<string>;
8480
8536
  readonly maxHeightStyle: _angular_core.Signal<string>;
8537
+ readonly readOnlyAttribute: _angular_core.InputSignalWithTransform<boolean, unknown>;
8538
+ readonly readOnlyProperty: _angular_core.InputSignalWithTransform<boolean, unknown>;
8539
+ readonly readOnly: _angular_core.Signal<boolean>;
8540
+ /** Textareas take no clear button, even inside a `clearable` form field. */
8541
+ readonly clearButton = false;
8481
8542
  readonly disabled: _angular_core.Signal<boolean>;
8482
8543
  private readonly derived;
8483
8544
  readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
@@ -8500,7 +8561,7 @@ declare class TextareaComponent implements OnInit, ControlValueAccessor, FormFie
8500
8561
  focus(): void;
8501
8562
  reset(): void;
8502
8563
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
8503
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "textarea[tedi-textarea]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalidInput": { "alias": "invalid"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "autoGrow": { "alias": "autoGrow"; "required": false; "isSignal": true; }; "minRows": { "alias": "minRows"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
8564
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "textarea[tedi-textarea]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalidInput": { "alias": "invalid"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "autoGrow": { "alias": "autoGrow"; "required": false; "isSignal": true; }; "minRows": { "alias": "minRows"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "readOnlyAttribute": { "alias": "readonly"; "required": false; "isSignal": true; }; "readOnlyProperty": { "alias": "readOnly"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
8504
8565
  }
8505
8566
 
8506
8567
  type TimePickerVariant = "scroll" | "slots" | "dropdown";
@@ -8675,8 +8736,12 @@ declare class TimeFieldComponent implements OnInit, ControlValueAccessor, FormFi
8675
8736
  * set here.
8676
8737
  */
8677
8738
  readonly size: _angular_core.InputSignal<"small" | "default" | undefined>;
8678
- /** Show a clear button when the field has a value. */
8679
- readonly clearable: _angular_core.InputSignal<boolean>;
8739
+ /**
8740
+ * Whether the clear button shows once the field has a value. Falls back to the
8741
+ * wrapping `tedi-form-field`'s `clearable` when not set here — set it on the
8742
+ * wrapper, and use this only for a standalone field.
8743
+ */
8744
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
8680
8745
  /** Picker variant. `none` renders just the input with no picker UI — typed input is still normalized on blur. */
8681
8746
  readonly pickerVariant: _angular_core.InputSignal<TimeFieldPickerVariant>;
8682
8747
  /**
@@ -8723,6 +8788,10 @@ declare class TimeFieldComponent implements OnInit, ControlValueAccessor, FormFi
8723
8788
  ngOnInit(): void;
8724
8789
  readonly hasValue: _angular_core.Signal<boolean>;
8725
8790
  readonly showClear: _angular_core.Signal<boolean>;
8791
+ /** The clear button sits in the time field's action row, beside the picker. */
8792
+ readonly ownsClearButton = true;
8793
+ /** Own `clearable` wins, then the wrapping `tedi-form-field`'s. */
8794
+ readonly clearableResolved: _angular_core.Signal<boolean>;
8726
8795
  readonly useNativePickerResolved: _angular_core.Signal<boolean>;
8727
8796
  readonly hasPicker: _angular_core.Signal<boolean>;
8728
8797
  readonly hasNativePicker: _angular_core.Signal<boolean>;