@mesgflow/ui-kit 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -5
- package/fesm2022/mesgflow-ui-kit-accordion.mjs +3 -2
- 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-aspect-ratio.mjs +37 -0
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
- 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 +2 -2
- package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-button.mjs +188 -242
- package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-card.mjs +37 -16
- 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-checkbox.mjs +16 -21
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-chip.mjs +2 -2
- package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-code-block.mjs +9 -5
- package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs +6 -4
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-combobox.mjs +145 -65
- package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs +4 -6
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-core.mjs +441 -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 +131 -10
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-dialog.mjs +117 -34
- package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
- 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 +3 -3
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-field.mjs +53 -12
- 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-i18n-tr.mjs +131 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icon.mjs +6 -1
- 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 +147 -4
- package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
- 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 +2 -2
- 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 +169 -5
- 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 +7 -4
- package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-pagination.mjs +4 -3
- package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-password-input.mjs +7 -2
- package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-popover.mjs +9 -49
- package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-progress.mjs +162 -21
- package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-radio.mjs +4 -6
- package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-rating.mjs +2 -2
- package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-search-input.mjs +9 -5
- package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +12 -8
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-select.mjs +3 -2
- package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs +16 -13
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs +4 -3
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-slider.mjs +250 -3
- 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 +42 -13
- 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 +210 -3
- package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +11 -4
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stepper.mjs +167 -60
- package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-switch.mjs +2 -2
- package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-table.mjs +16 -10
- package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tabs.mjs +410 -169
- package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs +7 -2
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-theming.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toast.mjs +113 -30
- package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toggle.mjs +3 -2
- package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs +4 -2
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs +73 -50
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tour.mjs +8 -20
- 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.mjs +1 -1
- 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 +92 -12836
- package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
- package/package.json +87 -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-core.d.ts +271 -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 +29 -6
- 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 +3 -1
- 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-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 +87 -5444
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
import * as _angular_cdk_overlay from '@angular/cdk/overlay';
|
|
2
|
+
import { CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
1
3
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import {
|
|
4
|
+
import { MfPlacement } from '@mesgflow/ui-kit/core';
|
|
3
5
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
4
6
|
import { VariantProps } from 'class-variance-authority';
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Tüm `MfPlacement` değerleri — `left`/`right` MANTIKSAL (RTL'de çevrilir).
|
|
10
|
+
* `right-start`: tetikleyicinin ÜSTÜYLE hizalı (Sidebar daraltılmış nav
|
|
11
|
+
* flyout'u gibi çok satırlı panellerde `right`in dikey ortalaması paneli
|
|
12
|
+
* beklenmedik yönde kaydırır), 8px boşlukla.
|
|
13
|
+
*/
|
|
14
|
+
type PopoverPlacement = MfPlacement;
|
|
7
15
|
/**
|
|
8
16
|
* `<button cdkOverlayOrigin #trigger="cdkOverlayOrigin" (click)="open.set(true)">...</button>`
|
|
9
17
|
* `<mf-popover [origin]="trigger" [(open)]="open">...içerik (ng-content)...</mf-popover>`
|
|
@@ -23,7 +31,7 @@ type PopoverPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end'
|
|
|
23
31
|
declare class Popover {
|
|
24
32
|
readonly origin: _angular_core.InputSignal<CdkOverlayOrigin>;
|
|
25
33
|
readonly open: _angular_core.ModelSignal<boolean>;
|
|
26
|
-
readonly placement: _angular_core.InputSignal<
|
|
34
|
+
readonly placement: _angular_core.InputSignal<MfPlacement>;
|
|
27
35
|
readonly padding: _angular_core.InputSignal<"none" | "sm" | "md" | "lg" | null | undefined>;
|
|
28
36
|
/** Backdrop şeffaf ama TIKLANABİLİR — dışarı tıklayınca kapanması için var, görsel karartma YOK. */
|
|
29
37
|
readonly hasBackdrop: _angular_core.InputSignal<boolean>;
|
|
@@ -36,7 +44,7 @@ declare class Popover {
|
|
|
36
44
|
* yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`
|
|
37
45
|
* çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`
|
|
38
46
|
* `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip
|
|
39
|
-
* `animate-overlay-out` oynatılır, `
|
|
47
|
+
* `animate-overlay-out` oynatılır, `exitDurationMs()` sonra `attached` da `false`
|
|
40
48
|
* olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle
|
|
41
49
|
* AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i
|
|
42
50
|
* Dialog'un aksine bir "kapanışı ertele" kancası SUNMUYOR, bu yüzden
|
|
@@ -45,7 +53,7 @@ declare class Popover {
|
|
|
45
53
|
protected readonly attached: _angular_core.WritableSignal<boolean>;
|
|
46
54
|
protected readonly closing: _angular_core.WritableSignal<boolean>;
|
|
47
55
|
private exitTimer?;
|
|
48
|
-
protected readonly positions: _angular_core.Signal<ConnectedPosition[]>;
|
|
56
|
+
protected readonly positions: _angular_core.Signal<_angular_cdk_overlay.ConnectedPosition[]>;
|
|
49
57
|
protected readonly classes: _angular_core.Signal<string>;
|
|
50
58
|
constructor();
|
|
51
59
|
protected close(): void;
|
|
@@ -1,32 +1,53 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { MfTone } from '@mesgflow/ui-kit/core';
|
|
2
3
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
4
|
import { VariantProps } from 'class-variance-authority';
|
|
4
5
|
|
|
6
|
+
type ProgressVariant = 'linear' | 'ring';
|
|
7
|
+
type ProgressTone = Exclude<MfTone, 'neutral'>;
|
|
5
8
|
/**
|
|
6
|
-
* `<mf-progress [value]="42" />`
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* `<mf-progress [value]="42" />` · `<mf-progress indeterminate />` ·
|
|
10
|
+
* `<mf-progress variant="ring" [value]="72" showValue />`
|
|
11
|
+
*
|
|
12
|
+
* - `linear` (varsayılan): ince çubuk; belirsiz modda kayan şerit
|
|
13
|
+
* (`animate-progress-slide`, Table'ın yenileme göstergesiyle aynı).
|
|
14
|
+
* - `ring`: dairesel gösterge — `stroke-dashoffset` geçişiyle akıcı dolar,
|
|
15
|
+
* belirsiz modda döner (`animate-spin-slow`). `showValue` ortada yüzdeyi yazar.
|
|
16
|
+
* - `tone`: dolgu rengi (kota uyarısı, hata vb.).
|
|
17
|
+
*
|
|
18
|
+
* `role="progressbar"` + `aria-valuenow` (belirsizde yazılmaz) host'ta.
|
|
11
19
|
*/
|
|
12
20
|
declare class Progress {
|
|
13
21
|
readonly value: _angular_core.InputSignal<number>;
|
|
14
|
-
readonly indeterminate: _angular_core.
|
|
15
|
-
readonly size: _angular_core.InputSignal<"sm" | "md" | null | undefined>;
|
|
16
|
-
|
|
22
|
+
readonly indeterminate: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
23
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | null | undefined>;
|
|
24
|
+
readonly variant: _angular_core.InputSignal<ProgressVariant>;
|
|
25
|
+
readonly tone: _angular_core.InputSignal<ProgressTone>;
|
|
26
|
+
/** Yalnızca `ring`: ortada yüzde metni. */
|
|
27
|
+
readonly showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
28
|
+
/** `role="progressbar"` için erişilebilir ad — verilmezse `MF_PROGRESS_LABELS`. */
|
|
17
29
|
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
18
30
|
private readonly progressLabels;
|
|
19
31
|
protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
|
|
20
32
|
protected readonly clampedValue: _angular_core.Signal<number>;
|
|
21
|
-
protected readonly
|
|
33
|
+
protected readonly ring: _angular_core.Signal<{
|
|
34
|
+
size: number;
|
|
35
|
+
stroke: number;
|
|
36
|
+
}>;
|
|
37
|
+
protected readonly radius: _angular_core.Signal<number>;
|
|
38
|
+
protected readonly circumference: _angular_core.Signal<number>;
|
|
39
|
+
protected readonly dashOffset: _angular_core.Signal<number>;
|
|
40
|
+
protected readonly ringToneClass: _angular_core.Signal<string>;
|
|
41
|
+
protected readonly barToneClass: _angular_core.Signal<string>;
|
|
42
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
22
43
|
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>;
|
|
44
|
+
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; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
24
45
|
}
|
|
25
46
|
|
|
26
47
|
declare const progressTrackVariants: (props?: ({
|
|
27
|
-
size?: "sm" | "md" | null | undefined;
|
|
48
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
28
49
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
29
50
|
type ProgressSize = VariantProps<typeof progressTrackVariants>['size'];
|
|
30
51
|
|
|
31
52
|
export { Progress, progressTrackVariants };
|
|
32
|
-
export type { ProgressSize };
|
|
53
|
+
export type { ProgressSize, ProgressTone, ProgressVariant };
|
|
@@ -39,8 +39,8 @@ declare class RadioGroup<T = unknown> implements ControlValueAccessor {
|
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* `<input type="radio" mfRadio [value]="'pro'" />` — `Checkbox` (bkz.
|
|
42
|
-
* checkbox.ts) ile AYNI
|
|
43
|
-
*
|
|
42
|
+
* checkbox.ts) ile AYNI desen — native input + `mf-radio` görsel katmanı
|
|
43
|
+
* (styles/tokens/controls.css, yay eğrisiyle büyüyen nokta). Bir `mf-radio-group` ATASI ZORUNLU — `name`/`checked`/`disabled`
|
|
44
44
|
* DI ile ondan okunur (bkz. `radio-group.ts`'in JSDoc'u); grup dışında
|
|
45
45
|
* kullanılırsa `inject(RadioGroup)` hata fırlatır (fail-fast).
|
|
46
46
|
*/
|
|
@@ -18,6 +18,8 @@ import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
|
|
|
18
18
|
declare class SearchInput extends ValueAccessorBase<string> implements ControlValueAccessor {
|
|
19
19
|
readonly value: _angular_core.ModelSignal<string>;
|
|
20
20
|
readonly placeholder: _angular_core.InputSignal<string | undefined>;
|
|
21
|
+
/** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */
|
|
22
|
+
readonly inputId: _angular_core.InputSignal<string | undefined>;
|
|
21
23
|
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
22
24
|
readonly tooltipLabel: _angular_core.InputSignal<string | undefined>;
|
|
23
25
|
/** Tüketicinin gerçek veri çekme durumu — debounce bittikten sonra da spinner'ı sürdürür. */
|
|
@@ -66,7 +68,7 @@ declare class SearchInput extends ValueAccessorBase<string> implements ControlVa
|
|
|
66
68
|
protected clear(): void;
|
|
67
69
|
protected onEscape(): void;
|
|
68
70
|
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>;
|
|
71
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInput, "mf-search-input", ["mfSearchInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "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
72
|
}
|
|
71
73
|
|
|
72
74
|
export { SearchInput };
|
|
@@ -16,6 +16,10 @@ interface SegmentedOption<T> {
|
|
|
16
16
|
* `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —
|
|
17
17
|
* dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,
|
|
18
18
|
* içteki `ngToolbarWidgetGroup [multi]="false"`).
|
|
19
|
+
*
|
|
20
|
+
* Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay
|
|
21
|
+
* eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef
|
|
22
|
+
* `data-selected`.
|
|
19
23
|
*/
|
|
20
24
|
declare class SegmentedControl<T> extends ValueAccessorBase<T | null> implements ControlValueAccessor {
|
|
21
25
|
readonly options: _angular_core.InputSignal<SegmentedOption<T>[]>;
|
|
@@ -41,7 +41,7 @@ declare const sidebarVariants: (props?: ({
|
|
|
41
41
|
* yoksa 2px'lik ray aktifleşirken satırın geri kalanı kayardı (layout shift).
|
|
42
42
|
*
|
|
43
43
|
* Brand sınıfları (`group-data-[appearance=brand]/sidebar:…`) özgüllükte
|
|
44
|
-
* (0,2,0) — düz `text-fg-muted`/`hover:bg-
|
|
44
|
+
* (0,2,0) — düz `text-fg-muted`/`hover:bg-state-hover` (0,1,0) ve `dark:`
|
|
45
45
|
* (0,1,0) varyantlarının HER İKİSİNİ de cascade sırasından bağımsız yener,
|
|
46
46
|
* bu yüzden ayrı bir `dark:` ikizi yazmaya gerek yok (brand görünümü iki
|
|
47
47
|
* modda da AYNI).
|
|
@@ -37,4 +37,63 @@ declare const sliderHostVariants: (props?: ({
|
|
|
37
37
|
disabled?: boolean | null | undefined;
|
|
38
38
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
type RangeValue = readonly [number, number];
|
|
41
|
+
type Thumb = 0 | 1;
|
|
42
|
+
/**
|
|
43
|
+
* `<mf-range-slider [(value)]="price" [min]="0" [max]="1000" [step]="10" ariaLabel="Fiyat" />`
|
|
44
|
+
*
|
|
45
|
+
* İki tutamaçlı aralık seçici — WAI-ARIA APG "Multi-Thumb Slider" deseni:
|
|
46
|
+
* her tutamaç KENDİ `role="slider"` öğesidir ve sınırları diğerine bağlıdır
|
|
47
|
+
* (alt tutamacın `aria-valuemax`'ı üst tutamacın değeri, tersi de öyle) —
|
|
48
|
+
* ekran okuyucu aralığı doğru anlar, tutamaçlar birbirinin üstünden geçemez.
|
|
49
|
+
*
|
|
50
|
+
* - Klavye: ok tuşları adım, PageUp/PageDown 10 adım, Home/End sınır. RTL'de
|
|
51
|
+
* yatay oklar görsel yöne göre çevrilir.
|
|
52
|
+
* - Pointer: iz üzerinde herhangi bir yere basınca EN YAKIN tutamaç oraya
|
|
53
|
+
* atlar ve sürüklenir.
|
|
54
|
+
* - `showValue`: odak/sürükleme sırasında tutamacın üstünde değer balonu
|
|
55
|
+
* (`valueFormatter` ile biçimlenir; aynı metin `aria-valuetext` olur).
|
|
56
|
+
* - `minDistance`: iki tutamaç arasındaki en küçük fark.
|
|
57
|
+
*/
|
|
58
|
+
declare class RangeSlider extends ValueAccessorBase<RangeValue> implements ControlValueAccessor {
|
|
59
|
+
readonly value: _angular_core.ModelSignal<RangeValue>;
|
|
60
|
+
readonly min: _angular_core.InputSignal<number>;
|
|
61
|
+
readonly max: _angular_core.InputSignal<number>;
|
|
62
|
+
readonly step: _angular_core.InputSignal<number>;
|
|
63
|
+
/** İki tutamaç arasındaki en küçük fark (adım biriminde değil, değer biriminde). */
|
|
64
|
+
readonly minDistance: _angular_core.InputSignal<number>;
|
|
65
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
66
|
+
readonly showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
67
|
+
/** Değer balonu ve `aria-valuetext` biçimi — ör. `v => '$' + v`. */
|
|
68
|
+
readonly valueFormatter: _angular_core.InputSignal<(value: number) => string>;
|
|
69
|
+
/** Grup için erişilebilir ad; tutamaç adları `"{ad} — en az/en çok"` olarak türetilir. */
|
|
70
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
71
|
+
/** Tutamaç adlarını tamamen ezmek için (i18n). */
|
|
72
|
+
readonly minThumbLabel: _angular_core.InputSignal<string | undefined>;
|
|
73
|
+
readonly maxThumbLabel: _angular_core.InputSignal<string | undefined>;
|
|
74
|
+
protected readonly thumbs: Thumb[];
|
|
75
|
+
protected readonly thumbClass: string;
|
|
76
|
+
protected readonly active: _angular_core.WritableSignal<Thumb | null>;
|
|
77
|
+
protected readonly focused: _angular_core.WritableSignal<Thumb | null>;
|
|
78
|
+
private readonly host;
|
|
79
|
+
protected readonly percents: _angular_core.Signal<readonly [number, number]>;
|
|
80
|
+
private readonly labels;
|
|
81
|
+
private readonly thumbName;
|
|
82
|
+
protected readonly minLabel: _angular_core.Signal<string>;
|
|
83
|
+
protected readonly maxLabel: _angular_core.Signal<string>;
|
|
84
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
85
|
+
protected format(value: number): string;
|
|
86
|
+
writeValue(value: RangeValue | null): void;
|
|
87
|
+
private snap;
|
|
88
|
+
private setThumb;
|
|
89
|
+
protected onKeydown(event: KeyboardEvent, thumb: Thumb): void;
|
|
90
|
+
protected onPointerDown(event: PointerEvent): void;
|
|
91
|
+
protected onPointerMove(event: PointerEvent): void;
|
|
92
|
+
protected onPointerUp(event: PointerEvent): void;
|
|
93
|
+
private rawFromPointer;
|
|
94
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RangeSlider, never>;
|
|
95
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RangeSlider, "mf-range-slider", ["mfRangeSlider"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "minDistance": { "alias": "minDistance"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "valueFormatter": { "alias": "valueFormatter"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "minThumbLabel": { "alias": "minThumbLabel"; "required": false; "isSignal": true; }; "maxThumbLabel": { "alias": "maxThumbLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export { RangeSlider, Slider, sliderHostVariants };
|
|
99
|
+
export type { RangeValue };
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
|
|
2
|
+
import * as _angular_core from '@angular/core';
|
|
3
|
+
import { TemplateRef } from '@angular/core';
|
|
4
|
+
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
5
|
+
|
|
6
|
+
interface SortableMove {
|
|
7
|
+
previousIndex: number;
|
|
8
|
+
currentIndex: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* `<mf-sortable-list [(items)]="tasks" [itemLabel]="labelOf">
|
|
12
|
+
* <ng-template let-task>{{ task.title }}</ng-template>
|
|
13
|
+
* </mf-sortable-list>`
|
|
14
|
+
*
|
|
15
|
+
* Sürükle-bırak ile yeniden sıralanan liste — CDK drag-drop üstüne ERİŞİLEBİLİR
|
|
16
|
+
* klavye modu eklenir (CDK'da yok): tutamaca odaklan → Boşluk/Enter ile al →
|
|
17
|
+
* ↑/↓ taşı → Boşluk/Enter bırak · Escape geri al. Her adım `LiveAnnouncer`
|
|
18
|
+
* ile duyurulur (WCAG 2.1.1 — sürükle-bırakın klavye eşdeğeri).
|
|
19
|
+
*
|
|
20
|
+
* `itemLabel`: duyurular ve tutamaç adı için öğenin okunur adı.
|
|
21
|
+
*/
|
|
22
|
+
declare class SortableList<T> {
|
|
23
|
+
readonly items: _angular_core.ModelSignal<T[]>;
|
|
24
|
+
/** Duyurular ve tutamaç adı için okunur ad. */
|
|
25
|
+
readonly itemLabel: _angular_core.InputSignal<(item: T) => string>;
|
|
26
|
+
readonly trackBy: _angular_core.InputSignal<(item: T, index: number) => unknown>;
|
|
27
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
28
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
29
|
+
readonly moved: _angular_core.OutputEmitterRef<SortableMove>;
|
|
30
|
+
protected readonly template: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
31
|
+
protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfSortableLabels>;
|
|
32
|
+
protected readonly hintId: string;
|
|
33
|
+
protected readonly grabbed: _angular_core.WritableSignal<number | null>;
|
|
34
|
+
private readonly announcer;
|
|
35
|
+
private readonly host;
|
|
36
|
+
private grabStart;
|
|
37
|
+
protected handleLabel(item: T): string;
|
|
38
|
+
protected onDrop(event: CdkDragDrop<T[]>): void;
|
|
39
|
+
protected onKeydown(event: KeyboardEvent, index: number): void;
|
|
40
|
+
protected cancelOnBlur(): void;
|
|
41
|
+
private commit;
|
|
42
|
+
/** Taşıma sonrası `@for` DOM'u yeniden sıraladığında odağı taşınan tutamakta tut. */
|
|
43
|
+
private refocus;
|
|
44
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SortableList<any>, never>;
|
|
45
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SortableList<any>, "mf-sortable-list", ["mfSortableList"], { "items": { "alias": "items"; "required": true; "isSignal": true; }; "itemLabel": { "alias": "itemLabel"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "moved": "moved"; }, ["template"], never, true, never>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface KanbanColumn<T> {
|
|
49
|
+
id: string;
|
|
50
|
+
title: string;
|
|
51
|
+
items: T[];
|
|
52
|
+
/** Sütun başlığındaki nokta rengi. */
|
|
53
|
+
tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'help';
|
|
54
|
+
/** WIP sınırı — aşılınca sayaç uyarı tonuna döner. */
|
|
55
|
+
limit?: number;
|
|
56
|
+
}
|
|
57
|
+
interface KanbanMove<T> {
|
|
58
|
+
item: T;
|
|
59
|
+
from: string;
|
|
60
|
+
to: string;
|
|
61
|
+
index: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* `<mf-kanban [(columns)]="board" [itemLabel]="titleOf" (moved)="save($event)">
|
|
65
|
+
* <ng-template let-card>…kart içeriği…</ng-template>
|
|
66
|
+
* </mf-kanban>`
|
|
67
|
+
*
|
|
68
|
+
* Sütunlar arası sürükle-bırak (CDK `cdkDropListGroup`) + klavye modu:
|
|
69
|
+
* karta odaklan → Boşluk/Enter al → ↑/↓ sütun içinde, ←/→ sütunlar arası →
|
|
70
|
+
* Boşluk/Enter bırak · Escape geri al. Her adım ekran okuyucuya duyurulur.
|
|
71
|
+
* Sütunlar yatay kaydırılır (mobilde de kullanılabilir).
|
|
72
|
+
*/
|
|
73
|
+
declare class Kanban<T> {
|
|
74
|
+
readonly columns: _angular_core.ModelSignal<KanbanColumn<T>[]>;
|
|
75
|
+
readonly itemLabel: _angular_core.InputSignal<(item: T) => string>;
|
|
76
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
77
|
+
readonly moved: _angular_core.OutputEmitterRef<KanbanMove<T>>;
|
|
78
|
+
protected readonly template: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
79
|
+
protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfSortableLabels>;
|
|
80
|
+
protected readonly hintId: string;
|
|
81
|
+
private readonly grabbed;
|
|
82
|
+
private grabOrigin;
|
|
83
|
+
private readonly announcer;
|
|
84
|
+
private readonly host;
|
|
85
|
+
protected dot(column: KanbanColumn<T>): string;
|
|
86
|
+
protected isGrabbed(c: number, i: number): boolean;
|
|
87
|
+
protected onDrop(event: CdkDragDrop<string>): void;
|
|
88
|
+
protected onKeydown(event: KeyboardEvent, c: number, i: number): void;
|
|
89
|
+
private move;
|
|
90
|
+
private transfer;
|
|
91
|
+
private say;
|
|
92
|
+
private focusCard;
|
|
93
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Kanban<any>, never>;
|
|
94
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Kanban<any>, "mf-kanban", ["mfKanban"], { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "itemLabel": { "alias": "itemLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; "moved": "moved"; }, ["template"], never, true, never>;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** `'{item} moved to {position}'` gibi şablonları doldurur. */
|
|
98
|
+
declare function fillTemplate(template: string, values: Record<string, string | number>): string;
|
|
99
|
+
/** Diziden bir öğeyi taşır — yeni dizi döner (orijinal değişmez). */
|
|
100
|
+
declare function moveItem<T>(list: readonly T[], from: number, to: number): T[];
|
|
101
|
+
|
|
102
|
+
export { Kanban, SortableList, fillTemplate, moveItem };
|
|
103
|
+
export type { KanbanColumn, KanbanMove, SortableMove };
|
|
@@ -4,15 +4,12 @@ import { MfSize, MfTone } from '@mesgflow/ui-kit/core';
|
|
|
4
4
|
type SpinnerSize = 'xs' | MfSize;
|
|
5
5
|
type SpinnerTone = MfTone | 'current';
|
|
6
6
|
/**
|
|
7
|
-
* `<mf-spinner size="sm" />` — dönen yüklenme göstergesi
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* görsel dil konuşuyor.
|
|
7
|
+
* `<mf-spinner size="sm" />` — dönen yüklenme göstergesi: iki katmanlı SVG
|
|
8
|
+
* halka (soluk iz + dönen yay). v0.7 öncesi Material Symbols ligature'ıydı —
|
|
9
|
+
* font yüklenene kadar "progress_activity" METNİ görünüyordu (FOUT) ve
|
|
10
|
+
* ikon seti değişince (Lucide) kırılıyordu; SVG her ikisinden bağımsız.
|
|
12
11
|
*
|
|
13
|
-
* `role="status"` + `aria-label` HOST'ta
|
|
14
|
-
* gereği her zaman `aria-hidden` — bkz. icon.ts) — ekran okuyucu ligature
|
|
15
|
-
* kaynak metnini ("progress_activity") DEĞİL, buradaki anlamlı etiketi anons eder.
|
|
12
|
+
* `role="status"` + `aria-label` HOST'ta, SVG `aria-hidden`.
|
|
16
13
|
*/
|
|
17
14
|
declare class Spinner {
|
|
18
15
|
readonly size: _angular_core.InputSignal<SpinnerSize>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
interface SplitButtonItem<V = string> {
|
|
4
|
+
label: string;
|
|
5
|
+
value: V;
|
|
6
|
+
icon?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
/** Tehlikeli eylem (Sil) — kırmızı metin. */
|
|
9
|
+
danger?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* `<mf-split-button label="Kaydet" [items]="more" (primaryClick)="save()" (itemSelect)="run($event)" />`
|
|
13
|
+
*
|
|
14
|
+
* Birincil eylem + ilgili ikincil eylemler menüsü (GitHub "Merge ▾", Gmail
|
|
15
|
+
* "Gönder ▾"). İki gerçek düğme: soldaki eylemi çalıştırır, sağdaki
|
|
16
|
+
* (`aria-haspopup="menu"`) menüyü açar — ekran okuyucu ikisini ayrı duyurur.
|
|
17
|
+
*
|
|
18
|
+
* Menü `@angular/aria/menu` (ok tuşları, typeahead, Escape) + `mf-popover`
|
|
19
|
+
* (tetikleyiciden büyüyen panel). Öğeler VERİ olarak verilir: `mfMenuItem`
|
|
20
|
+
* içerik projeksiyonuyla aria menüsüne bağlanamadığı için bu bileşen onları
|
|
21
|
+
* kendi şablonunda çizer.
|
|
22
|
+
*/
|
|
23
|
+
declare class SplitButton<V = string> {
|
|
24
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
25
|
+
readonly items: _angular_core.InputSignal<SplitButtonItem<V>[]>;
|
|
26
|
+
readonly icon: _angular_core.InputSignal<string>;
|
|
27
|
+
readonly tone: _angular_core.InputSignal<"primary" | "neutral" | "success" | "warning" | "danger" | "info" | "help" | null | undefined>;
|
|
28
|
+
readonly appearance: _angular_core.InputSignal<"filled" | "soft" | "outlined" | "ghost" | "text" | "link" | null | undefined>;
|
|
29
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
|
|
30
|
+
readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
31
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
32
|
+
/** Menü düğmesinin erişilebilir adı — verilmezse `MF_SPLIT_BUTTON_LABELS`. */
|
|
33
|
+
readonly menuLabel: _angular_core.InputSignal<string | undefined>;
|
|
34
|
+
readonly primaryClick: _angular_core.OutputEmitterRef<void>;
|
|
35
|
+
readonly itemSelect: _angular_core.OutputEmitterRef<V>;
|
|
36
|
+
private readonly labels;
|
|
37
|
+
protected readonly effectiveMenuLabel: _angular_core.Signal<string>;
|
|
38
|
+
/** Bitişik iki düğme: iç köşeler kare, ayırıcı çizgi (dolu görünümde açık ton). */
|
|
39
|
+
protected readonly primaryClass: _angular_core.Signal<string>;
|
|
40
|
+
protected readonly toggleClass: _angular_core.Signal<string>;
|
|
41
|
+
protected onSelect(value: V): void;
|
|
42
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SplitButton<any>, never>;
|
|
43
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SplitButton<any>, "mf-split-button", ["mfSplitButton"], { "label": { "alias": "label"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "menuLabel": { "alias": "menuLabel"; "required": false; "isSignal": true; }; }, { "primaryClick": "primaryClick"; "itemSelect": "itemSelect"; }, never, never, true, never>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { SplitButton };
|
|
47
|
+
export type { SplitButtonItem };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ElementRef } from '@angular/core';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* `<mf-splitter><div splitterPane1>Sol</div><div splitterPane2>Sağ</div></mf-splitter>`
|
|
@@ -37,4 +38,66 @@ declare class Splitter {
|
|
|
37
38
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Splitter, "mf-splitter", ["mfSplitter"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "initialSplit": { "alias": "split"; "required": false; "isSignal": true; }; }, {}, never, ["[splitterPane1]", "[splitterPane2]"], true, never>;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
declare class Panel {
|
|
42
|
+
/** % */
|
|
43
|
+
readonly minSize: _angular_core.InputSignal<number>;
|
|
44
|
+
/** % */
|
|
45
|
+
readonly maxSize: _angular_core.InputSignal<number>;
|
|
46
|
+
/** Grup tarafından yazılır (%). */
|
|
47
|
+
readonly size: _angular_core.WritableSignal<number>;
|
|
48
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Panel, never>;
|
|
49
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Panel, "mf-panel", ["mfPanel"], { "minSize": { "alias": "minSize"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* `<mf-panel-group [(sizes)]="layout" orientation="horizontal">
|
|
53
|
+
* <mf-panel [minSize]="15">Gezgin</mf-panel>
|
|
54
|
+
* <mf-panel-resizer />
|
|
55
|
+
* <mf-panel>Editör</mf-panel>
|
|
56
|
+
* <mf-panel-resizer />
|
|
57
|
+
* <mf-panel [minSize]="20">Önizleme</mf-panel>
|
|
58
|
+
* </mf-panel-group>`
|
|
59
|
+
*
|
|
60
|
+
* N panelli yeniden boyutlandırma (IDE/e-posta editörü düzeni). `sizes`
|
|
61
|
+
* yüzde dizisi (toplam 100); her ayırıcı iki komşu paneli etkiler.
|
|
62
|
+
* Ayırıcı WAI-ARIA "Window Splitter": `role="separator"` + `aria-valuenow`
|
|
63
|
+
* (sol panelin yüzdesi) + ok tuşları (Shift ile 10), Home/End, çift tık eşitler.
|
|
64
|
+
* `minSize`/`maxSize` panel başına sınır. `sizes` verilmezse eşit bölünür.
|
|
65
|
+
*/
|
|
66
|
+
declare class PanelGroup {
|
|
67
|
+
readonly sizes: _angular_core.ModelSignal<number[]>;
|
|
68
|
+
readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
|
|
69
|
+
readonly panels: _angular_core.Signal<readonly Panel[]>;
|
|
70
|
+
readonly resizers: _angular_core.Signal<readonly PanelResizer[]>;
|
|
71
|
+
readonly host: ElementRef<HTMLElement>;
|
|
72
|
+
/** Etkin boyutlar — `sizes` panel sayısıyla uyuşmuyorsa eşit bölünmüş. */
|
|
73
|
+
readonly resolved: _angular_core.Signal<number[]>;
|
|
74
|
+
constructor();
|
|
75
|
+
/** `index` numaralı ayırıcıyı `delta` yüzde kaydırır (komşu iki panel arasında). */
|
|
76
|
+
resize(index: number, delta: number): void;
|
|
77
|
+
/** İki komşuyu eşitler (çift tık). */
|
|
78
|
+
equalize(index: number): void;
|
|
79
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PanelGroup, never>;
|
|
80
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PanelGroup, "mf-panel-group", ["mfPanelGroup"], { "sizes": { "alias": "sizes"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "sizes": "sizesChange"; }, ["panels", "resizers"], ["*"], true, never>;
|
|
81
|
+
}
|
|
82
|
+
declare class PanelResizer {
|
|
83
|
+
protected readonly group: PanelGroup;
|
|
84
|
+
private readonly labels;
|
|
85
|
+
private readonly el;
|
|
86
|
+
readonly index: _angular_core.WritableSignal<number>;
|
|
87
|
+
private startPos;
|
|
88
|
+
private startSize;
|
|
89
|
+
private dragging;
|
|
90
|
+
protected readonly valueNow: _angular_core.Signal<number>;
|
|
91
|
+
protected readonly valueMin: _angular_core.Signal<number>;
|
|
92
|
+
protected readonly valueMax: _angular_core.Signal<number>;
|
|
93
|
+
protected readonly label: _angular_core.Signal<string>;
|
|
94
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
95
|
+
protected onKeydown(e: Event): void;
|
|
96
|
+
protected onPointerDown(e: Event): void;
|
|
97
|
+
protected onPointerMove(e: Event): void;
|
|
98
|
+
protected onPointerUp(e: Event): void;
|
|
99
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PanelResizer, never>;
|
|
100
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PanelResizer, "mf-panel-resizer", ["mfPanelResizer"], {}, {}, never, never, true, never>;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export { Panel, PanelGroup, PanelResizer, Splitter };
|
|
@@ -39,6 +39,9 @@ declare class StatTile {
|
|
|
39
39
|
readonly trendLabel: _angular_core.InputSignal<string>;
|
|
40
40
|
protected readonly iconClasses: _angular_core.Signal<string>;
|
|
41
41
|
protected readonly deltaIcon: _angular_core.Signal<string>;
|
|
42
|
+
private readonly labels;
|
|
43
|
+
/** Yön ikon ile ÇİZİLİR ama ekran okuyucuya metin olarak da söylenir. */
|
|
44
|
+
protected readonly deltaText: _angular_core.Signal<string>;
|
|
42
45
|
protected readonly deltaClasses: _angular_core.Signal<string>;
|
|
43
46
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatTile, never>;
|
|
44
47
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatTile, "mf-stat-tile", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "deltaDirection": { "alias": "deltaDirection"; "required": false; "isSignal": true; }; "upIsGood": { "alias": "upIsGood"; "required": false; "isSignal": true; }; "deltaCaption": { "alias": "deltaCaption"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "trendLabel": { "alias": "trendLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
@@ -1,48 +1,70 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
+
import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
|
|
2
3
|
|
|
4
|
+
type StepperOrientation = 'horizontal' | 'vertical';
|
|
3
5
|
/**
|
|
4
|
-
* `<mf-step label="Hesap"
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
private readonly stepper;
|
|
14
|
-
protected readonly index: number;
|
|
15
|
-
protected readonly isComplete: _angular_core.Signal<boolean>;
|
|
16
|
-
protected readonly isCurrent: _angular_core.Signal<boolean>;
|
|
17
|
-
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
18
|
-
protected circleClasses(): string;
|
|
19
|
-
protected labelClasses(): string;
|
|
20
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Step, never>;
|
|
21
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Step, "mf-step", ["mfStep"], { "label": { "alias": "label"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* `<mf-stepper [current]="1"><mf-step label="Hesap" /><mf-step label="Ödeme" /></mf-stepper>`
|
|
6
|
+
* `<mf-stepper [(current)]="step" clickable linear><mf-step label="Hesap" /><mf-step label="Ödeme" /></mf-stepper>`
|
|
7
|
+
*
|
|
8
|
+
* İlerleme göstergesi + (isteğe bağlı) gezinme:
|
|
9
|
+
* - `current` iki yönlü model; `next()` / `prev()` / `goTo(i)` programatik API
|
|
10
|
+
* (`#stepper="mfStepper"` ile şablondan çağrılır).
|
|
11
|
+
* - `clickable`: adımlar düğme olur, tıklayınca o adıma gider.
|
|
12
|
+
* - `linear`: yalnızca tamamlanmış adımlara ve BİR sonraki adıma gidilebilir
|
|
13
|
+
* (sihirbazın atlanmasını önler).
|
|
14
|
+
* - `orientation="vertical"`: dikey düzen (uzun sihirbazlar, yan panel).
|
|
26
15
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* dışarıda yaşar). Her `mf-step` kendi index'ini KURULUŞTA bir kez
|
|
30
|
-
* `registerStep()` ile alır — `contentChildren` yerine basit bir kayıt-sırası
|
|
31
|
-
* sayacı, `Step`'in `Stepper`'ı import ETMESİ yeterli (tersi YOK, döngüsel
|
|
32
|
-
* bir tip bağımlılığı kurulmuyor).
|
|
16
|
+
* Her `mf-step` kendi index'ini kuruluşta `registerStep()` ile alır — `Step`
|
|
17
|
+
* `Stepper`'ı import eder, tersi değil (döngüsel bağımlılık yok).
|
|
33
18
|
*/
|
|
34
19
|
declare class Stepper {
|
|
35
|
-
readonly current: _angular_core.
|
|
20
|
+
readonly current: _angular_core.ModelSignal<number>;
|
|
36
21
|
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
37
|
-
|
|
22
|
+
readonly clickable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
23
|
+
readonly linear: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
24
|
+
readonly orientation: _angular_core.InputSignal<StepperOrientation>;
|
|
25
|
+
readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfStepperLabels>;
|
|
38
26
|
protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
|
|
39
|
-
private
|
|
27
|
+
private readonly count;
|
|
28
|
+
/** Kayıtlı adım sayısı. */
|
|
29
|
+
readonly stepCount: _angular_core.Signal<number>;
|
|
30
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
40
31
|
/** Her `mf-step` kurulumda BİR KEZ çağırır — kendi (sıradaki) index'ini alır. */
|
|
41
32
|
registerStep(): number;
|
|
42
33
|
isComplete(index: number): boolean;
|
|
43
34
|
isCurrent(index: number): boolean;
|
|
35
|
+
canGoTo(index: number): boolean;
|
|
36
|
+
goTo(index: number): void;
|
|
37
|
+
next(): void;
|
|
38
|
+
prev(): void;
|
|
44
39
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Stepper, never>;
|
|
45
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Stepper, "mf-stepper", ["mfStepper"], { "current": { "alias": "current"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
40
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Stepper, "mf-stepper", ["mfStepper"], { "current": { "alias": "current"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "current": "currentChange"; }, never, ["*"], true, never>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type StepState = 'auto' | 'completed' | 'error';
|
|
44
|
+
/**
|
|
45
|
+
* `<mf-step label="Hesap" description="Bilgilerinizi girin" [state]="'error'" optional />`
|
|
46
|
+
* — bir `mf-stepper` ATASI ZORUNLU. Bağlayıcı çizgi kendi `::after`'ı
|
|
47
|
+
* (`last:after:hidden` son adımda gizler).
|
|
48
|
+
*
|
|
49
|
+
* `clickable` stepper'da adım bir `<button>` olur (gidilemeyen adımlar
|
|
50
|
+
* devre dışı). Durum ikonları ekran okuyucuya metinle de söylenir.
|
|
51
|
+
*/
|
|
52
|
+
declare class Step {
|
|
53
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
54
|
+
readonly description: _angular_core.InputSignal<string>;
|
|
55
|
+
/** `auto`: current'a göre; `completed`/`error` elle zorlanır (doğrulama hatası vb.). */
|
|
56
|
+
readonly state: _angular_core.InputSignal<StepState>;
|
|
57
|
+
readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
58
|
+
protected readonly stepper: Stepper;
|
|
59
|
+
protected readonly index: number;
|
|
60
|
+
protected readonly isCurrent: _angular_core.Signal<boolean>;
|
|
61
|
+
protected readonly resolvedState: _angular_core.Signal<StepState>;
|
|
62
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
63
|
+
protected circleClasses(): string;
|
|
64
|
+
protected labelClasses(): string;
|
|
65
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Step, never>;
|
|
66
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Step, "mf-step", ["mfStep"], { "label": { "alias": "label"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
46
67
|
}
|
|
47
68
|
|
|
48
69
|
export { Step, Stepper };
|
|
70
|
+
export type { StepState, StepperOrientation };
|
|
@@ -489,6 +489,8 @@ declare class Table<T> {
|
|
|
489
489
|
*/
|
|
490
490
|
protected onSortClick(column: TableColumn<T>, event?: MouseEvent): void;
|
|
491
491
|
protected sortDirectionFor(field: string): SortDirection | null;
|
|
492
|
+
/** WAI-ARIA `aria-sort` — ekran okuyucu sütunun sıralama yönünü duyurur (yalnızca sıralanabilir sütunlarda). */
|
|
493
|
+
protected ariaSortFor(field: string): 'ascending' | 'descending' | 'none';
|
|
492
494
|
/** 1 tabanlı sıra konumu — yalnızca 2+ alan aktifken gösterilir (tekil sıralamada numara gürültü olurdu). */
|
|
493
495
|
protected sortOrderFor(field: string): number | null;
|
|
494
496
|
protected onFiltersChange(filters: AppliedFilter[]): void;
|