@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,47 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+
5
+ interface DropzoneRejection {
6
+ file: File;
7
+ reason: 'size' | 'type';
8
+ }
9
+ /**
10
+ * `<mf-dropzone accept="image/*" [maxSizeBytes]="5_000_000" (filesSelected)="upload($event)" />`
11
+ *
12
+ * Görsel/dosya yükleme — sürükle-bırak + tıkla-seç, boyut/tip doğrulaması.
13
+ * Yükleme İLERLEMESİNİ TAŞIMAZ (bkz. `Progress` primitifi — tüketici kendi
14
+ * yükleme state'ini `DropzoneRejection`/`filesSelected`'tan sonra ayrı
15
+ * yönetir, bu component sadece "hangi dosyalar seçildi/reddedildi"yi bildirir).
16
+ */
17
+ declare class Dropzone {
18
+ readonly accept: _angular_core.InputSignal<string>;
19
+ readonly multiple: _angular_core.InputSignal<boolean>;
20
+ readonly maxSizeBytes: _angular_core.InputSignal<number | null>;
21
+ readonly disabled: _angular_core.InputSignal<boolean>;
22
+ readonly label: _angular_core.InputSignal<string | undefined>;
23
+ readonly filesSelected: _angular_core.OutputEmitterRef<File[]>;
24
+ readonly rejected: _angular_core.OutputEmitterRef<DropzoneRejection[]>;
25
+ private readonly dropzoneLabels;
26
+ protected readonly effectiveLabel: _angular_core.Signal<string>;
27
+ protected readonly dragOver: _angular_core.WritableSignal<boolean>;
28
+ protected readonly fileInput: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
29
+ protected readonly classes: _angular_core.Signal<string>;
30
+ protected onDragOver(event: DragEvent): void;
31
+ protected onDragLeave(): void;
32
+ protected onDrop(event: DragEvent): void;
33
+ protected onFileInputChange(event: Event): void;
34
+ protected browse(): void;
35
+ private handleFiles;
36
+ private matchesAccept;
37
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Dropzone, never>;
38
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dropzone, "mf-dropzone", ["mfDropzone"], { "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxSizeBytes": { "alias": "maxSizeBytes"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; "rejected": "rejected"; }, never, never, true, never>;
39
+ }
40
+
41
+ declare const dropzoneVariants: (props?: ({
42
+ dragOver?: boolean | null | undefined;
43
+ disabled?: boolean | null | undefined;
44
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
45
+
46
+ export { Dropzone, dropzoneVariants };
47
+ export type { DropzoneRejection };
@@ -0,0 +1,18 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /**
4
+ * `<mf-empty-state title="..." description="...">`
5
+ * `<svg illustration>...</svg>` (opsiyonel, BÜYÜK bir çizim/grafik slotu —
6
+ * `icon`'un yerine geçer, ikisi BİRLİKTE kullanılmaz)
7
+ * `<span icon mfIcon>inbox</span>` (opsiyonel küçük ikon slotu)
8
+ * `<button mfButton action>...</button>` (opsiyonel aksiyon slotu)
9
+ * `</mf-empty-state>`
10
+ */
11
+ declare class EmptyState {
12
+ readonly title: _angular_core.InputSignal<string>;
13
+ readonly description: _angular_core.InputSignal<string>;
14
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyState, never>;
15
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyState, "mf-empty-state", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["[illustration]", "[icon]", "[action]"], true, never>;
16
+ }
17
+
18
+ export { EmptyState };
@@ -0,0 +1,26 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /**
4
+ * `<mf-field label="E-posta" [error]="emailError()">
5
+ * <input mfInput type="email" [id]="..." />
6
+ * </mf-field>`
7
+ * `for`/`id` eşleşmesi (a11y) ÇAĞIRAN ekranın sorumluluğunda — bu component
8
+ * label'ı otomatik bir input'a bağlamıyor (projected content'in id'sini bilmiyor).
9
+ *
10
+ * `error`, `string | undefined` kabul eder (sadece `string` DEĞİL) — çağıran
11
+ * genelde `shared/forms/http-error.ts`'teki `resolveFieldError()`'ı doğrudan
12
+ * bağlar, o da hata yokken `undefined` döner (boş string'e zorlamaya gerek yok).
13
+ */
14
+ declare class Field {
15
+ readonly label: _angular_core.InputSignal<string>;
16
+ readonly for: _angular_core.InputSignal<string>;
17
+ readonly hint: _angular_core.InputSignal<string>;
18
+ readonly error: _angular_core.InputSignal<string | undefined>;
19
+ readonly required: _angular_core.InputSignal<boolean>;
20
+ /** `true` ise kalan yüksekliği doldurur (`flex-1 min-h-0`) — projected içeriğin kendi tek scroll alanı olduğu durumlar için (ör. uzun bir liste içeren form, bkz. `Dialog.fillBody`). */
21
+ readonly grow: _angular_core.InputSignal<boolean>;
22
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Field, never>;
23
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Field, "mf-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
24
+ }
25
+
26
+ export { Field };
@@ -0,0 +1,52 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as i1 from '@angular/cdk/overlay';
3
+ import { CdkOverlayOrigin } from '@angular/cdk/overlay';
4
+ import { PopoverPlacement } from '@mesgflow/ui-kit/popover';
5
+
6
+ /**
7
+ * `<a href="/u/ayse" [mfHoverCardTrigger]="card">@ayse</a>
8
+ * <mf-hover-card #card>…profil önizlemesi…</mf-hover-card>`
9
+ *
10
+ * Bir bağlantının üzerine gelince açılan zengin önizleme (profil, bağlantı özeti). Tooltip'ten
11
+ * farkı: içerik etkileşimli olabilir (imleç karta geçince açık kalır) ve daha geniştir.
12
+ *
13
+ * Erişilebilirlik sınırı (Radix/GitHub ile aynı): kart GÖREN kullanıcılar için EK bilgidir —
14
+ * tetikleyiciye klavye odağı gelince de açılır, Esc kapatır, ama odak karta taşınmaz ve içerik
15
+ * ekran okuyucuya duyurulmaz. Karttaki bilgi/eylem sayfada başka bir yoldan erişilebilir
16
+ * olmalı (tetikleyici bağlantının kendisi gibi). Dokunmatikte açılmaz (hover yok).
17
+ */
18
+ declare class HoverCard {
19
+ readonly open: _angular_core.ModelSignal<boolean>;
20
+ readonly placement: _angular_core.InputSignal<PopoverPlacement>;
21
+ /** Üzerine gelindikten sonra açılma gecikmesi (ms) — imleç geçip giderken kart fırlamasın. */
22
+ readonly openDelay: _angular_core.InputSignal<number>;
23
+ /** Ayrıldıktan sonra kapanma gecikmesi (ms) — tetikleyiciden karta geçiş boşluğu için. */
24
+ readonly closeDelay: _angular_core.InputSignal<number>;
25
+ readonly panelClass: _angular_core.InputSignal<string>;
26
+ protected readonly origin: _angular_core.WritableSignal<CdkOverlayOrigin | null>;
27
+ private openTimer?;
28
+ private closeTimer?;
29
+ constructor();
30
+ /** Tetikleyici kendini kaydeder — kart birden çok tetikleyiciyle paylaşılabilir (son etkin olan). */
31
+ attach(origin: CdkOverlayOrigin): void;
32
+ scheduleOpen(immediate?: boolean): void;
33
+ scheduleClose(): void;
34
+ cancelClose(): void;
35
+ close(): void;
36
+ private clearTimers;
37
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HoverCard, never>;
38
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HoverCard, "mf-hover-card", ["mfHoverCard"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "openDelay": { "alias": "openDelay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
39
+ }
40
+ /** `[mfHoverCardTrigger]="card"` — bkz. `HoverCard`. CDK overlay kökü olarak kendini kaydeder. */
41
+ declare class HoverCardTrigger {
42
+ readonly card: _angular_core.InputSignal<HoverCard>;
43
+ private readonly origin;
44
+ protected onPointerEnter(event: PointerEvent): void;
45
+ protected onPointerLeave(event: PointerEvent): void;
46
+ /** Yalnızca klavye odağı (`:focus-visible`) — fareyle tıklayıp odaklanmak kartı ayrıca açmasın. */
47
+ protected onFocus(event: FocusEvent): void;
48
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HoverCardTrigger, never>;
49
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<HoverCardTrigger, "[mfHoverCardTrigger]", ["mfHoverCardTrigger"], { "card": { "alias": "mfHoverCardTrigger"; "required": true; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.CdkOverlayOrigin; inputs: {}; outputs: {}; }]>;
50
+ }
51
+
52
+ export { HoverCard, HoverCardTrigger };
@@ -0,0 +1,14 @@
1
+ import { MfLabels } from '@mesgflow/ui-kit/core';
2
+
3
+ /**
4
+ * `provideMesgflowUi({ labels: mfLabelsTr, dateLocale: tr })` ile sağlanan
5
+ * Türkçe çeviri kümesi — kitin İngilizce varsayılanının (`mfLabelsEn`, bkz.
6
+ * `@mesgflow/ui-kit/core`) AYNI şeklini taşır, sadece değerleri Türkçe. AYRI bir
7
+ * ikincil giriş noktası (`@mesgflow/ui-kit/i18n/tr`) olmasının sebebi: birincil
8
+ * barrel'a (`@mesgflow/ui-kit`) dahil OLMAMASI — Türkçe metin isteyen tüketici
9
+ * BİLEREK import eder, İngilizce varsayılanı tercih eden tüketicinin bundle'ına
10
+ * hiç girmez.
11
+ */
12
+ declare const mfLabelsTr: MfLabels;
13
+
14
+ export { mfLabelsTr };
@@ -0,0 +1,76 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders, AfterContentChecked } from '@angular/core';
3
+
4
+ /** SVG alt öğesi — Lucide'ın `IconNode` biçimiyle aynı: `['path', { d: '…' }]`. */
5
+ type MfIconNode = readonly [tag: string, attrs: Readonly<Record<string, string | number>>];
6
+ interface MfSvgIcon {
7
+ /** Varsayılan `'0 0 24 24'` (Material Symbols 24px ızgarası, Lucide). */
8
+ viewBox?: string;
9
+ nodes: readonly MfIconNode[];
10
+ /** `[filled]="true"` iken kullanılacak dolu varyant (verilmezse `nodes`). */
11
+ filledNodes?: readonly MfIconNode[];
12
+ /**
13
+ * `'fill'` (varsayılan — Material Symbols gibi dolgulu glifler) ya da `'stroke'` (Lucide gibi
14
+ * çizgi ikonlar: `fill="none"`, `stroke="currentColor"`, yuvarlak uçlar).
15
+ */
16
+ mode?: 'fill' | 'stroke';
17
+ /** `mode: 'stroke'` iken çizgi kalınlığı (varsayılan 2). */
18
+ strokeWidth?: number;
19
+ }
20
+ type MfIconSet = Readonly<Record<string, MfSvgIcon>>;
21
+ /**
22
+ * Birleştirilmiş SVG ikon kaydı — `provideMfIcons()` uygulama kökünde birden çok kez çağrılabilir
23
+ * (ör. temel set + marka ikonları), sonra gelen aynı adı ezer. Kök tekildir: tembel rota
24
+ * injector'larındaki kayıtlar görülmez. Kayıt yoksa boş — `mfIcon` Material Symbols fontuna düşer.
25
+ */
26
+ declare const MF_ICON_REGISTRY: InjectionToken<ReadonlyMap<string, MfSvgIcon>>;
27
+ /**
28
+ * `providers: [provideMfIcons({ mail: { nodes: [['path', { d: 'M…' }]] } })]`
29
+ *
30
+ * İsteğe bağlı SVG ikon kaydı. Kayıtlı bir ad `<span mfIcon>mail</span>` içinde geçtiğinde font
31
+ * ligature'ı yerine satır içi SVG çizilir — FOUT'ta ham "mail" metni görünmez, yalnızca kullanılan
32
+ * glifler pakete girer (tree-shake), özel/marka ikonları eklenebilir. Kaydedilmeyen adlar fontla
33
+ * çalışmaya devam eder, yani geçiş kademeli ve kırıcı DEĞİL; tüm adlar kayıtlıysa
34
+ * `@material-symbols/font-400` importu tamamen kaldırılabilir.
35
+ *
36
+ * Güvenlik: işaretleme dizgesi (innerHTML) kabul edilmez; SVG yapısal veriden
37
+ * `createElementNS` ile kurulur, yalnızca şekil etiketleri ve sunum öznitelikleri geçer
38
+ * (bkz. `icon.ts` `ALLOWED_TAGS`) — kayıt verisi dış kaynaktan gelse bile betik çalıştıramaz.
39
+ */
40
+ declare function provideMfIcons(icons: MfIconSet): EnvironmentProviders;
41
+
42
+ /**
43
+ * `<span mfIcon>mail</span>` — içerik ikonun İNGİLİZCE adı; renk `text-*` ile, boyut `size`
44
+ * (px) ile. `aria-hidden` zorunlu — ad metni ("mail") ekran okuyucuya SIZMAMALI.
45
+ *
46
+ * İki çizim yolu, aynı şablon:
47
+ * - **Font** (varsayılan): Material Symbols Outlined ligature'ı (weight 400 — BİLEREK 300 değil,
48
+ * ince ağırlık Inter gövde metninin yanında soluk duruyordu; bkz. preset.css).
49
+ * - **SVG**: ad `provideMfIcons()` ile kaydedildiyse satır içi SVG çizilir, ad metni yerinde
50
+ * kalır ama `font-size: 0` ile görünmez (Angular'ın metin düğümüne ve `@if`/`@switch`
51
+ * çapalarına dokunulmaz — düğüm taşımak denetim akışını bozardı). Font sınıfı hiç eklenmez;
52
+ * tüm kullanılan adlar kayıtlıysa font dosyası HİÇ indirilmez.
53
+ *
54
+ * Ad, ilk değişiklik algılama turunda (`ngAfterContentChecked` — içerik bağlamaları o anda
55
+ * güncel) okunur; `{{ item.icon }}` gibi dinamik adlar her turda yeniden karşılaştırılır.
56
+ * Kayıt boşsa bu kanca hemen döner (fontla çalışan uygulamalar için sıfır maliyet).
57
+ */
58
+ declare class Icon implements AfterContentChecked {
59
+ readonly size: _angular_core.InputSignal<number>;
60
+ readonly filled: _angular_core.InputSignal<boolean>;
61
+ private readonly registry;
62
+ private readonly host;
63
+ private readonly name;
64
+ private svg;
65
+ private renderedKey;
66
+ protected readonly svgIcon: _angular_core.Signal<MfSvgIcon | null>;
67
+ protected readonly variationSettings: _angular_core.Signal<string>;
68
+ ngAfterContentChecked(): void;
69
+ private buildSvg;
70
+ private buildNode;
71
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Icon, never>;
72
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Icon, "span[mfIcon]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "filled": { "alias": "filled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
73
+ }
74
+
75
+ export { Icon, MF_ICON_REGISTRY, provideMfIcons };
76
+ export type { MfIconNode, MfIconSet, MfSvgIcon };
@@ -0,0 +1,186 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { InjectionToken } from '@angular/core';
3
+ import { MfSize } 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
+ /**
8
+ * `<textarea mfInput #bio maxlength="280"></textarea>
9
+ * <mf-character-count [for]="bio" />`
10
+ *
11
+ * Görünen metin `12 / 280` (sınır yoksa yalnızca `12`) ekran okuyucudan GİZLİ. Bunun yerine:
12
+ * - hedef alanın `aria-describedby`'ına eklenen gizli bir açıklama ("268 characters remaining"),
13
+ * alana odaklanınca okunur;
14
+ * - sınıra yaklaşınca (`warnAt`, varsayılan %90) bir `aria-live` bölgesi, her tuşta DEĞİL
15
+ * 5'in katlarında, son 5 karakterde ise her tuşta duyurur — gevezelik etmeden haber verir.
16
+ *
17
+ * Sınır: `max` verilirse YUMUŞAK sınır (yazmaya izin verir, aşım `danger` ve negatif gösterilir —
18
+ * tüketici alanı ayrıca `hasError` ile işaretler); verilmezse hedefin `maxlength`'i (tarayıcı
19
+ * zaten engeller). Sayım `value.length` — tarayıcının `maxlength` sayımıyla (UTF-16) birebir.
20
+ * Programatik değer değişimleri (form reset, `writeValue`) her render'dan sonra yakalanır.
21
+ */
22
+ declare class CharacterCount {
23
+ readonly for: _angular_core.InputSignal<HTMLInputElement | HTMLTextAreaElement>;
24
+ /** Yumuşak sınır. Verilmezse hedefin `maxlength` özniteliği kullanılır. */
25
+ readonly max: _angular_core.InputSignal<number | undefined>;
26
+ /** Uyarı tonunun başladığı doluluk oranı (0–1). */
27
+ readonly warnAt: _angular_core.InputSignal<number>;
28
+ private readonly labels;
29
+ private readonly renderer;
30
+ protected readonly descriptionId: string;
31
+ protected readonly length: _angular_core.WritableSignal<number>;
32
+ protected readonly limit: _angular_core.Signal<number | null>;
33
+ protected readonly remaining: _angular_core.Signal<number | null>;
34
+ protected readonly tone: _angular_core.Signal<"muted" | "warning" | "danger">;
35
+ protected readonly classes: _angular_core.Signal<string>;
36
+ protected readonly display: _angular_core.Signal<string>;
37
+ protected readonly description: _angular_core.Signal<string>;
38
+ /** Yalnızca uyarı bölgesinde ve kilometre taşlarında güncellenir; aradaki tuşlarda son metin kalır. */
39
+ protected readonly announcement: _angular_core.WritableSignal<string>;
40
+ constructor();
41
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CharacterCount, never>;
42
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CharacterCount, "mf-character-count", ["mfCharacterCount"], { "for": { "alias": "for"; "required": true; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "warnAt": { "alias": "warnAt"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
43
+ }
44
+
45
+ /**
46
+ * `field-sizing: content` desteği — içerik boyunda büyüyen native kontrol (Chromium 123+;
47
+ * desteklemeyen tarayıcıda JS yedeği). Token olarak: testler iki yolu da açıkça seçebilsin.
48
+ */
49
+ declare const MF_FIELD_SIZING_SUPPORTED: InjectionToken<boolean>;
50
+ /**
51
+ * `<input mfInput>` / `<textarea mfInput>` — checkbox/radio hariç (bkz.
52
+ * `Checkbox`, `@mesgflow/ui-kit/checkbox`). Karakter sayacı için `<mf-character-count>`.
53
+ *
54
+ * `autosize`/`minRows`/`maxRows` SADECE `textarea[mfInput]`'ta anlamlı — içerik büyüdükçe
55
+ * yükseklik artar, `maxRows`'ta durup kaydırmaya geçer. İki yol:
56
+ * - **`field-sizing: content` destekleniyorsa** büyüme tamamen CSS'te — yazma, yapıştırma,
57
+ * programatik değer (form reset) ve genişlik değişimi tarayıcının kendi yerleşiminde;
58
+ * JS yalnızca `min/max-height`'ı satır sayısından bir kez hesaplar.
59
+ * - **Değilse** ölçerek: `input` olayı + her render sonrası değer karşılaştırması (olay atmayan
60
+ * programatik değişimler) + `ResizeObserver` ile genişlik değişimi (satır kırılımı değişir).
61
+ *
62
+ * Satır yüksekliğine dolgu VE kenarlık eklenir (`box-sizing: border-box`) — eskiden yalnızca
63
+ * `rows × line-height` alınıyordu; `minRows=2` alan iki satırdan kısa, son satır kırpık çıkıyordu.
64
+ */
65
+ declare class Input {
66
+ readonly size: _angular_core.InputSignal<MfSize>;
67
+ /** Field'ın `error` input'u dolu olduğunda çağıran ekran bunu true geçer. */
68
+ readonly hasError: _angular_core.InputSignal<boolean>;
69
+ readonly autosize: _angular_core.InputSignal<boolean>;
70
+ readonly minRows: _angular_core.InputSignal<number>;
71
+ readonly maxRows: _angular_core.InputSignal<number | null>;
72
+ private readonly elementRef;
73
+ private readonly nativeSizing;
74
+ private lastValue;
75
+ private lastWidth;
76
+ protected readonly classes: _angular_core.Signal<string>;
77
+ constructor();
78
+ protected onInput(): void;
79
+ private resize;
80
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Input, never>;
81
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Input, "input[mfInput]:not([type=checkbox]):not([type=radio]), textarea[mfInput]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "autosize": { "alias": "autosize"; "required": false; "isSignal": true; }; "minRows": { "alias": "minRows"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
82
+ }
83
+
84
+ /**
85
+ * `<mf-input-group>
86
+ * <span mfInputPrefix><span mfIcon>search</span></span>
87
+ * <input mfInput class="border-0 bg-transparent shadow-none focus-visible:outline-none" />
88
+ * <span mfInputSuffix><button type="button">×</button></span>
89
+ * </mf-input-group>`
90
+ *
91
+ * `SearchInput`/`NumberInput`/`DateRangePicker`'ın HER BİRİNİN kendi elle
92
+ * yazdığı "kabuk" reçetesini (bkz. plan Faz 2 P0) `core/recipes.ts`'in
93
+ * `controlSurface`/`controlSize`'ına indirger — üç ayrı kopya yerine TEK
94
+ * kaynak. İçindeki `input[mfInput]` KENDİ border/shadow/outline'ını
95
+ * KAPATMALI (yukarıdaki örnekteki class'lar) — kabuk artık bunları BURADAN
96
+ * sağlıyor, "çift kenarlık" olmasın diye (bkz. `DateRangePicker`'ın eski
97
+ * `wrapperClasses` notu, aynı gerekçe).
98
+ *
99
+ * Odak halkası `has-[:focus-visible]:outline` ile İÇ elemanlardan HERHANGİ
100
+ * biri klavye-odaklandığında TÜM kabuğun etrafında TEK bir halka çizer
101
+ * (`DateRangePicker`'ın iki input'u arasında geçişte "zıplayan" iki ayrı
102
+ * halka yerine) — `input[mfInput]`'un KENDİ `focus-visible:outline`'ı
103
+ * BİLEREK kapatılmalı (yukarıdaki örnek), aksi halde İKİ halka üst üste biner.
104
+ */
105
+ declare class InputGroup {
106
+ readonly size: _angular_core.InputSignal<MfSize>;
107
+ readonly disabled: _angular_core.InputSignal<boolean>;
108
+ readonly hasError: _angular_core.InputSignal<boolean>;
109
+ /**
110
+ * `false` → iç dolgu/aralık (`px-*`/`gap-*`) KALKAR, çocuklar `items-stretch`
111
+ * ile TAM yüksekliği doldurur — kenardan kenara oturan (dış kabuğun
112
+ * `rounded-*`sini birebir paylaşan) düğmeler için (ör. `NumberInput`'un
113
+ * azalt/artır düğmeleri). Varsayılan `true` — ikon/metin gibi "nefes payı"
114
+ * isteyen eklerin (ör. `DateRangePicker`'ın takvim ikonu) olağan hali.
115
+ */
116
+ readonly padded: _angular_core.InputSignal<boolean>;
117
+ /**
118
+ * `true` → sabit `h-control-*` yerine `h-auto` + `flex-wrap` — içerik
119
+ * (ör. `TagInput`'un çoğalan Chip'leri) tek satıra sığmadığında kabuk
120
+ * BÜYÜR, taşırmaz. Varsayılan `false` (tek satırlık kontroller — ESKİ
121
+ * davranış birebir korunur).
122
+ */
123
+ readonly wrap: _angular_core.InputSignal<boolean>;
124
+ /** `controlSize`'ın `px-*` değerleriyle birebir (sm 2.5 · md 3 · lg 3.5). */
125
+ protected readonly edgePadding: _angular_core.Signal<string>;
126
+ protected readonly classes: _angular_core.Signal<string>;
127
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputGroup, never>;
128
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputGroup, "mf-input-group", ["mfInputGroup"], { "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "padded": { "alias": "padded"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, {}, never, ["[mfInputPrefix]", "*", "[mfInputSuffix]"], true, never>;
129
+ }
130
+
131
+ /**
132
+ * `<span mfInputPrefix><span mfIcon>search</span></span>` — bkz. `input-group.ts`'in JSDoc'u.
133
+ *
134
+ * `addon`: metin/seçim eki (`https://`, `₺`, alan kodu) kabuğun sol kenarına BİTİŞİK bir bölüm
135
+ * olur — sönük zemin + ayırıcı çizgi, kabuğun dolgusu `--mf-input-group-px` ile geri alınır.
136
+ */
137
+ declare class InputPrefix {
138
+ readonly addon: _angular_core.InputSignalWithTransform<boolean, unknown>;
139
+ protected readonly classes: _angular_core.Signal<string>;
140
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputPrefix, never>;
141
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<InputPrefix, "[mfInputPrefix]", never, { "addon": { "alias": "addon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
142
+ }
143
+
144
+ /**
145
+ * `<span mfInputSuffix><button ...>×</button></span>` — bkz. `input-group.ts`'in JSDoc'u.
146
+ * `addon`: sağ kenara bitişik bölüm (`.com`, `kg`, birim seçimi) — bkz. `InputPrefix.addon`.
147
+ */
148
+ declare class InputSuffix {
149
+ readonly addon: _angular_core.InputSignalWithTransform<boolean, unknown>;
150
+ protected readonly classes: _angular_core.Signal<string>;
151
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputSuffix, never>;
152
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<InputSuffix, "[mfInputSuffix]", never, { "addon": { "alias": "addon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
153
+ }
154
+
155
+ /**
156
+ * Bkz. `core/recipes.ts` `controlSurface`/`focusRecipe`/`disabledRecipe`/
157
+ * `errorRecipe` — bu dosya onların TEK tüketicisi değil (Select/NumberInput/
158
+ * ... aynı reçeteleri paylaşır), form kontrolleri genelinde tek kaynak.
159
+ *
160
+ * `size` ekseni `min-h-*` KULLANIR, `h-control-*` (sabit yükseklik) DEĞİL:
161
+ * selector `textarea[mfInput]`'ı da kapsıyor (bkz. input.ts), sabit yükseklik
162
+ * çok satırlı `rows` kullanan bir textarea'yı sıkıştırırdı. Tek satırlık
163
+ * `<input>`'ta `py-*` ile birlikte tam kontrol yüksekliğine oturuyor,
164
+ * textarea `rows` arttıkça bu tabanın üstüne doğal büyüyor. `min-h-(--control-h-*)`
165
+ * — Tailwind v4'ün parantezli kısayolu, `--control-h-*` token'ına (radius.css)
166
+ * doğrudan referans, ayrı bir `min-h-control-*` utility'si tanımlamaya gerek yok.
167
+ *
168
+ * `hasError` (invalid DEĞİL): `@angular/forms/signals`'ın `[formField]`
169
+ * directive'i, AYNI native elemandaki başka bir directive'in `invalid`/
170
+ * `disabled`/`required`/`pattern`/... adlı input'larını (bkz. signals.mjs
171
+ * `FIELD_STATE_KEY_TO_CONTROL_BINDING`) OTOMATİK olarak alanın ham validity
172
+ * durumuyla dolduruyor — henüz dokunulmamış (untouched) zorunlu bir alan bile
173
+ * anında "invalid" oluyor ve kırmızı görünüyordu (gerçek bug, tarayıcıda
174
+ * yakalandı). `hasError` bu rezerve isim listesinde YOK, çakışmıyor —
175
+ * çağıran ekran görünürlüğü kendi `touched()/errors()` mantığıyla kontrol
176
+ * etmeye devam ediyor.
177
+ */
178
+ declare const inputVariants: (props?: ({
179
+ size?: "sm" | "md" | "lg" | null | undefined;
180
+ hasError?: boolean | null | undefined;
181
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
182
+ type InputSize = VariantProps<typeof inputVariants>['size'];
183
+ type InputHasError = VariantProps<typeof inputVariants>['hasError'];
184
+
185
+ export { CharacterCount, Input, InputGroup, InputPrefix, InputSuffix, MF_FIELD_SIZING_SUPPORTED, inputVariants };
186
+ export type { InputHasError, InputSize };
@@ -0,0 +1,9 @@
1
+ import * as i0 from '@angular/core';
2
+
3
+ /** `<kbd mfKbd>Ctrl</kbd>` — tek bir tuş/kısayol parçasının görsel yongası (chip). Birden fazla tuş için ardışık kullan: `<kbd mfKbd>Ctrl</kbd>+<kbd mfKbd>K</kbd>`. */
4
+ declare class Kbd {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<Kbd, never>;
6
+ static ɵdir: i0.ɵɵDirectiveDeclaration<Kbd, "kbd[mfKbd]", never, {}, {}, never, never, true, never>;
7
+ }
8
+
9
+ export { Kbd };
@@ -0,0 +1,20 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { MfTone } from '@mesgflow/ui-kit/core';
3
+
4
+ type LinkUnderline = 'always' | 'hover' | 'none';
5
+ /**
6
+ * `<a mfLink href="/ayarlar">Ayarlar</a>` — düz metin içine gömülü bağlantılar
7
+ * için (ör. "Zaten hesabınız var mı? Giriş yapın"). Navigasyon bağlantıları
8
+ * (sidebar, tabs, breadcrumb) KENDİ bileşenlerinin stilini taşır, bu
9
+ * directive'i KULLANMAZ — `Link` SADECE metin akışı içindeki bağlantılar için.
10
+ */
11
+ declare class Link {
12
+ readonly tone: _angular_core.InputSignal<MfTone>;
13
+ readonly underline: _angular_core.InputSignal<LinkUnderline>;
14
+ protected readonly classes: _angular_core.Signal<string>;
15
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Link, never>;
16
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Link, "a[mfLink]", never, { "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "underline": { "alias": "underline"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17
+ }
18
+
19
+ export { Link };
20
+ export type { LinkUnderline };
@@ -0,0 +1,53 @@
1
+ import * as i0 from '@angular/core';
2
+ import * as i1 from '@angular/aria/menu';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ /**
7
+ * `<mf-menu #menu="ngMenu" (itemSelected)="onSelect($event)"><button mfMenuItem value="a">A</button></mf-menu>`
8
+ * — genelde bir `mf-popover` içine konur, tetikleyici için `mfMenuTrigger`
9
+ * kullanılır (bkz. `menu-trigger.ts`). ARIA/klavye (ok tuşu navigasyonu,
10
+ * typeahead, alt-menü açma) `@angular/aria/menu`'nün `Menu` pattern'inden
11
+ * `hostDirectives` ile geliyor — `Select`'in listbox'ıyla AYNI görsel dil
12
+ * (rounded-lg, shadow-2, bg-overlay).
13
+ *
14
+ * `hostDirectives` uygulanan bir directive'in KENDİ `exportAs`'ı (`ngMenu`)
15
+ * host elemanda hâlâ kullanılabilir (Angular directive composition API'sinin
16
+ * dokümante edilmiş davranışı) — bu yüzden `MenuTrigger`'ın `[menu]`
17
+ * girdisine doğrudan `#menu="ngMenu"` verilebiliyor, ayrı bir forward'a
18
+ * gerek yok.
19
+ */
20
+ declare class Menu {
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<Menu, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<Menu, "mf-menu", ["mfMenu"], {}, {}, never, ["*"], true, [{ directive: typeof i1.Menu; inputs: { "wrap": "wrap"; "disabled": "disabled"; "typeaheadDelay": "typeaheadDelay"; }; outputs: { "itemSelected": "itemSelected"; }; }]>;
23
+ }
24
+
25
+ /** `<button mfMenuItem value="delete">Sil</button>` — `mf-menu` içine konur. */
26
+ declare class MenuItem<V> {
27
+ private readonly ariaMenuItem;
28
+ protected readonly classes: i0.Signal<string>;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<MenuItem<any>, never>;
30
+ static ɵdir: i0.ɵɵDirectiveDeclaration<MenuItem<any>, "button[mfMenuItem], div[mfMenuItem]", never, {}, {}, never, never, true, [{ directive: typeof i1.MenuItem; inputs: { "value": "value"; "disabled": "disabled"; "id": "id"; }; outputs: {}; }]>;
31
+ }
32
+
33
+ /**
34
+ * `<button mfMenuTrigger [menu]="menuRef" cdkOverlayOrigin #origin="cdkOverlayOrigin">Aç</button>`
35
+ * — `[menu]`'ye `mf-menu`'nün `#ref="ngMenu"` template referansını ver.
36
+ * Pozisyonlama (floating panel) bu directive'in İŞİ DEĞİL — `@angular/aria/menu`
37
+ * headless, konum bilgisi taşımıyor; `mf-popover`'ın `[open]="trigger.expanded()"`
38
+ * ile beslenmesi gerekiyor (bkz. playground'daki Menu demosu, `(closed)`
39
+ * çıktısında `trigger.close()` çağırarak iki state'i senkron tutma deseni).
40
+ */
41
+ declare class MenuTrigger {
42
+ static ɵfac: i0.ɵɵFactoryDeclaration<MenuTrigger, never>;
43
+ static ɵdir: i0.ɵɵDirectiveDeclaration<MenuTrigger, "[mfMenuTrigger]", ["mfMenuTrigger"], {}, {}, never, never, true, [{ directive: typeof i1.MenuTrigger; inputs: { "menu": "menu"; "disabled": "disabled"; }; outputs: {}; }]>;
44
+ }
45
+
46
+ declare const menuItemVariants: (props?: ({
47
+ active?: boolean | null | undefined;
48
+ disabled?: boolean | null | undefined;
49
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
50
+ type MenuItemActive = VariantProps<typeof menuItemVariants>['active'];
51
+
52
+ export { Menu, MenuItem, MenuTrigger, menuItemVariants };
53
+ export type { MenuItemActive };
@@ -0,0 +1,55 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+
4
+ /**
5
+ * `<mf-number-input [(value)]="padding" [min]="0" [max]="64" [step]="4" unit="px" />`
6
+ *
7
+ * `Select`'in `ControlValueAccessor` deseni tekrarlanıyor (bkz. select.ts
8
+ * üstündeki not) — native değil, `NG_VALUE_ACCESSOR`'ı KENDİSİ sağlamak
9
+ * zorunda. Klavye (yukarı/aşağı ok, PageUp/PageDown ±10×step) + stepper
10
+ * butonları (mouse-only, `tabindex="-1"` — gerçek `spinbutton` semantiği
11
+ * input'un kendisinde) HER ZAMAN TAM işlevsellik sağlıyor.
12
+ *
13
+ * Sürükleyerek değiştirme (Kademe 12 paket BV — önceden "v1 kapsamı dışı"
14
+ * bırakılmıştı) — SADECE `unit()` VERİLMİŞSE (`px` etiketi gibi) o etiket
15
+ * yatay sürüklenebilir bir "scrubber" olur (`pointerdown`+`setPointerCapture`
16
+ * ile sürükleme YAKALANIR, imleç `ew-resize` olur). `unit` YOKSA (boş
17
+ * string) sürükleme EKLENMEDİ — dekoratif bir tutamaç elementi olmadan
18
+ * kullanıcının "burayı sürükleyebilirim" sezgisi YOK, YENİ bir görsel
19
+ * eleman eklemek gerekirdi (kapsam dışı). Bu, ERİŞİLEBİLİRLİK açısından
20
+ * bir GERİLEME DEĞİL — klavye ZATEN aynı işlevselliği (yukarı/aşağı ok)
21
+ * tam olarak sağlıyor, sürükleme SADECE mouse kullanıcıları için EK bir
22
+ * kısayol (stepper butonlarının `tabindex="-1"` olmasıyla AYNI ilke).
23
+ */
24
+ declare class NumberInput implements ControlValueAccessor {
25
+ readonly value: _angular_core.ModelSignal<number | null>;
26
+ readonly min: _angular_core.InputSignal<number | null>;
27
+ readonly max: _angular_core.InputSignal<number | null>;
28
+ readonly step: _angular_core.InputSignal<number>;
29
+ readonly unit: _angular_core.InputSignal<string>;
30
+ readonly disabled: _angular_core.InputSignal<boolean>;
31
+ readonly hasError: _angular_core.InputSignal<boolean>;
32
+ readonly ariaLabel: _angular_core.InputSignal<string>;
33
+ private onChange;
34
+ private onTouched;
35
+ protected readonly canDecrement: _angular_core.Signal<boolean>;
36
+ protected readonly canIncrement: _angular_core.Signal<boolean>;
37
+ protected readonly dragging: _angular_core.WritableSignal<boolean>;
38
+ private dragStartClientX;
39
+ private dragStartValue;
40
+ writeValue(value: number | null): void;
41
+ registerOnChange(fn: (value: number | null) => void): void;
42
+ registerOnTouched(fn: () => void): void;
43
+ protected clamp(next: number): number;
44
+ protected adjust(delta: number): void;
45
+ protected onInputChange(raw: string): void;
46
+ protected onBlur(): void;
47
+ protected onKeydown(event: KeyboardEvent): void;
48
+ protected onUnitPointerDown(event: PointerEvent): void;
49
+ protected onUnitPointerMove(event: PointerEvent): void;
50
+ protected onUnitPointerUp(event: PointerEvent): void;
51
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NumberInput, never>;
52
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NumberInput, "mf-number-input", ["mfNumberInput"], { "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; }; "unit": { "alias": "unit"; "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; }; }, { "value": "valueChange"; }, never, never, true, never>;
53
+ }
54
+
55
+ export { NumberInput };
@@ -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
+
5
+ /**
6
+ * `<mf-otp-input [(value)]="code" [length]="6" />` — her biri TEK bir
7
+ * hane taşıyan `length()` kadar kutu. Değer İÇSEL olarak `length()`
8
+ * uzunluğa boşlukla ("henüz doldurulmadı") doldurulur, SADECE SONDAKİ
9
+ * boşluklar `value` model'ine yazılırken kesilir — ARADAKİ bir boşluk
10
+ * (ör. kullanıcı 3. kutuya tıklayıp DOĞRUDAN yazarsa, 1-2 boş kalır)
11
+ * teknik olarak MÜMKÜN ama normal sıralı doldurma/yapıştırma akışında
12
+ * hiç OLUŞMAZ.
13
+ *
14
+ * Çoklu karakter TEK bir kutuya girerse (mobil SMS OTP otomatik doldurma
15
+ * — işletim sistemi TÜM kodu ilk kutunun `input` event'ine basar) VEYA
16
+ * yapıştırılırsa, `fillFrom(0, ...)` TÜM kutuları doldurur — ikisi de
17
+ * AYNI yardımcıyı paylaşıyor.
18
+ */
19
+ declare class OtpInput extends ValueAccessorBase<string> implements ControlValueAccessor {
20
+ readonly value: _angular_core.ModelSignal<string>;
21
+ readonly length: _angular_core.InputSignal<number>;
22
+ readonly disabled: _angular_core.InputSignal<boolean>;
23
+ readonly hasError: _angular_core.InputSignal<boolean>;
24
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
25
+ private readonly otpLabels;
26
+ protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
27
+ protected readonly indexes: _angular_core.Signal<number[]>;
28
+ private readonly boxes;
29
+ writeValue(value: string): void;
30
+ protected digitAt(i: number): string;
31
+ protected onInput(i: number, event: Event): void;
32
+ protected onKeydown(i: number, event: KeyboardEvent): void;
33
+ protected onPaste(event: ClipboardEvent): void;
34
+ /** Odaklanınca mevcut haneyi SEÇER — yazmak EKLEMEK yerine DEĞİŞTİRİR (standart OTP kutusu davranışı). */
35
+ protected onFocus(event: FocusEvent): void;
36
+ private setDigit;
37
+ private fillFrom;
38
+ private commit;
39
+ private focusBox;
40
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OtpInput, never>;
41
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OtpInput, "mf-otp-input", ["mfOtpInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "length": { "alias": "length"; "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; }; }, { "value": "valueChange"; }, never, never, true, never>;
42
+ }
43
+
44
+ export { OtpInput };