@mesgflow/ui-kit 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/fesm2022/mesgflow-ui-kit-accordion.mjs +75 -0
  4. package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -0
  5. package/fesm2022/mesgflow-ui-kit-alert.mjs +165 -0
  6. package/fesm2022/mesgflow-ui-kit-alert.mjs.map +1 -0
  7. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +88 -0
  8. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs.map +1 -0
  9. package/fesm2022/mesgflow-ui-kit-avatar.mjs +123 -0
  10. package/fesm2022/mesgflow-ui-kit-avatar.mjs.map +1 -0
  11. package/fesm2022/mesgflow-ui-kit-badge.mjs +68 -0
  12. package/fesm2022/mesgflow-ui-kit-badge.mjs.map +1 -0
  13. package/fesm2022/mesgflow-ui-kit-banner.mjs +111 -0
  14. package/fesm2022/mesgflow-ui-kit-banner.mjs.map +1 -0
  15. package/fesm2022/mesgflow-ui-kit-box-input.mjs +78 -0
  16. package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -0
  17. package/fesm2022/mesgflow-ui-kit-brand.mjs +120 -0
  18. package/fesm2022/mesgflow-ui-kit-brand.mjs.map +1 -0
  19. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +84 -0
  20. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs.map +1 -0
  21. package/fesm2022/mesgflow-ui-kit-button-group.mjs +37 -0
  22. package/fesm2022/mesgflow-ui-kit-button-group.mjs.map +1 -0
  23. package/fesm2022/mesgflow-ui-kit-button.mjs +359 -0
  24. package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -0
  25. package/fesm2022/mesgflow-ui-kit-card.mjs +128 -0
  26. package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -0
  27. package/fesm2022/mesgflow-ui-kit-chart.mjs +538 -0
  28. package/fesm2022/mesgflow-ui-kit-chart.mjs.map +1 -0
  29. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +45 -0
  30. package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -0
  31. package/fesm2022/mesgflow-ui-kit-chip.mjs +123 -0
  32. package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -0
  33. package/fesm2022/mesgflow-ui-kit-code-block.mjs +71 -0
  34. package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -0
  35. package/fesm2022/mesgflow-ui-kit-collapsible.mjs +89 -0
  36. package/fesm2022/mesgflow-ui-kit-collapsible.mjs.map +1 -0
  37. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +210 -0
  38. package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -0
  39. package/fesm2022/mesgflow-ui-kit-combobox.mjs +181 -0
  40. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -0
  41. package/fesm2022/mesgflow-ui-kit-command.mjs +491 -0
  42. package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -0
  43. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +92 -0
  44. package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -0
  45. package/fesm2022/mesgflow-ui-kit-copy-button.mjs +167 -0
  46. package/fesm2022/mesgflow-ui-kit-copy-button.mjs.map +1 -0
  47. package/fesm2022/mesgflow-ui-kit-core.mjs +624 -0
  48. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -0
  49. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +643 -0
  50. package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -0
  51. package/fesm2022/mesgflow-ui-kit-description-list.mjs +76 -0
  52. package/fesm2022/mesgflow-ui-kit-description-list.mjs.map +1 -0
  53. package/fesm2022/mesgflow-ui-kit-dialog.mjs +700 -0
  54. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -0
  55. package/fesm2022/mesgflow-ui-kit-divider.mjs +62 -0
  56. package/fesm2022/mesgflow-ui-kit-divider.mjs.map +1 -0
  57. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +126 -0
  58. package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -0
  59. package/fesm2022/mesgflow-ui-kit-empty-state.mjs +70 -0
  60. package/fesm2022/mesgflow-ui-kit-empty-state.mjs.map +1 -0
  61. package/fesm2022/mesgflow-ui-kit-field.mjs +42 -0
  62. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -0
  63. package/fesm2022/mesgflow-ui-kit-hover-card.mjs +171 -0
  64. package/fesm2022/mesgflow-ui-kit-hover-card.mjs.map +1 -0
  65. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +258 -0
  66. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -0
  67. package/fesm2022/mesgflow-ui-kit-icon.mjs +174 -0
  68. package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -0
  69. package/fesm2022/mesgflow-ui-kit-input.mjs +448 -0
  70. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -0
  71. package/fesm2022/mesgflow-ui-kit-kbd.mjs +24 -0
  72. package/fesm2022/mesgflow-ui-kit-kbd.mjs.map +1 -0
  73. package/fesm2022/mesgflow-ui-kit-link.mjs +48 -0
  74. package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -0
  75. package/fesm2022/mesgflow-ui-kit-menu.mjs +105 -0
  76. package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -0
  77. package/fesm2022/mesgflow-ui-kit-number-input.mjs +153 -0
  78. package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -0
  79. package/fesm2022/mesgflow-ui-kit-otp-input.mjs +164 -0
  80. package/fesm2022/mesgflow-ui-kit-otp-input.mjs.map +1 -0
  81. package/fesm2022/mesgflow-ui-kit-page-header.mjs +83 -0
  82. package/fesm2022/mesgflow-ui-kit-page-header.mjs.map +1 -0
  83. package/fesm2022/mesgflow-ui-kit-pagination.mjs +99 -0
  84. package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -0
  85. package/fesm2022/mesgflow-ui-kit-password-input.mjs +120 -0
  86. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -0
  87. package/fesm2022/mesgflow-ui-kit-popover.mjs +213 -0
  88. package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -0
  89. package/fesm2022/mesgflow-ui-kit-progress.mjs +82 -0
  90. package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -0
  91. package/fesm2022/mesgflow-ui-kit-radio.mjs +123 -0
  92. package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -0
  93. package/fesm2022/mesgflow-ui-kit-rating.mjs +116 -0
  94. package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -0
  95. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +84 -0
  96. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs.map +1 -0
  97. package/fesm2022/mesgflow-ui-kit-search-input.mjs +154 -0
  98. package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -0
  99. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +95 -0
  100. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -0
  101. package/fesm2022/mesgflow-ui-kit-select.mjs +227 -0
  102. package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -0
  103. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +449 -0
  104. package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -0
  105. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +74 -0
  106. package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -0
  107. package/fesm2022/mesgflow-ui-kit-slider.mjs +179 -0
  108. package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -0
  109. package/fesm2022/mesgflow-ui-kit-spinner.mjs +67 -0
  110. package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -0
  111. package/fesm2022/mesgflow-ui-kit-splitter.mjs +97 -0
  112. package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -0
  113. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +98 -0
  114. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -0
  115. package/fesm2022/mesgflow-ui-kit-stepper.mjs +133 -0
  116. package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -0
  117. package/fesm2022/mesgflow-ui-kit-switch.mjs +73 -0
  118. package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -0
  119. package/fesm2022/mesgflow-ui-kit-table.mjs +1783 -0
  120. package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -0
  121. package/fesm2022/mesgflow-ui-kit-tabs.mjs +569 -0
  122. package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -0
  123. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +138 -0
  124. package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -0
  125. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +53 -0
  126. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs.map +1 -0
  127. package/fesm2022/mesgflow-ui-kit-theming.mjs +1016 -0
  128. package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -0
  129. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +138 -0
  130. package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -0
  131. package/fesm2022/mesgflow-ui-kit-timeline.mjs +91 -0
  132. package/fesm2022/mesgflow-ui-kit-timeline.mjs.map +1 -0
  133. package/fesm2022/mesgflow-ui-kit-toast.mjs +202 -0
  134. package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -0
  135. package/fesm2022/mesgflow-ui-kit-toggle.mjs +243 -0
  136. package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -0
  137. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +99 -0
  138. package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -0
  139. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +160 -0
  140. package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -0
  141. package/fesm2022/mesgflow-ui-kit-tour.mjs +272 -0
  142. package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -0
  143. package/fesm2022/mesgflow-ui-kit-tree-select.mjs +177 -0
  144. package/fesm2022/mesgflow-ui-kit-tree-select.mjs.map +1 -0
  145. package/fesm2022/mesgflow-ui-kit-tree.mjs +82 -0
  146. package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -0
  147. package/fesm2022/mesgflow-ui-kit.mjs +12851 -0
  148. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -0
  149. package/package.json +374 -0
  150. package/preset.css +20 -0
  151. package/tokens/color.css +693 -0
  152. package/tokens/contrast.css +68 -0
  153. package/tokens/elevation.css +68 -0
  154. package/tokens/motion.css +277 -0
  155. package/tokens/radius.css +69 -0
  156. package/tokens/typography.css +127 -0
  157. package/tokens.css +41 -0
  158. package/types/mesgflow-ui-kit-accordion.d.ts +42 -0
  159. package/types/mesgflow-ui-kit-alert.d.ts +60 -0
  160. package/types/mesgflow-ui-kit-avatar-group.d.ts +28 -0
  161. package/types/mesgflow-ui-kit-avatar.d.ts +23 -0
  162. package/types/mesgflow-ui-kit-badge.d.ts +39 -0
  163. package/types/mesgflow-ui-kit-banner.d.ts +42 -0
  164. package/types/mesgflow-ui-kit-box-input.d.ts +45 -0
  165. package/types/mesgflow-ui-kit-brand.d.ts +48 -0
  166. package/types/mesgflow-ui-kit-breadcrumb.d.ts +26 -0
  167. package/types/mesgflow-ui-kit-button-group.d.ts +17 -0
  168. package/types/mesgflow-ui-kit-button.d.ts +75 -0
  169. package/types/mesgflow-ui-kit-card.d.ts +71 -0
  170. package/types/mesgflow-ui-kit-chart.d.ts +242 -0
  171. package/types/mesgflow-ui-kit-checkbox.d.ts +17 -0
  172. package/types/mesgflow-ui-kit-chip.d.ts +46 -0
  173. package/types/mesgflow-ui-kit-code-block.d.ts +56 -0
  174. package/types/mesgflow-ui-kit-collapsible.d.ts +39 -0
  175. package/types/mesgflow-ui-kit-color-picker.d.ts +78 -0
  176. package/types/mesgflow-ui-kit-combobox.d.ts +74 -0
  177. package/types/mesgflow-ui-kit-command.d.ts +185 -0
  178. package/types/mesgflow-ui-kit-context-menu.d.ts +40 -0
  179. package/types/mesgflow-ui-kit-copy-button.d.ts +47 -0
  180. package/types/mesgflow-ui-kit-core.d.ts +508 -0
  181. package/types/mesgflow-ui-kit-date-picker.d.ts +215 -0
  182. package/types/mesgflow-ui-kit-description-list.d.ts +23 -0
  183. package/types/mesgflow-ui-kit-dialog.d.ts +342 -0
  184. package/types/mesgflow-ui-kit-divider.d.ts +23 -0
  185. package/types/mesgflow-ui-kit-dropzone.d.ts +47 -0
  186. package/types/mesgflow-ui-kit-empty-state.d.ts +18 -0
  187. package/types/mesgflow-ui-kit-field.d.ts +26 -0
  188. package/types/mesgflow-ui-kit-hover-card.d.ts +52 -0
  189. package/types/mesgflow-ui-kit-i18n-tr.d.ts +14 -0
  190. package/types/mesgflow-ui-kit-icon.d.ts +76 -0
  191. package/types/mesgflow-ui-kit-input.d.ts +186 -0
  192. package/types/mesgflow-ui-kit-kbd.d.ts +9 -0
  193. package/types/mesgflow-ui-kit-link.d.ts +20 -0
  194. package/types/mesgflow-ui-kit-menu.d.ts +53 -0
  195. package/types/mesgflow-ui-kit-number-input.d.ts +55 -0
  196. package/types/mesgflow-ui-kit-otp-input.d.ts +44 -0
  197. package/types/mesgflow-ui-kit-page-header.d.ts +31 -0
  198. package/types/mesgflow-ui-kit-pagination.d.ts +50 -0
  199. package/types/mesgflow-ui-kit-password-input.d.ts +33 -0
  200. package/types/mesgflow-ui-kit-popover.d.ts +62 -0
  201. package/types/mesgflow-ui-kit-progress.d.ts +32 -0
  202. package/types/mesgflow-ui-kit-radio.d.ts +59 -0
  203. package/types/mesgflow-ui-kit-rating.d.ts +56 -0
  204. package/types/mesgflow-ui-kit-scroll-area.d.ts +27 -0
  205. package/types/mesgflow-ui-kit-search-input.d.ts +72 -0
  206. package/types/mesgflow-ui-kit-segmented-control.d.ts +54 -0
  207. package/types/mesgflow-ui-kit-select.d.ts +89 -0
  208. package/types/mesgflow-ui-kit-sidebar.d.ts +224 -0
  209. package/types/mesgflow-ui-kit-skeleton.d.ts +29 -0
  210. package/types/mesgflow-ui-kit-slider.d.ts +40 -0
  211. package/types/mesgflow-ui-kit-spinner.d.ts +31 -0
  212. package/types/mesgflow-ui-kit-splitter.d.ts +40 -0
  213. package/types/mesgflow-ui-kit-stat-tile.d.ts +54 -0
  214. package/types/mesgflow-ui-kit-stepper.d.ts +48 -0
  215. package/types/mesgflow-ui-kit-switch.d.ts +34 -0
  216. package/types/mesgflow-ui-kit-table.d.ts +805 -0
  217. package/types/mesgflow-ui-kit-tabs.d.ts +269 -0
  218. package/types/mesgflow-ui-kit-tag-input.d.ts +33 -0
  219. package/types/mesgflow-ui-kit-theme-switcher.d.ts +27 -0
  220. package/types/mesgflow-ui-kit-theming.d.ts +745 -0
  221. package/types/mesgflow-ui-kit-time-picker.d.ts +54 -0
  222. package/types/mesgflow-ui-kit-timeline.d.ts +27 -0
  223. package/types/mesgflow-ui-kit-toast.d.ts +94 -0
  224. package/types/mesgflow-ui-kit-toggle.d.ts +110 -0
  225. package/types/mesgflow-ui-kit-toolbar.d.ts +52 -0
  226. package/types/mesgflow-ui-kit-tooltip.d.ts +55 -0
  227. package/types/mesgflow-ui-kit-tour.d.ts +66 -0
  228. package/types/mesgflow-ui-kit-tree-select.d.ts +65 -0
  229. package/types/mesgflow-ui-kit-tree.d.ts +44 -0
  230. package/types/mesgflow-ui-kit.d.ts +5444 -0
@@ -0,0 +1,54 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+ import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
4
+
5
+ interface TimeValue {
6
+ hour: number;
7
+ minute: number;
8
+ }
9
+ declare function formatTime(v: TimeValue): string;
10
+ /** `"9:5"`/`"09:05"`/vb. serbest biçimli metni ayrıştırır — saat 0-23, dakika 0-59 dışındaysa `null`. */
11
+ declare function parseTime(text: string): TimeValue | null;
12
+
13
+ /**
14
+ * `<mf-time-picker [(value)]="meetingTime" [minuteStep]="15" />` — `value`
15
+ * `{hour, minute} | null` (bkz. `TimeValue`). Tetikleyici `DatePicker`'ın
16
+ * AYNI deseni (`InputGroup` + yazarak giriş + `mf-popover` paneli), panel
17
+ * TAKVİM yerine iki kaydırılabilir SÜTUN (saat/dakika) — her biri `mf-scroll-area`
18
+ * (bu fazda eklenen kenar-solma maskeli kaydırma alanı, bkz. `scroll-area.ts`).
19
+ * Yazarak giriş VE sütundan tıklayarak seçim AYNI `value` model'ine yazıyor.
20
+ */
21
+ declare class TimePicker extends ValueAccessorBase<TimeValue | null> implements ControlValueAccessor {
22
+ readonly value: _angular_core.ModelSignal<TimeValue | null>;
23
+ /** Dakika sütunundaki adım — ör. `15` → 00/15/30/45. Varsayılan 5. */
24
+ readonly minuteStep: _angular_core.InputSignal<number>;
25
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
26
+ readonly disabled: _angular_core.InputSignal<boolean>;
27
+ readonly hasError: _angular_core.InputSignal<boolean>;
28
+ readonly ariaLabel: _angular_core.InputSignal<string>;
29
+ readonly clearLabel: _angular_core.InputSignal<string | undefined>;
30
+ private readonly timePickerLabels;
31
+ protected readonly effectivePlaceholder: _angular_core.Signal<string>;
32
+ protected readonly effectiveClearLabel: _angular_core.Signal<string>;
33
+ protected readonly open: _angular_core.WritableSignal<boolean>;
34
+ protected readonly draft: _angular_core.WritableSignal<string>;
35
+ protected readonly hours: number[];
36
+ protected readonly minutes: _angular_core.Signal<number[]>;
37
+ private readonly inputEl;
38
+ constructor();
39
+ writeValue(value: TimeValue | null): void;
40
+ private setValue;
41
+ protected onInput(raw: string): void;
42
+ protected commitDraft(): void;
43
+ protected pickHour(hour: number): void;
44
+ protected pickMinute(minute: number): void;
45
+ protected clear(): void;
46
+ protected close(): void;
47
+ protected onEscape(): void;
48
+ protected optionClasses(selected: boolean): string;
49
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimePicker, never>;
50
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimePicker, "mf-time-picker", ["mfTimePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "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; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
51
+ }
52
+
53
+ export { TimePicker, formatTime, parseTime };
54
+ export type { TimeValue };
@@ -0,0 +1,27 @@
1
+ import * as i0 from '@angular/core';
2
+ import { MfTone } from '@mesgflow/ui-kit/core';
3
+
4
+ interface TimelineItem {
5
+ title: string;
6
+ description?: string;
7
+ timestamp?: string;
8
+ tone?: MfTone;
9
+ }
10
+ /**
11
+ * `<mf-timeline [items]="[{title: 'Sipariş alındı', timestamp: '10:02'}, ...]" />`
12
+ * — kronolojik bir olay günlüğü (ör. bir siparişin durum geçmişi). Her
13
+ * satır [nokta+çizgi] sütunu + [içerik] sütunu olan bir flex satır — çizgi
14
+ * `flex-1` ile SIBLING içerik sütununun yüksekliğine (varsayılan
15
+ * `align-items: stretch`) otomatik uzar, SON öğede hiç render EDİLMEZ
16
+ * (Stepper'ın `::after`+`last:` CSS'i yerine düz bir `@if` yeterli — burada
17
+ * "hangi satır son" bilgisi zaten `@for`'un `$last`'ından ÜCRETSİZ geliyor).
18
+ */
19
+ declare class Timeline {
20
+ readonly items: i0.InputSignal<TimelineItem[]>;
21
+ protected dotClasses(tone: MfTone | undefined): string;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<Timeline, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<Timeline, "mf-timeline", ["mfTimeline"], { "items": { "alias": "items"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
24
+ }
25
+
26
+ export { Timeline };
27
+ export type { TimelineItem };
@@ -0,0 +1,94 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ type ToastTone = 'success' | 'danger' | 'info' | 'warning';
4
+ /** @deprecated `ToastTone` kullan — `'error'` değeri `'danger'`ya taşındı (bkz. plan Faz 1a). */
5
+ type ToastType = ToastTone;
6
+ interface ToastAction {
7
+ label: string;
8
+ onClick: () => void;
9
+ }
10
+ interface ToastOptions {
11
+ description?: string;
12
+ /** ms. `0` → asla kendiliğinden kapanmaz (kullanıcı elle kapatana kadar kalır). Varsayılan 4500ms. */
13
+ duration?: number;
14
+ action?: ToastAction;
15
+ }
16
+ interface ToastItem {
17
+ id: number;
18
+ type: ToastTone;
19
+ title: string;
20
+ description?: string;
21
+ action?: ToastAction;
22
+ /** `true` — çıkış animasyonu (`animate-toast-out`) oynuyor, `EXIT_MS` sonra listeden gerçekten kaldırılır (bkz. `dismiss()`). */
23
+ leaving: boolean;
24
+ }
25
+ /**
26
+ * Uygulamanın tek, global toast kaynağı — signal-first, `providedIn: 'root'`.
27
+ * 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ı.
32
+ *
33
+ * `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).
37
+ */
38
+ declare class ToastService {
39
+ readonly items: _angular_core.WritableSignal<ToastItem[]>;
40
+ /**
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.
45
+ */
46
+ readonly limit: _angular_core.WritableSignal<number | null>;
47
+ 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;
52
+ /**
53
+ * İ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.
57
+ */
58
+ 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. */
60
+ dismissAll(): void;
61
+ private push;
62
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastService, never>;
63
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
64
+ }
65
+
66
+ type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
67
+ /**
68
+ * `<mf-toast-host position="bottom-right" [limit]="3" />` — host uygulamanın
69
+ * KÖK seviyesinde bir kez render edilir (auth ekranları dahil her yerde
70
+ * görünür olsun diye). `limit`, `ToastService.limit`'e bir kerelik (kuruluşta)
71
+ * yazılır — `ToastHost` görsel katman, sınır mantığı servis tarafında yaşar
72
+ * (bkz. `toast.service.ts`).
73
+ */
74
+ declare class ToastHost {
75
+ protected readonly toasts: ToastService;
76
+ protected readonly iconFor: (type: ToastTone) => string;
77
+ protected readonly chipBgFor: (type: ToastTone) => string;
78
+ protected readonly cardClassFor: (item: ToastItem) => string;
79
+ /** Kapat butonunun `aria-label`'ı — toast'ın kendi başlığıyla birleştirilir. Verilmezse `MF_TOAST_LABELS`. */
80
+ readonly dismissLabel: _angular_core.InputSignal<string | undefined>;
81
+ readonly position: _angular_core.InputSignal<ToastPosition>;
82
+ /** Aynı anda gösterilecek azami toast sayısı — bkz. `ToastService.limit`. `null` (varsayılan) → sınırsız. */
83
+ readonly limit: _angular_core.InputSignal<number | null>;
84
+ private readonly toastLabels;
85
+ protected readonly effectiveDismissLabel: _angular_core.Signal<string>;
86
+ protected readonly hostClasses: _angular_core.Signal<string>;
87
+ constructor();
88
+ protected onAction(item: ToastItem): void;
89
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastHost, never>;
90
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastHost, "mf-toast-host", never, { "dismissLabel": { "alias": "dismissLabel"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
91
+ }
92
+
93
+ export { ToastHost, ToastService };
94
+ export type { ToastAction, ToastItem, ToastOptions, ToastPosition, ToastTone, ToastType };
@@ -0,0 +1,110 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { Signal, ElementRef } from '@angular/core';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ /**
7
+ * Basılı durum `aria-pressed` üzerinden stillenir (tek kaynak — durum sınıfı ayrıca tutulmaz):
8
+ * nötr `surface-active` zemin + tam `fg` metin. Vurgu rengi BİLEREK yok — biçimlendirme çubuğu
9
+ * gibi yoğun kümelerde marka rengi gürültü olur (Radix/Linear aynı tercihi yapar).
10
+ */
11
+ declare const toggleVariants: (props?: ({
12
+ size?: "sm" | "md" | "lg" | null | undefined;
13
+ appearance?: "ghost" | "outline" | null | undefined;
14
+ iconOnly?: boolean | null | undefined;
15
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
16
+ type ToggleSize = NonNullable<VariantProps<typeof toggleVariants>['size']>;
17
+ type ToggleAppearance = NonNullable<VariantProps<typeof toggleVariants>['appearance']>;
18
+
19
+ /**
20
+ * `<button mfToggle [(pressed)]="bold" aria-label="Kalın"><span mfIcon>format_bold</span></button>`
21
+ *
22
+ * İki durumlu düğme — `aria-pressed` ile duyurulur (checkbox DEĞİL: eylem gibi görünen ama durum
23
+ * taşıyan düğme, WAI-ARIA "button" deseni). İkon-tek kullanımda `aria-label` zorunlu, `iconOnly`
24
+ * kare yapar. Birbirine bağlı düğmeler için `mf-toggle-group`.
25
+ */
26
+ declare class Toggle {
27
+ readonly pressed: _angular_core.ModelSignal<boolean>;
28
+ readonly size: _angular_core.InputSignal<ToggleSize>;
29
+ readonly appearance: _angular_core.InputSignal<ToggleAppearance>;
30
+ readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
31
+ protected readonly classes: _angular_core.Signal<string>;
32
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Toggle, never>;
33
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Toggle, "button[mfToggle]", ["mfToggle"], { "pressed": { "alias": "pressed"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; }, { "pressed": "pressedChange"; }, never, never, true, never>;
34
+ }
35
+
36
+ type ToggleGroupType = 'single' | 'multiple';
37
+ /** Öğelerin gruba eriştiği sözleşme — dosya içi sınıf sırası döngüsü olmasın diye arayüz. */
38
+ interface ToggleGroupContext {
39
+ readonly size: Signal<ToggleSize>;
40
+ readonly appearance: Signal<ToggleAppearance>;
41
+ readonly disabled: Signal<boolean>;
42
+ readonly tabStopValue: Signal<string | null>;
43
+ isPressed(value: string): boolean;
44
+ toggle(value: string): void;
45
+ onKeydown(event: KeyboardEvent, item: ToggleGroupItem): void;
46
+ onFocus(item: ToggleGroupItem): void;
47
+ }
48
+ /** `<button mfToggleGroupItem value="bold" aria-label="Kalın" iconOnly>…</button>` — bkz. `ToggleGroup`. */
49
+ declare class ToggleGroupItem {
50
+ /**
51
+ * Zorunlu anlamda — ama `input.required` DEĞİL: grubun sekme durağı hesabı TÜM öğelerin
52
+ * değerini okur; `@for` içinde `[value]` bağlandığında bir öğenin host bağlaması, girdileri
53
+ * henüz atanmamış SONRAKİ öğeyi okuyup NG0950 fırlatıyordu (ThemeSwitcher testinde yakalandı).
54
+ */
55
+ readonly value: _angular_core.InputSignal<string>;
56
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
57
+ readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
58
+ protected readonly group: ToggleGroupContext;
59
+ readonly element: ElementRef<HTMLButtonElement>;
60
+ readonly isDisabled: Signal<boolean>;
61
+ protected readonly pressed: Signal<boolean>;
62
+ protected readonly classes: Signal<string>;
63
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToggleGroupItem, never>;
64
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ToggleGroupItem, "button[mfToggleGroupItem]", ["mfToggleGroupItem"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
65
+ }
66
+ /**
67
+ * `<mf-toggle-group type="multiple" [(value)]="marks" ariaLabel="Biçim">
68
+ * <button mfToggleGroupItem value="bold" aria-label="Kalın" iconOnly>…</button>
69
+ * </mf-toggle-group>`
70
+ *
71
+ * Birbirine bağlı iki durumlu düğmeler. `value` HER ZAMAN bir dizi (tek modda en fazla bir öğe) —
72
+ * iki mod için ayrı model tipi tutmamak için. `single`'da `allowEmpty=false` seçimi boşaltmayı
73
+ * engeller (hizalama gibi daima bir değeri olan kümeler).
74
+ *
75
+ * Klavye: grup TEK sekme durağıdır (dolaşan tabindex — basılı ilk öğe, yoksa ilk etkin öğe, son
76
+ * odaklanan hatırlanır); yatayda ←/→ (RTL'de görsel yöne göre ters), dikeyde ↑/↓, Home/End;
77
+ * devre dışı öğeler atlanır, sarma yapılır. Semantik `role="group"` + her öğede `aria-pressed`.
78
+ * `@angular/aria/toolbar` BİLEREK kullanılmadı: projekte edilen tüketici düğmeleriyle kayıt
79
+ * döngüsü, tıklama olmadan boş `valueChange` üretebiliyordu (bkz. `SegmentedControl` notu).
80
+ */
81
+ declare class ToggleGroup implements ToggleGroupContext {
82
+ readonly type: _angular_core.InputSignal<ToggleGroupType>;
83
+ readonly value: _angular_core.ModelSignal<readonly string[]>;
84
+ readonly size: _angular_core.InputSignal<ToggleSize>;
85
+ readonly appearance: _angular_core.InputSignal<ToggleAppearance>;
86
+ readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
87
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
88
+ /** `single` modda basılı öğeye tekrar basmak seçimi boşaltabilir mi. */
89
+ readonly allowEmpty: _angular_core.InputSignalWithTransform<boolean, unknown>;
90
+ readonly ariaLabel: _angular_core.InputSignal<string>;
91
+ private readonly items;
92
+ private readonly host;
93
+ private readonly lastFocused;
94
+ private readonly enabledItems;
95
+ readonly tabStopValue: Signal<string>;
96
+ /**
97
+ * `outline`: bitişik şerit (Button Group ile aynı kenar birleştirme — iç köşeler kare, 1px
98
+ * kenarlık çakışır, odaklı öğe üste çıkar). `ghost`: aralıklı, zeminsiz.
99
+ */
100
+ protected readonly classes: Signal<string>;
101
+ isPressed(value: string): boolean;
102
+ toggle(value: string): void;
103
+ onFocus(item: ToggleGroupItem): void;
104
+ onKeydown(event: KeyboardEvent, item: ToggleGroupItem): void;
105
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToggleGroup, never>;
106
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToggleGroup, "mf-toggle-group", ["mfToggleGroup"], { "type": { "alias": "type"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowEmpty": { "alias": "allowEmpty"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, ["items"], ["*"], true, never>;
107
+ }
108
+
109
+ export { Toggle, ToggleGroup, ToggleGroupItem, toggleVariants };
110
+ export type { ToggleAppearance, ToggleGroupType, ToggleSize };
@@ -0,0 +1,52 @@
1
+ import * as i0 from '@angular/core';
2
+ import * as i1 from '@angular/aria/toolbar';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ /**
7
+ * `<mf-toolbar><button mfToolbarButton value="bold">B</button>...</mf-toolbar>`
8
+ *
9
+ * Genel amaçlı gruplu buton çubuğu — zengin metin editörü/tuval araç
10
+ * çubukları için düşünüldü. ARIA/klavye (roving tabindex, ok tuşu
11
+ * navigasyonu) `@angular/aria/toolbar`'ın `Toolbar` pattern'inden
12
+ * `hostDirectives` ile geliyor — `SegmentedControl`'ün AYNI pattern ailesini
13
+ * kullandığı ama SEÇİM DURUMU (tek/çoklu) tuttuğu yere karşılık, bu primitif
14
+ * seçim durumu TUTMAZ: tekil aksiyon düğmeleri için `mfToolbarButton`
15
+ * yeter, dışlayıcı bir alt-grup gerekiyorsa (ör. hizalama) tüketici kendi
16
+ * `<div ngToolbarWidgetGroup [multi]="false">` sarmalayıcısını ekler (bkz.
17
+ * `@angular/aria/toolbar`'ın kendi JSDoc örneği).
18
+ */
19
+ declare class Toolbar {
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<Toolbar, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<Toolbar, "mf-toolbar", ["mfToolbar"], {}, {}, never, ["*"], true, [{ directive: typeof i1.Toolbar; inputs: { "orientation": "orientation"; "disabled": "disabled"; "wrap": "wrap"; }; outputs: {}; }]>;
22
+ }
23
+
24
+ /**
25
+ * `<button mfToolbarButton value="bold" [pressed]="isBold()">B</button>` —
26
+ * `mf-toolbar` içine konur. `pressed`, bir `ngToolbarWidgetGroup` sarmalayıcısı
27
+ * OLMADAN da (ör. bağımsız bir toggle — kalın/italik gibi birbirinden bağımsız
28
+ * açma-kapama düğmeleri) tüketicinin kendi state'inden görsel "aktif" durumunu
29
+ * bildirmesi için var; bir grup içindeyse `widget.selected()` zaten aynı
30
+ * görevi görür, ikisi OR'lanıyor.
31
+ */
32
+ declare class ToolbarButton {
33
+ private readonly widget;
34
+ readonly pressed: i0.InputSignal<boolean>;
35
+ protected readonly classes: i0.Signal<string>;
36
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarButton, never>;
37
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ToolbarButton, "button[mfToolbarButton]", never, { "pressed": { "alias": "pressed"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.ToolbarWidget; inputs: { "value": "value"; "disabled": "disabled"; "id": "id"; }; outputs: {}; }]>;
38
+ }
39
+
40
+ /** `<mf-toolbar-separator />` — `mf-toolbar` içindeki buton gruplarını ayırmak için dikey çizgi. */
41
+ declare class ToolbarSeparator {
42
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarSeparator, never>;
43
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarSeparator, "mf-toolbar-separator", never, {}, {}, never, never, true, never>;
44
+ }
45
+
46
+ declare const toolbarButtonVariants: (props?: ({
47
+ active?: boolean | null | undefined;
48
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
49
+ type ToolbarButtonActive = VariantProps<typeof toolbarButtonVariants>['active'];
50
+
51
+ export { Toolbar, ToolbarButton, ToolbarSeparator, toolbarButtonVariants };
52
+ export type { ToolbarButtonActive };
@@ -0,0 +1,55 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnDestroy, TemplateRef } from '@angular/core';
3
+
4
+ type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
5
+ /**
6
+ * `<button mfButton [mfTooltip]="'Filtreler'">` (düz metin) veya
7
+ * `<button mfButton [mfTooltipContent]="richTpl">` (bkz. aşağıdaki örnek —
8
+ * zengin/reaktif içerik) — hover/focus'ta CDK Overlay ile konumlanan bir
9
+ * balon gösterir. `mfTooltipContent` VERİLMİŞSE `mfTooltip` YOK SAYILIR.
10
+ *
11
+ * ```html
12
+ * <button mfButton [mfTooltipContent]="kbdHint">Kaydet</button>
13
+ * <ng-template #kbdHint>
14
+ * Kaydet <kbd mfKbd>Ctrl</kbd>+<kbd mfKbd>S</kbd>
15
+ * </ng-template>
16
+ * ```
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.
23
+ */
24
+ declare class Tooltip implements OnDestroy {
25
+ /** Boş string verilirse (ve `mfTooltipContent` de yoksa) tooltip tamamen devre dışı kalır (ör. koşullu etiketler için). */
26
+ readonly mfTooltip: _angular_core.InputSignal<string>;
27
+ /** Verilmişse `mfTooltip`'in YERİNE geçer — bkz. sınıf üstündeki JSDoc örneği. */
28
+ readonly mfTooltipContent: _angular_core.InputSignal<TemplateRef<unknown> | null>;
29
+ readonly tooltipPosition: _angular_core.InputSignal<TooltipPosition>;
30
+ private readonly overlay;
31
+ private readonly elementRef;
32
+ private readonly viewContainerRef;
33
+ private overlayRef?;
34
+ private bubbleEl?;
35
+ private showHandle?;
36
+ protected scheduleShow(): void;
37
+ protected show(): void;
38
+ /**
39
+ * 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).
47
+ */
48
+ hide(): void;
49
+ ngOnDestroy(): void;
50
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tooltip, never>;
51
+ 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
+ }
53
+
54
+ export { Tooltip };
55
+ export type { TooltipPosition };
@@ -0,0 +1,66 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
+
4
+ type TourPlacement = 'bottom' | 'top' | 'start' | 'end';
5
+ interface TourStep {
6
+ /**
7
+ * Vurgulanacak öğe: CSS seçicisi, öğe ya da `ElementRef`. Verilmezse adım ekran ortasında
8
+ * bir karşılama/kapanış kartı olarak gösterilir (spot ışığı deliksiz karartır).
9
+ */
10
+ target?: string | Element | ElementRef<Element>;
11
+ title: string;
12
+ content: string;
13
+ /** Kartın hedefe göre yeri — mantıksal (`start`/`end` RTL'de yer değiştirir). Sığmazsa karşı taraf. */
14
+ placement?: TourPlacement;
15
+ }
16
+ type TourResult = 'completed' | 'skipped';
17
+ interface TourOptions {
18
+ /** Hedefin çevresindeki boşluk (px). */
19
+ padding?: number;
20
+ /** Her adım değişiminde (0 tabanlı indeks) — analitik ya da hedefin görünür olması için. */
21
+ stepChange?: (index: number, step: TourStep) => void;
22
+ }
23
+ interface SpotlightRect {
24
+ top: number;
25
+ left: number;
26
+ width: number;
27
+ height: number;
28
+ }
29
+ /** Bir tur çalışmasının durumu — servis ile spot ışığı ve kart bileşenleri bunu paylaşır. */
30
+ declare class TourRun {
31
+ readonly steps: readonly TourStep[];
32
+ private readonly onNavigate;
33
+ private readonly onFinish;
34
+ readonly index: _angular_core.WritableSignal<number>;
35
+ /** Hedefin viewport'taki kutusu (padding dahil); hedefsiz adımda `null`. */
36
+ readonly rect: _angular_core.WritableSignal<SpotlightRect | null>;
37
+ readonly step: _angular_core.Signal<TourStep>;
38
+ readonly isFirst: _angular_core.Signal<boolean>;
39
+ readonly isLast: _angular_core.Signal<boolean>;
40
+ constructor(steps: readonly TourStep[], onNavigate: (index: number) => void, onFinish: (result: TourResult) => void);
41
+ next(): void;
42
+ back(): void;
43
+ skip(): void;
44
+ }
45
+
46
+ /**
47
+ * `const result = await tour.start([{ target: '#new-campaign', title: '…', content: '…' }, …]);`
48
+ *
49
+ * Ürün turu / coachmark — `help` tonu tam bunun için. İki overlay: tam ekran spot ışığı (karartır,
50
+ * tıklamaları yutar) ve hedefe bağlı adım kartı. Her adımda hedef görünür alana kaydırılır
51
+ * (azaltılmış harekette anında), kaydırma/yeniden boyutlandırmada delik ve kart birlikte izler.
52
+ * Bulunamayan hedef ortalanmış karta düşer (tur kırılmaz). Aynı anda tek tur; bitince odak
53
+ * turdan önceki öğeye döner. Sonuç: `'completed'` ya da `'skipped'` (Esc, ×).
54
+ */
55
+ declare class TourService {
56
+ private readonly injector;
57
+ private readonly document;
58
+ private active;
59
+ get isActive(): boolean;
60
+ start(steps: readonly TourStep[], options?: TourOptions): Promise<TourResult>;
61
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TourService, never>;
62
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
63
+ }
64
+
65
+ export { TourRun, TourService };
66
+ export type { SpotlightRect, TourOptions, TourPlacement, TourResult, TourStep };
@@ -0,0 +1,65 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
+ import { ValueAccessorBase, MfSize } from '@mesgflow/ui-kit/core';
3
+ import * as _angular_core from '@angular/core';
4
+ import { ControlValueAccessor } from '@angular/forms';
5
+ import { TreeNode } from '@mesgflow/ui-kit/tree';
6
+
7
+ /**
8
+ * `<mf-tree-select [nodes]="regions" [(value)]="chosen" multi searchable />`
9
+ *
10
+ * Hiyerarşik seçenekler için Select — kategori, bölge, klasör. Tetikleyici Select ile AYNI
11
+ * görünüm (çoklu seçimde yongalar + "+N"); panel kitin `Tree`'si (WAI-ARIA tree: oklar, Home/End,
12
+ * yazarak ara, Enter/Space seçim — `@angular/aria/tree`'den).
13
+ *
14
+ * `searchable`: panelin başında aksan duyarsız arama — eşleşmeler ATALARIYLA tutulur ve dallar
15
+ * açılır (bkz. `filterTree`). Tek seçimde seçim paneli kapatır ve odağı tetikleyiciye döndürür;
16
+ * çoklu seçimde panel açık kalır. `value` her zaman dizi (Tree ile aynı sözleşme).
17
+ */
18
+ declare class TreeSelect<T> extends ValueAccessorBase<T[]> implements ControlValueAccessor {
19
+ readonly nodes: _angular_core.InputSignal<TreeNode<T>[]>;
20
+ readonly value: _angular_core.ModelSignal<T[]>;
21
+ readonly multi: _angular_core.InputSignalWithTransform<boolean, unknown>;
22
+ readonly searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
23
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
24
+ readonly size: _angular_core.InputSignal<MfSize>;
25
+ readonly hasError: _angular_core.InputSignal<boolean>;
26
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
27
+ /** Tetikleyicinin (ve ağacın) erişilebilir adı — görünür bir etiket yoksa zorunlu. */
28
+ readonly ariaLabel: _angular_core.InputSignal<string>;
29
+ readonly maxVisibleChips: _angular_core.InputSignal<number>;
30
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfTreeSelectLabels>;
31
+ private readonly trigger;
32
+ private readonly panel;
33
+ protected readonly open: _angular_core.WritableSignal<boolean>;
34
+ protected readonly query: _angular_core.WritableSignal<string>;
35
+ private readonly formDisabled;
36
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
37
+ protected readonly effectivePlaceholder: _angular_core.Signal<string>;
38
+ protected readonly visibleNodes: _angular_core.Signal<TreeNode<T>[]>;
39
+ protected readonly searching: _angular_core.Signal<boolean>;
40
+ private readonly labelByValue;
41
+ protected readonly selectedLabels: _angular_core.Signal<string[]>;
42
+ protected readonly visibleChips: _angular_core.Signal<string[]>;
43
+ protected readonly overflowCount: _angular_core.Signal<number>;
44
+ protected readonly triggerClasses: _angular_core.Signal<string>;
45
+ constructor();
46
+ protected toggle(): void;
47
+ protected onTriggerKeydown(event: KeyboardEvent): void;
48
+ protected onTreeValue(values: T[]): void;
49
+ protected close(restoreFocus: boolean): void;
50
+ writeValue(value: T[] | null): void;
51
+ setDisabledState(disabled: boolean): void;
52
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeSelect<any>, never>;
53
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeSelect<any>, "mf-tree-select", ["mfTreeSelect"], { "nodes": { "alias": "nodes"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "maxVisibleChips": { "alias": "maxVisibleChips"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
54
+ }
55
+
56
+ /**
57
+ * Etiketi sorguyu içeren düğümleri, ATALARIYLA birlikte tutar (bağlam kaybolmasın — "Kadıköy"
58
+ * bulunduğunda "İstanbul › Kadıköy" yolu görünür). Eşleşen bir düğümün çocukları da kalır
59
+ * (bir kategoriyi aramak altındakileri de gösterir). Boş sorgu ağacı aynen döner.
60
+ */
61
+ declare function filterTree<T>(nodes: readonly TreeNode<T>[], query: string): TreeNode<T>[];
62
+ /** `value → label` eşlemesi (tetikleyici metni/yongaları için) — değer kimliğiyle (`===`). */
63
+ declare function flattenTree<T>(nodes: readonly TreeNode<T>[]): Map<T, string>;
64
+
65
+ export { TreeSelect, filterTree, flattenTree };
@@ -0,0 +1,44 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+ import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
4
+ import * as class_variance_authority_types from 'class-variance-authority/types';
5
+ import { VariantProps } from 'class-variance-authority';
6
+
7
+ interface TreeNode<T> {
8
+ id: string;
9
+ label: string;
10
+ value: T;
11
+ children?: TreeNode<T>[];
12
+ disabled?: boolean;
13
+ }
14
+ /**
15
+ * `<mf-tree [nodes]="layers" [(value)]="selectedIds" />` — katman/yapı
16
+ * paneli gibi iç içe, klavye gezintili ağaçlar için. ARIA/klavye (ok
17
+ * tuşları, typeahead, seviyeye göre girinti) `@angular/aria/tree`'nin
18
+ * `Tree`/`TreeItem`/`TreeItemGroup` pattern'inden geliyor — dokümantasyonun
19
+ * KENDİ önerdiği ÖZYİNELEMELİ (`ngTemplateOutlet` + kendi kendine referans
20
+ * veren `#treeNodes` template) render deseni birebir izlendi, çünkü veri
21
+ * derinliği (`TreeNode.children`) derleme zamanında bilinmiyor.
22
+ */
23
+ declare class Tree<T> extends ValueAccessorBase<T[]> implements ControlValueAccessor {
24
+ readonly nodes: _angular_core.InputSignal<TreeNode<T>[]>;
25
+ readonly value: _angular_core.ModelSignal<T[]>;
26
+ readonly multi: _angular_core.InputSignal<boolean>;
27
+ readonly ariaLabel: _angular_core.InputSignal<string>;
28
+ /** Tüm dalları açık başlatır (ör. arama sonuçları) — kullanıcı yine tek tek kapatabilir. */
29
+ readonly expandAll: _angular_core.InputSignal<boolean>;
30
+ constructor();
31
+ writeValue(value: T[]): void;
32
+ protected rowClasses(selected: boolean | undefined, disabled: boolean): string;
33
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tree<any>, never>;
34
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tree<any>, "mf-tree", ["mfTree"], { "nodes": { "alias": "nodes"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "expandAll": { "alias": "expandAll"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
35
+ }
36
+
37
+ declare const treeRowVariants: (props?: ({
38
+ selected?: boolean | null | undefined;
39
+ disabled?: boolean | null | undefined;
40
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
41
+ type TreeRowSelected = VariantProps<typeof treeRowVariants>['selected'];
42
+
43
+ export { Tree, treeRowVariants };
44
+ export type { TreeNode, TreeRowSelected };