@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,224 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import { VariantProps } from 'class-variance-authority';
|
|
4
|
+
import { cn } from '@mesgflow/ui-kit/core';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Kök panel: kart değil, yapısal/kenar-kenara chrome — `shadow-*`/`rounded-*`
|
|
8
|
+
* YOK. `bg-chrome` (styles.css'te tanımlı, moda göre 975/950 basamağı arasında
|
|
9
|
+
* takas olan yüzey rolü) — dark modda uygulamanın EN KOYU tonu, "chrome her
|
|
10
|
+
* zaman içerikten koyu" kuralının kaynağı. Kenar artık `border-hairline`
|
|
11
|
+
* (border-first depth, 2026-09 Deep Emerald geçişi) — `border-e` UZUN-EL
|
|
12
|
+
* yazıldı (`border-e-hairline`, kısaltma DEĞİL) ki `appearance="brand"`'ın
|
|
13
|
+
* `border-e-transparent`'ı AYNI özgüllükte, cascade sırasına bağlı olmadan
|
|
14
|
+
* güvenle üstüne yazabilsin.
|
|
15
|
+
*
|
|
16
|
+
* `appearance: 'chrome' | 'brand' | 'brand-light'` — `group/sidebar` + kök
|
|
17
|
+
* elementteki `data-appearance` ATTRIBUTE'u (bkz. sidebar.html), alt
|
|
18
|
+
* bileşenler kendi class'larına yeni bir input EKLEMEDEN
|
|
19
|
+
* `group-data-[appearance=brand]/sidebar:`/`group-data-[appearance=brand-light]/sidebar:`
|
|
20
|
+
* varyantıyla opt-in eder — CDK overlay'e (flyout/tenant listesi) taşınan
|
|
21
|
+
* içerik bu grubun TORUNU DEĞİLDİR, bu yüzden overlay panelleri bilerek
|
|
22
|
+
* katı `chrome` kalır (istenen: aşırı marka rengi overlay'lerde yorucu olur).
|
|
23
|
+
*
|
|
24
|
+
* `brand-light` — kullanıcı isteğiyle eklendi (varsayılan HÂLÂ `chrome`,
|
|
25
|
+
* `brand`'in KENDİSİ birebir korunuyor — bu SADECE üçüncü bir seçenek):
|
|
26
|
+
* `brand`in "her adımda bir basamak açığa doğru" desenini primary rampasının
|
|
27
|
+
* AÇIK ucuna yansıtır (900→100, 800→200, 300→700, beyaz→900 gibi) — aynı
|
|
28
|
+
* "iki modda AYNI, marka her zaman sabit" felsefesi, sadece açık zeminde.
|
|
29
|
+
* `primary-100` `neutral-100` canvas'a karşı yalnızca 1.08:1 (saf L farkı) —
|
|
30
|
+
* `brand`in aksine (900 her zeminden zaten kopuyor) burada kenarlık BİLEREK
|
|
31
|
+
* KORUNUYOR (`border-e-primary-200`) ki blok net ayrışsın.
|
|
32
|
+
*/
|
|
33
|
+
declare const sidebarVariants: (props?: ({
|
|
34
|
+
collapsed?: boolean | null | undefined;
|
|
35
|
+
appearance?: "chrome" | "brand" | "brand-light" | null | undefined;
|
|
36
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
37
|
+
/**
|
|
38
|
+
* Nav satırı (leaf veya parent-toggle) — `rounded-sm`(6px, menü öğesi kademesi,
|
|
39
|
+
* bkz. styles.css radius notu), panel değil kontrol. `border-s-2 border-s-
|
|
40
|
+
* transparent` BASE'te HER ZAMAN rezerve — aktif olunca sadece rengi değişir,
|
|
41
|
+
* yoksa 2px'lik ray aktifleşirken satırın geri kalanı kayardı (layout shift).
|
|
42
|
+
*
|
|
43
|
+
* Brand sınıfları (`group-data-[appearance=brand]/sidebar:…`) özgüllükte
|
|
44
|
+
* (0,2,0) — düz `text-fg-muted`/`hover:bg-surface-alt` (0,1,0) ve `dark:`
|
|
45
|
+
* (0,1,0) varyantlarının HER İKİSİNİ de cascade sırasından bağımsız yener,
|
|
46
|
+
* bu yüzden ayrı bir `dark:` ikizi yazmaya gerek yok (brand görünümü iki
|
|
47
|
+
* modda da AYNI).
|
|
48
|
+
*/
|
|
49
|
+
declare const sidebarNavItemVariants: (props?: ({
|
|
50
|
+
active?: boolean | null | undefined;
|
|
51
|
+
collapsed?: boolean | null | undefined;
|
|
52
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
53
|
+
type SidebarCollapsedVariant = VariantProps<typeof sidebarVariants>['collapsed'];
|
|
54
|
+
type SidebarAppearance = NonNullable<VariantProps<typeof sidebarVariants>['appearance']>;
|
|
55
|
+
|
|
56
|
+
interface SidebarNavItem {
|
|
57
|
+
id: string;
|
|
58
|
+
label: string;
|
|
59
|
+
icon: string;
|
|
60
|
+
badge?: string | number;
|
|
61
|
+
/** İleride gerçek Router entegrasyonu için opsiyonel — ui-kit demosu kullanmıyor. */
|
|
62
|
+
routerLink?: string | unknown[];
|
|
63
|
+
/** Sadece 1 seviye render edilir — bir child'ın kendi `children`'ı yoksayılır. */
|
|
64
|
+
children?: SidebarNavItem[];
|
|
65
|
+
}
|
|
66
|
+
interface SidebarTenant {
|
|
67
|
+
id: string;
|
|
68
|
+
name: string;
|
|
69
|
+
}
|
|
70
|
+
interface SidebarUser {
|
|
71
|
+
name: string;
|
|
72
|
+
email?: string;
|
|
73
|
+
role?: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* `<mf-sidebar [navItems]="items" [tenants]="tenants" [user]="user" [(collapsed)]="collapsed" />`
|
|
78
|
+
*
|
|
79
|
+
* Tamamen generic/yeniden kullanılabilir bir premium sidebar — Table'daki gibi,
|
|
80
|
+
* gerçek veriye değil `input()`lara bağlı (bkz. layout/shell/shell.ts'in bunu
|
|
81
|
+
* gerçek veriyle beslemesi). Üç bölge: tenant switcher (üst), navigasyon
|
|
82
|
+
* (orta, açılır gruplu), kullanıcı satırı (alt, tıklanınca `profileClick`
|
|
83
|
+
* emit eder — menü AÇMAZ) — hepsi tek bir dikey panelde.
|
|
84
|
+
*/
|
|
85
|
+
declare class Sidebar {
|
|
86
|
+
readonly tenants: _angular_core.InputSignal<SidebarTenant[]>;
|
|
87
|
+
readonly activeTenantId: _angular_core.ModelSignal<string | null>;
|
|
88
|
+
readonly navItems: _angular_core.InputSignal<SidebarNavItem[]>;
|
|
89
|
+
readonly activeItemId: _angular_core.ModelSignal<string | null>;
|
|
90
|
+
readonly user: _angular_core.InputSignal<SidebarUser | null>;
|
|
91
|
+
/**
|
|
92
|
+
* `false` -- kullanıcı satırı VE üstündeki ayraç HİÇ render edilmez.
|
|
93
|
+
* Varsayılan `true` (mevcut davranış korunur): `user()` `null` olsa bile
|
|
94
|
+
* `SidebarUserMenu` kendi "oturum açılmadı" boş-durumunu gösterir (bilinçli,
|
|
95
|
+
* bkz. `sidebar-user-menu.ts`) — bu, kullanıcı kavramı OLMAYAN tüketiciler
|
|
96
|
+
* (ör. salt-dokümantasyon/showcase kabukları) için YANLIŞ bir sinyal
|
|
97
|
+
* olabiliyordu (gerçek bulgu). `false` geçmek o tüketicilerin kaçış yolu.
|
|
98
|
+
*/
|
|
99
|
+
readonly showUserMenu: _angular_core.InputSignal<boolean>;
|
|
100
|
+
readonly collapsed: _angular_core.ModelSignal<boolean>;
|
|
101
|
+
/**
|
|
102
|
+
* Sidebar'ın kendi kenarındaki yuvarlak daralt/genişlet butonu. Varsayılan
|
|
103
|
+
* `true` — tetikleyiciyi kendi navbar'ına taşıyan tüketiciler `false` geçer,
|
|
104
|
+
* aksi halde masaüstünde İKİ ayrı daraltma kontrolü olurdu.
|
|
105
|
+
*/
|
|
106
|
+
readonly showCollapseToggle: _angular_core.InputSignal<boolean>;
|
|
107
|
+
/**
|
|
108
|
+
* `'chrome'` (varsayılan, mevcut nötr görünüm) | `'brand'` (kök zemini
|
|
109
|
+
* `primary-900`, nav metni/aktif ray marka tonlu — iki modda AYNI, bkz.
|
|
110
|
+
* `sidebar.variants.ts` doc'u) | `'brand-light'` (AYNI marka kimliği,
|
|
111
|
+
* kök zemini `primary-100` — koyu yerine açık bir marka bloğu, yine iki
|
|
112
|
+
* modda AYNI). CDK overlay'e taşınan flyout/tenant listesi bu grubun
|
|
113
|
+
* TORUNU olmadığından her zaman katı `chrome` kalır.
|
|
114
|
+
*/
|
|
115
|
+
readonly appearance: _angular_core.InputSignal<SidebarAppearance>;
|
|
116
|
+
/** Verilmezse `MF_SIDEBAR_LABELS`'a düşer — `SidebarTenantSwitcher`/`SidebarUserMenu`'nün KENDİ etiketleri artık AYRICA buradan prop-drilling YAPILMIYOR, ikisi de `MF_SIDEBAR_LABELS`'ı doğrudan inject ediyor. */
|
|
117
|
+
readonly collapseLabel: _angular_core.InputSignal<string | undefined>;
|
|
118
|
+
readonly expandLabel: _angular_core.InputSignal<string | undefined>;
|
|
119
|
+
readonly navAriaLabel: _angular_core.InputSignal<string | undefined>;
|
|
120
|
+
readonly tenantChange: _angular_core.OutputEmitterRef<SidebarTenant>;
|
|
121
|
+
readonly itemClick: _angular_core.OutputEmitterRef<SidebarNavItem>;
|
|
122
|
+
/** Kullanıcı satırına tıklanınca — profile navigasyonu tüketicinin sorumluluğu. */
|
|
123
|
+
readonly profileClick: _angular_core.OutputEmitterRef<void>;
|
|
124
|
+
private readonly sidebarLabels;
|
|
125
|
+
protected readonly effectiveCollapseLabel: _angular_core.Signal<string>;
|
|
126
|
+
protected readonly effectiveExpandLabel: _angular_core.Signal<string>;
|
|
127
|
+
protected readonly effectiveNavAriaLabel: _angular_core.Signal<string>;
|
|
128
|
+
protected readonly rootClasses: _angular_core.Signal<string>;
|
|
129
|
+
/** Genişkenken hangi gruplar açık — her grup BAĞIMSIZ açılır/kapanır (akordeon değil, kullanıcı kararı). `model()` — tüketici okuyabilir/yazabilir (ör. "hepsini aç" bir buton). */
|
|
130
|
+
readonly expandedIds: _angular_core.ModelSignal<ReadonlySet<string>>;
|
|
131
|
+
/**
|
|
132
|
+
* `activeItemId()` bir alt öğeye (children içinde) eşleşince o öğenin
|
|
133
|
+
* EBEVEYN grubunu otomatik açar — YALNIZCA aktif öğe DEĞİŞİNCE (kullanıcının
|
|
134
|
+
* sonradan elle kapatması korunur, tekrar zorla açılmaz). Öncesinde derin
|
|
135
|
+
* bir bağlantıya (ör. `/components/button`) DOĞRUDAN gidildiğinde tüm
|
|
136
|
+
* gruplar kapalı geliyor, aktif öğe görünmüyordu (gerçek bulgu).
|
|
137
|
+
*/
|
|
138
|
+
readonly autoExpandActive: _angular_core.InputSignal<boolean>;
|
|
139
|
+
protected isExpanded(id: string): boolean;
|
|
140
|
+
protected onToggleExpand(id: string): void;
|
|
141
|
+
constructor();
|
|
142
|
+
protected onItemActivate(item: SidebarNavItem): void;
|
|
143
|
+
protected onTenantSelect(tenant: SidebarTenant): void;
|
|
144
|
+
protected toggleCollapse(): void;
|
|
145
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Sidebar, never>;
|
|
146
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Sidebar, "mf-sidebar", ["mfSidebar"], { "tenants": { "alias": "tenants"; "required": false; "isSignal": true; }; "activeTenantId": { "alias": "activeTenantId"; "required": false; "isSignal": true; }; "navItems": { "alias": "navItems"; "required": true; "isSignal": true; }; "activeItemId": { "alias": "activeItemId"; "required": false; "isSignal": true; }; "user": { "alias": "user"; "required": false; "isSignal": true; }; "showUserMenu": { "alias": "showUserMenu"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "showCollapseToggle": { "alias": "showCollapseToggle"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; "navAriaLabel": { "alias": "navAriaLabel"; "required": false; "isSignal": true; }; "expandedIds": { "alias": "expandedIds"; "required": false; "isSignal": true; }; "autoExpandActive": { "alias": "autoExpandActive"; "required": false; "isSignal": true; }; }, { "activeTenantId": "activeTenantIdChange"; "activeItemId": "activeItemIdChange"; "collapsed": "collapsedChange"; "tenantChange": "tenantChange"; "itemClick": "itemClick"; "profileClick": "profileClick"; "expandedIds": "expandedIdsChange"; }, never, ["[brand]"], true, never>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Tek nav satırı — yaprak veya çocuklu (parent). Sadece 1 seviye nesting
|
|
151
|
+
* (çocuğun çocuğu render edilmiyor, YAGNI). Genişkenken parent'a tıklayınca
|
|
152
|
+
* çocuklar CSS-only grid-rows akordeonuyla İÇERİDE açılır (her grup bağımsız,
|
|
153
|
+
* root `Sidebar`'ın `expandedIds` set'i tarafından yönetilir). Daraltılmışken
|
|
154
|
+
* aynı satıra TIKLAYINCA (hover değil — kullanıcı kararı) sağda bir `Popover`
|
|
155
|
+
* flyout paneli çocukları listeler (bkz. plan Faz 1c).
|
|
156
|
+
*/
|
|
157
|
+
declare class SidebarNavItemRow {
|
|
158
|
+
readonly item: _angular_core.InputSignal<SidebarNavItem>;
|
|
159
|
+
readonly collapsed: _angular_core.InputSignal<boolean>;
|
|
160
|
+
readonly activeItemId: _angular_core.InputSignal<string | null>;
|
|
161
|
+
/** Genişkenken akordeon açık/kapalı durumu — root Sidebar tarafından kontrol edilir. */
|
|
162
|
+
readonly expanded: _angular_core.InputSignal<boolean>;
|
|
163
|
+
readonly activate: _angular_core.OutputEmitterRef<SidebarNavItem>;
|
|
164
|
+
readonly toggleExpand: _angular_core.OutputEmitterRef<string>;
|
|
165
|
+
protected readonly hasChildren: _angular_core.Signal<boolean>;
|
|
166
|
+
protected readonly isActive: _angular_core.Signal<boolean>;
|
|
167
|
+
protected readonly rowClasses: _angular_core.Signal<string>;
|
|
168
|
+
protected readonly flyoutOpen: _angular_core.WritableSignal<boolean>;
|
|
169
|
+
protected onRowClick(): void;
|
|
170
|
+
protected childRowClasses(child: SidebarNavItem): string;
|
|
171
|
+
protected onChildClick(child: SidebarNavItem): void;
|
|
172
|
+
protected closeFlyout(): void;
|
|
173
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarNavItemRow, never>;
|
|
174
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarNavItemRow, "mf-sidebar-nav-item", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "activeItemId": { "alias": "activeItemId"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "activate": "activate"; "toggleExpand": "toggleExpand"; }, never, never, true, never>;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Sidebar'ın üst bloğu — panel iskeleti `Popover`'a devredildi (bkz. plan
|
|
179
|
+
* Faz 1c). Panel genişliği daraltılmışken trigger genişliğine değil SABİT
|
|
180
|
+
* 240px'e bağlı (`matchTriggerWidth` kapalı, `panelClass` ile `min-w-60`
|
|
181
|
+
* veriliyor) — daralmışken trigger sadece 72px, tenant adları sığmaz.
|
|
182
|
+
*/
|
|
183
|
+
declare class SidebarTenantSwitcher {
|
|
184
|
+
readonly tenants: _angular_core.InputSignal<SidebarTenant[]>;
|
|
185
|
+
readonly activeTenantId: _angular_core.InputSignal<string | null>;
|
|
186
|
+
readonly collapsed: _angular_core.InputSignal<boolean>;
|
|
187
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
188
|
+
readonly noTenantsLabel: _angular_core.InputSignal<string | undefined>;
|
|
189
|
+
readonly tenantChange: _angular_core.OutputEmitterRef<SidebarTenant>;
|
|
190
|
+
private readonly sidebarLabels;
|
|
191
|
+
protected readonly effectiveLabel: _angular_core.Signal<string>;
|
|
192
|
+
protected readonly effectiveNoTenantsLabel: _angular_core.Signal<string>;
|
|
193
|
+
protected readonly cn: typeof cn;
|
|
194
|
+
protected readonly open: _angular_core.WritableSignal<boolean>;
|
|
195
|
+
protected readonly highlighted: _angular_core.WritableSignal<number>;
|
|
196
|
+
protected readonly activeTenant: _angular_core.Signal<SidebarTenant | null>;
|
|
197
|
+
protected toggle(): void;
|
|
198
|
+
protected close(): void;
|
|
199
|
+
protected select(tenant: SidebarTenant): void;
|
|
200
|
+
protected optionClasses(tenant: SidebarTenant, index: number): string;
|
|
201
|
+
protected onTriggerKeydown(event: KeyboardEvent): void;
|
|
202
|
+
protected onPanelKeydown(event: KeyboardEvent): void;
|
|
203
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarTenantSwitcher, never>;
|
|
204
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarTenantSwitcher, "mf-sidebar-tenant-switcher", never, { "tenants": { "alias": "tenants"; "required": false; "isSignal": true; }; "activeTenantId": { "alias": "activeTenantId"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "noTenantsLabel": { "alias": "noTenantsLabel"; "required": false; "isSignal": true; }; }, { "tenantChange": "tenantChange"; }, never, never, true, never>;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Sidebar'ın alt bloğu — menü AÇMIYOR, tek bir satır: tıklanınca `profileClick`
|
|
209
|
+
* emit ediyor, gerçek "profile git" navigasyonu tüketicinin sorumluluğu
|
|
210
|
+
* (ör. `(profileClick)="router.navigate(['/profile'])"`).
|
|
211
|
+
*/
|
|
212
|
+
declare class SidebarUserMenu {
|
|
213
|
+
readonly user: _angular_core.InputSignal<SidebarUser | null>;
|
|
214
|
+
readonly collapsed: _angular_core.InputSignal<boolean>;
|
|
215
|
+
readonly noUserLabel: _angular_core.InputSignal<string | undefined>;
|
|
216
|
+
readonly profileClick: _angular_core.OutputEmitterRef<void>;
|
|
217
|
+
private readonly sidebarLabels;
|
|
218
|
+
protected readonly effectiveNoUserLabel: _angular_core.Signal<string>;
|
|
219
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarUserMenu, never>;
|
|
220
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarUserMenu, "mf-sidebar-user-menu", never, { "user": { "alias": "user"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "noUserLabel": { "alias": "noUserLabel"; "required": false; "isSignal": true; }; }, { "profileClick": "profileClick"; }, never, never, true, never>;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export { Sidebar, SidebarNavItemRow, SidebarTenantSwitcher, SidebarUserMenu, sidebarNavItemVariants, sidebarVariants };
|
|
224
|
+
export type { SidebarAppearance, SidebarCollapsedVariant, SidebarNavItem, SidebarTenant, SidebarUser };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
type SkeletonVariant = 'text' | 'circle' | 'rect';
|
|
4
|
+
/**
|
|
5
|
+
* `<div mfSkeleton class="h-4 w-32"></div>` (varsayılan `variant="rect"` —
|
|
6
|
+
* boyutu tüketici `class` ile verir, ESKİ davranış BİREBİR korunur) veya
|
|
7
|
+
* `<div mfSkeleton variant="circle" class="h-10 w-10"></div>` (`rounded-full`
|
|
8
|
+
* eklenir) veya `<div mfSkeleton variant="text" [lines]="3"></div>`
|
|
9
|
+
* (`lines > 1` iken alt alta `lines` kadar satır render eder — SON satır
|
|
10
|
+
* bilerek `w-3/4`, bir paragrafın düzensiz son satırını taklit eder).
|
|
11
|
+
*
|
|
12
|
+
* `lines > 1` YALNIZCA `variant="text"`'te anlamlı — bu durumda host
|
|
13
|
+
* kendisi bir shimmer kutusu OLMAKTAN çıkıp satırları dikey dizen bir
|
|
14
|
+
* `flex flex-col` kabına dönüşür (directive'ten component'e yükseltilmesinin
|
|
15
|
+
* TEK sebebi — bkz. `Button`'ın aynı yükseltme deseni, `button.ts`).
|
|
16
|
+
*/
|
|
17
|
+
declare class Skeleton {
|
|
18
|
+
readonly variant: _angular_core.InputSignal<SkeletonVariant>;
|
|
19
|
+
readonly lines: _angular_core.InputSignal<number>;
|
|
20
|
+
protected readonly multiline: _angular_core.Signal<boolean>;
|
|
21
|
+
protected readonly lineIndexes: _angular_core.Signal<number[]>;
|
|
22
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
23
|
+
protected lineClasses(last: boolean): string;
|
|
24
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Skeleton, never>;
|
|
25
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Skeleton, "[mfSkeleton]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { Skeleton };
|
|
29
|
+
export type { SkeletonVariant };
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `<mf-slider [(value)]="opacity" [min]="0" [max]="100" [step]="5" />` —
|
|
8
|
+
* `@angular/aria`'da hazır bir slider pattern'i YOK (sadece accordion/
|
|
9
|
+
* combobox/grid/listbox/menu/tabs/toolbar/tree var), bu yüzden ARIA
|
|
10
|
+
* `role="slider"` ve klavye (ok tuşları/Home/End/PageUp/PageDown) + pointer
|
|
11
|
+
* sürükleme ELLE kuruldu — kodda hand-rolled ARIA'nın ikinci örneği
|
|
12
|
+
* (ilki `Calendar`, bkz. README "Takvim ızgarası bilerek grid KULLANMADI").
|
|
13
|
+
*/
|
|
14
|
+
declare class Slider extends ValueAccessorBase<number> implements ControlValueAccessor {
|
|
15
|
+
readonly value: _angular_core.ModelSignal<number>;
|
|
16
|
+
readonly min: _angular_core.InputSignal<number>;
|
|
17
|
+
readonly max: _angular_core.InputSignal<number>;
|
|
18
|
+
readonly step: _angular_core.InputSignal<number>;
|
|
19
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
20
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
21
|
+
private readonly elementRef;
|
|
22
|
+
protected readonly percent: _angular_core.Signal<number>;
|
|
23
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
24
|
+
writeValue(value: number): void;
|
|
25
|
+
private clamp;
|
|
26
|
+
private setValue;
|
|
27
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
28
|
+
protected onPointerDown(event: PointerEvent): void;
|
|
29
|
+
protected onPointerMove(event: PointerEvent): void;
|
|
30
|
+
protected onPointerUp(event: PointerEvent): void;
|
|
31
|
+
private updateFromPointer;
|
|
32
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Slider, never>;
|
|
33
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Slider, "mf-slider", ["mfSlider"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
declare const sliderHostVariants: (props?: ({
|
|
37
|
+
disabled?: boolean | null | undefined;
|
|
38
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
39
|
+
|
|
40
|
+
export { Slider, sliderHostVariants };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { MfSize, MfTone } from '@mesgflow/ui-kit/core';
|
|
3
|
+
|
|
4
|
+
type SpinnerSize = 'xs' | MfSize;
|
|
5
|
+
type SpinnerTone = MfTone | 'current';
|
|
6
|
+
/**
|
|
7
|
+
* `<mf-spinner size="sm" />` — dönen yüklenme göstergesi. Ayrı bir SVG/CSS
|
|
8
|
+
* animasyonu ÇİZMEK yerine kitin zaten her yerde kullandığı `progress_activity`
|
|
9
|
+
* Material Symbol'ü + `animate-spin` deseni tekrar kullanılıyor (bkz.
|
|
10
|
+
* `ConfirmDialog`'un onay butonu) — tüm "yükleniyor" göstergeleri tek bir
|
|
11
|
+
* görsel dil konuşuyor.
|
|
12
|
+
*
|
|
13
|
+
* `role="status"` + `aria-label` HOST'ta (ikonun kendisi `Icon` directive'i
|
|
14
|
+
* gereği her zaman `aria-hidden` — bkz. icon.ts) — ekran okuyucu ligature
|
|
15
|
+
* kaynak metnini ("progress_activity") DEĞİL, buradaki anlamlı etiketi anons eder.
|
|
16
|
+
*/
|
|
17
|
+
declare class Spinner {
|
|
18
|
+
readonly size: _angular_core.InputSignal<SpinnerSize>;
|
|
19
|
+
readonly tone: _angular_core.InputSignal<SpinnerTone>;
|
|
20
|
+
/** Verilmezse `MF_COMMON_LABELS`'ın `loading`'i kullanılır (bkz. `provideMesgflowUi`). */
|
|
21
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
22
|
+
private readonly commonLabels;
|
|
23
|
+
protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
|
|
24
|
+
protected readonly sizePx: _angular_core.Signal<number>;
|
|
25
|
+
protected readonly iconClasses: _angular_core.Signal<string>;
|
|
26
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Spinner, never>;
|
|
27
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Spinner, "mf-spinner", ["mfSpinner"], { "size": { "alias": "size"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { Spinner };
|
|
31
|
+
export type { SpinnerSize, SpinnerTone };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `<mf-splitter><div splitterPane1>Sol</div><div splitterPane2>Sağ</div></mf-splitter>`
|
|
5
|
+
*
|
|
6
|
+
* Tuvalin iki yanındaki yeniden boyutlanabilir paneller için — `@angular/aria`'da
|
|
7
|
+
* hazır bir splitter pattern'i YOK, `role="separator"` + klavye (ok tuşları/
|
|
8
|
+
* Home/End) + pointer sürükleme ELLE kuruldu (Slider'daki AYNI hand-rolled
|
|
9
|
+
* ARIA yaklaşımı). Yüzde tabanlı bölünme (`flex-basis: %`) — piksel değil,
|
|
10
|
+
* konteyner yeniden boyutlandığında oran korunur.
|
|
11
|
+
*
|
|
12
|
+
* `currentSplit` BİLEREK `linkedSignal(() => this.initialSplit())` — düz bir
|
|
13
|
+
* `signal(50)` + constructor'da `.set(this.initialSplit())` YERİNE (BULUNAN
|
|
14
|
+
* GERÇEK HATA: constructor çalıştığı anda `input()` sinyali HENÜZ bağlanan
|
|
15
|
+
* değere sahip DEĞİL, `initialSplit()` varsayılana — 50 — düşüyor ve
|
|
16
|
+
* `currentSplit` bir daha ASLA güncellenmiyordu; `[split]="20"` gibi
|
|
17
|
+
* varsayılan-DIŞI bir değer SESSİZCE yok sayılıyordu, gerçek tarayıcıda
|
|
18
|
+
* `aria-valuenow` okununca ortaya çıktı). `linkedSignal` hem `initialSplit()`
|
|
19
|
+
* değiştiğinde YENİDEN hesaplanıyor HEM DE sürükleme/klavye ile YEREL
|
|
20
|
+
* `.set()`'e izin veriyor (CLAUDE.md: "birden çok reaktif kaynaktan türeyen
|
|
21
|
+
* VE senkron kalması gereken durum için `linkedSignal()`").
|
|
22
|
+
*/
|
|
23
|
+
declare class Splitter {
|
|
24
|
+
readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
|
|
25
|
+
readonly min: _angular_core.InputSignal<number>;
|
|
26
|
+
readonly max: _angular_core.InputSignal<number>;
|
|
27
|
+
readonly initialSplit: _angular_core.InputSignal<number>;
|
|
28
|
+
private readonly elementRef;
|
|
29
|
+
protected readonly currentSplit: _angular_core.WritableSignal<number>;
|
|
30
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
31
|
+
private clamp;
|
|
32
|
+
protected onPointerDown(event: PointerEvent): void;
|
|
33
|
+
protected onPointerMove(event: PointerEvent): void;
|
|
34
|
+
protected onPointerUp(event: PointerEvent): void;
|
|
35
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
36
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Splitter, never>;
|
|
37
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Splitter, "mf-splitter", ["mfSplitter"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "initialSplit": { "alias": "split"; "required": false; "isSignal": true; }; }, {}, never, ["[splitterPane1]", "[splitterPane2]"], true, never>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { Splitter };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import { VariantProps } from 'class-variance-authority';
|
|
4
|
+
|
|
5
|
+
type StatTileDeltaDirection = 'up' | 'down' | 'flat';
|
|
6
|
+
/**
|
|
7
|
+
* `<mf-stat-tile label="Aktif üye" value="1.284" delta="+12%" deltaDirection="up"
|
|
8
|
+
* deltaCaption="geçen aya göre" [trend]="last12" trendLabel="Son 12 ay" />`
|
|
9
|
+
*
|
|
10
|
+
* KPI şeridinin tek birimi — dataviz "figür sözleşmesi": `label` · `value` · opsiyonel `delta`
|
|
11
|
+
* (işaretli, adı verilen bir döneme göre) · opsiyonel `trend` (sparkline, güncel dönem vurgulu).
|
|
12
|
+
*
|
|
13
|
+
* Delta rengi = YÖN × "yukarı iyi mi" (`upIsGood` — hata oranında düşüş iyidir): iyi → success,
|
|
14
|
+
* kötü → danger, yatay → nötr. Renk ASLA tek başına anlam taşımaz: yön ikonu + işaretli metin
|
|
15
|
+
* her zaman yanında. Değer büyük tek başına bir sayı olduğu için orantılı rakam (tabular DEĞİL —
|
|
16
|
+
* `tabular-nums` "121"i büyük boyutta dağınık gösterir).
|
|
17
|
+
*
|
|
18
|
+
* Ray motifi BİLEREK yok — README bu motifi 4 yerle sınırlıyor, StatTile beşinci yer olmuyor.
|
|
19
|
+
* Dar bir ızgara hücresinde (16rem altı, `@container`) ikon metnin ÜSTÜNE geçer — değer satırı daralmaz.
|
|
20
|
+
* `@container` (inline-size containment) host'un genişliği İÇERİKTEN gelemez demek: ızgara/blok
|
|
21
|
+
* içinde doğal çalışır; genişliği verilmemiş bir flex öğesi olarak kullanırken `flex-1`/`w-*` verin.
|
|
22
|
+
*/
|
|
23
|
+
declare class StatTile {
|
|
24
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
25
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
26
|
+
readonly icon: _angular_core.InputSignal<string>;
|
|
27
|
+
readonly caption: _angular_core.InputSignal<string>;
|
|
28
|
+
readonly tone: _angular_core.InputSignal<"neutral" | "primary" | "success" | "warning" | "danger" | "info" | "help" | null | undefined>;
|
|
29
|
+
/** Görüntülenecek işaretli değişim ("+12%", "−3"). Boşsa delta satırı çizilmez. */
|
|
30
|
+
readonly delta: _angular_core.InputSignal<string>;
|
|
31
|
+
readonly deltaDirection: _angular_core.InputSignal<StatTileDeltaDirection>;
|
|
32
|
+
/** Artış iyi mi? Hata oranı, churn, yanıt süresi gibi metriklerde `false`. */
|
|
33
|
+
readonly upIsGood: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
34
|
+
/** Karşılaştırılan dönem ("geçen aya göre") — tüketici metni, kit varsayılanı YOK. */
|
|
35
|
+
readonly deltaCaption: _angular_core.InputSignal<string>;
|
|
36
|
+
/** Sparkline değerleri (en az 2). Güncel dönem vurgu renginde çizilir. */
|
|
37
|
+
readonly trend: _angular_core.InputSignal<readonly number[]>;
|
|
38
|
+
/** Sparkline'ın erişilebilir adı; boşsa süs sayılır (değer zaten metinde). */
|
|
39
|
+
readonly trendLabel: _angular_core.InputSignal<string>;
|
|
40
|
+
protected readonly iconClasses: _angular_core.Signal<string>;
|
|
41
|
+
protected readonly deltaIcon: _angular_core.Signal<string>;
|
|
42
|
+
protected readonly deltaClasses: _angular_core.Signal<string>;
|
|
43
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatTile, never>;
|
|
44
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatTile, "mf-stat-tile", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "deltaDirection": { "alias": "deltaDirection"; "required": false; "isSignal": true; }; "upIsGood": { "alias": "upIsGood"; "required": false; "isSignal": true; }; "deltaCaption": { "alias": "deltaCaption"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "trendLabel": { "alias": "trendLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Tonal ikon dolgusu — Badge/Avatar'daki AYNI tonal işaret rol token'ı (`bg-X-tint text-X-tint-fg`, `color-mix()` tabanlı), bkz. projects/ui-kit/README.md "Token mimarisi". */
|
|
48
|
+
declare const statTileIconVariants: (props?: ({
|
|
49
|
+
tone?: "neutral" | "primary" | "success" | "warning" | "danger" | "info" | "help" | null | undefined;
|
|
50
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
51
|
+
type StatTileTone = VariantProps<typeof statTileIconVariants>['tone'];
|
|
52
|
+
|
|
53
|
+
export { StatTile, statTileIconVariants };
|
|
54
|
+
export type { StatTileDeltaDirection, StatTileTone };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `<mf-step label="Hesap" description="Bilgilerinizi girin" />` — bir
|
|
5
|
+
* `mf-stepper` ATASI ZORUNLU (bkz. `stepper.ts`'in JSDoc'u). Bağlayıcı
|
|
6
|
+
* çizgi kendi `::after` pseudo-elementi (`last:after:hidden` ile SON
|
|
7
|
+
* adımda gizlenir — hangi adımın son olduğunu bilmek için ayrı bir
|
|
8
|
+
* hesaplama GEREKMEZ, saf CSS `:last-child`).
|
|
9
|
+
*/
|
|
10
|
+
declare class Step {
|
|
11
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
12
|
+
readonly description: _angular_core.InputSignal<string>;
|
|
13
|
+
private readonly stepper;
|
|
14
|
+
protected readonly index: number;
|
|
15
|
+
protected readonly isComplete: _angular_core.Signal<boolean>;
|
|
16
|
+
protected readonly isCurrent: _angular_core.Signal<boolean>;
|
|
17
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
18
|
+
protected circleClasses(): string;
|
|
19
|
+
protected labelClasses(): string;
|
|
20
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Step, never>;
|
|
21
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Step, "mf-step", ["mfStep"], { "label": { "alias": "label"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* `<mf-stepper [current]="1"><mf-step label="Hesap" /><mf-step label="Ödeme" /></mf-stepper>`
|
|
26
|
+
*
|
|
27
|
+
* Salt görsel bir ilerleme göstergesi — gezinme (bir sonraki/önceki adıma
|
|
28
|
+
* geçme) çağıranın kendi sorumluluğunda (`[current]`'ı değiştiren düğmeler
|
|
29
|
+
* dışarıda yaşar). Her `mf-step` kendi index'ini KURULUŞTA bir kez
|
|
30
|
+
* `registerStep()` ile alır — `contentChildren` yerine basit bir kayıt-sırası
|
|
31
|
+
* sayacı, `Step`'in `Stepper`'ı import ETMESİ yeterli (tersi YOK, döngüsel
|
|
32
|
+
* bir tip bağımlılığı kurulmuyor).
|
|
33
|
+
*/
|
|
34
|
+
declare class Stepper {
|
|
35
|
+
readonly current: _angular_core.InputSignal<number>;
|
|
36
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
37
|
+
private readonly stepperLabels;
|
|
38
|
+
protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
|
|
39
|
+
private nextIndex;
|
|
40
|
+
/** Her `mf-step` kurulumda BİR KEZ çağırır — kendi (sıradaki) index'ini alır. */
|
|
41
|
+
registerStep(): number;
|
|
42
|
+
isComplete(index: number): boolean;
|
|
43
|
+
isCurrent(index: number): boolean;
|
|
44
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Stepper, never>;
|
|
45
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Stepper, "mf-stepper", ["mfStepper"], { "current": { "alias": "current"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { Step, Stepper };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import { ValueAccessorBase, MfSize } from '@mesgflow/ui-kit/core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<mf-switch [(checked)]="row.active" (checkedChange)="onToggle(row)" />`
|
|
7
|
+
*
|
|
8
|
+
* Native `[(ngModel)]` DEĞİL, Angular'ın `model()` iki-yönlü bağlama sinyali
|
|
9
|
+
* kullanılıyor (`[(checked)]`) — ControlValueAccessor yazmadan aynı ergonomiyi
|
|
10
|
+
* veriyor. Görünür track+thumb, gizli (sr-only) bir native checkbox'ın
|
|
11
|
+
* `:checked` durumuna komşu `<span>` üzerinden `peer-checked:` ile tepki
|
|
12
|
+
* veriyor — gerçek form kontrolü hâlâ native checkbox (klavye/focus/a11y
|
|
13
|
+
* ücretsiz), görsel tamamen bizim.
|
|
14
|
+
*/
|
|
15
|
+
declare class Switch extends ValueAccessorBase<boolean> implements ControlValueAccessor {
|
|
16
|
+
readonly checked: _angular_core.ModelSignal<boolean>;
|
|
17
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
18
|
+
readonly size: _angular_core.InputSignal<MfSize>;
|
|
19
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
20
|
+
/** `label` boşken (görünür metin yok) native checkbox'a erişilebilir ad sağlamak için — `label` doluysa YOK SAYILIR (çift anons olmasın diye). */
|
|
21
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
22
|
+
protected readonly sizeClasses: _angular_core.Signal<{
|
|
23
|
+
track: string;
|
|
24
|
+
thumb: string;
|
|
25
|
+
offset: string;
|
|
26
|
+
translate: string;
|
|
27
|
+
}>;
|
|
28
|
+
writeValue(value: boolean): void;
|
|
29
|
+
protected onToggle(event: Event): void;
|
|
30
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Switch, never>;
|
|
31
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Switch, "mf-switch", ["mfSwitch"], { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, never, never, true, never>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { Switch };
|