@mesgflow/ui-kit 0.6.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 (230) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/fesm2022/mesgflow-ui-kit-accordion.mjs +75 -0
  4. package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -0
  5. package/fesm2022/mesgflow-ui-kit-alert.mjs +165 -0
  6. package/fesm2022/mesgflow-ui-kit-alert.mjs.map +1 -0
  7. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +88 -0
  8. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs.map +1 -0
  9. package/fesm2022/mesgflow-ui-kit-avatar.mjs +123 -0
  10. package/fesm2022/mesgflow-ui-kit-avatar.mjs.map +1 -0
  11. package/fesm2022/mesgflow-ui-kit-badge.mjs +68 -0
  12. package/fesm2022/mesgflow-ui-kit-badge.mjs.map +1 -0
  13. package/fesm2022/mesgflow-ui-kit-banner.mjs +111 -0
  14. package/fesm2022/mesgflow-ui-kit-banner.mjs.map +1 -0
  15. package/fesm2022/mesgflow-ui-kit-box-input.mjs +78 -0
  16. package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -0
  17. package/fesm2022/mesgflow-ui-kit-brand.mjs +120 -0
  18. package/fesm2022/mesgflow-ui-kit-brand.mjs.map +1 -0
  19. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +84 -0
  20. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs.map +1 -0
  21. package/fesm2022/mesgflow-ui-kit-button-group.mjs +37 -0
  22. package/fesm2022/mesgflow-ui-kit-button-group.mjs.map +1 -0
  23. package/fesm2022/mesgflow-ui-kit-button.mjs +359 -0
  24. package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -0
  25. package/fesm2022/mesgflow-ui-kit-card.mjs +128 -0
  26. package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -0
  27. package/fesm2022/mesgflow-ui-kit-chart.mjs +538 -0
  28. package/fesm2022/mesgflow-ui-kit-chart.mjs.map +1 -0
  29. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +45 -0
  30. package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -0
  31. package/fesm2022/mesgflow-ui-kit-chip.mjs +123 -0
  32. package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -0
  33. package/fesm2022/mesgflow-ui-kit-code-block.mjs +71 -0
  34. package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -0
  35. package/fesm2022/mesgflow-ui-kit-collapsible.mjs +89 -0
  36. package/fesm2022/mesgflow-ui-kit-collapsible.mjs.map +1 -0
  37. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +210 -0
  38. package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -0
  39. package/fesm2022/mesgflow-ui-kit-combobox.mjs +181 -0
  40. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -0
  41. package/fesm2022/mesgflow-ui-kit-command.mjs +491 -0
  42. package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -0
  43. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +92 -0
  44. package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -0
  45. package/fesm2022/mesgflow-ui-kit-copy-button.mjs +167 -0
  46. package/fesm2022/mesgflow-ui-kit-copy-button.mjs.map +1 -0
  47. package/fesm2022/mesgflow-ui-kit-core.mjs +624 -0
  48. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -0
  49. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +643 -0
  50. package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -0
  51. package/fesm2022/mesgflow-ui-kit-description-list.mjs +76 -0
  52. package/fesm2022/mesgflow-ui-kit-description-list.mjs.map +1 -0
  53. package/fesm2022/mesgflow-ui-kit-dialog.mjs +700 -0
  54. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -0
  55. package/fesm2022/mesgflow-ui-kit-divider.mjs +62 -0
  56. package/fesm2022/mesgflow-ui-kit-divider.mjs.map +1 -0
  57. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +126 -0
  58. package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -0
  59. package/fesm2022/mesgflow-ui-kit-empty-state.mjs +70 -0
  60. package/fesm2022/mesgflow-ui-kit-empty-state.mjs.map +1 -0
  61. package/fesm2022/mesgflow-ui-kit-field.mjs +42 -0
  62. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -0
  63. package/fesm2022/mesgflow-ui-kit-hover-card.mjs +171 -0
  64. package/fesm2022/mesgflow-ui-kit-hover-card.mjs.map +1 -0
  65. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +258 -0
  66. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -0
  67. package/fesm2022/mesgflow-ui-kit-icon.mjs +174 -0
  68. package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -0
  69. package/fesm2022/mesgflow-ui-kit-input.mjs +448 -0
  70. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -0
  71. package/fesm2022/mesgflow-ui-kit-kbd.mjs +24 -0
  72. package/fesm2022/mesgflow-ui-kit-kbd.mjs.map +1 -0
  73. package/fesm2022/mesgflow-ui-kit-link.mjs +48 -0
  74. package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -0
  75. package/fesm2022/mesgflow-ui-kit-menu.mjs +105 -0
  76. package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -0
  77. package/fesm2022/mesgflow-ui-kit-number-input.mjs +153 -0
  78. package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -0
  79. package/fesm2022/mesgflow-ui-kit-otp-input.mjs +164 -0
  80. package/fesm2022/mesgflow-ui-kit-otp-input.mjs.map +1 -0
  81. package/fesm2022/mesgflow-ui-kit-page-header.mjs +83 -0
  82. package/fesm2022/mesgflow-ui-kit-page-header.mjs.map +1 -0
  83. package/fesm2022/mesgflow-ui-kit-pagination.mjs +99 -0
  84. package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -0
  85. package/fesm2022/mesgflow-ui-kit-password-input.mjs +120 -0
  86. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -0
  87. package/fesm2022/mesgflow-ui-kit-popover.mjs +213 -0
  88. package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -0
  89. package/fesm2022/mesgflow-ui-kit-progress.mjs +82 -0
  90. package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -0
  91. package/fesm2022/mesgflow-ui-kit-radio.mjs +123 -0
  92. package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -0
  93. package/fesm2022/mesgflow-ui-kit-rating.mjs +116 -0
  94. package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -0
  95. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +84 -0
  96. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs.map +1 -0
  97. package/fesm2022/mesgflow-ui-kit-search-input.mjs +154 -0
  98. package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -0
  99. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +95 -0
  100. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -0
  101. package/fesm2022/mesgflow-ui-kit-select.mjs +227 -0
  102. package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -0
  103. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +449 -0
  104. package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -0
  105. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +74 -0
  106. package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -0
  107. package/fesm2022/mesgflow-ui-kit-slider.mjs +179 -0
  108. package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -0
  109. package/fesm2022/mesgflow-ui-kit-spinner.mjs +67 -0
  110. package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -0
  111. package/fesm2022/mesgflow-ui-kit-splitter.mjs +97 -0
  112. package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -0
  113. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +98 -0
  114. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -0
  115. package/fesm2022/mesgflow-ui-kit-stepper.mjs +133 -0
  116. package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -0
  117. package/fesm2022/mesgflow-ui-kit-switch.mjs +73 -0
  118. package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -0
  119. package/fesm2022/mesgflow-ui-kit-table.mjs +1783 -0
  120. package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -0
  121. package/fesm2022/mesgflow-ui-kit-tabs.mjs +569 -0
  122. package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -0
  123. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +138 -0
  124. package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -0
  125. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +53 -0
  126. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs.map +1 -0
  127. package/fesm2022/mesgflow-ui-kit-theming.mjs +1016 -0
  128. package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -0
  129. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +138 -0
  130. package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -0
  131. package/fesm2022/mesgflow-ui-kit-timeline.mjs +91 -0
  132. package/fesm2022/mesgflow-ui-kit-timeline.mjs.map +1 -0
  133. package/fesm2022/mesgflow-ui-kit-toast.mjs +202 -0
  134. package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -0
  135. package/fesm2022/mesgflow-ui-kit-toggle.mjs +243 -0
  136. package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -0
  137. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +99 -0
  138. package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -0
  139. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +160 -0
  140. package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -0
  141. package/fesm2022/mesgflow-ui-kit-tour.mjs +272 -0
  142. package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -0
  143. package/fesm2022/mesgflow-ui-kit-tree-select.mjs +177 -0
  144. package/fesm2022/mesgflow-ui-kit-tree-select.mjs.map +1 -0
  145. package/fesm2022/mesgflow-ui-kit-tree.mjs +82 -0
  146. package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -0
  147. package/fesm2022/mesgflow-ui-kit.mjs +12851 -0
  148. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -0
  149. package/package.json +374 -0
  150. package/preset.css +20 -0
  151. package/tokens/color.css +693 -0
  152. package/tokens/contrast.css +68 -0
  153. package/tokens/elevation.css +68 -0
  154. package/tokens/motion.css +277 -0
  155. package/tokens/radius.css +69 -0
  156. package/tokens/typography.css +127 -0
  157. package/tokens.css +41 -0
  158. package/types/mesgflow-ui-kit-accordion.d.ts +42 -0
  159. package/types/mesgflow-ui-kit-alert.d.ts +60 -0
  160. package/types/mesgflow-ui-kit-avatar-group.d.ts +28 -0
  161. package/types/mesgflow-ui-kit-avatar.d.ts +23 -0
  162. package/types/mesgflow-ui-kit-badge.d.ts +39 -0
  163. package/types/mesgflow-ui-kit-banner.d.ts +42 -0
  164. package/types/mesgflow-ui-kit-box-input.d.ts +45 -0
  165. package/types/mesgflow-ui-kit-brand.d.ts +48 -0
  166. package/types/mesgflow-ui-kit-breadcrumb.d.ts +26 -0
  167. package/types/mesgflow-ui-kit-button-group.d.ts +17 -0
  168. package/types/mesgflow-ui-kit-button.d.ts +75 -0
  169. package/types/mesgflow-ui-kit-card.d.ts +71 -0
  170. package/types/mesgflow-ui-kit-chart.d.ts +242 -0
  171. package/types/mesgflow-ui-kit-checkbox.d.ts +17 -0
  172. package/types/mesgflow-ui-kit-chip.d.ts +46 -0
  173. package/types/mesgflow-ui-kit-code-block.d.ts +56 -0
  174. package/types/mesgflow-ui-kit-collapsible.d.ts +39 -0
  175. package/types/mesgflow-ui-kit-color-picker.d.ts +78 -0
  176. package/types/mesgflow-ui-kit-combobox.d.ts +74 -0
  177. package/types/mesgflow-ui-kit-command.d.ts +185 -0
  178. package/types/mesgflow-ui-kit-context-menu.d.ts +40 -0
  179. package/types/mesgflow-ui-kit-copy-button.d.ts +47 -0
  180. package/types/mesgflow-ui-kit-core.d.ts +508 -0
  181. package/types/mesgflow-ui-kit-date-picker.d.ts +215 -0
  182. package/types/mesgflow-ui-kit-description-list.d.ts +23 -0
  183. package/types/mesgflow-ui-kit-dialog.d.ts +342 -0
  184. package/types/mesgflow-ui-kit-divider.d.ts +23 -0
  185. package/types/mesgflow-ui-kit-dropzone.d.ts +47 -0
  186. package/types/mesgflow-ui-kit-empty-state.d.ts +18 -0
  187. package/types/mesgflow-ui-kit-field.d.ts +26 -0
  188. package/types/mesgflow-ui-kit-hover-card.d.ts +52 -0
  189. package/types/mesgflow-ui-kit-i18n-tr.d.ts +14 -0
  190. package/types/mesgflow-ui-kit-icon.d.ts +76 -0
  191. package/types/mesgflow-ui-kit-input.d.ts +186 -0
  192. package/types/mesgflow-ui-kit-kbd.d.ts +9 -0
  193. package/types/mesgflow-ui-kit-link.d.ts +20 -0
  194. package/types/mesgflow-ui-kit-menu.d.ts +53 -0
  195. package/types/mesgflow-ui-kit-number-input.d.ts +55 -0
  196. package/types/mesgflow-ui-kit-otp-input.d.ts +44 -0
  197. package/types/mesgflow-ui-kit-page-header.d.ts +31 -0
  198. package/types/mesgflow-ui-kit-pagination.d.ts +50 -0
  199. package/types/mesgflow-ui-kit-password-input.d.ts +33 -0
  200. package/types/mesgflow-ui-kit-popover.d.ts +62 -0
  201. package/types/mesgflow-ui-kit-progress.d.ts +32 -0
  202. package/types/mesgflow-ui-kit-radio.d.ts +59 -0
  203. package/types/mesgflow-ui-kit-rating.d.ts +56 -0
  204. package/types/mesgflow-ui-kit-scroll-area.d.ts +27 -0
  205. package/types/mesgflow-ui-kit-search-input.d.ts +72 -0
  206. package/types/mesgflow-ui-kit-segmented-control.d.ts +54 -0
  207. package/types/mesgflow-ui-kit-select.d.ts +89 -0
  208. package/types/mesgflow-ui-kit-sidebar.d.ts +224 -0
  209. package/types/mesgflow-ui-kit-skeleton.d.ts +29 -0
  210. package/types/mesgflow-ui-kit-slider.d.ts +40 -0
  211. package/types/mesgflow-ui-kit-spinner.d.ts +31 -0
  212. package/types/mesgflow-ui-kit-splitter.d.ts +40 -0
  213. package/types/mesgflow-ui-kit-stat-tile.d.ts +54 -0
  214. package/types/mesgflow-ui-kit-stepper.d.ts +48 -0
  215. package/types/mesgflow-ui-kit-switch.d.ts +34 -0
  216. package/types/mesgflow-ui-kit-table.d.ts +805 -0
  217. package/types/mesgflow-ui-kit-tabs.d.ts +269 -0
  218. package/types/mesgflow-ui-kit-tag-input.d.ts +33 -0
  219. package/types/mesgflow-ui-kit-theme-switcher.d.ts +27 -0
  220. package/types/mesgflow-ui-kit-theming.d.ts +745 -0
  221. package/types/mesgflow-ui-kit-time-picker.d.ts +54 -0
  222. package/types/mesgflow-ui-kit-timeline.d.ts +27 -0
  223. package/types/mesgflow-ui-kit-toast.d.ts +94 -0
  224. package/types/mesgflow-ui-kit-toggle.d.ts +110 -0
  225. package/types/mesgflow-ui-kit-toolbar.d.ts +52 -0
  226. package/types/mesgflow-ui-kit-tooltip.d.ts +55 -0
  227. package/types/mesgflow-ui-kit-tour.d.ts +66 -0
  228. package/types/mesgflow-ui-kit-tree-select.d.ts +65 -0
  229. package/types/mesgflow-ui-kit-tree.d.ts +44 -0
  230. package/types/mesgflow-ui-kit.d.ts +5444 -0
@@ -0,0 +1,624 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ import { InjectionToken, signal, inject, computed, isSignal, makeEnvironmentProviders } from '@angular/core';
4
+ import { enUS } from 'date-fns/locale';
5
+
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
+ function cn(...inputs) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+
11
+ /**
12
+ * Yazı yönü yardımcıları — `dir="rtl"` (öğede ya da bir atada) ya da CSS `direction` kalıtımı.
13
+ * Hesaplanan stil okunur: yön bir atadan gelse de doğru sonuç verir. SSR'de (stil yok) LTR.
14
+ */
15
+ function isRtl(el) {
16
+ return typeof getComputedStyle !== 'undefined' && getComputedStyle(el).direction === 'rtl';
17
+ }
18
+ /** İşaretçinin satır başından (LTR'de sol, RTL'de sağ kenar) oranı, 0–1 aralığına kırpılmış. */
19
+ function inlineStartRatio(clientX, rect, rtl) {
20
+ if (rect.width === 0)
21
+ return 0;
22
+ const fromLeft = (clientX - rect.left) / rect.width;
23
+ return Math.min(1, Math.max(0, rtl ? 1 - fromLeft : fromLeft));
24
+ }
25
+ /**
26
+ * Yatay kaydırmanın başlangıçtan uzaklığı. Modern tarayıcılarda RTL'de `scrollLeft` 0'dan
27
+ * NEGATİFE gider (başlangıç = 0, son = −max); mutlak değer iki yönde de "başlangıçtan uzaklık".
28
+ */
29
+ function scrollFromInlineStart(el) {
30
+ return Math.abs(el.scrollLeft);
31
+ }
32
+
33
+ /**
34
+ * Paylaşılan class reçeteleri — kontrol/overlay/kapsayıcı bileşenlerinin
35
+ * TEKRAR TEKRAR yazdığı focus/disabled/boyut/yüzey kalıplarının TEK kaynağı
36
+ * (bkz. plan Faz 1a/1b). Öncesinde 5 farklı disabled reçetesi, 4 farklı
37
+ * focus-offset kombinasyonu ve 9 elle yazılmış `h-8`/`h-9`/`h-10` sabiti
38
+ * vardı — her biri kendi kopyasını sürüklüyordu (gerçek bulgu). Bileşenler
39
+ * bunları `cn()` ile kendi özel class'larıyla birleştirir (`cn()` twMerge
40
+ * kullandığı için çakışan Tailwind utility'leri güvenle çözülür).
41
+ */
42
+ /** `outline`+`outline-offset` tabanlı TEK focus mekanizması — bkz. `button.variants.ts`'in "Focus — tek mekanizma" notu. Box-shadow/ring KULLANMA. */
43
+ const focusRecipe = 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring';
44
+ /** Native `disabled` VE `aria-disabled` (ör. `@angular/aria` desenlerinin kullandığı) ikisini de kapsar — bkz. plan "Disabled 5 farklı reçete" bulgusu. */
45
+ const disabledRecipe = 'disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none aria-disabled:pointer-events-none aria-disabled:opacity-50';
46
+ /** 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
+ 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
+ /** `size: MfSize` eksenindeki TÜM kontrollerin ortak yükseklik/dolgu/font eşlemesi — bkz. `radius.css`'teki `--control-h-*` token'ları. */
49
+ const controlSize = {
50
+ sm: 'h-control-sm px-2.5 text-sm',
51
+ md: 'h-control-md px-3 text-sm',
52
+ lg: 'h-control-lg px-3.5 text-base',
53
+ };
54
+ /**
55
+ * Popover/Menu/Select/Combobox/... overlay panellerinin ortak kabuğu — BORDER-
56
+ * FIRST (2026-09 Deep Emerald geçişi, kullanıcı kararıyla eski "light modda
57
+ * kenarlıksız, sadece gölge" ilkesinin YERİNE geçti): iki modda da
58
+ * `border-hairline` (color.css — %8-12 opak marka-tonlu 1px çizgi) + `shadow-2`.
59
+ * Ağır/bulanık gölge yerine ince çizgi "premium" hissi artık BÖYLE veriliyor.
60
+ */
61
+ const overlaySurface = 'rounded-lg border border-hairline bg-overlay shadow-2';
62
+ /** Card/Table/StatTile gibi statik kapsayıcıların ortak kabuğu — BORDER-FIRST: iki modda da gölgesiz, sadece `border-hairline` (bkz. `overlaySurface`'in aynı gerekçesi). */
63
+ const containerSurface = 'rounded-lg border border-hairline bg-surface';
64
+ /**
65
+ * Mikro glassmorphism — Dialog/Sheet/Drawer paneli ve Toast öğeleri (bkz.
66
+ * `dialog.variants.ts`, `toast-host.ts`) bunu kullanır. `supports-[…]` ile
67
+ * `backdrop-filter` desteklenmediğinde düz `bg-surface`'e düşer (eski
68
+ * tarayıcı/headless test ortamı); `reduced-transparency:` (color.css'te
69
+ * tanımlı custom variant, `prefers-reduced-transparency: reduce` medya
70
+ * sorgusu) kullanıcı saydamlığı azalt istediğinde camı KAPATIR — WCAG 1.4.11
71
+ * "Non-text Contrast" ve hareket/saydamlık duyarlılığı için. Tüketici kendi
72
+ * `border`/`rounded-*` genişliğini üstüne ekler.
73
+ */
74
+ const glassSurface = 'border-hairline bg-surface supports-[backdrop-filter]:bg-glass supports-[backdrop-filter]:backdrop-blur-md reduced-transparency:bg-surface reduced-transparency:backdrop-blur-none';
75
+ /** `hasError`/`aria-invalid` durumundaki form kontrolleri için — `controlSurface` İLE BİRLİKTE, üstüne eklenir. */
76
+ const errorRecipe = 'border-danger focus-within:border-danger focus-visible:outline-danger';
77
+ /**
78
+ * Renk/gölge geçişlerinin TEK hareket dili — `ease-emphasis` kitin kendi eğrisi
79
+ * (bkz. `motion.css`), tarayıcı varsayılanı `ease` DEĞİL. Öncesinde ~35 yerde
80
+ * `transition-colors duration-fast` easing'siz kullanılıyordu (gerçek bulgu,
81
+ * bkz. plan Faz 1c).
82
+ */
83
+ const transitionRecipe = 'transition-colors duration-fast ease-emphasis';
84
+ /** Basılı-hissi — `active:scale` ekseninde TEK reçete, disabled'da sıfırlanır. */
85
+ const pressRecipe = 'active:scale-[0.99] disabled:active:scale-100';
86
+
87
+ let seq = 0;
88
+ /**
89
+ * Bileşen örneği başına kararlı, benzersiz bir DOM id'si üretir —
90
+ * `aria-controls`/`aria-describedby`/`aria-activedescendant` gibi bağların
91
+ * her component klasöründe kendi elle sayaçlarını (bkz. `combobox.ts`'teki
92
+ * `comboboxIdSeq` — bu modül kullanıma girince oraya taşınacak) tekrar
93
+ * yazmasına gerek kalmasın diye. SSR'da hydration uyuşmazlığı YARATMAZ —
94
+ * her platformda modül yüklendiğinde sıfırdan başlar, sayaç deterministik.
95
+ */
96
+ function nextId(prefix) {
97
+ return `${prefix}-${++seq}`;
98
+ }
99
+
100
+ /**
101
+ * `registerOnChange`/`registerOnTouched`'ın HER `ControlValueAccessor`
102
+ * implementasyonunda BİREBİR aynı kalan gövdesini tek kaynağa indirger
103
+ * (bkz. Select/NumberInput/Combobox/ColorPicker'ın öncesi — 4+ kopya, plan
104
+ * Faz 2 "CVA tamamlama" notu). Alt sınıf SADECE `writeValue`'yu (kendi
105
+ * `model`/`signal`'ına yazan) tanımlar VE kendi `NG_VALUE_ACCESSOR`
106
+ * provider'ını `@Component`'ında bildirir — `forwardRef(() => AltSınıf)`
107
+ * somut sınıfa ihtiyaç duyduğu için provider MİRAS ALINAMAZ.
108
+ *
109
+ * Düz bir soyut sınıf (Angular `@Directive()` DEĞİL) — `inject()` ya da
110
+ * yaşam döngüsü kancası kullanmıyor, sadece alan/metot mirası; `@Directive()`
111
+ * sarmalamak gereksiz karmaşıklık olurdu.
112
+ */
113
+ class ValueAccessorBase {
114
+ onChange = () => { };
115
+ onTouched = () => { };
116
+ registerOnChange(fn) {
117
+ this.onChange = fn;
118
+ }
119
+ registerOnTouched(fn) {
120
+ this.onTouched = fn;
121
+ }
122
+ }
123
+
124
+ /**
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.
130
+ *
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ı.
136
+ */
137
+ 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
+ ];
251
+ }
252
+ }
253
+
254
+ function isPlainObject(value) {
255
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
256
+ }
257
+ /** `base`'i `override`'daki tanımlı yapraklarla değiştirir — dizi yok, her düğüm ya iç içe nesne ya string, sığ `Object.assign` yerine gerçek derin birleştirme gerekiyor (bkz. `provide.ts`). Generic'i `Record<string, unknown>`'a KISITLAMIYOR BİLEREK — `MfLabels` gibi index-signature'ı olmayan named interface'ler o kısıtla uyuşmuyor (bkz. TS2345), bunun yerine iç kısımda cast ediliyor. */
258
+ function mergeLabels(base, override) {
259
+ if (!override)
260
+ return base;
261
+ if (!isPlainObject(base) || !isPlainObject(override))
262
+ return override;
263
+ const baseObj = base;
264
+ const overrideObj = override;
265
+ const result = { ...baseObj };
266
+ for (const key of Object.keys(overrideObj)) {
267
+ const overrideValue = overrideObj[key];
268
+ if (overrideValue === undefined)
269
+ continue;
270
+ result[key] = mergeLabels(baseObj[key], overrideValue);
271
+ }
272
+ return result;
273
+ }
274
+
275
+ /**
276
+ * `MF_LABELS`'ın varsayılan değeri — hiçbir `provideMesgflowUi()` çağrısı
277
+ * olmayan bir tüketici uygulamada bileşenler bu İngilizce metinlerle çalışır
278
+ * (bkz. CLAUDE.md/plan kararı: "bileşen varsayılan metinleri İngilizce").
279
+ * Türkçe çeviri kümesi için bkz. `@mesgflow/ui-kit/i18n/tr`'nin `mfLabelsTr`'si —
280
+ * bu iki dosya AYNI şekli (bkz. `labels.ts`), farklı değerleri taşır.
281
+ */
282
+ const mfLabelsEn = {
283
+ common: {
284
+ loading: 'Loading',
285
+ clear: 'Clear',
286
+ remove: 'Remove',
287
+ },
288
+ dialog: {
289
+ close: 'Close',
290
+ resize: 'Resize',
291
+ fullscreenEnter: 'Enter fullscreen',
292
+ fullscreenExit: 'Exit fullscreen',
293
+ confirmOk: 'OK',
294
+ confirmCancel: 'Cancel',
295
+ confirmConfirm: 'Confirm',
296
+ confirmDelete: 'Delete',
297
+ errorGeneric: 'Something went wrong. Please try again.',
298
+ discard: {
299
+ title: 'Unsaved changes',
300
+ content: 'Closing this panel will discard what you entered.',
301
+ confirm: 'Discard and close',
302
+ cancel: 'Keep editing',
303
+ },
304
+ },
305
+ datePicker: {
306
+ today: 'Today',
307
+ clear: 'Clear',
308
+ apply: 'Apply',
309
+ previousMonth: 'Previous month',
310
+ nextMonth: 'Next month',
311
+ previousYear: 'Previous year',
312
+ nextYear: 'Next year',
313
+ chooseMonth: 'Choose month',
314
+ chooseYear: 'Choose year',
315
+ startDate: 'Start',
316
+ endDate: 'End',
317
+ placeholder: 'mm/dd/yyyy',
318
+ presetToday: 'Today',
319
+ presetLast7: 'Last 7 days',
320
+ presetLast30: 'Last 30 days',
321
+ presetThisMonth: 'This month',
322
+ },
323
+ timePicker: {
324
+ placeholder: 'hh:mm',
325
+ clear: 'Clear',
326
+ },
327
+ table: {
328
+ searchPlaceholder: 'Search...',
329
+ selectedCount: 'selected',
330
+ edit: 'Edit',
331
+ delete: 'Delete',
332
+ clearSelection: 'Clear selection',
333
+ emptyTitle: 'No records',
334
+ emptyDescription: '',
335
+ noResultsTitle: 'No results found',
336
+ noResultsDescription: 'Try a different search or filter.',
337
+ clearFilters: 'Clear filters',
338
+ filterCount: 'filters',
339
+ selectAllAriaLabel: 'Select all',
340
+ selectRowAriaLabel: 'Select row',
341
+ actionsColumnLabel: 'Actions',
342
+ columns: 'Columns',
343
+ density: 'Density',
344
+ densityComfortable: 'Comfortable',
345
+ densityCompact: 'Compact',
346
+ resizeColumn: 'Resize column',
347
+ expandRow: 'Expand row',
348
+ collapseRow: 'Collapse row',
349
+ filter: {
350
+ addFilter: 'Filter',
351
+ searchField: 'Search field...',
352
+ noField: 'No field found',
353
+ operator: 'Operator',
354
+ value: 'Value',
355
+ apply: 'Apply',
356
+ enterHint: 'Enter',
357
+ clearAll: 'Clear',
358
+ and: 'AND',
359
+ or: 'OR',
360
+ remove: 'Remove',
361
+ back: 'Back',
362
+ dateToday: 'Today',
363
+ dateLast7: 'Last 7 days',
364
+ dateLast30: 'Last 30 days',
365
+ dateThisMonth: 'This month',
366
+ dateCustom: 'Custom range',
367
+ dateFrom: 'Start',
368
+ dateTo: 'End',
369
+ operators: {
370
+ equal: 'equals',
371
+ notEqual: 'not equal to',
372
+ greaterThan: 'greater than',
373
+ greaterOrEqual: 'greater than or equal to',
374
+ lessThan: 'less than',
375
+ lessOrEqual: 'less than or equal to',
376
+ contains: 'contains',
377
+ startsWith: 'starts with',
378
+ endsWith: 'ends with',
379
+ in: 'is one of',
380
+ isNull: 'is empty',
381
+ isNotNull: 'is not empty',
382
+ between: 'is between',
383
+ },
384
+ },
385
+ pagination: {
386
+ records: 'records',
387
+ perPage: 'per page',
388
+ page: 'Page',
389
+ previous: 'Previous',
390
+ next: 'Next',
391
+ first: 'First page',
392
+ last: 'Last page',
393
+ pageSizeAriaLabel: 'Page size',
394
+ navAriaLabel: 'Pagination',
395
+ jumpToPage: 'Jump to page',
396
+ go: 'Go',
397
+ },
398
+ },
399
+ sidebar: {
400
+ collapse: 'Collapse menu',
401
+ expand: 'Expand menu',
402
+ switchTenant: 'Switch tenant',
403
+ noTenants: 'No tenants found',
404
+ noUser: 'Not signed in',
405
+ nav: 'Main navigation',
406
+ },
407
+ tabs: {
408
+ scrollStart: 'Scroll back',
409
+ scrollEnd: 'Scroll forward',
410
+ close: 'Close',
411
+ },
412
+ dropzone: {
413
+ label: 'Drag files here or click to browse',
414
+ },
415
+ colorPicker: {
416
+ ariaLabel: 'Pick color',
417
+ hexAriaLabel: 'Hex color code',
418
+ pickFromScreenAriaLabel: 'Pick color from screen',
419
+ },
420
+ boxInput: {
421
+ top: 'Top',
422
+ right: 'Right',
423
+ bottom: 'Bottom',
424
+ left: 'Left',
425
+ linkSides: 'Link sides',
426
+ unlinkSides: 'Unlink sides',
427
+ },
428
+ combobox: {
429
+ placeholder: 'Search...',
430
+ noResults: 'No results',
431
+ },
432
+ select: {
433
+ placeholder: 'Select',
434
+ },
435
+ searchInput: {
436
+ placeholder: 'Search...',
437
+ ariaLabel: 'Search',
438
+ clearAriaLabel: 'Clear',
439
+ },
440
+ toast: {
441
+ dismiss: 'Dismiss',
442
+ },
443
+ otpInput: {
444
+ ariaLabel: 'One-time code',
445
+ },
446
+ stepper: {
447
+ ariaLabel: 'Steps',
448
+ },
449
+ progress: {
450
+ ariaLabel: 'Progress',
451
+ },
452
+ passwordInput: {
453
+ show: 'Show',
454
+ hide: 'Hide',
455
+ },
456
+ chip: {
457
+ remove: 'Remove',
458
+ },
459
+ alert: {
460
+ dismiss: 'Dismiss',
461
+ },
462
+ breadcrumb: {
463
+ ariaLabel: 'Breadcrumb',
464
+ },
465
+ avatarGroup: {
466
+ overflowAriaLabel: 'more',
467
+ },
468
+ chart: {
469
+ showTable: 'Show as table',
470
+ showChart: 'Show as chart',
471
+ category: 'Category',
472
+ },
473
+ command: {
474
+ placeholder: 'Type a command or search…',
475
+ ariaLabel: 'Command palette',
476
+ empty: 'No results found.',
477
+ resultsCount: 'results',
478
+ navigate: 'to navigate',
479
+ select: 'to select',
480
+ close: 'to close',
481
+ },
482
+ characterCount: {
483
+ remaining: 'characters remaining',
484
+ overLimit: 'characters over the limit',
485
+ characters: 'characters',
486
+ },
487
+ copy: {
488
+ copy: 'Copy',
489
+ copied: 'Copied',
490
+ failed: 'Copy failed',
491
+ code: 'Code',
492
+ },
493
+ pagination: {
494
+ navAriaLabel: 'Pagination',
495
+ previous: 'Previous page',
496
+ next: 'Next page',
497
+ first: 'First page',
498
+ last: 'Last page',
499
+ page: 'Page',
500
+ },
501
+ tour: {
502
+ next: 'Next',
503
+ back: 'Back',
504
+ skip: 'Skip tour',
505
+ done: 'Done',
506
+ stepOf: 'of',
507
+ },
508
+ rating: {
509
+ ariaLabel: 'Rating',
510
+ outOf: 'out of',
511
+ },
512
+ themeSwitcher: {
513
+ ariaLabel: 'Color theme',
514
+ light: 'Light',
515
+ dark: 'Dark',
516
+ system: 'System',
517
+ },
518
+ treeSelect: {
519
+ placeholder: 'Select',
520
+ searchPlaceholder: 'Search…',
521
+ noResults: 'No results',
522
+ },
523
+ };
524
+
525
+ /**
526
+ * Kitin TEK metin kaynağı — `provideMesgflowUi()` (bkz. `provide.ts`)
527
+ * `provide` etmezse tüketici İngilizce varsayılanlarla çalışır (ng-zorro'nun
528
+ * `NZ_I18N`'i / PrimeNG'nin `providePrimeNG` config'iyle aynı desen — bu kit
529
+ * daha önce sadece Dialog için uyguluyordu, `MF_DIALOG_LABELS` artık bu
530
+ * token'dan türeyen bir "seçici" — bkz. aşağıdaki `labelToken`).
531
+ */
532
+ const MF_LABELS = new InjectionToken('mesgflow.labels', {
533
+ factory: () => signal(mfLabelsEn),
534
+ });
535
+ /** Calendar/DatePicker'ın ay/gün adları için — varsayılan `enUS`, `provideMesgflowUi({ dateLocale })` ile değiştirilir. */
536
+ const MF_DATE_LOCALE = new InjectionToken('mesgflow.date-locale', {
537
+ factory: () => signal(enUS),
538
+ });
539
+ /**
540
+ * `MF_LABELS`'ın bir alt-alanına daralan, reaktif bir "seçici" token üretir
541
+ * — her bileşen ailesi umbrella nesnenin TAMAMINI değil sadece kendi
542
+ * alanını inject eder. `computed()` içindeki `labels` referansı DIŞARIDA
543
+ * (factory'nin senkron gövdesinde) `inject()` edildiği için geçerli bir DI
544
+ * bağlamında çözülüyor; `computed`'ın kendi callback'i içinde `inject()`
545
+ * çağırmak ÇALIŞMAZ (lazy değerlendirme DI bağlamının dışında kalır).
546
+ */
547
+ function labelToken(key, name) {
548
+ return new InjectionToken(`mesgflow.${name}-labels`, {
549
+ factory: () => {
550
+ const labels = inject(MF_LABELS);
551
+ return computed(() => labels()[key]);
552
+ },
553
+ });
554
+ }
555
+ const MF_COMMON_LABELS = labelToken('common', 'common');
556
+ const MF_DIALOG_LABELS = labelToken('dialog', 'dialog');
557
+ const MF_DATE_PICKER_LABELS = labelToken('datePicker', 'date-picker');
558
+ const MF_TIME_PICKER_LABELS = labelToken('timePicker', 'time-picker');
559
+ const MF_TABLE_LABELS = labelToken('table', 'table');
560
+ const MF_SIDEBAR_LABELS = labelToken('sidebar', 'sidebar');
561
+ const MF_TABS_LABELS = labelToken('tabs', 'tabs');
562
+ const MF_DROPZONE_LABELS = labelToken('dropzone', 'dropzone');
563
+ const MF_COLOR_PICKER_LABELS = labelToken('colorPicker', 'color-picker');
564
+ const MF_BOX_INPUT_LABELS = labelToken('boxInput', 'box-input');
565
+ const MF_COMBOBOX_LABELS = labelToken('combobox', 'combobox');
566
+ const MF_SELECT_LABELS = labelToken('select', 'select');
567
+ const MF_SEARCH_INPUT_LABELS = labelToken('searchInput', 'search-input');
568
+ const MF_TOAST_LABELS = labelToken('toast', 'toast');
569
+ const MF_OTP_INPUT_LABELS = labelToken('otpInput', 'otp-input');
570
+ const MF_STEPPER_LABELS = labelToken('stepper', 'stepper');
571
+ const MF_PROGRESS_LABELS = labelToken('progress', 'progress');
572
+ const MF_PASSWORD_INPUT_LABELS = labelToken('passwordInput', 'password-input');
573
+ const MF_CHIP_LABELS = labelToken('chip', 'chip');
574
+ const MF_ALERT_LABELS = labelToken('alert', 'alert');
575
+ const MF_BREADCRUMB_LABELS = labelToken('breadcrumb', 'breadcrumb');
576
+ const MF_AVATAR_GROUP_LABELS = labelToken('avatarGroup', 'avatar-group');
577
+ const MF_CHART_LABELS = labelToken('chart', 'chart');
578
+ const MF_COMMAND_LABELS = labelToken('command', 'command');
579
+ const MF_CHARACTER_COUNT_LABELS = labelToken('characterCount', 'character-count');
580
+ const MF_COPY_LABELS = labelToken('copy', 'copy');
581
+ const MF_PAGINATION_LABELS = labelToken('pagination', 'pagination');
582
+ const MF_TOUR_LABELS = labelToken('tour', 'tour');
583
+ const MF_RATING_LABELS = labelToken('rating', 'rating');
584
+ const MF_THEME_SWITCHER_LABELS = labelToken('themeSwitcher', 'theme-switcher');
585
+ const MF_TREE_SELECT_LABELS = labelToken('treeSelect', 'tree-select');
586
+
587
+ /**
588
+ * `app.config.ts`'in `providers` dizisine eklenir — `MF_LABELS`/`MF_DATE_LOCALE`'ı
589
+ * (ve bunlardan türeyen `MF_DIALOG_LABELS`/`MF_TABLE_LABELS`/… seçici
590
+ * token'larını, bkz. `tokens.ts`) tüketicinin verdiği değerlerle sağlar.
591
+ * Hiç çağrılmazsa kit İngilizce varsayılanlarla (`mfLabelsEn`, `enUS`) çalışır.
592
+ *
593
+ * ```ts
594
+ * import { provideMesgflowUi } from '@mesgflow/ui-kit';
595
+ * import { mfLabelsTr } from '@mesgflow/ui-kit/i18n/tr';
596
+ * import { tr } from 'date-fns/locale';
597
+ *
598
+ * providers: [provideMesgflowUi({ labels: mfLabelsTr, dateLocale: tr })]
599
+ * ```
600
+ */
601
+ function provideMesgflowUi(options = {}) {
602
+ const providers = [];
603
+ if (options.labels !== undefined) {
604
+ const labelsOption = options.labels;
605
+ providers.push({
606
+ provide: MF_LABELS,
607
+ useFactory: () => isSignal(labelsOption)
608
+ ? computed(() => mergeLabels(mfLabelsEn, labelsOption()))
609
+ : signal(mergeLabels(mfLabelsEn, labelsOption)),
610
+ });
611
+ }
612
+ if (options.dateLocale) {
613
+ const dateLocale = options.dateLocale;
614
+ providers.push({ provide: MF_DATE_LOCALE, useFactory: () => signal(dateLocale) });
615
+ }
616
+ return makeEnvironmentProviders(providers);
617
+ }
618
+
619
+ /**
620
+ * Generated bundle index. Do not edit.
621
+ */
622
+
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 };
624
+ //# sourceMappingURL=mesgflow-ui-kit-core.mjs.map