@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
@@ -18,6 +18,8 @@ import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
18
18
  declare class SearchInput extends ValueAccessorBase<string> implements ControlValueAccessor {
19
19
  readonly value: _angular_core.ModelSignal<string>;
20
20
  readonly placeholder: _angular_core.InputSignal<string | undefined>;
21
+ /** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */
22
+ readonly inputId: _angular_core.InputSignal<string | undefined>;
21
23
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
22
24
  readonly tooltipLabel: _angular_core.InputSignal<string | undefined>;
23
25
  /** Tüketicinin gerçek veri çekme durumu — debounce bittikten sonra da spinner'ı sürdürür. */
@@ -66,7 +68,7 @@ declare class SearchInput extends ValueAccessorBase<string> implements ControlVa
66
68
  protected clear(): void;
67
69
  protected onEscape(): void;
68
70
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchInput, never>;
69
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInput, "mf-search-input", ["mfSearchInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "tooltipLabel": { "alias": "tooltipLabel"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
71
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInput, "mf-search-input", ["mfSearchInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "tooltipLabel": { "alias": "tooltipLabel"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
70
72
  }
71
73
 
72
74
  export { SearchInput };
@@ -16,6 +16,10 @@ interface SegmentedOption<T> {
16
16
  * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —
17
17
  * dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,
18
18
  * içteki `ngToolbarWidgetGroup [multi]="false"`).
19
+ *
20
+ * Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay
21
+ * eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef
22
+ * `data-selected`.
19
23
  */
20
24
  declare class SegmentedControl<T> extends ValueAccessorBase<T | null> implements ControlValueAccessor {
21
25
  readonly options: _angular_core.InputSignal<SegmentedOption<T>[]>;
@@ -41,7 +41,7 @@ declare const sidebarVariants: (props?: ({
41
41
  * yoksa 2px'lik ray aktifleşirken satırın geri kalanı kayardı (layout shift).
42
42
  *
43
43
  * Brand sınıfları (`group-data-[appearance=brand]/sidebar:…`) özgüllükte
44
- * (0,2,0) — düz `text-fg-muted`/`hover:bg-surface-alt` (0,1,0) ve `dark:`
44
+ * (0,2,0) — düz `text-fg-muted`/`hover:bg-state-hover` (0,1,0) ve `dark:`
45
45
  * (0,1,0) varyantlarının HER İKİSİNİ de cascade sırasından bağımsız yener,
46
46
  * bu yüzden ayrı bir `dark:` ikizi yazmaya gerek yok (brand görünümü iki
47
47
  * modda da AYNI).
@@ -37,4 +37,63 @@ declare const sliderHostVariants: (props?: ({
37
37
  disabled?: boolean | null | undefined;
38
38
  } & class_variance_authority_types.ClassProp) | undefined) => string;
39
39
 
40
- export { Slider, sliderHostVariants };
40
+ type RangeValue = readonly [number, number];
41
+ type Thumb = 0 | 1;
42
+ /**
43
+ * `<mf-range-slider [(value)]="price" [min]="0" [max]="1000" [step]="10" ariaLabel="Fiyat" />`
44
+ *
45
+ * İki tutamaçlı aralık seçici — WAI-ARIA APG "Multi-Thumb Slider" deseni:
46
+ * her tutamaç KENDİ `role="slider"` öğesidir ve sınırları diğerine bağlıdır
47
+ * (alt tutamacın `aria-valuemax`'ı üst tutamacın değeri, tersi de öyle) —
48
+ * ekran okuyucu aralığı doğru anlar, tutamaçlar birbirinin üstünden geçemez.
49
+ *
50
+ * - Klavye: ok tuşları adım, PageUp/PageDown 10 adım, Home/End sınır. RTL'de
51
+ * yatay oklar görsel yöne göre çevrilir.
52
+ * - Pointer: iz üzerinde herhangi bir yere basınca EN YAKIN tutamaç oraya
53
+ * atlar ve sürüklenir.
54
+ * - `showValue`: odak/sürükleme sırasında tutamacın üstünde değer balonu
55
+ * (`valueFormatter` ile biçimlenir; aynı metin `aria-valuetext` olur).
56
+ * - `minDistance`: iki tutamaç arasındaki en küçük fark.
57
+ */
58
+ declare class RangeSlider extends ValueAccessorBase<RangeValue> implements ControlValueAccessor {
59
+ readonly value: _angular_core.ModelSignal<RangeValue>;
60
+ readonly min: _angular_core.InputSignal<number>;
61
+ readonly max: _angular_core.InputSignal<number>;
62
+ readonly step: _angular_core.InputSignal<number>;
63
+ /** İki tutamaç arasındaki en küçük fark (adım biriminde değil, değer biriminde). */
64
+ readonly minDistance: _angular_core.InputSignal<number>;
65
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
66
+ readonly showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
67
+ /** Değer balonu ve `aria-valuetext` biçimi — ör. `v => '$' + v`. */
68
+ readonly valueFormatter: _angular_core.InputSignal<(value: number) => string>;
69
+ /** Grup için erişilebilir ad; tutamaç adları `"{ad} — en az/en çok"` olarak türetilir. */
70
+ readonly ariaLabel: _angular_core.InputSignal<string>;
71
+ /** Tutamaç adlarını tamamen ezmek için (i18n). */
72
+ readonly minThumbLabel: _angular_core.InputSignal<string | undefined>;
73
+ readonly maxThumbLabel: _angular_core.InputSignal<string | undefined>;
74
+ protected readonly thumbs: Thumb[];
75
+ protected readonly thumbClass: string;
76
+ protected readonly active: _angular_core.WritableSignal<Thumb | null>;
77
+ protected readonly focused: _angular_core.WritableSignal<Thumb | null>;
78
+ private readonly host;
79
+ protected readonly percents: _angular_core.Signal<readonly [number, number]>;
80
+ private readonly labels;
81
+ private readonly thumbName;
82
+ protected readonly minLabel: _angular_core.Signal<string>;
83
+ protected readonly maxLabel: _angular_core.Signal<string>;
84
+ protected readonly hostClasses: _angular_core.Signal<string>;
85
+ protected format(value: number): string;
86
+ writeValue(value: RangeValue | null): void;
87
+ private snap;
88
+ private setThumb;
89
+ protected onKeydown(event: KeyboardEvent, thumb: Thumb): void;
90
+ protected onPointerDown(event: PointerEvent): void;
91
+ protected onPointerMove(event: PointerEvent): void;
92
+ protected onPointerUp(event: PointerEvent): void;
93
+ private rawFromPointer;
94
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RangeSlider, never>;
95
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RangeSlider, "mf-range-slider", ["mfRangeSlider"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "minDistance": { "alias": "minDistance"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "valueFormatter": { "alias": "valueFormatter"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "minThumbLabel": { "alias": "minThumbLabel"; "required": false; "isSignal": true; }; "maxThumbLabel": { "alias": "maxThumbLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
96
+ }
97
+
98
+ export { RangeSlider, Slider, sliderHostVariants };
99
+ export type { RangeValue };
@@ -0,0 +1,103 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
+ import * as _angular_core from '@angular/core';
3
+ import { TemplateRef } from '@angular/core';
4
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
5
+
6
+ interface SortableMove {
7
+ previousIndex: number;
8
+ currentIndex: number;
9
+ }
10
+ /**
11
+ * `<mf-sortable-list [(items)]="tasks" [itemLabel]="labelOf">
12
+ * <ng-template let-task>{{ task.title }}</ng-template>
13
+ * </mf-sortable-list>`
14
+ *
15
+ * Sürükle-bırak ile yeniden sıralanan liste — CDK drag-drop üstüne ERİŞİLEBİLİR
16
+ * klavye modu eklenir (CDK'da yok): tutamaca odaklan → Boşluk/Enter ile al →
17
+ * ↑/↓ taşı → Boşluk/Enter bırak · Escape geri al. Her adım `LiveAnnouncer`
18
+ * ile duyurulur (WCAG 2.1.1 — sürükle-bırakın klavye eşdeğeri).
19
+ *
20
+ * `itemLabel`: duyurular ve tutamaç adı için öğenin okunur adı.
21
+ */
22
+ declare class SortableList<T> {
23
+ readonly items: _angular_core.ModelSignal<T[]>;
24
+ /** Duyurular ve tutamaç adı için okunur ad. */
25
+ readonly itemLabel: _angular_core.InputSignal<(item: T) => string>;
26
+ readonly trackBy: _angular_core.InputSignal<(item: T, index: number) => unknown>;
27
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
28
+ readonly ariaLabel: _angular_core.InputSignal<string>;
29
+ readonly moved: _angular_core.OutputEmitterRef<SortableMove>;
30
+ protected readonly template: _angular_core.Signal<TemplateRef<any> | undefined>;
31
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfSortableLabels>;
32
+ protected readonly hintId: string;
33
+ protected readonly grabbed: _angular_core.WritableSignal<number | null>;
34
+ private readonly announcer;
35
+ private readonly host;
36
+ private grabStart;
37
+ protected handleLabel(item: T): string;
38
+ protected onDrop(event: CdkDragDrop<T[]>): void;
39
+ protected onKeydown(event: KeyboardEvent, index: number): void;
40
+ protected cancelOnBlur(): void;
41
+ private commit;
42
+ /** Taşıma sonrası `@for` DOM'u yeniden sıraladığında odağı taşınan tutamakta tut. */
43
+ private refocus;
44
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SortableList<any>, never>;
45
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SortableList<any>, "mf-sortable-list", ["mfSortableList"], { "items": { "alias": "items"; "required": true; "isSignal": true; }; "itemLabel": { "alias": "itemLabel"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "moved": "moved"; }, ["template"], never, true, never>;
46
+ }
47
+
48
+ interface KanbanColumn<T> {
49
+ id: string;
50
+ title: string;
51
+ items: T[];
52
+ /** Sütun başlığındaki nokta rengi. */
53
+ tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'help';
54
+ /** WIP sınırı — aşılınca sayaç uyarı tonuna döner. */
55
+ limit?: number;
56
+ }
57
+ interface KanbanMove<T> {
58
+ item: T;
59
+ from: string;
60
+ to: string;
61
+ index: number;
62
+ }
63
+ /**
64
+ * `<mf-kanban [(columns)]="board" [itemLabel]="titleOf" (moved)="save($event)">
65
+ * <ng-template let-card>…kart içeriği…</ng-template>
66
+ * </mf-kanban>`
67
+ *
68
+ * Sütunlar arası sürükle-bırak (CDK `cdkDropListGroup`) + klavye modu:
69
+ * karta odaklan → Boşluk/Enter al → ↑/↓ sütun içinde, ←/→ sütunlar arası →
70
+ * Boşluk/Enter bırak · Escape geri al. Her adım ekran okuyucuya duyurulur.
71
+ * Sütunlar yatay kaydırılır (mobilde de kullanılabilir).
72
+ */
73
+ declare class Kanban<T> {
74
+ readonly columns: _angular_core.ModelSignal<KanbanColumn<T>[]>;
75
+ readonly itemLabel: _angular_core.InputSignal<(item: T) => string>;
76
+ readonly ariaLabel: _angular_core.InputSignal<string>;
77
+ readonly moved: _angular_core.OutputEmitterRef<KanbanMove<T>>;
78
+ protected readonly template: _angular_core.Signal<TemplateRef<any> | undefined>;
79
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfSortableLabels>;
80
+ protected readonly hintId: string;
81
+ private readonly grabbed;
82
+ private grabOrigin;
83
+ private readonly announcer;
84
+ private readonly host;
85
+ protected dot(column: KanbanColumn<T>): string;
86
+ protected isGrabbed(c: number, i: number): boolean;
87
+ protected onDrop(event: CdkDragDrop<string>): void;
88
+ protected onKeydown(event: KeyboardEvent, c: number, i: number): void;
89
+ private move;
90
+ private transfer;
91
+ private say;
92
+ private focusCard;
93
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Kanban<any>, never>;
94
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Kanban<any>, "mf-kanban", ["mfKanban"], { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "itemLabel": { "alias": "itemLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; "moved": "moved"; }, ["template"], never, true, never>;
95
+ }
96
+
97
+ /** `'{item} moved to {position}'` gibi şablonları doldurur. */
98
+ declare function fillTemplate(template: string, values: Record<string, string | number>): string;
99
+ /** Diziden bir öğeyi taşır — yeni dizi döner (orijinal değişmez). */
100
+ declare function moveItem<T>(list: readonly T[], from: number, to: number): T[];
101
+
102
+ export { Kanban, SortableList, fillTemplate, moveItem };
103
+ export type { KanbanColumn, KanbanMove, SortableMove };
@@ -4,15 +4,12 @@ import { MfSize, MfTone } from '@mesgflow/ui-kit/core';
4
4
  type SpinnerSize = 'xs' | MfSize;
5
5
  type SpinnerTone = MfTone | 'current';
6
6
  /**
7
- * `<mf-spinner size="sm" />` — dönen yüklenme göstergesi. Ayrı bir SVG/CSS
8
- * animasyonu ÇİZMEK yerine kitin zaten her yerde kullandığı `progress_activity`
9
- * Material Symbol'ü + `animate-spin` deseni tekrar kullanılıyor (bkz.
10
- * `ConfirmDialog`'un onay butonu) — tüm "yükleniyor" göstergeleri tek bir
11
- * görsel dil konuşuyor.
7
+ * `<mf-spinner size="sm" />` — dönen yüklenme göstergesi: iki katmanlı SVG
8
+ * halka (soluk iz + dönen yay). v0.7 öncesi Material Symbols ligature'ıydı —
9
+ * font yüklenene kadar "progress_activity" METNİ görünüyordu (FOUT) ve
10
+ * ikon seti değişince (Lucide) kırılıyordu; SVG her ikisinden bağımsız.
12
11
  *
13
- * `role="status"` + `aria-label` HOST'ta (ikonun kendisi `Icon` directive'i
14
- * gereği her zaman `aria-hidden` — bkz. icon.ts) — ekran okuyucu ligature
15
- * kaynak metnini ("progress_activity") DEĞİL, buradaki anlamlı etiketi anons eder.
12
+ * `role="status"` + `aria-label` HOST'ta, SVG `aria-hidden`.
16
13
  */
17
14
  declare class Spinner {
18
15
  readonly size: _angular_core.InputSignal<SpinnerSize>;
@@ -0,0 +1,47 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ interface SplitButtonItem<V = string> {
4
+ label: string;
5
+ value: V;
6
+ icon?: string;
7
+ disabled?: boolean;
8
+ /** Tehlikeli eylem (Sil) — kırmızı metin. */
9
+ danger?: boolean;
10
+ }
11
+ /**
12
+ * `<mf-split-button label="Kaydet" [items]="more" (primaryClick)="save()" (itemSelect)="run($event)" />`
13
+ *
14
+ * Birincil eylem + ilgili ikincil eylemler menüsü (GitHub "Merge ▾", Gmail
15
+ * "Gönder ▾"). İki gerçek düğme: soldaki eylemi çalıştırır, sağdaki
16
+ * (`aria-haspopup="menu"`) menüyü açar — ekran okuyucu ikisini ayrı duyurur.
17
+ *
18
+ * Menü `@angular/aria/menu` (ok tuşları, typeahead, Escape) + `mf-popover`
19
+ * (tetikleyiciden büyüyen panel). Öğeler VERİ olarak verilir: `mfMenuItem`
20
+ * içerik projeksiyonuyla aria menüsüne bağlanamadığı için bu bileşen onları
21
+ * kendi şablonunda çizer.
22
+ */
23
+ declare class SplitButton<V = string> {
24
+ readonly label: _angular_core.InputSignal<string>;
25
+ readonly items: _angular_core.InputSignal<SplitButtonItem<V>[]>;
26
+ readonly icon: _angular_core.InputSignal<string>;
27
+ readonly tone: _angular_core.InputSignal<"primary" | "neutral" | "success" | "warning" | "danger" | "info" | "help" | null | undefined>;
28
+ readonly appearance: _angular_core.InputSignal<"filled" | "soft" | "outlined" | "ghost" | "text" | "link" | null | undefined>;
29
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
30
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
31
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
32
+ /** Menü düğmesinin erişilebilir adı — verilmezse `MF_SPLIT_BUTTON_LABELS`. */
33
+ readonly menuLabel: _angular_core.InputSignal<string | undefined>;
34
+ readonly primaryClick: _angular_core.OutputEmitterRef<void>;
35
+ readonly itemSelect: _angular_core.OutputEmitterRef<V>;
36
+ private readonly labels;
37
+ protected readonly effectiveMenuLabel: _angular_core.Signal<string>;
38
+ /** Bitişik iki düğme: iç köşeler kare, ayırıcı çizgi (dolu görünümde açık ton). */
39
+ protected readonly primaryClass: _angular_core.Signal<string>;
40
+ protected readonly toggleClass: _angular_core.Signal<string>;
41
+ protected onSelect(value: V): void;
42
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SplitButton<any>, never>;
43
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SplitButton<any>, "mf-split-button", ["mfSplitButton"], { "label": { "alias": "label"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "menuLabel": { "alias": "menuLabel"; "required": false; "isSignal": true; }; }, { "primaryClick": "primaryClick"; "itemSelect": "itemSelect"; }, never, never, true, never>;
44
+ }
45
+
46
+ export { SplitButton };
47
+ export type { SplitButtonItem };
@@ -1,4 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
2
3
 
3
4
  /**
4
5
  * `<mf-splitter><div splitterPane1>Sol</div><div splitterPane2>Sağ</div></mf-splitter>`
@@ -37,4 +38,66 @@ declare class Splitter {
37
38
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<Splitter, "mf-splitter", ["mfSplitter"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "initialSplit": { "alias": "split"; "required": false; "isSignal": true; }; }, {}, never, ["[splitterPane1]", "[splitterPane2]"], true, never>;
38
39
  }
39
40
 
40
- export { Splitter };
41
+ declare class Panel {
42
+ /** % */
43
+ readonly minSize: _angular_core.InputSignal<number>;
44
+ /** % */
45
+ readonly maxSize: _angular_core.InputSignal<number>;
46
+ /** Grup tarafından yazılır (%). */
47
+ readonly size: _angular_core.WritableSignal<number>;
48
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Panel, never>;
49
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Panel, "mf-panel", ["mfPanel"], { "minSize": { "alias": "minSize"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
50
+ }
51
+ /**
52
+ * `<mf-panel-group [(sizes)]="layout" orientation="horizontal">
53
+ * <mf-panel [minSize]="15">Gezgin</mf-panel>
54
+ * <mf-panel-resizer />
55
+ * <mf-panel>Editör</mf-panel>
56
+ * <mf-panel-resizer />
57
+ * <mf-panel [minSize]="20">Önizleme</mf-panel>
58
+ * </mf-panel-group>`
59
+ *
60
+ * N panelli yeniden boyutlandırma (IDE/e-posta editörü düzeni). `sizes`
61
+ * yüzde dizisi (toplam 100); her ayırıcı iki komşu paneli etkiler.
62
+ * Ayırıcı WAI-ARIA "Window Splitter": `role="separator"` + `aria-valuenow`
63
+ * (sol panelin yüzdesi) + ok tuşları (Shift ile 10), Home/End, çift tık eşitler.
64
+ * `minSize`/`maxSize` panel başına sınır. `sizes` verilmezse eşit bölünür.
65
+ */
66
+ declare class PanelGroup {
67
+ readonly sizes: _angular_core.ModelSignal<number[]>;
68
+ readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
69
+ readonly panels: _angular_core.Signal<readonly Panel[]>;
70
+ readonly resizers: _angular_core.Signal<readonly PanelResizer[]>;
71
+ readonly host: ElementRef<HTMLElement>;
72
+ /** Etkin boyutlar — `sizes` panel sayısıyla uyuşmuyorsa eşit bölünmüş. */
73
+ readonly resolved: _angular_core.Signal<number[]>;
74
+ constructor();
75
+ /** `index` numaralı ayırıcıyı `delta` yüzde kaydırır (komşu iki panel arasında). */
76
+ resize(index: number, delta: number): void;
77
+ /** İki komşuyu eşitler (çift tık). */
78
+ equalize(index: number): void;
79
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PanelGroup, never>;
80
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PanelGroup, "mf-panel-group", ["mfPanelGroup"], { "sizes": { "alias": "sizes"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "sizes": "sizesChange"; }, ["panels", "resizers"], ["*"], true, never>;
81
+ }
82
+ declare class PanelResizer {
83
+ protected readonly group: PanelGroup;
84
+ private readonly labels;
85
+ private readonly el;
86
+ readonly index: _angular_core.WritableSignal<number>;
87
+ private startPos;
88
+ private startSize;
89
+ private dragging;
90
+ protected readonly valueNow: _angular_core.Signal<number>;
91
+ protected readonly valueMin: _angular_core.Signal<number>;
92
+ protected readonly valueMax: _angular_core.Signal<number>;
93
+ protected readonly label: _angular_core.Signal<string>;
94
+ protected readonly classes: _angular_core.Signal<string>;
95
+ protected onKeydown(e: Event): void;
96
+ protected onPointerDown(e: Event): void;
97
+ protected onPointerMove(e: Event): void;
98
+ protected onPointerUp(e: Event): void;
99
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PanelResizer, never>;
100
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PanelResizer, "mf-panel-resizer", ["mfPanelResizer"], {}, {}, never, never, true, never>;
101
+ }
102
+
103
+ export { Panel, PanelGroup, PanelResizer, Splitter };
@@ -39,6 +39,9 @@ declare class StatTile {
39
39
  readonly trendLabel: _angular_core.InputSignal<string>;
40
40
  protected readonly iconClasses: _angular_core.Signal<string>;
41
41
  protected readonly deltaIcon: _angular_core.Signal<string>;
42
+ private readonly labels;
43
+ /** Yön ikon ile ÇİZİLİR ama ekran okuyucuya metin olarak da söylenir. */
44
+ protected readonly deltaText: _angular_core.Signal<string>;
42
45
  protected readonly deltaClasses: _angular_core.Signal<string>;
43
46
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatTile, never>;
44
47
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatTile, "mf-stat-tile", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "deltaDirection": { "alias": "deltaDirection"; "required": false; "isSignal": true; }; "upIsGood": { "alias": "upIsGood"; "required": false; "isSignal": true; }; "deltaCaption": { "alias": "deltaCaption"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "trendLabel": { "alias": "trendLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -1,48 +1,70 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
3
 
4
+ type StepperOrientation = 'horizontal' | 'vertical';
3
5
  /**
4
- * `<mf-step label="Hesap" description="Bilgilerinizi girin" />` — bir
5
- * `mf-stepper` ATASI ZORUNLU (bkz. `stepper.ts`'in JSDoc'u). Bağlayıcı
6
- * çizgi kendi `::after` pseudo-elementi (`last:after:hidden` ile SON
7
- * adımda gizlenir — hangi adımın son olduğunu bilmek için ayrı bir
8
- * hesaplama GEREKMEZ, saf CSS `:last-child`).
9
- */
10
- declare class Step {
11
- readonly label: _angular_core.InputSignal<string>;
12
- readonly description: _angular_core.InputSignal<string>;
13
- private readonly stepper;
14
- protected readonly index: number;
15
- protected readonly isComplete: _angular_core.Signal<boolean>;
16
- protected readonly isCurrent: _angular_core.Signal<boolean>;
17
- protected readonly hostClasses: _angular_core.Signal<string>;
18
- protected circleClasses(): string;
19
- protected labelClasses(): string;
20
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<Step, never>;
21
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Step, "mf-step", ["mfStep"], { "label": { "alias": "label"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
22
- }
23
-
24
- /**
25
- * `<mf-stepper [current]="1"><mf-step label="Hesap" /><mf-step label="Ödeme" /></mf-stepper>`
6
+ * `<mf-stepper [(current)]="step" clickable linear><mf-step label="Hesap" /><mf-step label="Ödeme" /></mf-stepper>`
7
+ *
8
+ * İlerleme göstergesi + (isteğe bağlı) gezinme:
9
+ * - `current` iki yönlü model; `next()` / `prev()` / `goTo(i)` programatik API
10
+ * (`#stepper="mfStepper"` ile şablondan çağrılır).
11
+ * - `clickable`: adımlar düğme olur, tıklayınca o adıma gider.
12
+ * - `linear`: yalnızca tamamlanmış adımlara ve BİR sonraki adıma gidilebilir
13
+ * (sihirbazın atlanmasını önler).
14
+ * - `orientation="vertical"`: dikey düzen (uzun sihirbazlar, yan panel).
26
15
  *
27
- * Salt görsel bir ilerleme göstergesi — gezinme (bir sonraki/önceki adıma
28
- * geçme) çağıranın kendi sorumluluğunda (`[current]`'ı değiştiren düğmeler
29
- * dışarıda yaşar). Her `mf-step` kendi index'ini KURULUŞTA bir kez
30
- * `registerStep()` ile alır — `contentChildren` yerine basit bir kayıt-sırası
31
- * sayacı, `Step`'in `Stepper`'ı import ETMESİ yeterli (tersi YOK, döngüsel
32
- * bir tip bağımlılığı kurulmuyor).
16
+ * Her `mf-step` kendi index'ini kuruluşta `registerStep()` ile alır — `Step`
17
+ * `Stepper`'ı import eder, tersi değil (döngüsel bağımlılık yok).
33
18
  */
34
19
  declare class Stepper {
35
- readonly current: _angular_core.InputSignal<number>;
20
+ readonly current: _angular_core.ModelSignal<number>;
36
21
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
37
- private readonly stepperLabels;
22
+ readonly clickable: _angular_core.InputSignalWithTransform<boolean, unknown>;
23
+ readonly linear: _angular_core.InputSignalWithTransform<boolean, unknown>;
24
+ readonly orientation: _angular_core.InputSignal<StepperOrientation>;
25
+ readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfStepperLabels>;
38
26
  protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
39
- private nextIndex;
27
+ private readonly count;
28
+ /** Kayıtlı adım sayısı. */
29
+ readonly stepCount: _angular_core.Signal<number>;
30
+ protected readonly hostClasses: _angular_core.Signal<string>;
40
31
  /** Her `mf-step` kurulumda BİR KEZ çağırır — kendi (sıradaki) index'ini alır. */
41
32
  registerStep(): number;
42
33
  isComplete(index: number): boolean;
43
34
  isCurrent(index: number): boolean;
35
+ canGoTo(index: number): boolean;
36
+ goTo(index: number): void;
37
+ next(): void;
38
+ prev(): void;
44
39
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Stepper, never>;
45
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Stepper, "mf-stepper", ["mfStepper"], { "current": { "alias": "current"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
40
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Stepper, "mf-stepper", ["mfStepper"], { "current": { "alias": "current"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "current": "currentChange"; }, never, ["*"], true, never>;
41
+ }
42
+
43
+ type StepState = 'auto' | 'completed' | 'error';
44
+ /**
45
+ * `<mf-step label="Hesap" description="Bilgilerinizi girin" [state]="'error'" optional />`
46
+ * — bir `mf-stepper` ATASI ZORUNLU. Bağlayıcı çizgi kendi `::after`'ı
47
+ * (`last:after:hidden` son adımda gizler).
48
+ *
49
+ * `clickable` stepper'da adım bir `<button>` olur (gidilemeyen adımlar
50
+ * devre dışı). Durum ikonları ekran okuyucuya metinle de söylenir.
51
+ */
52
+ declare class Step {
53
+ readonly label: _angular_core.InputSignal<string>;
54
+ readonly description: _angular_core.InputSignal<string>;
55
+ /** `auto`: current'a göre; `completed`/`error` elle zorlanır (doğrulama hatası vb.). */
56
+ readonly state: _angular_core.InputSignal<StepState>;
57
+ readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
58
+ protected readonly stepper: Stepper;
59
+ protected readonly index: number;
60
+ protected readonly isCurrent: _angular_core.Signal<boolean>;
61
+ protected readonly resolvedState: _angular_core.Signal<StepState>;
62
+ protected readonly hostClasses: _angular_core.Signal<string>;
63
+ protected circleClasses(): string;
64
+ protected labelClasses(): string;
65
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Step, never>;
66
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Step, "mf-step", ["mfStep"], { "label": { "alias": "label"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
46
67
  }
47
68
 
48
69
  export { Step, Stepper };
70
+ export type { StepState, StepperOrientation };
@@ -489,6 +489,8 @@ declare class Table<T> {
489
489
  */
490
490
  protected onSortClick(column: TableColumn<T>, event?: MouseEvent): void;
491
491
  protected sortDirectionFor(field: string): SortDirection | null;
492
+ /** WAI-ARIA `aria-sort` — ekran okuyucu sütunun sıralama yönünü duyurur (yalnızca sıralanabilir sütunlarda). */
493
+ protected ariaSortFor(field: string): 'ascending' | 'descending' | 'none';
492
494
  /** 1 tabanlı sıra konumu — yalnızca 2+ alan aktifken gösterilir (tekil sıralamada numara gürültü olurdu). */
493
495
  protected sortOrderFor(field: string): number | null;
494
496
  protected onFiltersChange(filters: AppliedFilter[]): void;