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

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.1",
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>;
@@ -8370,6 +8407,9 @@ declare class TextFieldComponent implements OnInit, ControlValueAccessor, FormFi
8370
8407
  * Combined with the reactive-forms disabled state and any input-group state.
8371
8408
  */
8372
8409
  readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
8410
+ readonly readOnlyAttribute: _angular_core.InputSignalWithTransform<boolean, unknown>;
8411
+ readonly readOnlyProperty: _angular_core.InputSignalWithTransform<boolean, unknown>;
8412
+ readonly readOnly: _angular_core.Signal<boolean>;
8373
8413
  readonly disabled: _angular_core.Signal<boolean>;
8374
8414
  private readonly derived;
8375
8415
  readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
@@ -8395,7 +8435,7 @@ declare class TextFieldComponent implements OnInit, ControlValueAccessor, FormFi
8395
8435
  focus(): void;
8396
8436
  reset(): void;
8397
8437
  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>;
8438
+ 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
8439
  }
8400
8440
 
8401
8441
  type TextareaSize = Exclude<InputSize, "large">;
@@ -8478,6 +8518,11 @@ declare class TextareaComponent implements OnInit, ControlValueAccessor, FormFie
8478
8518
  */
8479
8519
  readonly minHeightStyle: _angular_core.Signal<string>;
8480
8520
  readonly maxHeightStyle: _angular_core.Signal<string>;
8521
+ readonly readOnlyAttribute: _angular_core.InputSignalWithTransform<boolean, unknown>;
8522
+ readonly readOnlyProperty: _angular_core.InputSignalWithTransform<boolean, unknown>;
8523
+ readonly readOnly: _angular_core.Signal<boolean>;
8524
+ /** Textareas take no clear button, even inside a `clearable` form field. */
8525
+ readonly clearButton = false;
8481
8526
  readonly disabled: _angular_core.Signal<boolean>;
8482
8527
  private readonly derived;
8483
8528
  readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
@@ -8500,7 +8545,7 @@ declare class TextareaComponent implements OnInit, ControlValueAccessor, FormFie
8500
8545
  focus(): void;
8501
8546
  reset(): void;
8502
8547
  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>;
8548
+ 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
8549
  }
8505
8550
 
8506
8551
  type TimePickerVariant = "scroll" | "slots" | "dropdown";
@@ -8675,8 +8720,12 @@ declare class TimeFieldComponent implements OnInit, ControlValueAccessor, FormFi
8675
8720
  * set here.
8676
8721
  */
8677
8722
  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>;
8723
+ /**
8724
+ * Whether the clear button shows once the field has a value. Falls back to the
8725
+ * wrapping `tedi-form-field`'s `clearable` when not set here — set it on the
8726
+ * wrapper, and use this only for a standalone field.
8727
+ */
8728
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
8680
8729
  /** Picker variant. `none` renders just the input with no picker UI — typed input is still normalized on blur. */
8681
8730
  readonly pickerVariant: _angular_core.InputSignal<TimeFieldPickerVariant>;
8682
8731
  /**
@@ -8723,6 +8772,10 @@ declare class TimeFieldComponent implements OnInit, ControlValueAccessor, FormFi
8723
8772
  ngOnInit(): void;
8724
8773
  readonly hasValue: _angular_core.Signal<boolean>;
8725
8774
  readonly showClear: _angular_core.Signal<boolean>;
8775
+ /** The clear button sits in the time field's action row, beside the picker. */
8776
+ readonly ownsClearButton = true;
8777
+ /** Own `clearable` wins, then the wrapping `tedi-form-field`'s. */
8778
+ readonly clearableResolved: _angular_core.Signal<boolean>;
8726
8779
  readonly useNativePickerResolved: _angular_core.Signal<boolean>;
8727
8780
  readonly hasPicker: _angular_core.Signal<boolean>;
8728
8781
  readonly hasNativePicker: _angular_core.Signal<boolean>;