@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,10 +1,11 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  import { ConnectedPosition } from '@angular/cdk/overlay';
3
- import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
3
+ import * as _angular_core from '@angular/core';
4
4
  import { InjectionToken, Signal, EnvironmentProviders } from '@angular/core';
5
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
5
6
  import { Locale } from 'date-fns/locale';
6
7
 
7
- /** clsx ile koşullu class'ları birleştirir, tailwind-merge ile çakışan utility'leri (ör. iki farklı `bg-*`) sonuncusu kazanacak şekilde çözer. */
8
+ /** clsx ile koşullu class'ları birleştirir, tailwind-merge ile çakışan utility'leri (ör. iki farklı `bg-*`) sonuncusu kazanacak şekilde çözer — kitin özel token'ları dahil. */
8
9
  declare function cn(...inputs: ClassValue[]): string;
9
10
 
10
11
  /**
@@ -22,13 +23,17 @@ declare function scrollFromInlineStart(el: Element): number;
22
23
 
23
24
  /**
24
25
  * Kit genelinde paylaşılan primitif tipler — her bileşenin kendi `size`/`tone`
25
- * union'ını elle tekrar tanımlamak yerine buradan türetir. Bkz. plan dosyası
26
- * "Faz 1a" — `tone` kelime dağarcığının (severity/tone/type karmaşasının)
27
- * birleştiği tek kaynak burası olacak.
26
+ * union'ını elle tekrar tanımlamak yerine buradan türetir.
28
27
  */
29
28
  type MfSize = 'sm' | 'md' | 'lg';
29
+ /**
30
+ * Genişletilmiş kontrol ölçeği — `xs` (yoğun tablo/araç çubuğu) ve `xl`
31
+ * (hero/pazarlama CTA). Yalnızca bu uçları GERÇEKTEN destekleyen bileşenler
32
+ * (Button, Input) kullanır; diğerleri `MfSize`'da kalır.
33
+ */
34
+ type MfControlSize = 'xs' | MfSize | 'xl';
30
35
  type MfTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'help';
31
- type MfPlacement = 'top' | 'bottom' | 'left' | 'right' | 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
36
+ type MfPlacement = 'top' | 'bottom' | 'left' | 'right' | 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end';
32
37
 
33
38
  /**
34
39
  * Paylaşılan class reçeteleri — kontrol/overlay/kapsayıcı bileşenlerinin
@@ -46,7 +51,7 @@ declare const disabledRecipe = "disabled:pointer-events-none disabled:opacity-50
46
51
  /** Input/Select/Combobox/NumberInput/... — tüm form kontrollerinin ortak kabuğu. `shadow-control` (bkz. elevation.css) — `shadow-1` DEĞİL, kontroller kapsayıcılarla AYNI yükselti basamağını paylaşmaz. */
47
52
  declare const controlSurface = "rounded-md border border-border bg-surface text-fg shadow-control transition-colors duration-fast ease-emphasis hover:border-border-strong focus-within:border-accent";
48
53
  /** `size: MfSize` eksenindeki TÜM kontrollerin ortak yükseklik/dolgu/font eşlemesi — bkz. `radius.css`'teki `--control-h-*` token'ları. */
49
- declare const controlSize: Record<MfSize, string>;
54
+ declare const controlSize: Record<MfControlSize, string>;
50
55
  /**
51
56
  * Popover/Menu/Select/Combobox/... overlay panellerinin ortak kabuğu — BORDER-
52
57
  * FIRST (2026-09 Deep Emerald geçişi, kullanıcı kararıyla eski "light modda
@@ -111,19 +116,78 @@ declare abstract class ValueAccessorBase<T> {
111
116
  }
112
117
 
113
118
  /**
114
- * `Popover`'ın (`PLACEMENTS`) ve `Tooltip`'in (`POSITIONS`) kendi dosyalarında
115
- * ayrı ayrı tuttuğu CDK `ConnectedPosition[]` çiftlerinin ORTAK geometri
116
- * üretici hâli — 8 yerleşimin (4 köşe + 4 kenar) hepsini tek bir fonksiyonla
117
- * üretir, `offset` çağıranın KENDİ mevcut değerini (Popover 4px, Tooltip 8px,
118
- * diğer overlay'ler 4-8px arası değişen) korumasını sağlar.
119
+ * Tüm bağlı overlay'lerin (Popover, Tooltip, HoverCard, Tour, ContextMenu ve
120
+ * Popover üstüne kurulan Select/Combobox/DatePicker/...) TEK konum üreticisi:
121
+ * tercih edilen yerleşim + taşmada karşı tarafa çevrilen (flip) yedek.
122
+ *
123
+ * Her pozisyon bir `panelClass` taşır — CDK hangisini SEÇERSE pane'e o
124
+ * eklenir: `mf-side-*` (giriş kayma yönü) + `mf-origin-*` (`transform-origin`),
125
+ * bkz. styles/tokens/motion.css. Böylece panel yukarı çevrildiğinde (flip) animasyon
126
+ * da tetikleyiciden dışarı doğru açılır (Radix
127
+ * `--radix-popper-transform-origin` eşleniği, abonelik gerekmeden).
119
128
  *
120
- * Bu modül BİLEREK henüz hiçbir bileşene BAĞLANMADI (Faz 0c) — `Popover`,
121
- * `Tooltip` ve 10 kopya `ConnectedPosition[]` içeren diğer bileşenlerin buna
122
- * geçişi Faz 1c'nin ("Overlay birleştirme") kapsamı: her biri kendi klavye/
123
- * vurgu mantığını koruyarak taşınmalı ve tarayıcıda tek tek doğrulanmalı —
124
- * bu fazın (yapısal taşıma) riskiyle karıştırılmamalı.
129
+ * `left`/`right` MANTIKSAL (`start`/`end`) — RTL'de CDK kendisi çevirir.
125
130
  */
126
131
  declare function overlayPositions(placement: MfPlacement, offset?: number): ConnectedPosition[];
132
+ /**
133
+ * İmleç konumuna açılan paneller (ContextMenu) — köşe tetikleyiciye yapışık,
134
+ * dört çeyrekte flip; origin her zaman imlece bakan köşe.
135
+ */
136
+ declare function pointerPositions(): ConnectedPosition[];
137
+
138
+ /** `prefers-reduced-motion: reduce` — SSR/jsdom'da (matchMedia yok) `false`. */
139
+ declare function prefersReducedMotion(): boolean;
140
+ /** CSS süre string'ini (`120ms`, `0.2s`) milisaniyeye çevirir; çözülemezse `null`. */
141
+ declare function parseCssDuration(raw: string): number | null;
142
+ /**
143
+ * Overlay/dialog/toast çıkış animasyonunun süresi — `--mf-duration-exit`
144
+ * (styles/tokens/motion.css) TEK kaynak. Eskiden `dialog.service.ts`,
145
+ * `popover.ts`, `toast.service.ts` her biri `EXIT_MS = 120` sabitini CSS'le
146
+ * ELLE eşitliyordu; token değişince JS kısa kalıp panel animasyonun ortasında
147
+ * kopuyordu. Reduced-motion'da `0` (panel anında kaldırılır).
148
+ */
149
+ declare function exitDurationMs(): number;
150
+
151
+ type SlidingIndicatorAxis = 'x' | 'y';
152
+ /**
153
+ * `<span mfSlidingIndicator [track]="selected()" class="-bottom-px h-0.5 bg-accent-fill"></span>`
154
+ *
155
+ * Kitin ortak "kayan gösterge" motoru — Tabs'ın çizgisi/hapı, SegmentedControl'ün
156
+ * parçası, TabNav'ın çizgisi ve hover-izleme vurgusu AYNI hareketi paylaşsın diye.
157
+ * Kapsayıcı (varsayılan `parentElement`, `relative` olmalı) içinde `target`'ı
158
+ * bulur, onun `offsetLeft/offsetWidth`'ine (x) ya da `offsetTop/offsetHeight`'ına
159
+ * (y) göre `transform` + boyut yazar.
160
+ *
161
+ * - **Hareket:** hedef bir öğeden BAŞKA bir öğeye geçince yay eğrisiyle kayar
162
+ * (`ease-spring`, `duration-slow`). İlk görünüm, hedefin yeniden belirmesi ve
163
+ * yeniden boyutlanma (ResizeObserver, font yüklenmesi) ANINDA — göstergenin
164
+ * 0'dan "uçarak" gelmesi olmaz. Opaklık her zaman yumuşak geçer.
165
+ * - **Çapraz eksen** tüketicinin sınıfıdır (`-bottom-px h-0.5`, `inset-y-0`…);
166
+ * motor yalnız ana ekseni yazar.
167
+ * - **RTL:** `left-0` + `offsetLeft` + `translateX` üçü de fiziksel — birlikte
168
+ * RTL'de doğru (bkz. scripts/rtl-rules.mjs allowlist).
169
+ * - `target` `null` ise gösterge son konumunda solar (hover bitişi).
170
+ * - Azaltılmış harekette `motion.css`'in global anahtarı geçişleri sıfırlar.
171
+ */
172
+ declare class SlidingIndicator {
173
+ readonly axis: _angular_core.InputSignal<SlidingIndicatorAxis>;
174
+ /** Kapsayıcı içinde çözülen CSS seçici, somut bir öğe ya da `null` (gizli). */
175
+ readonly target: _angular_core.InputSignal<string | HTMLElement | null>;
176
+ /** Herhangi bir değer — değişince (ör. seçim sinyali) hedef yeniden ölçülür. */
177
+ readonly track: _angular_core.InputSignal<unknown>;
178
+ /** Ölçüm kapsayıcısı; varsayılan `parentElement` (offsetParent olmalı). */
179
+ readonly container: _angular_core.InputSignal<HTMLElement | undefined>;
180
+ private readonly el;
181
+ private current;
182
+ constructor();
183
+ /** Dışarıdan yeniden ölçüm (ör. içerik değişti ama seçim değişmedi). */
184
+ refresh(animate?: boolean): void;
185
+ private box;
186
+ private resolve;
187
+ private update;
188
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlidingIndicator, never>;
189
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SlidingIndicator, "[mfSlidingIndicator]", ["mfSlidingIndicator"], { "axis": { "alias": "axis"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "track": { "alias": "track"; "required": false; "isSignal": true; }; "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
190
+ }
127
191
 
128
192
  /**
129
193
  * Kitin TÜM metinlerinin TEK şekli — `MF_LABELS` injection token'ının taşıdığı
@@ -171,6 +235,9 @@ interface MfDatePickerLabels {
171
235
  presetLast7: string;
172
236
  presetLast30: string;
173
237
  presetThisMonth: string;
238
+ /** DateTimePicker alt alanlarının adları. */
239
+ date: string;
240
+ time: string;
174
241
  }
175
242
  interface MfTimePickerLabels {
176
243
  placeholder: string;
@@ -283,6 +350,10 @@ interface MfBoxInputLabels {
283
350
  interface MfComboboxLabels {
284
351
  placeholder: string;
285
352
  noResults: string;
353
+ /** `creatable` satırı — `{query}` yazılan metinle değiştirilir. */
354
+ create: string;
355
+ /** Çoklu seçimde çip kaldırma düğmesi — `{label}` seçenek adıyla değiştirilir. */
356
+ remove: string;
286
357
  }
287
358
  interface MfSelectLabels {
288
359
  placeholder: string;
@@ -300,6 +371,11 @@ interface MfOtpInputLabels {
300
371
  }
301
372
  interface MfStepperLabels {
302
373
  ariaLabel: string;
374
+ /** İsteğe bağlı adım etiketi. */
375
+ optional: string;
376
+ /** Ekran okuyucu için adım durumu (ikon yalnızca görsel). */
377
+ completed: string;
378
+ error: string;
303
379
  }
304
380
  interface MfProgressLabels {
305
381
  ariaLabel: string;
@@ -385,6 +461,148 @@ interface MfChartLabels {
385
461
  showChart: string;
386
462
  category: string;
387
463
  }
464
+ /** StatTile değişim yönünün ekran okuyucu metni (ikon yalnızca görsel). */
465
+ interface MfStatTileLabels {
466
+ increase: string;
467
+ decrease: string;
468
+ noChange: string;
469
+ }
470
+ /** RangeSlider tutamaçlarının erişilebilir adları. */
471
+ interface MfSliderLabels {
472
+ minThumb: string;
473
+ maxThumb: string;
474
+ }
475
+ interface MfSplitButtonLabels {
476
+ /** Menü (▾) düğmesinin erişilebilir adı. */
477
+ moreActions: string;
478
+ }
479
+ interface MfFileUploadLabels {
480
+ uploading: string;
481
+ done: string;
482
+ failed: string;
483
+ queued: string;
484
+ retry: string;
485
+ cancel: string;
486
+ remove: string;
487
+ /** Liste başlığı — `{count}` dosya sayısıyla değiştirilir. */
488
+ files: string;
489
+ }
490
+ /**
491
+ * Sıralanabilir liste/Kanban klavye duyuruları. Yer tutucular: `{item}`,
492
+ * `{position}`, `{total}`, `{column}`.
493
+ */
494
+ interface MfSortableLabels {
495
+ instructions: string;
496
+ grabbed: string;
497
+ moved: string;
498
+ movedToColumn: string;
499
+ dropped: string;
500
+ cancelled: string;
501
+ dragHandle: string;
502
+ /** Kanban kartının `aria-roledescription`'ı. */
503
+ card: string;
504
+ }
505
+ interface MfCountdownLabels {
506
+ days: string;
507
+ hours: string;
508
+ minutes: string;
509
+ seconds: string;
510
+ /** Ekran okuyucu özeti — `{time}` kalan süre metniyle değiştirilir. */
511
+ remaining: string;
512
+ finished: string;
513
+ }
514
+ interface MfCarouselLabels {
515
+ previous: string;
516
+ next: string;
517
+ /** `{index}` / `{total}` */
518
+ slide: string;
519
+ pause: string;
520
+ play: string;
521
+ /** Nokta düğmeleri — `{index}` */
522
+ goTo: string;
523
+ carousel: string;
524
+ }
525
+ interface MfInlineEditLabels {
526
+ edit: string;
527
+ save: string;
528
+ cancel: string;
529
+ empty: string;
530
+ }
531
+ interface MfTransferListLabels {
532
+ available: string;
533
+ selected: string;
534
+ moveRight: string;
535
+ moveLeft: string;
536
+ moveAllRight: string;
537
+ moveAllLeft: string;
538
+ search: string;
539
+ /** `{selected}` / `{total}` */
540
+ count: string;
541
+ empty: string;
542
+ }
543
+ interface MfLightboxLabels {
544
+ close: string;
545
+ previous: string;
546
+ next: string;
547
+ zoomIn: string;
548
+ zoomOut: string;
549
+ /** `{index}` / `{total}` */
550
+ counter: string;
551
+ gallery: string;
552
+ }
553
+ interface MfNotificationCenterLabels {
554
+ title: string;
555
+ markAllRead: string;
556
+ empty: string;
557
+ emptyDescription: string;
558
+ unread: string;
559
+ /** Tetikleyici adı — `{count}` okunmamış sayısı. */
560
+ trigger: string;
561
+ viewAll: string;
562
+ }
563
+ interface MfAgendaLabels {
564
+ allDay: string;
565
+ empty: string;
566
+ today: string;
567
+ tomorrow: string;
568
+ }
569
+ interface MfMentionLabels {
570
+ suggestions: string;
571
+ noResults: string;
572
+ }
573
+ interface MfAuthCardLabels {
574
+ title: string;
575
+ description: string;
576
+ email: string;
577
+ emailPlaceholder: string;
578
+ password: string;
579
+ forgotPassword: string;
580
+ remember: string;
581
+ submit: string;
582
+ /** Sağlayıcı düğmeleriyle e-posta formu arasındaki ayırıcı. */
583
+ divider: string;
584
+ noAccount: string;
585
+ signUp: string;
586
+ emailRequired: string;
587
+ emailInvalid: string;
588
+ passwordRequired: string;
589
+ errorTitle: string;
590
+ }
591
+ interface MfInviteMembersLabels {
592
+ title: string;
593
+ description: string;
594
+ emails: string;
595
+ emailsPlaceholder: string;
596
+ role: string;
597
+ submit: string;
598
+ /** `{emails}` — geçersiz adresler virgülle. */
599
+ invalidEmails: string;
600
+ emailsRequired: string;
601
+ }
602
+ interface MfPanelGroupLabels {
603
+ /** Ayırıcı adı — `{index}` */
604
+ resize: string;
605
+ }
388
606
  interface MfLabels {
389
607
  common: MfCommonLabels;
390
608
  dialog: MfDialogLabels;
@@ -417,6 +635,22 @@ interface MfLabels {
417
635
  rating: MfRatingLabels;
418
636
  themeSwitcher: MfThemeSwitcherLabels;
419
637
  treeSelect: MfTreeSelectLabels;
638
+ statTile: MfStatTileLabels;
639
+ slider: MfSliderLabels;
640
+ splitButton: MfSplitButtonLabels;
641
+ fileUpload: MfFileUploadLabels;
642
+ sortable: MfSortableLabels;
643
+ countdown: MfCountdownLabels;
644
+ carousel: MfCarouselLabels;
645
+ inlineEdit: MfInlineEditLabels;
646
+ transferList: MfTransferListLabels;
647
+ lightbox: MfLightboxLabels;
648
+ notificationCenter: MfNotificationCenterLabels;
649
+ agenda: MfAgendaLabels;
650
+ mention: MfMentionLabels;
651
+ panelGroup: MfPanelGroupLabels;
652
+ authCard: MfAuthCardLabels;
653
+ inviteMembers: MfInviteMembersLabels;
420
654
  }
421
655
  /** `provideMesgflowUi({ labels })`'ın kabul ettiği şekil — her alt-alan opsiyonel, verilmeyen her yaprak `mfLabelsEn`'den gelir. */
422
656
  type DeepPartial<T> = T extends object ? {
@@ -475,6 +709,22 @@ declare const MF_TOUR_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfTour
475
709
  declare const MF_RATING_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfRatingLabels>>;
476
710
  declare const MF_THEME_SWITCHER_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfThemeSwitcherLabels>>;
477
711
  declare const MF_TREE_SELECT_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfTreeSelectLabels>>;
712
+ declare const MF_STAT_TILE_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfStatTileLabels>>;
713
+ declare const MF_SLIDER_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfSliderLabels>>;
714
+ declare const MF_SPLIT_BUTTON_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfSplitButtonLabels>>;
715
+ declare const MF_FILE_UPLOAD_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfFileUploadLabels>>;
716
+ declare const MF_SORTABLE_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfSortableLabels>>;
717
+ declare const MF_COUNTDOWN_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfCountdownLabels>>;
718
+ declare const MF_CAROUSEL_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfCarouselLabels>>;
719
+ declare const MF_INLINE_EDIT_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfInlineEditLabels>>;
720
+ declare const MF_TRANSFER_LIST_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfTransferListLabels>>;
721
+ declare const MF_LIGHTBOX_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfLightboxLabels>>;
722
+ declare const MF_NOTIFICATION_CENTER_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfNotificationCenterLabels>>;
723
+ declare const MF_AGENDA_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfAgendaLabels>>;
724
+ declare const MF_MENTION_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfMentionLabels>>;
725
+ declare const MF_PANEL_GROUP_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfPanelGroupLabels>>;
726
+ declare const MF_AUTH_CARD_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfAuthCardLabels>>;
727
+ declare const MF_INVITE_MEMBERS_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfInviteMembersLabels>>;
478
728
 
479
729
  interface ProvideMesgflowUiOptions {
480
730
  /**
@@ -485,8 +735,8 @@ interface ProvideMesgflowUiOptions {
485
735
  * `MfLabels` nesnesi sağlamak ZORUNLU değil.
486
736
  */
487
737
  labels?: DeepPartial<MfLabels> | Signal<DeepPartial<MfLabels>>;
488
- /** Calendar/DatePicker ay/gün adları — varsayılan `date-fns/locale`'in `enUS`'u. */
489
- dateLocale?: Locale;
738
+ /** Calendar/DatePicker ay/gün adları — varsayılan `date-fns/locale`'in `enUS`'u. Dil değişince canlı güncellenmesi için bir `Signal` da verilebilir. */
739
+ dateLocale?: Locale | Signal<Locale>;
490
740
  }
491
741
  /**
492
742
  * `app.config.ts`'in `providers` dizisine eklenir — `MF_LABELS`/`MF_DATE_LOCALE`'ı
@@ -504,5 +754,5 @@ interface ProvideMesgflowUiOptions {
504
754
  */
505
755
  declare function provideMesgflowUi(options?: ProvideMesgflowUiOptions): EnvironmentProviders;
506
756
 
507
- export { MF_ALERT_LABELS, MF_AVATAR_GROUP_LABELS, MF_BOX_INPUT_LABELS, MF_BREADCRUMB_LABELS, MF_CHARACTER_COUNT_LABELS, MF_CHART_LABELS, MF_CHIP_LABELS, MF_COLOR_PICKER_LABELS, MF_COMBOBOX_LABELS, MF_COMMAND_LABELS, MF_COMMON_LABELS, MF_COPY_LABELS, MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, MF_DIALOG_LABELS, MF_DROPZONE_LABELS, MF_LABELS, MF_OTP_INPUT_LABELS, MF_PAGINATION_LABELS, MF_PASSWORD_INPUT_LABELS, MF_PROGRESS_LABELS, MF_RATING_LABELS, MF_SEARCH_INPUT_LABELS, MF_SELECT_LABELS, MF_SIDEBAR_LABELS, MF_STEPPER_LABELS, MF_TABLE_LABELS, MF_TABS_LABELS, MF_THEME_SWITCHER_LABELS, MF_TIME_PICKER_LABELS, MF_TOAST_LABELS, MF_TOUR_LABELS, MF_TREE_SELECT_LABELS, ValueAccessorBase, cn, containerSurface, controlSize, controlSurface, disabledRecipe, errorRecipe, focusRecipe, glassSurface, inlineStartRatio, isRtl, mergeLabels, mfLabelsEn, nextId, overlayPositions, overlaySurface, pressRecipe, provideMesgflowUi, scrollFromInlineStart, transitionRecipe };
508
- export type { DeepPartial, MfAlertLabels, MfAvatarGroupLabels, MfBoxInputLabels, MfBreadcrumbLabels, MfCharacterCountLabels, MfChartLabels, MfChipLabels, MfColorPickerLabels, MfComboboxLabels, MfCommandLabels, MfCommonLabels, MfCopyLabels, MfDatePickerLabels, MfDialogLabels, MfDropzoneLabels, MfLabels, MfOtpInputLabels, MfPaginationLabels, MfPasswordInputLabels, MfPlacement, MfProgressLabels, MfRatingLabels, MfSearchInputLabels, MfSelectLabels, MfSidebarLabels, MfSize, MfStepperLabels, MfTableFilterLabels, MfTableFilterOperatorLabels, MfTableLabels, MfTablePaginationLabels, MfTabsLabels, MfThemeSwitcherLabels, MfTimePickerLabels, MfToastLabels, MfTone, MfTourLabels, MfTreeSelectLabels, ProvideMesgflowUiOptions };
757
+ export { MF_AGENDA_LABELS, MF_ALERT_LABELS, MF_AUTH_CARD_LABELS, MF_AVATAR_GROUP_LABELS, MF_BOX_INPUT_LABELS, MF_BREADCRUMB_LABELS, MF_CAROUSEL_LABELS, MF_CHARACTER_COUNT_LABELS, MF_CHART_LABELS, MF_CHIP_LABELS, MF_COLOR_PICKER_LABELS, MF_COMBOBOX_LABELS, MF_COMMAND_LABELS, MF_COMMON_LABELS, MF_COPY_LABELS, MF_COUNTDOWN_LABELS, MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, MF_DIALOG_LABELS, MF_DROPZONE_LABELS, MF_FILE_UPLOAD_LABELS, MF_INLINE_EDIT_LABELS, MF_INVITE_MEMBERS_LABELS, MF_LABELS, MF_LIGHTBOX_LABELS, MF_MENTION_LABELS, MF_NOTIFICATION_CENTER_LABELS, MF_OTP_INPUT_LABELS, MF_PAGINATION_LABELS, MF_PANEL_GROUP_LABELS, MF_PASSWORD_INPUT_LABELS, MF_PROGRESS_LABELS, MF_RATING_LABELS, MF_SEARCH_INPUT_LABELS, MF_SELECT_LABELS, MF_SIDEBAR_LABELS, MF_SLIDER_LABELS, MF_SORTABLE_LABELS, MF_SPLIT_BUTTON_LABELS, MF_STAT_TILE_LABELS, MF_STEPPER_LABELS, MF_TABLE_LABELS, MF_TABS_LABELS, MF_THEME_SWITCHER_LABELS, MF_TIME_PICKER_LABELS, MF_TOAST_LABELS, MF_TOUR_LABELS, MF_TRANSFER_LIST_LABELS, MF_TREE_SELECT_LABELS, SlidingIndicator, ValueAccessorBase, cn, containerSurface, controlSize, controlSurface, disabledRecipe, errorRecipe, exitDurationMs, focusRecipe, glassSurface, inlineStartRatio, isRtl, mergeLabels, mfLabelsEn, nextId, overlayPositions, overlaySurface, parseCssDuration, pointerPositions, prefersReducedMotion, pressRecipe, provideMesgflowUi, scrollFromInlineStart, transitionRecipe };
758
+ export type { DeepPartial, MfAgendaLabels, MfAlertLabels, MfAuthCardLabels, MfAvatarGroupLabels, MfBoxInputLabels, MfBreadcrumbLabels, MfCarouselLabels, MfCharacterCountLabels, MfChartLabels, MfChipLabels, MfColorPickerLabels, MfComboboxLabels, MfCommandLabels, MfCommonLabels, MfControlSize, MfCopyLabels, MfCountdownLabels, MfDatePickerLabels, MfDialogLabels, MfDropzoneLabels, MfFileUploadLabels, MfInlineEditLabels, MfInviteMembersLabels, MfLabels, MfLightboxLabels, MfMentionLabels, MfNotificationCenterLabels, MfOtpInputLabels, MfPaginationLabels, MfPanelGroupLabels, MfPasswordInputLabels, MfPlacement, MfProgressLabels, MfRatingLabels, MfSearchInputLabels, MfSelectLabels, MfSidebarLabels, MfSize, MfSliderLabels, MfSortableLabels, MfSplitButtonLabels, MfStatTileLabels, MfStepperLabels, MfTableFilterLabels, MfTableFilterOperatorLabels, MfTableLabels, MfTablePaginationLabels, MfTabsLabels, MfThemeSwitcherLabels, MfTimePickerLabels, MfToastLabels, MfTone, MfTourLabels, MfTransferListLabels, MfTreeSelectLabels, ProvideMesgflowUiOptions, SlidingIndicatorAxis };
@@ -0,0 +1,47 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ interface CountdownParts {
4
+ days: number;
5
+ hours: number;
6
+ minutes: number;
7
+ seconds: number;
8
+ total: number;
9
+ }
10
+ /** Kalan milisaniyeyi gün/saat/dakika/saniye parçalarına böler. */
11
+ declare function countdownParts(ms: number): CountdownParts;
12
+ /**
13
+ * `<mf-countdown [to]="launchAt" (finished)="reveal()" />`
14
+ *
15
+ * Hedef zamana geri sayım — kampanya, açık artırma, oturum süresi.
16
+ * - `appearance="segments"` (varsayılan): kutucuklar; `inline`: tek satır metin.
17
+ * - `role="timer"` + ekran okuyucu özeti yalnızca DAKİKADA bir güncellenir
18
+ * (her saniye duyuru yapılırsa okuyucu susmaz).
19
+ * - Rakamlar `tabular-nums` — saniye değişirken genişlik titremez.
20
+ * - Sıfıra ulaşınca `finished` bir kez yayar.
21
+ */
22
+ declare class Countdown {
23
+ readonly to: _angular_core.InputSignal<number | Date>;
24
+ readonly appearance: _angular_core.InputSignal<"segments" | "inline">;
25
+ /** Gün sıfırsa gün kutusunu gizle. */
26
+ readonly hideEmptyDays: _angular_core.InputSignalWithTransform<boolean, unknown>;
27
+ readonly finished: _angular_core.OutputEmitterRef<void>;
28
+ private readonly labels;
29
+ private readonly now;
30
+ private fired;
31
+ protected readonly parts: _angular_core.Signal<CountdownParts>;
32
+ protected readonly units: _angular_core.Signal<{
33
+ key: string;
34
+ value: number;
35
+ label: string;
36
+ }[]>;
37
+ protected readonly inlineText: _angular_core.Signal<string>;
38
+ /** Dakika çözünürlüğünde özet — her saniye DEĞİŞMEZ. */
39
+ protected readonly summary: _angular_core.Signal<string>;
40
+ constructor();
41
+ protected pad(n: number): string;
42
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Countdown, never>;
43
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Countdown, "mf-countdown", ["mfCountdown"], { "to": { "alias": "to"; "required": true; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "hideEmptyDays": { "alias": "hideEmptyDays"; "required": false; "isSignal": true; }; }, { "finished": "finished"; }, never, never, true, never>;
44
+ }
45
+
46
+ export { Countdown, countdownParts };
47
+ export type { CountdownParts };
@@ -2,6 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { Locale } from 'date-fns';
3
3
  import { MfDatePickerLabels, ValueAccessorBase } from '@mesgflow/ui-kit/core';
4
4
  import { ControlValueAccessor } from '@angular/forms';
5
+ import { TimeValue } from '@mesgflow/ui-kit/time-picker';
5
6
 
6
7
  interface DateRange {
7
8
  start: Date | null;
@@ -211,5 +212,34 @@ declare class DateRangePicker extends ValueAccessorBase<DateRange> implements Co
211
212
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateRangePicker, "mf-date-range-picker", ["mfDateRangePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
212
213
  }
213
214
 
214
- export { Calendar, DatePicker, DateRangePicker, buildMonthMatrix, dateRangeForPreset, formatDateInput, isCurrentMonth, isDayDisabled, isSameDay, isWithinRange, parseDateInput, shiftMonth, shiftYear };
215
+ /**
216
+ * `<mf-date-time-picker [(value)]="publishAt" [min]="now" ariaLabel="Yayın zamanı" />`
217
+ *
218
+ * Tarih + saat — TEK bir `Date` değeri. Mevcut `mf-date-picker` ve
219
+ * `mf-time-picker`'ın kompozisyonu (aynı klavye/erişilebilirlik davranışı):
220
+ * - Tarih değişince saat korunur; saat önce seçilirse tarih bugüne yerleşir.
221
+ * - İki alan `role="group"` altında tek bir ad paylaşır.
222
+ * - Reactive Forms / Signal Forms ile `value` üzerinden çalışır.
223
+ */
224
+ declare class DateTimePicker extends ValueAccessorBase<Date | null> implements ControlValueAccessor {
225
+ readonly value: _angular_core.ModelSignal<Date | null>;
226
+ readonly min: _angular_core.InputSignal<Date | null>;
227
+ readonly max: _angular_core.InputSignal<Date | null>;
228
+ readonly minuteStep: _angular_core.InputSignal<number>;
229
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
230
+ readonly hasError: _angular_core.InputSignalWithTransform<boolean, unknown>;
231
+ readonly ariaLabel: _angular_core.InputSignal<string>;
232
+ private readonly labels;
233
+ protected readonly dateLabel: _angular_core.Signal<string>;
234
+ protected readonly timeLabel: _angular_core.Signal<string>;
235
+ protected readonly time: _angular_core.Signal<TimeValue | null>;
236
+ writeValue(value: Date | null): void;
237
+ protected onDate(date: Date | null): void;
238
+ protected onTime(time: TimeValue | null): void;
239
+ private commit;
240
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateTimePicker, never>;
241
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateTimePicker, "mf-date-time-picker", ["mfDateTimePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
242
+ }
243
+
244
+ export { Calendar, DatePicker, DateRangePicker, DateTimePicker, buildMonthMatrix, dateRangeForPreset, formatDateInput, isCurrentMonth, isDayDisabled, isSameDay, isWithinRange, parseDateInput, shiftMonth, shiftYear };
215
245
  export type { DateRange, DateRangePresetId };
@@ -1,4 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
2
3
  import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
3
4
  import * as i1 from '@angular/cdk/drag-drop';
4
5
  import { DialogRef } from '@angular/cdk/dialog';
@@ -7,8 +8,14 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
7
8
  import { VariantProps } from 'class-variance-authority';
8
9
 
9
10
  type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
10
- /** `'center'` (varsayılan, klasik modal) ya da `'right'` (sağdan açılan drawer) — bkz. `DialogService.openDrawer()`. */
11
- type DialogPlacement = 'center' | 'right';
11
+ /**
12
+ * `'center'` (varsayılan, klasik modal) ya da bir kenar çekmecesi. `start`/`end`
13
+ * MANTIKSAL (RTL'de çevrilir), `left`/`right` fiziksel; `top`/`bottom` tam
14
+ * genişlikte üst/alt panel. Bkz. `DialogService.openDrawer()` ve `<mf-drawer>`.
15
+ */
16
+ type DialogPlacement = 'center' | 'start' | 'end' | 'left' | 'right' | 'top' | 'bottom';
17
+ /** Çekmecenin FİZİKSEL kenarı — yerleşim + yazı yönünden türetilir. */
18
+ type DrawerSide = 'left' | 'right' | 'top' | 'bottom';
12
19
  interface DialogOptions<D> {
13
20
  data?: D;
14
21
  size?: DialogSize;
@@ -20,6 +27,12 @@ interface DialogOptions<D> {
20
27
  draggable?: boolean;
21
28
  /** Sağ-alt köşede serbest boyutlandırma tutamacı gösterir. Drawer'da etkisiz. */
22
29
  resizable?: boolean;
30
+ /**
31
+ * < 640px'te panel alttan açılan bir sheet'e dönüşsün mü. Varsayılan `true`
32
+ * (orta ve yan paneller); `top`/`bottom` zaten tam genişlik olduğu için etkisiz.
33
+ * Mobilde de soldan açılması gereken bir gezinme çekmecesi için `false`.
34
+ */
35
+ sheetOnMobile?: boolean;
23
36
  /** `true` ise ESC/backdrop tıklaması kapatmaz (programatik `dialogRef.close()` yine çalışır). */
24
37
  disableClose?: boolean;
25
38
  ariaLabel?: string;
@@ -91,6 +104,8 @@ interface DialogCustomSize {
91
104
  declare class DialogSurface {
92
105
  readonly size: _angular_core.WritableSignal<DialogSize>;
93
106
  readonly placement: _angular_core.WritableSignal<DialogPlacement>;
107
+ /** Çekmecenin fiziksel kenarı (`center`'da `null`) — `DialogService` yön bilgisiyle çözer. */
108
+ readonly side: _angular_core.WritableSignal<DrawerSide | null>;
94
109
  readonly maximizable: _angular_core.WritableSignal<boolean>;
95
110
  readonly draggable: _angular_core.WritableSignal<boolean>;
96
111
  readonly resizable: _angular_core.WritableSignal<boolean>;
@@ -231,7 +246,7 @@ declare class DialogResizeHandle {
231
246
  * Kapanış animasyonu: CDK'nın `DialogRef.close()`'u `overlayRef.dispose()`'u SENKRON
232
247
  * çağırıyor, bir "kapanıyor" olayı/kancası yok. `closePredicate` bunun için bilinçli
233
248
  * bir kaçamak — `false` döndürmek kapanmayı iptal ediyor: ilk çağrıda `surface.closing`'i
234
- * `true` yapıp gerçek kapanmayı `EXIT_MS` geciktiriyoruz (panel bu sürede `Dialog`'un
249
+ * `true` yapıp gerçek kapanmayı `exitDurationMs()` kadar geciktiriyoruz (panel bu sürede `Dialog`'un
235
250
  * kendi reaktif `animate-dialog-out`/`animate-sheet-out`/`animate-drawer-out` class'ıyla
236
251
  * görsel olarak kapanır), ikinci çağrıda (zaten `closing()===true`) gerçek `dispose()`'a
237
252
  * izin veriyoruz. ESC/backdrop/programatik `dialogRef.close(...)` HEPSİ bu predicate'ten
@@ -249,9 +264,14 @@ declare class DialogService {
249
264
  private readonly injector;
250
265
  private readonly breakpointObserver;
251
266
  private readonly labels;
267
+ private readonly dir;
252
268
  /** `ref` başına `DialogSurface` — tüketicinin kendi URL senkronizasyon mantığı, kirli-form durumunu PROAKTİF sormak için kullanabilir (kendi `closePredicate`'inin async akışıyla yarışmamak için). */
253
269
  private readonly surfaces;
254
- open<R = void, D = undefined, C = unknown>(component: ComponentType<C>, options?: DialogOptions<D>): DialogRef<R, C>;
270
+ /**
271
+ * Bir component'i ya da bir `TemplateRef'i açar (şablon yolu `<mf-drawer>` gibi
272
+ * bildirimsel sarmalayıcılar içindir — şablonun injector'ı da `DialogSurface'i görür).
273
+ */
274
+ open<R = void, D = undefined, C = unknown>(component: ComponentType<C> | TemplateRef<C>, options?: DialogOptions<D>): DialogRef<R, C>;
255
275
  /**
256
276
  * Kayıt oluştur/düzenle formlarının TEK açılış noktası — sağdan drawer.
257
277
  * `maximizable` bilerek zorla kapatılıyor: drawer zaten tam yükseklik, büyütme
@@ -261,7 +281,9 @@ declare class DialogService {
261
281
  * genişlikte açılmalı. İstisna: iki sütunlu bir form (sol dikey ray + sağ
262
282
  * panel gibi) `md` içine sığmazsa `xl` (960px) geçilebilir.
263
283
  */
264
- openDrawer<R = void, D = undefined, C = unknown>(component: ComponentType<C>, options?: Omit<DialogOptions<D>, 'placement'>): DialogRef<R, C>;
284
+ openDrawer<R = void, D = undefined, C = unknown>(component: ComponentType<C>, options?: Omit<DialogOptions<D>, 'placement'> & {
285
+ placement?: Exclude<DialogPlacement, 'center'>;
286
+ }): DialogRef<R, C>;
265
287
  /** `Promise<boolean>` döner — `if (await dialog.confirm(...))` çağıran taraf için `.subscribe()` zincirinden daha sade. */
266
288
  confirm(data: ConfirmDialogData): Promise<boolean>;
267
289
  /**
@@ -335,8 +357,9 @@ declare class DialogService {
335
357
  declare const dialogVariants: (props?: ({
336
358
  size?: "sm" | "md" | "lg" | "xl" | "full" | null | undefined;
337
359
  state?: "normal" | "maximized" | "sheet" | "drawer" | null | undefined;
360
+ side?: "left" | "right" | "top" | "bottom" | "none" | null | undefined;
338
361
  } & class_variance_authority_types.ClassProp) | undefined) => string;
339
362
  type DialogVariants = VariantProps<typeof dialogVariants>;
340
363
 
341
364
  export { ConfirmDialog, Dialog, DialogResizeHandle, DialogService, DialogSurface, dialogVariants };
342
- export type { ConfirmDialogData, ConfirmTone, DialogCustomSize, DialogOptions, DialogPlacement, DialogSize, DialogVariants };
365
+ export type { ConfirmDialogData, ConfirmTone, DialogCustomSize, DialogOptions, DialogPlacement, DialogSize, DialogVariants, DrawerSide };
@@ -0,0 +1,45 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { DialogPlacement } from '@mesgflow/ui-kit/dialog';
3
+
4
+ type DrawerPlacement = Exclude<DialogPlacement, 'center'>;
5
+ /**
6
+ * `<mf-drawer [(open)]="filtersOpen" title="Filtreler" placement="end" size="sm">…</mf-drawer>`
7
+ *
8
+ * Bildirimsel çekmece (sheet) — `DialogService.openDrawer()`'ın şablon
9
+ * sürümü: içerik bir component yazmadan doğrudan şablonda durur, açık/kapalı
10
+ * durumu `open` modeliyle iki yönlü bağlanır.
11
+ *
12
+ * - `placement`: `start` / `end` (mantıksal, RTL'de çevrilir), `left` / `right`,
13
+ * `top` / `bottom`. Her kenar kendi kayma animasyonuyla açılır.
14
+ * - Dialog altyapısının TÜM davranışı: odak tuzağı + geri dönüş, Escape,
15
+ * backdrop tıklaması, çıkış animasyonu, kirli-form koruması, cam yüzey.
16
+ * - `<div drawer-footer>` slotu sabit altbilgiye gider (Kaydet/İptal).
17
+ * - `sheetOnMobile="false"`: mobilde de kenardan açılır (gezinme çekmeceleri).
18
+ */
19
+ declare class Drawer {
20
+ readonly open: _angular_core.ModelSignal<boolean>;
21
+ readonly title: _angular_core.InputSignal<string>;
22
+ readonly subtitle: _angular_core.InputSignal<string>;
23
+ readonly icon: _angular_core.InputSignal<string>;
24
+ readonly placement: _angular_core.InputSignal<DrawerPlacement>;
25
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl">;
26
+ /** `true` ise Escape/backdrop kapatmaz — yalnızca programatik `open.set(false)`. */
27
+ readonly disableClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
28
+ readonly sheetOnMobile: _angular_core.InputSignalWithTransform<boolean, unknown>;
29
+ /** Görünür başlık yoksa ekran okuyucu için ad. */
30
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
31
+ /** Kapanış tamamlandığında (animasyon dahil). */
32
+ readonly closed: _angular_core.OutputEmitterRef<void>;
33
+ private readonly dialog;
34
+ private readonly panel;
35
+ private ref;
36
+ constructor();
37
+ /** Programatik kapatma — `open.set(false)` ile eşdeğer. */
38
+ hide(): void;
39
+ private show;
40
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Drawer, never>;
41
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Drawer, "mf-drawer", ["mfDrawer"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disableClose": { "alias": "disableClose"; "required": false; "isSignal": true; }; "sheetOnMobile": { "alias": "sheetOnMobile"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*", "[drawer-footer]"], true, never>;
42
+ }
43
+
44
+ export { Drawer };
45
+ export type { DrawerPlacement };