@mesgflow/ui-kit 0.6.0 → 0.8.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.
- package/README.md +56 -5
- package/fesm2022/mesgflow-ui-kit-accordion.mjs +9 -8
- package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-agenda.mjs +208 -0
- package/fesm2022/mesgflow-ui-kit-agenda.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-alert.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-avatar.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-badge.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-banner.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
- package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-box-input.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-brand.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-button-group.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-button.mjs +190 -244
- package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-card.mjs +48 -27
- package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
- package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-chart.mjs +12 -12
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs +18 -23
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-chip.mjs +5 -5
- package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-code-block.mjs +11 -7
- package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-collapsible.mjs +9 -9
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs +9 -7
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-combobox.mjs +147 -67
- package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-command.mjs +15 -16
- package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs +7 -9
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-copy-button.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-core.mjs +446 -128
- package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
- package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs +140 -19
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-description-list.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-dialog.mjs +310 -64
- package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-divider.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
- package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-empty-state.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-field.mjs +55 -14
- package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
- package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-hover-card.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +135 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icon.mjs +8 -3
- package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
- package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
- package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-input.mjs +162 -19
- package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-kbd.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
- package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-link.mjs +5 -5
- package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
- package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
- package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-menu.mjs +178 -14
- package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
- package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
- package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-number-input.mjs +9 -6
- package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-otp-input.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-page-header.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-pagination.mjs +7 -6
- package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-password-input.mjs +38 -68
- package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-popover.mjs +12 -52
- package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-progress.mjs +164 -23
- package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-qr-code.mjs +766 -0
- package/fesm2022/mesgflow-ui-kit-qr-code.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-radio.mjs +10 -12
- package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-rating.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-search-input.mjs +11 -7
- package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +15 -11
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-select.mjs +6 -5
- package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs +24 -21
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs +6 -5
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-slider.mjs +253 -6
- package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
- package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-spinner.mjs +44 -15
- package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
- package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-splitter.mjs +213 -6
- package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +13 -6
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stepper.mjs +171 -64
- package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-switch.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-table.mjs +34 -28
- package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tabs.mjs +421 -180
- package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs +9 -4
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-theming.mjs +7 -7
- package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-timeline.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-toast.mjs +118 -35
- package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toggle.mjs +12 -11
- package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs +13 -11
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs +76 -53
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tour.mjs +17 -29
- package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
- package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tree-select.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-tree.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
- package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit.mjs +93 -12836
- package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
- package/package.json +91 -3
- package/schematics/collection.json +10 -0
- package/schematics/migration.json +10 -0
- package/schematics/migrations/v0-7.cjs +70 -0
- package/schematics/ng-add/index.cjs +234 -0
- package/schematics/ng-add/schema.json +43 -0
- package/tokens/color.css +96 -0
- package/tokens/controls.css +145 -0
- package/tokens/elevation.css +62 -6
- package/tokens/motion.css +304 -66
- package/tokens/radius.css +14 -0
- package/tokens.css +1 -0
- package/tokens.json +1583 -0
- package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
- package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
- package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
- package/types/mesgflow-ui-kit-button.d.ts +23 -38
- package/types/mesgflow-ui-kit-card.d.ts +26 -16
- package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
- package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
- package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
- package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
- package/types/mesgflow-ui-kit-command.d.ts +2 -2
- package/types/mesgflow-ui-kit-core.d.ts +279 -21
- package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
- package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
- package/types/mesgflow-ui-kit-dialog.d.ts +122 -14
- package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
- package/types/mesgflow-ui-kit-field.d.ts +17 -8
- package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
- package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
- package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
- package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
- package/types/mesgflow-ui-kit-input.d.ts +64 -2
- package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
- package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
- package/types/mesgflow-ui-kit-mention.d.ts +59 -0
- package/types/mesgflow-ui-kit-menu.d.ts +41 -2
- package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
- package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
- package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-password-input.d.ts +35 -5
- package/types/mesgflow-ui-kit-popover.d.ts +13 -5
- package/types/mesgflow-ui-kit-progress.d.ts +33 -12
- package/types/mesgflow-ui-kit-qr-code.d.ts +160 -0
- package/types/mesgflow-ui-kit-radio.d.ts +2 -2
- package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
- package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
- package/types/mesgflow-ui-kit-slider.d.ts +60 -1
- package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
- package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
- package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
- package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
- package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
- package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
- package/types/mesgflow-ui-kit-table.d.ts +2 -0
- package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
- package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-toast.d.ts +48 -22
- package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
- package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
- package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
- package/types/mesgflow-ui-kit.d.ts +88 -5444
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Signal, ComponentRef, TemplateRef } from '@angular/core';
|
|
2
3
|
import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
|
|
3
4
|
import * as i1 from '@angular/cdk/drag-drop';
|
|
4
5
|
import { DialogRef } from '@angular/cdk/dialog';
|
|
6
|
+
import { OverlayRef } from '@angular/cdk/overlay';
|
|
7
|
+
import { Observable } from 'rxjs';
|
|
5
8
|
import { ComponentType } from '@angular/cdk/portal';
|
|
6
9
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
7
10
|
import { VariantProps } from 'class-variance-authority';
|
|
8
11
|
|
|
9
12
|
type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
|
|
10
|
-
/**
|
|
11
|
-
|
|
13
|
+
/**
|
|
14
|
+
* `'center'` (varsayılan, klasik modal) ya da bir kenar çekmecesi. `start`/`end`
|
|
15
|
+
* MANTIKSAL (RTL'de çevrilir), `left`/`right` fiziksel; `top`/`bottom` tam
|
|
16
|
+
* genişlikte üst/alt panel. Bkz. `DialogService.openDrawer()` ve `<mf-drawer>`.
|
|
17
|
+
*/
|
|
18
|
+
type DialogPlacement = 'center' | 'start' | 'end' | 'left' | 'right' | 'top' | 'bottom';
|
|
19
|
+
/** Çekmecenin FİZİKSEL kenarı — yerleşim + yazı yönünden türetilir. */
|
|
20
|
+
type DrawerSide = 'left' | 'right' | 'top' | 'bottom';
|
|
12
21
|
interface DialogOptions<D> {
|
|
13
22
|
data?: D;
|
|
14
23
|
size?: DialogSize;
|
|
@@ -20,6 +29,12 @@ interface DialogOptions<D> {
|
|
|
20
29
|
draggable?: boolean;
|
|
21
30
|
/** Sağ-alt köşede serbest boyutlandırma tutamacı gösterir. Drawer'da etkisiz. */
|
|
22
31
|
resizable?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* < 640px'te panel alttan açılan bir sheet'e dönüşsün mü. Varsayılan `true`
|
|
34
|
+
* (orta ve yan paneller); `top`/`bottom` zaten tam genişlik olduğu için etkisiz.
|
|
35
|
+
* Mobilde de soldan açılması gereken bir gezinme çekmecesi için `false`.
|
|
36
|
+
*/
|
|
37
|
+
sheetOnMobile?: boolean;
|
|
23
38
|
/** `true` ise ESC/backdrop tıklaması kapatmaz (programatik `dialogRef.close()` yine çalışır). */
|
|
24
39
|
disableClose?: boolean;
|
|
25
40
|
ariaLabel?: string;
|
|
@@ -91,6 +106,8 @@ interface DialogCustomSize {
|
|
|
91
106
|
declare class DialogSurface {
|
|
92
107
|
readonly size: _angular_core.WritableSignal<DialogSize>;
|
|
93
108
|
readonly placement: _angular_core.WritableSignal<DialogPlacement>;
|
|
109
|
+
/** Çekmecenin fiziksel kenarı (`center`'da `null`) — `DialogService` yön bilgisiyle çözer. */
|
|
110
|
+
readonly side: _angular_core.WritableSignal<DrawerSide | null>;
|
|
94
111
|
readonly maximizable: _angular_core.WritableSignal<boolean>;
|
|
95
112
|
readonly draggable: _angular_core.WritableSignal<boolean>;
|
|
96
113
|
readonly resizable: _angular_core.WritableSignal<boolean>;
|
|
@@ -145,9 +162,20 @@ declare class Dialog {
|
|
|
145
162
|
* kuralının uygulama noktası: dialog gövdesi + içerik aynı anda kaymaz.
|
|
146
163
|
*/
|
|
147
164
|
readonly fillBody: _angular_core.InputSignal<boolean>;
|
|
165
|
+
/**
|
|
166
|
+
* `true` (varsayılan): kapat (X) düğmesi `close` olayını yayınladıktan SONRA
|
|
167
|
+
* dialog'u kendisi de kapatır (`MfDialogRef.close()` — idempotent, tüketicinin
|
|
168
|
+
* `(close)` handler'ında sonuçla yaptığı kapanış önce davranır ve kazanır).
|
|
169
|
+
* `false`: yalnızca `close` yayınlanır — kapanışı tamamen tüketici yönetir.
|
|
170
|
+
*/
|
|
171
|
+
readonly autoClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
148
172
|
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
149
173
|
protected readonly surface: DialogSurface;
|
|
150
174
|
protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfDialogLabels>;
|
|
175
|
+
/** Görünür başlığın id'si — CDK konteynerinin `aria-labelledby`'ı buna bağlanır. */
|
|
176
|
+
protected readonly titleId: string;
|
|
177
|
+
private readonly mfRef;
|
|
178
|
+
private readonly cdkRef;
|
|
151
179
|
private readonly elementRef;
|
|
152
180
|
private readonly cdkDrag;
|
|
153
181
|
private readonly scrollBody;
|
|
@@ -169,6 +197,8 @@ declare class Dialog {
|
|
|
169
197
|
protected readonly headerBorder: _angular_core.Signal<boolean>;
|
|
170
198
|
protected readonly footerBorder: _angular_core.Signal<boolean>;
|
|
171
199
|
constructor();
|
|
200
|
+
/** Kapat (X): önce `close` olayı (tüketici sonuçla kapatabilsin), sonra — `autoClose` ise — ref'in kendisi. */
|
|
201
|
+
protected onDismiss(): void;
|
|
172
202
|
protected updateScrollShadow(): void;
|
|
173
203
|
/**
|
|
174
204
|
* Ctrl/Cmd+Enter — tek yerde çözülür, her form bedava kazanır. Kaydet düğmesi
|
|
@@ -179,9 +209,72 @@ declare class Dialog {
|
|
|
179
209
|
*/
|
|
180
210
|
protected requestSubmit(): void;
|
|
181
211
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Dialog, never>;
|
|
182
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dialog, "mf-dialog", ["mfDialog"], { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fillBody": { "alias": "fillBody"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["[dialog-header]", "*", "[dialog-footer]"], true, [{ directive: typeof i1.CdkDrag; inputs: {}; outputs: {}; }]>;
|
|
212
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dialog, "mf-dialog", ["mfDialog"], { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fillBody": { "alias": "fillBody"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["[dialog-header]", "*", "[dialog-footer]"], true, [{ directive: typeof i1.CdkDrag; inputs: {}; outputs: {}; }]>;
|
|
183
213
|
}
|
|
184
214
|
|
|
215
|
+
/** `open` → (`close()` çağrıldı, çıkış animasyonu oynuyor) `closing` → (dispose edildi) `closed`. */
|
|
216
|
+
type DialogState = 'open' | 'closing' | 'closed';
|
|
217
|
+
/**
|
|
218
|
+
* `DialogService.open()`/`openDrawer()`'ın döndürdüğü, kite ait dialog referansı.
|
|
219
|
+
*
|
|
220
|
+
* CDK `DialogRef`'in günlük kullanılan yüzeyini (`close`, `closed`,
|
|
221
|
+
* `componentInstance`, `disableClose`, `backdropClick`, `keydownEvents` …)
|
|
222
|
+
* birebir DELEGE eder — yani eski `ref.closed.subscribe(...)` kodu aynen derlenir.
|
|
223
|
+
* Üstüne kitin kendi dünyasını ekler:
|
|
224
|
+
*
|
|
225
|
+
* - `afterClosed()` — `await` edilebilir sonuç (çıkış animasyonu BİTTİKTEN sonra çözülür).
|
|
226
|
+
* - `state` — `'open' | 'closing' | 'closed'` signal'i (şablonda/`computed`'ta okunur).
|
|
227
|
+
* - `surface` — boyut/maximize/kirli-form durumuna tipli erişim (`setSize`, `toggleMaximize`,
|
|
228
|
+
* `registerDirty`, `markClean` kısayolları).
|
|
229
|
+
* - `cdk` — ham CDK referansı (kaçış kapısı; ör. `updatePosition()`).
|
|
230
|
+
*
|
|
231
|
+
* `close()` İDEMPOTENT'tir: çıkış animasyonu sürerken ya da kirli-form onayı
|
|
232
|
+
* açıkken gelen ek çağrılar yok sayılır (bkz. `dialog.service.ts` `closePredicate`).
|
|
233
|
+
*
|
|
234
|
+
* İçerik component'i içinde `injectDialogRef<Sonuç>()` ile alınır.
|
|
235
|
+
*/
|
|
236
|
+
declare class MfDialogRef<R = unknown, C = unknown> {
|
|
237
|
+
readonly cdk: DialogRef<R, C>;
|
|
238
|
+
readonly surface: DialogSurface;
|
|
239
|
+
readonly closed: Observable<R | undefined>;
|
|
240
|
+
readonly backdropClick: Observable<MouseEvent>;
|
|
241
|
+
readonly keydownEvents: Observable<KeyboardEvent>;
|
|
242
|
+
readonly outsidePointerEvents: Observable<MouseEvent>;
|
|
243
|
+
readonly overlayRef: OverlayRef;
|
|
244
|
+
readonly id: string;
|
|
245
|
+
private readonly isClosed;
|
|
246
|
+
private readonly result;
|
|
247
|
+
/** Dialog'un yaşam döngüsü — `closing` çıkış animasyonu boyunca. */
|
|
248
|
+
readonly state: Signal<DialogState>;
|
|
249
|
+
constructor(cdk: DialogRef<R, C>, surface: DialogSurface);
|
|
250
|
+
/** Açılan component örneği (şablonla açıldıysa ve kapandıktan sonra `null`). */
|
|
251
|
+
get componentInstance(): C | null;
|
|
252
|
+
get componentRef(): ComponentRef<C> | null;
|
|
253
|
+
/** `true` iken ESC/backdrop kapatmaz; programatik `close()` yine çalışır. */
|
|
254
|
+
get disableClose(): boolean | undefined;
|
|
255
|
+
set disableClose(value: boolean | undefined);
|
|
256
|
+
/** Dialog'u (çıkış animasyonu + kirli-form koruması üzerinden) kapatır. İdempotent. */
|
|
257
|
+
close(result?: R): void;
|
|
258
|
+
/** Kapanış tamamlandığında (animasyon dahil) sonuçla çözülür; ESC/backdrop'ta `undefined`. */
|
|
259
|
+
afterClosed(): Promise<R | undefined>;
|
|
260
|
+
/** Açıkken genişlik basamağını değiştirir (`sm`…`xl`, `full`). */
|
|
261
|
+
setSize(size: DialogSize): void;
|
|
262
|
+
toggleMaximize(): void;
|
|
263
|
+
/** Kirli-form sorusunu kaydeder — ESC/backdrop/X kapanışında `true` dönerse onay sorulur. */
|
|
264
|
+
registerDirty(check: () => boolean): void;
|
|
265
|
+
/** Başarılı kayıttan hemen önce — sonraki `close()` kirli-form onayı sormaz. */
|
|
266
|
+
markClean(): void;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* `DIALOG_DATA`'nın kite ait adı — AYNI token nesnesi, CDK'dan ayrıca import
|
|
270
|
+
* etmeye gerek kalmasın diye. `inject(MF_DIALOG_DATA)` ≡ `injectDialogData()`.
|
|
271
|
+
*/
|
|
272
|
+
declare const MF_DIALOG_DATA: _angular_core.InjectionToken<any>;
|
|
273
|
+
/** İçerik component'inde `DialogService.open(..., { data })` ile geçilen veriyi okur. */
|
|
274
|
+
declare function injectDialogData<D>(): D;
|
|
275
|
+
/** İçerik component'inde kendi dialog referansını alır — `ref.close(sonuç)`. */
|
|
276
|
+
declare function injectDialogRef<R = unknown, C = unknown>(): MfDialogRef<R, C>;
|
|
277
|
+
|
|
185
278
|
/**
|
|
186
279
|
* `<button mfDialogResizeHandle [ariaLabel]="...">` — `Dialog`'un (dialog.ts)
|
|
187
280
|
* sağ-alt köşesinde, `DialogSurface.customSize`'ı besleyen serbest boyutlandırma
|
|
@@ -216,9 +309,10 @@ declare class DialogResizeHandle {
|
|
|
216
309
|
* engelleme davranışının TAMAMI CDK'dan geliyor, burada TEKRAR YAZILMADI — bkz.
|
|
217
310
|
* projects/ui-kit/README.md "a11y checklist" bölümündeki "elle yazmak son çare" ilkesi).
|
|
218
311
|
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
312
|
+
* `open()` kite ait `MfDialogRef` döndürür (CDK `DialogRef` yüzeyini delege eder +
|
|
313
|
+
* `afterClosed()`/`state`/`surface`). İçerik component'i `injectDialogRef()`/
|
|
314
|
+
* `injectDialogData()` (bkz. dialog-ref.ts) kullanır — CDK'nın kendi `DialogRef`/
|
|
315
|
+
* `DIALOG_DATA` token'larını inject etmek de çalışmaya devam eder. Boyut/placement/maximize/drag/resize/sheet durumu
|
|
222
316
|
* `DialogSurface` (bkz. o dosya) üzerinden, `providers` ile o dialog'un injector'ına
|
|
223
317
|
* verilir — `Dialog` (dialog.ts) bunu DI'dan okuyarak render eder.
|
|
224
318
|
*
|
|
@@ -231,11 +325,13 @@ declare class DialogResizeHandle {
|
|
|
231
325
|
* Kapanış animasyonu: CDK'nın `DialogRef.close()`'u `overlayRef.dispose()`'u SENKRON
|
|
232
326
|
* çağırıyor, bir "kapanıyor" olayı/kancası yok. `closePredicate` bunun için bilinçli
|
|
233
327
|
* bir kaçamak — `false` döndürmek kapanmayı iptal ediyor: ilk çağrıda `surface.closing`'i
|
|
234
|
-
* `true` yapıp gerçek kapanmayı `
|
|
328
|
+
* `true` yapıp gerçek kapanmayı `exitDurationMs()` kadar geciktiriyoruz (panel bu sürede `Dialog`'un
|
|
235
329
|
* kendi reaktif `animate-dialog-out`/`animate-sheet-out`/`animate-drawer-out` class'ıyla
|
|
236
330
|
* görsel olarak kapanır), ikinci çağrıda (zaten `closing()===true`) gerçek `dispose()`'a
|
|
237
331
|
* izin veriyoruz. ESC/backdrop/programatik `dialogRef.close(...)` HEPSİ bu predicate'ten
|
|
238
|
-
* geçtiği için davranış tekdüze.
|
|
332
|
+
* geçtiği için davranış tekdüze. Animasyon sürerken gelen EK `close()` çağrıları
|
|
333
|
+
* yok sayılır (`disposeArmed` yalnızca zamanlayıcı tarafından kurulur) — X düğmesi +
|
|
334
|
+
* tüketicinin `(close)` handler'ı aynı anda kapatsa bile animasyon kesilmez. `prefers-reduced-motion` gecikmeyi tamamen atlıyor —
|
|
239
335
|
* AMA kirli-form kontrolünden SONRA: koruma reduced-motion kullanıcılarında da çalışmalı.
|
|
240
336
|
*
|
|
241
337
|
* **Kirli form koruması**: `surface.isDirty()` `true` dönerse kapanış iptal edilip
|
|
@@ -249,9 +345,14 @@ declare class DialogService {
|
|
|
249
345
|
private readonly injector;
|
|
250
346
|
private readonly breakpointObserver;
|
|
251
347
|
private readonly labels;
|
|
348
|
+
private readonly dir;
|
|
252
349
|
/** `ref` başına `DialogSurface` — tüketicinin kendi URL senkronizasyon mantığı, kirli-form durumunu PROAKTİF sormak için kullanabilir (kendi `closePredicate`'inin async akışıyla yarışmamak için). */
|
|
253
350
|
private readonly surfaces;
|
|
254
|
-
|
|
351
|
+
/**
|
|
352
|
+
* Bir component'i ya da bir `TemplateRef'i açar (şablon yolu `<mf-drawer>` gibi
|
|
353
|
+
* bildirimsel sarmalayıcılar içindir — şablonun injector'ı da `DialogSurface'i görür).
|
|
354
|
+
*/
|
|
355
|
+
open<R = void, D = undefined, C = unknown>(component: ComponentType<C> | TemplateRef<C>, options?: DialogOptions<D>): MfDialogRef<R, C>;
|
|
255
356
|
/**
|
|
256
357
|
* Kayıt oluştur/düzenle formlarının TEK açılış noktası — sağdan drawer.
|
|
257
358
|
* `maximizable` bilerek zorla kapatılıyor: drawer zaten tam yükseklik, büyütme
|
|
@@ -261,7 +362,9 @@ declare class DialogService {
|
|
|
261
362
|
* genişlikte açılmalı. İstisna: iki sütunlu bir form (sol dikey ray + sağ
|
|
262
363
|
* panel gibi) `md` içine sığmazsa `xl` (960px) geçilebilir.
|
|
263
364
|
*/
|
|
264
|
-
openDrawer<R = void, D = undefined, C = unknown>(component: ComponentType<C>, options?: Omit<DialogOptions<D>, 'placement'>
|
|
365
|
+
openDrawer<R = void, D = undefined, C = unknown>(component: ComponentType<C>, options?: Omit<DialogOptions<D>, 'placement'> & {
|
|
366
|
+
placement?: Exclude<DialogPlacement, 'center'>;
|
|
367
|
+
}): MfDialogRef<R, C>;
|
|
265
368
|
/** `Promise<boolean>` döner — `if (await dialog.confirm(...))` çağıran taraf için `.subscribe()` zincirinden daha sade. */
|
|
266
369
|
confirm(data: ConfirmDialogData): Promise<boolean>;
|
|
267
370
|
/**
|
|
@@ -276,8 +379,12 @@ declare class DialogService {
|
|
|
276
379
|
* kaldırıldı).
|
|
277
380
|
*/
|
|
278
381
|
confirmDiscard(): Promise<boolean>;
|
|
279
|
-
/**
|
|
280
|
-
|
|
382
|
+
/**
|
|
383
|
+
* Tüketici bir ref'i kapatmadan ÖNCE kirli mi diye sormak istiyorsa — kendi `closePredicate`'inin
|
|
384
|
+
* async akışıyla yarışmamak için `DialogSurface`'e doğrudan erişim. `MfDialogRef` için
|
|
385
|
+
* `ref.surface` tercih edilir; ham CDK ref'i (ör. içerikte inject edilen) de kabul edilir.
|
|
386
|
+
*/
|
|
387
|
+
getSurface(ref: DialogRef<any, any> | MfDialogRef<any, any>): DialogSurface | undefined;
|
|
281
388
|
/** `confirm()`'in silme kısayolu — `tone:'danger'` + varsayılan "Sil" etiketi. */
|
|
282
389
|
confirmDelete(data: Omit<ConfirmDialogData, 'tone'>): Promise<boolean>;
|
|
283
390
|
/** Tek butonlu bilgilendirme modu — sonuç önemsiz olduğu için `Promise<void>` döner. */
|
|
@@ -335,8 +442,9 @@ declare class DialogService {
|
|
|
335
442
|
declare const dialogVariants: (props?: ({
|
|
336
443
|
size?: "sm" | "md" | "lg" | "xl" | "full" | null | undefined;
|
|
337
444
|
state?: "normal" | "maximized" | "sheet" | "drawer" | null | undefined;
|
|
445
|
+
side?: "left" | "right" | "top" | "bottom" | "none" | null | undefined;
|
|
338
446
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
339
447
|
type DialogVariants = VariantProps<typeof dialogVariants>;
|
|
340
448
|
|
|
341
|
-
export { ConfirmDialog, Dialog, DialogResizeHandle, DialogService, DialogSurface, dialogVariants };
|
|
342
|
-
export type { ConfirmDialogData, ConfirmTone, DialogCustomSize, DialogOptions, DialogPlacement, DialogSize, DialogVariants };
|
|
449
|
+
export { ConfirmDialog, Dialog, DialogResizeHandle, DialogService, DialogSurface, MF_DIALOG_DATA, MfDialogRef, dialogVariants, injectDialogData, injectDialogRef };
|
|
450
|
+
export type { ConfirmDialogData, ConfirmTone, DialogCustomSize, DialogOptions, DialogPlacement, DialogSize, DialogState, DialogVariants, DrawerSide };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { DialogPlacement } from '@mesgflow/ui-kit/dialog';
|
|
3
|
+
|
|
4
|
+
type DrawerPlacement = Exclude<DialogPlacement, 'center'>;
|
|
5
|
+
/**
|
|
6
|
+
* `<mf-drawer [(open)]="filtersOpen" title="Filtreler" placement="end" size="sm">…</mf-drawer>`
|
|
7
|
+
*
|
|
8
|
+
* Bildirimsel çekmece (sheet) — `DialogService.openDrawer()`'ın şablon
|
|
9
|
+
* sürümü: içerik bir component yazmadan doğrudan şablonda durur, açık/kapalı
|
|
10
|
+
* durumu `open` modeliyle iki yönlü bağlanır.
|
|
11
|
+
*
|
|
12
|
+
* - `placement`: `start` / `end` (mantıksal, RTL'de çevrilir), `left` / `right`,
|
|
13
|
+
* `top` / `bottom`. Her kenar kendi kayma animasyonuyla açılır.
|
|
14
|
+
* - Dialog altyapısının TÜM davranışı: odak tuzağı + geri dönüş, Escape,
|
|
15
|
+
* backdrop tıklaması, çıkış animasyonu, kirli-form koruması, cam yüzey.
|
|
16
|
+
* - `<div drawer-footer>` slotu sabit altbilgiye gider (Kaydet/İptal).
|
|
17
|
+
* - `sheetOnMobile="false"`: mobilde de kenardan açılır (gezinme çekmeceleri).
|
|
18
|
+
*/
|
|
19
|
+
declare class Drawer {
|
|
20
|
+
readonly open: _angular_core.ModelSignal<boolean>;
|
|
21
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
22
|
+
readonly subtitle: _angular_core.InputSignal<string>;
|
|
23
|
+
readonly icon: _angular_core.InputSignal<string>;
|
|
24
|
+
readonly placement: _angular_core.InputSignal<DrawerPlacement>;
|
|
25
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl">;
|
|
26
|
+
/** `true` ise Escape/backdrop kapatmaz — yalnızca programatik `open.set(false)`. */
|
|
27
|
+
readonly disableClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
28
|
+
readonly sheetOnMobile: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
29
|
+
/** Görünür başlık yoksa ekran okuyucu için ad. */
|
|
30
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
31
|
+
/** Kapanış tamamlandığında (animasyon dahil). */
|
|
32
|
+
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
33
|
+
private readonly dialog;
|
|
34
|
+
private readonly panel;
|
|
35
|
+
private ref;
|
|
36
|
+
constructor();
|
|
37
|
+
/** Programatik kapatma — `open.set(false)` ile eşdeğer. */
|
|
38
|
+
hide(): void;
|
|
39
|
+
private show;
|
|
40
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Drawer, never>;
|
|
41
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Drawer, "mf-drawer", ["mfDrawer"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disableClose": { "alias": "disableClose"; "required": false; "isSignal": true; }; "sheetOnMobile": { "alias": "sheetOnMobile"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*", "[drawer-footer]"], true, never>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { Drawer };
|
|
45
|
+
export type { DrawerPlacement };
|
|
@@ -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
|
|
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
|
-
* `
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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`)
|
|
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<
|
|
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
|
-
|
|
186
|
-
|
|
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 };
|