@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,31 @@
1
+ import * as i0 from '@angular/core';
2
+ import { BreadcrumbItem } from '@mesgflow/ui-kit/breadcrumb';
3
+
4
+ /**
5
+ * `<mf-page-header title="Ekip" [breadcrumbItems]="[...]">
6
+ * <div mfPageHeaderActions><button mfButton>Davet et</button></div>
7
+ * </mf-page-header>`
8
+ *
9
+ * `breadcrumbItems` boşsa (varsayılan) `mf-breadcrumb` HİÇ render EDİLMEZ —
10
+ * tek seviyeli sayfalarda (ör. "Ayarlar") gereksiz bir tek-öğeli iz
11
+ * gösterilmesin diye.
12
+ *
13
+ * Yerleşim KAPSAYICI sorgusuyla (`@container`) — viewport'a değil başlığın
14
+ * kendi genişliğine bakar: 32rem'den dar bir kapsayıcıda (kenar çubuğu açık
15
+ * tablet, bölünmüş panel) aksiyonlar başlığın ALTINA iner, başlığı ezmez.
16
+ */
17
+ declare class PageHeader {
18
+ readonly title: i0.InputSignal<string>;
19
+ readonly description: i0.InputSignal<string>;
20
+ readonly breadcrumbItems: i0.InputSignal<BreadcrumbItem[]>;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<PageHeader, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<PageHeader, "mf-page-header", ["mfPageHeader"], { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "breadcrumbItems": { "alias": "breadcrumbItems"; "required": false; "isSignal": true; }; }, {}, never, ["[mfPageHeaderActions]"], true, never>;
23
+ }
24
+
25
+ /** `<div mfPageHeaderActions><button mfButton>...</button></div>` — bkz. `page-header.ts`'in JSDoc'u. */
26
+ declare class PageHeaderActions {
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<PageHeaderActions, never>;
28
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PageHeaderActions, "[mfPageHeaderActions]", never, {}, {}, never, never, true, never>;
29
+ }
30
+
31
+ export { PageHeader, PageHeaderActions };
@@ -0,0 +1,50 @@
1
+ import * as _mesgflow_ui_kit_pagination from '@mesgflow/ui-kit/pagination';
2
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
3
+ import * as _angular_core from '@angular/core';
4
+
5
+ /**
6
+ * `<mf-pagination [pageCount]="20" [(page)]="page" />`
7
+ *
8
+ * Tablo dışı listeler (kart ızgarası, arama sonuçları) için bağımsız sayfalama. Table'ın
9
+ * kendi sayfalamasıyla AYNI görsel dil: aktif sayfa nötr zemin + alt kenarda 2px marka rayı
10
+ * ("buradasın" motifi), dolu blok değil.
11
+ *
12
+ * Öğe sayısı sabittir (bkz. `paginationRange`) — sayfa değiştikçe düğmeler kaymaz. `compact`:
13
+ * sayı listesi yerine "Sayfa 3 / 20" (dar alanlar, mobil). `<nav>` landmark'ı + aktif sayfada
14
+ * `aria-current="page"`; sayfa düğmeleri "Page 3" gibi tam adla duyurulur; üç nokta gizlidir.
15
+ */
16
+ declare class Pagination {
17
+ readonly page: _angular_core.ModelSignal<number>;
18
+ readonly pageCount: _angular_core.InputSignal<number>;
19
+ /** Aktif sayfanın iki yanında gösterilecek sayfa sayısı. */
20
+ readonly siblings: _angular_core.InputSignal<number>;
21
+ /** İlk/son sayfaya atlama düğmeleri. */
22
+ readonly showEdges: _angular_core.InputSignalWithTransform<boolean, unknown>;
23
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
24
+ readonly size: _angular_core.InputSignal<"sm" | "md">;
25
+ /** Verilmezse `MfLabels.pagination.navAriaLabel` — sayfada birden çok sayfalama varsa ayırt edin. */
26
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
27
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfPaginationLabels>;
28
+ protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
29
+ protected readonly safeCount: _angular_core.Signal<number>;
30
+ protected readonly current: _angular_core.Signal<number>;
31
+ protected readonly items: _angular_core.Signal<_mesgflow_ui_kit_pagination.PaginationItem[]>;
32
+ protected cell(active?: boolean): string;
33
+ protected goTo(page: number): void;
34
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Pagination, never>;
35
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Pagination, "mf-pagination", ["mfPagination"], { "page": { "alias": "page"; "required": false; "isSignal": true; }; "pageCount": { "alias": "pageCount"; "required": true; "isSignal": true; }; "siblings": { "alias": "siblings"; "required": false; "isSignal": true; }; "showEdges": { "alias": "showEdges"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; }, never, never, true, never>;
36
+ }
37
+
38
+ type PaginationItem = number | 'ellipsis-start' | 'ellipsis-end';
39
+ /**
40
+ * Görünen sayfa öğeleri — SABİT uzunlukta: `2 × boundaries + 2 × siblings + 3` (sayfa sayısı
41
+ * bundan azsa hepsi). Böylece sayfa değiştikçe öğe sayısı oynamaz, düğmeler zıplamaz (Table
42
+ * sayfalamasındaki değişken uzunluklu listenin aksine). Üç nokta tek bir sayfanın yerini
43
+ * tutuyorsa üç nokta yerine o sayfa gösterilir (… yalnızca ≥2 sayfayı gizler).
44
+ *
45
+ * `paginationRange(6, 20)` → `[1, 'ellipsis-start', 5, 6, 7, 'ellipsis-end', 20]`
46
+ */
47
+ declare function paginationRange(current: number, pageCount: number, siblings?: number, boundaries?: number): PaginationItem[];
48
+
49
+ export { Pagination, paginationRange };
50
+ export type { PaginationItem };
@@ -0,0 +1,33 @@
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-password-input [(value)]="password" />` — `InputGroup` üstüne kompoze
7
+ * edilmiş, sağda göster/gizle düğmesi taşıyan parola alanı (emsal:
8
+ * `NumberInput`/`DateRangePicker`'ın AYNI `mf-input-group` kabuğunu
9
+ * kullanma deseni). `type="password"`/`"text"` arasında geçiş SADECE
10
+ * görünürlük içindir — değer her zaman `value` model'inde düz metin olarak
11
+ * tutulur.
12
+ */
13
+ declare class PasswordInput extends ValueAccessorBase<string> implements ControlValueAccessor {
14
+ readonly value: _angular_core.ModelSignal<string>;
15
+ readonly placeholder: _angular_core.InputSignal<string>;
16
+ readonly disabled: _angular_core.InputSignal<boolean>;
17
+ readonly hasError: _angular_core.InputSignal<boolean>;
18
+ readonly ariaLabel: _angular_core.InputSignal<string>;
19
+ readonly fullWidth: _angular_core.InputSignal<boolean>;
20
+ readonly showLabel: _angular_core.InputSignal<string | undefined>;
21
+ readonly hideLabel: _angular_core.InputSignal<string | undefined>;
22
+ private readonly passwordLabels;
23
+ protected readonly effectiveShowLabel: _angular_core.Signal<string>;
24
+ protected readonly effectiveHideLabel: _angular_core.Signal<string>;
25
+ protected readonly visible: _angular_core.WritableSignal<boolean>;
26
+ writeValue(value: string): void;
27
+ protected toggle(): void;
28
+ protected onInput(raw: string): void;
29
+ 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>;
31
+ }
32
+
33
+ export { PasswordInput };
@@ -0,0 +1,62 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ type PopoverPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' | 'top' | 'bottom' | 'left' | 'right' | 'right-start';
7
+ /**
8
+ * `<button cdkOverlayOrigin #trigger="cdkOverlayOrigin" (click)="open.set(true)">...</button>`
9
+ * `<mf-popover [origin]="trigger" [(open)]="open">...içerik (ng-content)...</mf-popover>`
10
+ *
11
+ * `Select`/`TableColumnsMenu`/`TableFilterMenu`/`DatePicker`'ın HER BİRİNİN
12
+ * ayrı ayrı yazdığı `cdkConnectedOverlay` + pozisyon dizisi + backdrop/ESC
13
+ * kapama iskeletini TEK yerde toplayan genel amaçlı panel primitifi (bkz.
14
+ * README "Yeni bir primitif gerektiğinde"). YENİ kullanım noktaları bunu
15
+ * kullanmalı — mevcut dört bileşenin buna taşınması BİLEREK bu değişiklikle
16
+ * birlikte yapılmadı: her biri kendi klavye/vurgu (highlight) mantığını
17
+ * Popover'ın panel içeriğiyle nasıl kompoze edeceğine karar vermeli, ayrı ve
18
+ * her ekranın tarayıcıda tek tek doğrulanmasını gerektiren bir iş.
19
+ *
20
+ * `origin`, CDK'nın `cdkOverlayOrigin` directive'inin `exportAs` referansı —
21
+ * ayrı bir wrapper directive'e gerek yok, CDK zaten sağlıyor.
22
+ */
23
+ declare class Popover {
24
+ readonly origin: _angular_core.InputSignal<CdkOverlayOrigin>;
25
+ readonly open: _angular_core.ModelSignal<boolean>;
26
+ readonly placement: _angular_core.InputSignal<PopoverPlacement>;
27
+ readonly padding: _angular_core.InputSignal<"none" | "sm" | "md" | "lg" | null | undefined>;
28
+ /** Backdrop şeffaf ama TIKLANABİLİR — dışarı tıklayınca kapanması için var, görsel karartma YOK. */
29
+ readonly hasBackdrop: _angular_core.InputSignal<boolean>;
30
+ /** `true` ise panel tetikleyiciden DAR olamaz (min-width) — genişleyebilir, küçülemez. */
31
+ readonly matchTriggerWidth: _angular_core.InputSignal<boolean>;
32
+ readonly panelClass: _angular_core.InputSignal<string>;
33
+ readonly closed: _angular_core.OutputEmitterRef<void>;
34
+ /**
35
+ * `open()` MANTIKSAL durumu taşır (tüketici `[(open)]` ile doğrudan
36
+ * yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`
37
+ * çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`
38
+ * `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip
39
+ * `animate-overlay-out` oynatılır, `EXIT_MS` sonra `attached` da `false`
40
+ * olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle
41
+ * AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i
42
+ * Dialog'un aksine bir "kapanışı ertele" kancası SUNMUYOR, bu yüzden
43
+ * `effect()` tabanlı bu yaklaşım gerekiyor).
44
+ */
45
+ protected readonly attached: _angular_core.WritableSignal<boolean>;
46
+ protected readonly closing: _angular_core.WritableSignal<boolean>;
47
+ private exitTimer?;
48
+ protected readonly positions: _angular_core.Signal<ConnectedPosition[]>;
49
+ protected readonly classes: _angular_core.Signal<string>;
50
+ constructor();
51
+ protected close(): void;
52
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Popover, never>;
53
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Popover, "mf-popover", ["mfPopover"], { "origin": { "alias": "origin"; "required": true; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; "isSignal": true; }; "matchTriggerWidth": { "alias": "matchTriggerWidth"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*"], true, never>;
54
+ }
55
+
56
+ declare const popoverPanelVariants: (props?: ({
57
+ padding?: "none" | "sm" | "md" | "lg" | null | undefined;
58
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
59
+ type PopoverPadding = VariantProps<typeof popoverPanelVariants>['padding'];
60
+
61
+ export { Popover, popoverPanelVariants };
62
+ export type { PopoverPadding, PopoverPlacement };
@@ -0,0 +1,32 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ /**
6
+ * `<mf-progress [value]="42" />` (belirlenmiş) veya `<mf-progress
7
+ * indeterminate />` (belirsiz — yükleme/tarama gibi süresi bilinmeyen
8
+ * işlemler). `animate-progress-slide` keyframe'i `Table`'ın `showStaleOverlay`
9
+ * şeridiyle AYNI (tokens.css'te tek tanım, bkz. table.html) — iki yerde ayrı
10
+ * ayrı animasyon TANIMLANMADI.
11
+ */
12
+ declare class Progress {
13
+ readonly value: _angular_core.InputSignal<number>;
14
+ readonly indeterminate: _angular_core.InputSignal<boolean>;
15
+ readonly size: _angular_core.InputSignal<"sm" | "md" | null | undefined>;
16
+ /** `role="progressbar"` için ARIA gerektirdiği erişilebilir ad — bağlamına göre (ör. "Loading", "File upload") override edilmeli; verilmezse `MF_PROGRESS_LABELS`. */
17
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
18
+ private readonly progressLabels;
19
+ protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
20
+ protected readonly clampedValue: _angular_core.Signal<number>;
21
+ protected readonly trackClasses: _angular_core.Signal<string>;
22
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Progress, never>;
23
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Progress, "mf-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
24
+ }
25
+
26
+ declare const progressTrackVariants: (props?: ({
27
+ size?: "sm" | "md" | null | undefined;
28
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
29
+ type ProgressSize = VariantProps<typeof progressTrackVariants>['size'];
30
+
31
+ export { Progress, progressTrackVariants };
32
+ export type { ProgressSize };
@@ -0,0 +1,59 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { MfSize } from '@mesgflow/ui-kit/core';
3
+ import { ControlValueAccessor } from '@angular/forms';
4
+
5
+ type RadioGroupOrientation = 'horizontal' | 'vertical';
6
+ /**
7
+ * `<mf-radio-group [(value)]="plan"><label><input type="radio" mfRadio
8
+ * [value]="'pro'" /> Pro</label>...</mf-radio-group>`
9
+ *
10
+ * Projekte edilen `input[mfRadio]` öğeleri DI ile bu bileşene bağlanır
11
+ * (`Radio`'nun `inject(RadioGroup)`'u — bkz. `radio.ts`), `name`/`checked`/
12
+ * `disabled` GRUPTAN gelir; her `mfRadio` KENDİ `mf-radio-group` atası
13
+ * DIŞINDA kullanılamaz.
14
+ *
15
+ * Ok tuşu navigasyonu/roving tabindex için ÖZEL bir odak yöneticisi
16
+ * (`@angular/aria`'da radio pattern'i olmadığı için akla gelen CDK
17
+ * `FocusKeyManager`) BİLEREK YOK — hepsi AYNI native `name` attribute'unu
18
+ * paylaşan gerçek `<input type="radio">` öğeleri olduğu için tarayıcı bunu
19
+ * ZATEN ücretsiz sağlıyor (native radio grubu semantiği). Üstüne bir odak
20
+ * yöneticisi eklemek gerçek davranışı TEKRARLAYIP çakıştırırdı.
21
+ */
22
+ declare class RadioGroup<T = unknown> implements ControlValueAccessor {
23
+ readonly value: _angular_core.ModelSignal<T | null>;
24
+ readonly name: _angular_core.InputSignal<string>;
25
+ readonly orientation: _angular_core.InputSignal<RadioGroupOrientation>;
26
+ readonly disabled: _angular_core.InputSignal<boolean>;
27
+ readonly ariaLabel: _angular_core.InputSignal<string>;
28
+ private onChange;
29
+ private onTouched;
30
+ protected readonly hostClasses: _angular_core.Signal<"flex items-center gap-4" | "flex flex-col gap-2">;
31
+ writeValue(value: T | null): void;
32
+ registerOnChange(fn: (value: T | null) => void): void;
33
+ registerOnTouched(fn: () => void): void;
34
+ /** `Radio`'nun `(change)` işleyicisinden çağrılır — bkz. `radio.ts`. */
35
+ onRadioChange(value: T): void;
36
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioGroup<any>, never>;
37
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioGroup<any>, "mf-radio-group", ["mfRadioGroup"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["*"], true, never>;
38
+ }
39
+
40
+ /**
41
+ * `<input type="radio" mfRadio [value]="'pro'" />` — `Checkbox` (bkz.
42
+ * checkbox.ts) ile AYNI "native accent-color" deseni, `rounded-full` dışında
43
+ * fark yok. Bir `mf-radio-group` ATASI ZORUNLU — `name`/`checked`/`disabled`
44
+ * DI ile ondan okunur (bkz. `radio-group.ts`'in JSDoc'u); grup dışında
45
+ * kullanılırsa `inject(RadioGroup)` hata fırlatır (fail-fast).
46
+ */
47
+ declare class Radio<T = unknown> {
48
+ protected readonly group: RadioGroup<T>;
49
+ readonly size: _angular_core.InputSignal<MfSize>;
50
+ readonly value: _angular_core.InputSignal<T | undefined>;
51
+ readonly disabled: _angular_core.InputSignal<boolean>;
52
+ protected readonly classes: _angular_core.Signal<string>;
53
+ protected onChange(): void;
54
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Radio<any>, never>;
55
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Radio<any>, "input[type=radio][mfRadio]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
56
+ }
57
+
58
+ export { Radio, RadioGroup };
59
+ export type { RadioGroupOrientation };
@@ -0,0 +1,56 @@
1
+ import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
2
+ import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
3
+ import * as _angular_core from '@angular/core';
4
+ import { ControlValueAccessor } from '@angular/forms';
5
+
6
+ /**
7
+ * `<mf-rating [(value)]="score" />` · salt okunur ortalama: `<mf-rating [value]="3.7" readonly />`
8
+ *
9
+ * Etkileşimli mod yerel `<input type="radio">`'lar üzerine kurulu (görsel olarak gizli): ok tuşu
10
+ * gezinmesi, tek sekme durağı, form davranışı tarayıcıdan gelir — `role="radiogroup"` + her
11
+ * yıldız "3 out of 5" gibi adlı bir radyo. Üzerine gelince önizleme; seçili yıldıza tekrar
12
+ * tıklamak temizler (`allowClear`). Salt okunur mod tek bir `role="img"` ("3.7 out of 5");
13
+ * ondalıklar yıldızın kısmen dolmasıyla gösterilir (ortalama puanlar için).
14
+ */
15
+ declare class Rating extends ValueAccessorBase<number> implements ControlValueAccessor {
16
+ readonly value: _angular_core.ModelSignal<number>;
17
+ readonly max: _angular_core.InputSignal<number>;
18
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
19
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
20
+ /** Seçili yıldıza tekrar tıklamak değeri 0'a çeker. */
21
+ readonly allowClear: _angular_core.InputSignalWithTransform<boolean, unknown>;
22
+ readonly size: _angular_core.InputSignal<number>;
23
+ /** Verilmezse `MfLabels.rating.ariaLabel`. */
24
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
25
+ protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfRatingLabels>;
26
+ protected readonly name: string;
27
+ protected readonly hover: _angular_core.WritableSignal<number | null>;
28
+ private readonly formDisabled;
29
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
30
+ protected readonly stars: _angular_core.Signal<number[]>;
31
+ /** Görüntülenen değer — önizleme varsa o, yoksa gerçek değer. */
32
+ protected readonly shown: _angular_core.Signal<number>;
33
+ protected readonly hostLabel: _angular_core.Signal<string>;
34
+ /** Yıldızın doluluk yüzdesi (0–100) — salt okunur ondalıklar için kısmi. */
35
+ protected fill(star: number): number;
36
+ protected starLabel(star: number): string;
37
+ /**
38
+ * TEK giriş noktası `click`: tarayıcı ok tuşuyla radyo seçiminde de `click` üretir. `change`
39
+ * ayrıca dinlenmez — seçili radyoya tıklamak `change` üretmediğinden temizleme yalnızca
40
+ * click'te yakalanabiliyor, ikisini birden dinlemek ise yeni seçimde çift tetiklenirdi.
41
+ */
42
+ protected choose(star: number): void;
43
+ /**
44
+ * Klavyeyle temizleme: Delete/Backspace. Seçili radyoda Space tarayıcıda `click` üretmez
45
+ * (radyo zaten seçili — gerçek tarayıcıda doğrulandı), bu yüzden fareyle yeniden tıklamanın
46
+ * klavye karşılığı ayrı bir tuş.
47
+ */
48
+ protected clear(event: Event): void;
49
+ protected preview(star: number | null): void;
50
+ writeValue(value: number | null): void;
51
+ setDisabledState(disabled: boolean): void;
52
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Rating, never>;
53
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Rating, "mf-rating", ["mfRating"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowClear": { "alias": "allowClear"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
54
+ }
55
+
56
+ export { Rating };
@@ -0,0 +1,27 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ type ScrollAreaOrientation = 'vertical' | 'horizontal';
4
+ /**
5
+ * `<mf-scroll-area class="max-h-64"><div class="p-4">...uzun içerik...</div></mf-scroll-area>`
6
+ * — kenar "solma" maskesi (`mask-image`, `TabScroller`'ın AYNI tekniği —
7
+ * bkz. `tabs/tab-scroller.ts` — ama ok-düğmesi/`scrollByDir` YOK, burada
8
+ * gerek yok) kaydırılabilir olduğunu ima eder. Native scrollbar GİZLENMİYOR
9
+ * (`TabScroller`'ın aksine) — `tokens/color.css`'teki global
10
+ * `scrollbar-width:thin` sayesinde ZATEN ince/tema-uyumlu, kullanıcının
11
+ * scrollbar'ı GÖRMESİ genel amaçlı bir kaydırma alanında faydalı.
12
+ */
13
+ declare class ScrollArea {
14
+ readonly orientation: _angular_core.InputSignal<ScrollAreaOrientation>;
15
+ private readonly elementRef;
16
+ private readonly vertical;
17
+ protected readonly canScrollStart: _angular_core.WritableSignal<boolean>;
18
+ protected readonly canScrollEnd: _angular_core.WritableSignal<boolean>;
19
+ protected readonly hostClasses: _angular_core.Signal<string>;
20
+ constructor();
21
+ protected updateEdges(): void;
22
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScrollArea, never>;
23
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScrollArea, "mf-scroll-area", ["mfScrollArea"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
24
+ }
25
+
26
+ export { ScrollArea };
27
+ export type { ScrollAreaOrientation };
@@ -0,0 +1,72 @@
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-search-input [(value)]="term" [loading]="fetching()" placeholder="Ara..." />`
7
+ *
8
+ * Kapalıyken sadece bir ikon-buton genişliğinde (ikon tıklanabilir/odaklanabilir
9
+ * — hem mouse hem klavye ile genişliyor), odak alınca/tıklanınca genişliyor.
10
+ * Yazarken debounce süresi boyunca VE (varsa) dışarıdan verilen `loading`
11
+ * true olduğu sürece dönen bir spinner gösteriyor — "arıyor" hissi debounce
12
+ * bitiminde kaybolmuyor, gerçek sorgu sonucu gelene kadar sürüyor.
13
+ *
14
+ * Component (directive değil) — Field/Switch gibi gerçek iç yapı (ikon+input+
15
+ * temizle butonu+genişleme animasyonu) gerektiriyor (bkz. projects/ui-kit/README.md
16
+ * "Directive mi, component mi?").
17
+ */
18
+ declare class SearchInput extends ValueAccessorBase<string> implements ControlValueAccessor {
19
+ readonly value: _angular_core.ModelSignal<string>;
20
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
21
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
22
+ readonly tooltipLabel: _angular_core.InputSignal<string | undefined>;
23
+ /** Tüketicinin gerçek veri çekme durumu — debounce bittikten sonra da spinner'ı sürdürür. */
24
+ readonly loading: _angular_core.InputSignal<boolean>;
25
+ readonly debounceMs: _angular_core.InputSignal<number>;
26
+ /**
27
+ * `false` → her zaman tam genişlikte açık, ikon tıklanabilir bir "kapı"
28
+ * değil (bkz. `table/table.ts` — bir VERİ TABLOSUNDA arama gizlenmez,
29
+ * bu bir navbar deseni; Table `[collapsible]="false"` geçiyor).
30
+ * Varsayılan `true` — bu bileşenin bugünkü tek gerçek davranışı, henüz
31
+ * başka bir tüketici yok ama gelecekte navbar/toolbar gibi dar bağlamlarda
32
+ * ihtiyaç olabilir diye korunuyor.
33
+ */
34
+ readonly collapsible: _angular_core.InputSignal<boolean>;
35
+ /**
36
+ * `true` → kutu sabit `w-64` (256px) yerine kapsayıcısının TAM genişliğinde
37
+ * açılır — kutunun panelin geri kalanıyla (ör. yan yana duran bir sekme
38
+ * listesiyle) aynı genişlikte hizalanması gereken bağlamlar için.
39
+ * `collapsible` ile birlikte anlamlı (`[collapsible]="false"` olmadan
40
+ * daralmış hâl `w-10` sabit kalır, `fullWidth` sadece GENİŞLEMİŞ genişliği
41
+ * değiştirir). Varsayılan `false` — navbar/toolbar'daki bugünkü sabit
42
+ * genişlik davranışı değişmez.
43
+ */
44
+ readonly fullWidth: _angular_core.InputSignal<boolean>;
45
+ private readonly searchInputLabels;
46
+ protected readonly effectivePlaceholder: _angular_core.Signal<string>;
47
+ protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
48
+ protected readonly effectiveTooltipLabel: _angular_core.Signal<string>;
49
+ protected readonly effectiveClearAriaLabel: _angular_core.Signal<string>;
50
+ private readonly expandedState;
51
+ /** `collapsible()` false ise HER ZAMAN true — genişleme mekaniği devre dışı kalır ama `expandedState` yine de "odaklanınca tooltip'i kapat" gibi yan mantık için iç durumu takip etmeye devam eder. */
52
+ protected readonly expanded: _angular_core.Signal<boolean>;
53
+ /** `w-64`/`w-10` yerine `w-full` — bkz. `fullWidth` doc yorumu. */
54
+ protected readonly inputWidthClass: _angular_core.Signal<"w-full cursor-text pe-8 ps-9" | "w-64 cursor-text pe-8 ps-9" | "w-10 cursor-pointer caret-transparent pe-2 ps-9">;
55
+ protected readonly draft: _angular_core.WritableSignal<string>;
56
+ protected readonly pending: _angular_core.WritableSignal<boolean>;
57
+ protected readonly showSpinner: _angular_core.Signal<boolean>;
58
+ private readonly inputEl;
59
+ private readonly tooltipRef;
60
+ private debounceHandle?;
61
+ constructor();
62
+ writeValue(value: string): void;
63
+ protected expand(): void;
64
+ protected collapseIfEmpty(): void;
65
+ protected onInput(raw: string): void;
66
+ protected clear(): void;
67
+ protected onEscape(): void;
68
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchInput, never>;
69
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInput, "mf-search-input", ["mfSearchInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "tooltipLabel": { "alias": "tooltipLabel"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
70
+ }
71
+
72
+ export { SearchInput };
@@ -0,0 +1,54 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+ import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
4
+ import * as class_variance_authority_types from 'class-variance-authority/types';
5
+ import { VariantProps } from 'class-variance-authority';
6
+
7
+ interface SegmentedOption<T> {
8
+ label: string;
9
+ value: T;
10
+ }
11
+ /**
12
+ * `<mf-segmented-control [options]="opts" [(value)]="mode" />` — hizalama,
13
+ * cihaz önizlemesi gibi KISA/tek-seçimli seçenek kümeleri için. `Tabs`'tan
14
+ * farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving
15
+ * tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın
16
+ * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —
17
+ * dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,
18
+ * içteki `ngToolbarWidgetGroup [multi]="false"`).
19
+ */
20
+ declare class SegmentedControl<T> extends ValueAccessorBase<T | null> implements ControlValueAccessor {
21
+ readonly options: _angular_core.InputSignal<SegmentedOption<T>[]>;
22
+ readonly value: _angular_core.ModelSignal<T | null>;
23
+ readonly size: _angular_core.InputSignal<"sm" | "md" | null | undefined>;
24
+ readonly ariaLabel: _angular_core.InputSignal<string>;
25
+ readonly disabled: _angular_core.InputSignal<boolean>;
26
+ protected readonly toolbarValue: _angular_core.Signal<T[]>;
27
+ protected readonly trackClasses: _angular_core.Signal<string>;
28
+ writeValue(value: T | null): void;
29
+ /**
30
+ * `@angular/aria/toolbar`'ın kendi widget-kayıt döngüsü, gerçek bir tıklama
31
+ * OLMADAN da BOŞ bir dizi ile (`values: []`) tetiklenebiliyor (gerçek bulgu
32
+ * — bir seçeneğe tıklarken bile araya giren, seçimle ilgisiz iç kayıt
33
+ * event'leri). `this.value` her event'te güncellenir (görsel durum ETKİLENMEZ,
34
+ * zaten `values[0]` genelde mevcut değerle AYNI), ama CVA `onChange`/`onTouched`
35
+ * SADECE dolu bir dizi (gerçek bir seçim) geldiğinde tetiklenir — aksi halde
36
+ * Reactive Forms'a sahte "null'a değişti" bildirimleri sızardı.
37
+ */
38
+ protected onToolbarValueChange(values: readonly T[]): void;
39
+ protected itemClasses(option: SegmentedOption<T>): string;
40
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedControl<any>, never>;
41
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentedControl<any>, "mf-segmented-control", ["mfSegmentedControl"], { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
42
+ }
43
+
44
+ declare const segmentedTrackVariants: (props?: ({
45
+ size?: "sm" | "md" | null | undefined;
46
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
47
+ declare const segmentedItemVariants: (props?: ({
48
+ selected?: boolean | null | undefined;
49
+ disabled?: boolean | null | undefined;
50
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
51
+ type SegmentedControlSize = VariantProps<typeof segmentedTrackVariants>['size'];
52
+
53
+ export { SegmentedControl, segmentedItemVariants, segmentedTrackVariants };
54
+ export type { SegmentedControlSize, SegmentedOption };
@@ -0,0 +1,89 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ interface SelectOption<T> {
7
+ label: string;
8
+ value: T;
9
+ }
10
+ /**
11
+ * `<mf-select [options]="opts" [(value)]="chosen" placeholder="Seç" />`
12
+ * (tek-seçimli, varsayılan) veya `<mf-select multiple [options]="opts"
13
+ * [(values)]="chosen" />` (çoklu-seçim — tetikleyici seçilenleri Chip
14
+ * özeti olarak gösterir, bir seçeneğe tıklamak paneli KAPATMAZ, tekrar
15
+ * tıklamak seçimi KALDIRIR).
16
+ *
17
+ * `multiple` AÇIKKEN `value`/`(valueChange)` KULLANILMAZ — ayrı bir
18
+ * `values: model<T[]>` var (bkz. aşağıda). İkisini AYIRMANIN sebebi:
19
+ * `value`'nun TİPİNİ (`T | null`) tek-seçimli kullanım için DEĞİŞTİRMEDEN
20
+ * bırakmak — mevcut tüm `[(value)]="tekTip"` tüketicileri (Table'ın alan/
21
+ * operatör/sayfa-boyutu seçicileri, TableFilterBar'ın VE/VEYA seçicisi)
22
+ * BİREBİR aynı tipte kalıyor, çoklu-seçim EKLENTİ, DEĞİŞİKLİK değil.
23
+ *
24
+ * Bu kitin ilk overlay tabanlı primitifi — native `<select>` değil,
25
+ * çünkü açılır panelin kendisi (arka plan/kenarlık/hover rengi) native
26
+ * `<select>` popup'ında tarayıcı-bağımlı ve stillenemez kalıyordu; CDK Overlay
27
+ * + kendi listbox'ımız panel dahil her pikseli bizim token sistemimizle
28
+ * boyayabiliyor. `@angular/cdk` zaten bağımlı, ek paket gerekmedi — pozisyonlama
29
+ * CSS'i `styles.css`'teki resmi `@angular/cdk/overlay-prebuilt.css`
30
+ * import'undan geliyor (bkz. o import'un yanındaki not).
31
+ *
32
+ * Arama/virtual-scroll YOK — Table'ın alan/operatör/sayfa-boyutu
33
+ * seçicileri gibi kısa listeler için kasıtlı olarak minimal.
34
+ */
35
+ declare class Select<T> implements ControlValueAccessor {
36
+ readonly options: _angular_core.InputSignal<SelectOption<T>[]>;
37
+ readonly value: _angular_core.ModelSignal<T | null>;
38
+ readonly multiple: _angular_core.InputSignal<boolean>;
39
+ /** SADECE `multiple=true`'da kullanılır — bkz. sınıf üstündeki JSDoc. */
40
+ readonly values: _angular_core.ModelSignal<T[]>;
41
+ readonly maxVisibleChips: _angular_core.InputSignal<number>;
42
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
43
+ readonly disabled: _angular_core.InputSignal<boolean>;
44
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | null | undefined>;
45
+ readonly hasError: _angular_core.InputSignal<boolean>;
46
+ readonly ariaLabel: _angular_core.InputSignal<string>;
47
+ private onChange;
48
+ private onTouched;
49
+ private readonly selectLabels;
50
+ protected readonly effectivePlaceholder: _angular_core.Signal<string>;
51
+ protected readonly open: _angular_core.WritableSignal<boolean>;
52
+ protected readonly highlighted: _angular_core.WritableSignal<number>;
53
+ protected readonly triggerClasses: _angular_core.Signal<string>;
54
+ protected readonly selectedLabel: _angular_core.Signal<string>;
55
+ protected readonly selectedOptions: _angular_core.Signal<SelectOption<T>[]>;
56
+ protected readonly visibleChips: _angular_core.Signal<SelectOption<T>[]>;
57
+ protected readonly overflowChipCount: _angular_core.Signal<number>;
58
+ protected toggle(): void;
59
+ protected close(): void;
60
+ /** Tek-seçimli modda seçeneği commit eder VE paneli kapatır; çoklu-seçim modunda `toggleValue`'ya devreder (panel AÇIK kalır — bkz. `toggleValue`). */
61
+ protected select(option: SelectOption<T>): void;
62
+ /** Çoklu-seçimde bir değeri ekler/çıkarır — panel KAPANMAZ, kullanıcı birden fazla seçim yapabilir (Escape/dışarı tıklama ile kapatır). */
63
+ private toggleValue;
64
+ writeValue(value: T | T[] | null): void;
65
+ registerOnChange(fn: (value: T | T[] | null) => void): void;
66
+ registerOnTouched(fn: () => void): void;
67
+ protected isSelected(option: SelectOption<T>): boolean;
68
+ protected optionClasses(option: SelectOption<T>, index: number): string;
69
+ protected onTriggerKeydown(event: KeyboardEvent): void;
70
+ protected onPanelKeydown(event: KeyboardEvent): void;
71
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Select<any>, never>;
72
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select<any>, "mf-select", ["mfSelect"], { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "maxVisibleChips": { "alias": "maxVisibleChips"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "values": "valuesChange"; }, never, never, true, never>;
73
+ }
74
+
75
+ /**
76
+ * Bkz. `core/recipes.ts` `controlSurface` — aynı kabuk, tetikleyici bir
77
+ * <button>'a uygulanıyor. `focus:border-accent` — Input/Combobox'ın ZATEN
78
+ * sahip olduğu odak kenarlığı burada eksikti (gerçek bulgu): odaklı bir
79
+ * select yalnızca outline ile belli oluyordu, kenarlık aksanlanmıyordu.
80
+ */
81
+ declare const selectTriggerVariants: (props?: ({
82
+ size?: "sm" | "md" | "lg" | null | undefined;
83
+ hasError?: boolean | null | undefined;
84
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
85
+ type SelectSize = VariantProps<typeof selectTriggerVariants>['size'];
86
+ type SelectHasError = VariantProps<typeof selectTriggerVariants>['hasError'];
87
+
88
+ export { Select, selectTriggerVariants };
89
+ export type { SelectHasError, SelectOption, SelectSize };