@mesgflow/ui-kit 0.6.0 → 0.7.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 (199) hide show
  1. package/README.md +56 -5
  2. package/fesm2022/mesgflow-ui-kit-accordion.mjs +3 -2
  3. package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -1
  4. package/fesm2022/mesgflow-ui-kit-agenda.mjs +208 -0
  5. package/fesm2022/mesgflow-ui-kit-agenda.mjs.map +1 -0
  6. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
  7. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
  9. package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
  10. package/fesm2022/mesgflow-ui-kit-box-input.mjs +2 -2
  11. package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
  12. package/fesm2022/mesgflow-ui-kit-button.mjs +188 -242
  13. package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
  14. package/fesm2022/mesgflow-ui-kit-card.mjs +37 -16
  15. package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
  16. package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
  17. package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
  18. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +16 -21
  19. package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
  20. package/fesm2022/mesgflow-ui-kit-chip.mjs +2 -2
  21. package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
  22. package/fesm2022/mesgflow-ui-kit-code-block.mjs +9 -5
  23. package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
  24. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +6 -4
  25. package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
  26. package/fesm2022/mesgflow-ui-kit-combobox.mjs +145 -65
  27. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
  28. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +4 -6
  29. package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
  30. package/fesm2022/mesgflow-ui-kit-core.mjs +441 -128
  31. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
  32. package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
  33. package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
  34. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +131 -10
  35. package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
  36. package/fesm2022/mesgflow-ui-kit-dialog.mjs +117 -34
  37. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
  38. package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
  39. package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
  40. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +3 -3
  41. package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
  42. package/fesm2022/mesgflow-ui-kit-field.mjs +53 -12
  43. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
  44. package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
  45. package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
  46. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +131 -0
  47. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
  48. package/fesm2022/mesgflow-ui-kit-icon.mjs +6 -1
  49. package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
  50. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
  51. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
  52. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
  53. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
  54. package/fesm2022/mesgflow-ui-kit-input.mjs +147 -4
  55. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
  56. package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
  57. package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
  58. package/fesm2022/mesgflow-ui-kit-link.mjs +2 -2
  59. package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
  60. package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
  61. package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
  62. package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
  63. package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
  64. package/fesm2022/mesgflow-ui-kit-menu.mjs +169 -5
  65. package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
  66. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
  67. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
  68. package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
  69. package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
  70. package/fesm2022/mesgflow-ui-kit-number-input.mjs +7 -4
  71. package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
  72. package/fesm2022/mesgflow-ui-kit-pagination.mjs +4 -3
  73. package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
  74. package/fesm2022/mesgflow-ui-kit-password-input.mjs +7 -2
  75. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
  76. package/fesm2022/mesgflow-ui-kit-popover.mjs +9 -49
  77. package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
  78. package/fesm2022/mesgflow-ui-kit-progress.mjs +162 -21
  79. package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
  80. package/fesm2022/mesgflow-ui-kit-radio.mjs +4 -6
  81. package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
  82. package/fesm2022/mesgflow-ui-kit-rating.mjs +2 -2
  83. package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
  84. package/fesm2022/mesgflow-ui-kit-search-input.mjs +9 -5
  85. package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
  86. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +12 -8
  87. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
  88. package/fesm2022/mesgflow-ui-kit-select.mjs +3 -2
  89. package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
  90. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +16 -13
  91. package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
  92. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +4 -3
  93. package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
  94. package/fesm2022/mesgflow-ui-kit-slider.mjs +250 -3
  95. package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
  96. package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
  97. package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
  98. package/fesm2022/mesgflow-ui-kit-spinner.mjs +42 -13
  99. package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
  100. package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
  101. package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
  102. package/fesm2022/mesgflow-ui-kit-splitter.mjs +210 -3
  103. package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
  104. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +11 -4
  105. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
  106. package/fesm2022/mesgflow-ui-kit-stepper.mjs +167 -60
  107. package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
  108. package/fesm2022/mesgflow-ui-kit-switch.mjs +2 -2
  109. package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
  110. package/fesm2022/mesgflow-ui-kit-table.mjs +16 -10
  111. package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
  112. package/fesm2022/mesgflow-ui-kit-tabs.mjs +410 -169
  113. package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
  114. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +7 -2
  115. package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
  116. package/fesm2022/mesgflow-ui-kit-theming.mjs +4 -4
  117. package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
  118. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +3 -3
  119. package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
  120. package/fesm2022/mesgflow-ui-kit-toast.mjs +113 -30
  121. package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
  122. package/fesm2022/mesgflow-ui-kit-toggle.mjs +3 -2
  123. package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
  124. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +4 -2
  125. package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
  126. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +73 -50
  127. package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
  128. package/fesm2022/mesgflow-ui-kit-tour.mjs +8 -20
  129. package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
  130. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
  131. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
  132. package/fesm2022/mesgflow-ui-kit-tree.mjs +1 -1
  133. package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
  134. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
  135. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
  136. package/fesm2022/mesgflow-ui-kit.mjs +92 -12836
  137. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
  138. package/package.json +87 -3
  139. package/schematics/collection.json +10 -0
  140. package/schematics/migration.json +10 -0
  141. package/schematics/migrations/v0-7.cjs +70 -0
  142. package/schematics/ng-add/index.cjs +234 -0
  143. package/schematics/ng-add/schema.json +43 -0
  144. package/tokens/color.css +96 -0
  145. package/tokens/controls.css +145 -0
  146. package/tokens/elevation.css +62 -6
  147. package/tokens/motion.css +304 -66
  148. package/tokens/radius.css +14 -0
  149. package/tokens.css +1 -0
  150. package/tokens.json +1583 -0
  151. package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
  152. package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
  153. package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
  154. package/types/mesgflow-ui-kit-button.d.ts +23 -38
  155. package/types/mesgflow-ui-kit-card.d.ts +26 -16
  156. package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
  157. package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
  158. package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
  159. package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
  160. package/types/mesgflow-ui-kit-core.d.ts +271 -21
  161. package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
  162. package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
  163. package/types/mesgflow-ui-kit-dialog.d.ts +29 -6
  164. package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
  165. package/types/mesgflow-ui-kit-field.d.ts +17 -8
  166. package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
  167. package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
  168. package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
  169. package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
  170. package/types/mesgflow-ui-kit-input.d.ts +64 -2
  171. package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
  172. package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
  173. package/types/mesgflow-ui-kit-mention.d.ts +59 -0
  174. package/types/mesgflow-ui-kit-menu.d.ts +41 -2
  175. package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
  176. package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
  177. package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
  178. package/types/mesgflow-ui-kit-password-input.d.ts +3 -1
  179. package/types/mesgflow-ui-kit-popover.d.ts +13 -5
  180. package/types/mesgflow-ui-kit-progress.d.ts +33 -12
  181. package/types/mesgflow-ui-kit-radio.d.ts +2 -2
  182. package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
  183. package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
  184. package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
  185. package/types/mesgflow-ui-kit-slider.d.ts +60 -1
  186. package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
  187. package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
  188. package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
  189. package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
  190. package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
  191. package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
  192. package/types/mesgflow-ui-kit-table.d.ts +2 -0
  193. package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
  194. package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
  195. package/types/mesgflow-ui-kit-toast.d.ts +48 -22
  196. package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
  197. package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
  198. package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
  199. package/types/mesgflow-ui-kit.d.ts +87 -5444
@@ -1,14 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
- import { model, input, output, inject, computed, signal, viewChild, effect, untracked, afterRenderEffect, Component, forwardRef } from '@angular/core';
2
+ import { model, input, output, inject, computed, signal, viewChild, effect, untracked, afterRenderEffect, Component, forwardRef, booleanAttribute } from '@angular/core';
3
3
  import { startOfDay, startOfMonth, subDays, startOfWeek, endOfWeek, endOfMonth, eachDayOfInterval, isSameMonth, isSameDay as isSameDay$1, isWithinInterval, addMonths, subMonths, addYears, subYears, format, parse, isValid, addDays } from 'date-fns';
4
4
  import { Button } from '@mesgflow/ui-kit/button';
5
5
  import { Icon } from '@mesgflow/ui-kit/icon';
6
- import { MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, cn, ValueAccessorBase } from '@mesgflow/ui-kit/core';
6
+ import { MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, cn, focusRecipe, ValueAccessorBase } from '@mesgflow/ui-kit/core';
7
7
  import * as i1 from '@angular/cdk/overlay';
8
8
  import { OverlayModule } from '@angular/cdk/overlay';
9
9
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
10
10
  import { Input, InputGroup, InputPrefix, InputSuffix } from '@mesgflow/ui-kit/input';
11
11
  import { Popover } from '@mesgflow/ui-kit/popover';
12
+ import { TimePicker } from '@mesgflow/ui-kit/time-picker';
12
13
 
13
14
  /**
14
15
  * Hazır tarih aralıkları — kurumsal panellerde tarih filtresinin %90'ı bunlar
@@ -216,15 +217,16 @@ class Calendar {
216
217
  const inRange = isRangeMode && isWithinRange(day, this.rangeStart(), effectiveEnd);
217
218
  const isSelectedSingle = !isRangeMode && isSameDay(day, this.selected());
218
219
  return cn('relative flex h-9 w-9 shrink-0 appearance-none items-center justify-center rounded-sm border-0 bg-transparent text-sm tabular-nums text-fg transition-colors duration-fast ease-emphasis ' +
219
- 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +
220
- 'disabled:pointer-events-none disabled:opacity-40', outside && 'text-fg-subtle', !isSelectedSingle && !isEdge && 'hover:bg-surface-alt', inRange && 'rounded-none bg-primary-tint', inRange && isStart && 'rounded-s-sm', inRange && isEnd && 'rounded-e-sm', (isSelectedSingle || isEdge) &&
220
+ focusRecipe +
221
+ ' ' +
222
+ 'disabled:pointer-events-none disabled:opacity-40', outside && 'text-fg-subtle', !isSelectedSingle && !isEdge && 'hover:bg-state-hover', inRange && 'rounded-none bg-primary-tint', inRange && isStart && 'rounded-s-sm', inRange && isEnd && 'rounded-e-sm', (isSelectedSingle || isEdge) &&
221
223
  'rounded-sm bg-primary-tint font-semibold text-primary-tint-fg', today &&
222
224
  !isSelectedSingle &&
223
225
  !isEdge &&
224
226
  "after:absolute after:bottom-1 after:h-1 after:w-1 after:rounded-full after:bg-accent after:content-['']");
225
227
  }
226
228
  cellClasses(active) {
227
- return cn('rounded-sm px-2 py-2.5 text-sm text-fg capitalize transition-colors duration-fast ease-emphasis', active ? 'bg-primary-tint font-semibold text-primary-tint-fg' : 'hover:bg-surface-alt');
229
+ return cn('rounded-sm px-2 py-2.5 text-sm text-fg capitalize transition-colors duration-fast ease-emphasis', active ? 'bg-primary-tint font-semibold text-primary-tint-fg' : 'hover:bg-state-hover');
228
230
  }
229
231
  monthLabel(m) {
230
232
  return format(m, 'LLL', { locale: this.effectiveLocale() });
@@ -423,13 +425,13 @@ class DatePicker extends ValueAccessorBase {
423
425
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: DatePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
424
426
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: DatePicker, isStandalone: true, selector: "mf-date-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { classAttribute: "block" }, providers: [
425
427
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePicker), multi: true },
426
- ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }], exportAs: ["mfDatePicker"], usesInheritance: true, ngImport: i0, template: "<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 start-2.5 -translate-y-1/2 text-fg-subtle\"\r\n >calendar_today</span\r\n >\r\n <input\r\n mfInput\r\n #inputEl\r\n type=\"text\"\r\n class=\"ps-9\"\r\n [class.pr-8]=\"!!value()\"\r\n [hasError]=\"hasError()\"\r\n [disabled]=\"disabled()\"\r\n [placeholder]=\"effectiveLabels().placeholder\"\r\n [value]=\"draft()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"absolute top-1/2 end-2.5 -translate-y-1/2 appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clear\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-auto\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <mf-calendar\r\n [(month)]=\"month\"\r\n [selected]=\"value()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n />\r\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-accent transition-colors duration-fast ease-emphasis hover:text-accent-strong\"\r\n (click)=\"pickToday()\"\r\n >\r\n {{ effectiveLabels().today }}\r\n </button>\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"clear()\"\r\n >\r\n {{ effectiveLabels().clear }}\r\n </button>\r\n }\r\n </div>\r\n </mf-popover>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "directive", type: Input, selector: "input[mfInput]:not([type=checkbox]):not([type=radio]), textarea[mfInput]", inputs: ["size", "hasError", "autosize", "minRows", "maxRows"] }, { kind: "component", type: Calendar, selector: "mf-calendar", inputs: ["month", "mode", "selected", "rangeStart", "rangeEnd", "hoverEnd", "min", "max", "locale", "labels", "navigable"], outputs: ["monthChange", "dayPick", "dayHover"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }] });
428
+ ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }], exportAs: ["mfDatePicker"], usesInheritance: true, ngImport: i0, template: "<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 start-2.5 -translate-y-1/2 text-fg-subtle\"\r\n >calendar_today</span\r\n >\r\n <input\r\n mfInput\r\n #inputEl\r\n type=\"text\"\r\n class=\"ps-9\"\r\n [class.pr-8]=\"!!value()\"\r\n [hasError]=\"hasError()\"\r\n [disabled]=\"disabled()\"\r\n [placeholder]=\"effectiveLabels().placeholder\"\r\n [value]=\"draft()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center justify-center absolute top-1/2 end-2.5 -translate-y-1/2 appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clear\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-auto\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <mf-calendar\r\n [(month)]=\"month\"\r\n [selected]=\"value()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n />\r\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-accent transition-colors duration-fast ease-emphasis hover:text-accent-strong\"\r\n (click)=\"pickToday()\"\r\n >\r\n {{ effectiveLabels().today }}\r\n </button>\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"clear()\"\r\n >\r\n {{ effectiveLabels().clear }}\r\n </button>\r\n }\r\n </div>\r\n </mf-popover>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "directive", type: Input, selector: "input[mfInput]:not([type=checkbox]):not([type=radio]), textarea[mfInput]", inputs: ["size", "hasError", "autosize", "minRows", "maxRows"] }, { kind: "component", type: Calendar, selector: "mf-calendar", inputs: ["month", "mode", "selected", "rangeStart", "rangeEnd", "hoverEnd", "min", "max", "locale", "labels", "navigable"], outputs: ["monthChange", "dayPick", "dayHover"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }] });
427
429
  }
428
430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: DatePicker, decorators: [{
429
431
  type: Component,
430
432
  args: [{ selector: 'mf-date-picker', exportAs: 'mfDatePicker', imports: [OverlayModule, Icon, Input, Calendar, Popover], host: { class: 'block' }, providers: [
431
433
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePicker), multi: true },
432
- ], template: "<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 start-2.5 -translate-y-1/2 text-fg-subtle\"\r\n >calendar_today</span\r\n >\r\n <input\r\n mfInput\r\n #inputEl\r\n type=\"text\"\r\n class=\"ps-9\"\r\n [class.pr-8]=\"!!value()\"\r\n [hasError]=\"hasError()\"\r\n [disabled]=\"disabled()\"\r\n [placeholder]=\"effectiveLabels().placeholder\"\r\n [value]=\"draft()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"absolute top-1/2 end-2.5 -translate-y-1/2 appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clear\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-auto\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <mf-calendar\r\n [(month)]=\"month\"\r\n [selected]=\"value()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n />\r\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-accent transition-colors duration-fast ease-emphasis hover:text-accent-strong\"\r\n (click)=\"pickToday()\"\r\n >\r\n {{ effectiveLabels().today }}\r\n </button>\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"clear()\"\r\n >\r\n {{ effectiveLabels().clear }}\r\n </button>\r\n }\r\n </div>\r\n </mf-popover>\r\n</div>\r\n" }]
434
+ ], template: "<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 start-2.5 -translate-y-1/2 text-fg-subtle\"\r\n >calendar_today</span\r\n >\r\n <input\r\n mfInput\r\n #inputEl\r\n type=\"text\"\r\n class=\"ps-9\"\r\n [class.pr-8]=\"!!value()\"\r\n [hasError]=\"hasError()\"\r\n [disabled]=\"disabled()\"\r\n [placeholder]=\"effectiveLabels().placeholder\"\r\n [value]=\"draft()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center justify-center absolute top-1/2 end-2.5 -translate-y-1/2 appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clear\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-auto\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <mf-calendar\r\n [(month)]=\"month\"\r\n [selected]=\"value()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n />\r\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-accent transition-colors duration-fast ease-emphasis hover:text-accent-strong\"\r\n (click)=\"pickToday()\"\r\n >\r\n {{ effectiveLabels().today }}\r\n </button>\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"clear()\"\r\n >\r\n {{ effectiveLabels().clear }}\r\n </button>\r\n }\r\n </div>\r\n </mf-popover>\r\n</div>\r\n" }]
433
435
  }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], inputEl: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }] } });
434
436
 
435
437
  const PRESETS = ['today', 'last7', 'last30', 'thisMonth'];
@@ -626,18 +628,137 @@ class DateRangePicker extends ValueAccessorBase {
626
628
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: DateRangePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
627
629
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: DateRangePicker, isStandalone: true, selector: "mf-date-range-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { classAttribute: "block" }, providers: [
628
630
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateRangePicker), multi: true },
629
- ], viewQueries: [{ propertyName: "startEl", first: true, predicate: ["startEl"], descendants: true, isSignal: true }], exportAs: ["mfDateRangePicker"], usesInheritance: true, ngImport: i0, template: "<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <mf-input-group [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n <span mfInputPrefix><span mfIcon [size]=\"18\">calendar_today</span></span>\r\n <input\r\n #startEl\r\n type=\"text\"\r\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"effectiveLabels().startDate\"\r\n [value]=\"startDraft()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveLabels().startDate\"\r\n (input)=\"onStartInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitStartDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n <span class=\"shrink-0 text-fg-subtle\" aria-hidden=\"true\">\u2013</span>\r\n <input\r\n type=\"text\"\r\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"effectiveLabels().endDate\"\r\n [value]=\"endDraft()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveLabels().endDate\"\r\n (input)=\"onEndInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitEndDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value().start || value().end) {\r\n <button\r\n mfInputSuffix\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clear\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n </mf-input-group>\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"none\"\r\n panelClass=\"flex w-auto\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <div class=\"flex flex-col gap-0.5 border-e border-border p-2\">\r\n @for (preset of presets; track preset) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n (click)=\"applyPreset(preset)\"\r\n >\r\n {{ presetLabel(preset) }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-2 p-3\">\r\n <div class=\"flex gap-4\">\r\n <mf-calendar\r\n mode=\"range\"\r\n [(month)]=\"monthLeft\"\r\n [rangeStart]=\"draftRange().start\"\r\n [rangeEnd]=\"draftRange().end\"\r\n [hoverEnd]=\"hoverEnd()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n (dayHover)=\"onDayHover($event)\"\r\n />\r\n <div class=\"hidden sm:block\">\r\n <mf-calendar\r\n mode=\"range\"\r\n [month]=\"monthRight()\"\r\n [navigable]=\"false\"\r\n [rangeStart]=\"draftRange().start\"\r\n [rangeEnd]=\"draftRange().end\"\r\n [hoverEnd]=\"hoverEnd()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n (dayHover)=\"onDayHover($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"flex items-center justify-end gap-2 border-t border-border pt-2\">\r\n <button mfButton tone=\"neutral\" appearance=\"text\" size=\"sm\" type=\"button\" (click)=\"clear()\">\r\n {{ effectiveLabels().clear }}\r\n </button>\r\n <button\r\n mfButton\r\n tone=\"primary\"\r\n appearance=\"filled\"\r\n size=\"sm\"\r\n type=\"button\"\r\n [disabled]=\"!draftRange().start\"\r\n (click)=\"apply()\"\r\n >\r\n {{ effectiveLabels().apply }}\r\n </button>\r\n </div>\r\n </div>\r\n </mf-popover>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "component", type: Button, selector: "button[mfButton], a[mfButton]", inputs: ["tone", "appearance", "size", "shape", "type", "loading", "iconStart", "iconEnd"], exportAs: ["mfButton"] }, { kind: "component", type: Calendar, selector: "mf-calendar", inputs: ["month", "mode", "selected", "rangeStart", "rangeEnd", "hoverEnd", "min", "max", "locale", "labels", "navigable"], outputs: ["monthChange", "dayPick", "dayHover"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }, { kind: "component", type: InputGroup, selector: "mf-input-group", inputs: ["size", "disabled", "hasError", "padded", "wrap"], exportAs: ["mfInputGroup"] }, { kind: "directive", type: InputPrefix, selector: "[mfInputPrefix]", inputs: ["addon"] }, { kind: "directive", type: InputSuffix, selector: "[mfInputSuffix]", inputs: ["addon"] }] });
631
+ ], viewQueries: [{ propertyName: "startEl", first: true, predicate: ["startEl"], descendants: true, isSignal: true }], exportAs: ["mfDateRangePicker"], usesInheritance: true, ngImport: i0, template: "<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <mf-input-group [hasError]=\"hasError()\" [disabled]=\"disabled()\">\n <span mfInputPrefix><span mfIcon [size]=\"18\">calendar_today</span></span>\n <input\n #startEl\n type=\"text\"\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\n [placeholder]=\"effectiveLabels().startDate\"\n [value]=\"startDraft()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"effectiveLabels().startDate\"\n (input)=\"onStartInput($any($event.target).value)\"\n (focus)=\"open.set(true)\"\n (keydown.enter)=\"commitStartDraft()\"\n (keydown.escape)=\"onEscape()\"\n />\n <span class=\"shrink-0 text-fg-subtle\" aria-hidden=\"true\">\u2013</span>\n <input\n type=\"text\"\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\n [placeholder]=\"effectiveLabels().endDate\"\n [value]=\"endDraft()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"effectiveLabels().endDate\"\n (input)=\"onEndInput($any($event.target).value)\"\n (focus)=\"open.set(true)\"\n (keydown.enter)=\"commitEndDraft()\"\n (keydown.escape)=\"onEscape()\"\n />\n @if (value().start || value().end) {\n <button\n mfInputSuffix\n type=\"button\"\n class=\"appearance-none border-0 bg-transparent p-0 transition-colors duration-fast ease-emphasis hover:text-fg\"\n [attr.aria-label]=\"effectiveLabels().clear\"\n (click)=\"clear()\"\n >\n <span mfIcon [size]=\"16\">close</span>\n </button>\n }\n </mf-input-group>\n\n <mf-popover\n [origin]=\"origin\"\n [open]=\"open()\"\n placement=\"bottom-start\"\n padding=\"none\"\n panelClass=\"flex w-auto\"\n (closed)=\"onEscape()\"\n >\n <div class=\"flex flex-col gap-0.5 border-e border-border p-2\">\n @for (preset of presets; track preset) {\n <button\n type=\"button\"\n class=\"appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-state-hover\"\n (click)=\"applyPreset(preset)\"\n >\n {{ presetLabel(preset) }}\n </button>\n }\n </div>\n\n <div class=\"flex flex-col gap-2 p-3\">\n <div class=\"flex gap-4\">\n <mf-calendar\n mode=\"range\"\n [(month)]=\"monthLeft\"\n [rangeStart]=\"draftRange().start\"\n [rangeEnd]=\"draftRange().end\"\n [hoverEnd]=\"hoverEnd()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [locale]=\"effectiveLocale()\"\n [labels]=\"effectiveLabels()\"\n (dayPick)=\"onDayPick($event)\"\n (dayHover)=\"onDayHover($event)\"\n />\n <div class=\"hidden sm:block\">\n <mf-calendar\n mode=\"range\"\n [month]=\"monthRight()\"\n [navigable]=\"false\"\n [rangeStart]=\"draftRange().start\"\n [rangeEnd]=\"draftRange().end\"\n [hoverEnd]=\"hoverEnd()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [locale]=\"effectiveLocale()\"\n [labels]=\"effectiveLabels()\"\n (dayPick)=\"onDayPick($event)\"\n (dayHover)=\"onDayHover($event)\"\n />\n </div>\n </div>\n <div class=\"flex items-center justify-end gap-2 border-t border-border pt-2\">\n <button mfButton tone=\"neutral\" appearance=\"text\" size=\"sm\" type=\"button\" (click)=\"clear()\">\n {{ effectiveLabels().clear }}\n </button>\n <button\n mfButton\n tone=\"primary\"\n appearance=\"filled\"\n size=\"sm\"\n type=\"button\"\n [disabled]=\"!draftRange().start\"\n (click)=\"apply()\"\n >\n {{ effectiveLabels().apply }}\n </button>\n </div>\n </div>\n </mf-popover>\n</div>\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "component", type: Button, selector: "button[mfButton], a[mfButton]", inputs: ["tone", "appearance", "size", "shape", "type", "loading", "iconStart", "iconEnd"], exportAs: ["mfButton"] }, { kind: "component", type: Calendar, selector: "mf-calendar", inputs: ["month", "mode", "selected", "rangeStart", "rangeEnd", "hoverEnd", "min", "max", "locale", "labels", "navigable"], outputs: ["monthChange", "dayPick", "dayHover"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }, { kind: "component", type: InputGroup, selector: "mf-input-group", inputs: ["size", "disabled", "hasError", "padded", "wrap"], exportAs: ["mfInputGroup"] }, { kind: "directive", type: InputPrefix, selector: "[mfInputPrefix]", inputs: ["addon"] }, { kind: "directive", type: InputSuffix, selector: "[mfInputSuffix]", inputs: ["addon"] }] });
630
632
  }
631
633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: DateRangePicker, decorators: [{
632
634
  type: Component,
633
635
  args: [{ selector: 'mf-date-range-picker', exportAs: 'mfDateRangePicker', imports: [OverlayModule, Icon, Button, Calendar, Popover, InputGroup, InputPrefix, InputSuffix], host: { class: 'block' }, providers: [
634
636
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateRangePicker), multi: true },
635
- ], template: "<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <mf-input-group [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n <span mfInputPrefix><span mfIcon [size]=\"18\">calendar_today</span></span>\r\n <input\r\n #startEl\r\n type=\"text\"\r\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"effectiveLabels().startDate\"\r\n [value]=\"startDraft()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveLabels().startDate\"\r\n (input)=\"onStartInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitStartDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n <span class=\"shrink-0 text-fg-subtle\" aria-hidden=\"true\">\u2013</span>\r\n <input\r\n type=\"text\"\r\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"effectiveLabels().endDate\"\r\n [value]=\"endDraft()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveLabels().endDate\"\r\n (input)=\"onEndInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitEndDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value().start || value().end) {\r\n <button\r\n mfInputSuffix\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clear\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n </mf-input-group>\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"none\"\r\n panelClass=\"flex w-auto\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <div class=\"flex flex-col gap-0.5 border-e border-border p-2\">\r\n @for (preset of presets; track preset) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n (click)=\"applyPreset(preset)\"\r\n >\r\n {{ presetLabel(preset) }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-2 p-3\">\r\n <div class=\"flex gap-4\">\r\n <mf-calendar\r\n mode=\"range\"\r\n [(month)]=\"monthLeft\"\r\n [rangeStart]=\"draftRange().start\"\r\n [rangeEnd]=\"draftRange().end\"\r\n [hoverEnd]=\"hoverEnd()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n (dayHover)=\"onDayHover($event)\"\r\n />\r\n <div class=\"hidden sm:block\">\r\n <mf-calendar\r\n mode=\"range\"\r\n [month]=\"monthRight()\"\r\n [navigable]=\"false\"\r\n [rangeStart]=\"draftRange().start\"\r\n [rangeEnd]=\"draftRange().end\"\r\n [hoverEnd]=\"hoverEnd()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n (dayHover)=\"onDayHover($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"flex items-center justify-end gap-2 border-t border-border pt-2\">\r\n <button mfButton tone=\"neutral\" appearance=\"text\" size=\"sm\" type=\"button\" (click)=\"clear()\">\r\n {{ effectiveLabels().clear }}\r\n </button>\r\n <button\r\n mfButton\r\n tone=\"primary\"\r\n appearance=\"filled\"\r\n size=\"sm\"\r\n type=\"button\"\r\n [disabled]=\"!draftRange().start\"\r\n (click)=\"apply()\"\r\n >\r\n {{ effectiveLabels().apply }}\r\n </button>\r\n </div>\r\n </div>\r\n </mf-popover>\r\n</div>\r\n" }]
637
+ ], template: "<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <mf-input-group [hasError]=\"hasError()\" [disabled]=\"disabled()\">\n <span mfInputPrefix><span mfIcon [size]=\"18\">calendar_today</span></span>\n <input\n #startEl\n type=\"text\"\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\n [placeholder]=\"effectiveLabels().startDate\"\n [value]=\"startDraft()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"effectiveLabels().startDate\"\n (input)=\"onStartInput($any($event.target).value)\"\n (focus)=\"open.set(true)\"\n (keydown.enter)=\"commitStartDraft()\"\n (keydown.escape)=\"onEscape()\"\n />\n <span class=\"shrink-0 text-fg-subtle\" aria-hidden=\"true\">\u2013</span>\n <input\n type=\"text\"\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\n [placeholder]=\"effectiveLabels().endDate\"\n [value]=\"endDraft()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"effectiveLabels().endDate\"\n (input)=\"onEndInput($any($event.target).value)\"\n (focus)=\"open.set(true)\"\n (keydown.enter)=\"commitEndDraft()\"\n (keydown.escape)=\"onEscape()\"\n />\n @if (value().start || value().end) {\n <button\n mfInputSuffix\n type=\"button\"\n class=\"appearance-none border-0 bg-transparent p-0 transition-colors duration-fast ease-emphasis hover:text-fg\"\n [attr.aria-label]=\"effectiveLabels().clear\"\n (click)=\"clear()\"\n >\n <span mfIcon [size]=\"16\">close</span>\n </button>\n }\n </mf-input-group>\n\n <mf-popover\n [origin]=\"origin\"\n [open]=\"open()\"\n placement=\"bottom-start\"\n padding=\"none\"\n panelClass=\"flex w-auto\"\n (closed)=\"onEscape()\"\n >\n <div class=\"flex flex-col gap-0.5 border-e border-border p-2\">\n @for (preset of presets; track preset) {\n <button\n type=\"button\"\n class=\"appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-state-hover\"\n (click)=\"applyPreset(preset)\"\n >\n {{ presetLabel(preset) }}\n </button>\n }\n </div>\n\n <div class=\"flex flex-col gap-2 p-3\">\n <div class=\"flex gap-4\">\n <mf-calendar\n mode=\"range\"\n [(month)]=\"monthLeft\"\n [rangeStart]=\"draftRange().start\"\n [rangeEnd]=\"draftRange().end\"\n [hoverEnd]=\"hoverEnd()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [locale]=\"effectiveLocale()\"\n [labels]=\"effectiveLabels()\"\n (dayPick)=\"onDayPick($event)\"\n (dayHover)=\"onDayHover($event)\"\n />\n <div class=\"hidden sm:block\">\n <mf-calendar\n mode=\"range\"\n [month]=\"monthRight()\"\n [navigable]=\"false\"\n [rangeStart]=\"draftRange().start\"\n [rangeEnd]=\"draftRange().end\"\n [hoverEnd]=\"hoverEnd()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [locale]=\"effectiveLocale()\"\n [labels]=\"effectiveLabels()\"\n (dayPick)=\"onDayPick($event)\"\n (dayHover)=\"onDayHover($event)\"\n />\n </div>\n </div>\n <div class=\"flex items-center justify-end gap-2 border-t border-border pt-2\">\n <button mfButton tone=\"neutral\" appearance=\"text\" size=\"sm\" type=\"button\" (click)=\"clear()\">\n {{ effectiveLabels().clear }}\n </button>\n <button\n mfButton\n tone=\"primary\"\n appearance=\"filled\"\n size=\"sm\"\n type=\"button\"\n [disabled]=\"!draftRange().start\"\n (click)=\"apply()\"\n >\n {{ effectiveLabels().apply }}\n </button>\n </div>\n </div>\n </mf-popover>\n</div>\n" }]
636
638
  }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], startEl: [{ type: i0.ViewChild, args: ['startEl', { isSignal: true }] }] } });
637
639
 
640
+ /**
641
+ * `<mf-date-time-picker [(value)]="publishAt" [min]="now" ariaLabel="Yayın zamanı" />`
642
+ *
643
+ * Tarih + saat — TEK bir `Date` değeri. Mevcut `mf-date-picker` ve
644
+ * `mf-time-picker`'ın kompozisyonu (aynı klavye/erişilebilirlik davranışı):
645
+ * - Tarih değişince saat korunur; saat önce seçilirse tarih bugüne yerleşir.
646
+ * - İki alan `role="group"` altında tek bir ad paylaşır.
647
+ * - Reactive Forms / Signal Forms ile `value` üzerinden çalışır.
648
+ */
649
+ class DateTimePicker extends ValueAccessorBase {
650
+ value = model(null, /* @ts-ignore */
651
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
652
+ min = input(null, /* @ts-ignore */
653
+ ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
654
+ max = input(null, /* @ts-ignore */
655
+ ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
656
+ minuteStep = input(5, /* @ts-ignore */
657
+ ...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
658
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
659
+ hasError = input(false, { ...(ngDevMode ? { debugName: "hasError" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
660
+ ariaLabel = input('', /* @ts-ignore */
661
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
662
+ labels = inject(MF_DATE_PICKER_LABELS);
663
+ dateLabel = computed(() => [this.ariaLabel(), this.labels().date].filter(Boolean).join(' — '), /* @ts-ignore */
664
+ ...(ngDevMode ? [{ debugName: "dateLabel" }] : /* istanbul ignore next */ []));
665
+ timeLabel = computed(() => [this.ariaLabel(), this.labels().time].filter(Boolean).join(' — '), /* @ts-ignore */
666
+ ...(ngDevMode ? [{ debugName: "timeLabel" }] : /* istanbul ignore next */ []));
667
+ time = computed(() => {
668
+ const v = this.value();
669
+ return v ? { hour: v.getHours(), minute: v.getMinutes() } : null;
670
+ }, /* @ts-ignore */
671
+ ...(ngDevMode ? [{ debugName: "time" }] : /* istanbul ignore next */ []));
672
+ writeValue(value) {
673
+ this.value.set(value);
674
+ }
675
+ onDate(date) {
676
+ if (!date)
677
+ return this.commit(null);
678
+ const next = new Date(date);
679
+ const time = this.time();
680
+ next.setHours(time?.hour ?? 0, time?.minute ?? 0, 0, 0);
681
+ this.commit(next);
682
+ }
683
+ onTime(time) {
684
+ const base = this.value() ? new Date(this.value()) : new Date();
685
+ if (time)
686
+ base.setHours(time.hour, time.minute, 0, 0);
687
+ else
688
+ base.setHours(0, 0, 0, 0);
689
+ this.commit(base);
690
+ }
691
+ commit(value) {
692
+ this.value.set(value);
693
+ this.onChange(value);
694
+ this.onTouched();
695
+ }
696
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: DateTimePicker, deps: null, target: i0.ɵɵFactoryTarget.Component });
697
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: DateTimePicker, isStandalone: true, selector: "mf-date-time-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "ariaLabel() || null" }, classAttribute: "inline-flex flex-wrap items-center gap-2" }, providers: [
698
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateTimePicker), multi: true },
699
+ ], exportAs: ["mfDateTimePicker"], usesInheritance: true, ngImport: i0, template: `
700
+ <mf-date-picker
701
+ class="min-w-40 flex-1"
702
+ [value]="value()"
703
+ (valueChange)="onDate($event)"
704
+ [min]="min()"
705
+ [max]="max()"
706
+ [disabled]="disabled()"
707
+ [hasError]="hasError()"
708
+ [ariaLabel]="dateLabel()"
709
+ />
710
+ <mf-time-picker
711
+ class="w-32"
712
+ [value]="time()"
713
+ (valueChange)="onTime($event)"
714
+ [minuteStep]="minuteStep()"
715
+ [disabled]="disabled()"
716
+ [hasError]="hasError()"
717
+ [ariaLabel]="timeLabel()"
718
+ />
719
+ `, isInline: true, dependencies: [{ kind: "component", type: DatePicker, selector: "mf-date-picker", inputs: ["value", "min", "max", "locale", "labels", "disabled", "hasError", "ariaLabel"], outputs: ["valueChange"], exportAs: ["mfDatePicker"] }, { kind: "component", type: TimePicker, selector: "mf-time-picker", inputs: ["value", "minuteStep", "placeholder", "disabled", "hasError", "ariaLabel", "clearLabel"], outputs: ["valueChange"], exportAs: ["mfTimePicker"] }] });
720
+ }
721
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: DateTimePicker, decorators: [{
722
+ type: Component,
723
+ args: [{
724
+ selector: 'mf-date-time-picker',
725
+ exportAs: 'mfDateTimePicker',
726
+ imports: [DatePicker, TimePicker],
727
+ host: {
728
+ role: 'group',
729
+ class: 'inline-flex flex-wrap items-center gap-2',
730
+ '[attr.aria-label]': 'ariaLabel() || null',
731
+ },
732
+ template: `
733
+ <mf-date-picker
734
+ class="min-w-40 flex-1"
735
+ [value]="value()"
736
+ (valueChange)="onDate($event)"
737
+ [min]="min()"
738
+ [max]="max()"
739
+ [disabled]="disabled()"
740
+ [hasError]="hasError()"
741
+ [ariaLabel]="dateLabel()"
742
+ />
743
+ <mf-time-picker
744
+ class="w-32"
745
+ [value]="time()"
746
+ (valueChange)="onTime($event)"
747
+ [minuteStep]="minuteStep()"
748
+ [disabled]="disabled()"
749
+ [hasError]="hasError()"
750
+ [ariaLabel]="timeLabel()"
751
+ />
752
+ `,
753
+ providers: [
754
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateTimePicker), multi: true },
755
+ ],
756
+ }]
757
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], minuteStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "minuteStep", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
758
+
638
759
  /**
639
760
  * Generated bundle index. Do not edit.
640
761
  */
641
762
 
642
- export { Calendar, DatePicker, DateRangePicker, buildMonthMatrix, dateRangeForPreset, formatDateInput, isCurrentMonth, isDayDisabled, isSameDay, isWithinRange, parseDateInput, shiftMonth, shiftYear };
763
+ export { Calendar, DatePicker, DateRangePicker, DateTimePicker, buildMonthMatrix, dateRangeForPreset, formatDateInput, isCurrentMonth, isDayDisabled, isSameDay, isWithinRange, parseDateInput, shiftMonth, shiftYear };
643
764
  //# sourceMappingURL=mesgflow-ui-kit-date-picker.mjs.map