@mesgflow/ui-kit 0.6.0 → 0.8.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 (227) hide show
  1. package/README.md +56 -5
  2. package/fesm2022/mesgflow-ui-kit-accordion.mjs +9 -8
  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-alert.mjs +3 -3
  7. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
  8. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
  9. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +3 -3
  10. package/fesm2022/mesgflow-ui-kit-avatar.mjs +3 -3
  11. package/fesm2022/mesgflow-ui-kit-badge.mjs +3 -3
  12. package/fesm2022/mesgflow-ui-kit-banner.mjs +3 -3
  13. package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
  14. package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
  15. package/fesm2022/mesgflow-ui-kit-box-input.mjs +4 -4
  16. package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
  17. package/fesm2022/mesgflow-ui-kit-brand.mjs +3 -3
  18. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +3 -3
  19. package/fesm2022/mesgflow-ui-kit-button-group.mjs +3 -3
  20. package/fesm2022/mesgflow-ui-kit-button.mjs +190 -244
  21. package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
  22. package/fesm2022/mesgflow-ui-kit-card.mjs +48 -27
  23. package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
  24. package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
  25. package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
  26. package/fesm2022/mesgflow-ui-kit-chart.mjs +12 -12
  27. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +18 -23
  28. package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
  29. package/fesm2022/mesgflow-ui-kit-chip.mjs +5 -5
  30. package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
  31. package/fesm2022/mesgflow-ui-kit-code-block.mjs +11 -7
  32. package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
  33. package/fesm2022/mesgflow-ui-kit-collapsible.mjs +9 -9
  34. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +9 -7
  35. package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
  36. package/fesm2022/mesgflow-ui-kit-combobox.mjs +147 -67
  37. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
  38. package/fesm2022/mesgflow-ui-kit-command.mjs +15 -16
  39. package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -1
  40. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +7 -9
  41. package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
  42. package/fesm2022/mesgflow-ui-kit-copy-button.mjs +6 -6
  43. package/fesm2022/mesgflow-ui-kit-core.mjs +446 -128
  44. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
  45. package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
  46. package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
  47. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +140 -19
  48. package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
  49. package/fesm2022/mesgflow-ui-kit-description-list.mjs +3 -3
  50. package/fesm2022/mesgflow-ui-kit-dialog.mjs +310 -64
  51. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
  52. package/fesm2022/mesgflow-ui-kit-divider.mjs +3 -3
  53. package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
  54. package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
  55. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +6 -6
  56. package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
  57. package/fesm2022/mesgflow-ui-kit-empty-state.mjs +3 -3
  58. package/fesm2022/mesgflow-ui-kit-field.mjs +55 -14
  59. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
  60. package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
  61. package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
  62. package/fesm2022/mesgflow-ui-kit-hover-card.mjs +6 -6
  63. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +135 -0
  64. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
  65. package/fesm2022/mesgflow-ui-kit-icon.mjs +8 -3
  66. package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
  67. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
  68. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
  69. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
  70. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
  71. package/fesm2022/mesgflow-ui-kit-input.mjs +162 -19
  72. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
  73. package/fesm2022/mesgflow-ui-kit-kbd.mjs +3 -3
  74. package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
  75. package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
  76. package/fesm2022/mesgflow-ui-kit-link.mjs +5 -5
  77. package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
  78. package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
  79. package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
  80. package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
  81. package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
  82. package/fesm2022/mesgflow-ui-kit-menu.mjs +178 -14
  83. package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
  84. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
  85. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
  86. package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
  87. package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
  88. package/fesm2022/mesgflow-ui-kit-number-input.mjs +9 -6
  89. package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
  90. package/fesm2022/mesgflow-ui-kit-otp-input.mjs +3 -3
  91. package/fesm2022/mesgflow-ui-kit-page-header.mjs +6 -6
  92. package/fesm2022/mesgflow-ui-kit-pagination.mjs +7 -6
  93. package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
  94. package/fesm2022/mesgflow-ui-kit-password-input.mjs +38 -68
  95. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
  96. package/fesm2022/mesgflow-ui-kit-popover.mjs +12 -52
  97. package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
  98. package/fesm2022/mesgflow-ui-kit-progress.mjs +164 -23
  99. package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
  100. package/fesm2022/mesgflow-ui-kit-qr-code.mjs +766 -0
  101. package/fesm2022/mesgflow-ui-kit-qr-code.mjs.map +1 -0
  102. package/fesm2022/mesgflow-ui-kit-radio.mjs +10 -12
  103. package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
  104. package/fesm2022/mesgflow-ui-kit-rating.mjs +4 -4
  105. package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
  106. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +3 -3
  107. package/fesm2022/mesgflow-ui-kit-search-input.mjs +11 -7
  108. package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
  109. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +15 -11
  110. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
  111. package/fesm2022/mesgflow-ui-kit-select.mjs +6 -5
  112. package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
  113. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +24 -21
  114. package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
  115. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +6 -5
  116. package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
  117. package/fesm2022/mesgflow-ui-kit-slider.mjs +253 -6
  118. package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
  119. package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
  120. package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
  121. package/fesm2022/mesgflow-ui-kit-spinner.mjs +44 -15
  122. package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
  123. package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
  124. package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
  125. package/fesm2022/mesgflow-ui-kit-splitter.mjs +213 -6
  126. package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
  127. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +13 -6
  128. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
  129. package/fesm2022/mesgflow-ui-kit-stepper.mjs +171 -64
  130. package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
  131. package/fesm2022/mesgflow-ui-kit-switch.mjs +4 -4
  132. package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
  133. package/fesm2022/mesgflow-ui-kit-table.mjs +34 -28
  134. package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
  135. package/fesm2022/mesgflow-ui-kit-tabs.mjs +421 -180
  136. package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
  137. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +9 -4
  138. package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
  139. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +3 -3
  140. package/fesm2022/mesgflow-ui-kit-theming.mjs +7 -7
  141. package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
  142. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +6 -6
  143. package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
  144. package/fesm2022/mesgflow-ui-kit-timeline.mjs +3 -3
  145. package/fesm2022/mesgflow-ui-kit-toast.mjs +118 -35
  146. package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
  147. package/fesm2022/mesgflow-ui-kit-toggle.mjs +12 -11
  148. package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
  149. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +13 -11
  150. package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
  151. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +76 -53
  152. package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
  153. package/fesm2022/mesgflow-ui-kit-tour.mjs +17 -29
  154. package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
  155. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
  156. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
  157. package/fesm2022/mesgflow-ui-kit-tree-select.mjs +3 -3
  158. package/fesm2022/mesgflow-ui-kit-tree.mjs +4 -4
  159. package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
  160. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
  161. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
  162. package/fesm2022/mesgflow-ui-kit.mjs +93 -12836
  163. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
  164. package/package.json +91 -3
  165. package/schematics/collection.json +10 -0
  166. package/schematics/migration.json +10 -0
  167. package/schematics/migrations/v0-7.cjs +70 -0
  168. package/schematics/ng-add/index.cjs +234 -0
  169. package/schematics/ng-add/schema.json +43 -0
  170. package/tokens/color.css +96 -0
  171. package/tokens/controls.css +145 -0
  172. package/tokens/elevation.css +62 -6
  173. package/tokens/motion.css +304 -66
  174. package/tokens/radius.css +14 -0
  175. package/tokens.css +1 -0
  176. package/tokens.json +1583 -0
  177. package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
  178. package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
  179. package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
  180. package/types/mesgflow-ui-kit-button.d.ts +23 -38
  181. package/types/mesgflow-ui-kit-card.d.ts +26 -16
  182. package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
  183. package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
  184. package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
  185. package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
  186. package/types/mesgflow-ui-kit-command.d.ts +2 -2
  187. package/types/mesgflow-ui-kit-core.d.ts +279 -21
  188. package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
  189. package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
  190. package/types/mesgflow-ui-kit-dialog.d.ts +122 -14
  191. package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
  192. package/types/mesgflow-ui-kit-field.d.ts +17 -8
  193. package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
  194. package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
  195. package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
  196. package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
  197. package/types/mesgflow-ui-kit-input.d.ts +64 -2
  198. package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
  199. package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
  200. package/types/mesgflow-ui-kit-mention.d.ts +59 -0
  201. package/types/mesgflow-ui-kit-menu.d.ts +41 -2
  202. package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
  203. package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
  204. package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
  205. package/types/mesgflow-ui-kit-password-input.d.ts +35 -5
  206. package/types/mesgflow-ui-kit-popover.d.ts +13 -5
  207. package/types/mesgflow-ui-kit-progress.d.ts +33 -12
  208. package/types/mesgflow-ui-kit-qr-code.d.ts +160 -0
  209. package/types/mesgflow-ui-kit-radio.d.ts +2 -2
  210. package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
  211. package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
  212. package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
  213. package/types/mesgflow-ui-kit-slider.d.ts +60 -1
  214. package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
  215. package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
  216. package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
  217. package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
  218. package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
  219. package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
  220. package/types/mesgflow-ui-kit-table.d.ts +2 -0
  221. package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
  222. package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
  223. package/types/mesgflow-ui-kit-toast.d.ts +48 -22
  224. package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
  225. package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
  226. package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
  227. package/types/mesgflow-ui-kit.d.ts +88 -5444
@@ -1,9 +1,72 @@
1
1
  import { clsx } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
- import { InjectionToken, signal, inject, computed, isSignal, makeEnvironmentProviders } from '@angular/core';
2
+ import { extendTailwindMerge } from 'tailwind-merge';
3
+ import * as i0 from '@angular/core';
4
+ import { input, inject, ElementRef, afterRenderEffect, DestroyRef, afterNextRender, Directive, InjectionToken, signal, computed, isSignal, makeEnvironmentProviders } from '@angular/core';
4
5
  import { enUS } from 'date-fns/locale';
5
6
 
6
- /** clsx ile koşullu class'ları birleştirir, tailwind-merge ile çakışan utility'leri (ör. iki farklı `bg-*`) sonuncusu kazanacak şekilde çözer. */
7
+ /**
8
+ * Kitin kendi utility'lerini tanıyan tailwind-merge örneği. Öncesinde düz
9
+ * `twMerge` `text-eyebrow`'u bir METİN RENGİ sanıp `text-fg` ile çakıştırıyor
10
+ * (birini siliyor), `h-control-md` ile `h-8`'i ise hiç çözemiyordu (ikisi de
11
+ * kalıp CSS sırası kazananı belirliyordu) — `docs/tr/mimari.md` "twMerge
12
+ * gotcha" artık bu yapılandırmayla kapandı. Yeni bir özel utility
13
+ * (`@utility`/`@theme` ile) eklerken buraya da ekleyin.
14
+ */
15
+ const twMerge = extendTailwindMerge({
16
+ extend: {
17
+ theme: {
18
+ text: [
19
+ 'label',
20
+ 'caption',
21
+ 'eyebrow',
22
+ 'title-sm',
23
+ 'title',
24
+ 'title-lg',
25
+ 'display',
26
+ 'display-lg',
27
+ 'metric',
28
+ ],
29
+ shadow: ['1', '2', '3', 'control', 'filled', 'glow', 'highlight'],
30
+ ease: ['emphasis', 'spring', 'exit'],
31
+ animate: [
32
+ 'progress-slide',
33
+ 'spin-slow',
34
+ 'dialog-in',
35
+ 'dialog-out',
36
+ 'sheet-in',
37
+ 'sheet-out',
38
+ 'drawer-in',
39
+ 'drawer-out',
40
+ 'drawer-start-in',
41
+ 'drawer-start-out',
42
+ 'drawer-top-in',
43
+ 'drawer-top-out',
44
+ 'pop',
45
+ 'overlay-in',
46
+ 'overlay-out',
47
+ 'toast-in',
48
+ 'toast-out',
49
+ 'countdown',
50
+ 'list-in',
51
+ 'draw',
52
+ 'shimmer',
53
+ 'fade-in',
54
+ ],
55
+ font: ['display'],
56
+ tracking: ['label'],
57
+ },
58
+ classGroups: {
59
+ 'h-control': [{ 'h-control': ['xs', 'sm', 'md', 'lg', 'xl'] }],
60
+ duration: [{ duration: ['instant', 'fast', 'base', 'slow', 'slower'] }],
61
+ z: [{ z: ['sticky', 'nav', 'overlay', 'toast'] }],
62
+ },
63
+ conflictingClassGroups: {
64
+ 'h-control': ['h', 'size'],
65
+ h: ['h-control'],
66
+ },
67
+ },
68
+ });
69
+ /** 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. */
7
70
  function cn(...inputs) {
8
71
  return twMerge(clsx(inputs));
9
72
  }
@@ -47,9 +110,11 @@ const disabledRecipe = 'disabled:pointer-events-none disabled:opacity-50 disable
47
110
  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
111
  /** `size: MfSize` eksenindeki TÜM kontrollerin ortak yükseklik/dolgu/font eşlemesi — bkz. `radius.css`'teki `--control-h-*` token'ları. */
49
112
  const controlSize = {
113
+ xs: 'h-control-xs px-2 text-xs',
50
114
  sm: 'h-control-sm px-2.5 text-sm',
51
115
  md: 'h-control-md px-3 text-sm',
52
116
  lg: 'h-control-lg px-3.5 text-base',
117
+ xl: 'h-control-xl px-4 text-base',
53
118
  };
54
119
  /**
55
120
  * Popover/Menu/Select/Combobox/... overlay panellerinin ortak kabuğu — BORDER-
@@ -121,136 +186,234 @@ class ValueAccessorBase {
121
186
  }
122
187
  }
123
188
 
189
+ const OPPOSITE = { top: 'bottom', bottom: 'top', start: 'end', end: 'start' };
190
+ function split(placement) {
191
+ const [rawSide, rawAlign] = placement.split('-');
192
+ const side = rawSide === 'left' ? 'start' : rawSide === 'right' ? 'end' : rawSide;
193
+ return [side, rawAlign ?? 'center'];
194
+ }
195
+ function position(side, align, offset) {
196
+ if (side === 'top' || side === 'bottom') {
197
+ const below = side === 'bottom';
198
+ return {
199
+ originX: align,
200
+ originY: below ? 'bottom' : 'top',
201
+ overlayX: align,
202
+ overlayY: below ? 'top' : 'bottom',
203
+ offsetY: below ? offset : -offset,
204
+ // Panel aşağıdaysa ÜSTÜNDEN (tetikleyiciye bakan kenarından) büyür.
205
+ panelClass: [`mf-side-${side}`, `mf-origin-${below ? 'top' : 'bottom'}-${align}`],
206
+ };
207
+ }
208
+ const atEnd = side === 'end';
209
+ const alignY = align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center';
210
+ return {
211
+ originX: atEnd ? 'end' : 'start',
212
+ originY: alignY,
213
+ overlayX: atEnd ? 'start' : 'end',
214
+ overlayY: alignY,
215
+ offsetX: atEnd ? offset : -offset,
216
+ panelClass: [`mf-side-${side}`, `mf-origin-${alignY}-${atEnd ? 'start' : 'end'}`],
217
+ };
218
+ }
124
219
  /**
125
- * `Popover`'ın (`PLACEMENTS`) ve `Tooltip`'in (`POSITIONS`) kendi dosyalarında
126
- * ayrı ayrı tuttuğu CDK `ConnectedPosition[]` çiftlerinin ORTAK geometri
127
- * üretici hâli — 8 yerleşimin (4 köşe + 4 kenar) hepsini tek bir fonksiyonla
128
- * üretir, `offset` çağıranın KENDİ mevcut değerini (Popover 4px, Tooltip 8px,
129
- * diğer overlay'ler 4-8px arası değişen) korumasını sağlar.
220
+ * Tüm bağlı overlay'lerin (Popover, Tooltip, HoverCard, Tour, ContextMenu ve
221
+ * Popover üstüne kurulan Select/Combobox/DatePicker/...) TEK konum üreticisi:
222
+ * tercih edilen yerleşim + taşmada karşı tarafa çevrilen (flip) yedek.
130
223
  *
131
- * Bu modül BİLEREK henüz hiçbir bileşene BAĞLANMADI (Faz 0c) — `Popover`,
132
- * `Tooltip` ve 10 kopya `ConnectedPosition[]` içeren diğer bileşenlerin buna
133
- * geçişi Faz 1c'nin ("Overlay birleştirme") kapsamı: her biri kendi klavye/
134
- * vurgu mantığını koruyarak taşınmalı ve tarayıcıda tek tek doğrulanmalı —
135
- * bu fazın (yapısal taşıma) riskiyle karıştırılmamalı.
224
+ * Her pozisyon bir `panelClass` taşır — CDK hangisini SEÇERSE pane'e o
225
+ * eklenir: `mf-side-*` (giriş kayma yönü) + `mf-origin-*` (`transform-origin`),
226
+ * bkz. styles/tokens/motion.css. Böylece panel yukarı çevrildiğinde (flip) animasyon
227
+ * da tetikleyiciden dışarı doğru açılır (Radix
228
+ * `--radix-popper-transform-origin` eşleniği, abonelik gerekmeden).
229
+ *
230
+ * `left`/`right` MANTIKSAL (`start`/`end`) — RTL'de CDK kendisi çevirir.
136
231
  */
137
232
  function overlayPositions(placement, offset = 4) {
138
- switch (placement) {
139
- case 'bottom-start':
140
- return [
141
- {
142
- originX: 'start',
143
- originY: 'bottom',
144
- overlayX: 'start',
145
- overlayY: 'top',
146
- offsetY: offset,
147
- },
148
- {
149
- originX: 'start',
150
- originY: 'top',
151
- overlayX: 'start',
152
- overlayY: 'bottom',
153
- offsetY: -offset,
154
- },
155
- ];
156
- case 'bottom-end':
157
- return [
158
- { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },
159
- { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },
160
- ];
161
- case 'top-start':
162
- return [
163
- {
164
- originX: 'start',
165
- originY: 'top',
166
- overlayX: 'start',
167
- overlayY: 'bottom',
168
- offsetY: -offset,
169
- },
170
- {
171
- originX: 'start',
172
- originY: 'bottom',
173
- overlayX: 'start',
174
- overlayY: 'top',
175
- offsetY: offset,
176
- },
177
- ];
178
- case 'top-end':
179
- return [
180
- { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },
181
- { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },
182
- ];
183
- case 'top':
184
- return [
185
- {
186
- originX: 'center',
187
- originY: 'top',
188
- overlayX: 'center',
189
- overlayY: 'bottom',
190
- offsetY: -offset,
191
- },
192
- {
193
- originX: 'center',
194
- originY: 'bottom',
195
- overlayX: 'center',
196
- overlayY: 'top',
197
- offsetY: offset,
198
- },
199
- ];
200
- case 'bottom':
201
- return [
202
- {
203
- originX: 'center',
204
- originY: 'bottom',
205
- overlayX: 'center',
206
- overlayY: 'top',
207
- offsetY: offset,
208
- },
209
- {
210
- originX: 'center',
211
- originY: 'top',
212
- overlayX: 'center',
213
- overlayY: 'bottom',
214
- offsetY: -offset,
215
- },
216
- ];
217
- case 'left':
218
- return [
219
- {
220
- originX: 'start',
221
- originY: 'center',
222
- overlayX: 'end',
223
- overlayY: 'center',
224
- offsetX: -offset,
225
- },
226
- {
227
- originX: 'end',
228
- originY: 'center',
229
- overlayX: 'start',
230
- overlayY: 'center',
231
- offsetX: offset,
232
- },
233
- ];
234
- case 'right':
235
- return [
236
- {
237
- originX: 'end',
238
- originY: 'center',
239
- overlayX: 'start',
240
- overlayY: 'center',
241
- offsetX: offset,
242
- },
243
- {
244
- originX: 'start',
245
- originY: 'center',
246
- overlayX: 'end',
247
- overlayY: 'center',
248
- offsetX: -offset,
249
- },
250
- ];
233
+ const [side, align] = split(placement);
234
+ return [position(side, align, offset), position(OPPOSITE[side], align, offset)];
235
+ }
236
+ /**
237
+ * İmleç konumuna açılan paneller (ContextMenu) — köşe tetikleyiciye yapışık,
238
+ * dört çeyrekte flip; origin her zaman imlece bakan köşe.
239
+ */
240
+ function pointerPositions() {
241
+ return [
242
+ {
243
+ originX: 'start',
244
+ originY: 'top',
245
+ overlayX: 'start',
246
+ overlayY: 'top',
247
+ panelClass: ['mf-side-bottom', 'mf-origin-top-start'],
248
+ },
249
+ {
250
+ originX: 'start',
251
+ originY: 'top',
252
+ overlayX: 'start',
253
+ overlayY: 'bottom',
254
+ panelClass: ['mf-side-top', 'mf-origin-bottom-start'],
255
+ },
256
+ {
257
+ originX: 'start',
258
+ originY: 'top',
259
+ overlayX: 'end',
260
+ overlayY: 'top',
261
+ panelClass: ['mf-side-bottom', 'mf-origin-top-end'],
262
+ },
263
+ {
264
+ originX: 'start',
265
+ originY: 'top',
266
+ overlayX: 'end',
267
+ overlayY: 'bottom',
268
+ panelClass: ['mf-side-top', 'mf-origin-bottom-end'],
269
+ },
270
+ ];
271
+ }
272
+
273
+ /** `prefers-reduced-motion: reduce` — SSR/jsdom'da (matchMedia yok) `false`. */
274
+ function prefersReducedMotion() {
275
+ return (typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches);
276
+ }
277
+ /** CSS süre string'ini (`120ms`, `0.2s`) milisaniyeye çevirir; çözülemezse `null`. */
278
+ function parseCssDuration(raw) {
279
+ const value = raw.trim();
280
+ const match = /^(-?\d*\.?\d+)(ms|s)$/.exec(value);
281
+ if (!match)
282
+ return null;
283
+ const n = Number(match[1]);
284
+ return match[2] === 's' ? n * 1000 : n;
285
+ }
286
+ const DEFAULT_EXIT_MS = 120;
287
+ /**
288
+ * Overlay/dialog/toast çıkış animasyonunun süresi — `--mf-duration-exit`
289
+ * (styles/tokens/motion.css) TEK kaynak. Eskiden `dialog.service.ts`,
290
+ * `popover.ts`, `toast.service.ts` her biri `EXIT_MS = 120` sabitini CSS'le
291
+ * ELLE eşitliyordu; token değişince JS kısa kalıp panel animasyonun ortasında
292
+ * kopuyordu. Reduced-motion'da `0` (panel anında kaldırılır).
293
+ */
294
+ function exitDurationMs() {
295
+ if (prefersReducedMotion())
296
+ return 0;
297
+ if (typeof document === 'undefined' || typeof getComputedStyle === 'undefined') {
298
+ return DEFAULT_EXIT_MS;
251
299
  }
300
+ const raw = getComputedStyle(document.documentElement).getPropertyValue('--mf-duration-exit');
301
+ return parseCssDuration(raw) ?? DEFAULT_EXIT_MS;
252
302
  }
253
303
 
304
+ /**
305
+ * `<span mfSlidingIndicator [track]="selected()" class="-bottom-px h-0.5 bg-accent-fill"></span>`
306
+ *
307
+ * Kitin ortak "kayan gösterge" motoru — Tabs'ın çizgisi/hapı, SegmentedControl'ün
308
+ * parçası, TabNav'ın çizgisi ve hover-izleme vurgusu AYNI hareketi paylaşsın diye.
309
+ * Kapsayıcı (varsayılan `parentElement`, `relative` olmalı) içinde `target`'ı
310
+ * bulur, onun `offsetLeft/offsetWidth`'ine (x) ya da `offsetTop/offsetHeight`'ına
311
+ * (y) göre `transform` + boyut yazar.
312
+ *
313
+ * - **Hareket:** hedef bir öğeden BAŞKA bir öğeye geçince yay eğrisiyle kayar
314
+ * (`ease-spring`, `duration-slow`). İlk görünüm, hedefin yeniden belirmesi ve
315
+ * yeniden boyutlanma (ResizeObserver, font yüklenmesi) ANINDA — göstergenin
316
+ * 0'dan "uçarak" gelmesi olmaz. Opaklık her zaman yumuşak geçer.
317
+ * - **Çapraz eksen** tüketicinin sınıfıdır (`-bottom-px h-0.5`, `inset-y-0`…);
318
+ * motor yalnız ana ekseni yazar.
319
+ * - **RTL:** `left-0` + `offsetLeft` + `translateX` üçü de fiziksel — birlikte
320
+ * RTL'de doğru (bkz. scripts/rtl-rules.mjs allowlist).
321
+ * - `target` `null` ise gösterge son konumunda solar (hover bitişi).
322
+ * - Azaltılmış harekette `motion.css`'in global anahtarı geçişleri sıfırlar.
323
+ */
324
+ class SlidingIndicator {
325
+ axis = input('x', /* @ts-ignore */
326
+ ...(ngDevMode ? [{ debugName: "axis" }] : /* istanbul ignore next */ []));
327
+ /** Kapsayıcı içinde çözülen CSS seçici, somut bir öğe ya da `null` (gizli). */
328
+ target = input('[aria-selected="true"]', /* @ts-ignore */
329
+ ...(ngDevMode ? [{ debugName: "target" }] : /* istanbul ignore next */ []));
330
+ /** Herhangi bir değer — değişince (ör. seçim sinyali) hedef yeniden ölçülür. */
331
+ track = input(/* @ts-ignore */
332
+ ...(ngDevMode ? [undefined, { debugName: "track" }] : /* istanbul ignore next */ []));
333
+ /** Ölçüm kapsayıcısı; varsayılan `parentElement` (offsetParent olmalı). */
334
+ container = input(/* @ts-ignore */
335
+ ...(ngDevMode ? [undefined, { debugName: "container" }] : /* istanbul ignore next */ []));
336
+ el = inject(ElementRef).nativeElement;
337
+ current = null;
338
+ constructor() {
339
+ afterRenderEffect(() => {
340
+ this.target();
341
+ this.track();
342
+ this.axis();
343
+ this.update(true);
344
+ });
345
+ const destroyRef = inject(DestroyRef);
346
+ afterNextRender(() => {
347
+ const box = this.box();
348
+ if (!box || typeof ResizeObserver === 'undefined')
349
+ return;
350
+ const observer = new ResizeObserver(() => this.update(false));
351
+ observer.observe(box);
352
+ destroyRef.onDestroy(() => observer.disconnect());
353
+ });
354
+ }
355
+ /** Dışarıdan yeniden ölçüm (ör. içerik değişti ama seçim değişmedi). */
356
+ refresh(animate = false) {
357
+ this.update(animate);
358
+ }
359
+ box() {
360
+ return this.container() ?? this.el.parentElement;
361
+ }
362
+ resolve() {
363
+ const target = this.target();
364
+ if (!target)
365
+ return null;
366
+ if (typeof target !== 'string')
367
+ return target;
368
+ return this.box()?.querySelector(target) ?? null;
369
+ }
370
+ update(allowAnimate) {
371
+ const target = this.resolve();
372
+ const style = this.el.style;
373
+ if (!target) {
374
+ style.opacity = '0';
375
+ this.current = null;
376
+ return;
377
+ }
378
+ const animate = allowAnimate && this.current !== null && this.current !== target;
379
+ // Anında yol: geometri geçişsiz yazılır, opaklık yine yumuşak kalır.
380
+ if (!animate)
381
+ style.transitionProperty = 'opacity';
382
+ if (this.axis() === 'y') {
383
+ style.transform = `translateY(${target.offsetTop}px)`;
384
+ style.height = `${target.offsetHeight}px`;
385
+ style.width = '';
386
+ }
387
+ else {
388
+ style.transform = `translateX(${target.offsetLeft}px)`;
389
+ style.width = `${target.offsetWidth}px`;
390
+ style.height = '';
391
+ }
392
+ style.opacity = '1';
393
+ if (!animate) {
394
+ // Yeniden akışı zorla ki geçiş özelliği geri gelince konum değişimi animasyonlanmasın.
395
+ void this.el.getBoundingClientRect();
396
+ style.transitionProperty = '';
397
+ }
398
+ this.current = target;
399
+ }
400
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlidingIndicator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
401
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlidingIndicator, isStandalone: true, selector: "[mfSlidingIndicator]", inputs: { axis: { classPropertyName: "axis", publicName: "axis", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, track: { classPropertyName: "track", publicName: "track", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-hidden": "true" }, properties: { "class.left-0": "axis() === 'x'", "class.top-0": "axis() === 'y'" }, classAttribute: "pointer-events-none absolute opacity-0 transition-[transform,width,height,opacity] duration-slow ease-spring" }, exportAs: ["mfSlidingIndicator"], ngImport: i0 });
402
+ }
403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlidingIndicator, decorators: [{
404
+ type: Directive,
405
+ args: [{
406
+ selector: '[mfSlidingIndicator]',
407
+ exportAs: 'mfSlidingIndicator',
408
+ host: {
409
+ class: 'pointer-events-none absolute opacity-0 transition-[transform,width,height,opacity] duration-slow ease-spring',
410
+ '[class.left-0]': "axis() === 'x'",
411
+ '[class.top-0]': "axis() === 'y'",
412
+ 'aria-hidden': 'true',
413
+ },
414
+ }]
415
+ }], ctorParameters: () => [], propDecorators: { axis: [{ type: i0.Input, args: [{ isSignal: true, alias: "axis", required: false }] }], target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], track: [{ type: i0.Input, args: [{ isSignal: true, alias: "track", required: false }] }], container: [{ type: i0.Input, args: [{ isSignal: true, alias: "container", required: false }] }] } });
416
+
254
417
  function isPlainObject(value) {
255
418
  return typeof value === 'object' && value !== null && !Array.isArray(value);
256
419
  }
@@ -319,6 +482,8 @@ const mfLabelsEn = {
319
482
  presetLast7: 'Last 7 days',
320
483
  presetLast30: 'Last 30 days',
321
484
  presetThisMonth: 'This month',
485
+ date: 'Date',
486
+ time: 'Time',
322
487
  },
323
488
  timePicker: {
324
489
  placeholder: 'hh:mm',
@@ -428,6 +593,8 @@ const mfLabelsEn = {
428
593
  combobox: {
429
594
  placeholder: 'Search...',
430
595
  noResults: 'No results',
596
+ create: 'Create “{query}”',
597
+ remove: 'Remove {label}',
431
598
  },
432
599
  select: {
433
600
  placeholder: 'Select',
@@ -445,6 +612,9 @@ const mfLabelsEn = {
445
612
  },
446
613
  stepper: {
447
614
  ariaLabel: 'Steps',
615
+ optional: 'Optional',
616
+ completed: 'Completed',
617
+ error: 'Needs attention',
448
618
  },
449
619
  progress: {
450
620
  ariaLabel: 'Progress',
@@ -453,6 +623,10 @@ const mfLabelsEn = {
453
623
  show: 'Show',
454
624
  hide: 'Hide',
455
625
  },
626
+ qrCode: {
627
+ ariaLabel: 'QR code',
628
+ error: 'QR code could not be generated: the content is too long.',
629
+ },
456
630
  chip: {
457
631
  remove: 'Remove',
458
632
  },
@@ -520,6 +694,130 @@ const mfLabelsEn = {
520
694
  searchPlaceholder: 'Search…',
521
695
  noResults: 'No results',
522
696
  },
697
+ statTile: {
698
+ increase: 'Increase',
699
+ decrease: 'Decrease',
700
+ noChange: 'No change',
701
+ },
702
+ slider: {
703
+ minThumb: 'Minimum',
704
+ maxThumb: 'Maximum',
705
+ },
706
+ splitButton: {
707
+ moreActions: 'More actions',
708
+ },
709
+ fileUpload: {
710
+ uploading: 'Uploading…',
711
+ done: 'Uploaded',
712
+ failed: 'Upload failed',
713
+ queued: 'Waiting…',
714
+ retry: 'Retry',
715
+ cancel: 'Cancel',
716
+ remove: 'Remove',
717
+ files: '{count} files',
718
+ },
719
+ sortable: {
720
+ instructions: 'Press Space to pick up, arrow keys to move, Space to drop, Escape to cancel.',
721
+ grabbed: '{item} grabbed. Position {position} of {total}.',
722
+ moved: '{item} moved to position {position} of {total}.',
723
+ movedToColumn: '{item} moved to {column}, position {position} of {total}.',
724
+ dropped: '{item} dropped at position {position} of {total}.',
725
+ cancelled: 'Move cancelled. {item} returned to position {position}.',
726
+ dragHandle: 'Reorder {item}',
727
+ card: 'card',
728
+ },
729
+ countdown: {
730
+ days: 'days',
731
+ hours: 'hours',
732
+ minutes: 'minutes',
733
+ seconds: 'seconds',
734
+ remaining: '{time} remaining',
735
+ finished: 'Time is up',
736
+ },
737
+ carousel: {
738
+ previous: 'Previous slide',
739
+ next: 'Next slide',
740
+ slide: '{index} of {total}',
741
+ pause: 'Pause autoplay',
742
+ play: 'Start autoplay',
743
+ goTo: 'Go to slide {index}',
744
+ carousel: 'Carousel',
745
+ },
746
+ inlineEdit: {
747
+ edit: 'Edit',
748
+ save: 'Save',
749
+ cancel: 'Cancel',
750
+ empty: 'Click to add',
751
+ },
752
+ transferList: {
753
+ available: 'Available',
754
+ selected: 'Selected',
755
+ moveRight: 'Move selected right',
756
+ moveLeft: 'Move selected left',
757
+ moveAllRight: 'Move all right',
758
+ moveAllLeft: 'Move all left',
759
+ search: 'Search',
760
+ count: '{selected} of {total} selected',
761
+ empty: 'No items',
762
+ },
763
+ lightbox: {
764
+ close: 'Close',
765
+ previous: 'Previous image',
766
+ next: 'Next image',
767
+ zoomIn: 'Zoom in',
768
+ zoomOut: 'Zoom out',
769
+ counter: '{index} of {total}',
770
+ gallery: 'Image viewer',
771
+ },
772
+ notificationCenter: {
773
+ title: 'Notifications',
774
+ markAllRead: 'Mark all as read',
775
+ empty: 'You are all caught up',
776
+ emptyDescription: 'New notifications will show up here.',
777
+ unread: 'Unread',
778
+ trigger: 'Notifications, {count} unread',
779
+ viewAll: 'View all',
780
+ },
781
+ agenda: {
782
+ allDay: 'All day',
783
+ empty: 'Nothing scheduled',
784
+ today: 'Today',
785
+ tomorrow: 'Tomorrow',
786
+ },
787
+ mention: {
788
+ suggestions: 'Suggestions',
789
+ noResults: 'No matches',
790
+ },
791
+ panelGroup: {
792
+ resize: 'Resize panel {index}',
793
+ },
794
+ authCard: {
795
+ title: 'Welcome back',
796
+ description: 'Sign in to continue to your workspace.',
797
+ email: 'Email',
798
+ emailPlaceholder: 'you@company.com',
799
+ password: 'Password',
800
+ forgotPassword: 'Forgot password?',
801
+ remember: 'Keep me signed in',
802
+ submit: 'Sign in',
803
+ divider: 'or continue with email',
804
+ noAccount: 'New here?',
805
+ signUp: 'Create an account',
806
+ emailRequired: 'Email is required',
807
+ emailInvalid: 'Enter a valid email',
808
+ passwordRequired: 'Password is required',
809
+ errorTitle: 'Sign-in failed',
810
+ },
811
+ inviteMembers: {
812
+ title: 'Invite teammates',
813
+ description: 'They will receive an email with a link to join.',
814
+ emails: 'Email addresses',
815
+ emailsPlaceholder: 'name@company.com, press Enter',
816
+ role: 'Role',
817
+ submit: 'Send invites',
818
+ invalidEmails: 'Not valid: {emails}',
819
+ emailsRequired: 'Add at least one email address',
820
+ },
523
821
  };
524
822
 
525
823
  /**
@@ -570,6 +868,7 @@ const MF_OTP_INPUT_LABELS = labelToken('otpInput', 'otp-input');
570
868
  const MF_STEPPER_LABELS = labelToken('stepper', 'stepper');
571
869
  const MF_PROGRESS_LABELS = labelToken('progress', 'progress');
572
870
  const MF_PASSWORD_INPUT_LABELS = labelToken('passwordInput', 'password-input');
871
+ const MF_QR_CODE_LABELS = labelToken('qrCode', 'qr-code');
573
872
  const MF_CHIP_LABELS = labelToken('chip', 'chip');
574
873
  const MF_ALERT_LABELS = labelToken('alert', 'alert');
575
874
  const MF_BREADCRUMB_LABELS = labelToken('breadcrumb', 'breadcrumb');
@@ -583,6 +882,22 @@ const MF_TOUR_LABELS = labelToken('tour', 'tour');
583
882
  const MF_RATING_LABELS = labelToken('rating', 'rating');
584
883
  const MF_THEME_SWITCHER_LABELS = labelToken('themeSwitcher', 'theme-switcher');
585
884
  const MF_TREE_SELECT_LABELS = labelToken('treeSelect', 'tree-select');
885
+ const MF_STAT_TILE_LABELS = labelToken('statTile', 'stat-tile');
886
+ const MF_SLIDER_LABELS = labelToken('slider', 'slider');
887
+ const MF_SPLIT_BUTTON_LABELS = labelToken('splitButton', 'split-button');
888
+ const MF_FILE_UPLOAD_LABELS = labelToken('fileUpload', 'file-upload');
889
+ const MF_SORTABLE_LABELS = labelToken('sortable', 'sortable');
890
+ const MF_COUNTDOWN_LABELS = labelToken('countdown', 'countdown');
891
+ const MF_CAROUSEL_LABELS = labelToken('carousel', 'carousel');
892
+ const MF_INLINE_EDIT_LABELS = labelToken('inlineEdit', 'inline-edit');
893
+ const MF_TRANSFER_LIST_LABELS = labelToken('transferList', 'transfer-list');
894
+ const MF_LIGHTBOX_LABELS = labelToken('lightbox', 'lightbox');
895
+ const MF_NOTIFICATION_CENTER_LABELS = labelToken('notificationCenter', 'notification-center');
896
+ const MF_AGENDA_LABELS = labelToken('agenda', 'agenda');
897
+ const MF_MENTION_LABELS = labelToken('mention', 'mention');
898
+ const MF_PANEL_GROUP_LABELS = labelToken('panelGroup', 'panel-group');
899
+ const MF_AUTH_CARD_LABELS = labelToken('authCard', 'auth-card');
900
+ const MF_INVITE_MEMBERS_LABELS = labelToken('inviteMembers', 'invite-members');
586
901
 
587
902
  /**
588
903
  * `app.config.ts`'in `providers` dizisine eklenir — `MF_LABELS`/`MF_DATE_LOCALE`'ı
@@ -611,7 +926,10 @@ function provideMesgflowUi(options = {}) {
611
926
  }
612
927
  if (options.dateLocale) {
613
928
  const dateLocale = options.dateLocale;
614
- providers.push({ provide: MF_DATE_LOCALE, useFactory: () => signal(dateLocale) });
929
+ providers.push({
930
+ provide: MF_DATE_LOCALE,
931
+ useFactory: () => (isSignal(dateLocale) ? dateLocale : signal(dateLocale)),
932
+ });
615
933
  }
616
934
  return makeEnvironmentProviders(providers);
617
935
  }
@@ -620,5 +938,5 @@ function provideMesgflowUi(options = {}) {
620
938
  * Generated bundle index. Do not edit.
621
939
  */
622
940
 
623
- 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 };
941
+ 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_QR_CODE_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 };
624
942
  //# sourceMappingURL=mesgflow-ui-kit-core.mjs.map