@nanahoshi/mona-ui 0.24.4 → 0.24.6

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 (80) hide show
  1. package/README.md +3 -0
  2. package/fesm2022/nanahoshi-mona-ui-auto-complete.mjs +95 -70
  3. package/fesm2022/nanahoshi-mona-ui-calendar.mjs +196 -137
  4. package/fesm2022/nanahoshi-mona-ui-combo-box.mjs +136 -89
  5. package/fesm2022/nanahoshi-mona-ui-date-input.mjs +164 -3
  6. package/fesm2022/nanahoshi-mona-ui-date-picker.mjs +124 -140
  7. package/fesm2022/nanahoshi-mona-ui-datetime-picker.mjs +205 -202
  8. package/fesm2022/nanahoshi-mona-ui-dropdown-list.mjs +108 -56
  9. package/fesm2022/nanahoshi-mona-ui-dropdowns.mjs +68 -59
  10. package/fesm2022/nanahoshi-mona-ui-editor.mjs +3 -3
  11. package/fesm2022/nanahoshi-mona-ui-filter.mjs +1 -1
  12. package/fesm2022/{nanahoshi-mona-ui-grid-grid-footer-row.component-DLOPRuFv.mjs → nanahoshi-mona-ui-grid-grid-footer-row.component-CD_ODHpU.mjs} +2 -2
  13. package/fesm2022/{nanahoshi-mona-ui-grid-grid-list.component-Dw5U9H0a.mjs → nanahoshi-mona-ui-grid-grid-list.component-0jN7I1jo.mjs} +4 -4
  14. package/fesm2022/{nanahoshi-mona-ui-grid-grid-row.component-D1kyAzD8.mjs → nanahoshi-mona-ui-grid-grid-row.component-BI_iE7pl.mjs} +3 -3
  15. package/fesm2022/{nanahoshi-mona-ui-grid-grid-virtual-list.component-ECK1_smx.mjs → nanahoshi-mona-ui-grid-grid-virtual-list.component-Sa1aAtJ-.mjs} +4 -4
  16. package/fesm2022/{nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-D4lUDbfx.mjs → nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-BvUM9nPt.mjs} +8 -8
  17. package/fesm2022/nanahoshi-mona-ui-grid.mjs +1 -1
  18. package/fesm2022/nanahoshi-mona-ui-i18n-icu.mjs +2 -1
  19. package/fesm2022/nanahoshi-mona-ui-internal-indicator-icon.mjs +2 -2
  20. package/fesm2022/nanahoshi-mona-ui-internal.mjs +4 -2
  21. package/fesm2022/nanahoshi-mona-ui-locales-ar-sa.mjs +2 -1
  22. package/fesm2022/nanahoshi-mona-ui-locales-de-de.mjs +4 -1
  23. package/fesm2022/nanahoshi-mona-ui-locales-es-es.mjs +4 -1
  24. package/fesm2022/nanahoshi-mona-ui-locales-fr-fr.mjs +4 -1
  25. package/fesm2022/nanahoshi-mona-ui-locales-id-id.mjs +2 -1
  26. package/fesm2022/nanahoshi-mona-ui-locales-it-it.mjs +2 -1
  27. package/fesm2022/nanahoshi-mona-ui-locales-ja-jp.mjs +2 -1
  28. package/fesm2022/nanahoshi-mona-ui-locales-ko-kr.mjs +2 -1
  29. package/fesm2022/nanahoshi-mona-ui-locales-pt-br.mjs +2 -1
  30. package/fesm2022/nanahoshi-mona-ui-locales-ru-ru.mjs +2 -1
  31. package/fesm2022/nanahoshi-mona-ui-locales-tr-tr.mjs +2 -1
  32. package/fesm2022/nanahoshi-mona-ui-locales-zh-cn.mjs +2 -1
  33. package/fesm2022/nanahoshi-mona-ui-locales-zh-tw.mjs +2 -1
  34. package/fesm2022/nanahoshi-mona-ui-multi-select.mjs +118 -66
  35. package/fesm2022/nanahoshi-mona-ui-numeric-text-box.mjs +195 -122
  36. package/fesm2022/nanahoshi-mona-ui-pager.mjs +1 -1
  37. package/fesm2022/nanahoshi-mona-ui-time-picker.mjs +149 -167
  38. package/fesm2022/nanahoshi-mona-ui-time-selector.mjs +182 -137
  39. package/i18n/catalogs/en-US.messages.json +2 -1
  40. package/locales/ar-sa/ar-sa.messages.json +2 -1
  41. package/locales/de-de/de-de.messages.json +2 -1
  42. package/locales/es-es/es-es.messages.json +2 -1
  43. package/locales/fr-fr/fr-fr.messages.json +2 -1
  44. package/locales/id-id/id-id.messages.json +2 -1
  45. package/locales/it-it/it-it.messages.json +2 -1
  46. package/locales/ja-jp/ja-jp.messages.json +2 -1
  47. package/locales/ko-kr/ko-kr.messages.json +2 -1
  48. package/locales/pt-br/pt-br.messages.json +2 -1
  49. package/locales/ru-ru/ru-ru.messages.json +2 -1
  50. package/locales/tr-tr/tr-tr.messages.json +2 -1
  51. package/locales/zh-cn/zh-cn.messages.json +2 -1
  52. package/locales/zh-tw/zh-tw.messages.json +2 -1
  53. package/package.json +2 -2
  54. package/types/nanahoshi-mona-ui-auto-complete.d.ts +34 -20
  55. package/types/nanahoshi-mona-ui-calendar.d.ts +30 -11
  56. package/types/nanahoshi-mona-ui-combo-box.d.ts +42 -23
  57. package/types/nanahoshi-mona-ui-date-input.d.ts +74 -3
  58. package/types/nanahoshi-mona-ui-date-picker.d.ts +61 -33
  59. package/types/nanahoshi-mona-ui-datetime-picker.d.ts +79 -38
  60. package/types/nanahoshi-mona-ui-dropdown-list.d.ts +29 -15
  61. package/types/nanahoshi-mona-ui-dropdowns.d.ts +30 -19
  62. package/types/nanahoshi-mona-ui-i18n.d.ts +1 -0
  63. package/types/nanahoshi-mona-ui-internal.d.ts +3 -1
  64. package/types/nanahoshi-mona-ui-locales-ar-sa.d.ts +1 -0
  65. package/types/nanahoshi-mona-ui-locales-de-de.d.ts +1 -0
  66. package/types/nanahoshi-mona-ui-locales-es-es.d.ts +1 -0
  67. package/types/nanahoshi-mona-ui-locales-fr-fr.d.ts +1 -0
  68. package/types/nanahoshi-mona-ui-locales-id-id.d.ts +1 -0
  69. package/types/nanahoshi-mona-ui-locales-it-it.d.ts +1 -0
  70. package/types/nanahoshi-mona-ui-locales-ja-jp.d.ts +1 -0
  71. package/types/nanahoshi-mona-ui-locales-ko-kr.d.ts +1 -0
  72. package/types/nanahoshi-mona-ui-locales-pt-br.d.ts +1 -0
  73. package/types/nanahoshi-mona-ui-locales-ru-ru.d.ts +1 -0
  74. package/types/nanahoshi-mona-ui-locales-tr-tr.d.ts +1 -0
  75. package/types/nanahoshi-mona-ui-locales-zh-cn.d.ts +1 -0
  76. package/types/nanahoshi-mona-ui-locales-zh-tw.d.ts +1 -0
  77. package/types/nanahoshi-mona-ui-multi-select.d.ts +45 -21
  78. package/types/nanahoshi-mona-ui-numeric-text-box.d.ts +57 -16
  79. package/types/nanahoshi-mona-ui-time-picker.d.ts +72 -42
  80. package/types/nanahoshi-mona-ui-time-selector.d.ts +78 -46
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "مسح",
254
- "itemsCount": "+ {count}"
254
+ "itemsCount": "+ {count}",
255
+ "removeMoreItems": "حذف العناصر الإضافية ({count})"
255
256
  },
256
257
  "notification": {
257
258
  "close": "إغلاق",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "Leeren",
254
- "itemsCount": "{count, plural, =1 {+ # Element} other {+ # Elemente}}"
254
+ "itemsCount": "{count, plural, =1 {+ # Element} other {+ # Elemente}}",
255
+ "removeMoreItems": "{count, plural, =1 {# weiteres Element entfernen} other {# weitere Elemente entfernen}}"
255
256
  },
256
257
  "notification": {
257
258
  "close": "Schließen",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "Limpiar",
254
- "itemsCount": "{count, plural, =1 {+ # elemento} other {+ # elementos}}"
254
+ "itemsCount": "{count, plural, =1 {+ # elemento} other {+ # elementos}}",
255
+ "removeMoreItems": "{count, plural, =1 {Quitar # elemento más} other {Quitar # elementos más}}"
255
256
  },
256
257
  "notification": {
257
258
  "close": "Cerrar",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "Effacer",
254
- "itemsCount": "{count, plural, =1 {+ # élément} other {+ # éléments}}"
254
+ "itemsCount": "{count, plural, =1 {+ # élément} other {+ # éléments}}",
255
+ "removeMoreItems": "{count, plural, =1 {Retirer # autre élément} other {Retirer # autres éléments}}"
255
256
  },
256
257
  "notification": {
257
258
  "close": "Fermer",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "Bersihkan",
254
- "itemsCount": "+ {count} item"
254
+ "itemsCount": "+ {count} item",
255
+ "removeMoreItems": "Hapus {count} item lainnya"
255
256
  },
256
257
  "notification": {
257
258
  "close": "Tutup",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "Cancella",
254
- "itemsCount": "{count, plural, =1 {+ 1 elemento} other {+ # elementi}}"
254
+ "itemsCount": "{count, plural, =1 {+ 1 elemento} other {+ # elementi}}",
255
+ "removeMoreItems": "{count, plural, =1 {Rimuovi un altro elemento} other {Rimuovi altri # elementi}}"
255
256
  },
256
257
  "notification": {
257
258
  "close": "Chiudi",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "クリア",
254
- "itemsCount": "+ {count}件"
254
+ "itemsCount": "+ {count}件",
255
+ "removeMoreItems": "他の{count}件を削除"
255
256
  },
256
257
  "notification": {
257
258
  "close": "閉じる",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "지우기",
254
- "itemsCount": "+ {count}개"
254
+ "itemsCount": "+ {count}개",
255
+ "removeMoreItems": "나머지 {count}개 삭제"
255
256
  },
256
257
  "notification": {
257
258
  "close": "닫기",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "Limpar",
254
- "itemsCount": "{count, plural, =1 {+ 1 item} other {+ # itens}}"
254
+ "itemsCount": "{count, plural, =1 {+ 1 item} other {+ # itens}}",
255
+ "removeMoreItems": "{count, plural, =1 {Remover mais 1 item} other {Remover mais # itens}}"
255
256
  },
256
257
  "notification": {
257
258
  "close": "Fechar",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "Очистить",
254
- "itemsCount": "+ {count, plural, one {# элемент} few {# элемента} many {# элементов} other {# элемента}}"
254
+ "itemsCount": "+ {count, plural, one {# элемент} few {# элемента} many {# элементов} other {# элемента}}",
255
+ "removeMoreItems": "Удалить ещё {count, plural, one {# элемент} few {# элемента} many {# элементов} other {# элемента}}"
255
256
  },
256
257
  "notification": {
257
258
  "close": "Закрыть",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "Temizle",
254
- "itemsCount": "+ {count} öğe"
254
+ "itemsCount": "+ {count} öğe",
255
+ "removeMoreItems": "Diğer {count} öğeyi kaldır"
255
256
  },
256
257
  "notification": {
257
258
  "close": "Kapat",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "清除",
254
- "itemsCount": "+ {count} 项"
254
+ "itemsCount": "+ {count} 项",
255
+ "removeMoreItems": "删除其余 {count} 项"
255
256
  },
256
257
  "notification": {
257
258
  "close": "关闭",
@@ -251,7 +251,8 @@
251
251
  },
252
252
  "multiSelect": {
253
253
  "clear": "清除",
254
- "itemsCount": "+ {count} 項"
254
+ "itemsCount": "+ {count} 項",
255
+ "removeMoreItems": "移除其餘 {count} 項"
255
256
  },
256
257
  "notification": {
257
258
  "close": "關閉",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanahoshi/mona-ui",
3
- "version": "0.24.4",
3
+ "version": "0.24.6",
4
4
  "description": "A very light Angular UI framework",
5
5
  "author": "Nanahoshi",
6
6
  "repository": {
@@ -409,7 +409,7 @@
409
409
  },
410
410
  "dependencies": {
411
411
  "@lucide/angular": "^1.21.0",
412
- "@mirei/ts-collections": "^17.5.6",
412
+ "@mirei/ts-collections": "^18.0.0",
413
413
  "class-variance-authority": "^0.7.1",
414
414
  "culori": "^4.0.2",
415
415
  "d3-hierarchy": "^3.1.2",
@@ -40,12 +40,11 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
40
40
  protected readonly autoCompleteValue: _angular_core.WritableSignal<string>;
41
41
  protected readonly autoCompleteValue$: Subject<string | null>;
42
42
  protected readonly baseClass: _angular_core.Signal<string>;
43
- protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
43
+ protected readonly clearButtonVisible: _angular_core.Signal<boolean>;
44
44
  protected readonly expanded: _angular_core.Signal<boolean>;
45
45
  protected readonly footerTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
46
46
  protected readonly groupHeaderTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
47
47
  protected readonly headerTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
48
- protected readonly id: string;
49
48
  protected readonly inputClass: _angular_core.Signal<string>;
50
49
  protected readonly invalidState: _angular_core.Signal<boolean>;
51
50
  protected readonly isEmpty: _angular_core.Signal<boolean>;
@@ -65,8 +64,9 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
65
64
  */
66
65
  readonly ariaDescribedBy: _angular_core.InputSignal<string>;
67
66
  /**
68
- * @description Accessible name for the input. Describe what the autocomplete represents.
69
- * Falls back to {@link placeholder} when neither this nor {@link ariaLabelledBy} is set.
67
+ * @description Accessible name for the input. Describe what the autocomplete represents. Prefer a visible label,
68
+ * linked through {@link inputId} or {@link ariaLabelledBy}; without any of them, browsers fall back to the
69
+ * {@link placeholder}.
70
70
  * @default ""
71
71
  */
72
72
  readonly ariaLabel: _angular_core.InputSignal<string>;
@@ -92,28 +92,35 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
92
92
  * @description Renders the component with reduced visual emphasis and removes pointer interaction.
93
93
  * @default false
94
94
  */
95
- readonly disabled: _angular_core.ModelSignal<boolean>;
95
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
96
96
  /**
97
97
  * @description Defines whether the first matching item should be highlighted while typing.
98
98
  * @default true
99
99
  */
100
- readonly highlightFirst: _angular_core.InputSignal<boolean>;
100
+ readonly highlightFirst: _angular_core.InputSignalWithTransform<boolean, unknown>;
101
+ /**
102
+ * @description Id of the inner `<input>` element. Point a `<label for>` or `<mona-label for>` at it to label the
103
+ * autocomplete. A unique id is generated when it isn't set.
104
+ * @default generated
105
+ */
106
+ readonly inputId: _angular_core.InputSignal<string>;
101
107
  /**
102
108
  * @description Marks the autocomplete as invalid. When bound to a signal form field via `[formField]`,
103
109
  * this is written by the `FormField` directive.
104
110
  * @default false
105
111
  */
106
- readonly invalid: _angular_core.InputSignal<boolean>;
112
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
107
113
  /**
108
114
  * @description Predicate or field name used to determine whether an individual item is disabled.
109
115
  * @default undefined
110
116
  */
111
117
  readonly itemDisabled: _angular_core.InputSignal<DropdownFieldPredicateType<TData>>;
112
118
  /**
113
- * @description Displays a loading indicator and prevents interaction while an operation is in progress.
119
+ * @description Shows a loading indicator, in place of the clear button, and marks the field busy. It doesn't
120
+ * block interaction: the field stays usable while data loads.
114
121
  * @default false
115
122
  */
116
- readonly loading: _angular_core.InputSignal<boolean>;
123
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
117
124
  /**
118
125
  * @description Emits when the popup is about to open. This event is preventable.
119
126
  */
@@ -133,7 +140,8 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
133
140
  */
134
141
  readonly popupClass: _angular_core.InputSignal<string>;
135
142
  /**
136
- * @description Height of the popup element.
143
+ * @description Maximum height of the popup, in pixels or as a CSS length. Shorter lists shrink to fit. When
144
+ * unset, the popup is at most 200 pixels tall.
137
145
  * @default null
138
146
  */
139
147
  readonly popupHeight: _angular_core.InputSignal<ListSizeInputType>;
@@ -146,22 +154,23 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
146
154
  * @description Prevents value changes while preserving the component's visual state.
147
155
  * @default false
148
156
  */
149
- readonly readonly: _angular_core.InputSignal<boolean>;
157
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
150
158
  /**
151
159
  * @description Marks the field as required for form validation.
152
160
  * @default false
153
161
  */
154
- readonly required: _angular_core.InputSignal<boolean>;
162
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
155
163
  /**
156
164
  * @description Border-radius preset applied to the component.
157
165
  * @default "medium"
158
166
  */
159
167
  readonly rounded: _angular_core.InputSignal<"none" | "small" | "medium" | "large" | "full" | null | undefined>;
160
168
  /**
161
- * @description Displays a button that clears the current value when clicked.
169
+ * @description Displays a button that clears the current value when clicked. Unlike the other dropdowns, this
170
+ * defaults to `true`.
162
171
  * @default true
163
172
  */
164
- readonly showClearButton: _angular_core.InputSignal<boolean>;
173
+ readonly showClearButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
165
174
  /**
166
175
  * @description Size preset controlling the component's dimensions.
167
176
  * @default "medium"
@@ -174,8 +183,8 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
174
183
  */
175
184
  readonly textField: _angular_core.InputSignal<DropdownFieldSelectorType<TData, string>>;
176
185
  /**
177
- * @description Emitted when the autocomplete is interacted with on blur, selection, clear, or committed input.
178
- * The `FormField` directive listens to this to mark the field as touched.
186
+ * @description Emitted when focus leaves the autocomplete. Moving between its input, clear button and popup
187
+ * doesn't count. The `FormField` directive listens to this to mark the field as touched.
179
188
  */
180
189
  readonly touch: _angular_core.OutputEmitterRef<void>;
181
190
  /**
@@ -183,7 +192,7 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
183
192
  * this is written by the `FormField` directive.
184
193
  * @default false
185
194
  */
186
- readonly touched: _angular_core.InputSignal<boolean>;
195
+ readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
187
196
  /**
188
197
  * @description Additional CSS classes merged onto the host element via `tailwind-merge`.
189
198
  * @default ""
@@ -202,8 +211,13 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
202
211
  */
203
212
  readonly valueField: _angular_core.InputSignal<DropdownFieldSelectorType<TData, unknown>>;
204
213
  constructor();
205
- focus(): void;
206
- protected onInputBlur(event: FocusEvent): void;
214
+ /**
215
+ * @description Moves focus to the inner input. The caret goes to the end of the text.
216
+ * @param options Passed to `HTMLElement.focus()`, for example `{ preventScroll: true }`.
217
+ */
218
+ focus(options?: FocusOptions): void;
219
+ protected onFocusOut(event: FocusEvent): void;
220
+ protected onInput(text: string): void;
207
221
  protected onItemSelect(event: SelectionChangeEvent<TData>): void;
208
222
  protected onPopupPointerDown(event: PointerEvent): void;
209
223
  protected onValueClear(event: MouseEvent | KeyboardEvent): void;
@@ -220,7 +234,7 @@ declare class AutoCompleteComponent<TData = unknown> implements FormValueControl
220
234
  private setSubscriptions;
221
235
  private updateValue;
222
236
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AutoCompleteComponent<any>, never>;
223
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AutoCompleteComponent<any>, "mona-auto-complete", 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; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "highlightFirst": { "alias": "highlightFirst"; "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; }; }, { "close": "close"; "closed": "closed"; "disabled": "disabledChange"; "open": "open"; "opened": "opened"; "touch": "touch"; "value": "valueChange"; }, ["footerTemplate", "groupHeaderTemplate", "headerTemplate", "itemTemplate", "noDataTemplate", "prefixTemplate", "suffixTemplate"], never, true, [{ directive: typeof i1.DropdownDataHandlerDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DropdownListPopupHandlerDirective; inputs: {}; outputs: {}; }]>;
237
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AutoCompleteComponent<any>, "mona-auto-complete", 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; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "highlightFirst": { "alias": "highlightFirst"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "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; }; }, { "close": "close"; "closed": "closed"; "open": "open"; "opened": "opened"; "touch": "touch"; "value": "valueChange"; }, ["footerTemplate", "groupHeaderTemplate", "headerTemplate", "itemTemplate", "noDataTemplate", "prefixTemplate", "suffixTemplate"], never, true, [{ directive: typeof i1.DropdownDataHandlerDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DropdownListPopupHandlerDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DropdownLiveRegionDirective; inputs: {}; outputs: {}; }]>;
224
238
  }
225
239
 
226
240
  declare const AUTO_COMPLETE_DEFAULT_MESSAGES: MonaAutoCompleteMessages;
@@ -122,6 +122,11 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
122
122
  protected readonly headerMonthYear: _angular_core.Signal<string>;
123
123
  protected readonly headerYear: _angular_core.Signal<string>;
124
124
  protected readonly invalidState: _angular_core.Signal<boolean>;
125
+ /**
126
+ * Whether a day can't be picked: outside `minDate`/`maxDate` or in `disabledDates`. An iterable of disabled
127
+ * dates is turned into a set of day keys once, so each of the 42 cells answers in constant time.
128
+ */
129
+ protected readonly isDayUnavailable: _angular_core.Signal<(date: Date) => boolean>;
125
130
  protected readonly messages: _angular_core.Signal<_nanahoshi_mona_ui_i18n.MonaCalendarMessages>;
126
131
  protected readonly monthBounds: _angular_core.Signal<{
127
132
  start: Date;
@@ -138,9 +143,13 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
138
143
  protected readonly prevButtonLabel: _angular_core.Signal<string>;
139
144
  protected readonly rangePreviewDate: _angular_core.WritableSignal<Date | null>;
140
145
  protected readonly rangePreviewDates: _angular_core.Signal<Date[]>;
146
+ protected readonly rangePreviewKeys: _angular_core.Signal<ReadonlySet<string>>;
141
147
  protected readonly selectedDates: _angular_core.WritableSignal<Date[]>;
142
- protected readonly timezone: string;
148
+ protected readonly selectedKeys: _angular_core.Signal<ReadonlySet<string>>;
149
+ /** Today at midnight. Refreshed when focus enters the calendar, so a page left open overnight moves on. */
150
+ protected readonly today: _angular_core.WritableSignal<Date>;
143
151
  protected readonly todayButtonLabel: _angular_core.Signal<string>;
152
+ protected readonly todayUnavailable: _angular_core.Signal<boolean>;
144
153
  protected readonly viewSwitchButtonLabel: _angular_core.Signal<string>;
145
154
  protected readonly weekdays: _angular_core.Signal<{
146
155
  display: string;
@@ -153,7 +162,7 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
153
162
  /**
154
163
  * @description Sets the disabled state of the calendar.
155
164
  */
156
- readonly disabled: _angular_core.ModelSignal<boolean>;
165
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
157
166
  /**
158
167
  * @description Sets the disabled dates of the calendar.
159
168
  * Accepts either an iterable of Date objects or a predicate function.
@@ -164,12 +173,18 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
164
173
  * @default null
165
174
  */
166
175
  readonly firstDay: _angular_core.InputSignal<FirstDayOfWeek | null>;
176
+ /**
177
+ * @description Moves focus to the active day when the calendar first renders. An inline calendar on a page
178
+ * should leave focus where it is; a calendar that opens in a popup sets this so focus moves into it.
179
+ * @default false
180
+ */
181
+ readonly focusOnMount: _angular_core.InputSignalWithTransform<boolean, unknown>;
167
182
  /**
168
183
  * @description Marks the calendar as invalid. When bound to a signal form field via `[formField]`,
169
184
  * this is written by the `FormField` directive.
170
185
  * @default false
171
186
  */
172
- readonly invalid: _angular_core.InputSignal<boolean>;
187
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
173
188
  /**
174
189
  * @description Sets the maximum date that can be selected.
175
190
  */
@@ -182,13 +197,13 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
182
197
  * @description Sets the readonly state of the calendar.
183
198
  * @default false
184
199
  */
185
- readonly readonly: _angular_core.InputSignal<boolean>;
200
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
186
201
  /**
187
202
  * @description Sets whether the calendar is required. When bound to a signal form field via `[formField]`,
188
203
  * this is written by the `FormField` directive.
189
204
  * @default false
190
205
  */
191
- readonly required: _angular_core.InputSignal<boolean>;
206
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
192
207
  /**
193
208
  * @description Sets the border radius of the calendar.
194
209
  * @default "medium"
@@ -200,8 +215,8 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
200
215
  */
201
216
  readonly selection: _angular_core.InputSignal<CalendarSelection>;
202
217
  /**
203
- * @description Emitted when the calendar value is changed by user interaction.
204
- * The `FormField` directive listens to this to mark the field as touched.
218
+ * @description Emitted when focus leaves the calendar, as a native input is touched on blur. Moving between
219
+ * its buttons and days doesn't count. The `FormField` directive listens to this to mark the field as touched.
205
220
  */
206
221
  readonly touch: _angular_core.OutputEmitterRef<void>;
207
222
  /**
@@ -209,13 +224,14 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
209
224
  * this is written by the `FormField` directive.
210
225
  * @default false
211
226
  */
212
- readonly touched: _angular_core.InputSignal<boolean>;
227
+ readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
213
228
  /**
214
229
  * @description Adds custom CSS classes to the calendar host element.
215
230
  */
216
231
  readonly userClass: _angular_core.InputSignal<string>;
217
232
  /**
218
- * @description The current value of the calendar.
233
+ * @description The current value of the calendar: a `Date` in single selection, the selected dates in multiple
234
+ * selection, and `[start, end]` in range selection. A range is written once both ends are picked.
219
235
  * @default null
220
236
  */
221
237
  readonly value: _angular_core.ModelSignal<Date | Date[] | null>;
@@ -223,18 +239,20 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
223
239
  * @description Enables the display of week numbers in the calendar.
224
240
  * @default false
225
241
  */
226
- readonly weekNumber: _angular_core.InputSignal<boolean>;
242
+ readonly weekNumber: _angular_core.InputSignalWithTransform<boolean, unknown>;
227
243
  constructor();
228
244
  protected formatInteger(value: number): string;
229
245
  protected getWeekNumber(date: Date): number;
230
246
  protected onDayClick(date: Date, event: MouseEvent): void;
231
247
  protected onDayPointerEnter(date: Date): void;
248
+ protected onFocusOut(event: FocusEvent): void;
232
249
  protected onMonthClick(month: number): void;
233
250
  protected onMonthGridPointerLeave(): void;
234
251
  protected onNavigationClick(direction: "prev" | "next"): void;
235
252
  protected onTodayButtonClick(): void;
236
253
  protected onViewChangeClick(view: CalendarView): void;
237
254
  protected onYearClick(year: number): void;
255
+ protected refreshToday(): void;
238
256
  private clearPendingRange;
239
257
  private commitUserSelection;
240
258
  private extendSelection;
@@ -251,6 +269,7 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
251
269
  private horizontalPeriodDirection;
252
270
  private isDateDisabled;
253
271
  private isEmptyValue;
272
+ private isOutOfRange;
254
273
  private navigateByDaysOrCells;
255
274
  private navigateByPeriod;
256
275
  private navigateByWeeksOrRows;
@@ -266,7 +285,7 @@ declare class CalendarComponent implements CalendarVariantInput, FormValueContro
266
285
  private switchToUpperView;
267
286
  private toggleFocusedDateInSelection;
268
287
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CalendarComponent, never>;
269
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CalendarComponent, "mona-calendar", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "disabledDates": { "alias": "disabledDates"; "required": false; "isSignal": true; }; "firstDay": { "alias": "firstDay"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "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; }; "selection": { "alias": "selection"; "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; }; "weekNumber": { "alias": "weekNumber"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "touch": "touch"; "value": "valueChange"; }, ["decadeCellTemplate", "monthCellTemplate", "yearCellTemplate"], never, true, never>;
288
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CalendarComponent, "mona-calendar", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "disabledDates": { "alias": "disabledDates"; "required": false; "isSignal": true; }; "firstDay": { "alias": "firstDay"; "required": false; "isSignal": true; }; "focusOnMount": { "alias": "focusOnMount"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "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; }; "selection": { "alias": "selection"; "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; }; "weekNumber": { "alias": "weekNumber"; "required": false; "isSignal": true; }; }, { "touch": "touch"; "value": "valueChange"; }, ["decadeCellTemplate", "monthCellTemplate", "yearCellTemplate"], never, true, never>;
270
289
  }
271
290
 
272
291
  declare const CALENDAR_DEFAULT_MESSAGES: MonaCalendarMessages;