@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,92 @@
1
+ import { Overlay } from '@angular/cdk/overlay';
2
+ import { TemplatePortal } from '@angular/cdk/portal';
3
+ import * as i0 from '@angular/core';
4
+ import { input, inject, ViewContainerRef, Directive } from '@angular/core';
5
+
6
+ /**
7
+ * `<div [mfContextMenu]="menuTpl" #ctx="mfContextMenu">Sağ tıkla</div>
8
+ * <ng-template #menuTpl>
9
+ * <mf-menu (itemSelected)="onSelect($event); ctx.close()">
10
+ * <button mfMenuItem value="edit">Düzenle</button>
11
+ * <button mfMenuItem value="delete">Sil</button>
12
+ * </mf-menu>
13
+ * </ng-template>`
14
+ *
15
+ * Sağ tıkla İMLEÇ KONUMUNDA bir menü açar — native tarayıcı bağlam menüsü
16
+ * `event.preventDefault()` ile bastırılır. Kitteki ilk "gerçek DOM elemanına
17
+ * değil bir NOKTAYA sabitlenen" overlay (bkz. `Tooltip`'in aynı
18
+ * `flexibleConnectedTo` + elle `Overlay.create()` deseni) — `mf-popover`
19
+ * KULLANILMADI çünkü `Popover.origin` bir `CdkOverlayOrigin` (gerçek bir
20
+ * DOM elemanı) şart koşuyor, imleç noktası değil; CDK'nın
21
+ * `flexibleConnectedTo` stratejisi bir `{x, y}` noktasını da DOĞRUDAN kabul
22
+ * ediyor, ayrı bir "görünmez sanal anchor elemanı" hilesi GEREKMİYOR.
23
+ *
24
+ * Menü seçimi/kapanışı çağıranın kendi sorumluluğunda — `mfMenuTrigger`
25
+ * deseniyle AYNI ilke (bkz. `menu-trigger.ts`): `itemSelected`'te
26
+ * `ctx.close()`'u KENDİ elle çağırırsın.
27
+ */
28
+ class ContextMenu {
29
+ mfContextMenu = input(null, /* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "mfContextMenu" }] : /* istanbul ignore next */ []));
31
+ disabled = input(false, /* @ts-ignore */
32
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
33
+ overlay = inject(Overlay);
34
+ viewContainerRef = inject(ViewContainerRef);
35
+ overlayRef;
36
+ onContextMenu(event) {
37
+ const template = this.mfContextMenu();
38
+ if (this.disabled() || !template)
39
+ return;
40
+ event.preventDefault();
41
+ this.close();
42
+ const positionStrategy = this.overlay
43
+ .position()
44
+ .flexibleConnectedTo({ x: event.clientX, y: event.clientY })
45
+ .withPositions([
46
+ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },
47
+ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },
48
+ { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' },
49
+ { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'bottom' },
50
+ ])
51
+ .withPush(true);
52
+ this.overlayRef = this.overlay.create({
53
+ positionStrategy,
54
+ scrollStrategy: this.overlay.scrollStrategies.close(),
55
+ hasBackdrop: true,
56
+ backdropClass: 'cdk-overlay-transparent-backdrop',
57
+ });
58
+ this.overlayRef.backdropClick().subscribe(() => this.close());
59
+ this.overlayRef.keydownEvents().subscribe((e) => {
60
+ if (e.key === 'Escape')
61
+ this.close();
62
+ });
63
+ this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));
64
+ }
65
+ /** Public — menü içeriğinden (bkz. sınıf üstündeki JSDoc örneği) elle kapatmak için. */
66
+ close() {
67
+ this.overlayRef?.dispose();
68
+ this.overlayRef = undefined;
69
+ }
70
+ ngOnDestroy() {
71
+ this.close();
72
+ }
73
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ContextMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive });
74
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: ContextMenu, isStandalone: true, selector: "[mfContextMenu]", inputs: { mfContextMenu: { classPropertyName: "mfContextMenu", publicName: "mfContextMenu", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "contextmenu": "onContextMenu($event)" } }, exportAs: ["mfContextMenu"], ngImport: i0 });
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ContextMenu, decorators: [{
77
+ type: Directive,
78
+ args: [{
79
+ selector: '[mfContextMenu]',
80
+ exportAs: 'mfContextMenu',
81
+ host: {
82
+ '(contextmenu)': 'onContextMenu($event)',
83
+ },
84
+ }]
85
+ }], propDecorators: { mfContextMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "mfContextMenu", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
86
+
87
+ /**
88
+ * Generated bundle index. Do not edit.
89
+ */
90
+
91
+ export { ContextMenu };
92
+ //# sourceMappingURL=mesgflow-ui-kit-context-menu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesgflow-ui-kit-context-menu.mjs","sources":["../../../projects/ui-kit/context-menu/context-menu.ts","../../../projects/ui-kit/context-menu/mesgflow-ui-kit-context-menu.ts"],"sourcesContent":["import { Overlay, type OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { Directive, OnDestroy, TemplateRef, ViewContainerRef, inject, input } from '@angular/core';\r\n\r\n/**\r\n * `<div [mfContextMenu]=\"menuTpl\" #ctx=\"mfContextMenu\">Sağ tıkla</div>\r\n * <ng-template #menuTpl>\r\n * <mf-menu (itemSelected)=\"onSelect($event); ctx.close()\">\r\n * <button mfMenuItem value=\"edit\">Düzenle</button>\r\n * <button mfMenuItem value=\"delete\">Sil</button>\r\n * </mf-menu>\r\n * </ng-template>`\r\n *\r\n * Sağ tıkla İMLEÇ KONUMUNDA bir menü açar — native tarayıcı bağlam menüsü\r\n * `event.preventDefault()` ile bastırılır. Kitteki ilk \"gerçek DOM elemanına\r\n * değil bir NOKTAYA sabitlenen\" overlay (bkz. `Tooltip`'in aynı\r\n * `flexibleConnectedTo` + elle `Overlay.create()` deseni) — `mf-popover`\r\n * KULLANILMADI çünkü `Popover.origin` bir `CdkOverlayOrigin` (gerçek bir\r\n * DOM elemanı) şart koşuyor, imleç noktası değil; CDK'nın\r\n * `flexibleConnectedTo` stratejisi bir `{x, y}` noktasını da DOĞRUDAN kabul\r\n * ediyor, ayrı bir \"görünmez sanal anchor elemanı\" hilesi GEREKMİYOR.\r\n *\r\n * Menü seçimi/kapanışı çağıranın kendi sorumluluğunda — `mfMenuTrigger`\r\n * deseniyle AYNI ilke (bkz. `menu-trigger.ts`): `itemSelected`'te\r\n * `ctx.close()`'u KENDİ elle çağırırsın.\r\n */\r\n@Directive({\r\n selector: '[mfContextMenu]',\r\n exportAs: 'mfContextMenu',\r\n host: {\r\n '(contextmenu)': 'onContextMenu($event)',\r\n },\r\n})\r\nexport class ContextMenu implements OnDestroy {\r\n readonly mfContextMenu = input<TemplateRef<unknown> | null>(null);\r\n readonly disabled = input(false);\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private overlayRef?: OverlayRef;\r\n\r\n protected onContextMenu(event: MouseEvent): void {\r\n const template = this.mfContextMenu();\r\n if (this.disabled() || !template) return;\r\n event.preventDefault();\r\n this.close();\r\n\r\n const positionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo({ x: event.clientX, y: event.clientY })\r\n .withPositions([\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\r\n ])\r\n .withPush(true);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n scrollStrategy: this.overlay.scrollStrategies.close(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n });\r\n this.overlayRef.backdropClick().subscribe(() => this.close());\r\n this.overlayRef.keydownEvents().subscribe((e) => {\r\n if (e.key === 'Escape') this.close();\r\n });\r\n this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));\r\n }\r\n\r\n /** Public — menü içeriğinden (bkz. sınıf üstündeki JSDoc örneği) elle kapatmak için. */\r\n close(): void {\r\n this.overlayRef?.dispose();\r\n this.overlayRef = undefined;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.close();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, output, signal, inject, DOCUMENT, DestroyRef, Directive, computed, Component } from '@angular/core';
3
+ import { Button } from '@mesgflow/ui-kit/button';
4
+ import { MF_COPY_LABELS } from '@mesgflow/ui-kit/core';
5
+ import { Icon } from '@mesgflow/ui-kit/icon';
6
+ import { Tooltip } from '@mesgflow/ui-kit/tooltip';
7
+
8
+ /** Kopyalandı durumunun görünür kaldığı süre (ms). */
9
+ const COPIED_MS = 2000;
10
+ /**
11
+ * Metni panoya yazar. `navigator.clipboard` yoksa ya da reddedilirse (güvenli olmayan bağlam,
12
+ * izin) gizli bir `<textarea>` + `execCommand('copy')` yedeğine düşer — eski ama HTTP'de de
13
+ * çalışan tek yol. Başarısızsa `false`.
14
+ */
15
+ async function copyToClipboard(text, doc = document) {
16
+ try {
17
+ if (doc.defaultView?.navigator.clipboard) {
18
+ await doc.defaultView.navigator.clipboard.writeText(text);
19
+ return true;
20
+ }
21
+ }
22
+ catch {
23
+ // Yedeğe düş.
24
+ }
25
+ const area = doc.createElement('textarea');
26
+ area.value = text;
27
+ area.setAttribute('readonly', '');
28
+ area.style.cssText = 'position:fixed;inset-block-start:0;opacity:0;pointer-events:none';
29
+ doc.body.appendChild(area);
30
+ area.select();
31
+ try {
32
+ return doc.execCommand('copy');
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ finally {
38
+ area.remove();
39
+ }
40
+ }
41
+ /**
42
+ * `<button mfButton [mfCopy]="token" #c="mfCopy">{{ c.copied() ? '✓' : 'Kopyala' }}</button>`
43
+ *
44
+ * Herhangi bir düğmeyi kopyala düğmesine çevirir — görünüm tamamen tüketicide; hazır görünüm
45
+ * için `<mf-copy-button>`. `copied()` başarıdan sonra 2 sn `true` kalır (ikon/etiket değişimi
46
+ * için), `failed()` başarısızlıkta. Metin tıklama ANINDA okunur (dinamik değerler güncel olur).
47
+ */
48
+ class Copy {
49
+ value = input.required({ ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), alias: 'mfCopy' });
50
+ copySuccess = output();
51
+ copyError = output();
52
+ copied = signal(false, /* @ts-ignore */
53
+ ...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
54
+ failed = signal(false, /* @ts-ignore */
55
+ ...(ngDevMode ? [{ debugName: "failed" }] : /* istanbul ignore next */ []));
56
+ document = inject(DOCUMENT);
57
+ timer;
58
+ constructor() {
59
+ inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));
60
+ }
61
+ async copy() {
62
+ const text = this.value();
63
+ const ok = await copyToClipboard(text, this.document);
64
+ clearTimeout(this.timer);
65
+ this.copied.set(ok);
66
+ this.failed.set(!ok);
67
+ if (ok)
68
+ this.copySuccess.emit(text);
69
+ else
70
+ this.copyError.emit();
71
+ this.timer = setTimeout(() => {
72
+ this.copied.set(false);
73
+ this.failed.set(false);
74
+ }, COPIED_MS);
75
+ return ok;
76
+ }
77
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Copy, deps: [], target: i0.ɵɵFactoryTarget.Directive });
78
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: Copy, isStandalone: true, selector: "[mfCopy]", inputs: { value: { classPropertyName: "value", publicName: "mfCopy", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { copySuccess: "copySuccess", copyError: "copyError" }, host: { listeners: { "click": "copy()" } }, exportAs: ["mfCopy"], ngImport: i0 });
79
+ }
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Copy, decorators: [{
81
+ type: Directive,
82
+ args: [{
83
+ selector: '[mfCopy]',
84
+ exportAs: 'mfCopy',
85
+ host: { '(click)': 'copy()' },
86
+ }]
87
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "mfCopy", required: true }] }], copySuccess: [{ type: i0.Output, args: ["copySuccess"] }], copyError: [{ type: i0.Output, args: ["copyError"] }] } });
88
+
89
+ /**
90
+ * `<mf-copy-button [value]="apiKey" />` — ikon düğmesi: tıklanınca ikon ✓'ye döner (2 sn),
91
+ * başarısızsa ⚠; sonuç `aria-live` ile duyurulur. Düğmenin erişilebilir adı SABİT ("Copy" ya da
92
+ * `label`) — ekran okuyucu durum değişimini canlı bölgeden duyar, ad oynamaz.
93
+ */
94
+ class CopyButton {
95
+ value = input.required(/* @ts-ignore */
96
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
97
+ /** Düğmenin adı + ipucu. Verilmezse `MfLabels.copy.copy`. */
98
+ label = input(/* @ts-ignore */
99
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
100
+ labels = inject(MF_COPY_LABELS);
101
+ effectiveLabel = computed(() => this.label() ?? this.labels().copy, /* @ts-ignore */
102
+ ...(ngDevMode ? [{ debugName: "effectiveLabel" }] : /* istanbul ignore next */ []));
103
+ iconClass(copied, failed) {
104
+ if (copied)
105
+ return 'text-success animate-pop';
106
+ return failed ? 'text-danger' : '';
107
+ }
108
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CopyButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
109
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: CopyButton, isStandalone: true, selector: "mf-copy-button", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "inline-flex" }, exportAs: ["mfCopyButton"], ngImport: i0, template: `
110
+ <button
111
+ mfButton
112
+ tone="neutral"
113
+ appearance="text"
114
+ size="icon"
115
+ shape="square"
116
+ type="button"
117
+ [mfCopy]="value()"
118
+ #copier="mfCopy"
119
+ [mfTooltip]="effectiveLabel()"
120
+ [attr.aria-label]="effectiveLabel()"
121
+ >
122
+ <span mfIcon [size]="16" [class]="iconClass(copier.copied(), copier.failed())">{{
123
+ copier.copied() ? 'check' : copier.failed() ? 'error' : 'content_copy'
124
+ }}</span>
125
+ </button>
126
+ <span class="sr-only" aria-live="polite">{{
127
+ copier.copied() ? labels().copied : copier.failed() ? labels().failed : ''
128
+ }}</span>
129
+ `, isInline: true, dependencies: [{ kind: "component", type: Button, selector: "button[mfButton], a[mfButton]", inputs: ["tone", "appearance", "size", "shape", "type", "loading", "iconStart", "iconEnd"], exportAs: ["mfButton"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "directive", type: Tooltip, selector: "[mfTooltip], [mfTooltipContent]", inputs: ["mfTooltip", "mfTooltipContent", "tooltipPosition"], exportAs: ["mfTooltip"] }, { kind: "directive", type: Copy, selector: "[mfCopy]", inputs: ["mfCopy"], outputs: ["copySuccess", "copyError"], exportAs: ["mfCopy"] }] });
130
+ }
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CopyButton, decorators: [{
132
+ type: Component,
133
+ args: [{
134
+ selector: 'mf-copy-button',
135
+ exportAs: 'mfCopyButton',
136
+ imports: [Button, Icon, Tooltip, Copy],
137
+ host: { class: 'inline-flex' },
138
+ template: `
139
+ <button
140
+ mfButton
141
+ tone="neutral"
142
+ appearance="text"
143
+ size="icon"
144
+ shape="square"
145
+ type="button"
146
+ [mfCopy]="value()"
147
+ #copier="mfCopy"
148
+ [mfTooltip]="effectiveLabel()"
149
+ [attr.aria-label]="effectiveLabel()"
150
+ >
151
+ <span mfIcon [size]="16" [class]="iconClass(copier.copied(), copier.failed())">{{
152
+ copier.copied() ? 'check' : copier.failed() ? 'error' : 'content_copy'
153
+ }}</span>
154
+ </button>
155
+ <span class="sr-only" aria-live="polite">{{
156
+ copier.copied() ? labels().copied : copier.failed() ? labels().failed : ''
157
+ }}</span>
158
+ `,
159
+ }]
160
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
161
+
162
+ /**
163
+ * Generated bundle index. Do not edit.
164
+ */
165
+
166
+ export { Copy, CopyButton, copyToClipboard };
167
+ //# sourceMappingURL=mesgflow-ui-kit-copy-button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesgflow-ui-kit-copy-button.mjs","sources":["../../../projects/ui-kit/copy-button/copy.ts","../../../projects/ui-kit/copy-button/copy-button.ts","../../../projects/ui-kit/copy-button/mesgflow-ui-kit-copy-button.ts"],"sourcesContent":["import { DOCUMENT, DestroyRef, Directive, inject, input, output, signal } from '@angular/core';\r\n\r\n/** Kopyalandı durumunun görünür kaldığı süre (ms). */\r\nconst COPIED_MS = 2000;\r\n\r\n/**\r\n * Metni panoya yazar. `navigator.clipboard` yoksa ya da reddedilirse (güvenli olmayan bağlam,\r\n * izin) gizli bir `<textarea>` + `execCommand('copy')` yedeğine düşer — eski ama HTTP'de de\r\n * çalışan tek yol. Başarısızsa `false`.\r\n */\r\nexport async function copyToClipboard(text: string, doc: Document = document): Promise<boolean> {\r\n try {\r\n if (doc.defaultView?.navigator.clipboard) {\r\n await doc.defaultView.navigator.clipboard.writeText(text);\r\n return true;\r\n }\r\n } catch {\r\n // Yedeğe düş.\r\n }\r\n const area = doc.createElement('textarea');\r\n area.value = text;\r\n area.setAttribute('readonly', '');\r\n area.style.cssText = 'position:fixed;inset-block-start:0;opacity:0;pointer-events:none';\r\n doc.body.appendChild(area);\r\n area.select();\r\n try {\r\n return doc.execCommand('copy');\r\n } catch {\r\n return false;\r\n } finally {\r\n area.remove();\r\n }\r\n}\r\n\r\n/**\r\n * `<button mfButton [mfCopy]=\"token\" #c=\"mfCopy\">{{ c.copied() ? '✓' : 'Kopyala' }}</button>`\r\n *\r\n * Herhangi bir düğmeyi kopyala düğmesine çevirir — görünüm tamamen tüketicide; hazır görünüm\r\n * için `<mf-copy-button>`. `copied()` başarıdan sonra 2 sn `true` kalır (ikon/etiket değişimi\r\n * için), `failed()` başarısızlıkta. Metin tıklama ANINDA okunur (dinamik değerler güncel olur).\r\n */\r\n@Directive({\r\n selector: '[mfCopy]',\r\n exportAs: 'mfCopy',\r\n host: { '(click)': 'copy()' },\r\n})\r\nexport class Copy {\r\n readonly value = input.required<string>({ alias: 'mfCopy' });\r\n\r\n readonly copySuccess = output<string>();\r\n readonly copyError = output<void>();\r\n\r\n readonly copied = signal(false);\r\n readonly failed = signal(false);\r\n\r\n private readonly document = inject(DOCUMENT);\r\n private timer: ReturnType<typeof setTimeout> | undefined;\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\r\n }\r\n\r\n async copy(): Promise<boolean> {\r\n const text = this.value();\r\n const ok = await copyToClipboard(text, this.document);\r\n clearTimeout(this.timer);\r\n this.copied.set(ok);\r\n this.failed.set(!ok);\r\n if (ok) this.copySuccess.emit(text);\r\n else this.copyError.emit();\r\n this.timer = setTimeout(() => {\r\n this.copied.set(false);\r\n this.failed.set(false);\r\n }, COPIED_MS);\r\n return ok;\r\n }\r\n}\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { MF_COPY_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport { Copy } from './copy';\r\n\r\n/**\r\n * `<mf-copy-button [value]=\"apiKey\" />` — ikon düğmesi: tıklanınca ikon ✓'ye döner (2 sn),\r\n * başarısızsa ⚠; sonuç `aria-live` ile duyurulur. Düğmenin erişilebilir adı SABİT (\"Copy\" ya da\r\n * `label`) — ekran okuyucu durum değişimini canlı bölgeden duyar, ad oynamaz.\r\n */\r\n@Component({\r\n selector: 'mf-copy-button',\r\n exportAs: 'mfCopyButton',\r\n imports: [Button, Icon, Tooltip, Copy],\r\n host: { class: 'inline-flex' },\r\n template: `\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [mfCopy]=\"value()\"\r\n #copier=\"mfCopy\"\r\n [mfTooltip]=\"effectiveLabel()\"\r\n [attr.aria-label]=\"effectiveLabel()\"\r\n >\r\n <span mfIcon [size]=\"16\" [class]=\"iconClass(copier.copied(), copier.failed())\">{{\r\n copier.copied() ? 'check' : copier.failed() ? 'error' : 'content_copy'\r\n }}</span>\r\n </button>\r\n <span class=\"sr-only\" aria-live=\"polite\">{{\r\n copier.copied() ? labels().copied : copier.failed() ? labels().failed : ''\r\n }}</span>\r\n `,\r\n})\r\nexport class CopyButton {\r\n readonly value = input.required<string>();\r\n /** Düğmenin adı + ipucu. Verilmezse `MfLabels.copy.copy`. */\r\n readonly label = input<string>();\r\n\r\n protected readonly labels = inject(MF_COPY_LABELS);\r\n protected readonly effectiveLabel = computed(() => this.label() ?? this.labels().copy);\r\n\r\n protected iconClass(copied: boolean, failed: boolean): string {\r\n if (copied) return 'text-success animate-pop';\r\n return failed ? 'text-danger' : '';\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}