@mesgflow/ui-kit 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +200 -0
- package/fesm2022/mesgflow-ui-kit-accordion.mjs +75 -0
- package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-alert.mjs +165 -0
- package/fesm2022/mesgflow-ui-kit-alert.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +88 -0
- package/fesm2022/mesgflow-ui-kit-avatar-group.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-avatar.mjs +123 -0
- package/fesm2022/mesgflow-ui-kit-avatar.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-badge.mjs +68 -0
- package/fesm2022/mesgflow-ui-kit-badge.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-banner.mjs +111 -0
- package/fesm2022/mesgflow-ui-kit-banner.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-box-input.mjs +78 -0
- package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-brand.mjs +120 -0
- package/fesm2022/mesgflow-ui-kit-brand.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +84 -0
- package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-button-group.mjs +37 -0
- package/fesm2022/mesgflow-ui-kit-button-group.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-button.mjs +359 -0
- package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-card.mjs +128 -0
- package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-chart.mjs +538 -0
- package/fesm2022/mesgflow-ui-kit-chart.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs +45 -0
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-chip.mjs +123 -0
- package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-code-block.mjs +71 -0
- package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-collapsible.mjs +89 -0
- package/fesm2022/mesgflow-ui-kit-collapsible.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs +210 -0
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-combobox.mjs +181 -0
- package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-command.mjs +491 -0
- package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs +92 -0
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-copy-button.mjs +167 -0
- package/fesm2022/mesgflow-ui-kit-copy-button.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-core.mjs +624 -0
- package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs +643 -0
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-description-list.mjs +76 -0
- package/fesm2022/mesgflow-ui-kit-description-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-dialog.mjs +700 -0
- package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-divider.mjs +62 -0
- package/fesm2022/mesgflow-ui-kit-divider.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs +126 -0
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-empty-state.mjs +70 -0
- package/fesm2022/mesgflow-ui-kit-empty-state.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-field.mjs +42 -0
- package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-hover-card.mjs +171 -0
- package/fesm2022/mesgflow-ui-kit-hover-card.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +258 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-icon.mjs +174 -0
- package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-input.mjs +448 -0
- package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-kbd.mjs +24 -0
- package/fesm2022/mesgflow-ui-kit-kbd.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-link.mjs +48 -0
- package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-menu.mjs +105 -0
- package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-number-input.mjs +153 -0
- package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-otp-input.mjs +164 -0
- package/fesm2022/mesgflow-ui-kit-otp-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-page-header.mjs +83 -0
- package/fesm2022/mesgflow-ui-kit-page-header.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-pagination.mjs +99 -0
- package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-password-input.mjs +120 -0
- package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-popover.mjs +213 -0
- package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-progress.mjs +82 -0
- package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-radio.mjs +123 -0
- package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-rating.mjs +116 -0
- package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +84 -0
- package/fesm2022/mesgflow-ui-kit-scroll-area.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-search-input.mjs +154 -0
- package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +95 -0
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-select.mjs +227 -0
- package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs +449 -0
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs +74 -0
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-slider.mjs +179 -0
- package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-spinner.mjs +67 -0
- package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-splitter.mjs +97 -0
- package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +98 -0
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-stepper.mjs +133 -0
- package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-switch.mjs +73 -0
- package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-table.mjs +1783 -0
- package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tabs.mjs +569 -0
- package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs +138 -0
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +53 -0
- package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-theming.mjs +1016 -0
- package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs +138 -0
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-timeline.mjs +91 -0
- package/fesm2022/mesgflow-ui-kit-timeline.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-toast.mjs +202 -0
- package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-toggle.mjs +243 -0
- package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs +99 -0
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs +160 -0
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tour.mjs +272 -0
- package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tree-select.mjs +177 -0
- package/fesm2022/mesgflow-ui-kit-tree-select.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tree.mjs +82 -0
- package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit.mjs +12851 -0
- package/fesm2022/mesgflow-ui-kit.mjs.map +1 -0
- package/package.json +374 -0
- package/preset.css +20 -0
- package/tokens/color.css +693 -0
- package/tokens/contrast.css +68 -0
- package/tokens/elevation.css +68 -0
- package/tokens/motion.css +277 -0
- package/tokens/radius.css +69 -0
- package/tokens/typography.css +127 -0
- package/tokens.css +41 -0
- package/types/mesgflow-ui-kit-accordion.d.ts +42 -0
- package/types/mesgflow-ui-kit-alert.d.ts +60 -0
- package/types/mesgflow-ui-kit-avatar-group.d.ts +28 -0
- package/types/mesgflow-ui-kit-avatar.d.ts +23 -0
- package/types/mesgflow-ui-kit-badge.d.ts +39 -0
- package/types/mesgflow-ui-kit-banner.d.ts +42 -0
- package/types/mesgflow-ui-kit-box-input.d.ts +45 -0
- package/types/mesgflow-ui-kit-brand.d.ts +48 -0
- package/types/mesgflow-ui-kit-breadcrumb.d.ts +26 -0
- package/types/mesgflow-ui-kit-button-group.d.ts +17 -0
- package/types/mesgflow-ui-kit-button.d.ts +75 -0
- package/types/mesgflow-ui-kit-card.d.ts +71 -0
- package/types/mesgflow-ui-kit-chart.d.ts +242 -0
- package/types/mesgflow-ui-kit-checkbox.d.ts +17 -0
- package/types/mesgflow-ui-kit-chip.d.ts +46 -0
- package/types/mesgflow-ui-kit-code-block.d.ts +56 -0
- package/types/mesgflow-ui-kit-collapsible.d.ts +39 -0
- package/types/mesgflow-ui-kit-color-picker.d.ts +78 -0
- package/types/mesgflow-ui-kit-combobox.d.ts +74 -0
- package/types/mesgflow-ui-kit-command.d.ts +185 -0
- package/types/mesgflow-ui-kit-context-menu.d.ts +40 -0
- package/types/mesgflow-ui-kit-copy-button.d.ts +47 -0
- package/types/mesgflow-ui-kit-core.d.ts +508 -0
- package/types/mesgflow-ui-kit-date-picker.d.ts +215 -0
- package/types/mesgflow-ui-kit-description-list.d.ts +23 -0
- package/types/mesgflow-ui-kit-dialog.d.ts +342 -0
- package/types/mesgflow-ui-kit-divider.d.ts +23 -0
- package/types/mesgflow-ui-kit-dropzone.d.ts +47 -0
- package/types/mesgflow-ui-kit-empty-state.d.ts +18 -0
- package/types/mesgflow-ui-kit-field.d.ts +26 -0
- package/types/mesgflow-ui-kit-hover-card.d.ts +52 -0
- package/types/mesgflow-ui-kit-i18n-tr.d.ts +14 -0
- package/types/mesgflow-ui-kit-icon.d.ts +76 -0
- package/types/mesgflow-ui-kit-input.d.ts +186 -0
- package/types/mesgflow-ui-kit-kbd.d.ts +9 -0
- package/types/mesgflow-ui-kit-link.d.ts +20 -0
- package/types/mesgflow-ui-kit-menu.d.ts +53 -0
- package/types/mesgflow-ui-kit-number-input.d.ts +55 -0
- package/types/mesgflow-ui-kit-otp-input.d.ts +44 -0
- package/types/mesgflow-ui-kit-page-header.d.ts +31 -0
- package/types/mesgflow-ui-kit-pagination.d.ts +50 -0
- package/types/mesgflow-ui-kit-password-input.d.ts +33 -0
- package/types/mesgflow-ui-kit-popover.d.ts +62 -0
- package/types/mesgflow-ui-kit-progress.d.ts +32 -0
- package/types/mesgflow-ui-kit-radio.d.ts +59 -0
- package/types/mesgflow-ui-kit-rating.d.ts +56 -0
- package/types/mesgflow-ui-kit-scroll-area.d.ts +27 -0
- package/types/mesgflow-ui-kit-search-input.d.ts +72 -0
- package/types/mesgflow-ui-kit-segmented-control.d.ts +54 -0
- package/types/mesgflow-ui-kit-select.d.ts +89 -0
- package/types/mesgflow-ui-kit-sidebar.d.ts +224 -0
- package/types/mesgflow-ui-kit-skeleton.d.ts +29 -0
- package/types/mesgflow-ui-kit-slider.d.ts +40 -0
- package/types/mesgflow-ui-kit-spinner.d.ts +31 -0
- package/types/mesgflow-ui-kit-splitter.d.ts +40 -0
- package/types/mesgflow-ui-kit-stat-tile.d.ts +54 -0
- package/types/mesgflow-ui-kit-stepper.d.ts +48 -0
- package/types/mesgflow-ui-kit-switch.d.ts +34 -0
- package/types/mesgflow-ui-kit-table.d.ts +805 -0
- package/types/mesgflow-ui-kit-tabs.d.ts +269 -0
- package/types/mesgflow-ui-kit-tag-input.d.ts +33 -0
- package/types/mesgflow-ui-kit-theme-switcher.d.ts +27 -0
- package/types/mesgflow-ui-kit-theming.d.ts +745 -0
- package/types/mesgflow-ui-kit-time-picker.d.ts +54 -0
- package/types/mesgflow-ui-kit-timeline.d.ts +27 -0
- package/types/mesgflow-ui-kit-toast.d.ts +94 -0
- package/types/mesgflow-ui-kit-toggle.d.ts +110 -0
- package/types/mesgflow-ui-kit-toolbar.d.ts +52 -0
- package/types/mesgflow-ui-kit-tooltip.d.ts +55 -0
- package/types/mesgflow-ui-kit-tour.d.ts +66 -0
- package/types/mesgflow-ui-kit-tree-select.d.ts +65 -0
- package/types/mesgflow-ui-kit-tree.d.ts +44 -0
- package/types/mesgflow-ui-kit.d.ts +5444 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
|
|
4
|
+
|
|
5
|
+
interface TimeValue {
|
|
6
|
+
hour: number;
|
|
7
|
+
minute: number;
|
|
8
|
+
}
|
|
9
|
+
declare function formatTime(v: TimeValue): string;
|
|
10
|
+
/** `"9:5"`/`"09:05"`/vb. serbest biçimli metni ayrıştırır — saat 0-23, dakika 0-59 dışındaysa `null`. */
|
|
11
|
+
declare function parseTime(text: string): TimeValue | null;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* `<mf-time-picker [(value)]="meetingTime" [minuteStep]="15" />` — `value`
|
|
15
|
+
* `{hour, minute} | null` (bkz. `TimeValue`). Tetikleyici `DatePicker`'ın
|
|
16
|
+
* AYNI deseni (`InputGroup` + yazarak giriş + `mf-popover` paneli), panel
|
|
17
|
+
* TAKVİM yerine iki kaydırılabilir SÜTUN (saat/dakika) — her biri `mf-scroll-area`
|
|
18
|
+
* (bu fazda eklenen kenar-solma maskeli kaydırma alanı, bkz. `scroll-area.ts`).
|
|
19
|
+
* Yazarak giriş VE sütundan tıklayarak seçim AYNI `value` model'ine yazıyor.
|
|
20
|
+
*/
|
|
21
|
+
declare class TimePicker extends ValueAccessorBase<TimeValue | null> implements ControlValueAccessor {
|
|
22
|
+
readonly value: _angular_core.ModelSignal<TimeValue | null>;
|
|
23
|
+
/** Dakika sütunundaki adım — ör. `15` → 00/15/30/45. Varsayılan 5. */
|
|
24
|
+
readonly minuteStep: _angular_core.InputSignal<number>;
|
|
25
|
+
readonly placeholder: _angular_core.InputSignal<string | undefined>;
|
|
26
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
27
|
+
readonly hasError: _angular_core.InputSignal<boolean>;
|
|
28
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
29
|
+
readonly clearLabel: _angular_core.InputSignal<string | undefined>;
|
|
30
|
+
private readonly timePickerLabels;
|
|
31
|
+
protected readonly effectivePlaceholder: _angular_core.Signal<string>;
|
|
32
|
+
protected readonly effectiveClearLabel: _angular_core.Signal<string>;
|
|
33
|
+
protected readonly open: _angular_core.WritableSignal<boolean>;
|
|
34
|
+
protected readonly draft: _angular_core.WritableSignal<string>;
|
|
35
|
+
protected readonly hours: number[];
|
|
36
|
+
protected readonly minutes: _angular_core.Signal<number[]>;
|
|
37
|
+
private readonly inputEl;
|
|
38
|
+
constructor();
|
|
39
|
+
writeValue(value: TimeValue | null): void;
|
|
40
|
+
private setValue;
|
|
41
|
+
protected onInput(raw: string): void;
|
|
42
|
+
protected commitDraft(): void;
|
|
43
|
+
protected pickHour(hour: number): void;
|
|
44
|
+
protected pickMinute(minute: number): void;
|
|
45
|
+
protected clear(): void;
|
|
46
|
+
protected close(): void;
|
|
47
|
+
protected onEscape(): void;
|
|
48
|
+
protected optionClasses(selected: boolean): string;
|
|
49
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimePicker, never>;
|
|
50
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimePicker, "mf-time-picker", ["mfTimePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { TimePicker, formatTime, parseTime };
|
|
54
|
+
export type { TimeValue };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { MfTone } from '@mesgflow/ui-kit/core';
|
|
3
|
+
|
|
4
|
+
interface TimelineItem {
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
timestamp?: string;
|
|
8
|
+
tone?: MfTone;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* `<mf-timeline [items]="[{title: 'Sipariş alındı', timestamp: '10:02'}, ...]" />`
|
|
12
|
+
* — kronolojik bir olay günlüğü (ör. bir siparişin durum geçmişi). Her
|
|
13
|
+
* satır [nokta+çizgi] sütunu + [içerik] sütunu olan bir flex satır — çizgi
|
|
14
|
+
* `flex-1` ile SIBLING içerik sütununun yüksekliğine (varsayılan
|
|
15
|
+
* `align-items: stretch`) otomatik uzar, SON öğede hiç render EDİLMEZ
|
|
16
|
+
* (Stepper'ın `::after`+`last:` CSS'i yerine düz bir `@if` yeterli — burada
|
|
17
|
+
* "hangi satır son" bilgisi zaten `@for`'un `$last`'ından ÜCRETSİZ geliyor).
|
|
18
|
+
*/
|
|
19
|
+
declare class Timeline {
|
|
20
|
+
readonly items: i0.InputSignal<TimelineItem[]>;
|
|
21
|
+
protected dotClasses(tone: MfTone | undefined): string;
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Timeline, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<Timeline, "mf-timeline", ["mfTimeline"], { "items": { "alias": "items"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { Timeline };
|
|
27
|
+
export type { TimelineItem };
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
type ToastTone = 'success' | 'danger' | 'info' | 'warning';
|
|
4
|
+
/** @deprecated `ToastTone` kullan — `'error'` değeri `'danger'`ya taşındı (bkz. plan Faz 1a). */
|
|
5
|
+
type ToastType = ToastTone;
|
|
6
|
+
interface ToastAction {
|
|
7
|
+
label: string;
|
|
8
|
+
onClick: () => void;
|
|
9
|
+
}
|
|
10
|
+
interface ToastOptions {
|
|
11
|
+
description?: string;
|
|
12
|
+
/** ms. `0` → asla kendiliğinden kapanmaz (kullanıcı elle kapatana kadar kalır). Varsayılan 4500ms. */
|
|
13
|
+
duration?: number;
|
|
14
|
+
action?: ToastAction;
|
|
15
|
+
}
|
|
16
|
+
interface ToastItem {
|
|
17
|
+
id: number;
|
|
18
|
+
type: ToastTone;
|
|
19
|
+
title: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
action?: ToastAction;
|
|
22
|
+
/** `true` — çıkış animasyonu (`animate-toast-out`) oynuyor, `EXIT_MS` sonra listeden gerçekten kaldırılır (bkz. `dismiss()`). */
|
|
23
|
+
leaving: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Uygulamanın tek, global toast kaynağı — signal-first, `providedIn: 'root'`.
|
|
27
|
+
* Görsel katman `ToastHost`'ta (`<mf-toast-host>`, kök seviyede bir kez
|
|
28
|
+
* render edilir) — burası SADECE state. Gömülebilir bir editör host
|
|
29
|
+
* uygulamanın kendi bildirim sistemine bağımlı OLAMAZ, bu yüzden bu servis
|
|
30
|
+
* bir ürün deposunun eski bildirim servisinden kite taşındı (2026-09-07) —
|
|
31
|
+
* artık kütüphanenin kendi parçası.
|
|
32
|
+
*
|
|
33
|
+
* `success`/`error`/`info`/`warning`'in ikinci parametresi HEM düz bir
|
|
34
|
+
* `description` string'i HEM `ToastOptions` kabul eder (geriye dönük
|
|
35
|
+
* uyumluluk — mevcut `toasts.success('Kaydedildi', 'Değişiklikler
|
|
36
|
+
* uygulandı.')` çağrıları DEĞİŞMEDEN çalışmaya devam eder).
|
|
37
|
+
*/
|
|
38
|
+
declare class ToastService {
|
|
39
|
+
readonly items: _angular_core.WritableSignal<ToastItem[]>;
|
|
40
|
+
/**
|
|
41
|
+
* `ToastHost` tarafından kuruluşta ayarlanır (bkz. `toast-host.ts`
|
|
42
|
+
* `[limit]` input'u) — aynı anda gösterilecek AZAMİ toast sayısı,
|
|
43
|
+
* aşılırsa EN ESKİ (henüz çıkış animasyonu oynamayan) toast'lar ANINDA
|
|
44
|
+
* (animasyonsuz) kaldırılır. `null` (varsayılan) → sınırsız.
|
|
45
|
+
*/
|
|
46
|
+
readonly limit: _angular_core.WritableSignal<number | null>;
|
|
47
|
+
private nextId;
|
|
48
|
+
success(title: string, options?: string | ToastOptions): void;
|
|
49
|
+
error(title: string, options?: string | ToastOptions): void;
|
|
50
|
+
info(title: string, options?: string | ToastOptions): void;
|
|
51
|
+
warning(title: string, options?: string | ToastOptions): void;
|
|
52
|
+
/**
|
|
53
|
+
* İki aşamalı: önce `leaving:true` işaretler (panel `animate-toast-out`
|
|
54
|
+
* oynatır — bkz. `toast-host.html`), `EXIT_MS` sonra listeden gerçekten
|
|
55
|
+
* çıkarır. Zaten çıkış oynayan bir öğede tekrar çağrılırsa (ör. kullanıcı
|
|
56
|
+
* X'e hızlı hızlı tıklarsa) YOK SAYILIR — `list.map` idempotent.
|
|
57
|
+
*/
|
|
58
|
+
dismiss(id: number): void;
|
|
59
|
+
/** Şu an gösterilen (henüz çıkış oynamayan) TÜM toast'ları kapatır — her biri kendi çıkış animasyonuyla, `dismiss()`'in aynısı, tek tek. */
|
|
60
|
+
dismissAll(): void;
|
|
61
|
+
private push;
|
|
62
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastService, never>;
|
|
63
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
|
|
67
|
+
/**
|
|
68
|
+
* `<mf-toast-host position="bottom-right" [limit]="3" />` — host uygulamanın
|
|
69
|
+
* KÖK seviyesinde bir kez render edilir (auth ekranları dahil her yerde
|
|
70
|
+
* görünür olsun diye). `limit`, `ToastService.limit`'e bir kerelik (kuruluşta)
|
|
71
|
+
* yazılır — `ToastHost` görsel katman, sınır mantığı servis tarafında yaşar
|
|
72
|
+
* (bkz. `toast.service.ts`).
|
|
73
|
+
*/
|
|
74
|
+
declare class ToastHost {
|
|
75
|
+
protected readonly toasts: ToastService;
|
|
76
|
+
protected readonly iconFor: (type: ToastTone) => string;
|
|
77
|
+
protected readonly chipBgFor: (type: ToastTone) => string;
|
|
78
|
+
protected readonly cardClassFor: (item: ToastItem) => string;
|
|
79
|
+
/** Kapat butonunun `aria-label`'ı — toast'ın kendi başlığıyla birleştirilir. Verilmezse `MF_TOAST_LABELS`. */
|
|
80
|
+
readonly dismissLabel: _angular_core.InputSignal<string | undefined>;
|
|
81
|
+
readonly position: _angular_core.InputSignal<ToastPosition>;
|
|
82
|
+
/** Aynı anda gösterilecek azami toast sayısı — bkz. `ToastService.limit`. `null` (varsayılan) → sınırsız. */
|
|
83
|
+
readonly limit: _angular_core.InputSignal<number | null>;
|
|
84
|
+
private readonly toastLabels;
|
|
85
|
+
protected readonly effectiveDismissLabel: _angular_core.Signal<string>;
|
|
86
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
87
|
+
constructor();
|
|
88
|
+
protected onAction(item: ToastItem): void;
|
|
89
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastHost, never>;
|
|
90
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastHost, "mf-toast-host", never, { "dismissLabel": { "alias": "dismissLabel"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { ToastHost, ToastService };
|
|
94
|
+
export type { ToastAction, ToastItem, ToastOptions, ToastPosition, ToastTone, ToastType };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Signal, ElementRef } from '@angular/core';
|
|
3
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
4
|
+
import { VariantProps } from 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Basılı durum `aria-pressed` üzerinden stillenir (tek kaynak — durum sınıfı ayrıca tutulmaz):
|
|
8
|
+
* nötr `surface-active` zemin + tam `fg` metin. Vurgu rengi BİLEREK yok — biçimlendirme çubuğu
|
|
9
|
+
* gibi yoğun kümelerde marka rengi gürültü olur (Radix/Linear aynı tercihi yapar).
|
|
10
|
+
*/
|
|
11
|
+
declare const toggleVariants: (props?: ({
|
|
12
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
13
|
+
appearance?: "ghost" | "outline" | null | undefined;
|
|
14
|
+
iconOnly?: boolean | null | undefined;
|
|
15
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
16
|
+
type ToggleSize = NonNullable<VariantProps<typeof toggleVariants>['size']>;
|
|
17
|
+
type ToggleAppearance = NonNullable<VariantProps<typeof toggleVariants>['appearance']>;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* `<button mfToggle [(pressed)]="bold" aria-label="Kalın"><span mfIcon>format_bold</span></button>`
|
|
21
|
+
*
|
|
22
|
+
* İki durumlu düğme — `aria-pressed` ile duyurulur (checkbox DEĞİL: eylem gibi görünen ama durum
|
|
23
|
+
* taşıyan düğme, WAI-ARIA "button" deseni). İkon-tek kullanımda `aria-label` zorunlu, `iconOnly`
|
|
24
|
+
* kare yapar. Birbirine bağlı düğmeler için `mf-toggle-group`.
|
|
25
|
+
*/
|
|
26
|
+
declare class Toggle {
|
|
27
|
+
readonly pressed: _angular_core.ModelSignal<boolean>;
|
|
28
|
+
readonly size: _angular_core.InputSignal<ToggleSize>;
|
|
29
|
+
readonly appearance: _angular_core.InputSignal<ToggleAppearance>;
|
|
30
|
+
readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
31
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
32
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Toggle, never>;
|
|
33
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Toggle, "button[mfToggle]", ["mfToggle"], { "pressed": { "alias": "pressed"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; }, { "pressed": "pressedChange"; }, never, never, true, never>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type ToggleGroupType = 'single' | 'multiple';
|
|
37
|
+
/** Öğelerin gruba eriştiği sözleşme — dosya içi sınıf sırası döngüsü olmasın diye arayüz. */
|
|
38
|
+
interface ToggleGroupContext {
|
|
39
|
+
readonly size: Signal<ToggleSize>;
|
|
40
|
+
readonly appearance: Signal<ToggleAppearance>;
|
|
41
|
+
readonly disabled: Signal<boolean>;
|
|
42
|
+
readonly tabStopValue: Signal<string | null>;
|
|
43
|
+
isPressed(value: string): boolean;
|
|
44
|
+
toggle(value: string): void;
|
|
45
|
+
onKeydown(event: KeyboardEvent, item: ToggleGroupItem): void;
|
|
46
|
+
onFocus(item: ToggleGroupItem): void;
|
|
47
|
+
}
|
|
48
|
+
/** `<button mfToggleGroupItem value="bold" aria-label="Kalın" iconOnly>…</button>` — bkz. `ToggleGroup`. */
|
|
49
|
+
declare class ToggleGroupItem {
|
|
50
|
+
/**
|
|
51
|
+
* Zorunlu anlamda — ama `input.required` DEĞİL: grubun sekme durağı hesabı TÜM öğelerin
|
|
52
|
+
* değerini okur; `@for` içinde `[value]` bağlandığında bir öğenin host bağlaması, girdileri
|
|
53
|
+
* henüz atanmamış SONRAKİ öğeyi okuyup NG0950 fırlatıyordu (ThemeSwitcher testinde yakalandı).
|
|
54
|
+
*/
|
|
55
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
56
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
57
|
+
readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
58
|
+
protected readonly group: ToggleGroupContext;
|
|
59
|
+
readonly element: ElementRef<HTMLButtonElement>;
|
|
60
|
+
readonly isDisabled: Signal<boolean>;
|
|
61
|
+
protected readonly pressed: Signal<boolean>;
|
|
62
|
+
protected readonly classes: Signal<string>;
|
|
63
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToggleGroupItem, never>;
|
|
64
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ToggleGroupItem, "button[mfToggleGroupItem]", ["mfToggleGroupItem"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* `<mf-toggle-group type="multiple" [(value)]="marks" ariaLabel="Biçim">
|
|
68
|
+
* <button mfToggleGroupItem value="bold" aria-label="Kalın" iconOnly>…</button>
|
|
69
|
+
* </mf-toggle-group>`
|
|
70
|
+
*
|
|
71
|
+
* Birbirine bağlı iki durumlu düğmeler. `value` HER ZAMAN bir dizi (tek modda en fazla bir öğe) —
|
|
72
|
+
* iki mod için ayrı model tipi tutmamak için. `single`'da `allowEmpty=false` seçimi boşaltmayı
|
|
73
|
+
* engeller (hizalama gibi daima bir değeri olan kümeler).
|
|
74
|
+
*
|
|
75
|
+
* Klavye: grup TEK sekme durağıdır (dolaşan tabindex — basılı ilk öğe, yoksa ilk etkin öğe, son
|
|
76
|
+
* odaklanan hatırlanır); yatayda ←/→ (RTL'de görsel yöne göre ters), dikeyde ↑/↓, Home/End;
|
|
77
|
+
* devre dışı öğeler atlanır, sarma yapılır. Semantik `role="group"` + her öğede `aria-pressed`.
|
|
78
|
+
* `@angular/aria/toolbar` BİLEREK kullanılmadı: projekte edilen tüketici düğmeleriyle kayıt
|
|
79
|
+
* döngüsü, tıklama olmadan boş `valueChange` üretebiliyordu (bkz. `SegmentedControl` notu).
|
|
80
|
+
*/
|
|
81
|
+
declare class ToggleGroup implements ToggleGroupContext {
|
|
82
|
+
readonly type: _angular_core.InputSignal<ToggleGroupType>;
|
|
83
|
+
readonly value: _angular_core.ModelSignal<readonly string[]>;
|
|
84
|
+
readonly size: _angular_core.InputSignal<ToggleSize>;
|
|
85
|
+
readonly appearance: _angular_core.InputSignal<ToggleAppearance>;
|
|
86
|
+
readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
|
|
87
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
88
|
+
/** `single` modda basılı öğeye tekrar basmak seçimi boşaltabilir mi. */
|
|
89
|
+
readonly allowEmpty: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
90
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
91
|
+
private readonly items;
|
|
92
|
+
private readonly host;
|
|
93
|
+
private readonly lastFocused;
|
|
94
|
+
private readonly enabledItems;
|
|
95
|
+
readonly tabStopValue: Signal<string>;
|
|
96
|
+
/**
|
|
97
|
+
* `outline`: bitişik şerit (Button Group ile aynı kenar birleştirme — iç köşeler kare, 1px
|
|
98
|
+
* kenarlık çakışır, odaklı öğe üste çıkar). `ghost`: aralıklı, zeminsiz.
|
|
99
|
+
*/
|
|
100
|
+
protected readonly classes: Signal<string>;
|
|
101
|
+
isPressed(value: string): boolean;
|
|
102
|
+
toggle(value: string): void;
|
|
103
|
+
onFocus(item: ToggleGroupItem): void;
|
|
104
|
+
onKeydown(event: KeyboardEvent, item: ToggleGroupItem): void;
|
|
105
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToggleGroup, never>;
|
|
106
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToggleGroup, "mf-toggle-group", ["mfToggleGroup"], { "type": { "alias": "type"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowEmpty": { "alias": "allowEmpty"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, ["items"], ["*"], true, never>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export { Toggle, ToggleGroup, ToggleGroupItem, toggleVariants };
|
|
110
|
+
export type { ToggleAppearance, ToggleGroupType, ToggleSize };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import * as i1 from '@angular/aria/toolbar';
|
|
3
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
4
|
+
import { VariantProps } from 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `<mf-toolbar><button mfToolbarButton value="bold">B</button>...</mf-toolbar>`
|
|
8
|
+
*
|
|
9
|
+
* Genel amaçlı gruplu buton çubuğu — zengin metin editörü/tuval araç
|
|
10
|
+
* çubukları için düşünüldü. ARIA/klavye (roving tabindex, ok tuşu
|
|
11
|
+
* navigasyonu) `@angular/aria/toolbar`'ın `Toolbar` pattern'inden
|
|
12
|
+
* `hostDirectives` ile geliyor — `SegmentedControl`'ün AYNI pattern ailesini
|
|
13
|
+
* kullandığı ama SEÇİM DURUMU (tek/çoklu) tuttuğu yere karşılık, bu primitif
|
|
14
|
+
* seçim durumu TUTMAZ: tekil aksiyon düğmeleri için `mfToolbarButton`
|
|
15
|
+
* yeter, dışlayıcı bir alt-grup gerekiyorsa (ör. hizalama) tüketici kendi
|
|
16
|
+
* `<div ngToolbarWidgetGroup [multi]="false">` sarmalayıcısını ekler (bkz.
|
|
17
|
+
* `@angular/aria/toolbar`'ın kendi JSDoc örneği).
|
|
18
|
+
*/
|
|
19
|
+
declare class Toolbar {
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Toolbar, never>;
|
|
21
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<Toolbar, "mf-toolbar", ["mfToolbar"], {}, {}, never, ["*"], true, [{ directive: typeof i1.Toolbar; inputs: { "orientation": "orientation"; "disabled": "disabled"; "wrap": "wrap"; }; outputs: {}; }]>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* `<button mfToolbarButton value="bold" [pressed]="isBold()">B</button>` —
|
|
26
|
+
* `mf-toolbar` içine konur. `pressed`, bir `ngToolbarWidgetGroup` sarmalayıcısı
|
|
27
|
+
* OLMADAN da (ör. bağımsız bir toggle — kalın/italik gibi birbirinden bağımsız
|
|
28
|
+
* açma-kapama düğmeleri) tüketicinin kendi state'inden görsel "aktif" durumunu
|
|
29
|
+
* bildirmesi için var; bir grup içindeyse `widget.selected()` zaten aynı
|
|
30
|
+
* görevi görür, ikisi OR'lanıyor.
|
|
31
|
+
*/
|
|
32
|
+
declare class ToolbarButton {
|
|
33
|
+
private readonly widget;
|
|
34
|
+
readonly pressed: i0.InputSignal<boolean>;
|
|
35
|
+
protected readonly classes: i0.Signal<string>;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarButton, never>;
|
|
37
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ToolbarButton, "button[mfToolbarButton]", never, { "pressed": { "alias": "pressed"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.ToolbarWidget; inputs: { "value": "value"; "disabled": "disabled"; "id": "id"; }; outputs: {}; }]>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** `<mf-toolbar-separator />` — `mf-toolbar` içindeki buton gruplarını ayırmak için dikey çizgi. */
|
|
41
|
+
declare class ToolbarSeparator {
|
|
42
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarSeparator, never>;
|
|
43
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarSeparator, "mf-toolbar-separator", never, {}, {}, never, never, true, never>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
declare const toolbarButtonVariants: (props?: ({
|
|
47
|
+
active?: boolean | null | undefined;
|
|
48
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
49
|
+
type ToolbarButtonActive = VariantProps<typeof toolbarButtonVariants>['active'];
|
|
50
|
+
|
|
51
|
+
export { Toolbar, ToolbarButton, ToolbarSeparator, toolbarButtonVariants };
|
|
52
|
+
export type { ToolbarButtonActive };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { OnDestroy, TemplateRef } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
5
|
+
/**
|
|
6
|
+
* `<button mfButton [mfTooltip]="'Filtreler'">` (düz metin) veya
|
|
7
|
+
* `<button mfButton [mfTooltipContent]="richTpl">` (bkz. aşağıdaki örnek —
|
|
8
|
+
* zengin/reaktif içerik) — hover/focus'ta CDK Overlay ile konumlanan bir
|
|
9
|
+
* balon gösterir. `mfTooltipContent` VERİLMİŞSE `mfTooltip` YOK SAYILIR.
|
|
10
|
+
*
|
|
11
|
+
* ```html
|
|
12
|
+
* <button mfButton [mfTooltipContent]="kbdHint">Kaydet</button>
|
|
13
|
+
* <ng-template #kbdHint>
|
|
14
|
+
* Kaydet <kbd mfKbd>Ctrl</kbd>+<kbd mfKbd>S</kbd>
|
|
15
|
+
* </ng-template>
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Düz metin YOLU (ayrı bir Angular component/`ComponentPortal` kurmadan) ham
|
|
19
|
+
* bir DOM node'u ile çiziliyor — statik metin için fazla makine olurdu.
|
|
20
|
+
* Şablon YOLU `TemplatePortal` kullanır (gerçek Angular içeriği — binding/
|
|
21
|
+
* directive/başka bir bileşen barındırabilir), bunun için `ViewContainerRef`
|
|
22
|
+
* gerekiyor.
|
|
23
|
+
*/
|
|
24
|
+
declare class Tooltip implements OnDestroy {
|
|
25
|
+
/** Boş string verilirse (ve `mfTooltipContent` de yoksa) tooltip tamamen devre dışı kalır (ör. koşullu etiketler için). */
|
|
26
|
+
readonly mfTooltip: _angular_core.InputSignal<string>;
|
|
27
|
+
/** Verilmişse `mfTooltip`'in YERİNE geçer — bkz. sınıf üstündeki JSDoc örneği. */
|
|
28
|
+
readonly mfTooltipContent: _angular_core.InputSignal<TemplateRef<unknown> | null>;
|
|
29
|
+
readonly tooltipPosition: _angular_core.InputSignal<TooltipPosition>;
|
|
30
|
+
private readonly overlay;
|
|
31
|
+
private readonly elementRef;
|
|
32
|
+
private readonly viewContainerRef;
|
|
33
|
+
private overlayRef?;
|
|
34
|
+
private bubbleEl?;
|
|
35
|
+
private showHandle?;
|
|
36
|
+
protected scheduleShow(): void;
|
|
37
|
+
protected show(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Public: `SearchInput` gibi, kendi state değişimiyle tooltip'i ANINDA
|
|
40
|
+
* kapatmak isteyen tüketiciler için (bkz. search-input.ts `expand()`) —
|
|
41
|
+
* BİLEREK senkron: tooltip hover/focus/Escape gibi yüksek frekanslı,
|
|
42
|
+
* anlık etkileşimlerle kapanıyor, `Popover`'ın gecikmeli-dispose deseni
|
|
43
|
+
* (bkz. `popover.ts` `EXIT_MS`) burada gereksiz karmaşıklık + testlerin
|
|
44
|
+
* beklediği "blur → anında kaldırılır" sözleşmesini bozardı (bkz.
|
|
45
|
+
* `tooltip.spec.ts`). Giriş animasyonu (`show()`teki `animate-overlay-in`)
|
|
46
|
+
* yeterli — önceden tooltip'in HİÇ animasyonu yoktu (gerçek bulgu).
|
|
47
|
+
*/
|
|
48
|
+
hide(): void;
|
|
49
|
+
ngOnDestroy(): void;
|
|
50
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tooltip, never>;
|
|
51
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Tooltip, "[mfTooltip], [mfTooltipContent]", ["mfTooltip"], { "mfTooltip": { "alias": "mfTooltip"; "required": false; "isSignal": true; }; "mfTooltipContent": { "alias": "mfTooltipContent"; "required": false; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { Tooltip };
|
|
55
|
+
export type { TooltipPosition };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ElementRef } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
type TourPlacement = 'bottom' | 'top' | 'start' | 'end';
|
|
5
|
+
interface TourStep {
|
|
6
|
+
/**
|
|
7
|
+
* Vurgulanacak öğe: CSS seçicisi, öğe ya da `ElementRef`. Verilmezse adım ekran ortasında
|
|
8
|
+
* bir karşılama/kapanış kartı olarak gösterilir (spot ışığı deliksiz karartır).
|
|
9
|
+
*/
|
|
10
|
+
target?: string | Element | ElementRef<Element>;
|
|
11
|
+
title: string;
|
|
12
|
+
content: string;
|
|
13
|
+
/** Kartın hedefe göre yeri — mantıksal (`start`/`end` RTL'de yer değiştirir). Sığmazsa karşı taraf. */
|
|
14
|
+
placement?: TourPlacement;
|
|
15
|
+
}
|
|
16
|
+
type TourResult = 'completed' | 'skipped';
|
|
17
|
+
interface TourOptions {
|
|
18
|
+
/** Hedefin çevresindeki boşluk (px). */
|
|
19
|
+
padding?: number;
|
|
20
|
+
/** Her adım değişiminde (0 tabanlı indeks) — analitik ya da hedefin görünür olması için. */
|
|
21
|
+
stepChange?: (index: number, step: TourStep) => void;
|
|
22
|
+
}
|
|
23
|
+
interface SpotlightRect {
|
|
24
|
+
top: number;
|
|
25
|
+
left: number;
|
|
26
|
+
width: number;
|
|
27
|
+
height: number;
|
|
28
|
+
}
|
|
29
|
+
/** Bir tur çalışmasının durumu — servis ile spot ışığı ve kart bileşenleri bunu paylaşır. */
|
|
30
|
+
declare class TourRun {
|
|
31
|
+
readonly steps: readonly TourStep[];
|
|
32
|
+
private readonly onNavigate;
|
|
33
|
+
private readonly onFinish;
|
|
34
|
+
readonly index: _angular_core.WritableSignal<number>;
|
|
35
|
+
/** Hedefin viewport'taki kutusu (padding dahil); hedefsiz adımda `null`. */
|
|
36
|
+
readonly rect: _angular_core.WritableSignal<SpotlightRect | null>;
|
|
37
|
+
readonly step: _angular_core.Signal<TourStep>;
|
|
38
|
+
readonly isFirst: _angular_core.Signal<boolean>;
|
|
39
|
+
readonly isLast: _angular_core.Signal<boolean>;
|
|
40
|
+
constructor(steps: readonly TourStep[], onNavigate: (index: number) => void, onFinish: (result: TourResult) => void);
|
|
41
|
+
next(): void;
|
|
42
|
+
back(): void;
|
|
43
|
+
skip(): void;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* `const result = await tour.start([{ target: '#new-campaign', title: '…', content: '…' }, …]);`
|
|
48
|
+
*
|
|
49
|
+
* Ürün turu / coachmark — `help` tonu tam bunun için. İki overlay: tam ekran spot ışığı (karartır,
|
|
50
|
+
* tıklamaları yutar) ve hedefe bağlı adım kartı. Her adımda hedef görünür alana kaydırılır
|
|
51
|
+
* (azaltılmış harekette anında), kaydırma/yeniden boyutlandırmada delik ve kart birlikte izler.
|
|
52
|
+
* Bulunamayan hedef ortalanmış karta düşer (tur kırılmaz). Aynı anda tek tur; bitince odak
|
|
53
|
+
* turdan önceki öğeye döner. Sonuç: `'completed'` ya da `'skipped'` (Esc, ×).
|
|
54
|
+
*/
|
|
55
|
+
declare class TourService {
|
|
56
|
+
private readonly injector;
|
|
57
|
+
private readonly document;
|
|
58
|
+
private active;
|
|
59
|
+
get isActive(): boolean;
|
|
60
|
+
start(steps: readonly TourStep[], options?: TourOptions): Promise<TourResult>;
|
|
61
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TourService, never>;
|
|
62
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export { TourRun, TourService };
|
|
66
|
+
export type { SpotlightRect, TourOptions, TourPlacement, TourResult, TourStep };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
|
|
2
|
+
import { ValueAccessorBase, MfSize } from '@mesgflow/ui-kit/core';
|
|
3
|
+
import * as _angular_core from '@angular/core';
|
|
4
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
5
|
+
import { TreeNode } from '@mesgflow/ui-kit/tree';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `<mf-tree-select [nodes]="regions" [(value)]="chosen" multi searchable />`
|
|
9
|
+
*
|
|
10
|
+
* Hiyerarşik seçenekler için Select — kategori, bölge, klasör. Tetikleyici Select ile AYNI
|
|
11
|
+
* görünüm (çoklu seçimde yongalar + "+N"); panel kitin `Tree`'si (WAI-ARIA tree: oklar, Home/End,
|
|
12
|
+
* yazarak ara, Enter/Space seçim — `@angular/aria/tree`'den).
|
|
13
|
+
*
|
|
14
|
+
* `searchable`: panelin başında aksan duyarsız arama — eşleşmeler ATALARIYLA tutulur ve dallar
|
|
15
|
+
* açılır (bkz. `filterTree`). Tek seçimde seçim paneli kapatır ve odağı tetikleyiciye döndürür;
|
|
16
|
+
* çoklu seçimde panel açık kalır. `value` her zaman dizi (Tree ile aynı sözleşme).
|
|
17
|
+
*/
|
|
18
|
+
declare class TreeSelect<T> extends ValueAccessorBase<T[]> implements ControlValueAccessor {
|
|
19
|
+
readonly nodes: _angular_core.InputSignal<TreeNode<T>[]>;
|
|
20
|
+
readonly value: _angular_core.ModelSignal<T[]>;
|
|
21
|
+
readonly multi: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
22
|
+
readonly searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
23
|
+
readonly placeholder: _angular_core.InputSignal<string | undefined>;
|
|
24
|
+
readonly size: _angular_core.InputSignal<MfSize>;
|
|
25
|
+
readonly hasError: _angular_core.InputSignal<boolean>;
|
|
26
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
27
|
+
/** Tetikleyicinin (ve ağacın) erişilebilir adı — görünür bir etiket yoksa zorunlu. */
|
|
28
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
29
|
+
readonly maxVisibleChips: _angular_core.InputSignal<number>;
|
|
30
|
+
protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfTreeSelectLabels>;
|
|
31
|
+
private readonly trigger;
|
|
32
|
+
private readonly panel;
|
|
33
|
+
protected readonly open: _angular_core.WritableSignal<boolean>;
|
|
34
|
+
protected readonly query: _angular_core.WritableSignal<string>;
|
|
35
|
+
private readonly formDisabled;
|
|
36
|
+
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
37
|
+
protected readonly effectivePlaceholder: _angular_core.Signal<string>;
|
|
38
|
+
protected readonly visibleNodes: _angular_core.Signal<TreeNode<T>[]>;
|
|
39
|
+
protected readonly searching: _angular_core.Signal<boolean>;
|
|
40
|
+
private readonly labelByValue;
|
|
41
|
+
protected readonly selectedLabels: _angular_core.Signal<string[]>;
|
|
42
|
+
protected readonly visibleChips: _angular_core.Signal<string[]>;
|
|
43
|
+
protected readonly overflowCount: _angular_core.Signal<number>;
|
|
44
|
+
protected readonly triggerClasses: _angular_core.Signal<string>;
|
|
45
|
+
constructor();
|
|
46
|
+
protected toggle(): void;
|
|
47
|
+
protected onTriggerKeydown(event: KeyboardEvent): void;
|
|
48
|
+
protected onTreeValue(values: T[]): void;
|
|
49
|
+
protected close(restoreFocus: boolean): void;
|
|
50
|
+
writeValue(value: T[] | null): void;
|
|
51
|
+
setDisabledState(disabled: boolean): void;
|
|
52
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeSelect<any>, never>;
|
|
53
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeSelect<any>, "mf-tree-select", ["mfTreeSelect"], { "nodes": { "alias": "nodes"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "maxVisibleChips": { "alias": "maxVisibleChips"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Etiketi sorguyu içeren düğümleri, ATALARIYLA birlikte tutar (bağlam kaybolmasın — "Kadıköy"
|
|
58
|
+
* bulunduğunda "İstanbul › Kadıköy" yolu görünür). Eşleşen bir düğümün çocukları da kalır
|
|
59
|
+
* (bir kategoriyi aramak altındakileri de gösterir). Boş sorgu ağacı aynen döner.
|
|
60
|
+
*/
|
|
61
|
+
declare function filterTree<T>(nodes: readonly TreeNode<T>[], query: string): TreeNode<T>[];
|
|
62
|
+
/** `value → label` eşlemesi (tetikleyici metni/yongaları için) — değer kimliğiyle (`===`). */
|
|
63
|
+
declare function flattenTree<T>(nodes: readonly TreeNode<T>[]): Map<T, string>;
|
|
64
|
+
|
|
65
|
+
export { TreeSelect, filterTree, flattenTree };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
|
|
4
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
5
|
+
import { VariantProps } from 'class-variance-authority';
|
|
6
|
+
|
|
7
|
+
interface TreeNode<T> {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
value: T;
|
|
11
|
+
children?: TreeNode<T>[];
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* `<mf-tree [nodes]="layers" [(value)]="selectedIds" />` — katman/yapı
|
|
16
|
+
* paneli gibi iç içe, klavye gezintili ağaçlar için. ARIA/klavye (ok
|
|
17
|
+
* tuşları, typeahead, seviyeye göre girinti) `@angular/aria/tree`'nin
|
|
18
|
+
* `Tree`/`TreeItem`/`TreeItemGroup` pattern'inden geliyor — dokümantasyonun
|
|
19
|
+
* KENDİ önerdiği ÖZYİNELEMELİ (`ngTemplateOutlet` + kendi kendine referans
|
|
20
|
+
* veren `#treeNodes` template) render deseni birebir izlendi, çünkü veri
|
|
21
|
+
* derinliği (`TreeNode.children`) derleme zamanında bilinmiyor.
|
|
22
|
+
*/
|
|
23
|
+
declare class Tree<T> extends ValueAccessorBase<T[]> implements ControlValueAccessor {
|
|
24
|
+
readonly nodes: _angular_core.InputSignal<TreeNode<T>[]>;
|
|
25
|
+
readonly value: _angular_core.ModelSignal<T[]>;
|
|
26
|
+
readonly multi: _angular_core.InputSignal<boolean>;
|
|
27
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
28
|
+
/** Tüm dalları açık başlatır (ör. arama sonuçları) — kullanıcı yine tek tek kapatabilir. */
|
|
29
|
+
readonly expandAll: _angular_core.InputSignal<boolean>;
|
|
30
|
+
constructor();
|
|
31
|
+
writeValue(value: T[]): void;
|
|
32
|
+
protected rowClasses(selected: boolean | undefined, disabled: boolean): string;
|
|
33
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tree<any>, never>;
|
|
34
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tree<any>, "mf-tree", ["mfTree"], { "nodes": { "alias": "nodes"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "expandAll": { "alias": "expandAll"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
declare const treeRowVariants: (props?: ({
|
|
38
|
+
selected?: boolean | null | undefined;
|
|
39
|
+
disabled?: boolean | null | undefined;
|
|
40
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
41
|
+
type TreeRowSelected = VariantProps<typeof treeRowVariants>['selected'];
|
|
42
|
+
|
|
43
|
+
export { Tree, treeRowVariants };
|
|
44
|
+
export type { TreeNode, TreeRowSelected };
|