@mesgflow/ui-kit 0.8.0 → 0.10.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/fesm2022/mesgflow-ui-kit-badge.mjs +20 -6
- package/fesm2022/mesgflow-ui-kit-badge.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-blocks.mjs +1 -1
- package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-combobox.mjs +1 -1
- package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-field.mjs +36 -5
- package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-input.mjs +104 -96
- package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-menu.mjs +198 -16
- package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-password-input.mjs +17 -6
- package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-popover.mjs +43 -13
- package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +31 -19
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-split-button.mjs +1 -1
- package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -1
- package/package.json +1 -1
- package/tokens.json +1583 -1583
- package/types/mesgflow-ui-kit-badge.d.ts +9 -3
- package/types/mesgflow-ui-kit-field.d.ts +24 -2
- package/types/mesgflow-ui-kit-input.d.ts +8 -6
- package/types/mesgflow-ui-kit-menu.d.ts +64 -8
- package/types/mesgflow-ui-kit-password-input.d.ts +11 -2
- package/types/mesgflow-ui-kit-popover.d.ts +32 -7
- package/types/mesgflow-ui-kit-segmented-control.d.ts +19 -11
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i1 from '@angular/cdk/overlay';
|
|
2
|
-
import { OverlayModule } from '@angular/cdk/overlay';
|
|
2
|
+
import { OverlayModule, CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { input, model, output, signal, computed, effect, untracked, Component } from '@angular/core';
|
|
4
|
+
import { input, model, output, signal, computed, ElementRef, effect, untracked, Component, inject, Directive } from '@angular/core';
|
|
5
5
|
import { overlayPositions, cn, exitDurationMs } from '@mesgflow/ui-kit/core';
|
|
6
6
|
import { cva } from 'class-variance-authority';
|
|
7
7
|
|
|
@@ -30,8 +30,9 @@ const popoverPanelVariants = cva('overflow-auto rounded-lg border border-hairlin
|
|
|
30
30
|
* Popover'ın panel içeriğiyle nasıl kompoze edeceğine karar vermeli, ayrı ve
|
|
31
31
|
* her ekranın tarayıcıda tek tek doğrulanmasını gerektiren bir iş.
|
|
32
32
|
*
|
|
33
|
-
* `origin
|
|
34
|
-
*
|
|
33
|
+
* `origin`: kitin `mfPopoverOrigin` referansı (tüketici `@angular/cdk` import
|
|
34
|
+
* etmez), geriye uyumlu olarak `cdkOverlayOrigin` ya da düz bir eleman — bkz.
|
|
35
|
+
* `PopoverOriginRef`.
|
|
35
36
|
*/
|
|
36
37
|
class Popover {
|
|
37
38
|
origin = input.required(/* @ts-ignore */
|
|
@@ -67,6 +68,16 @@ class Popover {
|
|
|
67
68
|
closing = signal(false, /* @ts-ignore */
|
|
68
69
|
...(ngDevMode ? [{ debugName: "closing" }] : /* istanbul ignore next */ []));
|
|
69
70
|
exitTimer;
|
|
71
|
+
/** CDK'ya verilen çapa — `cdkConnectedOverlayOrigin` bir `ElementRef`'i doğrudan kabul eder. */
|
|
72
|
+
anchor = computed(() => {
|
|
73
|
+
const origin = this.origin();
|
|
74
|
+
return origin instanceof ElementRef
|
|
75
|
+
? origin
|
|
76
|
+
: origin instanceof HTMLElement
|
|
77
|
+
? new ElementRef(origin)
|
|
78
|
+
: origin.elementRef;
|
|
79
|
+
}, /* @ts-ignore */
|
|
80
|
+
...(ngDevMode ? [{ debugName: "anchor" }] : /* istanbul ignore next */ []));
|
|
70
81
|
positions = computed(() => {
|
|
71
82
|
const placement = this.placement();
|
|
72
83
|
return overlayPositions(placement, placement === 'right-start' ? 8 : 4);
|
|
@@ -107,14 +118,12 @@ class Popover {
|
|
|
107
118
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: Popover, isStandalone: true, selector: "mf-popover", inputs: { origin: { classPropertyName: "origin", publicName: "origin", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, matchTriggerWidth: { classPropertyName: "matchTriggerWidth", publicName: "matchTriggerWidth", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", closed: "closed" }, host: { classAttribute: "contents" }, exportAs: ["mfPopover"], ngImport: i0, template: `
|
|
108
119
|
<ng-template
|
|
109
120
|
cdkConnectedOverlay
|
|
110
|
-
[cdkConnectedOverlayOrigin]="
|
|
121
|
+
[cdkConnectedOverlayOrigin]="anchor()"
|
|
111
122
|
[cdkConnectedOverlayOpen]="attached()"
|
|
112
123
|
[cdkConnectedOverlayPositions]="positions()"
|
|
113
124
|
[cdkConnectedOverlayHasBackdrop]="hasBackdrop()"
|
|
114
125
|
cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
|
|
115
|
-
[cdkConnectedOverlayMinWidth]="
|
|
116
|
-
matchTriggerWidth() ? origin().elementRef.nativeElement.offsetWidth : null
|
|
117
|
-
"
|
|
126
|
+
[cdkConnectedOverlayMinWidth]="matchTriggerWidth() ? anchor().nativeElement.offsetWidth : 0"
|
|
118
127
|
(backdropClick)="close()"
|
|
119
128
|
(detach)="close()"
|
|
120
129
|
>
|
|
@@ -140,14 +149,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
140
149
|
template: `
|
|
141
150
|
<ng-template
|
|
142
151
|
cdkConnectedOverlay
|
|
143
|
-
[cdkConnectedOverlayOrigin]="
|
|
152
|
+
[cdkConnectedOverlayOrigin]="anchor()"
|
|
144
153
|
[cdkConnectedOverlayOpen]="attached()"
|
|
145
154
|
[cdkConnectedOverlayPositions]="positions()"
|
|
146
155
|
[cdkConnectedOverlayHasBackdrop]="hasBackdrop()"
|
|
147
156
|
cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
|
|
148
|
-
[cdkConnectedOverlayMinWidth]="
|
|
149
|
-
matchTriggerWidth() ? origin().elementRef.nativeElement.offsetWidth : null
|
|
150
|
-
"
|
|
157
|
+
[cdkConnectedOverlayMinWidth]="matchTriggerWidth() ? anchor().nativeElement.offsetWidth : 0"
|
|
151
158
|
(backdropClick)="close()"
|
|
152
159
|
(detach)="close()"
|
|
153
160
|
>
|
|
@@ -165,9 +172,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
165
172
|
}]
|
|
166
173
|
}], ctorParameters: () => [], propDecorators: { origin: [{ type: i0.Input, args: [{ isSignal: true, alias: "origin", required: true }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], matchTriggerWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "matchTriggerWidth", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
167
174
|
|
|
175
|
+
/**
|
|
176
|
+
* `<button #trigger="mfPopoverOrigin" mfPopoverOrigin (click)="open.set(true)">…</button>
|
|
177
|
+
* <mf-popover [origin]="trigger" [(open)]="open">…</mf-popover>`
|
|
178
|
+
*
|
|
179
|
+
* `mf-popover`'ın `[origin]`'i için kitin kendi çapası — tüketici `@angular/cdk`
|
|
180
|
+
* import etmeden `cdkOverlayOrigin` ile aynı işi görür (host directive olarak onu
|
|
181
|
+
* taşır). `[origin]` ayrıca bir `HTMLElement`/`ElementRef` (`#ref` şablon
|
|
182
|
+
* referansı) de kabul eder.
|
|
183
|
+
*/
|
|
184
|
+
class PopoverOrigin {
|
|
185
|
+
elementRef = inject(ElementRef);
|
|
186
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: PopoverOrigin, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
187
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: PopoverOrigin, isStandalone: true, selector: "[mfPopoverOrigin]", exportAs: ["mfPopoverOrigin"], hostDirectives: [{ directive: i1.CdkOverlayOrigin }], ngImport: i0 });
|
|
188
|
+
}
|
|
189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: PopoverOrigin, decorators: [{
|
|
190
|
+
type: Directive,
|
|
191
|
+
args: [{
|
|
192
|
+
selector: '[mfPopoverOrigin]',
|
|
193
|
+
exportAs: 'mfPopoverOrigin',
|
|
194
|
+
hostDirectives: [CdkOverlayOrigin],
|
|
195
|
+
}]
|
|
196
|
+
}] });
|
|
197
|
+
|
|
168
198
|
/**
|
|
169
199
|
* Generated bundle index. Do not edit.
|
|
170
200
|
*/
|
|
171
201
|
|
|
172
|
-
export { Popover, popoverPanelVariants };
|
|
202
|
+
export { Popover, PopoverOrigin, popoverPanelVariants };
|
|
173
203
|
//# sourceMappingURL=mesgflow-ui-kit-popover.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-popover.mjs","sources":["../../../projects/ui-kit/popover/popover.variants.ts","../../../projects/ui-kit/popover/popover.ts","../../../projects/ui-kit/popover/mesgflow-ui-kit-popover.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const popoverPanelVariants = cva(\r\n 'overflow-auto rounded-lg border border-hairline bg-overlay shadow-2',\r\n {\r\n variants: {\r\n padding: {\r\n none: 'p-0',\r\n sm: 'p-1',\r\n md: 'p-2',\r\n lg: 'p-3',\r\n },\r\n },\r\n defaultVariants: { padding: 'sm' },\r\n },\r\n);\r\n\r\nexport type PopoverPadding = VariantProps<typeof popoverPanelVariants>['padding'];\r\n","import { CdkOverlayOrigin, OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { cn, exitDurationMs, overlayPositions, type MfPlacement } from '@mesgflow/ui-kit/core';\r\nimport { popoverPanelVariants, type PopoverPadding } from './popover.variants';\r\n\r\n/**\r\n * Tüm `MfPlacement` değerleri — `left`/`right` MANTIKSAL (RTL'de çevrilir).\r\n * `right-start`: tetikleyicinin ÜSTÜYLE hizalı (Sidebar daraltılmış nav\r\n * flyout'u gibi çok satırlı panellerde `right`in dikey ortalaması paneli\r\n * beklenmedik yönde kaydırır), 8px boşlukla.\r\n */\r\nexport type PopoverPlacement = MfPlacement;\r\n\r\n/**\r\n * `<button cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" (click)=\"open.set(true)\">...</button>`\r\n * `<mf-popover [origin]=\"trigger\" [(open)]=\"open\">...içerik (ng-content)...</mf-popover>`\r\n *\r\n * `Select`/`TableColumnsMenu`/`TableFilterMenu`/`DatePicker`'ın HER BİRİNİN\r\n * ayrı ayrı yazdığı `cdkConnectedOverlay` + pozisyon dizisi + backdrop/ESC\r\n * kapama iskeletini TEK yerde toplayan genel amaçlı panel primitifi (bkz.\r\n * README \"Yeni bir primitif gerektiğinde\"). YENİ kullanım noktaları bunu\r\n * kullanmalı — mevcut dört bileşenin buna taşınması BİLEREK bu değişiklikle\r\n * birlikte yapılmadı: her biri kendi klavye/vurgu (highlight) mantığını\r\n * Popover'ın panel içeriğiyle nasıl kompoze edeceğine karar vermeli, ayrı ve\r\n * her ekranın tarayıcıda tek tek doğrulanmasını gerektiren bir iş.\r\n *\r\n * `origin`, CDK'nın `cdkOverlayOrigin` directive'inin `exportAs` referansı —\r\n * ayrı bir wrapper directive'e gerek yok, CDK zaten sağlıyor.\r\n */\r\n@Component({\r\n selector: 'mf-popover',\r\n exportAs: 'mfPopover',\r\n imports: [OverlayModule],\r\n host: { class: 'contents' },\r\n template: `\r\n <ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"origin()\"\r\n [cdkConnectedOverlayOpen]=\"attached()\"\r\n [cdkConnectedOverlayPositions]=\"positions()\"\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop()\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n [cdkConnectedOverlayMinWidth]=\"\r\n matchTriggerWidth() ? origin().elementRef.nativeElement.offsetWidth : null\r\n \"\r\n (backdropClick)=\"close()\"\r\n (detach)=\"close()\"\r\n >\r\n <!--\r\n Panel sarmalayıcısı BİLEREK odaklanabilir değil — Escape'i içindeki\r\n odaklanmış elemandan yukarı taşıyan bir olay-delegasyon kapsayıcısı,\r\n kendisi bir etkileşim hedefi değil.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div [class]=\"classes()\" (keydown.escape)=\"close()\">\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class Popover {\r\n readonly origin = input.required<CdkOverlayOrigin>();\r\n readonly open = model(false);\r\n readonly placement = input<PopoverPlacement>('bottom-start');\r\n readonly padding = input<PopoverPadding>('sm');\r\n /** Backdrop şeffaf ama TIKLANABİLİR — dışarı tıklayınca kapanması için var, görsel karartma YOK. */\r\n readonly hasBackdrop = input(true);\r\n /** `true` ise panel tetikleyiciden DAR olamaz (min-width) — genişleyebilir, küçülemez. */\r\n readonly matchTriggerWidth = input(false);\r\n readonly panelClass = input('');\r\n\r\n readonly closed = output<void>();\r\n\r\n /**\r\n * `open()` MANTIKSAL durumu taşır (tüketici `[(open)]` ile doğrudan\r\n * yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`\r\n * çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`\r\n * `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip\r\n * `animate-overlay-out` oynatılır, `exitDurationMs()` sonra `attached` da `false`\r\n * olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle\r\n * AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i\r\n * Dialog'un aksine bir \"kapanışı ertele\" kancası SUNMUYOR, bu yüzden\r\n * `effect()` tabanlı bu yaklaşım gerekiyor).\r\n */\r\n protected readonly attached = signal(false);\r\n protected readonly closing = signal(false);\r\n private exitTimer?: ReturnType<typeof setTimeout>;\r\n\r\n protected readonly positions = computed(() => {\r\n const placement = this.placement();\r\n return overlayPositions(placement, placement === 'right-start' ? 8 : 4);\r\n });\r\n protected readonly classes = computed(() =>\r\n cn(\r\n popoverPanelVariants({ padding: this.padding() }),\r\n this.closing() ? 'animate-overlay-out' : 'animate-overlay-in',\r\n this.panelClass(),\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const shouldBeOpen = this.open();\r\n clearTimeout(this.exitTimer);\r\n\r\n if (shouldBeOpen) {\r\n this.closing.set(false);\r\n this.attached.set(true);\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n if (!this.attached()) return;\r\n\r\n const exitMs = exitDurationMs();\r\n if (exitMs === 0) {\r\n this.attached.set(false);\r\n return;\r\n }\r\n\r\n this.closing.set(true);\r\n this.exitTimer = setTimeout(() => {\r\n this.attached.set(false);\r\n this.closing.set(false);\r\n }, exitMs);\r\n });\r\n });\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-popover.mjs","sources":["../../../projects/ui-kit/popover/popover.variants.ts","../../../projects/ui-kit/popover/popover.ts","../../../projects/ui-kit/popover/popover-origin.ts","../../../projects/ui-kit/popover/mesgflow-ui-kit-popover.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const popoverPanelVariants = cva(\r\n 'overflow-auto rounded-lg border border-hairline bg-overlay shadow-2',\r\n {\r\n variants: {\r\n padding: {\r\n none: 'p-0',\r\n sm: 'p-1',\r\n md: 'p-2',\r\n lg: 'p-3',\r\n },\r\n },\r\n defaultVariants: { padding: 'sm' },\r\n },\r\n);\r\n\r\nexport type PopoverPadding = VariantProps<typeof popoverPanelVariants>['padding'];\r\n","import { CdkOverlayOrigin, OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n ElementRef,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { cn, exitDurationMs, overlayPositions, type MfPlacement } from '@mesgflow/ui-kit/core';\r\nimport { PopoverOrigin } from './popover-origin';\r\nimport { popoverPanelVariants, type PopoverPadding } from './popover.variants';\r\n\r\n/**\r\n * Tüm `MfPlacement` değerleri — `left`/`right` MANTIKSAL (RTL'de çevrilir).\r\n * `right-start`: tetikleyicinin ÜSTÜYLE hizalı (Sidebar daraltılmış nav\r\n * flyout'u gibi çok satırlı panellerde `right`in dikey ortalaması paneli\r\n * beklenmedik yönde kaydırır), 8px boşlukla.\r\n */\r\nexport type PopoverPlacement = MfPlacement;\r\n\r\n/**\r\n * `[origin]`'in kabul ettiği çapalar: kitin `mfPopoverOrigin`'i (tercih edilen —\r\n * tüketici `@angular/cdk` import etmez), CDK'nın `cdkOverlayOrigin`'i (geriye\r\n * uyumlu) ya da düz bir eleman (`#ref` şablon referansı / `ElementRef`).\r\n */\r\nexport type PopoverOriginRef =\r\n PopoverOrigin | CdkOverlayOrigin | ElementRef<HTMLElement> | HTMLElement;\r\n\r\n/**\r\n * `<button cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" (click)=\"open.set(true)\">...</button>`\r\n * `<mf-popover [origin]=\"trigger\" [(open)]=\"open\">...içerik (ng-content)...</mf-popover>`\r\n *\r\n * `Select`/`TableColumnsMenu`/`TableFilterMenu`/`DatePicker`'ın HER BİRİNİN\r\n * ayrı ayrı yazdığı `cdkConnectedOverlay` + pozisyon dizisi + backdrop/ESC\r\n * kapama iskeletini TEK yerde toplayan genel amaçlı panel primitifi (bkz.\r\n * README \"Yeni bir primitif gerektiğinde\"). YENİ kullanım noktaları bunu\r\n * kullanmalı — mevcut dört bileşenin buna taşınması BİLEREK bu değişiklikle\r\n * birlikte yapılmadı: her biri kendi klavye/vurgu (highlight) mantığını\r\n * Popover'ın panel içeriğiyle nasıl kompoze edeceğine karar vermeli, ayrı ve\r\n * her ekranın tarayıcıda tek tek doğrulanmasını gerektiren bir iş.\r\n *\r\n * `origin`: kitin `mfPopoverOrigin` referansı (tüketici `@angular/cdk` import\r\n * etmez), geriye uyumlu olarak `cdkOverlayOrigin` ya da düz bir eleman — bkz.\r\n * `PopoverOriginRef`.\r\n */\r\n@Component({\r\n selector: 'mf-popover',\r\n exportAs: 'mfPopover',\r\n imports: [OverlayModule],\r\n host: { class: 'contents' },\r\n template: `\r\n <ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"anchor()\"\r\n [cdkConnectedOverlayOpen]=\"attached()\"\r\n [cdkConnectedOverlayPositions]=\"positions()\"\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop()\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n [cdkConnectedOverlayMinWidth]=\"matchTriggerWidth() ? anchor().nativeElement.offsetWidth : 0\"\r\n (backdropClick)=\"close()\"\r\n (detach)=\"close()\"\r\n >\r\n <!--\r\n Panel sarmalayıcısı BİLEREK odaklanabilir değil — Escape'i içindeki\r\n odaklanmış elemandan yukarı taşıyan bir olay-delegasyon kapsayıcısı,\r\n kendisi bir etkileşim hedefi değil.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div [class]=\"classes()\" (keydown.escape)=\"close()\">\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class Popover {\r\n readonly origin = input.required<PopoverOriginRef>();\r\n readonly open = model(false);\r\n readonly placement = input<PopoverPlacement>('bottom-start');\r\n readonly padding = input<PopoverPadding>('sm');\r\n /** Backdrop şeffaf ama TIKLANABİLİR — dışarı tıklayınca kapanması için var, görsel karartma YOK. */\r\n readonly hasBackdrop = input(true);\r\n /** `true` ise panel tetikleyiciden DAR olamaz (min-width) — genişleyebilir, küçülemez. */\r\n readonly matchTriggerWidth = input(false);\r\n readonly panelClass = input('');\r\n\r\n readonly closed = output<void>();\r\n\r\n /**\r\n * `open()` MANTIKSAL durumu taşır (tüketici `[(open)]` ile doğrudan\r\n * yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`\r\n * çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`\r\n * `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip\r\n * `animate-overlay-out` oynatılır, `exitDurationMs()` sonra `attached` da `false`\r\n * olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle\r\n * AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i\r\n * Dialog'un aksine bir \"kapanışı ertele\" kancası SUNMUYOR, bu yüzden\r\n * `effect()` tabanlı bu yaklaşım gerekiyor).\r\n */\r\n protected readonly attached = signal(false);\r\n protected readonly closing = signal(false);\r\n private exitTimer?: ReturnType<typeof setTimeout>;\r\n\r\n /** CDK'ya verilen çapa — `cdkConnectedOverlayOrigin` bir `ElementRef`'i doğrudan kabul eder. */\r\n protected readonly anchor = computed<ElementRef<HTMLElement>>(() => {\r\n const origin = this.origin();\r\n return origin instanceof ElementRef\r\n ? origin\r\n : origin instanceof HTMLElement\r\n ? new ElementRef(origin)\r\n : origin.elementRef;\r\n });\r\n\r\n protected readonly positions = computed(() => {\r\n const placement = this.placement();\r\n return overlayPositions(placement, placement === 'right-start' ? 8 : 4);\r\n });\r\n protected readonly classes = computed(() =>\r\n cn(\r\n popoverPanelVariants({ padding: this.padding() }),\r\n this.closing() ? 'animate-overlay-out' : 'animate-overlay-in',\r\n this.panelClass(),\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const shouldBeOpen = this.open();\r\n clearTimeout(this.exitTimer);\r\n\r\n if (shouldBeOpen) {\r\n this.closing.set(false);\r\n this.attached.set(true);\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n if (!this.attached()) return;\r\n\r\n const exitMs = exitDurationMs();\r\n if (exitMs === 0) {\r\n this.attached.set(false);\r\n return;\r\n }\r\n\r\n this.closing.set(true);\r\n this.exitTimer = setTimeout(() => {\r\n this.attached.set(false);\r\n this.closing.set(false);\r\n }, exitMs);\r\n });\r\n });\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n}\r\n","import { CdkOverlayOrigin } from '@angular/cdk/overlay';\r\nimport { Directive, ElementRef, inject } from '@angular/core';\r\n\r\n/**\r\n * `<button #trigger=\"mfPopoverOrigin\" mfPopoverOrigin (click)=\"open.set(true)\">…</button>\r\n * <mf-popover [origin]=\"trigger\" [(open)]=\"open\">…</mf-popover>`\r\n *\r\n * `mf-popover`'ın `[origin]`'i için kitin kendi çapası — tüketici `@angular/cdk`\r\n * import etmeden `cdkOverlayOrigin` ile aynı işi görür (host directive olarak onu\r\n * taşır). `[origin]` ayrıca bir `HTMLElement`/`ElementRef` (`#ref` şablon\r\n * referansı) de kabul eder.\r\n */\r\n@Directive({\r\n selector: '[mfPopoverOrigin]',\r\n exportAs: 'mfPopoverOrigin',\r\n hostDirectives: [CdkOverlayOrigin],\r\n})\r\nexport class PopoverOrigin {\r\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -35,8 +35,16 @@ const segmentedItemVariants = cva('relative cursor-pointer appearance-none white
|
|
|
35
35
|
* farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving
|
|
36
36
|
* tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın
|
|
37
37
|
* `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —
|
|
38
|
-
* dokümantasyondaki kompozisyon şekli
|
|
39
|
-
*
|
|
38
|
+
* dokümantasyondaki kompozisyon şekli izlendi (dıştaki `ngToolbar`, içteki
|
|
39
|
+
* `ngToolbarWidgetGroup`).
|
|
40
|
+
*
|
|
41
|
+
* SEÇİM toolbar'dan DEĞİL, bileşenin kendisinden: `@angular/aria` 22.2 toolbar'ın
|
|
42
|
+
* `value`/`valueChange`'ini ve grubun `multi`'sini KALDIRDI (toolbar artık yalnızca
|
|
43
|
+
* gezinme). Kit önceden derlendiği için tüketicide derleme hatası çıkmıyor, tıklama
|
|
44
|
+
* sessizce etkisiz kalıyordu (gerçek bulgu, 0.6–0.8). Artık tıklama + Enter/Space
|
|
45
|
+
* doğrudan `select()`'i çağırır — 22.1 ve 22.2'de aynı çalışır. Widget'ın `[value]`'su
|
|
46
|
+
* yalnızca 22.1'in zorunlu girdisi için duruyor (22.2'de düğmenin DOM `value`'suna düşer).
|
|
47
|
+
* Seçili durum `aria-pressed` ile duyurulur (toolbar hiçbir sürümde vermiyor).
|
|
40
48
|
*
|
|
41
49
|
* Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay
|
|
42
50
|
* eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef
|
|
@@ -53,28 +61,32 @@ class SegmentedControl extends ValueAccessorBase {
|
|
|
53
61
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
54
62
|
disabled = input(false, /* @ts-ignore */
|
|
55
63
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
56
|
-
toolbarValue = computed(() => this.value() == null ? [] : [this.value()], /* @ts-ignore */
|
|
57
|
-
...(ngDevMode ? [{ debugName: "toolbarValue" }] : /* istanbul ignore next */ []));
|
|
58
64
|
trackClasses = computed(() => cn(segmentedTrackVariants({ size: this.size() })), /* @ts-ignore */
|
|
59
65
|
...(ngDevMode ? [{ debugName: "trackClasses" }] : /* istanbul ignore next */ []));
|
|
60
66
|
writeValue(value) {
|
|
61
67
|
this.value.set(value);
|
|
62
68
|
}
|
|
63
69
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
* Seçili seçeneğe tekrar basmak seçimi KALDIRMAZ (segmented control'de her zaman bir
|
|
71
|
+
* seçim durur) ve değişiklik bildirmez; CVA `onChange` yalnızca gerçek bir değişimde.
|
|
72
|
+
*/
|
|
73
|
+
select(value) {
|
|
74
|
+
if (this.disabled())
|
|
75
|
+
return;
|
|
76
|
+
this.onTouched();
|
|
77
|
+
if (value === this.value())
|
|
78
|
+
return;
|
|
79
|
+
this.value.set(value);
|
|
80
|
+
this.onChange(value);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Enter/Space: 22.1'in toolbar'ı bu tuşları kendisi yakalayıp `preventDefault` ettiği
|
|
84
|
+
* için düğmenin yerel `click`'i gelmiyordu; 22.2'de geliyor. Burada seçip varsayılanı
|
|
85
|
+
* engellemek iki sürümde de TEK seçim üretir.
|
|
71
86
|
*/
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
this.onChange(values[0]);
|
|
76
|
-
this.onTouched();
|
|
77
|
-
}
|
|
87
|
+
onActivateKey(event, value) {
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
this.select(value);
|
|
78
90
|
}
|
|
79
91
|
itemClasses(option) {
|
|
80
92
|
return cn(segmentedItemVariants({ selected: option.value === this.value(), disabled: this.disabled() }));
|
|
@@ -82,13 +94,13 @@ class SegmentedControl extends ValueAccessorBase {
|
|
|
82
94
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SegmentedControl, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
83
95
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SegmentedControl, isStandalone: true, selector: "mf-segmented-control", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { classAttribute: "inline-block" }, providers: [
|
|
84
96
|
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },
|
|
85
|
-
], exportAs: ["mfSegmentedControl"], usesInheritance: true, ngImport: i0, template: "<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [
|
|
97
|
+
], exportAs: ["mfSegmentedControl"], usesInheritance: true, ngImport: i0, template: "<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan par\u00E7a (core `[mfSlidingIndicator]`) \u2014 se\u00E7enekler `relative`, \u00FCst\u00FCne boyan\u0131r. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.aria-pressed]=\"option.value === value()\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n (click)=\"select(option.value)\"\r\n (keydown.enter)=\"onActivateKey($event, option.value)\"\r\n (keydown.space)=\"onActivateKey($event, option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: Toolbar, selector: "[ngToolbar]", inputs: ["orientation", "softDisabled", "disabled", "wrap", "value"], outputs: ["valueChange"], exportAs: ["ngToolbar"] }, { kind: "directive", type: ToolbarWidgetGroup, selector: "[ngToolbarWidgetGroup]", inputs: ["disabled", "multi"], exportAs: ["ngToolbarWidgetGroup"] }, { kind: "directive", type: ToolbarWidget, selector: "[ngToolbarWidget]", inputs: ["id", "disabled", "value"], exportAs: ["ngToolbarWidget"] }, { kind: "directive", type: SlidingIndicator, selector: "[mfSlidingIndicator]", inputs: ["axis", "target", "track", "container"], exportAs: ["mfSlidingIndicator"] }] });
|
|
86
98
|
}
|
|
87
99
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SegmentedControl, decorators: [{
|
|
88
100
|
type: Component,
|
|
89
101
|
args: [{ selector: 'mf-segmented-control', exportAs: 'mfSegmentedControl', imports: [Toolbar, ToolbarWidgetGroup, ToolbarWidget, SlidingIndicator], host: { class: 'inline-block' }, providers: [
|
|
90
102
|
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },
|
|
91
|
-
], template: "<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [
|
|
103
|
+
], template: "<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan par\u00E7a (core `[mfSlidingIndicator]`) \u2014 se\u00E7enekler `relative`, \u00FCst\u00FCne boyan\u0131r. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.aria-pressed]=\"option.value === value()\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n (click)=\"select(option.value)\"\r\n (keydown.enter)=\"onActivateKey($event, option.value)\"\r\n (keydown.space)=\"onActivateKey($event, option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n" }]
|
|
92
104
|
}], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
|
|
93
105
|
|
|
94
106
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-segmented-control.mjs","sources":["../../../projects/ui-kit/segmented-control/segmented-control.variants.ts","../../../projects/ui-kit/segmented-control/segmented-control.ts","../../../projects/ui-kit/segmented-control/segmented-control.html","../../../projects/ui-kit/segmented-control/mesgflow-ui-kit-segmented-control.ts"],"sourcesContent":["import { focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const segmentedTrackVariants = cva(\r\n 'relative inline-flex items-center gap-0.5 rounded-md bg-surface-alt p-0.5',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'text-xs',\r\n md: 'text-sm',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n },\r\n);\r\n\r\nexport const segmentedItemVariants = cva(\r\n 'relative cursor-pointer appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1 text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\r\n focusRecipe,\r\n {\r\n variants: {\r\n selected: {\r\n true: 'text-fg',\r\n false: 'hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { selected: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type SegmentedControlSize = VariantProps<typeof segmentedTrackVariants>['size'];\r\n","import {\r\n Toolbar as AriaToolbar,\r\n ToolbarWidget as AriaToolbarWidget,\r\n ToolbarWidgetGroup as AriaToolbarWidgetGroup,\r\n} from '@angular/aria/toolbar';\r\nimport { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { SlidingIndicator, ValueAccessorBase, cn } from '@mesgflow/ui-kit/core';\r\nimport {\r\n segmentedItemVariants,\r\n segmentedTrackVariants,\r\n type SegmentedControlSize,\r\n} from './segmented-control.variants';\r\n\r\nexport interface SegmentedOption<T> {\r\n label: string;\r\n value: T;\r\n}\r\n\r\n/**\r\n * `<mf-segmented-control [options]=\"opts\" [(value)]=\"mode\" />` — hizalama,\r\n * cihaz önizlemesi gibi KISA/tek-seçimli seçenek kümeleri için. `Tabs`'tan\r\n * farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving\r\n * tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın\r\n * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —\r\n * dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,\r\n * içteki `ngToolbarWidgetGroup [multi]=\"false\"`).\r\n *\r\n * Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay\r\n * eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef\r\n * `data-selected`.\r\n */\r\n@Component({\r\n selector: 'mf-segmented-control',\r\n exportAs: 'mfSegmentedControl',\r\n imports: [AriaToolbar, AriaToolbarWidgetGroup, AriaToolbarWidget, SlidingIndicator],\r\n host: { class: 'inline-block' },\r\n templateUrl: './segmented-control.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },\r\n ],\r\n})\r\nexport class SegmentedControl<T>\r\n extends ValueAccessorBase<T | null>\r\n implements ControlValueAccessor\r\n{\r\n readonly options = input.required<SegmentedOption<T>[]>();\r\n readonly value = model<T | null>(null);\r\n readonly size = input<SegmentedControlSize>('md');\r\n readonly ariaLabel = input('');\r\n readonly disabled = input(false);\r\n\r\n protected readonly toolbarValue = computed<T[]>(() =>\r\n this.value() == null ? [] : [this.value() as T],\r\n );\r\n protected readonly trackClasses = computed(() =>\r\n cn(segmentedTrackVariants({ size: this.size() })),\r\n );\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n /**\r\n * `@angular/aria/toolbar`'ın kendi widget-kayıt döngüsü, gerçek bir tıklama\r\n * OLMADAN da BOŞ bir dizi ile (`values: []`) tetiklenebiliyor (gerçek bulgu\r\n * — bir seçeneğe tıklarken bile araya giren, seçimle ilgisiz iç kayıt\r\n * event'leri). `this.value` her event'te güncellenir (görsel durum ETKİLENMEZ,\r\n * zaten `values[0]` genelde mevcut değerle AYNI), ama CVA `onChange`/`onTouched`\r\n * SADECE dolu bir dizi (gerçek bir seçim) geldiğinde tetiklenir — aksi halde\r\n * Reactive Forms'a sahte \"null'a değişti\" bildirimleri sızardı.\r\n */\r\n protected onToolbarValueChange(values: readonly T[]): void {\r\n this.value.set(values[0] ?? null);\r\n if (values.length > 0) {\r\n this.onChange(values[0]!);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n protected itemClasses(option: SegmentedOption<T>): string {\r\n return cn(\r\n segmentedItemVariants({ selected: option.value === this.value(), disabled: this.disabled() }),\r\n );\r\n }\r\n}\r\n","<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [value]=\"toolbarValue()\"\r\n (valueChange)=\"onToolbarValueChange($event)\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan parça (core `[mfSlidingIndicator]`) — seçenekler `relative`, üstüne boyanır. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [multi]=\"false\" [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AriaToolbar","AriaToolbarWidgetGroup","AriaToolbarWidget"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-segmented-control.mjs","sources":["../../../projects/ui-kit/segmented-control/segmented-control.variants.ts","../../../projects/ui-kit/segmented-control/segmented-control.ts","../../../projects/ui-kit/segmented-control/segmented-control.html","../../../projects/ui-kit/segmented-control/mesgflow-ui-kit-segmented-control.ts"],"sourcesContent":["import { focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const segmentedTrackVariants = cva(\r\n 'relative inline-flex items-center gap-0.5 rounded-md bg-surface-alt p-0.5',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'text-xs',\r\n md: 'text-sm',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n },\r\n);\r\n\r\nexport const segmentedItemVariants = cva(\r\n 'relative cursor-pointer appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1 text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\r\n focusRecipe,\r\n {\r\n variants: {\r\n selected: {\r\n true: 'text-fg',\r\n false: 'hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { selected: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type SegmentedControlSize = VariantProps<typeof segmentedTrackVariants>['size'];\r\n","import {\r\n Toolbar as AriaToolbar,\r\n ToolbarWidget as AriaToolbarWidget,\r\n ToolbarWidgetGroup as AriaToolbarWidgetGroup,\r\n} from '@angular/aria/toolbar';\r\nimport { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { SlidingIndicator, ValueAccessorBase, cn } from '@mesgflow/ui-kit/core';\r\nimport {\r\n segmentedItemVariants,\r\n segmentedTrackVariants,\r\n type SegmentedControlSize,\r\n} from './segmented-control.variants';\r\n\r\nexport interface SegmentedOption<T> {\r\n label: string;\r\n value: T;\r\n}\r\n\r\n/**\r\n * `<mf-segmented-control [options]=\"opts\" [(value)]=\"mode\" />` — hizalama,\r\n * cihaz önizlemesi gibi KISA/tek-seçimli seçenek kümeleri için. `Tabs`'tan\r\n * farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving\r\n * tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın\r\n * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —\r\n * dokümantasyondaki kompozisyon şekli izlendi (dıştaki `ngToolbar`, içteki\r\n * `ngToolbarWidgetGroup`).\r\n *\r\n * SEÇİM toolbar'dan DEĞİL, bileşenin kendisinden: `@angular/aria` 22.2 toolbar'ın\r\n * `value`/`valueChange`'ini ve grubun `multi`'sini KALDIRDI (toolbar artık yalnızca\r\n * gezinme). Kit önceden derlendiği için tüketicide derleme hatası çıkmıyor, tıklama\r\n * sessizce etkisiz kalıyordu (gerçek bulgu, 0.6–0.8). Artık tıklama + Enter/Space\r\n * doğrudan `select()`'i çağırır — 22.1 ve 22.2'de aynı çalışır. Widget'ın `[value]`'su\r\n * yalnızca 22.1'in zorunlu girdisi için duruyor (22.2'de düğmenin DOM `value`'suna düşer).\r\n * Seçili durum `aria-pressed` ile duyurulur (toolbar hiçbir sürümde vermiyor).\r\n *\r\n * Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay\r\n * eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef\r\n * `data-selected`.\r\n */\r\n@Component({\r\n selector: 'mf-segmented-control',\r\n exportAs: 'mfSegmentedControl',\r\n imports: [AriaToolbar, AriaToolbarWidgetGroup, AriaToolbarWidget, SlidingIndicator],\r\n host: { class: 'inline-block' },\r\n templateUrl: './segmented-control.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },\r\n ],\r\n})\r\nexport class SegmentedControl<T>\r\n extends ValueAccessorBase<T | null>\r\n implements ControlValueAccessor\r\n{\r\n readonly options = input.required<SegmentedOption<T>[]>();\r\n readonly value = model<T | null>(null);\r\n readonly size = input<SegmentedControlSize>('md');\r\n readonly ariaLabel = input('');\r\n readonly disabled = input(false);\r\n\r\n protected readonly trackClasses = computed(() =>\r\n cn(segmentedTrackVariants({ size: this.size() })),\r\n );\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n /**\r\n * Seçili seçeneğe tekrar basmak seçimi KALDIRMAZ (segmented control'de her zaman bir\r\n * seçim durur) ve değişiklik bildirmez; CVA `onChange` yalnızca gerçek bir değişimde.\r\n */\r\n protected select(value: T): void {\r\n if (this.disabled()) return;\r\n this.onTouched();\r\n if (value === this.value()) return;\r\n this.value.set(value);\r\n this.onChange(value);\r\n }\r\n\r\n /**\r\n * Enter/Space: 22.1'in toolbar'ı bu tuşları kendisi yakalayıp `preventDefault` ettiği\r\n * için düğmenin yerel `click`'i gelmiyordu; 22.2'de geliyor. Burada seçip varsayılanı\r\n * engellemek iki sürümde de TEK seçim üretir.\r\n */\r\n protected onActivateKey(event: Event, value: T): void {\r\n event.preventDefault();\r\n this.select(value);\r\n }\r\n\r\n protected itemClasses(option: SegmentedOption<T>): string {\r\n return cn(\r\n segmentedItemVariants({ selected: option.value === this.value(), disabled: this.disabled() }),\r\n );\r\n }\r\n}\r\n","<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan parça (core `[mfSlidingIndicator]`) — seçenekler `relative`, üstüne boyanır. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.aria-pressed]=\"option.value === value()\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n (click)=\"select(option.value)\"\r\n (keydown.enter)=\"onActivateKey($event, option.value)\"\r\n (keydown.space)=\"onActivateKey($event, option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AriaToolbar","AriaToolbarWidgetGroup","AriaToolbarWidget"],"mappings":"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"}
|
|
@@ -119,7 +119,7 @@ class SplitButton {
|
|
|
119
119
|
}
|
|
120
120
|
</mf-menu>
|
|
121
121
|
</mf-popover>
|
|
122
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: Button, selector: "button[mfButton], a[mfButton]", inputs: ["tone", "appearance", "size", "shape", "type", "loading", "iconStart", "iconEnd"], exportAs: ["mfButton"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "component", type: Menu, selector: "mf-menu", exportAs: ["mfMenu"] }, { kind: "
|
|
122
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: Button, selector: "button[mfButton], a[mfButton]", inputs: ["tone", "appearance", "size", "shape", "type", "loading", "iconStart", "iconEnd"], exportAs: ["mfButton"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "component", type: Menu, selector: "mf-menu", exportAs: ["mfMenu"] }, { kind: "component", type: MenuItem, selector: "button[mfMenuItem], div[mfMenuItem]", inputs: ["checked"] }, { kind: "directive", type: MenuTrigger, selector: "[mfMenuTrigger][menu]", exportAs: ["mfMenuTrigger"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }] });
|
|
123
123
|
}
|
|
124
124
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SplitButton, decorators: [{
|
|
125
125
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-split-button.mjs","sources":["../../../projects/ui-kit/split-button/split-button.ts","../../../projects/ui-kit/split-button/mesgflow-ui-kit-split-button.ts"],"sourcesContent":["import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, booleanAttribute, computed, inject, input, output } from '@angular/core';\r\nimport { Button, type ButtonAppearance, type ButtonTone } from '@mesgflow/ui-kit/button';\r\nimport { MF_SPLIT_BUTTON_LABELS, cn } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Menu, MenuItem, MenuTrigger } from '@mesgflow/ui-kit/menu';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\n\r\nexport interface SplitButtonItem<V = string> {\r\n label: string;\r\n value: V;\r\n icon?: string;\r\n disabled?: boolean;\r\n /** Tehlikeli eylem (Sil) — kırmızı metin. */\r\n danger?: boolean;\r\n}\r\n\r\n/**\r\n * `<mf-split-button label=\"Kaydet\" [items]=\"more\" (primaryClick)=\"save()\" (itemSelect)=\"run($event)\" />`\r\n *\r\n * Birincil eylem + ilgili ikincil eylemler menüsü (GitHub \"Merge ▾\", Gmail\r\n * \"Gönder ▾\"). İki gerçek düğme: soldaki eylemi çalıştırır, sağdaki\r\n * (`aria-haspopup=\"menu\"`) menüyü açar — ekran okuyucu ikisini ayrı duyurur.\r\n *\r\n * Menü `@angular/aria/menu` (ok tuşları, typeahead, Escape) + `mf-popover`\r\n * (tetikleyiciden büyüyen panel). Öğeler VERİ olarak verilir: `mfMenuItem`\r\n * içerik projeksiyonuyla aria menüsüne bağlanamadığı için bu bileşen onları\r\n * kendi şablonunda çizer.\r\n */\r\n@Component({\r\n selector: 'mf-split-button',\r\n exportAs: 'mfSplitButton',\r\n imports: [OverlayModule, Button, Icon, Menu, MenuItem, MenuTrigger, Popover],\r\n host: { class: 'inline-flex' },\r\n template: `\r\n <div class=\"inline-flex\" role=\"group\" [attr.aria-label]=\"label()\">\r\n <button\r\n mfButton\r\n type=\"button\"\r\n [tone]=\"tone()\"\r\n [appearance]=\"appearance()\"\r\n [size]=\"size()\"\r\n [iconStart]=\"icon()\"\r\n [loading]=\"loading()\"\r\n [disabled]=\"disabled()\"\r\n [class]=\"primaryClass()\"\r\n (click)=\"primaryClick.emit()\"\r\n >\r\n {{ label() }}\r\n </button>\r\n <button\r\n mfButton\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n mfMenuTrigger\r\n #trigger=\"ngMenuTrigger\"\r\n [menu]=\"menuRef\"\r\n [tone]=\"tone()\"\r\n [appearance]=\"appearance()\"\r\n [size]=\"size()\"\r\n [disabled]=\"disabled()\"\r\n [class]=\"toggleClass()\"\r\n [attr.aria-label]=\"effectiveMenuLabel()\"\r\n >\r\n <span\r\n mfIcon\r\n [size]=\"16\"\r\n class=\"transition-transform duration-fast ease-emphasis\"\r\n [class.rotate-180]=\"trigger.expanded()\"\r\n >expand_more</span\r\n >\r\n </button>\r\n </div>\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"trigger.expanded()\"\r\n (closed)=\"trigger.close()\"\r\n placement=\"bottom-end\"\r\n padding=\"none\"\r\n >\r\n <mf-menu #menuRef=\"ngMenu\" (itemSelected)=\"onSelect($event); trigger.close()\">\r\n @for (item of items(); track item.value) {\r\n <button\r\n mfMenuItem\r\n [value]=\"item.value\"\r\n [disabled]=\"!!item.disabled\"\r\n [class.text-danger]=\"item.danger\"\r\n >\r\n @if (item.icon) {\r\n <span mfIcon [size]=\"16\" class=\"text-fg-subtle\" [class.text-danger]=\"item.danger\">{{\r\n item.icon\r\n }}</span>\r\n }\r\n {{ item.label }}\r\n </button>\r\n }\r\n </mf-menu>\r\n </mf-popover>\r\n `,\r\n})\r\nexport class SplitButton<V = string> {\r\n readonly label = input.required<string>();\r\n readonly items = input.required<SplitButtonItem<V>[]>();\r\n readonly icon = input('');\r\n readonly tone = input<ButtonTone>('primary');\r\n readonly appearance = input<ButtonAppearance>('filled');\r\n readonly size = input<'sm' | 'md' | 'lg'>('md');\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n /** Menü düğmesinin erişilebilir adı — verilmezse `MF_SPLIT_BUTTON_LABELS`. */\r\n readonly menuLabel = input<string>();\r\n\r\n readonly primaryClick = output<void>();\r\n readonly itemSelect = output<V>();\r\n\r\n private readonly labels = inject(MF_SPLIT_BUTTON_LABELS);\r\n protected readonly effectiveMenuLabel = computed(\r\n () => this.menuLabel() ?? this.labels().moreActions,\r\n );\r\n\r\n /** Bitişik iki düğme: iç köşeler kare, ayırıcı çizgi (dolu görünümde açık ton). */\r\n protected readonly primaryClass = computed(() => cn('rounded-e-none'));\r\n protected readonly toggleClass = computed(() =>\r\n cn(\r\n 'rounded-s-none px-2',\r\n this.appearance() === 'filled' || this.appearance() === 'soft'\r\n ? 'border-s-white/20 dark:border-s-black/20'\r\n : '-ms-px',\r\n ),\r\n );\r\n\r\n protected onSelect(value: V): void {\r\n this.itemSelect.emit(value);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-split-button.mjs","sources":["../../../projects/ui-kit/split-button/split-button.ts","../../../projects/ui-kit/split-button/mesgflow-ui-kit-split-button.ts"],"sourcesContent":["import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, booleanAttribute, computed, inject, input, output } from '@angular/core';\r\nimport { Button, type ButtonAppearance, type ButtonTone } from '@mesgflow/ui-kit/button';\r\nimport { MF_SPLIT_BUTTON_LABELS, cn } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Menu, MenuItem, MenuTrigger } from '@mesgflow/ui-kit/menu';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\n\r\nexport interface SplitButtonItem<V = string> {\r\n label: string;\r\n value: V;\r\n icon?: string;\r\n disabled?: boolean;\r\n /** Tehlikeli eylem (Sil) — kırmızı metin. */\r\n danger?: boolean;\r\n}\r\n\r\n/**\r\n * `<mf-split-button label=\"Kaydet\" [items]=\"more\" (primaryClick)=\"save()\" (itemSelect)=\"run($event)\" />`\r\n *\r\n * Birincil eylem + ilgili ikincil eylemler menüsü (GitHub \"Merge ▾\", Gmail\r\n * \"Gönder ▾\"). İki gerçek düğme: soldaki eylemi çalıştırır, sağdaki\r\n * (`aria-haspopup=\"menu\"`) menüyü açar — ekran okuyucu ikisini ayrı duyurur.\r\n *\r\n * Menü `@angular/aria/menu` (ok tuşları, typeahead, Escape) + `mf-popover`\r\n * (tetikleyiciden büyüyen panel). Öğeler VERİ olarak verilir: `mfMenuItem`\r\n * içerik projeksiyonuyla aria menüsüne bağlanamadığı için bu bileşen onları\r\n * kendi şablonunda çizer.\r\n */\r\n@Component({\r\n selector: 'mf-split-button',\r\n exportAs: 'mfSplitButton',\r\n imports: [OverlayModule, Button, Icon, Menu, MenuItem, MenuTrigger, Popover],\r\n host: { class: 'inline-flex' },\r\n template: `\r\n <div class=\"inline-flex\" role=\"group\" [attr.aria-label]=\"label()\">\r\n <button\r\n mfButton\r\n type=\"button\"\r\n [tone]=\"tone()\"\r\n [appearance]=\"appearance()\"\r\n [size]=\"size()\"\r\n [iconStart]=\"icon()\"\r\n [loading]=\"loading()\"\r\n [disabled]=\"disabled()\"\r\n [class]=\"primaryClass()\"\r\n (click)=\"primaryClick.emit()\"\r\n >\r\n {{ label() }}\r\n </button>\r\n <button\r\n mfButton\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n mfMenuTrigger\r\n #trigger=\"ngMenuTrigger\"\r\n [menu]=\"menuRef\"\r\n [tone]=\"tone()\"\r\n [appearance]=\"appearance()\"\r\n [size]=\"size()\"\r\n [disabled]=\"disabled()\"\r\n [class]=\"toggleClass()\"\r\n [attr.aria-label]=\"effectiveMenuLabel()\"\r\n >\r\n <span\r\n mfIcon\r\n [size]=\"16\"\r\n class=\"transition-transform duration-fast ease-emphasis\"\r\n [class.rotate-180]=\"trigger.expanded()\"\r\n >expand_more</span\r\n >\r\n </button>\r\n </div>\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"trigger.expanded()\"\r\n (closed)=\"trigger.close()\"\r\n placement=\"bottom-end\"\r\n padding=\"none\"\r\n >\r\n <mf-menu #menuRef=\"ngMenu\" (itemSelected)=\"onSelect($event); trigger.close()\">\r\n @for (item of items(); track item.value) {\r\n <button\r\n mfMenuItem\r\n [value]=\"item.value\"\r\n [disabled]=\"!!item.disabled\"\r\n [class.text-danger]=\"item.danger\"\r\n >\r\n @if (item.icon) {\r\n <span mfIcon [size]=\"16\" class=\"text-fg-subtle\" [class.text-danger]=\"item.danger\">{{\r\n item.icon\r\n }}</span>\r\n }\r\n {{ item.label }}\r\n </button>\r\n }\r\n </mf-menu>\r\n </mf-popover>\r\n `,\r\n})\r\nexport class SplitButton<V = string> {\r\n readonly label = input.required<string>();\r\n readonly items = input.required<SplitButtonItem<V>[]>();\r\n readonly icon = input('');\r\n readonly tone = input<ButtonTone>('primary');\r\n readonly appearance = input<ButtonAppearance>('filled');\r\n readonly size = input<'sm' | 'md' | 'lg'>('md');\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n /** Menü düğmesinin erişilebilir adı — verilmezse `MF_SPLIT_BUTTON_LABELS`. */\r\n readonly menuLabel = input<string>();\r\n\r\n readonly primaryClick = output<void>();\r\n readonly itemSelect = output<V>();\r\n\r\n private readonly labels = inject(MF_SPLIT_BUTTON_LABELS);\r\n protected readonly effectiveMenuLabel = computed(\r\n () => this.menuLabel() ?? this.labels().moreActions,\r\n );\r\n\r\n /** Bitişik iki düğme: iç köşeler kare, ayırıcı çizgi (dolu görünümde açık ton). */\r\n protected readonly primaryClass = computed(() => cn('rounded-e-none'));\r\n protected readonly toggleClass = computed(() =>\r\n cn(\r\n 'rounded-s-none px-2',\r\n this.appearance() === 'filled' || this.appearance() === 'soft'\r\n ? 'border-s-white/20 dark:border-s-black/20'\r\n : '-ms-px',\r\n ),\r\n );\r\n\r\n protected onSelect(value: V): void {\r\n this.itemSelect.emit(value);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mesgflow/ui-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Independent Angular component kit (button, select, dialog, table, sidebar, and more) built on a Tailwind v4 design token system. See README.md for setup and prerequisites.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Hurdeniz YENER",
|