ngwr 10.0.0 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/README.md +9 -8
  2. package/action-sheet/styles/_index.scss +6 -1
  3. package/alert/styles/_index.scss +7 -3
  4. package/badge/styles/_index.scss +1 -1
  5. package/badge/styles/_tag.scss +2 -2
  6. package/border-glow/styles/_index.scss +5 -0
  7. package/breadcrumbs/styles/_index.scss +1 -1
  8. package/button/styles/_index.scss +6 -6
  9. package/calendar/styles/_index.scss +9 -1
  10. package/circular-text/styles/_index.scss +6 -1
  11. package/density/styles/_index.scss +3 -1
  12. package/dialog/styles/_index.scss +1 -2
  13. package/drag-drop/styles/_index.scss +20 -7
  14. package/event-calendar/styles/_index.scss +284 -0
  15. package/falling-text/styles/_index.scss +5 -0
  16. package/fesm2022/ngwr-alert.mjs +8 -3
  17. package/fesm2022/ngwr-alert.mjs.map +1 -1
  18. package/fesm2022/ngwr-back-top.mjs +6 -4
  19. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  20. package/fesm2022/ngwr-border-glow.mjs +12 -9
  21. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  22. package/fesm2022/ngwr-breadcrumbs.mjs +2 -2
  23. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  24. package/fesm2022/ngwr-calendar.mjs +5 -3
  25. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  26. package/fesm2022/ngwr-card.mjs +2 -2
  27. package/fesm2022/ngwr-card.mjs.map +1 -1
  28. package/fesm2022/ngwr-carousel.mjs +17 -4
  29. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  30. package/fesm2022/ngwr-cascader.mjs +31 -4
  31. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  32. package/fesm2022/ngwr-checkbox.mjs +12 -3
  33. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  34. package/fesm2022/ngwr-circular-text.mjs +2 -2
  35. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  36. package/fesm2022/ngwr-command-palette.mjs +7 -3
  37. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  38. package/fesm2022/ngwr-counter.mjs +9 -1
  39. package/fesm2022/ngwr-counter.mjs.map +1 -1
  40. package/fesm2022/ngwr-date-picker.mjs +23 -6
  41. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  42. package/fesm2022/ngwr-descriptions.mjs +5 -4
  43. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  44. package/fesm2022/ngwr-drag-drop.mjs +2 -2
  45. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  46. package/fesm2022/ngwr-dropdown.mjs +4 -0
  47. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  48. package/fesm2022/ngwr-event-calendar.mjs +723 -0
  49. package/fesm2022/ngwr-event-calendar.mjs.map +1 -0
  50. package/fesm2022/ngwr-falling-text.mjs +2 -2
  51. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  52. package/fesm2022/ngwr-file-upload.mjs +2 -2
  53. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  54. package/fesm2022/ngwr-form.mjs +258 -42
  55. package/fesm2022/ngwr-form.mjs.map +1 -1
  56. package/fesm2022/ngwr-fuzzy-text.mjs +15 -1
  57. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  58. package/fesm2022/ngwr-gauge.mjs +8 -3
  59. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  60. package/fesm2022/ngwr-glitch-text.mjs +2 -2
  61. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  62. package/fesm2022/ngwr-gradient-text.mjs +2 -2
  63. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  64. package/fesm2022/ngwr-i18n-en.mjs +73 -5
  65. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  66. package/fesm2022/ngwr-i18n-ru.mjs +73 -5
  67. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  68. package/fesm2022/ngwr-i18n.mjs +20 -2
  69. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  70. package/fesm2022/ngwr-icon.mjs +5 -0
  71. package/fesm2022/ngwr-icon.mjs.map +1 -1
  72. package/fesm2022/ngwr-input-number.mjs +19 -3
  73. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  74. package/fesm2022/ngwr-input.mjs +48 -6
  75. package/fesm2022/ngwr-input.mjs.map +1 -1
  76. package/fesm2022/ngwr-knob.mjs +8 -3
  77. package/fesm2022/ngwr-knob.mjs.map +1 -1
  78. package/fesm2022/ngwr-lightbox.mjs +32 -3
  79. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  80. package/fesm2022/ngwr-line-chart.mjs +3 -3
  81. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  82. package/fesm2022/ngwr-list.mjs +2 -2
  83. package/fesm2022/ngwr-list.mjs.map +1 -1
  84. package/fesm2022/ngwr-loading-bar.mjs +2 -2
  85. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  86. package/fesm2022/ngwr-marquee.mjs +2 -2
  87. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  88. package/fesm2022/ngwr-media.mjs +3 -0
  89. package/fesm2022/ngwr-media.mjs.map +1 -1
  90. package/fesm2022/ngwr-meter-group.mjs +14 -3
  91. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  92. package/fesm2022/ngwr-page-header.mjs +2 -2
  93. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  94. package/fesm2022/ngwr-pagination.mjs +1 -1
  95. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  96. package/fesm2022/ngwr-progress.mjs +8 -2
  97. package/fesm2022/ngwr-progress.mjs.map +1 -1
  98. package/fesm2022/ngwr-qr.mjs.map +1 -1
  99. package/fesm2022/ngwr-rating.mjs +6 -4
  100. package/fesm2022/ngwr-rating.mjs.map +1 -1
  101. package/fesm2022/ngwr-result.mjs +19 -12
  102. package/fesm2022/ngwr-result.mjs.map +1 -1
  103. package/fesm2022/ngwr-segmented.mjs +2 -2
  104. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  105. package/fesm2022/ngwr-select.mjs +28 -8
  106. package/fesm2022/ngwr-select.mjs.map +1 -1
  107. package/fesm2022/ngwr-shiny-text.mjs +4 -6
  108. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  109. package/fesm2022/ngwr-speed-dial.mjs +11 -3
  110. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  111. package/fesm2022/ngwr-spotlight-card.mjs +2 -2
  112. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  113. package/fesm2022/ngwr-squircle.mjs +1 -1
  114. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  115. package/fesm2022/ngwr-star-border.mjs +2 -2
  116. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  117. package/fesm2022/ngwr-switch.mjs +10 -3
  118. package/fesm2022/ngwr-switch.mjs.map +1 -1
  119. package/fesm2022/ngwr-table.mjs +233 -19
  120. package/fesm2022/ngwr-table.mjs.map +1 -1
  121. package/fesm2022/ngwr-tabs.mjs +21 -4
  122. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  123. package/fesm2022/ngwr-textarea.mjs +20 -4
  124. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  125. package/fesm2022/ngwr-tilt-card.mjs +2 -2
  126. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  127. package/fesm2022/ngwr-toolbar.mjs +2 -2
  128. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  129. package/fesm2022/ngwr-tour.mjs +264 -0
  130. package/fesm2022/ngwr-tour.mjs.map +1 -0
  131. package/fesm2022/ngwr-transfer.mjs +184 -0
  132. package/fesm2022/ngwr-transfer.mjs.map +1 -0
  133. package/fesm2022/ngwr-tree.mjs +23 -6
  134. package/fesm2022/ngwr-tree.mjs.map +1 -1
  135. package/fesm2022/ngwr-typewriter.mjs +2 -2
  136. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  137. package/fesm2022/ngwr-validators.mjs +118 -2
  138. package/fesm2022/ngwr-validators.mjs.map +1 -1
  139. package/fesm2022/ngwr-version.mjs +2 -2
  140. package/fesm2022/ngwr-version.mjs.map +1 -1
  141. package/fesm2022/ngwr-virtual-scroll.mjs +2 -2
  142. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  143. package/fesm2022/ngwr-waves.mjs +2 -2
  144. package/fesm2022/ngwr-waves.mjs.map +1 -1
  145. package/form/styles/_index.scss +8 -4
  146. package/glitch-text/styles/_index.scss +5 -0
  147. package/gradient-text/styles/_index.scss +5 -0
  148. package/i18n/en.json +74 -6
  149. package/i18n/ru.json +74 -6
  150. package/icon/styles/_index.scss +5 -0
  151. package/keyboard/styles/_index.scss +5 -0
  152. package/llms-full.txt +123 -62
  153. package/llms.txt +29 -8
  154. package/loading-bar/styles/_index.scss +5 -0
  155. package/marquee/styles/_index.scss +7 -2
  156. package/overlay/styles/_index.scss +5 -0
  157. package/package.json +13 -1
  158. package/popover/styles/_index.scss +48 -12
  159. package/pull-to-refresh/styles/_index.scss +5 -0
  160. package/result/styles/_index.scss +3 -3
  161. package/schematics/icon-set/index.js +80 -34
  162. package/schematics/icon-set/schema.json +8 -3
  163. package/schematics/ng-add/index.js +5 -2
  164. package/schematics/page/templates.js +17 -21
  165. package/schematics/provider/index.js +31 -13
  166. package/schematics/provider/schema.json +40 -24
  167. package/schematics/use/index.js +5 -1
  168. package/schematics/use/schema.json +8 -3
  169. package/schematics/use/symbol-map.json +6 -177
  170. package/segmented/styles/_index.scss +1 -1
  171. package/select/styles/_index.scss +7 -3
  172. package/shiny-text/styles/_index.scss +5 -0
  173. package/sidebar/styles/_index.scss +3 -3
  174. package/speed-dial/styles/_index.scss +12 -1
  175. package/spotlight-card/styles/_index.scss +5 -0
  176. package/squircle/styles/_index.scss +5 -0
  177. package/star-border/styles/_index.scss +5 -0
  178. package/statistic/styles/_index.scss +2 -2
  179. package/stepper/styles/_index.scss +3 -3
  180. package/styles/_animations.scss +6 -0
  181. package/styles.scss +3 -0
  182. package/table/styles/_index.scss +100 -2
  183. package/tabs/styles/_index.scss +1 -1
  184. package/theme/styles/_colors.scss +65 -2
  185. package/theme/styles/_dark.scss +18 -6
  186. package/theme/styles/_focus.scss +2 -8
  187. package/tilt-card/styles/_index.scss +5 -0
  188. package/toast/styles/_index.scss +6 -3
  189. package/tour/styles/_index.scss +63 -0
  190. package/transfer/styles/_index.scss +105 -0
  191. package/types/ngwr-alert.d.ts +4 -1
  192. package/types/ngwr-avatar.d.ts +1 -1
  193. package/types/ngwr-back-top.d.ts +3 -2
  194. package/types/ngwr-badge.d.ts +1 -1
  195. package/types/ngwr-border-glow.d.ts +0 -1
  196. package/types/ngwr-carousel.d.ts +10 -1
  197. package/types/ngwr-cascader.d.ts +12 -1
  198. package/types/ngwr-checkbox.d.ts +9 -1
  199. package/types/ngwr-command-palette.d.ts +4 -1
  200. package/types/ngwr-date-picker.d.ts +9 -1
  201. package/types/ngwr-density.d.ts +1 -1
  202. package/types/ngwr-divider.d.ts +1 -1
  203. package/types/ngwr-event-calendar.d.ts +358 -0
  204. package/types/ngwr-form.d.ts +177 -20
  205. package/types/ngwr-fuzzy-text.d.ts +8 -0
  206. package/types/ngwr-gauge.d.ts +4 -1
  207. package/types/ngwr-i18n.d.ts +15 -0
  208. package/types/ngwr-input-number.d.ts +8 -1
  209. package/types/ngwr-input.d.ts +50 -20
  210. package/types/ngwr-knob.d.ts +4 -1
  211. package/types/ngwr-lightbox.d.ts +7 -1
  212. package/types/ngwr-line-chart.d.ts +1 -1
  213. package/types/ngwr-media.d.ts +1 -1
  214. package/types/ngwr-meter-group.d.ts +9 -1
  215. package/types/ngwr-page-header.d.ts +2 -2
  216. package/types/ngwr-pagination.d.ts +1 -1
  217. package/types/ngwr-progress.d.ts +4 -1
  218. package/types/ngwr-rating.d.ts +3 -2
  219. package/types/ngwr-result.d.ts +12 -6
  220. package/types/ngwr-segmented.d.ts +6 -0
  221. package/types/ngwr-select.d.ts +13 -7
  222. package/types/ngwr-shiny-text.d.ts +2 -4
  223. package/types/ngwr-speed-dial.d.ts +7 -1
  224. package/types/ngwr-squircle.d.ts +1 -1
  225. package/types/ngwr-switch.d.ts +7 -1
  226. package/types/ngwr-table.d.ts +126 -6
  227. package/types/ngwr-tabs.d.ts +1 -4
  228. package/types/ngwr-textarea.d.ts +8 -1
  229. package/types/ngwr-toolbar.d.ts +2 -2
  230. package/types/ngwr-tour.d.ts +132 -0
  231. package/types/ngwr-transfer.d.ts +118 -0
  232. package/types/ngwr-tree.d.ts +10 -2
  233. package/types/ngwr-validators.d.ts +62 -2
  234. package/types/ngwr-version.d.ts +2 -2
  235. package/typewriter/styles/_index.scss +5 -0
  236. package/typography/styles/_index.scss +5 -5
  237. package/virtual-scroll/styles/_index.scss +6 -1
  238. package/waves/styles/_index.scss +5 -0
@@ -51,10 +51,21 @@ interface WrCascaderOption<T = string> {
51
51
  */
52
52
  type WrCascaderSize = 'sm' | 'md' | 'lg';
53
53
  declare class WrCascader<T = string> implements FormValueControl<unknown> {
54
+ /** Accessible name. Falls back to `select.clearSelection`, then `'Clear selection'`. */
55
+ readonly clearLabel: _angular_core.InputSignal<string | null>;
56
+ protected readonly resolvedClearLabel: _angular_core.Signal<string>;
54
57
  /** Root-level options. Each may have `children` for deeper levels. */
55
58
  readonly options: _angular_core.InputSignal<readonly WrCascaderOption<T>[]>;
56
59
  /** Placeholder shown when no path is selected. @default '' */
57
60
  readonly placeholder: _angular_core.InputSignal<string>;
61
+ /**
62
+ * Accessible name of the trigger. Falls back to the placeholder, then to
63
+ * `select.label` — a `role="combobox"` with nothing selected and no
64
+ * placeholder otherwise has no name at all.
65
+ */
66
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
67
+ private readonly labelText;
68
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
58
69
  /**
59
70
  * Disable the cascader. Bound automatically from the field's disabled state
60
71
  * when used with `[formField]`.
@@ -115,7 +126,7 @@ declare class WrCascader<T = string> implements FormValueControl<unknown> {
115
126
  private openOverlay;
116
127
  private closeOverlay;
117
128
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCascader<any>, never>;
118
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCascader<any>, "wr-cascader", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "changeOnSelect": { "alias": "changeOnSelect"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
129
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCascader<any>, "wr-cascader", never, { "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "changeOnSelect": { "alias": "changeOnSelect"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
119
130
  }
120
131
 
121
132
  export { WrCascader };
@@ -47,6 +47,14 @@ declare class WrCheckbox implements FormCheckboxControl {
47
47
  * `value`.)
48
48
  */
49
49
  readonly checkboxValue: _angular_core.InputSignal<unknown>;
50
+ /**
51
+ * Accessible name for a checkbox used WITHOUT projected text — a selection
52
+ * cell in a table, say. The wrapping `<label>` names the control whenever
53
+ * content is projected; with none, the native input has no name, and an
54
+ * `aria-label` put on the host lands on a `<wr-checkbox>` element that no
55
+ * screen reader ever announces.
56
+ */
57
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
50
58
  /**
51
59
  * Checked state — the form value. Bound by `[formField]`, two-way via
52
60
  * `[(checked)]`, or `[(ngModel)]`. Ignored inside a `<wr-checkbox-group>`,
@@ -87,7 +95,7 @@ declare class WrCheckbox implements FormCheckboxControl {
87
95
  protected onInputChange(event: Event): void;
88
96
  protected onInputBlur(): void;
89
97
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCheckbox, never>;
90
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCheckbox, "wr-checkbox", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "checkboxValue": { "alias": "checkboxValue"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
98
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCheckbox, "wr-checkbox", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "checkboxValue": { "alias": "checkboxValue"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
91
99
  }
92
100
 
93
101
  /**
@@ -56,6 +56,9 @@ interface Bucket {
56
56
  * @see https://ngwr.dev/reference/components/command-palette
57
57
  */
58
58
  declare class WrCommandPalette {
59
+ /** Accessible name. Falls back to `commandPalette.label`, then `'Command palette'`. */
60
+ readonly paletteLabel: _angular_core.InputSignal<string | null>;
61
+ protected readonly resolvedPaletteLabel: _angular_core.Signal<string>;
59
62
  /** Items shown in the palette. */
60
63
  readonly items: _angular_core.InputSignal<readonly WrCommandItem[]>;
61
64
  /** Controlled open state (two-way bindable). @default false */
@@ -118,7 +121,7 @@ declare class WrCommandPalette {
118
121
  close(): void;
119
122
  private commit;
120
123
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCommandPalette, never>;
121
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCommandPalette, "wr-command-palette", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "closeOnPick": { "alias": "closeOnPick"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "picked": "picked"; }, never, never, true, never>;
124
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCommandPalette, "wr-command-palette", never, { "paletteLabel": { "alias": "paletteLabel"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "closeOnPick": { "alias": "closeOnPick"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "picked": "picked"; }, never, never, true, never>;
122
125
  }
123
126
 
124
127
  export { WrCommandPalette };
@@ -99,6 +99,14 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
99
99
  private readonly labelDate;
100
100
  private readonly labelTime;
101
101
  private readonly labelDateTime;
102
+ /**
103
+ * Accessible name of the text field. Falls back to the placeholder, then to
104
+ * the same catalog string the calendar button uses — the field is a
105
+ * `role="combobox"`, and with an empty placeholder it had no name at all.
106
+ */
107
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
108
+ private readonly fieldLabel;
109
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
102
110
  protected readonly triggerLabel: _angular_core.Signal<string>;
103
111
  protected readonly classes: _angular_core.Signal<string>;
104
112
  private overlayRef;
@@ -128,7 +136,7 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
128
136
  private isOutOfBounds;
129
137
  private sameDate;
130
138
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDatePicker, never>;
131
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDatePicker, "wr-date-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
139
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDatePicker, "wr-date-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
132
140
  }
133
141
 
134
142
  /**
@@ -3,7 +3,7 @@ import { InjectionToken, Signal, EnvironmentProviders } from '@angular/core';
3
3
 
4
4
  /** Density scale. Components multiply their paddings by the matching multiplier. */
5
5
  type WrDensityValue = 'sm' | 'md' | 'lg' | 'touch';
6
- /** Configuration for {@link WrDensityValueService}. */
6
+ /** Configuration for {@link WrDensity}. */
7
7
  interface WrDensityConfig {
8
8
  /** Initial density used when no persisted value is present. @default 'md' */
9
9
  readonly defaultDensity: WrDensityValue;
@@ -70,4 +70,4 @@ declare class WrDivider {
70
70
  }
71
71
 
72
72
  export { WrDivider };
73
- export type { WrDividerType };
73
+ export type { WrDividerAlign, WrDividerType };
@@ -0,0 +1,358 @@
1
+ import * as ngwr_i18n from 'ngwr/i18n';
2
+ import * as _angular_core from '@angular/core';
3
+ import { TemplateRef } from '@angular/core';
4
+ import { WrColor } from 'ngwr/theme';
5
+
6
+ /**
7
+ * @license
8
+ *
9
+ * Use of this source code is governed by an MIT-style license that can be
10
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
11
+ */
12
+
13
+ /** Which span of time the calendar is showing. */
14
+ type WrCalendarView = 'month' | 'week' | 'day';
15
+ /**
16
+ * One entry on the calendar.
17
+ *
18
+ * `end` is EXCLUSIVE — an event from 09:00 to 10:00 does not overlap one that
19
+ * starts at 10:00, and an all-day event on a single day ends at 00:00 the next
20
+ * day. Exclusive ends are what make adjacency and overlap the same comparison
21
+ * in every view, instead of a per-view off-by-one.
22
+ */
23
+ interface WrCalendarEvent {
24
+ /** Stable identity. Used for tracking and echoed back on every output. */
25
+ readonly id: string | number;
26
+ /** Text shown on the chip and read out as the button's accessible name. */
27
+ readonly title: string;
28
+ /** Start instant, inclusive. */
29
+ readonly start: Date;
30
+ /** End instant, exclusive. */
31
+ readonly end: Date;
32
+ /**
33
+ * Show in the all-day band rather than against the time grid. Month view
34
+ * renders every event as a band regardless.
35
+ */
36
+ readonly allDay?: boolean;
37
+ /** Intent color for the chip. Falls back to `primary`. */
38
+ readonly color?: WrColor | null;
39
+ /**
40
+ * Per-event override of the calendar's `editable` input — `false` pins an
41
+ * event that would otherwise be draggable.
42
+ */
43
+ readonly editable?: boolean;
44
+ /** Anything the host wants to carry along; the calendar never reads it. */
45
+ readonly data?: unknown;
46
+ }
47
+ /**
48
+ * A move or a resize, emitted before anything is applied. `events` is an input,
49
+ * so the calendar cannot mutate it: apply the change in your own state and the
50
+ * new position renders on the next pass. Ignoring the output cancels the drag.
51
+ */
52
+ interface WrCalendarEventChange {
53
+ /** The event as it was, untouched. */
54
+ readonly event: WrCalendarEvent;
55
+ /** Where it would start. */
56
+ readonly start: Date;
57
+ /** Where it would end, exclusive. */
58
+ readonly end: Date;
59
+ /** Whether the pointer changed the duration (`resize`) or only slid it. */
60
+ readonly kind: 'move' | 'resize';
61
+ }
62
+ /** An empty stretch of the calendar the user activated. */
63
+ interface WrCalendarSlot {
64
+ /** Start of the slot — midnight in month view, the slot's own time otherwise. */
65
+ readonly start: Date;
66
+ /** End of the slot, exclusive. */
67
+ readonly end: Date;
68
+ /** `true` in month view and in the all-day band. */
69
+ readonly allDay: boolean;
70
+ }
71
+ /** Implicit context of the `wrCalendarEvent` template. */
72
+ interface WrCalendarEventContext {
73
+ readonly $implicit: WrCalendarEvent;
74
+ }
75
+
76
+ /**
77
+ * A chip that spans whole days — every month-view event, and the all-day band
78
+ * of the time views. It lives in the cell where its segment STARTS and reaches
79
+ * right with a `calc()` width, so it stays inside one `role="gridcell"` however
80
+ * far it spans.
81
+ */
82
+ interface BandChip {
83
+ readonly key: string;
84
+ readonly event: WrCalendarEvent;
85
+ /** Index of the day it starts on, within the row it was laid out against. */
86
+ readonly column: number;
87
+ readonly span: number;
88
+ readonly lane: number;
89
+ readonly continuesBefore: boolean;
90
+ readonly continuesAfter: boolean;
91
+ }
92
+ /**
93
+ * A chip positioned against the time grid. Same rule — it belongs to the cell
94
+ * holding its start — but sized in percentages OF THAT CELL, which works only
95
+ * because every slot row is the same height.
96
+ */
97
+ interface TimeChip {
98
+ readonly key: string;
99
+ readonly event: WrCalendarEvent;
100
+ /** Offset into the start cell, 0–100. */
101
+ readonly top: number;
102
+ /** Height as a multiple of the cell, ×100. */
103
+ readonly height: number;
104
+ /** Horizontal share of the column, both 0–100. */
105
+ readonly left: number;
106
+ readonly width: number;
107
+ readonly continuesBefore: boolean;
108
+ readonly continuesAfter: boolean;
109
+ }
110
+ interface DayCell {
111
+ readonly date: Date;
112
+ readonly key: string;
113
+ readonly day: string;
114
+ readonly label: string;
115
+ readonly inMonth: boolean;
116
+ readonly isToday: boolean;
117
+ readonly bands: readonly BandChip[];
118
+ readonly hidden: number;
119
+ }
120
+ interface MonthWeek {
121
+ readonly key: string;
122
+ readonly days: readonly DayCell[];
123
+ }
124
+ interface TimeCell {
125
+ readonly key: string;
126
+ readonly date: Date;
127
+ readonly label: string;
128
+ readonly chips: readonly TimeChip[];
129
+ }
130
+ interface TimeRow {
131
+ readonly key: string;
132
+ readonly label: string;
133
+ /** Minutes from midnight — also what the drag target reads off the cell. */
134
+ readonly minutes: number;
135
+ readonly major: boolean;
136
+ readonly cells: readonly TimeCell[];
137
+ }
138
+ interface ColumnHeader {
139
+ readonly key: string;
140
+ readonly date: Date;
141
+ readonly weekday: string;
142
+ readonly day: string;
143
+ readonly label: string;
144
+ readonly isToday: boolean;
145
+ }
146
+ /** Live drag state. `null` whenever the pointer is not down on a chip. */
147
+ interface DragState {
148
+ readonly event: WrCalendarEvent;
149
+ readonly kind: 'move' | 'resize';
150
+ readonly originDate: Date;
151
+ readonly originMinutes: number;
152
+ readonly pointerId: number;
153
+ }
154
+ /**
155
+ * Month / week / day event calendar with drag to move and resize.
156
+ *
157
+ * `events` is an INPUT, never mutated: a drag emits `eventChange` describing
158
+ * where the event would land and stops there. Apply it to your own state and
159
+ * the calendar re-renders — so an unhandled output is a cancelled drag, an
160
+ * optimistic update is one `set`, and a rejected server write needs no rollback
161
+ * path inside the component.
162
+ *
163
+ * Every chip lives inside the `role="gridcell"` where it starts and reaches out
164
+ * with `calc()` widths or percentage heights. That is what keeps the ARIA grid
165
+ * valid — an events layer floating over the grid would leave rows owning
166
+ * something other than cells — and it means no pixel measurement anywhere.
167
+ *
168
+ * **Keyboard.** The grid is one tab stop with a roving cursor: arrows move by
169
+ * day (left / right) and by week or slot (up / down), `Home` / `End` jump to
170
+ * the ends of the row, `Enter` on an empty cell emits `slotClick`, and `Enter`
171
+ * on a cell holding events focuses the first chip (`Escape` returns). On a
172
+ * focused chip, `Alt` + arrows move the event — the keyboard equivalent of the
173
+ * drag, emitting the same `eventChange`.
174
+ *
175
+ * Date math and formatting go through {@link WrDateAdapter}; register one with
176
+ * `provideWrDateAdapter(...)` at bootstrap.
177
+ *
178
+ * @example
179
+ * ```html
180
+ * <wr-event-calendar
181
+ * editable
182
+ * [events]="events()"
183
+ * [(view)]="view"
184
+ * [(date)]="anchor"
185
+ * (eventChange)="apply($event)"
186
+ * (slotClick)="compose($event)"
187
+ * />
188
+ * ```
189
+ *
190
+ * @see https://ngwr.dev/reference/components/event-calendar
191
+ */
192
+ declare class WrEventCalendar {
193
+ /** Everything to render. Never mutated — see `eventChange`. */
194
+ readonly events: _angular_core.InputSignal<readonly WrCalendarEvent[]>;
195
+ /** Which span is shown. Two-way bindable. @default 'month' */
196
+ readonly view: _angular_core.ModelSignal<WrCalendarView>;
197
+ /** Any date inside the shown span. Two-way bindable. */
198
+ readonly date: _angular_core.ModelSignal<Date>;
199
+ /** Which buttons the view switcher offers. Empty hides it. */
200
+ readonly views: _angular_core.InputSignal<readonly WrCalendarView[]>;
201
+ /** Allow dragging chips to move and resize them. @default false */
202
+ readonly editable: _angular_core.InputSignalWithTransform<boolean, any>;
203
+ /** Minutes per row in the time views — also the drag snap. @default 30 */
204
+ readonly slotMinutes: _angular_core.InputSignalWithTransform<number, unknown>;
205
+ /** First hour the time views show. @default 0 */
206
+ readonly dayStartHour: _angular_core.InputSignalWithTransform<number, unknown>;
207
+ /** First hour they do NOT show, exclusive. @default 24 */
208
+ readonly dayEndHour: _angular_core.InputSignalWithTransform<number, unknown>;
209
+ /** Lanes a month cell shows before collapsing the rest into “+N more”. @default 3 */
210
+ readonly maxLanes: _angular_core.InputSignalWithTransform<number, unknown>;
211
+ /** Hide the built-in header — supply your own navigation instead. @default false */
212
+ readonly hideHeader: _angular_core.InputSignalWithTransform<boolean, any>;
213
+ /** A chip was activated. */
214
+ readonly eventClick: _angular_core.OutputEmitterRef<WrCalendarEvent>;
215
+ /** Empty space was activated — the slot the user pointed at. */
216
+ readonly slotClick: _angular_core.OutputEmitterRef<WrCalendarSlot>;
217
+ /** A drag or an `Alt` + arrow finished. Apply it yourself; nothing moves until you do. */
218
+ readonly eventChange: _angular_core.OutputEmitterRef<WrCalendarEventChange>;
219
+ private readonly adapter;
220
+ private readonly document;
221
+ private readonly chipTpl;
222
+ protected readonly todayLabel: string;
223
+ protected readonly previousLabel: string;
224
+ protected readonly nextLabel: string;
225
+ protected readonly allDayLabel: string;
226
+ protected readonly timeLabel: string;
227
+ protected readonly moreLabel: (params?: ngwr_i18n.WrI18nParams) => string;
228
+ protected readonly viewLabels: Record<WrCalendarView, string>;
229
+ /** Accessible name of the grid; overridable for a page with several. */
230
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
231
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
232
+ /**
233
+ * `[day, minutes]` of the roving cursor — `minutes === -1` means a month cell
234
+ * or the all-day band. Raw, so it survives a view switch; read
235
+ * {@link cursorCell}, which clamps it to what the current view actually has.
236
+ */
237
+ private readonly cursor;
238
+ /**
239
+ * The cursor as the current view can honour it. Exactly one cell may carry
240
+ * `tabindex="0"`, so a stale coordinate — the 09:30 row after switching to
241
+ * month, day 34 after switching to week — must fall back to a real cell
242
+ * rather than leave the grid with no tab stop at all.
243
+ */
244
+ protected readonly cursorCell: _angular_core.Signal<readonly [number, number]>;
245
+ /** Non-null only while a pointer is down on a chip. @internal */
246
+ protected readonly drag: _angular_core.WritableSignal<DragState | null>;
247
+ protected readonly dragging: _angular_core.Signal<string | number | null>;
248
+ protected readonly chipTemplate: _angular_core.Signal<TemplateRef<WrCalendarEventContext> | null>;
249
+ protected readonly classes: _angular_core.Signal<string>;
250
+ /** Inclusive-exclusive window the current view covers. */
251
+ private readonly range;
252
+ /** Every day the view shows, left to right. */
253
+ private readonly days;
254
+ /** Only what overlaps the window — everything downstream works off this. */
255
+ private readonly visible;
256
+ protected readonly title: _angular_core.Signal<string>;
257
+ protected readonly weekdayNames: _angular_core.Signal<string[]>;
258
+ protected readonly switcher: _angular_core.Signal<{
259
+ view: WrCalendarView;
260
+ label: string;
261
+ }[]>;
262
+ protected readonly weeks: _angular_core.Signal<readonly MonthWeek[]>;
263
+ protected readonly columns: _angular_core.Signal<readonly ColumnHeader[]>;
264
+ /** The all-day band above the time grid — same layout as a month week. */
265
+ protected readonly allDayBands: _angular_core.Signal<readonly BandChip[]>;
266
+ protected readonly allDayCells: _angular_core.Signal<readonly {
267
+ key: string;
268
+ date: Date;
269
+ label: string;
270
+ bands: readonly BandChip[];
271
+ }[]>;
272
+ protected readonly hasAllDay: _angular_core.Signal<boolean>;
273
+ protected readonly rows: _angular_core.Signal<readonly TimeRow[]>;
274
+ protected step(direction: -1 | 1): void;
275
+ protected goToday(): void;
276
+ protected setView(view: WrCalendarView): void;
277
+ /** “+N more” opens that day — the overflow is only ever a month-view problem. */
278
+ protected openDay(date: Date): void;
279
+ protected onChipPointerDown(event: PointerEvent, chipEvent: WrCalendarEvent, kind: 'move' | 'resize'): void;
280
+ protected onPointerUp(event: PointerEvent): void;
281
+ protected onChipClick(event: WrCalendarEvent): void;
282
+ protected onCellClick(date: Date, minutes: number): void;
283
+ protected onChipKeyDown(event: KeyboardEvent, chipEvent: WrCalendarEvent): void;
284
+ protected onGridKeyDown(event: KeyboardEvent): void;
285
+ protected isCursor(day: number, minutes: number): boolean;
286
+ /**
287
+ * Greedy lane packing for day-spanning chips. Sorted by start then by length,
288
+ * each segment takes the first lane its columns are free in — the classic
289
+ * interval-graph colouring, and the reason a long event keeps one lane across
290
+ * the whole week instead of stair-stepping.
291
+ *
292
+ * `limit` caps the visible lanes; anything past it is reported per column so
293
+ * the cell can say how much it is hiding.
294
+ */
295
+ private bandLayout;
296
+ /**
297
+ * Column layout inside one day: events that overlap in time share the width.
298
+ * Clusters are built by a running high-water mark — a new cluster starts the
299
+ * moment an event begins after everything before it has ended.
300
+ */
301
+ private timeLayout;
302
+ protected chipLabel(event: WrCalendarEvent): string;
303
+ protected chipTime(event: WrCalendarEvent): string;
304
+ protected canDrag(event: WrCalendarEvent): boolean;
305
+ private slotAt;
306
+ /** The `[data-cell]` under the pointer, or `null` outside the grid. */
307
+ private cellUnder;
308
+ /** Value of a cell's `data-cell-date`. @internal */
309
+ protected stamp(date: Date): number;
310
+ private focusCursor;
311
+ private focusCell;
312
+ /**
313
+ * Move one time row, treating the all-day band as the row above the first —
314
+ * otherwise the band is mouse-only, which is the kind of gap that makes a
315
+ * keyboard user give up on the whole grid.
316
+ */
317
+ private stepRow;
318
+ private shift;
319
+ private startOfDay;
320
+ private startOfWeek;
321
+ /** Whole days apart — computed on the day floor, so DST cannot round it off. */
322
+ private daysBetween;
323
+ private spansWholeDay;
324
+ private clock;
325
+ private iso;
326
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrEventCalendar, never>;
327
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrEventCalendar, "wr-event-calendar", never, { "events": { "alias": "events"; "required": false; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "slotMinutes": { "alias": "slotMinutes"; "required": false; "isSignal": true; }; "dayStartHour": { "alias": "dayStartHour"; "required": false; "isSignal": true; }; "dayEndHour": { "alias": "dayEndHour"; "required": false; "isSignal": true; }; "maxLanes": { "alias": "maxLanes"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "view": "viewChange"; "date": "dateChange"; "eventClick": "eventClick"; "slotClick": "slotClick"; "eventChange": "eventChange"; }, ["chipTpl"], never, true, never>;
328
+ }
329
+
330
+ /**
331
+ * @license
332
+ *
333
+ * Use of this source code is governed by an MIT-style license that can be
334
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
335
+ */
336
+
337
+ /**
338
+ * Replace the chip's contents. The event is the implicit context; the chip
339
+ * itself — its button, its position and its drag handling — stays with the
340
+ * calendar, so a custom template cannot break the geometry.
341
+ *
342
+ * @example
343
+ * ```html
344
+ * <wr-event-calendar [events]="events">
345
+ * <ng-template wrCalendarEvent let-event>
346
+ * <strong>{{ event.title }}</strong> — {{ event.data.room }}
347
+ * </ng-template>
348
+ * </wr-event-calendar>
349
+ * ```
350
+ */
351
+ declare class WrCalendarEventTemplate {
352
+ readonly template: TemplateRef<WrCalendarEventContext>;
353
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCalendarEventTemplate, never>;
354
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrCalendarEventTemplate, "ng-template[wrCalendarEvent]", never, {}, {}, never, never, true, never>;
355
+ }
356
+
357
+ export { WrCalendarEventTemplate, WrEventCalendar };
358
+ export type { WrCalendarEvent, WrCalendarEventChange, WrCalendarEventContext, WrCalendarSlot, WrCalendarView };