@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,745 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { InjectionToken, Provider } from '@angular/core';
3
+
4
+ type RampStep = '50' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | '950';
5
+ type AccentRamp = Record<RampStep, string>;
6
+ declare const RAMP_STEPS: readonly RampStep[];
7
+ /**
8
+ * `hex` bir accent'in "600 basamağı" gibi ele alınır (kitin kendi kuralı,
9
+ * bkz. `color.css` "Her rampada basamak 600 = LIGHT modda dolu/etkileşimli
10
+ * kullanım" notu) — girdinin hue'su + kroma karakteri korunur, tüm 11
11
+ * basamak `LIGHTNESS_BY_STEP`/`CHROMA_MULTIPLIER_BY_STEP` sabit eğrisiyle
12
+ * YENİDEN üretilir (girdinin TAM OLARAK 600'e denk gelen bir L'de olması
13
+ * ŞART DEĞİL — ör. çok açık bir hex verilse bile 950 basamağı yine
14
+ * "neredeyse siyah" çıkar, ramp her zaman tutarlı).
15
+ *
16
+ * @throws girdi `#rgb`/`#rrggbb` değilse.
17
+ */
18
+ declare function createAccentRamp(hex: string): AccentRamp;
19
+ /**
20
+ * Bir rampa basamağının üstüne binecek metin rengi — `#ffffff` veya kitin
21
+ * `--mf-surface-inverse`'i (`#04110d`, `color.css`) arasından HANGİSİ WCAG
22
+ * kontrastı daha yüksekse. `theming/apply.ts`'teki `accentRoleLines()` bunu
23
+ * `ramp['600']` (LIGHT yarı) VE `ramp['400']` (DARK yarı) için AYRI AYRI
24
+ * çağırır — accent-fill artık İKİ basamak kullanıyor (kitin varsayılanında
25
+ * 900/400, tüketici aksanlarında 600/400), genelde çok farklı parlaklıkta,
26
+ * her biri kendi doğru metin rengini WCAG hesabıyla (sabit varsayım DEĞİL)
27
+ * bulur.
28
+ */
29
+ declare function fgOnAccent(accentHex: string): string;
30
+ /** `ramp`'in `600` basamağının kontrast oranını (beyaz metne karşı) döner — `ramp.spec.ts`/tüketici sağlık kontrolü için. */
31
+ declare function accentContrastWithWhite(ramp: AccentRamp): number;
32
+
33
+ type RadiusScale = 'sharp' | 'default' | 'soft';
34
+ /** Kontrol yüksekliği merdiveni (sm/md/lg): `compact` 28/32/36px, `default` 32/36/40px, `comfortable` 36/40/44px — bkz. `radius.css` `--control-h-*`. */
35
+ type MfDensity = 'compact' | 'default' | 'comfortable';
36
+ type NeutralTint = 'cool' | 'neutral' | 'warm';
37
+ /**
38
+ * Nötr rampa 13 basamaklı (`850`/`975` DAHİL) — diğer altı rampanın (primary/
39
+ * success/warning/danger/info/help) 11 basamaklık `RampStep`'inden AYRI bir
40
+ * tip (bkz. `color.css` "RENK — HAM RAMPALAR" notu, `NEUTRAL_STEPS` — `apply.ts`).
41
+ */
42
+ declare const MF_NEUTRAL_RAMP_STEPS: readonly ["50", "100", "200", "300", "400", "500", "600", "700", "800", "850", "900", "950", "975"];
43
+ type MfNeutralRampStep = (typeof MF_NEUTRAL_RAMP_STEPS)[number];
44
+ /** `ramps.<tone>` altında elle geçilebilen altı 11-basamaklı rampa — `neutral` (13 basamak) AYRI ele alınır. */
45
+ declare const MF_RAMP_TONES: readonly ["primary", "success", "warning", "danger", "info", "help"];
46
+ type MfRampTone = (typeof MF_RAMP_TONES)[number];
47
+ /**
48
+ * `color.css`'in rol katmanındaki, bir RAMPA basamağına `var()` İLE
49
+ * BAĞLI OLMAYAN (yani `ramps.*` override'ıyla OTOMATİK takip ETMEYEN) TEK
50
+ * TEK yazılmış literal token'lar — `accent`/`ramps.*` DIŞINDA kalan, marka
51
+ * beyaz etiketlemesi için hâlâ ayarlanabilir olması gereken son katman.
52
+ * (`--mf-accent`, `--mf-success-fill`, `--mf-success-tint` vb. BURADA YOK —
53
+ * hepsi zaten `ramps.primary`/`ramps.success` override'ıyla otomatik
54
+ * güncellenir, bkz. `color.css`'teki `var(--color-X-NNN)` referansları.)
55
+ */
56
+ declare const MF_ROLE_TOKENS: readonly ["surface", "chrome", "overlay", "surface-inverse", "glass", "fg", "fg-muted", "fg-on-accent", "fg-inverse", "hairline", "neutral-fill", "neutral-fill-hover", "neutral-fill-fg", "success-fill-fg", "warning-fill-fg", "danger-fill-fg", "info-fill-fg", "help-fill-fg", "chart-1", "chart-2", "chart-3", "chart-4", "chart-5", "chart-6", "chart-7", "chart-8", "chart-other"];
57
+ type MfRoleToken = (typeof MF_ROLE_TOKENS)[number];
58
+ /**
59
+ * Tam beyaz etiket tema tanımı — `applyMfTheme()`/`exportMfThemeCss()`'e
60
+ * verilir. HER alan OPSİYONEL; hiçbiri verilmezse kit kendi "Deep Emerald &
61
+ * Slate" varsayılanında kalır (bkz. `applyMfTheme` doc'u). Sadece VERİLEN
62
+ * alanlar `applyMfTheme`'de INLINE STYLE olarak YAZILIR — bir "tüm token
63
+ * dökümü" ÜRETİLMEZ/GEREKMEZ, bu yüzden kitin CSS kaynağıyla asla senkron
64
+ * DIŞI kalamaz (delta-only, bkz. dosya üstündeki mimari not).
65
+ *
66
+ * - `accent`/`radiusScale`/`neutralTint` — mevcut kısayollar (bkz. `apply.ts`).
67
+ * - `density` — kit genelinde kontrol yüksekliği (Button/Input/Select/...).
68
+ * Bir alt ağaç için `data-density="compact"` özniteliği de aynı işi yapar.
69
+ * - `ramps` — bir tonun TÜM basamaklarını (ya da bir kısmını) ELLE verir.
70
+ * `ramps.primary` verilirse `accent` kısayolunu (aynı çağrıda) EZER — TAM
71
+ * kontrol isteyen tüketiciler için. Bir tonun rampasını değiştirmek O
72
+ * tonun TÜM türetilmiş rol token'larını (`--mf-X`, `--mf-X-fill`,
73
+ * `--mf-X-tint` vb.) OTOMATİK günceller — `color.css`'in rol katmanı
74
+ * zaten `var(--color-X-NNN)` ile bu rampaya BAĞLI (bkz. dosya üstündeki
75
+ * `MfRoleToken` notu). Bu, TEK bir alanla ("ramps.danger") beş türetilmiş
76
+ * token'ı BİRDEN doğru şekilde güncelleyen ASIL güç kaynağı.
77
+ * - `roles` — rampaya BAĞLI OLMAYAN literal token'lar (bkz. `MfRoleToken`).
78
+ * `light`/`dark` AYRI verilir; SADECE biri verilirse İKİ modda da AYNI
79
+ * değer kullanılır (basit/öngörülebilir davranış — hangi modda olduğunu
80
+ * PROBE etmek yerine).
81
+ * - `fonts`/`radius` — moddan BAĞIMSIZ, düz değer.
82
+ */
83
+ interface MfThemeJson {
84
+ /** Doküman/editör amaçlı — JSON Schema referansı (bkz. `schema.ts`). Kit tarafından OKUNMAZ. */
85
+ $schema?: string;
86
+ /** İnsan-okur isim (ör. "Acme Kurumsal") — kit tarafından OKUNMAZ, sadece bir tema seçici/listesi için. */
87
+ name?: string;
88
+ accent?: string | null;
89
+ radiusScale?: RadiusScale;
90
+ density?: MfDensity;
91
+ neutralTint?: NeutralTint;
92
+ ramps?: Partial<Record<MfRampTone, Partial<Record<RampStep, string>>>> & {
93
+ neutral?: Partial<Record<MfNeutralRampStep, string>>;
94
+ };
95
+ roles?: {
96
+ light?: Partial<Record<MfRoleToken, string>>;
97
+ dark?: Partial<Record<MfRoleToken, string>>;
98
+ };
99
+ fonts?: {
100
+ sans?: string;
101
+ display?: string;
102
+ mono?: string;
103
+ };
104
+ radius?: Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', string>>;
105
+ }
106
+ /** `MfThemeJson`'ın eski adı — `applyMfTheme({accent, radiusScale, neutralTint})` şeklindeki MEVCUT çağrılar (kısayol alt kümesi) hâlâ geçerli, bu takma ad SADECE geriye dönük TİP uyumluluğu için. */
107
+ type MfThemeConfig = MfThemeJson;
108
+
109
+ /**
110
+ * `MfThemeJson`'ı CSS custom property'leri olarak `target`'a (varsayılan
111
+ * `document.documentElement`) YAZAR — sayfa YENİDEN YÜKLENMEDEN, hiçbir
112
+ * bileşen dosyasına dokunmadan tüm kit anında yeni temaya geçer. Bunun
113
+ * mümkün olmasının nedeni: Tailwind v4'ün ürettiği utility'ler (`bg-primary-600`,
114
+ * `rounded-md`, ...) derleme zamanında SABİT bir değere değil, doğrudan
115
+ * `var(--color-primary-600)`/`var(--radius-md)` REFERANSINA derleniyor (bkz.
116
+ * `docs/tr/mimari.md` "Token mimarisi") — CSS cascade'de bu satırlar
117
+ * `@theme`'in KENDİ tanımından SONRA (inline stil her zaman kazanır)
118
+ * çalıştığı için token'lar üzerinden TÜM bileşenler güncellenir. SADECE
119
+ * `config`'te VERİLEN alanlar yazılır ("delta-only") — bu fonksiyon kitin
120
+ * TÜM varsayılan token setini bilmek/üretmek ZORUNDA DEĞİL, bu yüzden
121
+ * kitin CSS kaynağıyla asla senkron dışı kalamaz.
122
+ *
123
+ * - `accent` verilirse: `createAccentRamp()` ile 11 basamaklı `--color-primary-*`
124
+ * YENİDEN üretilir + `accentRoleLines()` (`--mf-fg-on-accent`/`-accent-fill`/
125
+ * `-accent-fill-hover`, `light-dark()` literal değerleri — bkz. altta).
126
+ * `:root`/`.dark` bunları zaten `var()` ile referans aldığı için (bkz.
127
+ * `color.css` rol katmanı) `--mf-accent`/`--mf-accent-strong`/`--mf-focus-ring`/
128
+ * `--mf-primary-tint(-fg)` AYRICA yazılmaz — otomatik takip eder.
129
+ * - `accent: null` verilirse: yukarıdaki override'ların HEPSİ temizlenir, kit
130
+ * `color.css`'teki varsayılan "Deep Emerald" rampasına döner.
131
+ * - `ramps.primary` verilirse (`accent`'i EZER — aynı çağrıda ikisi de
132
+ * verilirse `ramps.primary` kazanır): basamak başına TAM kontrol, kısmi
133
+ * olabilir (`resolvedPrimaryRamp` ile O ANKİ değerlerle birleştirilir).
134
+ * - `ramps.success`/`warning`/`danger`/`info`/`help`/`neutral` verilirse:
135
+ * verilen basamaklar DOĞRUDAN yazılır — bu tonların TÜM türetilmiş rol
136
+ * token'ları (`--mf-X`, `--mf-X-fill`, `--mf-X-tint` vb.) `color.css`'te
137
+ * zaten `var(--color-X-NNN)` ile bu rampaya bağlı, OTOMATİK güncellenir.
138
+ * - `roles.light`/`roles.dark` verilirse: rampaya BAĞLI OLMAYAN literal
139
+ * token'lar (bkz. `MfRoleToken`) `light-dark()` ile yazılır.
140
+ * - `fonts`/`radius` verilirse: moddan bağımsız düz değerler yazılır —
141
+ * `radius` `radiusScale`'İN ÜSTÜNE (aynı çağrıda ikisi de verilirse SONRA
142
+ * uygulanır) basamak-bazlı ince ayar sağlar.
143
+ * - `radiusScale` verilirse: `--radius-{xs,sm,md,lg,xl}` nested ölçeği
144
+ * KORUYARAK (bkz. `radius.css` doktrini) birlikte küçülür/büyür.
145
+ * - `density` verilirse: `--control-h-{sm,md,lg}` merdiveni yazılır — tüm
146
+ * kontroller (Button/Input/Select/...) aynı hizada birlikte büyür/küçülür.
147
+ * - `neutralTint` verilirse: 13 basamaklı `--color-neutral-*` rampası ÇOK
148
+ * düşük oranda (bkz. `color-math.ts` `mixHex`) soğuk/sıcak bir tona kayar
149
+ * — `ramps.neutral` AYNI ÇAĞRIDA verildiyse ONUN ÜSTÜNE uygulanır (bu
150
+ * fonksiyondaki sıra: ramps → neutralTint).
151
+ *
152
+ * SSR güvenli — `document` yoksa no-op.
153
+ */
154
+ declare function applyMfTheme(config: MfThemeJson, target?: HTMLElement): void;
155
+ /**
156
+ * `applyMfTheme()`'in YAZABİLECEĞİ HER inline override'ı temizler — bir
157
+ * tema özelleştiricideki "Varsayılana sıfırla" düğmesi için `accent: null`'ın
158
+ * genişletilmiş hali (o SADECE accent'i temizlerdi). Kit `color.css`'teki
159
+ * varsayılanlara TAMAMEN geri döner.
160
+ */
161
+ declare function resetMfTheme(target?: HTMLElement): void;
162
+ /**
163
+ * `applyMfTheme` ile AYNI hesaplamayı yapar ama runtime'da uygulamak yerine
164
+ * yapıştırılabilir bir `{ selector } { ... }` bloğu (varsayılan `:root`)
165
+ * döner — tüketici build-time'da kendi `styles.css`'ine ekleyebilir (docs
166
+ * sitesindeki tema özelleştiricinin "CSS'i kopyala" düğmesi bunu kullanır).
167
+ * `roles.*` İÇİN de (runtime'daki AYNI `light-dark()` deseni) tek blokla
168
+ * hem açık hem koyu mod kapsanır, AYRI bir `.dark` bloğu GEREKMEZ. `ramps.
169
+ * primary` KISMİ verilip 400/500/600/700'ün TAMAMI yoksa `--mf-accent-fill`
170
+ * vb. satırlar (canlı DOM'dan O ANKİ değeri okuyamadığı için) ATLANIR — bu
171
+ * durumda `applyMfTheme`'i (runtime, `resolvedPrimaryRamp` ile tamamlar)
172
+ * tercih edin. `neutralTint` BURADA desteklenmez — mevcut nötr değerleri
173
+ * okumak için canlı bir DOM/`getComputedStyle` gerekir, statik bir string
174
+ * üretici bunu bilemez (tüketici tint'i kendi `applyMfTheme()` çağrısıyla
175
+ * runtime'da uygulamalı).
176
+ */
177
+ declare function exportMfThemeCss(config: Omit<MfThemeJson, 'neutralTint'>, options?: {
178
+ selector?: string;
179
+ }): string;
180
+
181
+ type MfThemeIssueSeverity = 'error' | 'warning';
182
+ interface MfThemeIssue {
183
+ /** Hangi alanı işaret ediyor — ör. `"ramps.danger.600"`, `"accent"`. */
184
+ path: string;
185
+ message: string;
186
+ severity: MfThemeIssueSeverity;
187
+ }
188
+ /**
189
+ * `MfThemeJson`'ı iki açıdan denetler:
190
+ *
191
+ * 1. Her hex alanının GEÇERLİ bir `#rgb`/`#rrggbb` olup olmadığı.
192
+ * 2. `ramps.<tone>['600']` (kitin "dolu blok" LIGHT çapası, bkz. `color.css`
193
+ * rol katmanı doktrini — `X-fill-fg` her zaman `#ffffff` ya da mürekkep
194
+ * `#04110d`'den seçilir) verilen bir ton için NE beyaz NE mürekkep
195
+ * üstünde WCAG AA (4.5:1) sağlayan okunaklı bir metin rengi bulunup
196
+ * bulunamadığı — ikisi de başarısızsa bu basamak "çok orta tonlu", dolu
197
+ * blok üstünde okunaklı metin GARANTİSİ yok demektir. `accent` (`ramps.
198
+ * primary`/`createAccentRamp` + `fgOnAccent`) BU KONTROLE İHTİYAÇ
199
+ * DUYMAZ — `pickForeground` HER ZAMAN iki adaydan daha iyisini seçtiği
200
+ * için kontrast garantisi İNŞA GEREĞİ var (bkz. `apply.ts`
201
+ * `accentRoleLines`).
202
+ *
203
+ * Şema/yapı hatalarını (bilinmeyen alan vb.) DENETLEMEZ — TypeScript
204
+ * derleme zamanında zaten yakalar; `MfThemeJson` harici bir kaynaktan (ör.
205
+ * `JSON.parse`, bir tema dosyası yükleme formu) geliyorsa bu fonksiyon
206
+ * SADECE değer-düzeyi sorunları (geçersiz hex, düşük kontrast) yakalar.
207
+ */
208
+ declare function validateMfTheme(theme: MfThemeJson): MfThemeIssue[];
209
+
210
+ /**
211
+ * `MfThemeJson`'ın JSON Schema (2020-12) tanımı — IDE otomatik tamamlama
212
+ * (`"$schema"` alanı) ve harici doğrulayıcılar (ajv vb.) için. Düz bir JS
213
+ * nesnesi olarak dışa açılıyor — kitin sıfır çalışma zamanı bağımlılığı
214
+ * ilkesi gereği (bkz. `projects/ui-kit/README.md` "Bağımlılık politikası")
215
+ * hiçbir şema doğrulama KÜTÜPHANESİ KULLANILMIYOR/GEREKTİRİLMİYOR; asıl
216
+ * DEĞER-düzeyi doğrulama (geçerli hex, WCAG kontrastı) `validateMfTheme()`
217
+ * (bkz. `validate.ts`) tarafında, bu şema SADECE YAPISAL/tip doğrulaması
218
+ * içindir — `@mesgflow/email-core`'un `EMAIL_DOCUMENT_JSON_SCHEMA`'sıyla
219
+ * AYNI desen.
220
+ */
221
+ declare const MF_THEME_JSON_SCHEMA: {
222
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
223
+ readonly $id: "https://hurdenizyener.github.io/mesgflow-ui-kit/schema/theme.json";
224
+ readonly title: "MesgFlow ui theme";
225
+ readonly description: "Tam beyaz etiket tema tanımı — applyMfTheme()/exportMfThemeCss()e verilir. Her alan opsiyonel.";
226
+ readonly type: "object";
227
+ readonly additionalProperties: false;
228
+ readonly properties: {
229
+ readonly $schema: {
230
+ readonly type: "string";
231
+ };
232
+ readonly name: {
233
+ readonly type: "string";
234
+ };
235
+ readonly accent: {
236
+ readonly oneOf: readonly [{
237
+ readonly type: "string";
238
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
239
+ }, {
240
+ readonly type: "null";
241
+ }];
242
+ };
243
+ readonly radiusScale: {
244
+ readonly enum: readonly ["sharp", "default", "soft"];
245
+ };
246
+ readonly density: {
247
+ readonly enum: readonly ["compact", "default", "comfortable"];
248
+ };
249
+ readonly neutralTint: {
250
+ readonly enum: readonly ["cool", "neutral", "warm"];
251
+ };
252
+ readonly ramps: {
253
+ readonly type: "object";
254
+ readonly additionalProperties: false;
255
+ readonly properties: {
256
+ readonly primary: {
257
+ readonly type: "object";
258
+ readonly additionalProperties: false;
259
+ readonly properties: {
260
+ readonly '50': {
261
+ readonly type: "string";
262
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
263
+ };
264
+ readonly '100': {
265
+ readonly type: "string";
266
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
267
+ };
268
+ readonly '200': {
269
+ readonly type: "string";
270
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
271
+ };
272
+ readonly '300': {
273
+ readonly type: "string";
274
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
275
+ };
276
+ readonly '400': {
277
+ readonly type: "string";
278
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
279
+ };
280
+ readonly '500': {
281
+ readonly type: "string";
282
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
283
+ };
284
+ readonly '600': {
285
+ readonly type: "string";
286
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
287
+ };
288
+ readonly '700': {
289
+ readonly type: "string";
290
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
291
+ };
292
+ readonly '800': {
293
+ readonly type: "string";
294
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
295
+ };
296
+ readonly '900': {
297
+ readonly type: "string";
298
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
299
+ };
300
+ readonly '950': {
301
+ readonly type: "string";
302
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
303
+ };
304
+ };
305
+ };
306
+ readonly success: {
307
+ readonly type: "object";
308
+ readonly additionalProperties: false;
309
+ readonly properties: {
310
+ readonly '50': {
311
+ readonly type: "string";
312
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
313
+ };
314
+ readonly '100': {
315
+ readonly type: "string";
316
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
317
+ };
318
+ readonly '200': {
319
+ readonly type: "string";
320
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
321
+ };
322
+ readonly '300': {
323
+ readonly type: "string";
324
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
325
+ };
326
+ readonly '400': {
327
+ readonly type: "string";
328
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
329
+ };
330
+ readonly '500': {
331
+ readonly type: "string";
332
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
333
+ };
334
+ readonly '600': {
335
+ readonly type: "string";
336
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
337
+ };
338
+ readonly '700': {
339
+ readonly type: "string";
340
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
341
+ };
342
+ readonly '800': {
343
+ readonly type: "string";
344
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
345
+ };
346
+ readonly '900': {
347
+ readonly type: "string";
348
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
349
+ };
350
+ readonly '950': {
351
+ readonly type: "string";
352
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
353
+ };
354
+ };
355
+ };
356
+ readonly warning: {
357
+ readonly type: "object";
358
+ readonly additionalProperties: false;
359
+ readonly properties: {
360
+ readonly '50': {
361
+ readonly type: "string";
362
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
363
+ };
364
+ readonly '100': {
365
+ readonly type: "string";
366
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
367
+ };
368
+ readonly '200': {
369
+ readonly type: "string";
370
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
371
+ };
372
+ readonly '300': {
373
+ readonly type: "string";
374
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
375
+ };
376
+ readonly '400': {
377
+ readonly type: "string";
378
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
379
+ };
380
+ readonly '500': {
381
+ readonly type: "string";
382
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
383
+ };
384
+ readonly '600': {
385
+ readonly type: "string";
386
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
387
+ };
388
+ readonly '700': {
389
+ readonly type: "string";
390
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
391
+ };
392
+ readonly '800': {
393
+ readonly type: "string";
394
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
395
+ };
396
+ readonly '900': {
397
+ readonly type: "string";
398
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
399
+ };
400
+ readonly '950': {
401
+ readonly type: "string";
402
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
403
+ };
404
+ };
405
+ };
406
+ readonly danger: {
407
+ readonly type: "object";
408
+ readonly additionalProperties: false;
409
+ readonly properties: {
410
+ readonly '50': {
411
+ readonly type: "string";
412
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
413
+ };
414
+ readonly '100': {
415
+ readonly type: "string";
416
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
417
+ };
418
+ readonly '200': {
419
+ readonly type: "string";
420
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
421
+ };
422
+ readonly '300': {
423
+ readonly type: "string";
424
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
425
+ };
426
+ readonly '400': {
427
+ readonly type: "string";
428
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
429
+ };
430
+ readonly '500': {
431
+ readonly type: "string";
432
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
433
+ };
434
+ readonly '600': {
435
+ readonly type: "string";
436
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
437
+ };
438
+ readonly '700': {
439
+ readonly type: "string";
440
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
441
+ };
442
+ readonly '800': {
443
+ readonly type: "string";
444
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
445
+ };
446
+ readonly '900': {
447
+ readonly type: "string";
448
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
449
+ };
450
+ readonly '950': {
451
+ readonly type: "string";
452
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
453
+ };
454
+ };
455
+ };
456
+ readonly info: {
457
+ readonly type: "object";
458
+ readonly additionalProperties: false;
459
+ readonly properties: {
460
+ readonly '50': {
461
+ readonly type: "string";
462
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
463
+ };
464
+ readonly '100': {
465
+ readonly type: "string";
466
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
467
+ };
468
+ readonly '200': {
469
+ readonly type: "string";
470
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
471
+ };
472
+ readonly '300': {
473
+ readonly type: "string";
474
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
475
+ };
476
+ readonly '400': {
477
+ readonly type: "string";
478
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
479
+ };
480
+ readonly '500': {
481
+ readonly type: "string";
482
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
483
+ };
484
+ readonly '600': {
485
+ readonly type: "string";
486
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
487
+ };
488
+ readonly '700': {
489
+ readonly type: "string";
490
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
491
+ };
492
+ readonly '800': {
493
+ readonly type: "string";
494
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
495
+ };
496
+ readonly '900': {
497
+ readonly type: "string";
498
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
499
+ };
500
+ readonly '950': {
501
+ readonly type: "string";
502
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
503
+ };
504
+ };
505
+ };
506
+ readonly help: {
507
+ readonly type: "object";
508
+ readonly additionalProperties: false;
509
+ readonly properties: {
510
+ readonly '50': {
511
+ readonly type: "string";
512
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
513
+ };
514
+ readonly '100': {
515
+ readonly type: "string";
516
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
517
+ };
518
+ readonly '200': {
519
+ readonly type: "string";
520
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
521
+ };
522
+ readonly '300': {
523
+ readonly type: "string";
524
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
525
+ };
526
+ readonly '400': {
527
+ readonly type: "string";
528
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
529
+ };
530
+ readonly '500': {
531
+ readonly type: "string";
532
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
533
+ };
534
+ readonly '600': {
535
+ readonly type: "string";
536
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
537
+ };
538
+ readonly '700': {
539
+ readonly type: "string";
540
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
541
+ };
542
+ readonly '800': {
543
+ readonly type: "string";
544
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
545
+ };
546
+ readonly '900': {
547
+ readonly type: "string";
548
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
549
+ };
550
+ readonly '950': {
551
+ readonly type: "string";
552
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
553
+ };
554
+ };
555
+ };
556
+ readonly neutral: {
557
+ readonly type: "object";
558
+ readonly additionalProperties: false;
559
+ readonly properties: {
560
+ readonly '850': {
561
+ readonly type: "string";
562
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
563
+ };
564
+ readonly '975': {
565
+ readonly type: "string";
566
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
567
+ };
568
+ readonly '50': {
569
+ readonly type: "string";
570
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
571
+ };
572
+ readonly '100': {
573
+ readonly type: "string";
574
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
575
+ };
576
+ readonly '200': {
577
+ readonly type: "string";
578
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
579
+ };
580
+ readonly '300': {
581
+ readonly type: "string";
582
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
583
+ };
584
+ readonly '400': {
585
+ readonly type: "string";
586
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
587
+ };
588
+ readonly '500': {
589
+ readonly type: "string";
590
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
591
+ };
592
+ readonly '600': {
593
+ readonly type: "string";
594
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
595
+ };
596
+ readonly '700': {
597
+ readonly type: "string";
598
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
599
+ };
600
+ readonly '800': {
601
+ readonly type: "string";
602
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
603
+ };
604
+ readonly '900': {
605
+ readonly type: "string";
606
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
607
+ };
608
+ readonly '950': {
609
+ readonly type: "string";
610
+ readonly pattern: "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
611
+ };
612
+ };
613
+ };
614
+ };
615
+ };
616
+ readonly roles: {
617
+ readonly type: "object";
618
+ readonly additionalProperties: false;
619
+ readonly properties: {
620
+ readonly light: {
621
+ readonly type: "object";
622
+ readonly additionalProperties: false;
623
+ readonly properties: {
624
+ [k: string]: {
625
+ type: string;
626
+ };
627
+ };
628
+ };
629
+ readonly dark: {
630
+ readonly type: "object";
631
+ readonly additionalProperties: false;
632
+ readonly properties: {
633
+ [k: string]: {
634
+ type: string;
635
+ };
636
+ };
637
+ };
638
+ };
639
+ };
640
+ readonly fonts: {
641
+ readonly type: "object";
642
+ readonly additionalProperties: false;
643
+ readonly properties: {
644
+ readonly sans: {
645
+ readonly type: "string";
646
+ };
647
+ readonly display: {
648
+ readonly type: "string";
649
+ };
650
+ readonly mono: {
651
+ readonly type: "string";
652
+ };
653
+ };
654
+ };
655
+ readonly radius: {
656
+ readonly type: "object";
657
+ readonly additionalProperties: false;
658
+ readonly properties: {
659
+ readonly xs: {
660
+ readonly type: "string";
661
+ };
662
+ readonly sm: {
663
+ readonly type: "string";
664
+ };
665
+ readonly md: {
666
+ readonly type: "string";
667
+ };
668
+ readonly lg: {
669
+ readonly type: "string";
670
+ };
671
+ readonly xl: {
672
+ readonly type: "string";
673
+ };
674
+ };
675
+ };
676
+ };
677
+ };
678
+
679
+ /**
680
+ * Tema değişikliğini (`.dark` toggle'ı, `applyMfTheme()` çağrısı vb.) View
681
+ * Transitions API ile yumuşak bir çapraz geçişe sarar — sayfa her token'ı
682
+ * tek tek `transition` etmek yerine eski/yeni ekran görüntüsü arasında TEK
683
+ * bir kompozit geçiş yapar (yüzlerce `transition-colors`'ın aynı anda ve
684
+ * farklı sürelerle kayması yerine).
685
+ *
686
+ * `update` HER ZAMAN çağrılır — sadece NASIL çağrıldığı değişir. Geçiş
687
+ * atlanıp `update` doğrudan (senkron) çalıştırılır:
688
+ * - SSR / `document` yok,
689
+ * - tarayıcı `startViewTransition` desteklemiyor,
690
+ * - kullanıcı `prefers-reduced-motion: reduce` istiyor.
691
+ *
692
+ * ```ts
693
+ * transitionMfTheme(() => document.documentElement.classList.toggle('dark'));
694
+ * ```
695
+ */
696
+ declare function transitionMfTheme(update: () => void): void;
697
+
698
+ type MfColorMode = 'light' | 'dark' | 'system';
699
+ interface MfColorModeConfig {
700
+ /** `localStorage` anahtarı — `colorModeInitScript()` ile AYNI olmalı. */
701
+ storageKey: string;
702
+ /** Tercih kaydı yokken. */
703
+ defaultMode: MfColorMode;
704
+ }
705
+ declare const MF_COLOR_MODE_CONFIG: InjectionToken<MfColorModeConfig>;
706
+ /** `providers: [provideMfColorMode({ storageKey: 'app-theme' })]` */
707
+ declare function provideMfColorMode(config: Partial<MfColorModeConfig>): Provider;
708
+ /**
709
+ * Açık / koyu / sistem modu — kitin TEK kaynağı (`<mf-theme-switcher>` bunu kullanır; kendi
710
+ * anahtarınızla da doğrudan enjekte edebilirsiniz).
711
+ *
712
+ * - `mode`: kullanıcının seçimi (kalıcı, `localStorage`); `resolved`: gerçekte uygulanan
713
+ * `light`/`dark` — `system`'de işletim sistemi tercihini CANLI izler.
714
+ * - Uygulama: kökte `.dark` sınıfı + `color-scheme` (yerel kaydırma çubukları ve form
715
+ * kontrolleri de temaya uyar); değişim `transitionMfTheme` ile yumuşak (azaltılmış harekette
716
+ * anında). Sınıf zaten doğruysa (ilk boyamada `colorModeInitScript` uyguladı) dokunulmaz.
717
+ * - Depolama/`matchMedia` yoksa (gizli pencere, SSR, test) sessizce varsayılana düşer.
718
+ */
719
+ declare class MfColorModeService {
720
+ private readonly config;
721
+ private readonly document;
722
+ private readonly media;
723
+ private readonly systemDark;
724
+ readonly mode: _angular_core.WritableSignal<MfColorMode>;
725
+ readonly resolved: _angular_core.Signal<"light" | "dark">;
726
+ constructor();
727
+ setMode(mode: MfColorMode): void;
728
+ /** light → dark → system → light (tek düğmeli değiştirici için). */
729
+ cycle(): void;
730
+ private readStored;
731
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MfColorModeService, never>;
732
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
733
+ }
734
+ /**
735
+ * `index.html` `<head>`'ine satır içi konacak betik — Angular yüklenmeden ÖNCE `.dark`'ı uygular,
736
+ * koyu modda beyaz flaşı önler. Anahtar ve varsayılan servisle AYNI olmalı.
737
+ *
738
+ * ```html
739
+ * <script>/* colorModeInitScript('app-theme') çıktısı *\/</script>
740
+ * ```
741
+ */
742
+ declare function colorModeInitScript(storageKey?: string, defaultMode?: MfColorMode): string;
743
+
744
+ export { MF_COLOR_MODE_CONFIG, MF_NEUTRAL_RAMP_STEPS, MF_RAMP_TONES, MF_ROLE_TOKENS, MF_THEME_JSON_SCHEMA, MfColorModeService, RAMP_STEPS, accentContrastWithWhite, applyMfTheme, colorModeInitScript, createAccentRamp, exportMfThemeCss, fgOnAccent, provideMfColorMode, resetMfTheme, transitionMfTheme, validateMfTheme };
745
+ export type { AccentRamp, MfColorMode, MfColorModeConfig, MfDensity, MfNeutralRampStep, MfRampTone, MfRoleToken, MfThemeConfig, MfThemeIssue, MfThemeIssueSeverity, MfThemeJson, NeutralTint, RadiusScale, RampStep };