@mesgflow/ui-kit 0.6.0 → 0.7.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 (199) hide show
  1. package/README.md +56 -5
  2. package/fesm2022/mesgflow-ui-kit-accordion.mjs +3 -2
  3. package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -1
  4. package/fesm2022/mesgflow-ui-kit-agenda.mjs +208 -0
  5. package/fesm2022/mesgflow-ui-kit-agenda.mjs.map +1 -0
  6. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
  7. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
  9. package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
  10. package/fesm2022/mesgflow-ui-kit-box-input.mjs +2 -2
  11. package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
  12. package/fesm2022/mesgflow-ui-kit-button.mjs +188 -242
  13. package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
  14. package/fesm2022/mesgflow-ui-kit-card.mjs +37 -16
  15. package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
  16. package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
  17. package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
  18. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +16 -21
  19. package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
  20. package/fesm2022/mesgflow-ui-kit-chip.mjs +2 -2
  21. package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
  22. package/fesm2022/mesgflow-ui-kit-code-block.mjs +9 -5
  23. package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
  24. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +6 -4
  25. package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
  26. package/fesm2022/mesgflow-ui-kit-combobox.mjs +145 -65
  27. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
  28. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +4 -6
  29. package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
  30. package/fesm2022/mesgflow-ui-kit-core.mjs +441 -128
  31. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
  32. package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
  33. package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
  34. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +131 -10
  35. package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
  36. package/fesm2022/mesgflow-ui-kit-dialog.mjs +117 -34
  37. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
  38. package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
  39. package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
  40. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +3 -3
  41. package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
  42. package/fesm2022/mesgflow-ui-kit-field.mjs +53 -12
  43. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
  44. package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
  45. package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
  46. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +131 -0
  47. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
  48. package/fesm2022/mesgflow-ui-kit-icon.mjs +6 -1
  49. package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
  50. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
  51. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
  52. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
  53. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
  54. package/fesm2022/mesgflow-ui-kit-input.mjs +147 -4
  55. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
  56. package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
  57. package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
  58. package/fesm2022/mesgflow-ui-kit-link.mjs +2 -2
  59. package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
  60. package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
  61. package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
  62. package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
  63. package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
  64. package/fesm2022/mesgflow-ui-kit-menu.mjs +169 -5
  65. package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
  66. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
  67. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
  68. package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
  69. package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
  70. package/fesm2022/mesgflow-ui-kit-number-input.mjs +7 -4
  71. package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
  72. package/fesm2022/mesgflow-ui-kit-pagination.mjs +4 -3
  73. package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
  74. package/fesm2022/mesgflow-ui-kit-password-input.mjs +7 -2
  75. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
  76. package/fesm2022/mesgflow-ui-kit-popover.mjs +9 -49
  77. package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
  78. package/fesm2022/mesgflow-ui-kit-progress.mjs +162 -21
  79. package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
  80. package/fesm2022/mesgflow-ui-kit-radio.mjs +4 -6
  81. package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
  82. package/fesm2022/mesgflow-ui-kit-rating.mjs +2 -2
  83. package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
  84. package/fesm2022/mesgflow-ui-kit-search-input.mjs +9 -5
  85. package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
  86. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +12 -8
  87. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
  88. package/fesm2022/mesgflow-ui-kit-select.mjs +3 -2
  89. package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
  90. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +16 -13
  91. package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
  92. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +4 -3
  93. package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
  94. package/fesm2022/mesgflow-ui-kit-slider.mjs +250 -3
  95. package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
  96. package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
  97. package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
  98. package/fesm2022/mesgflow-ui-kit-spinner.mjs +42 -13
  99. package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
  100. package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
  101. package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
  102. package/fesm2022/mesgflow-ui-kit-splitter.mjs +210 -3
  103. package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
  104. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +11 -4
  105. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
  106. package/fesm2022/mesgflow-ui-kit-stepper.mjs +167 -60
  107. package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
  108. package/fesm2022/mesgflow-ui-kit-switch.mjs +2 -2
  109. package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
  110. package/fesm2022/mesgflow-ui-kit-table.mjs +16 -10
  111. package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
  112. package/fesm2022/mesgflow-ui-kit-tabs.mjs +410 -169
  113. package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
  114. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +7 -2
  115. package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
  116. package/fesm2022/mesgflow-ui-kit-theming.mjs +4 -4
  117. package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
  118. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +3 -3
  119. package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
  120. package/fesm2022/mesgflow-ui-kit-toast.mjs +113 -30
  121. package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
  122. package/fesm2022/mesgflow-ui-kit-toggle.mjs +3 -2
  123. package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
  124. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +4 -2
  125. package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
  126. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +73 -50
  127. package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
  128. package/fesm2022/mesgflow-ui-kit-tour.mjs +8 -20
  129. package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
  130. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
  131. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
  132. package/fesm2022/mesgflow-ui-kit-tree.mjs +1 -1
  133. package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
  134. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
  135. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
  136. package/fesm2022/mesgflow-ui-kit.mjs +92 -12836
  137. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
  138. package/package.json +87 -3
  139. package/schematics/collection.json +10 -0
  140. package/schematics/migration.json +10 -0
  141. package/schematics/migrations/v0-7.cjs +70 -0
  142. package/schematics/ng-add/index.cjs +234 -0
  143. package/schematics/ng-add/schema.json +43 -0
  144. package/tokens/color.css +96 -0
  145. package/tokens/controls.css +145 -0
  146. package/tokens/elevation.css +62 -6
  147. package/tokens/motion.css +304 -66
  148. package/tokens/radius.css +14 -0
  149. package/tokens.css +1 -0
  150. package/tokens.json +1583 -0
  151. package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
  152. package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
  153. package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
  154. package/types/mesgflow-ui-kit-button.d.ts +23 -38
  155. package/types/mesgflow-ui-kit-card.d.ts +26 -16
  156. package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
  157. package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
  158. package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
  159. package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
  160. package/types/mesgflow-ui-kit-core.d.ts +271 -21
  161. package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
  162. package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
  163. package/types/mesgflow-ui-kit-dialog.d.ts +29 -6
  164. package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
  165. package/types/mesgflow-ui-kit-field.d.ts +17 -8
  166. package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
  167. package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
  168. package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
  169. package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
  170. package/types/mesgflow-ui-kit-input.d.ts +64 -2
  171. package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
  172. package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
  173. package/types/mesgflow-ui-kit-mention.d.ts +59 -0
  174. package/types/mesgflow-ui-kit-menu.d.ts +41 -2
  175. package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
  176. package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
  177. package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
  178. package/types/mesgflow-ui-kit-password-input.d.ts +3 -1
  179. package/types/mesgflow-ui-kit-popover.d.ts +13 -5
  180. package/types/mesgflow-ui-kit-progress.d.ts +33 -12
  181. package/types/mesgflow-ui-kit-radio.d.ts +2 -2
  182. package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
  183. package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
  184. package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
  185. package/types/mesgflow-ui-kit-slider.d.ts +60 -1
  186. package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
  187. package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
  188. package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
  189. package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
  190. package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
  191. package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
  192. package/types/mesgflow-ui-kit-table.d.ts +2 -0
  193. package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
  194. package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
  195. package/types/mesgflow-ui-kit-toast.d.ts +48 -22
  196. package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
  197. package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
  198. package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
  199. package/types/mesgflow-ui-kit.d.ts +87 -5444
@@ -1,15 +1,17 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
 
3
3
  /**
4
- * `<mf-field label="E-posta" [error]="emailError()">
5
- * <input mfInput type="email" [id]="..." />
4
+ * `<mf-field label="E-posta" for="email" [error]="emailError()" hint="İş adresiniz">
5
+ * <input mfInput id="email" type="email" />
6
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
7
  *
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).
8
+ * `for` verildiğinde alan, içindeki `#for` kontrolünü OTOMATİK bağlar:
9
+ * - `aria-describedby` → ipucu/hata metninin id'si (kontrolün mevcut
10
+ * describedby değerleri korunur, yalnızca kendi id'lerini ekler/çıkarır),
11
+ * - `aria-invalid="true"` → hata varken,
12
+ * - `aria-required="true"` → `required` iken.
13
+ * Hata metni `role="alert"` DEĞİL, `aria-live="polite"` — her tuş vuruşunda
14
+ * ekran okuyucuyu kesmesin. `error` `string | undefined` kabul eder.
13
15
  */
14
16
  declare class Field {
15
17
  readonly label: _angular_core.InputSignal<string>;
@@ -17,8 +19,15 @@ declare class Field {
17
19
  readonly hint: _angular_core.InputSignal<string>;
18
20
  readonly error: _angular_core.InputSignal<string | undefined>;
19
21
  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`). */
22
+ /** `true` ise kalan yüksekliği doldurur (`flex-1 min-h-0`). */
21
23
  readonly grow: _angular_core.InputSignal<boolean>;
24
+ private readonly host;
25
+ private readonly baseId;
26
+ protected readonly hintId: string;
27
+ protected readonly errorId: string;
28
+ /** Şu an görünen açıklama metninin id'si (hata ipucunun yerine geçer). */
29
+ protected readonly describedId: _angular_core.Signal<string | null>;
30
+ constructor();
22
31
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Field, never>;
23
32
  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
33
  }
@@ -0,0 +1,64 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
+ import * as _angular_core from '@angular/core';
3
+ import { DropzoneRejection } from '@mesgflow/ui-kit/dropzone';
4
+
5
+ type UploadStatus = 'queued' | 'uploading' | 'done' | 'error';
6
+ interface UploadItem {
7
+ id: string;
8
+ file: File;
9
+ /** 0–100 */
10
+ progress: number;
11
+ status: UploadStatus;
12
+ error?: string;
13
+ }
14
+ /**
15
+ * Yükleme işlevi — ilerlemeyi `report(0..100)` ile bildirir, iptal için
16
+ * `signal`'i dinler; başarıda çözülür, hatada `Error` fırlatır.
17
+ */
18
+ type Uploader = (file: File, report: (percent: number) => void, signal: AbortSignal) => Promise<void>;
19
+ /** İnsan okunur boyut — birimler evrensel (B/KB/MB/GB), sayı biçimi yerele göre. */
20
+ declare function formatBytes(bytes: number, locale?: string): string;
21
+ /**
22
+ * `<mf-file-upload [uploader]="upload" [(items)]="files" accept="image/*" multiple />`
23
+ *
24
+ * Sürükle-bırak alanı + dosya listesi. `uploader` verilirse bileşen yüklemeyi
25
+ * KENDİSİ yürütür: eşzamanlı en çok `concurrency` dosya, dosya başına ilerleme
26
+ * çubuğu, iptal (AbortSignal), hatada "Yeniden dene". Verilmezse yalnızca
27
+ * listeyi tutar (tüketici `items`'ı kendisi günceller).
28
+ *
29
+ * Her satırın durumu `aria-live` ile duyurulur; ilerleme `role="progressbar"`.
30
+ */
31
+ declare class FileUpload {
32
+ readonly items: _angular_core.ModelSignal<UploadItem[]>;
33
+ readonly uploader: _angular_core.InputSignal<Uploader | null>;
34
+ readonly accept: _angular_core.InputSignal<string>;
35
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
36
+ readonly maxSizeBytes: _angular_core.InputSignal<number | null>;
37
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
38
+ readonly label: _angular_core.InputSignal<string | undefined>;
39
+ /** Aynı anda yüklenecek en çok dosya. */
40
+ readonly concurrency: _angular_core.InputSignal<number>;
41
+ readonly rejected: _angular_core.OutputEmitterRef<DropzoneRejection[]>;
42
+ readonly removed: _angular_core.OutputEmitterRef<UploadItem>;
43
+ /** Tüm kuyruk bittiğinde (başarılı + başarısız). */
44
+ readonly settled: _angular_core.OutputEmitterRef<UploadItem[]>;
45
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfFileUploadLabels>;
46
+ private readonly controllers;
47
+ protected readonly listLabel: _angular_core.Signal<string>;
48
+ constructor();
49
+ protected size(bytes: number): string;
50
+ protected iconFor(item: UploadItem): string;
51
+ protected statusText(item: UploadItem): string;
52
+ protected add(files: File[]): void;
53
+ protected retry(item: UploadItem): void;
54
+ protected remove(item: UploadItem): void;
55
+ /** Kuyruğu işletir — boş yuva kadar `queued` öğeyi başlatır. */
56
+ private pump;
57
+ private start;
58
+ private patch;
59
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUpload, never>;
60
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileUpload, "mf-file-upload", ["mfFileUpload"], { "items": { "alias": "items"; "required": false; "isSignal": true; }; "uploader": { "alias": "uploader"; "required": false; "isSignal": true; }; "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; }; "concurrency": { "alias": "concurrency"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "rejected": "rejected"; "removed": "removed"; "settled": "settled"; }, never, never, true, never>;
61
+ }
62
+
63
+ export { FileUpload, formatBytes };
64
+ export type { UploadItem, UploadStatus, Uploader };
@@ -1,7 +1,7 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
1
2
  import * as _angular_core from '@angular/core';
2
3
  import * as i1 from '@angular/cdk/overlay';
3
4
  import { CdkOverlayOrigin } from '@angular/cdk/overlay';
4
- import { PopoverPlacement } from '@mesgflow/ui-kit/popover';
5
5
 
6
6
  /**
7
7
  * `<a href="/u/ayse" [mfHoverCardTrigger]="card">@ayse</a>
@@ -17,7 +17,7 @@ import { PopoverPlacement } from '@mesgflow/ui-kit/popover';
17
17
  */
18
18
  declare class HoverCard {
19
19
  readonly open: _angular_core.ModelSignal<boolean>;
20
- readonly placement: _angular_core.InputSignal<PopoverPlacement>;
20
+ readonly placement: _angular_core.InputSignal<_mesgflow_ui_kit_core.MfPlacement>;
21
21
  /** Üzerine gelindikten sonra açılma gecikmesi (ms) — imleç geçip giderken kart fırlamasın. */
22
22
  readonly openDelay: _angular_core.InputSignal<number>;
23
23
  /** Ayrıldıktan sonra kapanma gecikmesi (ms) — tetikleyiciden karta geçiş boşluğu için. */
@@ -0,0 +1,27 @@
1
+ import { EnvironmentProviders } from '@angular/core';
2
+ import { MfIconSet } from '@mesgflow/ui-kit/icon';
3
+
4
+ interface MfLucideOptions {
5
+ /** Çizgi kalınlığı — Lucide varsayılanı 2; kitin yoğun arayüzünde 1.75 daha rafine durur. */
6
+ strokeWidth?: number;
7
+ /** Ek/ezen ikonlar (ör. marka ikonları) — aynı ad Lucide'ınkini ezer. */
8
+ extra?: MfIconSet;
9
+ }
10
+ /**
11
+ * `providers: [provideMfLucideIcons()]` — kitin ve uygulamanın Material
12
+ * Symbols ADLARIYLA yazılmış ikonlarını (`<span mfIcon>close</span>`,
13
+ * `iconStart="add"`) Lucide çizgi ikonlarıyla karşılar:
14
+ *
15
+ * - Font indirilmez, FOUT'ta ham "close" metni görünmez.
16
+ * - Tutarlı 24px ızgara + ayarlanabilir çizgi kalınlığı (premium, ince çizgi dili).
17
+ * - Eşlenmeyen adlar Material Symbols fontuna düşer — geçiş kırıcı DEĞİL.
18
+ *
19
+ * Opsiyonel entry: import edilmezse pakete girmez (tree-shake).
20
+ */
21
+ declare function provideMfLucideIcons(options?: MfLucideOptions): EnvironmentProviders;
22
+
23
+ /** Material Symbols adlarıyla anahtarlanmış Lucide çizgi ikonları (170 ad). */
24
+ declare const MF_LUCIDE_ICONS: MfIconSet;
25
+
26
+ export { MF_LUCIDE_ICONS, provideMfLucideIcons };
27
+ export type { MfLucideOptions };
@@ -0,0 +1,42 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
+ import * as _angular_core from '@angular/core';
3
+
4
+ /**
5
+ * `<mf-inline-edit [(value)]="title" ariaLabel="Proje adı" [validate]="notEmpty" (save)="persist($event)" />`
6
+ *
7
+ * Yerinde düzenleme — metin gibi görünür, tıklayınca/Enter'a basınca giriş
8
+ * alanına döner. Enter kaydeder, Escape vazgeçer, odak dışarı çıkınca kaydeder
9
+ * (`saveOnBlur`). `validate` hata metni döndürürse kayıt engellenir ve hata
10
+ * `aria-describedby` ile duyurulur. `multiline` → textarea (Ctrl/⌘+Enter kaydeder).
11
+ */
12
+ declare class InlineEdit {
13
+ readonly value: _angular_core.ModelSignal<string>;
14
+ readonly ariaLabel: _angular_core.InputSignal<string>;
15
+ readonly placeholder: _angular_core.InputSignal<string>;
16
+ readonly multiline: _angular_core.InputSignalWithTransform<boolean, unknown>;
17
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
18
+ readonly saveOnBlur: _angular_core.InputSignalWithTransform<boolean, unknown>;
19
+ /** Hata metni döndürürse kayıt engellenir; `null` → geçerli. */
20
+ readonly validate: _angular_core.InputSignal<(value: string) => string | null>;
21
+ readonly save: _angular_core.OutputEmitterRef<string>;
22
+ readonly canceled: _angular_core.OutputEmitterRef<void>;
23
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfInlineEditLabels>;
24
+ protected readonly editing: _angular_core.WritableSignal<boolean>;
25
+ protected readonly draft: _angular_core.WritableSignal<string>;
26
+ protected readonly error: _angular_core.WritableSignal<string | null>;
27
+ protected readonly errorId: string;
28
+ private readonly field;
29
+ private readonly host;
30
+ protected readonly fieldClass: _angular_core.Signal<string>;
31
+ protected start(): void;
32
+ /** `restoreFocus`: Enter/düğme ile kayıtta odak metne döner; blur ile kayıtta (kullanıcı başka yere geçti) dönmez. */
33
+ commit(restoreFocus?: boolean): void;
34
+ cancel(): void;
35
+ protected onKeydown(event: KeyboardEvent): void;
36
+ protected onBlur(): void;
37
+ private restoreFocus;
38
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InlineEdit, never>;
39
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InlineEdit, "mf-inline-edit", ["mfInlineEdit"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "multiline": { "alias": "multiline"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "saveOnBlur": { "alias": "saveOnBlur"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "save": "save"; "canceled": "canceled"; }, never, never, true, never>;
40
+ }
41
+
42
+ export { InlineEdit };
@@ -182,5 +182,67 @@ declare const inputVariants: (props?: ({
182
182
  type InputSize = VariantProps<typeof inputVariants>['size'];
183
183
  type InputHasError = VariantProps<typeof inputVariants>['hasError'];
184
184
 
185
- export { CharacterCount, Input, InputGroup, InputPrefix, InputSuffix, MF_FIELD_SIZING_SUPPORTED, inputVariants };
186
- export type { InputHasError, InputSize };
185
+ /**
186
+ * Hazır desenler — `mfMask="phone-tr"` gibi adla verilir ya da doğrudan
187
+ * desen dizesi (`'(999) 999 99 99'`).
188
+ *
189
+ * Belirteçler: `9` rakam · `a` harf · `A` harf (büyük harfe çevrilir) ·
190
+ * `*` harf/rakam · `X` harf/rakam (büyük harfe çevrilir). Diğer her karakter
191
+ * sabittir ve otomatik eklenir.
192
+ */
193
+ declare const MF_MASK_PRESETS: {
194
+ readonly 'phone-tr': "(999) 999 99 99";
195
+ readonly 'phone-us': "(999) 999-9999";
196
+ readonly card: "9999 9999 9999 9999";
197
+ readonly expiry: "99/99";
198
+ readonly cvc: "999";
199
+ readonly iban: "AA99 XXXX XXXX XXXX XXXX XXXX XX";
200
+ readonly 'iban-tr': "TR99 9999 9999 9999 9999 9999 99";
201
+ readonly date: "99.99.9999";
202
+ readonly 'date-iso': "9999-99-99";
203
+ readonly time: "99:99";
204
+ readonly 'tc-kimlik': "99999999999";
205
+ };
206
+ type MfMaskPreset = keyof typeof MF_MASK_PRESETS;
207
+ interface MaskResult {
208
+ /** Biçimlenmiş metin (sabit karakterlerle). */
209
+ masked: string;
210
+ /** Yalnızca kullanıcı karakterleri. */
211
+ raw: string;
212
+ /** Tüm belirteçler doldu mu. */
213
+ complete: boolean;
214
+ }
215
+ /**
216
+ * Saf biçimlendirici — girdideki kabul edilebilir karakterleri sırayla desene
217
+ * yerleştirir. Sabitler yalnızca bir SONRAKİ belirteç için karakter varsa
218
+ * eklenir (sonda sarkan ") " oluşmaz). Desendeki sabitlerle aynı olan girdi
219
+ * karakterleri (kullanıcının yazdığı "(" gibi) atlanır.
220
+ */
221
+ declare function applyMask(pattern: string, value: string): MaskResult;
222
+ /**
223
+ * `<input mfInput mfMask="phone-tr" (maskRaw)="phone.set($event)" />`
224
+ *
225
+ * Yazarken biçimlendirir; imleç konumunu korur (ortadan silme/yapıştırma
226
+ * dahil). Biçimleme `input` olayının YAKALAMA fazında yapılır — Angular'ın
227
+ * `DefaultValueAccessor`'ı ve `(input)` bağlamaları zaten biçimlenmiş değeri
228
+ * görür (Reactive/Signal Forms ile uyumlu).
229
+ *
230
+ * - `maskRaw`: sabitsiz ham değer (API'ye gönderilecek olan).
231
+ * - `maskComplete`: desen tamamen dolduğunda `true`.
232
+ * - Rakam-yalnız desenlerde `inputmode="numeric"` (mobil sayısal klavye).
233
+ */
234
+ declare class Mask {
235
+ readonly mfMask: _angular_core.InputSignal<"phone-tr" | "phone-us" | "card" | "expiry" | "cvc" | "iban" | "iban-tr" | "date" | "date-iso" | "time" | "tc-kimlik" | (string & Record<never, never>)>;
236
+ readonly maskRaw: _angular_core.OutputEmitterRef<string>;
237
+ readonly maskComplete: _angular_core.OutputEmitterRef<boolean>;
238
+ private readonly el;
239
+ protected readonly pattern: _angular_core.Signal<string>;
240
+ protected readonly inputMode: _angular_core.Signal<"numeric" | null>;
241
+ constructor();
242
+ private format;
243
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Mask, never>;
244
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Mask, "input[mfMask]", ["mfMask"], { "mfMask": { "alias": "mfMask"; "required": true; "isSignal": true; }; }, { "maskRaw": "maskRaw"; "maskComplete": "maskComplete"; }, never, never, true, never>;
245
+ }
246
+
247
+ export { CharacterCount, Input, InputGroup, InputPrefix, InputSuffix, MF_FIELD_SIZING_SUPPORTED, MF_MASK_PRESETS, Mask, applyMask, inputVariants };
248
+ export type { InputHasError, InputSize, MaskResult, MfMaskPreset };
@@ -0,0 +1,54 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
3
+ import { DialogRef } from '@angular/cdk/dialog';
4
+
5
+ interface LightboxImage {
6
+ src: string;
7
+ alt: string;
8
+ caption?: string;
9
+ /** Küçük resim şeridi için (verilmezse `src`). */
10
+ thumb?: string;
11
+ }
12
+ /** Görüntüleyici paneli — `LightboxService.open()` açar. */
13
+ declare class LightboxViewer {
14
+ protected readonly ref: DialogRef<any, any>;
15
+ private readonly data;
16
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfLightboxLabels>;
17
+ protected readonly images: _angular_core.WritableSignal<readonly LightboxImage[]>;
18
+ protected readonly index: _angular_core.WritableSignal<number>;
19
+ protected readonly zoom: _angular_core.WritableSignal<boolean>;
20
+ protected readonly current: _angular_core.Signal<LightboxImage>;
21
+ protected readonly counter: _angular_core.Signal<string>;
22
+ protected step(delta: number): void;
23
+ protected go(i: number): void;
24
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LightboxViewer, never>;
25
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LightboxViewer, "mf-lightbox-viewer", never, {}, {}, never, never, true, never>;
26
+ }
27
+ /**
28
+ * `inject(LightboxService).open(images, 2)` — tam ekran görsel görüntüleyici.
29
+ * CDK Dialog üstünde: odak tuzağı + geri dönüş, Escape, `aria-modal`, koyu
30
+ * cam arka plan. ←/→ gezinir, +/− yakınlaştırır, küçük resim şeridi.
31
+ */
32
+ declare class LightboxService {
33
+ private readonly dialog;
34
+ private readonly labels;
35
+ open(images: readonly LightboxImage[], index?: number): DialogRef<unknown, LightboxViewer>;
36
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LightboxService, never>;
37
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
38
+ }
39
+ /**
40
+ * `<img mfLightbox [mfLightboxGroup]="gallery" [mfLightboxIndex]="i" …>` —
41
+ * tıklanınca (ve Enter/Boşluk ile) grubu o görselden açar. Görsel
42
+ * odaklanabilir bir `button` rolü alır.
43
+ */
44
+ declare class LightboxTrigger {
45
+ readonly mfLightboxGroup: _angular_core.InputSignal<readonly LightboxImage[]>;
46
+ readonly mfLightboxIndex: _angular_core.InputSignal<number>;
47
+ private readonly service;
48
+ open(): void;
49
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LightboxTrigger, never>;
50
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LightboxTrigger, "[mfLightbox]", never, { "mfLightboxGroup": { "alias": "mfLightboxGroup"; "required": true; "isSignal": true; }; "mfLightboxIndex": { "alias": "mfLightboxIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
51
+ }
52
+
53
+ export { LightboxService, LightboxTrigger, LightboxViewer };
54
+ export type { LightboxImage };
@@ -0,0 +1,30 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ interface ListboxOption<V> {
4
+ label: string;
5
+ value: V;
6
+ description?: string;
7
+ icon?: string;
8
+ disabled?: boolean;
9
+ }
10
+ /**
11
+ * `<mf-listbox [options]="plans" [(value)]="chosen" ariaLabel="Plan" />`
12
+ *
13
+ * Her zaman görünür seçim listesi (açılır olmayan Select) — ayar panelleri,
14
+ * filtre kenar çubukları, iki sütunlu seçiciler. `@angular/aria/listbox`:
15
+ * ↑/↓, Home/End, typeahead, Shift+ok ile aralık (çoklu), `aria-activedescendant`.
16
+ *
17
+ * `value` her zaman bir DİZİ (aria listbox sözleşmesi); tekli modda tek öğeli.
18
+ */
19
+ declare class Listbox<V> {
20
+ readonly options: _angular_core.InputSignal<ListboxOption<V>[]>;
21
+ readonly value: _angular_core.ModelSignal<V[]>;
22
+ readonly multi: _angular_core.InputSignalWithTransform<boolean, unknown>;
23
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
24
+ readonly ariaLabel: _angular_core.InputSignal<string>;
25
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Listbox<any>, never>;
26
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Listbox<any>, "mf-listbox", ["mfListbox"], { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
27
+ }
28
+
29
+ export { Listbox };
30
+ export type { ListboxOption };
@@ -0,0 +1,59 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
+ import * as _angular_core from '@angular/core';
3
+
4
+ interface MentionItem {
5
+ label: string;
6
+ value: string;
7
+ description?: string;
8
+ }
9
+ /** İmlecin öğeye göre piksel konumu — gizli bir "ayna" div ile ölçülür. */
10
+ declare function caretCoordinates(el: HTMLTextAreaElement | HTMLInputElement, position: number): {
11
+ top: number;
12
+ left: number;
13
+ height: number;
14
+ };
15
+ /** Öneri paneli — `mfMention` direktifi açar. */
16
+ declare class MentionPanel {
17
+ readonly items: _angular_core.InputSignal<MentionItem[]>;
18
+ readonly active: _angular_core.InputSignal<number>;
19
+ readonly listId: _angular_core.InputSignal<string>;
20
+ readonly pick: _angular_core.OutputEmitterRef<MentionItem>;
21
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfMentionLabels>;
22
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MentionPanel, never>;
23
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MentionPanel, "mf-mention-panel", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "listId": { "alias": "listId"; "required": false; "isSignal": true; }; }, { "pick": "pick"; }, never, never, true, never>;
24
+ }
25
+ /**
26
+ * `<textarea mfInput [mfMention]="people" (mentionAdd)="notify($event)"></textarea>`
27
+ *
28
+ * `@` (ya da `trigger`) yazınca imlecin hemen altında filtrelenmiş öneriler
29
+ * açar; ↑/↓ gezinir, Enter/Tab seçer, Escape kapatır. Seçim `@Ad ` olarak
30
+ * metne eklenir ve `mentionAdd` yayar. Erişilebilirlik: `aria-autocomplete`,
31
+ * `aria-controls` ve vurgulanan öneri için `aria-activedescendant` (odak
32
+ * metin alanında kalır).
33
+ */
34
+ declare class Mention {
35
+ readonly mfMention: _angular_core.InputSignal<MentionItem[]>;
36
+ readonly trigger: _angular_core.InputSignal<string>;
37
+ readonly mentionAdd: _angular_core.OutputEmitterRef<MentionItem>;
38
+ protected readonly listId: string;
39
+ private readonly el;
40
+ private readonly overlay;
41
+ private ref;
42
+ private panel;
43
+ private readonly query;
44
+ private queryStart;
45
+ protected readonly active: _angular_core.WritableSignal<number>;
46
+ protected readonly isOpen: _angular_core.Signal<boolean>;
47
+ protected readonly filtered: _angular_core.Signal<MentionItem[]>;
48
+ constructor();
49
+ protected onInput(): void;
50
+ protected onKeydown(e: Event): void;
51
+ close(): void;
52
+ private insert;
53
+ private render;
54
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Mention, never>;
55
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Mention, "textarea[mfMention], input[mfMention]", ["mfMention"], { "mfMention": { "alias": "mfMention"; "required": true; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; }, { "mentionAdd": "mentionAdd"; }, never, never, true, never>;
56
+ }
57
+
58
+ export { Mention, MentionPanel, caretCoordinates };
59
+ export type { MentionItem };
@@ -1,7 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import * as i1 from '@angular/aria/menu';
3
+ import { Menu as Menu$1 } from '@angular/aria/menu';
3
4
  import * as class_variance_authority_types from 'class-variance-authority/types';
4
5
  import { VariantProps } from 'class-variance-authority';
6
+ import * as _angular_cdk_overlay from '@angular/cdk/overlay';
5
7
 
6
8
  /**
7
9
  * `<mf-menu #menu="ngMenu" (itemSelected)="onSelect($event)"><button mfMenuItem value="a">A</button></mf-menu>`
@@ -49,5 +51,42 @@ declare const menuItemVariants: (props?: ({
49
51
  } & class_variance_authority_types.ClassProp) | undefined) => string;
50
52
  type MenuItemActive = VariantProps<typeof menuItemVariants>['active'];
51
53
 
52
- export { Menu, MenuItem, MenuTrigger, menuItemVariants };
53
- export type { MenuItemActive };
54
+ interface MenubarAction<V = string> {
55
+ label: string;
56
+ value: V;
57
+ icon?: string;
58
+ /** Görsel kısayol ipucu (ör. `Ctrl+S`) — kısayolu KAYDETMEZ, yalnızca gösterir. */
59
+ shortcut?: string;
60
+ disabled?: boolean;
61
+ danger?: boolean;
62
+ /** Bu öğeden SONRA ayırıcı çizgi. */
63
+ separatorAfter?: boolean;
64
+ }
65
+ interface MenubarMenu<V = string> {
66
+ label: string;
67
+ items: MenubarAction<V>[];
68
+ }
69
+ /**
70
+ * `<mf-menubar [menus]="menus" (itemSelect)="run($event)" ariaLabel="Editör" />`
71
+ *
72
+ * Masaüstü uygulama tarzı kalıcı menü çubuğu (Dosya · Düzen · Görünüm) —
73
+ * WAI-ARIA APG "Menubar": `@angular/aria/menu`'nün `ngMenuBar`/`ngMenu`
74
+ * desenleri. Klavye: ←/→ üst menüler arası (açık menü eşlik eder), ↓/Enter
75
+ * açar, ↑/↓ öğeler, typeahead, Escape kapatır ve odağı çubuğa döndürür.
76
+ *
77
+ * Alt menüler CDK bağlı overlay'lerinde; çubuğa ilk odak/hover'da bir kez
78
+ * render edilir (`rendered`), görünürlüğü `ngMenu`'nün `data-visible`'ı yönetir.
79
+ */
80
+ declare class Menubar<V = string> {
81
+ readonly menus: i0.InputSignal<MenubarMenu<V>[]>;
82
+ readonly ariaLabel: i0.InputSignal<string>;
83
+ readonly itemSelect: i0.OutputEmitterRef<V>;
84
+ protected readonly rendered: i0.WritableSignal<boolean>;
85
+ protected readonly submenus: i0.Signal<readonly Menu$1<V>[]>;
86
+ protected readonly positions: _angular_cdk_overlay.ConnectedPosition[];
87
+ static ɵfac: i0.ɵɵFactoryDeclaration<Menubar<any>, never>;
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<Menubar<any>, "mf-menubar", ["mfMenubar"], { "menus": { "alias": "menus"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; }, never, never, true, never>;
89
+ }
90
+
91
+ export { Menu, MenuItem, MenuTrigger, Menubar, menuItemVariants };
92
+ export type { MenuItemActive, MenubarAction, MenubarMenu };
@@ -0,0 +1,58 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ interface NavMenuLink {
4
+ label: string;
5
+ href: string;
6
+ description?: string;
7
+ icon?: string;
8
+ }
9
+ interface NavMenuItem {
10
+ label: string;
11
+ /** Alt panel yoksa doğrudan bağlantı. */
12
+ href?: string;
13
+ links?: NavMenuLink[];
14
+ /** Panelin yan tarafındaki vurgulu kart (yeni özellik, duyuru). */
15
+ featured?: NavMenuLink;
16
+ }
17
+ /**
18
+ * `<mf-nav-menu [items]="nav" ariaLabel="Ana gezinme" (linkClick)="go($event)" />`
19
+ *
20
+ * Pazarlama/site başlığı gezinmesi — WAI-ARIA APG "Disclosure Navigation
21
+ * Menu" (bilerek `role="menu"` DEĞİL: site gezinmesi bağlantılardır, menü
22
+ * uygulama komutlarıdır). Üst düğmeler `aria-expanded` + `aria-controls`;
23
+ * paneller ızgara bağlantılar + isteğe bağlı vurgulu kart.
24
+ *
25
+ * - Fare: üzerine gelince kısa gecikmeyle açılır, ayrılınca kapanır.
26
+ * - Klavye: Enter/Boşluk aç/kapa, Escape kapatır ve odağı düğmeye döndürür,
27
+ * odak gezinmeden çıkınca panel kapanır.
28
+ * - `linkClick`: yönlendirici kullanan uygulamalar için (orta tık/yeni sekme
29
+ * için `href` korunur; `event.preventDefault()` tüketicidedir).
30
+ */
31
+ declare class NavMenu {
32
+ readonly items: _angular_core.InputSignal<NavMenuItem[]>;
33
+ readonly ariaLabel: _angular_core.InputSignal<string>;
34
+ /** ms — fare ile açılma gecikmesi. */
35
+ readonly hoverDelay: _angular_core.InputSignal<number>;
36
+ readonly linkClick: _angular_core.OutputEmitterRef<{
37
+ link: NavMenuLink;
38
+ event: MouseEvent;
39
+ }>;
40
+ protected readonly baseId: string;
41
+ protected readonly open: _angular_core.WritableSignal<number | null>;
42
+ private readonly host;
43
+ private timer?;
44
+ protected readonly anyOpen: _angular_core.Signal<boolean>;
45
+ constructor();
46
+ protected panelWidth(item: NavMenuItem): string;
47
+ protected toggle(i: number): void;
48
+ protected hoverOpen(i: number): void;
49
+ protected hoverClose(): void;
50
+ protected onFocusOut(event: FocusEvent): void;
51
+ protected closeAndFocus(): void;
52
+ protected onLink(event: MouseEvent, link: NavMenuLink): void;
53
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavMenu, never>;
54
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavMenu, "mf-nav-menu", ["mfNavMenu"], { "items": { "alias": "items"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hoverDelay": { "alias": "hoverDelay"; "required": false; "isSignal": true; }; }, { "linkClick": "linkClick"; }, never, never, true, never>;
55
+ }
56
+
57
+ export { NavMenu };
58
+ export type { NavMenuItem, NavMenuLink };
@@ -0,0 +1,41 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
+ import { MfTone } from '@mesgflow/ui-kit/core';
3
+ import * as _angular_core from '@angular/core';
4
+
5
+ interface NotificationItem {
6
+ id: string;
7
+ title: string;
8
+ body?: string;
9
+ /** Görünen zaman metni ("2 dk önce") — biçimleme tüketicide. */
10
+ time: string;
11
+ read?: boolean;
12
+ /** Avatar için ad; yoksa `icon` gösterilir. */
13
+ actor?: string;
14
+ icon?: string;
15
+ tone?: MfTone;
16
+ }
17
+ /**
18
+ * `<mf-notification-center [(notifications)]="inbox" (itemClick)="open($event)" (viewAll)="go()" />`
19
+ *
20
+ * Başlıktaki zil + açılır gelen kutusu: okunmamış sayacı (99+), "tümünü
21
+ * okundu işaretle", okunmamış/okunmuş sekmesi, boş durum. Bir öğeye tıklamak
22
+ * onu okundu yapar ve `itemClick` yayar. Tetikleyicinin erişilebilir adı
23
+ * okunmamış sayısını içerir; liste `role="list"`.
24
+ */
25
+ declare class NotificationCenter {
26
+ readonly notifications: _angular_core.ModelSignal<NotificationItem[]>;
27
+ readonly itemClick: _angular_core.OutputEmitterRef<NotificationItem>;
28
+ readonly viewAll: _angular_core.OutputEmitterRef<void>;
29
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfNotificationCenterLabels>;
30
+ protected readonly open: _angular_core.WritableSignal<boolean>;
31
+ protected readonly unread: _angular_core.Signal<number>;
32
+ protected readonly triggerLabel: _angular_core.Signal<string>;
33
+ protected toneBg(n: NotificationItem): string;
34
+ markAllRead(): void;
35
+ protected select(n: NotificationItem): void;
36
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationCenter, never>;
37
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NotificationCenter, "mf-notification-center", ["mfNotificationCenter"], { "notifications": { "alias": "notifications"; "required": false; "isSignal": true; }; }, { "notifications": "notificationsChange"; "itemClick": "itemClick"; "viewAll": "viewAll"; }, never, never, true, never>;
38
+ }
39
+
40
+ export { NotificationCenter };
41
+ export type { NotificationItem };
@@ -29,6 +29,8 @@ declare class NumberInput implements ControlValueAccessor {
29
29
  readonly unit: _angular_core.InputSignal<string>;
30
30
  readonly disabled: _angular_core.InputSignal<boolean>;
31
31
  readonly hasError: _angular_core.InputSignal<boolean>;
32
+ /** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */
33
+ readonly inputId: _angular_core.InputSignal<string | undefined>;
32
34
  readonly ariaLabel: _angular_core.InputSignal<string>;
33
35
  private onChange;
34
36
  private onTouched;
@@ -49,7 +51,7 @@ declare class NumberInput implements ControlValueAccessor {
49
51
  protected onUnitPointerMove(event: PointerEvent): void;
50
52
  protected onUnitPointerUp(event: PointerEvent): void;
51
53
  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>;
54
+ 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; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
53
55
  }
54
56
 
55
57
  export { NumberInput };
@@ -15,6 +15,8 @@ declare class PasswordInput extends ValueAccessorBase<string> implements Control
15
15
  readonly placeholder: _angular_core.InputSignal<string>;
16
16
  readonly disabled: _angular_core.InputSignal<boolean>;
17
17
  readonly hasError: _angular_core.InputSignal<boolean>;
18
+ /** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */
19
+ readonly inputId: _angular_core.InputSignal<string | undefined>;
18
20
  readonly ariaLabel: _angular_core.InputSignal<string>;
19
21
  readonly fullWidth: _angular_core.InputSignal<boolean>;
20
22
  readonly showLabel: _angular_core.InputSignal<string | undefined>;
@@ -27,7 +29,7 @@ declare class PasswordInput extends ValueAccessorBase<string> implements Control
27
29
  protected toggle(): void;
28
30
  protected onInput(raw: string): void;
29
31
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordInput, never>;
30
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordInput, "mf-password-input", ["mfPasswordInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "hideLabel": { "alias": "hideLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
32
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordInput, "mf-password-input", ["mfPasswordInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "hideLabel": { "alias": "hideLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
31
33
  }
32
34
 
33
35
  export { PasswordInput };