@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,624 @@
|
|
|
1
|
+
import { clsx } from 'clsx';
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
import { InjectionToken, signal, inject, computed, isSignal, makeEnvironmentProviders } from '@angular/core';
|
|
4
|
+
import { enUS } from 'date-fns/locale';
|
|
5
|
+
|
|
6
|
+
/** clsx ile koşullu class'ları birleştirir, tailwind-merge ile çakışan utility'leri (ör. iki farklı `bg-*`) sonuncusu kazanacak şekilde çözer. */
|
|
7
|
+
function cn(...inputs) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Yazı yönü yardımcıları — `dir="rtl"` (öğede ya da bir atada) ya da CSS `direction` kalıtımı.
|
|
13
|
+
* Hesaplanan stil okunur: yön bir atadan gelse de doğru sonuç verir. SSR'de (stil yok) LTR.
|
|
14
|
+
*/
|
|
15
|
+
function isRtl(el) {
|
|
16
|
+
return typeof getComputedStyle !== 'undefined' && getComputedStyle(el).direction === 'rtl';
|
|
17
|
+
}
|
|
18
|
+
/** İşaretçinin satır başından (LTR'de sol, RTL'de sağ kenar) oranı, 0–1 aralığına kırpılmış. */
|
|
19
|
+
function inlineStartRatio(clientX, rect, rtl) {
|
|
20
|
+
if (rect.width === 0)
|
|
21
|
+
return 0;
|
|
22
|
+
const fromLeft = (clientX - rect.left) / rect.width;
|
|
23
|
+
return Math.min(1, Math.max(0, rtl ? 1 - fromLeft : fromLeft));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Yatay kaydırmanın başlangıçtan uzaklığı. Modern tarayıcılarda RTL'de `scrollLeft` 0'dan
|
|
27
|
+
* NEGATİFE gider (başlangıç = 0, son = −max); mutlak değer iki yönde de "başlangıçtan uzaklık".
|
|
28
|
+
*/
|
|
29
|
+
function scrollFromInlineStart(el) {
|
|
30
|
+
return Math.abs(el.scrollLeft);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Paylaşılan class reçeteleri — kontrol/overlay/kapsayıcı bileşenlerinin
|
|
35
|
+
* TEKRAR TEKRAR yazdığı focus/disabled/boyut/yüzey kalıplarının TEK kaynağı
|
|
36
|
+
* (bkz. plan Faz 1a/1b). Öncesinde 5 farklı disabled reçetesi, 4 farklı
|
|
37
|
+
* focus-offset kombinasyonu ve 9 elle yazılmış `h-8`/`h-9`/`h-10` sabiti
|
|
38
|
+
* vardı — her biri kendi kopyasını sürüklüyordu (gerçek bulgu). Bileşenler
|
|
39
|
+
* bunları `cn()` ile kendi özel class'larıyla birleştirir (`cn()` twMerge
|
|
40
|
+
* kullandığı için çakışan Tailwind utility'leri güvenle çözülür).
|
|
41
|
+
*/
|
|
42
|
+
/** `outline`+`outline-offset` tabanlı TEK focus mekanizması — bkz. `button.variants.ts`'in "Focus — tek mekanizma" notu. Box-shadow/ring KULLANMA. */
|
|
43
|
+
const focusRecipe = 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring';
|
|
44
|
+
/** Native `disabled` VE `aria-disabled` (ör. `@angular/aria` desenlerinin kullandığı) ikisini de kapsar — bkz. plan "Disabled 5 farklı reçete" bulgusu. */
|
|
45
|
+
const disabledRecipe = 'disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none aria-disabled:pointer-events-none aria-disabled:opacity-50';
|
|
46
|
+
/** Input/Select/Combobox/NumberInput/... — tüm form kontrollerinin ortak kabuğu. `shadow-control` (bkz. elevation.css) — `shadow-1` DEĞİL, kontroller kapsayıcılarla AYNI yükselti basamağını paylaşmaz. */
|
|
47
|
+
const controlSurface = 'rounded-md border border-border bg-surface text-fg shadow-control transition-colors duration-fast ease-emphasis hover:border-border-strong focus-within:border-accent';
|
|
48
|
+
/** `size: MfSize` eksenindeki TÜM kontrollerin ortak yükseklik/dolgu/font eşlemesi — bkz. `radius.css`'teki `--control-h-*` token'ları. */
|
|
49
|
+
const controlSize = {
|
|
50
|
+
sm: 'h-control-sm px-2.5 text-sm',
|
|
51
|
+
md: 'h-control-md px-3 text-sm',
|
|
52
|
+
lg: 'h-control-lg px-3.5 text-base',
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Popover/Menu/Select/Combobox/... overlay panellerinin ortak kabuğu — BORDER-
|
|
56
|
+
* FIRST (2026-09 Deep Emerald geçişi, kullanıcı kararıyla eski "light modda
|
|
57
|
+
* kenarlıksız, sadece gölge" ilkesinin YERİNE geçti): iki modda da
|
|
58
|
+
* `border-hairline` (color.css — %8-12 opak marka-tonlu 1px çizgi) + `shadow-2`.
|
|
59
|
+
* Ağır/bulanık gölge yerine ince çizgi "premium" hissi artık BÖYLE veriliyor.
|
|
60
|
+
*/
|
|
61
|
+
const overlaySurface = 'rounded-lg border border-hairline bg-overlay shadow-2';
|
|
62
|
+
/** Card/Table/StatTile gibi statik kapsayıcıların ortak kabuğu — BORDER-FIRST: iki modda da gölgesiz, sadece `border-hairline` (bkz. `overlaySurface`'in aynı gerekçesi). */
|
|
63
|
+
const containerSurface = 'rounded-lg border border-hairline bg-surface';
|
|
64
|
+
/**
|
|
65
|
+
* Mikro glassmorphism — Dialog/Sheet/Drawer paneli ve Toast öğeleri (bkz.
|
|
66
|
+
* `dialog.variants.ts`, `toast-host.ts`) bunu kullanır. `supports-[…]` ile
|
|
67
|
+
* `backdrop-filter` desteklenmediğinde düz `bg-surface`'e düşer (eski
|
|
68
|
+
* tarayıcı/headless test ortamı); `reduced-transparency:` (color.css'te
|
|
69
|
+
* tanımlı custom variant, `prefers-reduced-transparency: reduce` medya
|
|
70
|
+
* sorgusu) kullanıcı saydamlığı azalt istediğinde camı KAPATIR — WCAG 1.4.11
|
|
71
|
+
* "Non-text Contrast" ve hareket/saydamlık duyarlılığı için. Tüketici kendi
|
|
72
|
+
* `border`/`rounded-*` genişliğini üstüne ekler.
|
|
73
|
+
*/
|
|
74
|
+
const glassSurface = 'border-hairline bg-surface supports-[backdrop-filter]:bg-glass supports-[backdrop-filter]:backdrop-blur-md reduced-transparency:bg-surface reduced-transparency:backdrop-blur-none';
|
|
75
|
+
/** `hasError`/`aria-invalid` durumundaki form kontrolleri için — `controlSurface` İLE BİRLİKTE, üstüne eklenir. */
|
|
76
|
+
const errorRecipe = 'border-danger focus-within:border-danger focus-visible:outline-danger';
|
|
77
|
+
/**
|
|
78
|
+
* Renk/gölge geçişlerinin TEK hareket dili — `ease-emphasis` kitin kendi eğrisi
|
|
79
|
+
* (bkz. `motion.css`), tarayıcı varsayılanı `ease` DEĞİL. Öncesinde ~35 yerde
|
|
80
|
+
* `transition-colors duration-fast` easing'siz kullanılıyordu (gerçek bulgu,
|
|
81
|
+
* bkz. plan Faz 1c).
|
|
82
|
+
*/
|
|
83
|
+
const transitionRecipe = 'transition-colors duration-fast ease-emphasis';
|
|
84
|
+
/** Basılı-hissi — `active:scale` ekseninde TEK reçete, disabled'da sıfırlanır. */
|
|
85
|
+
const pressRecipe = 'active:scale-[0.99] disabled:active:scale-100';
|
|
86
|
+
|
|
87
|
+
let seq = 0;
|
|
88
|
+
/**
|
|
89
|
+
* Bileşen örneği başına kararlı, benzersiz bir DOM id'si üretir —
|
|
90
|
+
* `aria-controls`/`aria-describedby`/`aria-activedescendant` gibi bağların
|
|
91
|
+
* her component klasöründe kendi elle sayaçlarını (bkz. `combobox.ts`'teki
|
|
92
|
+
* `comboboxIdSeq` — bu modül kullanıma girince oraya taşınacak) tekrar
|
|
93
|
+
* yazmasına gerek kalmasın diye. SSR'da hydration uyuşmazlığı YARATMAZ —
|
|
94
|
+
* her platformda modül yüklendiğinde sıfırdan başlar, sayaç deterministik.
|
|
95
|
+
*/
|
|
96
|
+
function nextId(prefix) {
|
|
97
|
+
return `${prefix}-${++seq}`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* `registerOnChange`/`registerOnTouched`'ın HER `ControlValueAccessor`
|
|
102
|
+
* implementasyonunda BİREBİR aynı kalan gövdesini tek kaynağa indirger
|
|
103
|
+
* (bkz. Select/NumberInput/Combobox/ColorPicker'ın öncesi — 4+ kopya, plan
|
|
104
|
+
* Faz 2 "CVA tamamlama" notu). Alt sınıf SADECE `writeValue`'yu (kendi
|
|
105
|
+
* `model`/`signal`'ına yazan) tanımlar VE kendi `NG_VALUE_ACCESSOR`
|
|
106
|
+
* provider'ını `@Component`'ında bildirir — `forwardRef(() => AltSınıf)`
|
|
107
|
+
* somut sınıfa ihtiyaç duyduğu için provider MİRAS ALINAMAZ.
|
|
108
|
+
*
|
|
109
|
+
* Düz bir soyut sınıf (Angular `@Directive()` DEĞİL) — `inject()` ya da
|
|
110
|
+
* yaşam döngüsü kancası kullanmıyor, sadece alan/metot mirası; `@Directive()`
|
|
111
|
+
* sarmalamak gereksiz karmaşıklık olurdu.
|
|
112
|
+
*/
|
|
113
|
+
class ValueAccessorBase {
|
|
114
|
+
onChange = () => { };
|
|
115
|
+
onTouched = () => { };
|
|
116
|
+
registerOnChange(fn) {
|
|
117
|
+
this.onChange = fn;
|
|
118
|
+
}
|
|
119
|
+
registerOnTouched(fn) {
|
|
120
|
+
this.onTouched = fn;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* `Popover`'ın (`PLACEMENTS`) ve `Tooltip`'in (`POSITIONS`) kendi dosyalarında
|
|
126
|
+
* ayrı ayrı tuttuğu CDK `ConnectedPosition[]` çiftlerinin ORTAK geometri
|
|
127
|
+
* üretici hâli — 8 yerleşimin (4 köşe + 4 kenar) hepsini tek bir fonksiyonla
|
|
128
|
+
* üretir, `offset` çağıranın KENDİ mevcut değerini (Popover 4px, Tooltip 8px,
|
|
129
|
+
* diğer overlay'ler 4-8px arası değişen) korumasını sağlar.
|
|
130
|
+
*
|
|
131
|
+
* Bu modül BİLEREK henüz hiçbir bileşene BAĞLANMADI (Faz 0c) — `Popover`,
|
|
132
|
+
* `Tooltip` ve 10 kopya `ConnectedPosition[]` içeren diğer bileşenlerin buna
|
|
133
|
+
* geçişi Faz 1c'nin ("Overlay birleştirme") kapsamı: her biri kendi klavye/
|
|
134
|
+
* vurgu mantığını koruyarak taşınmalı ve tarayıcıda tek tek doğrulanmalı —
|
|
135
|
+
* bu fazın (yapısal taşıma) riskiyle karıştırılmamalı.
|
|
136
|
+
*/
|
|
137
|
+
function overlayPositions(placement, offset = 4) {
|
|
138
|
+
switch (placement) {
|
|
139
|
+
case 'bottom-start':
|
|
140
|
+
return [
|
|
141
|
+
{
|
|
142
|
+
originX: 'start',
|
|
143
|
+
originY: 'bottom',
|
|
144
|
+
overlayX: 'start',
|
|
145
|
+
overlayY: 'top',
|
|
146
|
+
offsetY: offset,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
originX: 'start',
|
|
150
|
+
originY: 'top',
|
|
151
|
+
overlayX: 'start',
|
|
152
|
+
overlayY: 'bottom',
|
|
153
|
+
offsetY: -offset,
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
case 'bottom-end':
|
|
157
|
+
return [
|
|
158
|
+
{ originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },
|
|
159
|
+
{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },
|
|
160
|
+
];
|
|
161
|
+
case 'top-start':
|
|
162
|
+
return [
|
|
163
|
+
{
|
|
164
|
+
originX: 'start',
|
|
165
|
+
originY: 'top',
|
|
166
|
+
overlayX: 'start',
|
|
167
|
+
overlayY: 'bottom',
|
|
168
|
+
offsetY: -offset,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
originX: 'start',
|
|
172
|
+
originY: 'bottom',
|
|
173
|
+
overlayX: 'start',
|
|
174
|
+
overlayY: 'top',
|
|
175
|
+
offsetY: offset,
|
|
176
|
+
},
|
|
177
|
+
];
|
|
178
|
+
case 'top-end':
|
|
179
|
+
return [
|
|
180
|
+
{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },
|
|
181
|
+
{ originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },
|
|
182
|
+
];
|
|
183
|
+
case 'top':
|
|
184
|
+
return [
|
|
185
|
+
{
|
|
186
|
+
originX: 'center',
|
|
187
|
+
originY: 'top',
|
|
188
|
+
overlayX: 'center',
|
|
189
|
+
overlayY: 'bottom',
|
|
190
|
+
offsetY: -offset,
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
originX: 'center',
|
|
194
|
+
originY: 'bottom',
|
|
195
|
+
overlayX: 'center',
|
|
196
|
+
overlayY: 'top',
|
|
197
|
+
offsetY: offset,
|
|
198
|
+
},
|
|
199
|
+
];
|
|
200
|
+
case 'bottom':
|
|
201
|
+
return [
|
|
202
|
+
{
|
|
203
|
+
originX: 'center',
|
|
204
|
+
originY: 'bottom',
|
|
205
|
+
overlayX: 'center',
|
|
206
|
+
overlayY: 'top',
|
|
207
|
+
offsetY: offset,
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
originX: 'center',
|
|
211
|
+
originY: 'top',
|
|
212
|
+
overlayX: 'center',
|
|
213
|
+
overlayY: 'bottom',
|
|
214
|
+
offsetY: -offset,
|
|
215
|
+
},
|
|
216
|
+
];
|
|
217
|
+
case 'left':
|
|
218
|
+
return [
|
|
219
|
+
{
|
|
220
|
+
originX: 'start',
|
|
221
|
+
originY: 'center',
|
|
222
|
+
overlayX: 'end',
|
|
223
|
+
overlayY: 'center',
|
|
224
|
+
offsetX: -offset,
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
originX: 'end',
|
|
228
|
+
originY: 'center',
|
|
229
|
+
overlayX: 'start',
|
|
230
|
+
overlayY: 'center',
|
|
231
|
+
offsetX: offset,
|
|
232
|
+
},
|
|
233
|
+
];
|
|
234
|
+
case 'right':
|
|
235
|
+
return [
|
|
236
|
+
{
|
|
237
|
+
originX: 'end',
|
|
238
|
+
originY: 'center',
|
|
239
|
+
overlayX: 'start',
|
|
240
|
+
overlayY: 'center',
|
|
241
|
+
offsetX: offset,
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
originX: 'start',
|
|
245
|
+
originY: 'center',
|
|
246
|
+
overlayX: 'end',
|
|
247
|
+
overlayY: 'center',
|
|
248
|
+
offsetX: -offset,
|
|
249
|
+
},
|
|
250
|
+
];
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function isPlainObject(value) {
|
|
255
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
256
|
+
}
|
|
257
|
+
/** `base`'i `override`'daki tanımlı yapraklarla değiştirir — dizi yok, her düğüm ya iç içe nesne ya string, sığ `Object.assign` yerine gerçek derin birleştirme gerekiyor (bkz. `provide.ts`). Generic'i `Record<string, unknown>`'a KISITLAMIYOR BİLEREK — `MfLabels` gibi index-signature'ı olmayan named interface'ler o kısıtla uyuşmuyor (bkz. TS2345), bunun yerine iç kısımda cast ediliyor. */
|
|
258
|
+
function mergeLabels(base, override) {
|
|
259
|
+
if (!override)
|
|
260
|
+
return base;
|
|
261
|
+
if (!isPlainObject(base) || !isPlainObject(override))
|
|
262
|
+
return override;
|
|
263
|
+
const baseObj = base;
|
|
264
|
+
const overrideObj = override;
|
|
265
|
+
const result = { ...baseObj };
|
|
266
|
+
for (const key of Object.keys(overrideObj)) {
|
|
267
|
+
const overrideValue = overrideObj[key];
|
|
268
|
+
if (overrideValue === undefined)
|
|
269
|
+
continue;
|
|
270
|
+
result[key] = mergeLabels(baseObj[key], overrideValue);
|
|
271
|
+
}
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* `MF_LABELS`'ın varsayılan değeri — hiçbir `provideMesgflowUi()` çağrısı
|
|
277
|
+
* olmayan bir tüketici uygulamada bileşenler bu İngilizce metinlerle çalışır
|
|
278
|
+
* (bkz. CLAUDE.md/plan kararı: "bileşen varsayılan metinleri İngilizce").
|
|
279
|
+
* Türkçe çeviri kümesi için bkz. `@mesgflow/ui-kit/i18n/tr`'nin `mfLabelsTr`'si —
|
|
280
|
+
* bu iki dosya AYNI şekli (bkz. `labels.ts`), farklı değerleri taşır.
|
|
281
|
+
*/
|
|
282
|
+
const mfLabelsEn = {
|
|
283
|
+
common: {
|
|
284
|
+
loading: 'Loading',
|
|
285
|
+
clear: 'Clear',
|
|
286
|
+
remove: 'Remove',
|
|
287
|
+
},
|
|
288
|
+
dialog: {
|
|
289
|
+
close: 'Close',
|
|
290
|
+
resize: 'Resize',
|
|
291
|
+
fullscreenEnter: 'Enter fullscreen',
|
|
292
|
+
fullscreenExit: 'Exit fullscreen',
|
|
293
|
+
confirmOk: 'OK',
|
|
294
|
+
confirmCancel: 'Cancel',
|
|
295
|
+
confirmConfirm: 'Confirm',
|
|
296
|
+
confirmDelete: 'Delete',
|
|
297
|
+
errorGeneric: 'Something went wrong. Please try again.',
|
|
298
|
+
discard: {
|
|
299
|
+
title: 'Unsaved changes',
|
|
300
|
+
content: 'Closing this panel will discard what you entered.',
|
|
301
|
+
confirm: 'Discard and close',
|
|
302
|
+
cancel: 'Keep editing',
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
datePicker: {
|
|
306
|
+
today: 'Today',
|
|
307
|
+
clear: 'Clear',
|
|
308
|
+
apply: 'Apply',
|
|
309
|
+
previousMonth: 'Previous month',
|
|
310
|
+
nextMonth: 'Next month',
|
|
311
|
+
previousYear: 'Previous year',
|
|
312
|
+
nextYear: 'Next year',
|
|
313
|
+
chooseMonth: 'Choose month',
|
|
314
|
+
chooseYear: 'Choose year',
|
|
315
|
+
startDate: 'Start',
|
|
316
|
+
endDate: 'End',
|
|
317
|
+
placeholder: 'mm/dd/yyyy',
|
|
318
|
+
presetToday: 'Today',
|
|
319
|
+
presetLast7: 'Last 7 days',
|
|
320
|
+
presetLast30: 'Last 30 days',
|
|
321
|
+
presetThisMonth: 'This month',
|
|
322
|
+
},
|
|
323
|
+
timePicker: {
|
|
324
|
+
placeholder: 'hh:mm',
|
|
325
|
+
clear: 'Clear',
|
|
326
|
+
},
|
|
327
|
+
table: {
|
|
328
|
+
searchPlaceholder: 'Search...',
|
|
329
|
+
selectedCount: 'selected',
|
|
330
|
+
edit: 'Edit',
|
|
331
|
+
delete: 'Delete',
|
|
332
|
+
clearSelection: 'Clear selection',
|
|
333
|
+
emptyTitle: 'No records',
|
|
334
|
+
emptyDescription: '',
|
|
335
|
+
noResultsTitle: 'No results found',
|
|
336
|
+
noResultsDescription: 'Try a different search or filter.',
|
|
337
|
+
clearFilters: 'Clear filters',
|
|
338
|
+
filterCount: 'filters',
|
|
339
|
+
selectAllAriaLabel: 'Select all',
|
|
340
|
+
selectRowAriaLabel: 'Select row',
|
|
341
|
+
actionsColumnLabel: 'Actions',
|
|
342
|
+
columns: 'Columns',
|
|
343
|
+
density: 'Density',
|
|
344
|
+
densityComfortable: 'Comfortable',
|
|
345
|
+
densityCompact: 'Compact',
|
|
346
|
+
resizeColumn: 'Resize column',
|
|
347
|
+
expandRow: 'Expand row',
|
|
348
|
+
collapseRow: 'Collapse row',
|
|
349
|
+
filter: {
|
|
350
|
+
addFilter: 'Filter',
|
|
351
|
+
searchField: 'Search field...',
|
|
352
|
+
noField: 'No field found',
|
|
353
|
+
operator: 'Operator',
|
|
354
|
+
value: 'Value',
|
|
355
|
+
apply: 'Apply',
|
|
356
|
+
enterHint: 'Enter',
|
|
357
|
+
clearAll: 'Clear',
|
|
358
|
+
and: 'AND',
|
|
359
|
+
or: 'OR',
|
|
360
|
+
remove: 'Remove',
|
|
361
|
+
back: 'Back',
|
|
362
|
+
dateToday: 'Today',
|
|
363
|
+
dateLast7: 'Last 7 days',
|
|
364
|
+
dateLast30: 'Last 30 days',
|
|
365
|
+
dateThisMonth: 'This month',
|
|
366
|
+
dateCustom: 'Custom range',
|
|
367
|
+
dateFrom: 'Start',
|
|
368
|
+
dateTo: 'End',
|
|
369
|
+
operators: {
|
|
370
|
+
equal: 'equals',
|
|
371
|
+
notEqual: 'not equal to',
|
|
372
|
+
greaterThan: 'greater than',
|
|
373
|
+
greaterOrEqual: 'greater than or equal to',
|
|
374
|
+
lessThan: 'less than',
|
|
375
|
+
lessOrEqual: 'less than or equal to',
|
|
376
|
+
contains: 'contains',
|
|
377
|
+
startsWith: 'starts with',
|
|
378
|
+
endsWith: 'ends with',
|
|
379
|
+
in: 'is one of',
|
|
380
|
+
isNull: 'is empty',
|
|
381
|
+
isNotNull: 'is not empty',
|
|
382
|
+
between: 'is between',
|
|
383
|
+
},
|
|
384
|
+
},
|
|
385
|
+
pagination: {
|
|
386
|
+
records: 'records',
|
|
387
|
+
perPage: 'per page',
|
|
388
|
+
page: 'Page',
|
|
389
|
+
previous: 'Previous',
|
|
390
|
+
next: 'Next',
|
|
391
|
+
first: 'First page',
|
|
392
|
+
last: 'Last page',
|
|
393
|
+
pageSizeAriaLabel: 'Page size',
|
|
394
|
+
navAriaLabel: 'Pagination',
|
|
395
|
+
jumpToPage: 'Jump to page',
|
|
396
|
+
go: 'Go',
|
|
397
|
+
},
|
|
398
|
+
},
|
|
399
|
+
sidebar: {
|
|
400
|
+
collapse: 'Collapse menu',
|
|
401
|
+
expand: 'Expand menu',
|
|
402
|
+
switchTenant: 'Switch tenant',
|
|
403
|
+
noTenants: 'No tenants found',
|
|
404
|
+
noUser: 'Not signed in',
|
|
405
|
+
nav: 'Main navigation',
|
|
406
|
+
},
|
|
407
|
+
tabs: {
|
|
408
|
+
scrollStart: 'Scroll back',
|
|
409
|
+
scrollEnd: 'Scroll forward',
|
|
410
|
+
close: 'Close',
|
|
411
|
+
},
|
|
412
|
+
dropzone: {
|
|
413
|
+
label: 'Drag files here or click to browse',
|
|
414
|
+
},
|
|
415
|
+
colorPicker: {
|
|
416
|
+
ariaLabel: 'Pick color',
|
|
417
|
+
hexAriaLabel: 'Hex color code',
|
|
418
|
+
pickFromScreenAriaLabel: 'Pick color from screen',
|
|
419
|
+
},
|
|
420
|
+
boxInput: {
|
|
421
|
+
top: 'Top',
|
|
422
|
+
right: 'Right',
|
|
423
|
+
bottom: 'Bottom',
|
|
424
|
+
left: 'Left',
|
|
425
|
+
linkSides: 'Link sides',
|
|
426
|
+
unlinkSides: 'Unlink sides',
|
|
427
|
+
},
|
|
428
|
+
combobox: {
|
|
429
|
+
placeholder: 'Search...',
|
|
430
|
+
noResults: 'No results',
|
|
431
|
+
},
|
|
432
|
+
select: {
|
|
433
|
+
placeholder: 'Select',
|
|
434
|
+
},
|
|
435
|
+
searchInput: {
|
|
436
|
+
placeholder: 'Search...',
|
|
437
|
+
ariaLabel: 'Search',
|
|
438
|
+
clearAriaLabel: 'Clear',
|
|
439
|
+
},
|
|
440
|
+
toast: {
|
|
441
|
+
dismiss: 'Dismiss',
|
|
442
|
+
},
|
|
443
|
+
otpInput: {
|
|
444
|
+
ariaLabel: 'One-time code',
|
|
445
|
+
},
|
|
446
|
+
stepper: {
|
|
447
|
+
ariaLabel: 'Steps',
|
|
448
|
+
},
|
|
449
|
+
progress: {
|
|
450
|
+
ariaLabel: 'Progress',
|
|
451
|
+
},
|
|
452
|
+
passwordInput: {
|
|
453
|
+
show: 'Show',
|
|
454
|
+
hide: 'Hide',
|
|
455
|
+
},
|
|
456
|
+
chip: {
|
|
457
|
+
remove: 'Remove',
|
|
458
|
+
},
|
|
459
|
+
alert: {
|
|
460
|
+
dismiss: 'Dismiss',
|
|
461
|
+
},
|
|
462
|
+
breadcrumb: {
|
|
463
|
+
ariaLabel: 'Breadcrumb',
|
|
464
|
+
},
|
|
465
|
+
avatarGroup: {
|
|
466
|
+
overflowAriaLabel: 'more',
|
|
467
|
+
},
|
|
468
|
+
chart: {
|
|
469
|
+
showTable: 'Show as table',
|
|
470
|
+
showChart: 'Show as chart',
|
|
471
|
+
category: 'Category',
|
|
472
|
+
},
|
|
473
|
+
command: {
|
|
474
|
+
placeholder: 'Type a command or search…',
|
|
475
|
+
ariaLabel: 'Command palette',
|
|
476
|
+
empty: 'No results found.',
|
|
477
|
+
resultsCount: 'results',
|
|
478
|
+
navigate: 'to navigate',
|
|
479
|
+
select: 'to select',
|
|
480
|
+
close: 'to close',
|
|
481
|
+
},
|
|
482
|
+
characterCount: {
|
|
483
|
+
remaining: 'characters remaining',
|
|
484
|
+
overLimit: 'characters over the limit',
|
|
485
|
+
characters: 'characters',
|
|
486
|
+
},
|
|
487
|
+
copy: {
|
|
488
|
+
copy: 'Copy',
|
|
489
|
+
copied: 'Copied',
|
|
490
|
+
failed: 'Copy failed',
|
|
491
|
+
code: 'Code',
|
|
492
|
+
},
|
|
493
|
+
pagination: {
|
|
494
|
+
navAriaLabel: 'Pagination',
|
|
495
|
+
previous: 'Previous page',
|
|
496
|
+
next: 'Next page',
|
|
497
|
+
first: 'First page',
|
|
498
|
+
last: 'Last page',
|
|
499
|
+
page: 'Page',
|
|
500
|
+
},
|
|
501
|
+
tour: {
|
|
502
|
+
next: 'Next',
|
|
503
|
+
back: 'Back',
|
|
504
|
+
skip: 'Skip tour',
|
|
505
|
+
done: 'Done',
|
|
506
|
+
stepOf: 'of',
|
|
507
|
+
},
|
|
508
|
+
rating: {
|
|
509
|
+
ariaLabel: 'Rating',
|
|
510
|
+
outOf: 'out of',
|
|
511
|
+
},
|
|
512
|
+
themeSwitcher: {
|
|
513
|
+
ariaLabel: 'Color theme',
|
|
514
|
+
light: 'Light',
|
|
515
|
+
dark: 'Dark',
|
|
516
|
+
system: 'System',
|
|
517
|
+
},
|
|
518
|
+
treeSelect: {
|
|
519
|
+
placeholder: 'Select',
|
|
520
|
+
searchPlaceholder: 'Search…',
|
|
521
|
+
noResults: 'No results',
|
|
522
|
+
},
|
|
523
|
+
};
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* Kitin TEK metin kaynağı — `provideMesgflowUi()` (bkz. `provide.ts`)
|
|
527
|
+
* `provide` etmezse tüketici İngilizce varsayılanlarla çalışır (ng-zorro'nun
|
|
528
|
+
* `NZ_I18N`'i / PrimeNG'nin `providePrimeNG` config'iyle aynı desen — bu kit
|
|
529
|
+
* daha önce sadece Dialog için uyguluyordu, `MF_DIALOG_LABELS` artık bu
|
|
530
|
+
* token'dan türeyen bir "seçici" — bkz. aşağıdaki `labelToken`).
|
|
531
|
+
*/
|
|
532
|
+
const MF_LABELS = new InjectionToken('mesgflow.labels', {
|
|
533
|
+
factory: () => signal(mfLabelsEn),
|
|
534
|
+
});
|
|
535
|
+
/** Calendar/DatePicker'ın ay/gün adları için — varsayılan `enUS`, `provideMesgflowUi({ dateLocale })` ile değiştirilir. */
|
|
536
|
+
const MF_DATE_LOCALE = new InjectionToken('mesgflow.date-locale', {
|
|
537
|
+
factory: () => signal(enUS),
|
|
538
|
+
});
|
|
539
|
+
/**
|
|
540
|
+
* `MF_LABELS`'ın bir alt-alanına daralan, reaktif bir "seçici" token üretir
|
|
541
|
+
* — her bileşen ailesi umbrella nesnenin TAMAMINI değil sadece kendi
|
|
542
|
+
* alanını inject eder. `computed()` içindeki `labels` referansı DIŞARIDA
|
|
543
|
+
* (factory'nin senkron gövdesinde) `inject()` edildiği için geçerli bir DI
|
|
544
|
+
* bağlamında çözülüyor; `computed`'ın kendi callback'i içinde `inject()`
|
|
545
|
+
* çağırmak ÇALIŞMAZ (lazy değerlendirme DI bağlamının dışında kalır).
|
|
546
|
+
*/
|
|
547
|
+
function labelToken(key, name) {
|
|
548
|
+
return new InjectionToken(`mesgflow.${name}-labels`, {
|
|
549
|
+
factory: () => {
|
|
550
|
+
const labels = inject(MF_LABELS);
|
|
551
|
+
return computed(() => labels()[key]);
|
|
552
|
+
},
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
const MF_COMMON_LABELS = labelToken('common', 'common');
|
|
556
|
+
const MF_DIALOG_LABELS = labelToken('dialog', 'dialog');
|
|
557
|
+
const MF_DATE_PICKER_LABELS = labelToken('datePicker', 'date-picker');
|
|
558
|
+
const MF_TIME_PICKER_LABELS = labelToken('timePicker', 'time-picker');
|
|
559
|
+
const MF_TABLE_LABELS = labelToken('table', 'table');
|
|
560
|
+
const MF_SIDEBAR_LABELS = labelToken('sidebar', 'sidebar');
|
|
561
|
+
const MF_TABS_LABELS = labelToken('tabs', 'tabs');
|
|
562
|
+
const MF_DROPZONE_LABELS = labelToken('dropzone', 'dropzone');
|
|
563
|
+
const MF_COLOR_PICKER_LABELS = labelToken('colorPicker', 'color-picker');
|
|
564
|
+
const MF_BOX_INPUT_LABELS = labelToken('boxInput', 'box-input');
|
|
565
|
+
const MF_COMBOBOX_LABELS = labelToken('combobox', 'combobox');
|
|
566
|
+
const MF_SELECT_LABELS = labelToken('select', 'select');
|
|
567
|
+
const MF_SEARCH_INPUT_LABELS = labelToken('searchInput', 'search-input');
|
|
568
|
+
const MF_TOAST_LABELS = labelToken('toast', 'toast');
|
|
569
|
+
const MF_OTP_INPUT_LABELS = labelToken('otpInput', 'otp-input');
|
|
570
|
+
const MF_STEPPER_LABELS = labelToken('stepper', 'stepper');
|
|
571
|
+
const MF_PROGRESS_LABELS = labelToken('progress', 'progress');
|
|
572
|
+
const MF_PASSWORD_INPUT_LABELS = labelToken('passwordInput', 'password-input');
|
|
573
|
+
const MF_CHIP_LABELS = labelToken('chip', 'chip');
|
|
574
|
+
const MF_ALERT_LABELS = labelToken('alert', 'alert');
|
|
575
|
+
const MF_BREADCRUMB_LABELS = labelToken('breadcrumb', 'breadcrumb');
|
|
576
|
+
const MF_AVATAR_GROUP_LABELS = labelToken('avatarGroup', 'avatar-group');
|
|
577
|
+
const MF_CHART_LABELS = labelToken('chart', 'chart');
|
|
578
|
+
const MF_COMMAND_LABELS = labelToken('command', 'command');
|
|
579
|
+
const MF_CHARACTER_COUNT_LABELS = labelToken('characterCount', 'character-count');
|
|
580
|
+
const MF_COPY_LABELS = labelToken('copy', 'copy');
|
|
581
|
+
const MF_PAGINATION_LABELS = labelToken('pagination', 'pagination');
|
|
582
|
+
const MF_TOUR_LABELS = labelToken('tour', 'tour');
|
|
583
|
+
const MF_RATING_LABELS = labelToken('rating', 'rating');
|
|
584
|
+
const MF_THEME_SWITCHER_LABELS = labelToken('themeSwitcher', 'theme-switcher');
|
|
585
|
+
const MF_TREE_SELECT_LABELS = labelToken('treeSelect', 'tree-select');
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* `app.config.ts`'in `providers` dizisine eklenir — `MF_LABELS`/`MF_DATE_LOCALE`'ı
|
|
589
|
+
* (ve bunlardan türeyen `MF_DIALOG_LABELS`/`MF_TABLE_LABELS`/… seçici
|
|
590
|
+
* token'larını, bkz. `tokens.ts`) tüketicinin verdiği değerlerle sağlar.
|
|
591
|
+
* Hiç çağrılmazsa kit İngilizce varsayılanlarla (`mfLabelsEn`, `enUS`) çalışır.
|
|
592
|
+
*
|
|
593
|
+
* ```ts
|
|
594
|
+
* import { provideMesgflowUi } from '@mesgflow/ui-kit';
|
|
595
|
+
* import { mfLabelsTr } from '@mesgflow/ui-kit/i18n/tr';
|
|
596
|
+
* import { tr } from 'date-fns/locale';
|
|
597
|
+
*
|
|
598
|
+
* providers: [provideMesgflowUi({ labels: mfLabelsTr, dateLocale: tr })]
|
|
599
|
+
* ```
|
|
600
|
+
*/
|
|
601
|
+
function provideMesgflowUi(options = {}) {
|
|
602
|
+
const providers = [];
|
|
603
|
+
if (options.labels !== undefined) {
|
|
604
|
+
const labelsOption = options.labels;
|
|
605
|
+
providers.push({
|
|
606
|
+
provide: MF_LABELS,
|
|
607
|
+
useFactory: () => isSignal(labelsOption)
|
|
608
|
+
? computed(() => mergeLabels(mfLabelsEn, labelsOption()))
|
|
609
|
+
: signal(mergeLabels(mfLabelsEn, labelsOption)),
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
if (options.dateLocale) {
|
|
613
|
+
const dateLocale = options.dateLocale;
|
|
614
|
+
providers.push({ provide: MF_DATE_LOCALE, useFactory: () => signal(dateLocale) });
|
|
615
|
+
}
|
|
616
|
+
return makeEnvironmentProviders(providers);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* Generated bundle index. Do not edit.
|
|
621
|
+
*/
|
|
622
|
+
|
|
623
|
+
export { MF_ALERT_LABELS, MF_AVATAR_GROUP_LABELS, MF_BOX_INPUT_LABELS, MF_BREADCRUMB_LABELS, MF_CHARACTER_COUNT_LABELS, MF_CHART_LABELS, MF_CHIP_LABELS, MF_COLOR_PICKER_LABELS, MF_COMBOBOX_LABELS, MF_COMMAND_LABELS, MF_COMMON_LABELS, MF_COPY_LABELS, MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, MF_DIALOG_LABELS, MF_DROPZONE_LABELS, MF_LABELS, MF_OTP_INPUT_LABELS, MF_PAGINATION_LABELS, MF_PASSWORD_INPUT_LABELS, MF_PROGRESS_LABELS, MF_RATING_LABELS, MF_SEARCH_INPUT_LABELS, MF_SELECT_LABELS, MF_SIDEBAR_LABELS, MF_STEPPER_LABELS, MF_TABLE_LABELS, MF_TABS_LABELS, MF_THEME_SWITCHER_LABELS, MF_TIME_PICKER_LABELS, MF_TOAST_LABELS, MF_TOUR_LABELS, MF_TREE_SELECT_LABELS, ValueAccessorBase, cn, containerSurface, controlSize, controlSurface, disabledRecipe, errorRecipe, focusRecipe, glassSurface, inlineStartRatio, isRtl, mergeLabels, mfLabelsEn, nextId, overlayPositions, overlaySurface, pressRecipe, provideMesgflowUi, scrollFromInlineStart, transitionRecipe };
|
|
624
|
+
//# sourceMappingURL=mesgflow-ui-kit-core.mjs.map
|