@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,68 @@
1
+ /*
2
+ * mesgflow — erişilebilirlik modları: kullanıcının İŞLETİM SİSTEMİ düzeyinde
3
+ * istediği kontrast tercihleri. Tüketici hiçbir şey yapmadan otomatik devreye
4
+ * girer (class/JS gerektirmez).
5
+ *
6
+ * 1) `prefers-contrast: more` (macOS "Kontrastı artır", GNOME/Windows yüksek
7
+ * kontrast tercihi) — palet KORUNUR, sadece düşük vurgulu roller bir
8
+ * basamak sertleşir: hairline → border-strong, fg-muted/subtle koyulaşır
9
+ * (light) / açılır (dark), cam yüzey opaklaşır, durum katmanı belirginleşir.
10
+ *
11
+ * 2) `forced-colors: active` (Windows Yüksek Kontrast / Kontrast Temaları) —
12
+ * tarayıcı renkleri ZATEN sistem paletiyle ezer; burada sadece bu ezmenin
13
+ * GÖRÜNMEZ bıraktığı işaretler telafi edilir: arka plan rengiyle ifade
14
+ * edilen seçili/aktif durumlar (`aria-selected`/`aria-current`) bir
15
+ * `Highlight` çizgisi alır, cam/bulanıklık kapanır. Focus zaten `outline`
16
+ * tabanlı (bkz. core/recipes.ts `focusRecipe`) — forced-colors'ta korunur.
17
+ *
18
+ * Seçiciler `:root, .light` / `.dark` — color.css'teki mod bloklarıyla AYNI
19
+ * özgüllükte, bu dosya ondan SONRA import edildiği için kazanır.
20
+ */
21
+ @layer base {
22
+ @media (prefers-contrast: more) {
23
+ :root,
24
+ .light {
25
+ --mf-hairline: var(--color-neutral-500);
26
+ --mf-border-subtle: var(--color-neutral-400);
27
+ --mf-border: var(--color-neutral-500);
28
+ --mf-border-strong: var(--color-neutral-600);
29
+ --mf-fg-muted: var(--color-neutral-700);
30
+ --mf-fg-subtle: var(--color-neutral-600);
31
+ --mf-glass: var(--mf-surface);
32
+ --mf-state-hover: rgba(10, 28, 23, 0.09);
33
+ --mf-state-pressed: rgba(10, 28, 23, 0.16);
34
+ --mf-state-selected: rgba(10, 28, 23, 0.12);
35
+ }
36
+
37
+ .dark {
38
+ --mf-hairline: var(--color-neutral-600);
39
+ --mf-border-subtle: var(--color-neutral-700);
40
+ --mf-border: var(--color-neutral-600);
41
+ --mf-border-strong: var(--color-neutral-500);
42
+ --mf-fg-muted: var(--color-neutral-400);
43
+ --mf-fg-subtle: var(--color-neutral-500);
44
+ --mf-glass: var(--mf-surface);
45
+ --mf-state-hover: rgba(236, 243, 240, 0.1);
46
+ --mf-state-pressed: rgba(236, 243, 240, 0.18);
47
+ --mf-state-selected: rgba(236, 243, 240, 0.14);
48
+ }
49
+ }
50
+
51
+ @media (forced-colors: active) {
52
+ :root,
53
+ .light,
54
+ .dark {
55
+ --mf-glass: Canvas;
56
+ }
57
+
58
+ * {
59
+ backdrop-filter: none !important;
60
+ }
61
+
62
+ [aria-selected='true'],
63
+ [aria-current]:not([aria-current='false']) {
64
+ outline: 2px solid Highlight;
65
+ outline-offset: -2px;
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,68 @@
1
+ /*
2
+ * mesgflow — yükselti (elevation) token'ları: gölgenin KENDİSİ moda göre
3
+ * takas olur (`@theme inline` + :root/.dark, renk rolleriyle aynı desen).
4
+ *
5
+ * Yükselti semantiği — BORDER-FIRST (2026-09 Deep Emerald geçişi, kullanıcı
6
+ * kararıyla): kapsayıcılar (card/table/toolbar) artık gölge DEĞİL,
7
+ * `border-hairline` (color.css) taşır — İKİ MODDA da. `shadow-1` bu yüzden
8
+ * anlam değiştirdi: artık sadece TEMAS gölgesi (segmented pill, slider
9
+ * thumb, sidebar daraltma düğmesi gibi küçük, yüzeyden hafifçe ayrılan
10
+ * öğeler). `shadow-2` OVERLAY (popover/menu/dropdown, hairline + gölge),
11
+ * `shadow-3` DIALOG/DRAWER/SHEET (hairline + gölge + cam yüzey, bkz.
12
+ * core/recipes.ts glassSurface). `shadow-control` KONTROLLER (input/select/
13
+ * button — ince, neredeyse hissedilmeyen bir ayrım). Bu dört basamak
14
+ * birbirine KARIŞTIRILMAZ.
15
+ *
16
+ * `shadow-filled` DOLU BUTONLAR (filled success/warning/danger/info/help):
17
+ * 1px koyu alt kenar + 2px temas gölgesi — "yüzeye oturmuş" malzeme hissi,
18
+ * iç ışık/gloss YOK (bkz. button.variants.ts "Gloss YOK — 2 kez reddedildi").
19
+ * Nötr filled hâlâ gölgesiz (zemin rengiyle aynı yüzey, yükselmiyor).
20
+ *
21
+ * `shadow-glow` SADECE dolu PRIMARY buton (spec'in "Glow / Işıma Efekti"):
22
+ * light'ta `shadow-filled` ile AYNI (parıltı sadece koyu zeminde okunur),
23
+ * dark'ta altına `color-mix()` ile primary-400'ün %20 alfası eklenmiş bir
24
+ * emerald ışıma. `color-mix` accent rampasına `var()` ile bağlı olduğu için
25
+ * `applyMfTheme({accent})` ile tüketici aksanı değişince glow da otomatik
26
+ * takip eder — ayrı bir rol satırı YAZILMASI GEREKMEZ. Bir class string'i
27
+ * ASLA hem `shadow-filled` hem `shadow-glow` taşımaz (twMerge bu ikisini
28
+ * aynı grup saymaz, bkz. core/cn.ts gotcha) — primary `shadow-glow` alır,
29
+ * diğer dört ton `shadow-filled` alır.
30
+ */
31
+ @theme inline {
32
+ --shadow-1: var(--mf-shadow-1);
33
+ --shadow-2: var(--mf-shadow-2);
34
+ --shadow-3: var(--mf-shadow-3);
35
+ --shadow-control: var(--mf-shadow-control);
36
+ --shadow-filled: var(--mf-shadow-filled);
37
+ --shadow-glow: var(--mf-shadow-glow);
38
+ }
39
+
40
+ @layer base {
41
+ /* `.light` — koyu sayfa içindeki açık ada, bkz. color.css'teki `@custom-variant dark` notu. */
42
+ :root,
43
+ .light {
44
+ /* Marka-tonlu (rgba primary-900) ve önceki turdan çok daha hafif — derinlik artık ağırlıklı olarak border-hairline'dan geliyor, gölge sadece küçük bir ipucu. */
45
+ --mf-shadow-1: 0 1px 2px rgba(6, 44, 34, 0.06);
46
+ --mf-shadow-2: 0 4px 16px -8px rgba(6, 44, 34, 0.14);
47
+ /* Spec'in "Gölgeler yerine çerçeveler" tarifi — dialog/drawer/sheet zaten hairline taşıyor, gölge sadece derin bir ipucu. */
48
+ --mf-shadow-3: 0 10px 30px rgba(6, 44, 34, 0.15);
49
+ /* Kontroller için neredeyse görünmez bir ayrım — zemin kontrastıyla karışmasın diye "gölge" değil "kenar ışığı" gibi davranır. */
50
+ --mf-shadow-control: 0 1px 1px rgba(6, 44, 34, 0.04);
51
+ --mf-shadow-filled: 0 1px 0 rgba(6, 44, 34, 0.12), 0 1px 2px rgba(6, 44, 34, 0.14);
52
+ /* Light'ta parıltı yok — `shadow-filled` ile birebir aynı (primary-900 zaten koyu, ışıma gereksiz). */
53
+ --mf-shadow-glow: 0 1px 0 rgba(6, 44, 34, 0.12), 0 1px 2px rgba(6, 44, 34, 0.14);
54
+ }
55
+
56
+ .dark {
57
+ --mf-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.24);
58
+ --mf-shadow-2: 0 4px 16px -8px rgba(0, 0, 0, 0.5);
59
+ --mf-shadow-3: 0 10px 30px rgba(0, 0, 0, 0.4);
60
+ /* Dark modda dolu gölge yerine üstte ince bir ışık çizgisi — koyu zeminde "gölge" görsel olarak okunmuyor. */
61
+ --mf-shadow-control: inset 0 1px 0 rgba(255, 255, 255, 0.04);
62
+ --mf-shadow-filled: 0 1px 0 rgba(0, 0, 0, 0.45), 0 1px 2px rgba(0, 0, 0, 0.4);
63
+ /* Spec: "Ana Aksiyon butonunun altına hafif bir yeşil ışıma" — 20px emerald blur, `--color-primary-400` üstünden `color-mix` ile türetilir. */
64
+ --mf-shadow-glow:
65
+ 0 0 20px color-mix(in srgb, var(--color-primary-400) 20%, transparent),
66
+ 0 1px 0 rgba(0, 0, 0, 0.45), 0 1px 2px rgba(0, 0, 0, 0.4);
67
+ }
68
+ }
@@ -0,0 +1,277 @@
1
+ /*
2
+ * mesgflow — hareket (motion) token'ları: süre/eğri + hazır giriş-çıkış
3
+ * animasyonları. `prefers-reduced-motion: reduce` global bloğu (aşağıda)
4
+ * TÜM `animate-*`/`transition-*` kullanımlarını otomatik kısıyor — yeni bir
5
+ * `--animate-*` eklerken ayrıca bir reduced-motion istisnası YAZMA gerekmiyor.
6
+ */
7
+ @theme {
8
+ --ease-emphasis: cubic-bezier(0.2, 0, 0, 1);
9
+ /*
10
+ * Sönümlü yay (ζ=0.9, başlangıç hızı 1.2) — `linear()` ile örneklenmiş.
11
+ * Hızlı başlar (ease-out gibi), hedefi ~%2.8 aşıp yerine OTURUR — zıplama
12
+ * yok. SADECE küçük ölçek/öteleme GİRİŞLERİNDE (dialog, overlay):
13
+ * `translateY(100%)` gibi tam-boy kaymalarda (sheet/drawer) aşım panelin
14
+ * altında boşluk açardı. Çıkışlar `ease-emphasis`te kalır. `linear()`
15
+ * desteklemeyen tarayıcıda animasyon bildirimi geçersiz sayılır ve panel
16
+ * animasyonsuz açılır (işlev kaybı yok).
17
+ */
18
+ --ease-spring: linear(
19
+ 0,
20
+ 0.406 6.3%,
21
+ 0.67 12.5%,
22
+ 0.834 18.8%,
23
+ 0.932 25%,
24
+ 0.987 31.3%,
25
+ 1.014 37.5%,
26
+ 1.026 43.8%,
27
+ 1.028 50%,
28
+ 1.026 56.3%,
29
+ 1.022 62.5%,
30
+ 1.017 68.8%,
31
+ 1.013 75%,
32
+ 1.01 81.3%,
33
+ 1.007 87.5%,
34
+ 1.005 93.8%,
35
+ 1
36
+ );
37
+ --duration-fast: 120ms;
38
+ --duration-base: 180ms;
39
+ --duration-slow: 260ms;
40
+
41
+ /*
42
+ * Table'ın "yeniden sorgulanıyor" göstergesi: satırlar YERİNDE kalır
43
+ * (skeleton'a dönmez), kartın tepesinde 2px'lik bir çubuk soldan sağa
44
+ * kayar — `animate-progress-slide` (bkz. table/table.html).
45
+ */
46
+ --animate-progress-slide: progress-slide 1.1s var(--ease-emphasis) infinite;
47
+
48
+ @keyframes progress-slide {
49
+ 0% {
50
+ transform: translateX(-100%);
51
+ }
52
+ 100% {
53
+ transform: translateX(400%);
54
+ }
55
+ }
56
+
57
+ /*
58
+ * Dialog açılış/kapanış — `Dialog`'un (dialog.ts) `surface.closing()`'e
59
+ * göre reaktif olarak `-in`/`-out` class'ı arasında geçiş yapmasıyla
60
+ * tetikleniyor. Kapanış CDK'nın kendi kancası OLMADIĞI için
61
+ * `DialogService.open()`'daki `closePredicate` ile senkronize gecikmeli
62
+ * (bkz. o dosyanın doc yorumu) — `-out` süresi orada `EXIT_MS` sabitiyle
63
+ * BİREBİR eşleşiyor, biri değişirse diğeri de güncellenmeli.
64
+ */
65
+ --animate-dialog-in: dialog-in var(--duration-base) var(--ease-spring);
66
+ --animate-dialog-out: dialog-out var(--duration-fast) var(--ease-emphasis) forwards;
67
+ --animate-sheet-in: sheet-in var(--duration-base) var(--ease-emphasis);
68
+ --animate-sheet-out: sheet-out var(--duration-fast) var(--ease-emphasis) forwards;
69
+
70
+ @keyframes dialog-in {
71
+ from {
72
+ opacity: 0;
73
+ transform: translateY(8px) scale(0.98);
74
+ }
75
+ }
76
+
77
+ @keyframes dialog-out {
78
+ to {
79
+ opacity: 0;
80
+ transform: translateY(4px) scale(0.985);
81
+ }
82
+ }
83
+
84
+ @keyframes sheet-in {
85
+ from {
86
+ transform: translateY(100%);
87
+ }
88
+ }
89
+
90
+ @keyframes sheet-out {
91
+ to {
92
+ transform: translateY(100%);
93
+ }
94
+ }
95
+
96
+ /*
97
+ * Drawer (sağdan açılan panel) — X ekseninde kayıyor, BİLEREK modal (Y +
98
+ * scale) ve sheet'ten (Y) farklı: hareket ekseni metaforla eşleşiyor
99
+ * (modal ortadan yükselir, sheet alttan kayar, drawer kenardan kayar).
100
+ */
101
+ --animate-drawer-in: drawer-in var(--duration-base) var(--ease-emphasis);
102
+ --animate-drawer-out: drawer-out var(--duration-fast) var(--ease-emphasis) forwards;
103
+
104
+ @keyframes drawer-in {
105
+ from {
106
+ transform: translateX(100%);
107
+ }
108
+ }
109
+
110
+ @keyframes drawer-out {
111
+ to {
112
+ transform: translateX(100%);
113
+ }
114
+ }
115
+
116
+ /*
117
+ * Popover/Menu/Select/Combobox/ColorPicker/DatePicker/... — 12 kopya
118
+ * overlay panelinin BİRLEŞTİĞİ tek giriş/çıkış hareketi (bkz. plan Faz 1c,
119
+ * `Popover`'ın `closing` sinyali). Dialog'dan (Y 8px + duration-base) daha
120
+ * hafif — küçük bir panel, `-4px` + `duration-fast` yeterli, ağır
121
+ * hissettirmez.
122
+ */
123
+ /* Durum ikonu değişimi (kopyalandı ✓ vb.) — küçükten yaya binerek büyür. */
124
+ --animate-pop: pop var(--duration-base) var(--ease-spring);
125
+ --animate-overlay-in: overlay-in var(--duration-fast) var(--ease-spring);
126
+ --animate-overlay-out: overlay-out var(--duration-fast) var(--ease-emphasis) forwards;
127
+
128
+ @keyframes pop {
129
+ from {
130
+ opacity: 0;
131
+ scale: 0.5;
132
+ }
133
+ to {
134
+ opacity: 1;
135
+ scale: 1;
136
+ }
137
+ }
138
+
139
+ @keyframes overlay-in {
140
+ from {
141
+ opacity: 0;
142
+ transform: translateY(-4px) scale(0.98);
143
+ }
144
+ }
145
+
146
+ @keyframes overlay-out {
147
+ to {
148
+ opacity: 0;
149
+ transform: translateY(-4px) scale(0.98);
150
+ }
151
+ }
152
+
153
+ /*
154
+ * Toast — X ekseninde kayarak girer/çıkar (bkz. `ToastHost`, sağ-alt/
155
+ * sağ-üst köşeden gelen bildirim metaforu; dialog/overlay'in Y ekseninden
156
+ * BİLEREK farklı).
157
+ */
158
+ --animate-toast-in: toast-in var(--duration-base) var(--ease-emphasis);
159
+ --animate-toast-out: toast-out var(--duration-fast) var(--ease-emphasis) forwards;
160
+
161
+ @keyframes toast-in {
162
+ from {
163
+ opacity: 0;
164
+ transform: translateX(16px);
165
+ }
166
+ }
167
+
168
+ @keyframes toast-out {
169
+ to {
170
+ opacity: 0;
171
+ transform: translateX(16px);
172
+ }
173
+ }
174
+
175
+ /*
176
+ * Skeleton — `animate-pulse` (opaklık titreşimi) yerine soldan sağa kayan
177
+ * bir parıltı (bkz. plan Faz 1c). Skeleton'un kendi arka planı bir
178
+ * gradient olmalı (`background-size: 200% 100%`) — token burada sadece
179
+ * hareketi tanımlıyor, gradient tanımı `skeleton.ts`'te.
180
+ */
181
+ --animate-shimmer: shimmer 1.4s linear infinite;
182
+
183
+ @keyframes shimmer {
184
+ 0% {
185
+ background-position: 200% 0;
186
+ }
187
+ 100% {
188
+ background-position: -200% 0;
189
+ }
190
+ }
191
+
192
+ /** Genel amaçlı, yönsüz giriş — sadece opaklık (ör. skeleton→içerik takası). */
193
+ --animate-fade-in: fade-in var(--duration-base) var(--ease-emphasis);
194
+
195
+ @keyframes fade-in {
196
+ from {
197
+ opacity: 0;
198
+ }
199
+ }
200
+ }
201
+
202
+ /*
203
+ * Tailwind v4'te `--duration-*` diye bir theme namespace YOK (sadece
204
+ * `--ease-*`/`--animate-*` var) — `duration-fast`/`duration-base`/
205
+ * `duration-slow` class'ları yukarıdaki `@theme` bloğundaki tanıma rağmen
206
+ * HİÇBİR ZAMAN CSS üretmiyordu (kod tabanında ~60 kullanım yeri, hepsi sessizce
207
+ * etkisizdi, tüm geçişler tarayıcı varsayılanına düşüyordu). `@utility` ile
208
+ * elle tanımlamak hem class'ları çalıştırıyor hem de "kullanılmayan" gerekçesiyle
209
+ * derlenen CSS'ten atlanan `--duration-*` custom property'lerini emit ettiriyor
210
+ * (`.mf-dialog-backdrop`'ın `var(--duration-base)`'i de bu sayede düzeliyor).
211
+ */
212
+ @utility duration-fast {
213
+ transition-duration: var(--duration-fast);
214
+ }
215
+ @utility duration-base {
216
+ transition-duration: var(--duration-base);
217
+ }
218
+ @utility duration-slow {
219
+ transition-duration: var(--duration-slow);
220
+ }
221
+
222
+ @layer base {
223
+ /* `transitionMfTheme()` (theming) — tema çapraz geçişi kitin kendi süre/eğrisiyle, tarayıcı varsayılanı (250ms ease) değil. */
224
+ ::view-transition-old(root),
225
+ ::view-transition-new(root) {
226
+ animation-duration: var(--duration-slow);
227
+ animation-timing-function: var(--ease-emphasis);
228
+ }
229
+
230
+ @media (prefers-reduced-motion: reduce) {
231
+ *,
232
+ *::before,
233
+ *::after {
234
+ animation-duration: 0.01ms !important;
235
+ animation-iteration-count: 1 !important;
236
+ transition-duration: 0.01ms !important;
237
+ scroll-behavior: auto !important;
238
+ }
239
+ }
240
+ }
241
+
242
+ /*
243
+ * `.mf-dialog-backdrop` (bkz. dialog/dialog.service.ts) BİLEREK `@layer`
244
+ * DIŞINDA (unlayered) — CDK'nın kendi `overlay-prebuilt.css`'i
245
+ * `.cdk-overlay-backdrop` kuralını KENDİ `@layer cdk-overlay`'inde taşıyor,
246
+ * ve unlayered CSS her zaman HERHANGİ bir layer'ı (specificity'den bağımsız)
247
+ * yener (CSS cascade layers spec) — bu yüzden burada `@layer` kullanmak bu
248
+ * override'ı tamamen etkisiz bırakırdı. `.is-closing`, `DialogService.open()`'ın
249
+ * `closePredicate`'i tarafından panelin kendi `animate-dialog-out`/
250
+ * `animate-sheet-out`'uyla AYNI anda eklenir (backdrop ham DOM elemanı — CDK
251
+ * yönetiyor, Angular template'ine bağlanamıyor, bu yüzden imperatif class
252
+ * toggle kaçınılmaz).
253
+ *
254
+ * Karartma + blur miktarı 2026-09 Deep Emerald geçişinde eklendi (eskiden
255
+ * backdrop hiç karartmıyordu, sadece 2px blur veriyordu) — mikro
256
+ * glassmorphism'in bir parçası: panel `glassSurface` ile yarı saydamken
257
+ * arkadaki içerik hem karartılıp hem bulanıklaştırılmazsa panel içeriğiyle
258
+ * karışır. `color-mix()` (Tailwind'in `/40` opaklık modifier'ı unlayered
259
+ * kuralda çalışmıyor, bu yüzden elle) `--color-neutral-975`'i kullanıyor —
260
+ * moda göre otomatik doğru koyulukta.
261
+ */
262
+ .mf-dialog-backdrop {
263
+ transition-duration: var(--duration-base);
264
+ background-color: color-mix(in srgb, var(--color-neutral-975) 40%, transparent);
265
+ backdrop-filter: blur(4px);
266
+ }
267
+
268
+ @media (prefers-reduced-transparency: reduce) {
269
+ .mf-dialog-backdrop {
270
+ background-color: color-mix(in srgb, var(--color-neutral-975) 55%, transparent);
271
+ backdrop-filter: none;
272
+ }
273
+ }
274
+
275
+ .mf-dialog-backdrop.is-closing {
276
+ opacity: 0;
277
+ }
@@ -0,0 +1,69 @@
1
+ /*
2
+ * mesgflow — radius + kontrol geometrisi token'ları.
3
+ *
4
+ * Radius iç içe (nested) bir ölçek: Tailwind'in stok skalasını (xs 2px …
5
+ * xl 12px) bir basamak yukarı kaydırır (xs→4px … xl→16px): KAPSAYICILAR
6
+ * (kart/panel/tablo/dropdown) `rounded-lg`, KONTROLLER (buton/input/select)
7
+ * `rounded-md` kullanır — kart 12px, içindeki buton 8px, gerçek "nested
8
+ * radius".
9
+ */
10
+ @theme {
11
+ --radius-xs: 4px;
12
+ --radius-sm: 6px;
13
+ --radius-md: 8px;
14
+ --radius-lg: 12px;
15
+ --radius-xl: 16px;
16
+ }
17
+
18
+ /*
19
+ * Kontrol yüksekliği — TEK kaynak (bkz. plan Faz 1a/1b). Öncesinde her
20
+ * kontrol kendi `h-8`/`h-9`/`h-10` sabitini elle taşıyordu (9 farklı yer,
21
+ * aralarında 1-2px'lik kasıtsız sapmalar vardı) — `core/recipes.ts`'teki
22
+ * `controlSize` bu üçünü tüketir, tek tek bileşenler artık `h-*` YAZMAZ.
23
+ * `Button`'ın kendi `size` ekseni (`button.variants.ts`) BİLEREK bunlara
24
+ * eşit: `md` 36px (Button'ın sıkılaştırılmış yoğunluğu, bkz. o dosyanın
25
+ * notu) — Input/Select/Checkbox gibi yanına dizilen kontroller Button'la
26
+ * AYNI hizada dursun diye.
27
+ */
28
+ @theme {
29
+ --control-h-sm: 2rem; /* 32px */
30
+ --control-h-md: 2.25rem; /* 36px */
31
+ --control-h-lg: 2.5rem; /* 40px */
32
+ }
33
+
34
+ @utility h-control-sm {
35
+ height: var(--control-h-sm);
36
+ }
37
+ @utility h-control-md {
38
+ height: var(--control-h-md);
39
+ }
40
+ @utility h-control-lg {
41
+ height: var(--control-h-lg);
42
+ }
43
+
44
+ /*
45
+ * Yoğunluk — bir alt ağacı (ör. yoğun bir veri paneli) sıkılaştırmak veya
46
+ * gevşetmek için `data-density="compact|comfortable"`. Kit genelinde
47
+ * `applyMfTheme({ density })` AYNI değerleri kök elemana yazar (bkz.
48
+ * theming/apply.ts `CONTROL_H_PX` — iki tablo senkron tutulmalı). İkon
49
+ * butonları `aspect-square` taşıdığı için yükseklikle birlikte kare kalır.
50
+ */
51
+ @layer base {
52
+ [data-density='compact'] {
53
+ --control-h-sm: 1.75rem; /* 28px */
54
+ --control-h-md: 2rem; /* 32px */
55
+ --control-h-lg: 2.25rem; /* 36px */
56
+ }
57
+
58
+ [data-density='default'] {
59
+ --control-h-sm: 2rem;
60
+ --control-h-md: 2.25rem;
61
+ --control-h-lg: 2.5rem;
62
+ }
63
+
64
+ [data-density='comfortable'] {
65
+ --control-h-sm: 2.25rem; /* 36px */
66
+ --control-h-md: 2.5rem; /* 40px */
67
+ --control-h-lg: 2.75rem; /* 44px */
68
+ }
69
+ }
@@ -0,0 +1,127 @@
1
+ /*
2
+ * mesgflow — tipografi token'ları: font aileleri + stok text-xs/sm/base
3
+ * ÜSTÜNE eklenen ölçek + `html`/`body` taban render ayarları.
4
+ */
5
+ @theme {
6
+ /*
7
+ * Tipografi: başlık/display = Space Grotesk, gövde/UI = Inter, veri/tablo
8
+ * = JetBrains Mono (tabular figures). Bu fontların KENDİSİ pakete dahil
9
+ * DEĞİL — tüketici proje kendi seçtiği fontu yükler (self-hosted/CDN),
10
+ * burada sadece isim/fallback zinciri tanımlı.
11
+ */
12
+ --font-sans: 'Inter Variable', 'Inter', ui-sans-serif, system-ui, sans-serif;
13
+ --font-display: 'Space Grotesk Variable', 'Space Grotesk', ui-sans-serif, system-ui, sans-serif;
14
+ --font-mono:
15
+ 'JetBrains Mono Variable', 'JetBrains Mono', ui-monospace, 'Cascadia Code', monospace;
16
+
17
+ /*
18
+ * ─────────────────────────────────────────────────────────────────────
19
+ * TİPOGRAFİ ÖLÇEĞİ — stok text-xs/sm/base ÜSTÜNE ekleniyor. `eyebrow`
20
+ * bu tazelemenin imza öğelerinden biri: mono + büyük harf + geniş
21
+ * tracking, tablo başlıkları ve bölüm etiketlerinde kullanılır.
22
+ *
23
+ * `label`/`caption` — kontrol etiketleri (Field label, form yardımcı
24
+ * metni) için stok `text-xs`/`text-sm`'in arasında kalan, biraz daha
25
+ * sıkı satır yüksekliğine sahip bir çift (bkz. plan Faz 1a). `label`
26
+ * `text-sm`'e (0.875rem) çok yakın ama `font-weight`ı sabit taşıyor —
27
+ * tüketici `font-medium` eklemeden Field etiketleriyle birebir eşleşir.
28
+ */
29
+ --text-label: 0.8125rem;
30
+ --text-label--line-height: 1.3;
31
+ --text-label--font-weight: 500;
32
+ /* Spec: "küçük başlık/buton harf aralığını %1-2 açmak daha okunur/lüks gösterir" — Field label'a hafif tracking. */
33
+ --text-label--letter-spacing: 0.01em;
34
+
35
+ --text-caption: 0.6875rem;
36
+ --text-caption--line-height: 1.3;
37
+
38
+ --text-eyebrow: 0.6875rem;
39
+ --text-eyebrow--line-height: 1.2;
40
+ --text-eyebrow--letter-spacing: 0.12em;
41
+ --text-eyebrow--font-weight: 600;
42
+
43
+ /*
44
+ * Buton/küçük-başlık tracking'i (spec "Tipografi ve Mikrokontrast") —
45
+ * `text-eyebrow`in kendi (mono+uppercase) tracking'inden AYRI, daha
46
+ * hafif bir açılma: Button base class'ı `tracking-label` kullanır.
47
+ */
48
+ --tracking-label: 0.015em;
49
+
50
+ --text-title-sm: 0.9375rem;
51
+ --text-title-sm--line-height: 1.4;
52
+ --text-title-sm--letter-spacing: -0.006em;
53
+
54
+ --text-title: 1.125rem;
55
+ --text-title--line-height: 1.35;
56
+ --text-title--letter-spacing: -0.012em;
57
+
58
+ --text-title-lg: 1.375rem;
59
+ --text-title-lg--line-height: 1.25;
60
+ --text-title-lg--letter-spacing: -0.018em;
61
+
62
+ /*
63
+ * Display basamakları AKIŞKAN — dar ekranda bir basamak küçülür, geniş
64
+ * ekranda eski sabit değerine (30px / 40px) oturur. `rem` tabanı içerdiği
65
+ * için tarayıcı yakınlaştırması ölçeği hâlâ büyütür (WCAG 1.4.4).
66
+ */
67
+ --text-display: clamp(1.5rem, 1.25rem + 1.1vw, 1.875rem);
68
+ --text-display--line-height: 1.15;
69
+ --text-display--letter-spacing: -0.026em;
70
+
71
+ --text-display-lg: clamp(1.875rem, 1.4rem + 2vw, 2.5rem);
72
+ --text-display-lg--line-height: 1.08;
73
+ --text-display-lg--letter-spacing: -0.03em;
74
+
75
+ --text-metric: 1.75rem;
76
+ --text-metric--line-height: 1;
77
+ --text-metric--letter-spacing: -0.02em;
78
+ }
79
+
80
+ /*
81
+ * Tüketici uygulama `--font-sans`'ı kendi seçtiği şekilde yükler (self-hosted/
82
+ * CDN) — burada sadece `body`'ye uygulanması garanti ediliyor. Preflight
83
+ * (Tailwind) sadece jenerik bir sistem-fontu yığını verir.
84
+ *
85
+ * `body`'nin zemin/metin rengi de burada varsayılan olarak `--mf-canvas`/
86
+ * `--mf-fg`'ye bağlanıyor (`@theme inline`'daki `--color-canvas`/`--color-fg`
87
+ * DEĞİL, doğrudan `--mf-*` — inline theme değişkenleri "kullanılmıyor"
88
+ * gerekçesiyle CSS'e emit edilmeyebiliyor) — tüketici `bg-canvas`/`text-fg`
89
+ * class'ını hiç yazmasa bile sayfa ilk boyamada doğru zeminde açılır, beyaz
90
+ * flaş olmaz. Font rendering ayarları Inter/Space Grotesk/JetBrains Mono'nun
91
+ * varsayılan ligature/contextual-alternate/tek-katlı-"a" (cv11) davranışını
92
+ * AÇIKÇA sabitliyor — tarayıcıdan tarayıcıya sessizce değişen bir varsayılana
93
+ * bırakmak yerine.
94
+ */
95
+ @layer base {
96
+ html {
97
+ -webkit-font-smoothing: antialiased;
98
+ -moz-osx-font-smoothing: grayscale;
99
+ text-rendering: optimizeLegibility;
100
+ }
101
+
102
+ body {
103
+ font-family: var(--font-sans);
104
+ background-color: var(--mf-canvas);
105
+ color: var(--mf-fg);
106
+ /* Inter 4 değişken fontunun `opsz` ekseni — büyük başlıklarda sıkı "display" kesimi, küçük metinde açık kesim, otomatik. */
107
+ font-optical-sizing: auto;
108
+ font-feature-settings:
109
+ 'liga' 1,
110
+ 'calt' 1,
111
+ 'cv11' 1;
112
+ }
113
+
114
+ /*
115
+ * Satır kırılımı — başlıklarda satırları dengeler (tek kelimelik yetim son
116
+ * satır olmaz), gövdede son satırdaki yetimi önler. `:where()` ile SIFIR
117
+ * özgüllük: tüketicinin herhangi bir `text-wrap`/`text-balance` class'ı
118
+ * bunu ezer. Desteklemeyen tarayıcıda normal kırılıma düşer.
119
+ */
120
+ :where(h1, h2, h3, h4, h5, h6, [role='heading'], legend, figcaption) {
121
+ text-wrap: balance;
122
+ }
123
+
124
+ :where(p, li, dd, blockquote) {
125
+ text-wrap: pretty;
126
+ }
127
+ }
package/tokens.css ADDED
@@ -0,0 +1,41 @@
1
+ /*
2
+ * mesgflow — tasarım token'ları.
3
+ *
4
+ * Bu dosya kütüphanenin TÜM görsel kararlarının (renk/radius/tipografi/hareket/
5
+ * gölge) kaynağı — bileşenlerin cva şemaları `bg-surface`/`text-fg`/`shadow-1`
6
+ * gibi Tailwind utility'lerine derleniyor, bu utility'ler ise `tokens/*.css`
7
+ * altında tanımlı `@theme` token'larına bağlı. Tüketici proje bu dosyayı
8
+ * KENDİ Tailwind v4 giriş noktasından (`@import "tailwindcss";` satırlarından
9
+ * SONRA) import etmeden bileşenler stilsiz kalır — bkz. kütüphane README'sindeki
10
+ * kurulum listesi.
11
+ *
12
+ * Beş dosyaya bölünmüş (bkz. plan Faz 1a — tek bir 550+ satırlık dosya yerine
13
+ * her ilgi alanı kendi dosyasında): `color` (ramplar + rol katmanı + dark
14
+ * mode), `typography` (font aileleri + ölçek + `html`/`body` taban),
15
+ * `radius` (köşe + kontrol yüksekliği), `elevation` (gölge rolleri),
16
+ * `motion` (süre/eğri + hazır animasyonlar). Sıra ÖNEMLİ değil — her dosya
17
+ * kendi `@theme`/`@layer base` bloklarını taşıyor, aralarında çapraz bağımlılık
18
+ * yok (`color.css`'teki `@custom-variant dark` hariç, o da yalnızca dosyanın
19
+ * KENDİ `.dark` seçicisi için gerekli, diğer dosyalar onu kullanmadan önce
20
+ * bu dosyanın import sırası zaten garanti).
21
+ *
22
+ * Dark mode class tabanlı çalışır (sistem tercihine değil, tüketici uygulamanın
23
+ * `<html>` (veya başka bir kök) elemanına kendi eklediği `.dark` class'ına göre).
24
+ *
25
+ * **Tüketici projede bu tek import YETMEZ** — Tailwind v4'ün otomatik kaynak
26
+ * taraması `node_modules`'ı ATLAR, bu paketin cva/şablon class'ları
27
+ * (`hover:bg-primary-700`, `disabled:opacity-50`, `sr-only`, `w-64`,
28
+ * `peer-checked:*`, `animate-*`, vb.) `node_modules/@mesgflow/ui-kit/fesm2022/*.mjs`
29
+ * içinde yaşıyor ve bu satır TEK BAŞINA onları derletmez. Tüketici kendi
30
+ * Tailwind giriş dosyasına ayrıca `@source "../node_modules/@mesgflow/ui-kit/
31
+ * fesm2022/*.mjs";` eklemeli — bkz. README.md "Stil kurulumu". Bu olmadan
32
+ * bileşenler "yarım stilli" görünür (hover/disabled/focus'suz düz butonlar,
33
+ * kayması olmayan switch, genişliği olmayan sidebar).
34
+ */
35
+ @import './tokens/color.css';
36
+ @import './tokens/typography.css';
37
+ @import './tokens/radius.css';
38
+ @import './tokens/elevation.css';
39
+ @import './tokens/motion.css';
40
+ /* Erişilebilirlik modları (prefers-contrast / forced-colors) — color.css'in rol bloklarını ezer, bu yüzden SONDA kalmalı. */
41
+ @import './tokens/contrast.css';