@nanahoshi/mona-ui 0.24.2 → 0.24.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +3 -0
  2. package/fesm2022/nanahoshi-mona-ui-auto-complete.mjs +96 -71
  3. package/fesm2022/nanahoshi-mona-ui-check-box.mjs +1 -1
  4. package/fesm2022/nanahoshi-mona-ui-color-gradient.mjs +1 -1
  5. package/fesm2022/nanahoshi-mona-ui-color-picker.mjs +1 -1
  6. package/fesm2022/nanahoshi-mona-ui-combo-box.mjs +140 -91
  7. package/fesm2022/nanahoshi-mona-ui-date-input.mjs +1 -1
  8. package/fesm2022/nanahoshi-mona-ui-date-picker.mjs +8 -4
  9. package/fesm2022/nanahoshi-mona-ui-datetime-picker.mjs +8 -4
  10. package/fesm2022/nanahoshi-mona-ui-dropdown-list.mjs +112 -58
  11. package/fesm2022/nanahoshi-mona-ui-dropdowns.mjs +80 -61
  12. package/fesm2022/nanahoshi-mona-ui-editor.mjs +4 -4
  13. package/fesm2022/nanahoshi-mona-ui-filter.mjs +1 -1
  14. package/fesm2022/{nanahoshi-mona-ui-grid-grid-footer-row.component-x_euoNnS.mjs → nanahoshi-mona-ui-grid-grid-footer-row.component-BMCM0W8s.mjs} +2 -2
  15. package/fesm2022/{nanahoshi-mona-ui-grid-grid-list.component-C1_6vq77.mjs → nanahoshi-mona-ui-grid-grid-list.component-BSlV8Sua.mjs} +4 -4
  16. package/fesm2022/{nanahoshi-mona-ui-grid-grid-row.component-BhukVWIy.mjs → nanahoshi-mona-ui-grid-grid-row.component-CTOdnH29.mjs} +3 -3
  17. package/fesm2022/{nanahoshi-mona-ui-grid-grid-virtual-list.component-XQKOPPVs.mjs → nanahoshi-mona-ui-grid-grid-virtual-list.component-C2kf5MwO.mjs} +4 -4
  18. package/fesm2022/{nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-Iw-wvKGl.mjs → nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-Dh42tUui.mjs} +10 -15
  19. package/fesm2022/nanahoshi-mona-ui-grid.mjs +1 -1
  20. package/fesm2022/nanahoshi-mona-ui-i18n-icu.mjs +2 -1
  21. package/fesm2022/nanahoshi-mona-ui-internal-filter-input.mjs +2 -2
  22. package/fesm2022/nanahoshi-mona-ui-internal-indicator-icon.mjs +2 -2
  23. package/fesm2022/nanahoshi-mona-ui-internal-tree.mjs +1 -1
  24. package/fesm2022/nanahoshi-mona-ui-internal.mjs +18 -2
  25. package/fesm2022/nanahoshi-mona-ui-locales-ar-sa.mjs +2 -1
  26. package/fesm2022/nanahoshi-mona-ui-locales-de-de.mjs +4 -1
  27. package/fesm2022/nanahoshi-mona-ui-locales-es-es.mjs +4 -1
  28. package/fesm2022/nanahoshi-mona-ui-locales-fr-fr.mjs +4 -1
  29. package/fesm2022/nanahoshi-mona-ui-locales-id-id.mjs +2 -1
  30. package/fesm2022/nanahoshi-mona-ui-locales-it-it.mjs +2 -1
  31. package/fesm2022/nanahoshi-mona-ui-locales-ja-jp.mjs +2 -1
  32. package/fesm2022/nanahoshi-mona-ui-locales-ko-kr.mjs +2 -1
  33. package/fesm2022/nanahoshi-mona-ui-locales-pt-br.mjs +2 -1
  34. package/fesm2022/nanahoshi-mona-ui-locales-ru-ru.mjs +2 -1
  35. package/fesm2022/nanahoshi-mona-ui-locales-tr-tr.mjs +2 -1
  36. package/fesm2022/nanahoshi-mona-ui-locales-zh-cn.mjs +2 -1
  37. package/fesm2022/nanahoshi-mona-ui-locales-zh-tw.mjs +2 -1
  38. package/fesm2022/nanahoshi-mona-ui-menubar.mjs +3 -3
  39. package/fesm2022/nanahoshi-mona-ui-multi-select.mjs +119 -67
  40. package/fesm2022/nanahoshi-mona-ui-numeric-text-box.mjs +1 -1
  41. package/fesm2022/nanahoshi-mona-ui-otp-input.mjs +1 -1
  42. package/fesm2022/nanahoshi-mona-ui-pager.mjs +1 -1
  43. package/fesm2022/nanahoshi-mona-ui-popup-menu.mjs +2 -2
  44. package/fesm2022/nanahoshi-mona-ui-popup.mjs +269 -182
  45. package/fesm2022/nanahoshi-mona-ui-switch.mjs +1 -1
  46. package/fesm2022/nanahoshi-mona-ui-text-box.mjs +95 -58
  47. package/fesm2022/nanahoshi-mona-ui-time-picker.mjs +7 -5
  48. package/fesm2022/nanahoshi-mona-ui-time-selector.mjs +1 -1
  49. package/i18n/catalogs/en-US.messages.json +2 -1
  50. package/locales/ar-sa/ar-sa.messages.json +2 -1
  51. package/locales/de-de/de-de.messages.json +2 -1
  52. package/locales/es-es/es-es.messages.json +2 -1
  53. package/locales/fr-fr/fr-fr.messages.json +2 -1
  54. package/locales/id-id/id-id.messages.json +2 -1
  55. package/locales/it-it/it-it.messages.json +2 -1
  56. package/locales/ja-jp/ja-jp.messages.json +2 -1
  57. package/locales/ko-kr/ko-kr.messages.json +2 -1
  58. package/locales/pt-br/pt-br.messages.json +2 -1
  59. package/locales/ru-ru/ru-ru.messages.json +2 -1
  60. package/locales/tr-tr/tr-tr.messages.json +2 -1
  61. package/locales/zh-cn/zh-cn.messages.json +2 -1
  62. package/locales/zh-tw/zh-tw.messages.json +2 -1
  63. package/package.json +1 -1
  64. package/types/nanahoshi-mona-ui-auto-complete.d.ts +34 -20
  65. package/types/nanahoshi-mona-ui-combo-box.d.ts +42 -23
  66. package/types/nanahoshi-mona-ui-dropdown-list.d.ts +29 -15
  67. package/types/nanahoshi-mona-ui-dropdowns.d.ts +36 -19
  68. package/types/nanahoshi-mona-ui-i18n.d.ts +1 -0
  69. package/types/nanahoshi-mona-ui-internal.d.ts +11 -1
  70. package/types/nanahoshi-mona-ui-locales-ar-sa.d.ts +1 -0
  71. package/types/nanahoshi-mona-ui-locales-de-de.d.ts +1 -0
  72. package/types/nanahoshi-mona-ui-locales-es-es.d.ts +1 -0
  73. package/types/nanahoshi-mona-ui-locales-fr-fr.d.ts +1 -0
  74. package/types/nanahoshi-mona-ui-locales-id-id.d.ts +1 -0
  75. package/types/nanahoshi-mona-ui-locales-it-it.d.ts +1 -0
  76. package/types/nanahoshi-mona-ui-locales-ja-jp.d.ts +1 -0
  77. package/types/nanahoshi-mona-ui-locales-ko-kr.d.ts +1 -0
  78. package/types/nanahoshi-mona-ui-locales-pt-br.d.ts +1 -0
  79. package/types/nanahoshi-mona-ui-locales-ru-ru.d.ts +1 -0
  80. package/types/nanahoshi-mona-ui-locales-tr-tr.d.ts +1 -0
  81. package/types/nanahoshi-mona-ui-locales-zh-cn.d.ts +1 -0
  82. package/types/nanahoshi-mona-ui-locales-zh-tw.d.ts +1 -0
  83. package/types/nanahoshi-mona-ui-multi-select.d.ts +45 -21
  84. package/types/nanahoshi-mona-ui-popup.d.ts +97 -36
  85. package/types/nanahoshi-mona-ui-text-box.d.ts +62 -14
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InputSignal, InjectionToken, OutputEmitterRef, TemplateRef } from '@angular/core';
2
+ import { InjectionToken, InputSignal, OutputEmitterRef, Signal, TemplateRef } from '@angular/core';
3
3
  import { Predicate, Selector } from '@mirei/ts-collections';
4
4
  import { ListSizeInputType, GroupableOptions, ListItem } from '@nanahoshi/mona-ui/internal/list';
5
5
  import { PopupCloseEvent, PopupRef, PopupSettings } from '@nanahoshi/mona-ui/popup';
@@ -20,30 +20,34 @@ interface DropdownDataInput<TData> {
20
20
  readonly textField: InputSignal<DropdownFieldSelectorType<TData, string>>;
21
21
  readonly valueField: InputSignal<DropdownFieldSelectorType<TData, unknown>>;
22
22
  }
23
+ declare const DROPDOWN_DATA_INPUT_TOKEN: InjectionToken<DropdownDataInput<unknown>>;
24
+ /**
25
+ * @deprecated Use {@link DROPDOWN_DATA_INPUT_TOKEN}.
26
+ */
23
27
  declare const DropdownDataInputToken: InjectionToken<DropdownDataInput<unknown>>;
24
28
 
25
29
  interface DropdownPopupInput {
26
30
  readonly close: OutputEmitterRef<PopupCloseEvent>;
27
31
  readonly closed: OutputEmitterRef<void>;
28
- readonly disabled: InputSignal<boolean>;
32
+ readonly disabled: Signal<boolean>;
29
33
  readonly open: OutputEmitterRef<PreventableEvent>;
30
34
  readonly opened: OutputEmitterRef<void>;
31
35
  readonly popupHeight: InputSignal<ListSizeInputType>;
32
36
  readonly popupWidth: InputSignal<ListSizeInputType>;
33
- readonly readonly: InputSignal<boolean>;
37
+ readonly readonly: Signal<boolean>;
34
38
  readonly touch: OutputEmitterRef<void>;
35
39
  }
36
40
  declare const DROPDOWN_POPUP_INPUT_TOKEN: InjectionToken<DropdownPopupInput>;
37
41
 
38
- declare class DropdownFilterableDirective<TData> {
42
+ declare class DropdownFilterableDirective {
39
43
  #private;
40
44
  readonly filter: i0.InputSignal<string>;
41
45
  readonly filterChange: i0.OutputEmitterRef<FilterChangeEvent>;
42
46
  readonly filterPlaceholder: i0.InputSignal<string>;
43
47
  readonly options: i0.InputSignal<"" | Partial<FilterableOptions>>;
44
48
  constructor();
45
- static ɵfac: i0.ɵɵFactoryDeclaration<DropdownFilterableDirective<any>, never>;
46
- static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownFilterableDirective<any>, " mona-auto-complete[monaDropDownFilterable], mona-dropdown-list[monaDropDownFilterable], mona-combo-box[monaDropDownFilterable], mona-multi-select[monaDropDownFilterable] ", never, { "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "options": { "alias": "monaDropDownFilterable"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; }, never, never, true, never>;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownFilterableDirective, never>;
50
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownFilterableDirective, " mona-auto-complete[monaDropDownFilterable], mona-dropdown-list[monaDropDownFilterable], mona-combo-box[monaDropDownFilterable], mona-multi-select[monaDropDownFilterable] ", never, { "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "options": { "alias": "monaDropDownFilterable"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; }, never, never, true, never>;
47
51
  }
48
52
 
49
53
  declare class DropdownFooterTemplateDirective {
@@ -58,11 +62,11 @@ declare class DropdownGroupHeaderTemplateDirective {
58
62
 
59
63
  declare class DropdownGroupableDirective<TData> {
60
64
  #private;
61
- readonly groupBy: i0.InputSignal<string | Selector<TData, any> | null | undefined>;
62
- readonly options: i0.InputSignal<"" | GroupableOptions<TData, any>>;
65
+ readonly groupBy: i0.InputSignal<string | Selector<TData, unknown> | null | undefined>;
66
+ readonly options: i0.InputSignal<"" | GroupableOptions<TData, unknown>>;
63
67
  constructor();
64
68
  static ɵfac: i0.ɵɵFactoryDeclaration<DropdownGroupableDirective<any>, never>;
65
- static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownGroupableDirective<any>, " mona-auto-complete[monaDropDownGroupable], mona-combo-box[monaDropDownGroupable], mona-dropdown-list[monaDropDownGroupable], mona-multi-select[monaDropDownGroupable], ", never, { "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "options": { "alias": "monaDropDownGroupable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
69
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownGroupableDirective<any>, " mona-auto-complete[monaDropDownGroupable], mona-combo-box[monaDropDownGroupable], mona-dropdown-list[monaDropDownGroupable], mona-multi-select[monaDropDownGroupable] ", never, { "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "options": { "alias": "monaDropDownGroupable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
66
70
  }
67
71
 
68
72
  declare class DropdownHeaderTemplateDirective {
@@ -80,12 +84,12 @@ declare class DropdownNoDataTemplateDirective {
80
84
  static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownNoDataTemplateDirective, " ng-template[monaDropDownNoDataTemplate], ng-template[monaAutoCompleteNoDataTemplate], ng-template[monaDropDownListNoDataTemplate], ng-template[monaDropDownTreeNoDataTemplate], ng-template[monaComboBoxNoDataTemplate], ng-template[monaMultiSelectNoDataTemplate] ", never, {}, {}, never, never, true, never>;
81
85
  }
82
86
 
83
- declare class DropdownVirtualScrollDirective<TData> {
87
+ declare class DropdownVirtualScrollDirective {
84
88
  #private;
85
89
  readonly options: i0.InputSignal<"" | Partial<VirtualScrollOptions>>;
86
90
  constructor();
87
- static ɵfac: i0.ɵɵFactoryDeclaration<DropdownVirtualScrollDirective<any>, never>;
88
- static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownVirtualScrollDirective<any>, " mona-auto-complete[monaDropDownVirtualScroll], mona-dropdown-list[monaDropDownVirtualScroll], mona-combo-box[monaDropDownVirtualScroll], mona-multi-select[monaDropDownVirtualScroll] ", never, { "options": { "alias": "monaDropDownVirtualScroll"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
91
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownVirtualScrollDirective, never>;
92
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownVirtualScrollDirective, " mona-auto-complete[monaDropDownVirtualScroll], mona-dropdown-list[monaDropDownVirtualScroll], mona-combo-box[monaDropDownVirtualScroll], mona-multi-select[monaDropDownVirtualScroll] ", never, { "options": { "alias": "monaDropDownVirtualScroll"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
89
93
  }
90
94
 
91
95
  declare class DropdownDataHandlerDirective {
@@ -123,12 +127,19 @@ declare class DropdownListPopupHandlerDirective {
123
127
  static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownListPopupHandlerDirective, "[monaDropdownListPopupHandler]", never, {}, {}, never, never, true, [{ directive: typeof DropdownPopupHandlerDirective; inputs: {}; outputs: {}; }]>;
124
128
  }
125
129
 
130
+ /**
131
+ * Announces how many results a dropdown shows after its list is filtered, or after its items change, while the
132
+ * popup is open ("3 results available", "No results found").
133
+ *
134
+ * The announcement goes through the CDK `LiveAnnouncer`, whose live region lives at the end of the document, so it
135
+ * never becomes part of the combobox's content. The highlighted option isn't announced here:
136
+ * `aria-activedescendant` already does that.
137
+ */
126
138
  declare class DropdownLiveRegionDirective {
127
139
  #private;
128
- protected readonly liveRegionText: i0.Signal<string>;
129
140
  constructor();
130
141
  static ɵfac: i0.ɵɵFactoryDeclaration<DropdownLiveRegionDirective, never>;
131
- static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownLiveRegionDirective, "span[monaDropdownLiveRegion]", never, {}, {}, never, never, true, never>;
142
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownLiveRegionDirective, "[monaDropdownLiveRegion]", never, {}, {}, never, never, true, never>;
132
143
  }
133
144
 
134
145
  declare class DropdownPrefixTemplateDirective {
@@ -144,6 +155,12 @@ declare class DropdownSuffixTemplateDirective {
144
155
  declare class DropdownService {
145
156
  readonly beforeKeydown$: Subject<PreventableEvent<KeyboardEvent>>;
146
157
  readonly beforeNavigate$: Subject<PreventableEvent<KeyboardEvent>>;
158
+ /**
159
+ * Set when the popup finishes closing: whether focus may return to the dropdown. It is `false` when the user
160
+ * moved focus outside the dropdown and its popup first, for example by clicking another field or pressing
161
+ * Tab. Read it from `popupCloseComplete$` before calling `focus()`.
162
+ */
163
+ readonly focusCanReturn: i0.WritableSignal<boolean>;
147
164
  readonly keydown$: Subject<KeyboardEvent>;
148
165
  readonly popupCloseComplete$: Subject<PopupCloseEvent<unknown>>;
149
166
  readonly popupCloseStart$: Subject<PopupCloseEvent<unknown>>;
@@ -159,12 +176,12 @@ declare class DropdownService {
159
176
  static ɵprov: i0.ɵɵInjectableDeclaration<DropdownService>;
160
177
  }
161
178
 
162
- declare class DropdownListService {
179
+ declare class DropdownListService<TData = unknown> {
163
180
  readonly navigate$: Subject<{
164
- item: ListItem<any>;
181
+ item: ListItem<TData>;
165
182
  }>;
166
- static ɵfac: i0.ɵɵFactoryDeclaration<DropdownListService, never>;
167
- static ɵprov: i0.ɵɵInjectableDeclaration<DropdownListService>;
183
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownListService<any>, never>;
184
+ static ɵprov: i0.ɵɵInjectableDeclaration<DropdownListService<any>>;
168
185
  }
169
186
 
170
187
  declare const dropdownPopupThemeVariants: (props?: ({
@@ -176,5 +193,5 @@ type DropdownPopupVariantInput = VariantInputs<DropdownPopupVariantProps>;
176
193
 
177
194
  declare const DROPDOWNS_DEFAULT_MESSAGES: MonaDropdownsMessages;
178
195
 
179
- export { DROPDOWNS_DEFAULT_MESSAGES, DROPDOWN_POPUP_INPUT_TOKEN, DropdownDataHandlerDirective, DropdownDataInputToken, DropdownFilterableDirective, DropdownFooterTemplateDirective, DropdownGroupHeaderTemplateDirective, DropdownGroupableDirective, DropdownHeaderTemplateDirective, DropdownItemTemplateDirective, DropdownListPopupHandlerDirective, DropdownListService, DropdownLiveRegionDirective, DropdownNoDataTemplateDirective, DropdownPopupHandlerDirective, DropdownPrefixTemplateDirective, DropdownService, DropdownSuffixTemplateDirective, DropdownVirtualScrollDirective, dropdownPopupThemeVariants };
196
+ export { DROPDOWNS_DEFAULT_MESSAGES, DROPDOWN_DATA_INPUT_TOKEN, DROPDOWN_POPUP_INPUT_TOKEN, DropdownDataHandlerDirective, DropdownDataInputToken, DropdownFilterableDirective, DropdownFooterTemplateDirective, DropdownGroupHeaderTemplateDirective, DropdownGroupableDirective, DropdownHeaderTemplateDirective, DropdownItemTemplateDirective, DropdownListPopupHandlerDirective, DropdownListService, DropdownLiveRegionDirective, DropdownNoDataTemplateDirective, DropdownPopupHandlerDirective, DropdownPrefixTemplateDirective, DropdownService, DropdownSuffixTemplateDirective, DropdownVirtualScrollDirective, dropdownPopupThemeVariants };
180
197
  export type { DropdownDataInput, DropdownFieldPredicateType, DropdownFieldSelectorType, DropdownPopupInput, DropdownPopupVariantInput, DropdownPopupVariantProps };
@@ -289,6 +289,7 @@ interface MonaListBoxMessages {
289
289
  interface MonaMultiSelectMessages {
290
290
  readonly clear: string;
291
291
  readonly itemsCount: (count: number) => string;
292
+ readonly removeMoreItems: (count: number) => string;
292
293
  }
293
294
 
294
295
  interface MonaNotificationMessages {
@@ -80,6 +80,14 @@ type Action<P = void, R = void> = (arg: P) => R;
80
80
  */
81
81
  declare const createElementControlId: (level?: number, length?: number) => string;
82
82
 
83
+ /**
84
+ * Whether a closing popup may move focus back to its trigger without taking it from somewhere the user put it.
85
+ * That holds while focus is on the page itself or inside one of `containers`, usually the trigger and the popup.
86
+ * A click on another field that closed the popup, or a Tab out of it, must leave focus where it went.
87
+ * This is the rule the CDK dialog uses.
88
+ */
89
+ declare function focusCanReturn(document: Document, ...containers: ReadonlyArray<Element | null | undefined>): boolean;
90
+
83
91
  declare function focusElement(host: HTMLElement, element: HTMLElement | ElementRef<HTMLElement> | string): void;
84
92
 
85
93
  declare const rxFromResize: (target: Element | Iterable<Element>, options?: ResizeObserverOptions) => Observable<ResizeObserverEntry[]>;
@@ -151,7 +159,9 @@ interface TypeaheadModifiers {
151
159
  * Any single letter or digit in any script counts, plus space, `-` and `_`.
152
160
  */
153
161
  declare const isTypeaheadKey: (key: string, modifiers?: TypeaheadModifiers) => boolean;
162
+ /** How long typeahead waits after the last key before it starts a new search, in milliseconds. */
163
+ declare const TYPEAHEAD_RESET_DELAY = 200;
154
164
  declare const setupTypeahead: (typeaheadKey$: Observable<string>) => Observable<string>;
155
165
 
156
- export { AttributeBinderDirective, NavigationKeys, NavigationKeysList, createElementControlId, focusElement, hex2rgba, hsla2hsva, hsva2rgba, isNavigationKey, isTypeaheadKey, isValidHex, isValidHsla, isValidRgb, restoreOverlayScroll, rgba2hex, rgba2hsla, rgba2hsva, rxFromResize, rxTimeout, setWindowStyles, setupTypeahead, string2Hsla, string2rgba, themeControlBackdropClasses, themeControlSurfaceClasses, themeOverlayBackdropClasses, themeOverlaySurfaceClasses, themeRaisedBackdropClasses, themeRaisedSurfaceClasses, toCssValue };
166
+ export { AttributeBinderDirective, NavigationKeys, NavigationKeysList, TYPEAHEAD_RESET_DELAY, createElementControlId, focusCanReturn, focusElement, hex2rgba, hsla2hsva, hsva2rgba, isNavigationKey, isTypeaheadKey, isValidHex, isValidHsla, isValidRgb, restoreOverlayScroll, rgba2hex, rgba2hsla, rgba2hsva, rxFromResize, rxTimeout, setWindowStyles, setupTypeahead, string2Hsla, string2rgba, themeControlBackdropClasses, themeControlSurfaceClasses, themeOverlayBackdropClasses, themeOverlaySurfaceClasses, themeRaisedBackdropClasses, themeRaisedSurfaceClasses, toCssValue };
157
167
  export type { Action, AttributeConfig, Channel, ColorScheme, HSL, HSLA, HSV, HSVA, HSVChannel, RGB, RGBA, RGBAChannel, RGBChannel, TypeaheadModifiers, VariantInputs, WindowStyleSettings };
@@ -255,6 +255,7 @@ declare const MONA_AR_SA_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_DE_DE_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_ES_ES_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_FR_FR_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_ID_ID_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_IT_IT_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_JA_JP_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_KO_KR_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_PT_BR_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_RU_RU_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_TR_TR_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_ZH_CN_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -255,6 +255,7 @@ declare const MONA_ZH_TW_LOCALE: {
255
255
  multiSelect: {
256
256
  clear: string;
257
257
  itemsCount: (count: number) => string;
258
+ removeMoreItems: (count: number) => string;
258
259
  };
259
260
  notification: {
260
261
  close: string;
@@ -43,6 +43,9 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
43
43
  protected readonly activeDescendant: _angular_core.Signal<string | null>;
44
44
  protected readonly affixClass: _angular_core.Signal<string>;
45
45
  protected readonly baseClass: _angular_core.Signal<string>;
46
+ protected readonly chipMessages: _angular_core.Signal<_nanahoshi_mona_ui_i18n.MonaChipMessages>;
47
+ protected readonly clearButtonVisible: _angular_core.Signal<boolean>;
48
+ protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
46
49
  protected readonly expanded: _angular_core.Signal<boolean>;
47
50
  protected readonly footerTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
48
51
  protected readonly groupHeaderTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
@@ -65,7 +68,13 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
65
68
  protected readonly valueTextMap: _angular_core.Signal<_mirei_ts_collections.ImmutableDictionary<ListItem<TData>, string>>;
66
69
  protected readonly visibleTagCount: _angular_core.Signal<number>;
67
70
  /**
68
- * @description Sets the aria-label attribute of the multi select component.
71
+ * @description ID of an element that describes the multi select, such as help text or an error message.
72
+ * @default ""
73
+ */
74
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
75
+ /**
76
+ * @description Accessible name for the multi select. Describe what it represents.
77
+ * Falls back to {@link placeholder} when neither this nor {@link ariaLabelledBy} is set.
69
78
  * @default ""
70
79
  */
71
80
  readonly ariaLabel: _angular_core.InputSignal<string>;
@@ -78,12 +87,12 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
78
87
  * @description Closes the popup automatically after an item is selected or deselected.
79
88
  * @default false
80
89
  */
81
- readonly autoClose: _angular_core.InputSignal<boolean>;
90
+ readonly autoClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
82
91
  /**
83
92
  * @description Renders a checkbox next to each item in the popup list to indicate its selected state.
84
93
  * @default false
85
94
  */
86
- readonly checkboxes: _angular_core.InputSignal<boolean>;
95
+ readonly checkboxes: _angular_core.InputSignalWithTransform<boolean, unknown>;
87
96
  /**
88
97
  * @description Emits when the popup is about to close. This event is preventable.
89
98
  */
@@ -101,22 +110,23 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
101
110
  * @description Disables the component, preventing the popup from opening and blocking tag removal.
102
111
  * @default false
103
112
  */
104
- readonly disabled: _angular_core.ModelSignal<boolean>;
113
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
105
114
  /**
106
115
  * @description Marks the multi select as invalid. When bound to a signal form field via `[formField]`,
107
116
  * this is written by the `FormField` directive.
108
117
  * @default false
109
118
  */
110
- readonly invalid: _angular_core.InputSignal<boolean>;
119
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
111
120
  /**
112
121
  * @description A predicate function or the name of the field that determines whether an item is disabled.
113
122
  */
114
123
  readonly itemDisabled: _angular_core.InputSignal<DropdownFieldPredicateType<TData>>;
115
124
  /**
116
- * @description Sets the loading state of the multi select component.
125
+ * @description Shows a loading indicator, in place of the clear button, and marks the field busy. It doesn't
126
+ * block interaction: the field stays usable while data loads.
117
127
  * @default false
118
128
  */
119
- readonly loading: _angular_core.InputSignal<boolean>;
129
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
120
130
  /**
121
131
  * @description Emits when the popup is about to open. This event is preventable.
122
132
  */
@@ -125,13 +135,20 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
125
135
  * @description Emits after the popup is opened.
126
136
  */
127
137
  readonly opened: _angular_core.OutputEmitterRef<void>;
138
+ /**
139
+ * @description Text shown when nothing is selected. It also names the multi select when neither {@link ariaLabel}
140
+ * nor {@link ariaLabelledBy} is set.
141
+ * @default ""
142
+ */
143
+ readonly placeholder: _angular_core.InputSignal<string>;
128
144
  /**
129
145
  * @description Sets the class of the popup element.
130
146
  * @default ""
131
147
  */
132
148
  readonly popupClass: _angular_core.InputSignal<string>;
133
149
  /**
134
- * @description Sets the height of the popup element.
150
+ * @description Maximum height of the popup, in pixels or as a CSS length. Shorter lists shrink to fit. When
151
+ * unset, the popup is at most 200 pixels tall.
135
152
  * @default null
136
153
  */
137
154
  readonly popupHeight: _angular_core.InputSignal<ListSizeInputType>;
@@ -144,12 +161,12 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
144
161
  * @description Sets the readonly state of the multi select component.
145
162
  * @default false
146
163
  */
147
- readonly readonly: _angular_core.InputSignal<boolean>;
164
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
148
165
  /**
149
166
  * @description Sets the required state of the multi select component.
150
167
  * @default false
151
168
  */
152
- readonly required: _angular_core.InputSignal<boolean>;
169
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
153
170
  /**
154
171
  * @description Sets the border radius of the multi select component.
155
172
  * @default "medium"
@@ -159,7 +176,7 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
159
176
  * @description Renders a button that clears all selected items when at least one item is selected.
160
177
  * @default false
161
178
  */
162
- readonly showClearButton: _angular_core.InputSignal<boolean>;
179
+ readonly showClearButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
163
180
  /**
164
181
  * @description The size of the multi select component.
165
182
  * @default "medium"
@@ -173,8 +190,8 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
173
190
  */
174
191
  readonly textField: _angular_core.InputSignal<DropdownFieldSelectorType<TData, string>>;
175
192
  /**
176
- * @description Emitted when the multi select is interacted with on blur, selection, remove, or clear.
177
- * The `FormField` directive listens to this to mark the field as touched.
193
+ * @description Emitted when focus leaves the multi select. Moving between it, its chips, its clear button and its
194
+ * popup doesn't count. The `FormField` directive listens to this to mark the field as touched.
178
195
  */
179
196
  readonly touch: _angular_core.OutputEmitterRef<void>;
180
197
  /**
@@ -182,7 +199,7 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
182
199
  * this is written by the `FormField` directive.
183
200
  * @default false
184
201
  */
185
- readonly touched: _angular_core.InputSignal<boolean>;
202
+ readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
186
203
  /**
187
204
  * @description Additional CSS classes merged onto the host element via `tailwind-merge`.
188
205
  * @default ""
@@ -215,10 +232,14 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
215
232
  *
216
233
  * @default false
217
234
  */
218
- readonly valuePrimitive: _angular_core.InputSignal<boolean>;
235
+ readonly valuePrimitive: _angular_core.InputSignalWithTransform<boolean, unknown>;
219
236
  constructor();
220
- focus(): void;
221
- protected onBlur(event?: FocusEvent): void;
237
+ /**
238
+ * @description Moves focus to the multi select.
239
+ * @param options Passed to `HTMLElement.focus()`, for example `{ preventScroll: true }`.
240
+ */
241
+ focus(options?: FocusOptions): void;
242
+ protected onFocusOut(event: FocusEvent): void;
222
243
  protected onItemSelect(): void;
223
244
  protected onPopupPointerDown(event: PointerEvent): void;
224
245
  protected onSelectedItemGroupRemove(event: Event): void;
@@ -231,14 +252,17 @@ declare class MultiSelectComponent<TData = unknown, TValue = TData> implements F
231
252
  private setBackspaceKeySubscription;
232
253
  private setEnterKeySubscription;
233
254
  private setEventListeners;
255
+ private setPopupCloseSubscription;
256
+ private setSpaceKeySubscription;
234
257
  private setSubscriptions;
235
258
  private synchronizeSelection;
259
+ private toggleHighlightedItem;
236
260
  private updateValue;
237
261
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiSelectComponent<any, any>, never>;
238
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiSelectComponent<any, any>, "mona-multi-select", never, { "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; "checkboxes": { "alias": "checkboxes"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "itemDisabled": { "alias": "itemDisabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "popupClass": { "alias": "popupClass"; "required": false; "isSignal": true; }; "popupHeight": { "alias": "popupHeight"; "required": false; "isSignal": true; }; "popupWidth": { "alias": "popupWidth"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "valuePrimitive": { "alias": "valuePrimitive"; "required": false; "isSignal": true; }; }, { "close": "close"; "closed": "closed"; "disabled": "disabledChange"; "open": "open"; "opened": "opened"; "touch": "touch"; "value": "valueChange"; }, ["footerTemplate", "groupHeaderTemplate", "headerTemplate", "itemTemplate", "noDataTemplate", "prefixTemplate", "tagTemplate"], never, true, [{ directive: typeof i1.DropdownDataHandlerDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DropdownListPopupHandlerDirective; inputs: {}; outputs: {}; }]>;
262
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiSelectComponent<any, any>, "mona-multi-select", never, { "ariaDescribedBy": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; "checkboxes": { "alias": "checkboxes"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "itemDisabled": { "alias": "itemDisabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "popupClass": { "alias": "popupClass"; "required": false; "isSignal": true; }; "popupHeight": { "alias": "popupHeight"; "required": false; "isSignal": true; }; "popupWidth": { "alias": "popupWidth"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "valuePrimitive": { "alias": "valuePrimitive"; "required": false; "isSignal": true; }; }, { "close": "close"; "closed": "closed"; "open": "open"; "opened": "opened"; "touch": "touch"; "value": "valueChange"; }, ["footerTemplate", "groupHeaderTemplate", "headerTemplate", "itemTemplate", "noDataTemplate", "prefixTemplate", "tagTemplate"], never, true, [{ directive: typeof i1.DropdownDataHandlerDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DropdownListPopupHandlerDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DropdownLiveRegionDirective; inputs: {}; outputs: {}; }]>;
239
263
  }
240
264
 
241
- declare class MultiSelectSummaryTagDirective<TData> {
265
+ declare class MultiSelectSummaryTagDirective {
242
266
  #private;
243
267
  private readonly summaryTagTemplate;
244
268
  /**
@@ -248,8 +272,8 @@ declare class MultiSelectSummaryTagDirective<TData> {
248
272
  */
249
273
  readonly tagCount: _angular_core.InputSignal<number>;
250
274
  constructor();
251
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiSelectSummaryTagDirective<any>, never>;
252
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MultiSelectSummaryTagDirective<any>, "mona-multi-select[monaMultiSelectSummaryTag]", never, { "tagCount": { "alias": "monaMultiSelectSummaryTag"; "required": false; "isSignal": true; }; }, {}, ["summaryTagTemplate"], never, true, never>;
275
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiSelectSummaryTagDirective, never>;
276
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MultiSelectSummaryTagDirective, "mona-multi-select[monaMultiSelectSummaryTag]", never, { "tagCount": { "alias": "monaMultiSelectSummaryTag"; "required": false; "isSignal": true; }; }, {}, ["summaryTagTemplate"], never, true, never>;
253
277
  }
254
278
 
255
279
  declare class MultiSelectSummaryTagTemplateDirective {