@mesgflow/ui-kit 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/README.md +56 -5
  2. package/fesm2022/mesgflow-ui-kit-accordion.mjs +9 -8
  3. package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -1
  4. package/fesm2022/mesgflow-ui-kit-agenda.mjs +208 -0
  5. package/fesm2022/mesgflow-ui-kit-agenda.mjs.map +1 -0
  6. package/fesm2022/mesgflow-ui-kit-alert.mjs +3 -3
  7. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
  8. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
  9. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +3 -3
  10. package/fesm2022/mesgflow-ui-kit-avatar.mjs +3 -3
  11. package/fesm2022/mesgflow-ui-kit-badge.mjs +3 -3
  12. package/fesm2022/mesgflow-ui-kit-banner.mjs +3 -3
  13. package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
  14. package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
  15. package/fesm2022/mesgflow-ui-kit-box-input.mjs +4 -4
  16. package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
  17. package/fesm2022/mesgflow-ui-kit-brand.mjs +3 -3
  18. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +3 -3
  19. package/fesm2022/mesgflow-ui-kit-button-group.mjs +3 -3
  20. package/fesm2022/mesgflow-ui-kit-button.mjs +190 -244
  21. package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
  22. package/fesm2022/mesgflow-ui-kit-card.mjs +48 -27
  23. package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
  24. package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
  25. package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
  26. package/fesm2022/mesgflow-ui-kit-chart.mjs +12 -12
  27. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +18 -23
  28. package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
  29. package/fesm2022/mesgflow-ui-kit-chip.mjs +5 -5
  30. package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
  31. package/fesm2022/mesgflow-ui-kit-code-block.mjs +11 -7
  32. package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
  33. package/fesm2022/mesgflow-ui-kit-collapsible.mjs +9 -9
  34. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +9 -7
  35. package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
  36. package/fesm2022/mesgflow-ui-kit-combobox.mjs +147 -67
  37. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
  38. package/fesm2022/mesgflow-ui-kit-command.mjs +15 -16
  39. package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -1
  40. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +7 -9
  41. package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
  42. package/fesm2022/mesgflow-ui-kit-copy-button.mjs +6 -6
  43. package/fesm2022/mesgflow-ui-kit-core.mjs +446 -128
  44. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
  45. package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
  46. package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
  47. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +140 -19
  48. package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
  49. package/fesm2022/mesgflow-ui-kit-description-list.mjs +3 -3
  50. package/fesm2022/mesgflow-ui-kit-dialog.mjs +310 -64
  51. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
  52. package/fesm2022/mesgflow-ui-kit-divider.mjs +3 -3
  53. package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
  54. package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
  55. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +6 -6
  56. package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
  57. package/fesm2022/mesgflow-ui-kit-empty-state.mjs +3 -3
  58. package/fesm2022/mesgflow-ui-kit-field.mjs +55 -14
  59. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
  60. package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
  61. package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
  62. package/fesm2022/mesgflow-ui-kit-hover-card.mjs +6 -6
  63. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +135 -0
  64. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
  65. package/fesm2022/mesgflow-ui-kit-icon.mjs +8 -3
  66. package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
  67. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
  68. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
  69. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
  70. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
  71. package/fesm2022/mesgflow-ui-kit-input.mjs +162 -19
  72. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
  73. package/fesm2022/mesgflow-ui-kit-kbd.mjs +3 -3
  74. package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
  75. package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
  76. package/fesm2022/mesgflow-ui-kit-link.mjs +5 -5
  77. package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
  78. package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
  79. package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
  80. package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
  81. package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
  82. package/fesm2022/mesgflow-ui-kit-menu.mjs +178 -14
  83. package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
  84. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
  85. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
  86. package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
  87. package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
  88. package/fesm2022/mesgflow-ui-kit-number-input.mjs +9 -6
  89. package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
  90. package/fesm2022/mesgflow-ui-kit-otp-input.mjs +3 -3
  91. package/fesm2022/mesgflow-ui-kit-page-header.mjs +6 -6
  92. package/fesm2022/mesgflow-ui-kit-pagination.mjs +7 -6
  93. package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
  94. package/fesm2022/mesgflow-ui-kit-password-input.mjs +38 -68
  95. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
  96. package/fesm2022/mesgflow-ui-kit-popover.mjs +12 -52
  97. package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
  98. package/fesm2022/mesgflow-ui-kit-progress.mjs +164 -23
  99. package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
  100. package/fesm2022/mesgflow-ui-kit-qr-code.mjs +766 -0
  101. package/fesm2022/mesgflow-ui-kit-qr-code.mjs.map +1 -0
  102. package/fesm2022/mesgflow-ui-kit-radio.mjs +10 -12
  103. package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
  104. package/fesm2022/mesgflow-ui-kit-rating.mjs +4 -4
  105. package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
  106. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +3 -3
  107. package/fesm2022/mesgflow-ui-kit-search-input.mjs +11 -7
  108. package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
  109. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +15 -11
  110. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
  111. package/fesm2022/mesgflow-ui-kit-select.mjs +6 -5
  112. package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
  113. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +24 -21
  114. package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
  115. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +6 -5
  116. package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
  117. package/fesm2022/mesgflow-ui-kit-slider.mjs +253 -6
  118. package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
  119. package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
  120. package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
  121. package/fesm2022/mesgflow-ui-kit-spinner.mjs +44 -15
  122. package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
  123. package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
  124. package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
  125. package/fesm2022/mesgflow-ui-kit-splitter.mjs +213 -6
  126. package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
  127. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +13 -6
  128. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
  129. package/fesm2022/mesgflow-ui-kit-stepper.mjs +171 -64
  130. package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
  131. package/fesm2022/mesgflow-ui-kit-switch.mjs +4 -4
  132. package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
  133. package/fesm2022/mesgflow-ui-kit-table.mjs +34 -28
  134. package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
  135. package/fesm2022/mesgflow-ui-kit-tabs.mjs +421 -180
  136. package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
  137. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +9 -4
  138. package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
  139. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +3 -3
  140. package/fesm2022/mesgflow-ui-kit-theming.mjs +7 -7
  141. package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
  142. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +6 -6
  143. package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
  144. package/fesm2022/mesgflow-ui-kit-timeline.mjs +3 -3
  145. package/fesm2022/mesgflow-ui-kit-toast.mjs +118 -35
  146. package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
  147. package/fesm2022/mesgflow-ui-kit-toggle.mjs +12 -11
  148. package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
  149. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +13 -11
  150. package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
  151. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +76 -53
  152. package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
  153. package/fesm2022/mesgflow-ui-kit-tour.mjs +17 -29
  154. package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
  155. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
  156. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
  157. package/fesm2022/mesgflow-ui-kit-tree-select.mjs +3 -3
  158. package/fesm2022/mesgflow-ui-kit-tree.mjs +4 -4
  159. package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
  160. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
  161. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
  162. package/fesm2022/mesgflow-ui-kit.mjs +93 -12836
  163. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
  164. package/package.json +91 -3
  165. package/schematics/collection.json +10 -0
  166. package/schematics/migration.json +10 -0
  167. package/schematics/migrations/v0-7.cjs +70 -0
  168. package/schematics/ng-add/index.cjs +234 -0
  169. package/schematics/ng-add/schema.json +43 -0
  170. package/tokens/color.css +96 -0
  171. package/tokens/controls.css +145 -0
  172. package/tokens/elevation.css +62 -6
  173. package/tokens/motion.css +304 -66
  174. package/tokens/radius.css +14 -0
  175. package/tokens.css +1 -0
  176. package/tokens.json +1583 -0
  177. package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
  178. package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
  179. package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
  180. package/types/mesgflow-ui-kit-button.d.ts +23 -38
  181. package/types/mesgflow-ui-kit-card.d.ts +26 -16
  182. package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
  183. package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
  184. package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
  185. package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
  186. package/types/mesgflow-ui-kit-command.d.ts +2 -2
  187. package/types/mesgflow-ui-kit-core.d.ts +279 -21
  188. package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
  189. package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
  190. package/types/mesgflow-ui-kit-dialog.d.ts +122 -14
  191. package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
  192. package/types/mesgflow-ui-kit-field.d.ts +17 -8
  193. package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
  194. package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
  195. package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
  196. package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
  197. package/types/mesgflow-ui-kit-input.d.ts +64 -2
  198. package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
  199. package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
  200. package/types/mesgflow-ui-kit-mention.d.ts +59 -0
  201. package/types/mesgflow-ui-kit-menu.d.ts +41 -2
  202. package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
  203. package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
  204. package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
  205. package/types/mesgflow-ui-kit-password-input.d.ts +35 -5
  206. package/types/mesgflow-ui-kit-popover.d.ts +13 -5
  207. package/types/mesgflow-ui-kit-progress.d.ts +33 -12
  208. package/types/mesgflow-ui-kit-qr-code.d.ts +160 -0
  209. package/types/mesgflow-ui-kit-radio.d.ts +2 -2
  210. package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
  211. package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
  212. package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
  213. package/types/mesgflow-ui-kit-slider.d.ts +60 -1
  214. package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
  215. package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
  216. package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
  217. package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
  218. package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
  219. package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
  220. package/types/mesgflow-ui-kit-table.d.ts +2 -0
  221. package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
  222. package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
  223. package/types/mesgflow-ui-kit-toast.d.ts +48 -22
  224. package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
  225. package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
  226. package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
  227. package/types/mesgflow-ui-kit.d.ts +88 -5444
@@ -1,26 +1,42 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import * as i1 from '@angular/aria/tabs';
3
3
  import { TabList as TabList$1, TabPanel as TabPanel$1 } from '@angular/aria/tabs';
4
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
5
+ import { MfSize } from '@mesgflow/ui-kit/core';
4
6
  import * as class_variance_authority_types from 'class-variance-authority/types';
5
7
  import { VariantProps } from 'class-variance-authority';
6
8
 
7
9
  /**
8
- * `<button mfTab value="genel">Genel</button>` — bir `mf-tab-list` içine
9
- * konur. ARIA/klavye/seçim davranışı `@angular/aria/tabs`'ın `Tab`
10
- * pattern'inden `hostDirectives` ile geliyor (bkz. `tabs.ts` üstündeki not);
11
- * bu directive sadece görsel katmanı ekliyor. `value`/`disabled`/`id`
12
- * girdileri `hostDirectives`'in `inputs` listesiyle dışarı açıldı — tüketici
13
- * doğrudan `[value]`/`[disabled]` bağlar, `ngTab` attribute'unu YAZMAZ.
10
+ * `<button mfTab value="genel"><span mfIcon [size]="16">tune</span>Genel <span mfTabCount>3</span></button>`
14
11
  *
15
- * Varyant (`underline`/`card`) ebeveyn `mf-tab-list`'ten `inject()` ile
16
- * okunuyor — `Tab` kendi varyant girdisini TAŞIMIYOR, tek kaynak listede.
12
+ * ARIA/klavye/seçim `@angular/aria/tabs`'ın `Tab`'ından `hostDirectives` ile
13
+ * gelir; `value`/`disabled`/`id` doğrudan bağlanır (`ngTab` YAZILMAZ). Görünüm
14
+ * (varyant, boyut, yön, stretch) ebeveyn `mf-tab-list`'ten `inject()` ile
15
+ * okunur — sekme kendi görünüm girdisini TAŞIMAZ, tek kaynak liste.
17
16
  */
18
17
  declare class Tab {
19
18
  private readonly ariaTab;
20
19
  private readonly tabList;
20
+ /** `TabCount` seçili tonu için okur. */
21
+ readonly selected: _angular_core.Signal<boolean>;
21
22
  protected readonly classes: _angular_core.Signal<string>;
22
23
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tab, never>;
23
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Tab, "button[mfTab]", never, {}, {}, never, never, true, [{ directive: typeof i1.Tab; inputs: { "value": "value"; "disabled": "disabled"; "id": "id"; }; outputs: {}; }]>;
24
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Tab, "button[mfTab]", ["mfTab"], {}, {}, never, never, true, [{ directive: typeof i1.Tab; inputs: { "value": "value"; "disabled": "disabled"; "id": "id"; }; outputs: {}; }]>;
25
+ }
26
+
27
+ /**
28
+ * `<button mfTab value="inbox">Gelen <span mfTabCount>12</span></button>`
29
+ *
30
+ * Sekme içi sayaç rozeti — seçili sekmede tonlanır (`pills`'te hap zaten ton
31
+ * olduğu için yüzey rengine döner). Görsel bir ektir: ekran okuyucu sayıyı
32
+ * sekme adının parçası olarak okur ("Gelen 12").
33
+ */
34
+ declare class TabCount {
35
+ private readonly tab;
36
+ private readonly tabList;
37
+ protected readonly classes: _angular_core.Signal<string>;
38
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabCount, never>;
39
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TabCount, "span[mfTabCount]", ["mfTabCount"], {}, {}, never, never, true, never>;
24
40
  }
25
41
 
26
42
  /**
@@ -54,99 +70,171 @@ declare class TabScroller {
54
70
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TabScroller, "[mfTabScroller]", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
55
71
  }
56
72
 
57
- type TabsVariant = 'underline' | 'card';
73
+ /**
74
+ * - `underline` — hairline ray + kayan 2px çizgi (varsayılan; sayfa içi gezinme).
75
+ * - `pills` — seçili sekmenin arkasında kayan yumuşak ton hap (araç/filtre çubukları).
76
+ * - `segmented` — kapalı ray + kayan yükseltilmiş parça (görünüm değiştiriciler).
77
+ * - `card` — ayrık kutu sekmeler; seçili kutunun kenarında 2px çizgi (belge/düzenleyici).
78
+ */
79
+ type TabsVariant = 'underline' | 'pills' | 'segmented' | 'card';
58
80
  type TabsOrientation = 'horizontal' | 'vertical';
81
+ type TabsAlign = 'start' | 'center' | 'end';
82
+ type TabsSize = MfSize;
59
83
  /**
60
- * Bkz. `tab-list.ts`. `underline`'da ray AYRI, kayan bir `<span>` (JS ile
61
- * konumlanır — bkz. `TabList.positionIndicator`); `card`'da ray HER sekmenin
62
- * kendi `box-shadow`'unda yaşar (bkz. `tabVariants` compound'u), çünkü
63
- * `card` görünümünde her sekme zaten kendi kenarlığıyla ayrık bir kutu —
64
- * kayan tek bir gösterge o kutuların üstünden "kayarak" geçmezdi, doğal
65
- * durmazdı. `relative` — kayan gösterge `absolute` konumlanıyor buna göre.
66
- *
67
- * `orientation` ekseni sol dikey grup rayı gerektiren ekranlar için eklendi —
68
- * `@angular/aria/tabs`'ın ARIA/klavye desteği zaten yön-agnostik
69
- * (`hostDirectives`'in `orientation` girdisi, bkz. `tab-list.ts`), eksik
70
- * olan sadece bu görsel katmandı.
84
+ * Sekme satırı (`#row`). `relative` — kayan göstergeler `absolute` konumlanır ve
85
+ * satır onların `offsetParent`'ı. `fill`: satır rayı tüm genişliğe yayılsın mı
86
+ * (underline'ın hairline'ı, `stretch`, `align` ≠ start).
71
87
  */
72
88
  declare const tabListVariants: (props?: ({
73
- variant?: "underline" | "card" | null | undefined;
89
+ variant?: "underline" | "pills" | "segmented" | "card" | null | undefined;
74
90
  orientation?: "horizontal" | "vertical" | null | undefined;
91
+ align?: "center" | "end" | "start" | null | undefined;
92
+ fill?: boolean | null | undefined;
75
93
  } & class_variance_authority_types.ClassProp) | undefined) => string;
76
94
  /**
77
- * `selected`/`disabled` burada `aria-selected`/`aria-disabled` CSS
78
- * seçicileriyle DEĞİL, `Tab`'ın kendi `computed()`'ıyla (bkz. `tab.ts`)
79
- * okunan sinyal değerleriyle besleniyor — kod tabanındaki yerleşik desen
80
- * (Select'in `optionClasses`, Table'ın `rowClasses`) TS'te hesaplanan koşullu
81
- * class, CSS attribute-selector değil.
95
+ * Seçili sekmeyi izleyen kayan öğe (`[mfSlidingIndicator]`). Motor yalnız ana
96
+ * ekseni (konum + genişlik/yükseklik) yazar; çapraz eksen buradan gelir.
97
+ * `card`'da kayan gösterge YOK — ayrık kutuların arasından kayması doğal durmaz.
98
+ */
99
+ declare const tabIndicatorVariants: (props?: ({
100
+ variant?: "underline" | "pills" | "segmented" | "card" | null | undefined;
101
+ orientation?: "horizontal" | "vertical" | null | undefined;
102
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
103
+ /** İmleç altındaki sekmeyi izleyen yumuşak vurgu (yalnız underline/pills). */
104
+ declare const tabHoverVariants: (props?: ({
105
+ variant?: "underline" | "pills" | null | undefined;
106
+ orientation?: "horizontal" | "vertical" | null | undefined;
107
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
108
+ /**
109
+ * Sekme (`button[mfTab]`, `a[mfTabLink]`, TabStrip). Seçili durum yalnız RENK
110
+ * değiştirir — `font-medium` her durumda, genişlik zıplaması olmaz. `ownHover`:
111
+ * satır hover vurgusunu kendisi çizmiyorsa sekme kendi hover zeminini çizer.
112
+ * `selected`/`disabled` CSS öznitelik seçicisiyle değil, sekmenin kendi
113
+ * sinyalleriyle besleniyor (Select `optionClasses`, Table `rowClasses` deseni).
114
+ *
115
+ * Odak halkası İÇERİDE (`-outline-offset-2`): sekmeler taşma kaydırıcısının
116
+ * (`overflow: auto`) içinde; dışa taşan halka kapsayıcı kenarında kırpılıyordu.
82
117
  */
83
118
  declare const tabVariants: (props?: ({
84
- variant?: "underline" | "card" | null | undefined;
119
+ variant?: "underline" | "pills" | "segmented" | "card" | null | undefined;
120
+ size?: "sm" | "md" | "lg" | null | undefined;
85
121
  orientation?: "horizontal" | "vertical" | null | undefined;
86
122
  selected?: boolean | null | undefined;
87
123
  disabled?: boolean | null | undefined;
124
+ stretch?: boolean | null | undefined;
125
+ ownHover?: boolean | null | undefined;
126
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
127
+ /** `<span mfTabCount>12</span>` — sekme içi sayaç rozeti; seçili sekmede tonlanır. */
128
+ declare const tabCountVariants: (props?: ({
129
+ selected?: boolean | null | undefined;
130
+ variant?: "underline" | "pills" | "segmented" | "card" | null | undefined;
88
131
  } & class_variance_authority_types.ClassProp) | undefined) => string;
89
132
  type TabSelected = VariantProps<typeof tabVariants>['selected'];
90
133
 
91
134
  /**
92
- * `<mf-tab-list [(selectedTab)]="active" variant="underline">…</mf-tab-list>`
93
- * — `mf-tabs` içine konur, `mfTab` butonlarını sarar. ARIA/klavye
94
- * (Ok tuşları/Home/End) `@angular/aria/tabs`'ın `TabList` pattern'inden
95
- * `hostDirectives` ile geliyor (bkz. `tabs.ts` üstündeki not).
96
- *
97
- * İki premium detay burada yaşıyor:
98
- * 1. **Kayan ray göstergesi** (`underline` varyantı) — aktif sekme
99
- * değişince `positionIndicator()` DOM'dan `[aria-selected="true"]`
100
- * elemanın `offsetLeft`/`offsetWidth`'ini (yatayda) ya da `offsetTop`/
101
- * `offsetHeight`'ını (dikeyde) ölçüp göstergeyi kaydırıyor (emsal:
102
- * `table-pagination.ts`'in odak restorasyonundaki `afterRenderEffect` +
103
- * `viewChild(ElementRef)` deseni). `ResizeObserver` yeniden boyutlanmada
104
- * (font yüklenmesi, viewport) yeniden ölçer. `card` varyantında AYRI bir
105
- * gösterge YOK — ray her sekmenin kendi `box-shadow`'unda yaşıyor
106
- * (bkz. tabs.variants.ts).
107
- * 2. **Taşma yönetimi** — `mfTabScroller` (bkz. o dosya) kaydırma+kenar
108
- * solma maskesi sağlıyor; ok butonları SADECE o yönde taşma varken
109
- * render edilir. Aktif sekme değişince görünür alana kaydırılır.
135
+ * `<mf-tab-list [(selectedTab)]="active" variant="pills" size="sm">…</mf-tab-list>`
136
+ * — `mf-tabs` içine konur, `mfTab` düğmelerini sarar. ARIA/klavye (oklar,
137
+ * Home/End, Enter/Boşluk) `@angular/aria/tabs`'ın `TabList`'inden
138
+ * `hostDirectives` ile gelir; `orientation`/`selectedTab`/`selectionMode`…
139
+ * oradan iletilir (burada ikinci kez `input()` TANIMLANMAZ — NG2017).
110
140
  *
111
- * `tab-list.html`'deki sarmalayıcı `<div>`'in çapraz eksen hizalaması BİLEREK
112
- * yöne göre koşullu: dikeyde (`flex-col`) çapraz eksen GENİŞLİK olur, `items-
113
- * center` orada "çocukları raya GERME, kendi içerik genişliğine küçült" demek
114
- * — bu, genişliğin `mfTabScroller`/`#row`/butonlara hiç iletilmemesine ve
115
- * `truncate`'in (role-form.html'deki İngilizce grup adlarıyla canlı
116
- * doğrulandı) hiç devreye girmeden ham/elipsissiz kırpılmasına yol açan
117
- * GERÇEK bir bugdu. `items-stretch` çapraz ekseni doğru şekilde geriyor —
118
- * bunu tekrar `items-center`'a "sadeleştirme".
141
+ * Premium katman:
142
+ * - **Kayan gösterge** — `underline` çizgisi, `pills` hapı, `segmented` parçası
143
+ * tek motorla (`[mfSlidingIndicator]`, core) yay eğrisiyle kayar. `card`'da
144
+ * seçili çizgi her kutunun kendisinde (bkz. tabs.variants.ts).
145
+ * - **Hover izleme** — `hoverHighlight` (underline/pills): imlecin altındaki
146
+ * sekmenin arkasında ikinci bir yumuşak vurgu kayar; dokunmatikte yok.
147
+ * - **Boyut** `sm | md | lg` — Button/Input ile aynı kontrol yüksekliği merdiveni.
148
+ * - **Yerleşim** — `stretch` (sekmeler eşit genişler), `align` (yatay hizalama);
149
+ * `orientation="vertical"` olunca `mf-tabs` kendiliğinden yan yana yerleşir.
150
+ * - **Taşma** — `mfTabScroller` kaydırma + kenar maskesi; oklar yalnız taşma
151
+ * varken çıkar, seçili sekme görünür alana kaydırılır.
152
+ * - Hiçbir sekme bağlı değilse ilk etkin sekme seçilir.
119
153
  *
120
- * `orientation` girdisi `@angular/aria`'nın `TabList` pattern'inden
121
- * `hostDirectives` ile geliyor (ARIA/klavye zaten yön-agnostik) — burada
122
- * ikinci kez `input()` olarak TANIMLANMIYOR (NG2017, bkz. `TabPanel.
123
- * preserveContent`'teki aynı kısıt), `ariaTabList.orientation()` üzerinden
124
- * `protected readonly orientation` olarak okunuyor; `Tab` (tab.ts) bunu
125
- * `variant()` ile aynı `inject()` deseniyle ebeveynden alıyor.
154
+ * `tab-list.html`'deki sarmalayıcının dikeydeki `items-stretch`'i BİLEREK —
155
+ * `items-center` genişliği scroller/satır/sekmelere iletmiyor, `truncate`
156
+ * hiç devreye girmiyordu (gerçek bir hataydı).
126
157
  */
127
158
  declare class TabList {
128
159
  readonly variant: _angular_core.InputSignal<TabsVariant>;
160
+ readonly size: _angular_core.InputSignal<_mesgflow_ui_kit_core.MfSize>;
161
+ /** Yatay: sekmeler satırı eşit paylaşır. */
162
+ readonly stretch: _angular_core.InputSignalWithTransform<boolean, unknown>;
163
+ /** Yatay hizalama. */
164
+ readonly align: _angular_core.InputSignal<TabsAlign>;
165
+ /** İmleci izleyen yumuşak vurgu (yalnız `underline` ve `pills`). */
166
+ readonly hoverHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
129
167
  readonly scrollStartLabel: _angular_core.InputSignal<string | undefined>;
130
168
  readonly scrollEndLabel: _angular_core.InputSignal<string | undefined>;
131
169
  private readonly tabsLabels;
132
170
  protected readonly effectiveScrollStartLabel: _angular_core.Signal<string>;
133
171
  protected readonly effectiveScrollEndLabel: _angular_core.Signal<string>;
134
- /** `mfTab` (bkz. tab.ts) varyantı buradan `inject()` ile okuyor — tek kaynak. */
135
- protected readonly ariaTabList: TabList$1;
136
- /** `Tab` (tab.ts) bunu `variant()` ile aynı `inject()` deseniyle okuyor — bu yüzden `public`. */
172
+ /** `Tab`, `TabCount` ve `Tabs` bu sınıfı `inject()` ile okur — tek kaynak. */
173
+ readonly ariaTabList: TabList$1;
137
174
  readonly orientation: _angular_core.Signal<"horizontal" | "vertical">;
138
- protected readonly isVertical: _angular_core.Signal<boolean>;
175
+ readonly isVertical: _angular_core.Signal<boolean>;
176
+ protected readonly axis: _angular_core.Signal<"y" | "x">;
177
+ /** Satır kendi hover vurgusunu çiziyor mu — öyleyse sekmeler kendininkini çizmez. */
178
+ readonly drawsHover: _angular_core.Signal<boolean>;
139
179
  protected readonly listClasses: _angular_core.Signal<string>;
140
180
  protected readonly indicatorClasses: _angular_core.Signal<string>;
181
+ protected readonly hoverClasses: _angular_core.Signal<string>;
182
+ protected readonly hoveredTab: _angular_core.WritableSignal<HTMLElement | null>;
141
183
  protected readonly scroller: _angular_core.Signal<TabScroller | undefined>;
142
184
  protected readonly showStartArrow: _angular_core.Signal<boolean>;
143
185
  protected readonly showEndArrow: _angular_core.Signal<boolean>;
144
186
  private readonly rowEl;
145
- private readonly indicatorEl;
187
+ private readonly tabs;
146
188
  constructor();
147
- private positionIndicator;
189
+ protected onPointerOver(event: PointerEvent): void;
190
+ protected onPointerLeave(): void;
148
191
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabList, never>;
149
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabList, "mf-tab-list", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "scrollStartLabel": { "alias": "scrollStartLabel"; "required": false; "isSignal": true; }; "scrollEndLabel": { "alias": "scrollEndLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.TabList; inputs: { "orientation": "orientation"; "wrap": "wrap"; "softDisabled": "softDisabled"; "focusMode": "focusMode"; "selectionMode": "selectionMode"; "disabled": "disabled"; "selectedTab": "selectedTab"; }; outputs: { "selectedTabChange": "selectedTabChange"; }; }]>;
192
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabList, "mf-tab-list", ["mfTabList"], { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "stretch": { "alias": "stretch"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "hoverHighlight": { "alias": "hoverHighlight"; "required": false; "isSignal": true; }; "scrollStartLabel": { "alias": "scrollStartLabel"; "required": false; "isSignal": true; }; "scrollEndLabel": { "alias": "scrollEndLabel"; "required": false; "isSignal": true; }; }, {}, ["tabs"], ["*"], true, [{ directive: typeof i1.TabList; inputs: { "orientation": "orientation"; "wrap": "wrap"; "softDisabled": "softDisabled"; "focusMode": "focusMode"; "selectionMode": "selectionMode"; "disabled": "disabled"; "selectedTab": "selectedTab"; }; outputs: { "selectedTabChange": "selectedTabChange"; }; }]>;
193
+ }
194
+
195
+ /**
196
+ * ```html
197
+ * <mf-tab-nav ariaLabel="Proje">
198
+ * <a mfTabLink routerLink="overview" routerLinkActive #o="routerLinkActive" [active]="o.isActive">Genel bakış</a>
199
+ * <a mfTabLink routerLink="settings" routerLinkActive #s="routerLinkActive" [active]="s.isActive">Ayarlar</a>
200
+ * </mf-tab-nav>
201
+ * ```
202
+ *
203
+ * Sayfalar arası GEZİNME için sekme görünümü — `mf-tabs` ile aynı varyantlar,
204
+ * boyutlar ve kayan gösterge, ama semantik olarak bir `<nav>` + bağlantılar:
205
+ * `role="tab"`/ok tuşu YOK (gezinen bağlantıda sekme rolü WAI-ARIA'da yanlış
206
+ * desen), etkin bağlantı `aria-current="page"` taşır, klavye doğal Tab/Enter.
207
+ * Kit `@angular/router`'a bağımlı değil — `active`'i tüketici bağlar
208
+ * (`routerLinkActive` ya da kendi durumu). Yalnız yatay; dikey gezinme Sidebar'ın işi.
209
+ */
210
+ declare class TabNav {
211
+ readonly variant: _angular_core.InputSignal<TabsVariant>;
212
+ readonly size: _angular_core.InputSignal<_mesgflow_ui_kit_core.MfSize>;
213
+ readonly stretch: _angular_core.InputSignalWithTransform<boolean, unknown>;
214
+ readonly align: _angular_core.InputSignal<TabsAlign>;
215
+ readonly hoverHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
216
+ /** `<nav>` işaret noktasının adı — sayfada birden çok nav varsa zorunlu. */
217
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
218
+ private readonly links;
219
+ /** Etkin bağlantı değişince göstergeyi yeniden ölçtürür. */
220
+ protected readonly activeIndex: _angular_core.Signal<number>;
221
+ readonly drawsHover: _angular_core.Signal<boolean>;
222
+ protected readonly listClasses: _angular_core.Signal<string>;
223
+ protected readonly indicatorClasses: _angular_core.Signal<string>;
224
+ protected readonly hoverClasses: _angular_core.Signal<string>;
225
+ protected readonly hoveredLink: _angular_core.WritableSignal<HTMLElement | null>;
226
+ protected onPointerOver(event: PointerEvent): void;
227
+ protected onPointerLeave(): void;
228
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabNav, never>;
229
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabNav, "mf-tab-nav", ["mfTabNav"], { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "stretch": { "alias": "stretch"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "hoverHighlight": { "alias": "hoverHighlight"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, ["links"], ["*"], true, never>;
230
+ }
231
+ /** `a[mfTabLink]` — `mf-tab-nav` içindeki bağlantı; `active` → `aria-current="page"`. */
232
+ declare class TabLink {
233
+ readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
234
+ private readonly nav;
235
+ protected readonly classes: _angular_core.Signal<string>;
236
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabLink, never>;
237
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TabLink, "a[mfTabLink]", ["mfTabLink"], { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
150
238
  }
151
239
 
152
240
  /**
@@ -156,24 +244,25 @@ declare class TabList {
156
244
  * </mf-tab-panel>
157
245
  * ```
158
246
  *
159
- * `ngTabContent` (`@angular/aria/tabs`'ın `TabContent`'i) doğrudan
160
- * kullanılır — ayrı bir `appTabContent` sarmalayıcı YOK, tek katmanlı bir
161
- * yapıya sarmalayıcı eklemenin karşılığı yok (bkz. `TabContent`'in kendi
162
- * `DeferredContent` mekanizması, panel aktif olana kadar içeriği hiç
163
- * oluşturmaz — lazy). `<ng-content />` bilerek TEK satır: panelin kendi
164
- * `role="tabpanel"`/`tabindex`/`inert` host bağlamaları `hostDirectives`'ten
165
- * geliyor, ekstra bir sarmalayıcıya gerek yok.
247
+ * `ngTabContent` (`@angular/aria/tabs`'ın `TabContent`'i) doğrudan kullanılır —
248
+ * içerik panel ilk kez etkinleşene kadar oluşturulmaz (lazy). `preserveContent`
249
+ * `hostDirectives` ile yeniden iletilemiyor (NG2017), bu yüzden açık değil.
166
250
  *
167
- * `[class.hidden]` ELLE eklendi — `AriaTabPanel`'in `inert` attribute'u
168
- * elemanı erişilebilirlik ağacından/etkileşimden çıkarıyor ama GÖRSEL olarak
169
- * gizlemiyor (kütüphanenin kendi dokümantasyonu: "Proper styling is required
170
- * for visual hiding" — gerçek bulgu, ui-kit'te pasif panellerin boş
171
- * dolgulu kutular olarak GÖRÜNÜR kaldığı görüldü).
251
+ * - `[class.hidden]` ELLE — aria'nın `inert`'i paneli erişilebilirlik ağacından
252
+ * çıkarır ama GÖRSEL olarak gizlemez (kütüphanenin kendi notu).
253
+ * - **Geçiş:** görünür olan panel `animate-panel-in` ile solarak/hafifçe
254
+ * yükselerek gelir; `display:none → block` animasyonu kendiliğinden yeniden
255
+ * başlatır. `[animate]="false"` kapatır; azaltılmış harekette zaten yok.
256
+ * - Dikey `mf-tabs` içinde kalan genişliği doldurur (`flex-1 min-w-0`).
172
257
  */
173
258
  declare class TabPanel {
259
+ /** Görünür olunca giriş animasyonu. */
260
+ readonly animate: _angular_core.InputSignalWithTransform<boolean, unknown>;
174
261
  protected readonly ariaTabPanel: TabPanel$1;
262
+ private readonly tabs;
263
+ protected inVertical(): boolean;
175
264
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabPanel, never>;
176
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabPanel, "mf-tab-panel", never, {}, {}, never, ["*"], true, [{ directive: typeof i1.TabPanel; inputs: { "value": "value"; "id": "id"; }; outputs: {}; }]>;
265
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabPanel, "mf-tab-panel", ["mfTabPanel"], { "animate": { "alias": "animate"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.TabPanel; inputs: { "value": "value"; "id": "id"; }; outputs: {}; }]>;
177
266
  }
178
267
 
179
268
  interface TabStripItem {
@@ -248,22 +337,33 @@ declare class TabStrip {
248
337
  }
249
338
 
250
339
  /**
251
- * `<mf-tabs><mf-tab-list>...</mf-tab-list><mf-tab-panel>...</mf-tab-panel></mf-tabs>`
340
+ * ```html
341
+ * <mf-tabs>
342
+ * <mf-tab-list [(selectedTab)]="tab" variant="pills" orientation="vertical" class="w-56">
343
+ * <button mfTab value="profile">Profil</button>
344
+ * <button mfTab value="billing">Faturalandırma</button>
345
+ * </mf-tab-list>
346
+ * <mf-tab-panel value="profile"><ng-template ngTabContent>…</ng-template></mf-tab-panel>
347
+ * <mf-tab-panel value="billing"><ng-template ngTabContent>…</ng-template></mf-tab-panel>
348
+ * </mf-tabs>
349
+ * ```
350
+ *
351
+ * `@angular/aria/tabs` kompozisyonu: `Tabs`/`TabList`/`Tab`/`TabPanel` her biri
352
+ * aria'nın aynı adlı yapı taşını `hostDirectives` ile taşır (ARIA rolleri,
353
+ * roving tabindex, ok tuşları, Home/End) — kit yalnız görsel katmanı ekler.
252
354
  *
253
- * Salt bir kapsayıcı — tüm ARIA/klavye/state mantığı `@angular/aria/tabs`'ın
254
- * `Tabs` pattern'inden `hostDirectives` ile ödünç alınıyor (bkz.
255
- * projects/ui-kit/README.md "a11y checklist": "mümkün olduğunca `@angular/aria`...
256
- * elle ARIA yazmak son çare"). `hostDirectives`, ana bileşenin (`mf-tabs`)
257
- * host elemanına `Tabs`'ın DI sağlayıcısını (`TABS` token) ekliyor — alttaki
258
- * `mf-tab-list`/`mf-tab-panel` bunu `inject()` ile bulup kendini
259
- * kaydediyor, template'te `ngTabs` attribute'unu ELLE yazmaya gerek yok
260
- * (`hostDirectives`'te selector yok sayılır, bkz. Angular directive
261
- * composition API).
355
+ * **Dikey yerleşim otomatik:** liste `orientation="vertical"` olunca kök yan
356
+ * yana (`flex`) dizilir, paneller kalan alanı doldurur. Yönün tek kaynağı
357
+ * listedir (ARIA `aria-orientation` orada); liste genişliği tüketicinin
358
+ * `class`'ı (ör. `w-56`).
262
359
  */
263
360
  declare class Tabs {
361
+ private readonly list;
362
+ /** `TabPanel` panel genişliği için okur. */
363
+ readonly vertical: _angular_core.Signal<boolean>;
264
364
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tabs, never>;
265
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tabs, "mf-tabs", ["mfTabs"], {}, {}, never, ["*"], true, [{ directive: typeof i1.Tabs; inputs: {}; outputs: {}; }]>;
365
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tabs, "mf-tabs", ["mfTabs"], {}, {}, ["list"], ["*"], true, [{ directive: typeof i1.Tabs; inputs: {}; outputs: {}; }]>;
266
366
  }
267
367
 
268
- export { Tab, TabList, TabPanel, TabScroller, TabStrip, Tabs, tabListVariants, tabVariants };
269
- export type { TabSelected, TabStripItem, TabsOrientation, TabsVariant };
368
+ export { Tab, TabCount, TabLink, TabList, TabNav, TabPanel, TabScroller, TabStrip, Tabs, tabCountVariants, tabHoverVariants, tabIndicatorVariants, tabListVariants, tabVariants };
369
+ export type { TabSelected, TabStripItem, TabsAlign, TabsOrientation, TabsSize, TabsVariant };
@@ -15,6 +15,8 @@ declare class TagInput extends ValueAccessorBase<string[]> implements ControlVal
15
15
  readonly placeholder: _angular_core.InputSignal<string>;
16
16
  readonly disabled: _angular_core.InputSignal<boolean>;
17
17
  readonly hasError: _angular_core.InputSignal<boolean>;
18
+ /** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */
19
+ readonly inputId: _angular_core.InputSignal<string | undefined>;
18
20
  readonly ariaLabel: _angular_core.InputSignal<string>;
19
21
  readonly fullWidth: _angular_core.InputSignal<boolean>;
20
22
  /** Verilmezse alttaki `Chip`'in kendi `MF_CHIP_LABELS` düşüşü kullanılır (bkz. `chip.ts`). */
@@ -27,7 +29,7 @@ declare class TagInput extends ValueAccessorBase<string[]> implements ControlVal
27
29
  protected commitDraft(): void;
28
30
  protected removeTag(tag: string): void;
29
31
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagInput, never>;
30
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagInput, "mf-tag-input", ["mfTagInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "unique": { "alias": "unique"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
32
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagInput, "mf-tag-input", ["mfTagInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "unique": { "alias": "unique"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
31
33
  }
32
34
 
33
35
  export { TagInput };
@@ -1,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
 
3
3
  type ToastTone = 'success' | 'danger' | 'info' | 'warning';
4
- /** @deprecated `ToastTone` kullan — `'error'` değeri `'danger'`ya taşındı (bkz. plan Faz 1a). */
4
+ /** @deprecated `ToastTone` kullan — `'error'` değeri `'danger'`ya taşındı. */
5
5
  type ToastType = ToastTone;
6
6
  interface ToastAction {
7
7
  label: string;
@@ -19,46 +19,71 @@ interface ToastItem {
19
19
  title: string;
20
20
  description?: string;
21
21
  action?: ToastAction;
22
- /** `true` — çıkış animasyonu (`animate-toast-out`) oynuyor, `EXIT_MS` sonra listeden gerçekten kaldırılır (bkz. `dismiss()`). */
22
+ /** `true` — çıkış animasyonu (`animate-toast-out`) oynuyor, `exitDurationMs()` sonra listeden gerçekten kaldırılır (bkz. `dismiss()`). */
23
23
  leaving: boolean;
24
+ /** Otomatik kapanma süresi (ms) — `0` kalıcı. Host geri sayım çubuğunu buna göre çizer. */
25
+ duration: number;
26
+ /** Üzerine gelinince/odaklanınca geri sayım durur (bkz. `pause()`/`resume()`). */
27
+ paused: boolean;
28
+ /** `promise()` bekleme durumu — spinner gösterilir, kendiliğinden kapanmaz. */
29
+ loading: boolean;
30
+ }
31
+ interface ToastPromiseMessages<T> {
32
+ loading: string;
33
+ success: string | ((value: T) => string);
34
+ error: string | ((error: unknown) => string);
35
+ description?: string;
24
36
  }
25
37
  /**
26
38
  * Uygulamanın tek, global toast kaynağı — signal-first, `providedIn: 'root'`.
27
39
  * Görsel katman `ToastHost`'ta (`<mf-toast-host>`, kök seviyede bir kez
28
- * render edilir) — burası SADECE state. Gömülebilir bir editör host
29
- * uygulamanın kendi bildirim sistemine bağımlı OLAMAZ, bu yüzden bu servis
30
- * bir ürün deposunun eski bildirim servisinden kite taşındı (2026-09-07) —
31
- * artık kütüphanenin kendi parçası.
40
+ * render edilir) — burası SADECE state.
32
41
  *
33
42
  * `success`/`error`/`info`/`warning`'in ikinci parametresi HEM düz bir
34
- * `description` string'i HEM `ToastOptions` kabul eder (geriye dönük
35
- * uyumluluk — mevcut `toasts.success('Kaydedildi', 'Değişiklikler
36
- * uygulandı.')` çağrıları DEĞİŞMEDEN çalışmaya devam eder).
43
+ * `description` string'i HEM `ToastOptions` kabul eder.
44
+ *
45
+ * Premium davranışlar (Sonner/Radix Toast ile aynı beklentiler):
46
+ * - Üzerine gelince / klavyeyle odaklanınca geri sayım DURUR, ayrılınca
47
+ * KALAN süreden devam eder (WCAG 2.2.1 "Timing Adjustable").
48
+ * - `promise()` — tek toast: "Kaydediliyor…" → "Kaydedildi" / hata.
37
49
  */
38
50
  declare class ToastService {
39
51
  readonly items: _angular_core.WritableSignal<ToastItem[]>;
40
52
  /**
41
- * `ToastHost` tarafından kuruluşta ayarlanır (bkz. `toast-host.ts`
42
- * `[limit]` input'u) — aynı anda gösterilecek AZAMİ toast sayısı,
43
- * aşılırsa EN ESKİ (henüz çıkış animasyonu oynamayan) toast'lar ANINDA
44
- * (animasyonsuz) kaldırılır. `null` (varsayılan) → sınırsız.
53
+ * `ToastHost` tarafından kuruluşta ayarlanır — aynı anda gösterilecek
54
+ * AZAMİ toast sayısı, aşılırsa EN ESKİ (henüz çıkış animasyonu oynamayan)
55
+ * toast'lar ANINDA kaldırılır. `null` (varsayılan) → sınırsız.
45
56
  */
46
57
  readonly limit: _angular_core.WritableSignal<number | null>;
47
58
  private nextId;
48
- success(title: string, options?: string | ToastOptions): void;
49
- error(title: string, options?: string | ToastOptions): void;
50
- info(title: string, options?: string | ToastOptions): void;
51
- warning(title: string, options?: string | ToastOptions): void;
59
+ private readonly timers;
60
+ success(title: string, options?: string | ToastOptions): number;
61
+ error(title: string, options?: string | ToastOptions): number;
62
+ info(title: string, options?: string | ToastOptions): number;
63
+ warning(title: string, options?: string | ToastOptions): number;
64
+ /**
65
+ * `await toasts.promise(save(), { loading: 'Kaydediliyor…', success: 'Kaydedildi', error: 'Kaydedilemedi' })`
66
+ * — tek bir toast bekleme → sonuç durumuna GEÇER (yeni toast açılmaz).
67
+ * Promise'in kendi sonucunu/hatasını olduğu gibi geri döndürür/fırlatır.
68
+ */
69
+ promise<T>(task: Promise<T>, messages: ToastPromiseMessages<T>): Promise<T>;
70
+ /** Geri sayımı durdurur (host: `mouseenter`/`focusin`). */
71
+ pause(id: number): void;
72
+ /** Kalan süreden devam eder (host: `mouseleave`/`focusout`). */
73
+ resume(id: number): void;
52
74
  /**
53
75
  * İki aşamalı: önce `leaving:true` işaretler (panel `animate-toast-out`
54
- * oynatır — bkz. `toast-host.html`), `EXIT_MS` sonra listeden gerçekten
55
- * çıkarır. Zaten çıkış oynayan bir öğede tekrar çağrılırsa (ör. kullanıcı
56
- * X'e hızlı hızlı tıklarsa) YOK SAYILIR — `list.map` idempotent.
76
+ * oynatır), `exitDurationMs()` sonra listeden gerçekten çıkarır. Zaten
77
+ * çıkış oynayan bir öğede tekrar çağrılırsa YOK SAYILIR.
57
78
  */
58
79
  dismiss(id: number): void;
59
- /** Şu an gösterilen (henüz çıkış oynamayan) TÜM toast'ları kapatır — her biri kendi çıkış animasyonuyla, `dismiss()`'in aynısı, tek tek. */
80
+ /** Şu an gösterilen (henüz çıkış oynamayan) TÜM toast'ları kapatır — her biri kendi çıkış animasyonuyla. */
60
81
  dismissAll(): void;
61
82
  private push;
83
+ private settle;
84
+ private arm;
85
+ private clearTimer;
86
+ private patch;
62
87
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastService, never>;
63
88
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
64
89
  }
@@ -75,6 +100,7 @@ declare class ToastHost {
75
100
  protected readonly toasts: ToastService;
76
101
  protected readonly iconFor: (type: ToastTone) => string;
77
102
  protected readonly chipBgFor: (type: ToastTone) => string;
103
+ protected readonly countdownClassFor: (type: ToastTone) => string;
78
104
  protected readonly cardClassFor: (item: ToastItem) => string;
79
105
  /** Kapat butonunun `aria-label`'ı — toast'ın kendi başlığıyla birleştirilir. Verilmezse `MF_TOAST_LABELS`. */
80
106
  readonly dismissLabel: _angular_core.InputSignal<string | undefined>;
@@ -91,4 +117,4 @@ declare class ToastHost {
91
117
  }
92
118
 
93
119
  export { ToastHost, ToastService };
94
- export type { ToastAction, ToastItem, ToastOptions, ToastPosition, ToastTone, ToastType };
120
+ export type { ToastAction, ToastItem, ToastOptions, ToastPosition, ToastPromiseMessages, ToastTone, ToastType };
@@ -15,11 +15,11 @@ type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
15
15
  * </ng-template>
16
16
  * ```
17
17
  *
18
- * Düz metin YOLU (ayrı bir Angular component/`ComponentPortal` kurmadan) ham
19
- * bir DOM node'u ile çiziliyor — statik metin için fazla makine olurdu.
20
- * Şablon YOLU `TemplatePortal` kullanır (gerçek Angular içeriği — binding/
21
- * directive/başka bir bileşen barındırabilir), bunun için `ViewContainerRef`
22
- * gerekiyor.
18
+ * Erişilebilirlik: balon açıkken tetikleyiciye `aria-describedby` eklenir
19
+ * (tetikleyicinin `aria-label`'ı balon metniyle AYNIYSA eklenmez — ekran
20
+ * okuyucu aynı cümleyi iki kez okumasın). Konum ortak `overlayPositions()`
21
+ * üreticisinden gelir: balon tetikleyiciden dışarı doğru büyür, taşmada
22
+ * karşı tarafa çevrilir.
23
23
  */
24
24
  declare class Tooltip implements OnDestroy {
25
25
  /** Boş string verilirse (ve `mfTooltipContent` de yoksa) tooltip tamamen devre dışı kalır (ör. koşullu etiketler için). */
@@ -30,6 +30,7 @@ declare class Tooltip implements OnDestroy {
30
30
  private readonly overlay;
31
31
  private readonly elementRef;
32
32
  private readonly viewContainerRef;
33
+ private readonly bubbleId;
33
34
  private overlayRef?;
34
35
  private bubbleEl?;
35
36
  private showHandle?;
@@ -37,16 +38,18 @@ declare class Tooltip implements OnDestroy {
37
38
  protected show(): void;
38
39
  /**
39
40
  * Public: `SearchInput` gibi, kendi state değişimiyle tooltip'i ANINDA
40
- * kapatmak isteyen tüketiciler için (bkz. search-input.ts `expand()`) —
41
- * BİLEREK senkron: tooltip hover/focus/Escape gibi yüksek frekanslı,
42
- * anlık etkileşimlerle kapanıyor, `Popover`'ın gecikmeli-dispose deseni
43
- * (bkz. `popover.ts` `EXIT_MS`) burada gereksiz karmaşıklık + testlerin
44
- * beklediği "blur → anında kaldırılır" sözleşmesini bozardı (bkz.
45
- * `tooltip.spec.ts`). Giriş animasyonu (`show()`teki `animate-overlay-in`)
46
- * yeterli — önceden tooltip'in HİÇ animasyonu yoktu (gerçek bulgu).
41
+ * kapatmak isteyen tüketiciler için (bkz. search-input.ts `expand()`).
42
+ *
43
+ * Erişilebilirlik ağacından ANINDA çıkar (`role`/`aria-describedby`
44
+ * kaldırılır — ekran okuyucu ve testler için "blur → kaldırıldı"
45
+ * sözleşmesi korunur), görsel balon ise `animate-overlay-out` oynatıp
46
+ * `exitDurationMs()` sonra dispose edilir. Yeni bir hover bu sırada yeni
47
+ * bir balon açabilir — eski ref bağımsız olarak kapanır.
47
48
  */
48
49
  hide(): void;
49
50
  ngOnDestroy(): void;
51
+ private describe;
52
+ private undescribe;
50
53
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tooltip, never>;
51
54
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Tooltip, "[mfTooltip], [mfTooltipContent]", ["mfTooltip"], { "mfTooltip": { "alias": "mfTooltip"; "required": false; "isSignal": true; }; "mfTooltipContent": { "alias": "mfTooltipContent"; "required": false; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
52
55
  }
@@ -0,0 +1,34 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
+ import * as _angular_core from '@angular/core';
3
+ import { ListboxOption } from '@mesgflow/ui-kit/listbox';
4
+
5
+ type Side = 'left' | 'right';
6
+ /**
7
+ * `<mf-transfer-list [options]="permissions" [(value)]="granted" />`
8
+ *
9
+ * İki listeli seçim (izinler, alan eşleme, sütun seçimi): solda seçilebilir,
10
+ * sağda seçilmiş öğeler. Her panel kendi araması ve çoklu seçimli
11
+ * `mf-listbox`'ı (ok tuşları, Shift+ok aralık, typeahead) ile gelir; ortadaki
12
+ * düğmeler işaretlileri ya da tümünü taşır. `value` sağ taraftaki değerler.
13
+ */
14
+ declare class TransferList<V> {
15
+ readonly options: _angular_core.InputSignal<ListboxOption<V>[]>;
16
+ /** Sağ taraftaki (seçilmiş) değerler. */
17
+ readonly value: _angular_core.ModelSignal<V[]>;
18
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfTransferListLabels>;
19
+ protected readonly sides: Side[];
20
+ protected readonly query: _angular_core.WritableSignal<Record<Side, string>>;
21
+ protected readonly checked: _angular_core.WritableSignal<Record<Side, V[]>>;
22
+ protected readonly leftOptions: _angular_core.Signal<ListboxOption<V>[]>;
23
+ protected readonly rightOptions: _angular_core.Signal<ListboxOption<V>[]>;
24
+ protected readonly filtered: _angular_core.Signal<Record<Side, ListboxOption<V>[]>>;
25
+ protected countText(side: Side): string;
26
+ protected setQuery(side: Side, text: string): void;
27
+ protected setChecked(side: Side, values: V[]): void;
28
+ protected move(from: Side): void;
29
+ protected moveAll(from: Side): void;
30
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TransferList<any>, never>;
31
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TransferList<any>, "mf-transfer-list", ["mfTransferList"], { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
32
+ }
33
+
34
+ export { TransferList };